ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiOGUxZgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsMTc5IEBACisqIHRleHQ9YXV0byAhZW9sCisKKyouYyB0ZXh0ICFlb2wKKyouY2MgdGV4dCAhZW9sCisqLmNsYXNzcGF0aCB0ZXh0ICFlb2wKKyouY3BwIHRleHQgIWVvbAorKi5jc3MgdGV4dCAhZW9sCisqLmRzcCB0ZXh0ICFlb2wKKyouZHN3IHRleHQgIWVvbAorKi5maWx0ZXJzIHRleHQgIWVvbAorKi5oIHRleHQgIWVvbAorKi5odG0gdGV4dCAhZW9sCisqLmh0bWwgdGV4dCAhZW9sCisqLmluIHRleHQgIWVvbAorKi5qYXZhIHRleHQgIWVvbAorKi5sYXVuY2ggdGV4dCAhZW9sCisqLm1hayB0ZXh0ICFlb2wKKyoubWQgdGV4dCAhZW9sCisqLk1GIHRleHQgIWVvbAorKi5tayB0ZXh0ICFlb2wKKyoucGwgdGV4dCAhZW9sCisqLnBtIHRleHQgIWVvbAorKi5wcm9qZWN0IHRleHQgIWVvbAorKi5wcm9wZXJ0aWVzIHRleHQgIWVvbAorKi5weSB0ZXh0ICFlb2wKKyoucmMgdGV4dCAhZW9sCisqLnNoIHRleHQgZW9sPWxmCisqLnNsbiB0ZXh0ICFlb2wKKyouc3R1YiB0ZXh0ICFlb2wKKyoudHh0IHRleHQgIWVvbAorKi51Y20gdGV4dCAhZW9sCisqLnZjcHJvaiB0ZXh0ICFlb2wKKyoudmN4cHJvaiB0ZXh0ICFlb2wKKyoueG1sIHRleHQgIWVvbAorKi54c2wgdGV4dCAhZW9sCisqLnhzbHQgdGV4dCAhZW9sCitNYWtlZmlsZSB0ZXh0ICFlb2wKK2NvbmZpZ3VyZSB0ZXh0ICFlb2wKK0xJQ0VOU0UgdGV4dCAhZW9sCitSRUFETUUgdGV4dCAhZW9sCisKKyouYmluIC10ZXh0CisqLmJyayAtdGV4dAorKi5jbnYgLXRleHQKKyouaWN1IC10ZXh0CisqLnJlcyAtdGV4dAorKi5ucm0gLXRleHQKKyouc3BwIC10ZXh0CisqLnRyaTIgLXRleHQKKworY3VycmVuY3kvLmNsYXNzcGF0aCAtdGV4dAorY3VycmVuY3kvLnByb2plY3QgLXRleHQKK2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyAtdGV4dAorY3VycmVuY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIC10ZXh0CitjdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIC10ZXh0CittdWx0aS9jL01ha2VmaWxlLWMuaW5jIC10ZXh0CittdWx0aS9jL3BhdGNoLzNfMCAtdGV4dAorbXVsdGkvYy9wYXRjaC8zXzIgLXRleHQKK211bHRpL2MvcGF0Y2gvM180XzEgLXRleHQKK211bHRpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMgLXRleHQKK211bHRpL2ovTWFrZWZpbGUtai5pbmMgLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlIC10ZXh0CittdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZS5sb2NhbC5zYW1wbGUgLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2MgLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2ogLXRleHQKK211bHRpL3Byb2ovaWN1NGNzY2FuL2R0ZC9pY3VjYXBzLmR0ZCAtdGV4dAorbXVsdGkvcHJvai9pY3U0Y3NjYW4vb2xkLXhtbHMudGFyLmJ6MiAtdGV4dAorbXVsdGkvcHJvai9pY3U0Y3NjYW4vemFwcGl0LnNlZCAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vLmNsYXNzcGF0aCAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vLnByb2plY3QgLXRleHQKK211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBEb2N1bWVudC5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRWxlbWVudC5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwTm9kZS5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwU2Nhbi5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbklDVS5qYXZhIC10ZXh0CittdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbkphdmEuamF2YSAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NpbXBsZVNjYW4uamF2YSAtdGV4dAorbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NwaW5uZXIuamF2YSAtdGV4dAorbXVsdGkvcHJvai9wcm92aWRlci9NYWtlZmlsZS5sb2NhbC1zYW1wbGUgLXRleHQKK211bHRpL3Byb2ovcHJvdmlkZXIvaWN1LWNvbmZpZy5zZWQgLXRleHQKK211bHRpL3Byb2ovcHJvdmlkZXIvcmVhZG1lLnR4dCAtdGV4dAorcmVsZWFzZS9jL2JvbWZpeC5weSAtdGV4dAorcmVsZWFzZS9qYXZhLy5jbGFzc3BhdGggLXRleHQKK3JlbGVhc2UvamF2YS8ucHJvamVjdCAtdGV4dAorcmVsZWFzZS9qYXZhL01ha2VmaWxlIC10ZXh0CityZWxlYXNlL2phdmEvaWN1NGMuY3NzIC10ZXh0CityZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuY194bWwueHNsdCAtdGV4dAorcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuY194bWwueHNsdCAtdGV4dAorcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5yZXBvcnRfeG1sLnhzbHQgLXRleHQKK3NjcmlwdHMvaWN1cnVuIC10ZXh0CitzY3JpcHRzL3JldGlja2V0IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9fX2luaXRfXy5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvZGN1dC5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvaHRkb2NzL2Nzcy9pY3V4dG4uY3NzIC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9odGRvY3MvanMvcmV2aWV3LmpzIC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9yZXZpZXcucHkgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9ub3RoaW5nLmh0bWwgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9yZXZpZXcuaHRtbCAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90a3RsaXN0LnB5IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL2xpY2Vuc2UuaHRtbCAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9yZWFkbWUudHh0IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLmNmZyAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9zZXR1cC5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvX19pbml0X18ucHkgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2RjdXQucHkgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2h0ZG9jcy9jc3MvaWN1eHRuLmNzcyAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvaHRkb2NzL2pzL3Jldmlldy5qcyAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5IC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvbm90aGluZy5odG1sIC10ZXh0Cit0cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RpY2tldG1nci5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGt0bGlzdC5weSAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9saWNlbnNlLmh0bWwgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvcmVhZG1lLnR4dCAtdGV4dAordHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9zZXR1cC5jZmcgLXRleHQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAucHkgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvYXJyb3dfYnVsbGV0LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL2libV9sb2dvX3NtYWxsX3doaXRlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL1JCUmVwb3J0ZXIuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfZmlsZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19ncm91cC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19yZXNvdXJjZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY190cmFuc2xhdGlvbi5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY191bnRyYW5zbGF0ZWQuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvY3JlYXRlX2dyb3VwLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X2dyb3VwLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3Jlc291cmNlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3NjcmVlbi5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV93aXRoX3ByZWZlcmVuY2VzLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tZXRhbC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfbW90aWYuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbGFmX3dpbmRvd3MuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbG9va3VwX3Jlc291cmNlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21haW5fcGFnZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlX2V4cG9ydC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGVfaW1wb3J0LmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfaGVscC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X29wdGlvbnMuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9wb3B1cF90cmVlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL25ld19iYXNlY2xhc3MuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2J1bmRsZS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9wcmVmZXJlbmNlc19kaWFsb2cuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfYnVuZGxlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfZ3JvdXBzX2ZpbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zZWFyY2guZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zdGF0c19idW5kbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zdGF0c19maWxlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdHJlZV9iYXNpYy5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfYnVuZGxlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19kaWFsb2cwLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19maWxlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NwYWNlci5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfdS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9idW5kbGUuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fY291bnRyeS5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9maWxlLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2dyb3VwLmdpZiAtdGV4dAordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2l0ZW0uZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fbGFuZ3VhZ2UuZ2lmIC10ZXh0Cit1bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fcHJvamVjdC5naWYgLXRleHQKK3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl92YXJpYW50LmdpZiAtdGV4dAorCisjIFRoZSBmb2xsb3dpbmcgZmlsZSB0eXBlcyBhcmUgc3RvcmVkIGluIEdpdC1MRlMuCisqLmphciBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorKi5kYXQgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKyouemlwIGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisqLmd6IGZpbHRlcj1sZnMgZGlmZj1sZnMgbWVyZ2U9bGZzIC10ZXh0CisqLmJ6MiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxmcyAtdGV4dAorKi5naWYgZmlsdGVyPWxmcyBkaWZmPWxmcyBtZXJnZT1sZnMgLXRleHQKKwpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiOGFlMAotLS0gL2Rldi9udWxsCisrKyBiLy5naXRpZ25vcmUKQEAgLTAsMCArMSw1NSBAQAorbXVsdGkvYy9NYWtlZmlsZS5sb2NhbAorbXVsdGkvcGFja2FnZXMvKi5qYXIKK211bHRpL3BhY2thZ2VzLyoudGd6CittdWx0aS9wcm9qL2NoZWxsby9vdXQKK211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlLmxvY2FsCittdWx0aS9wcm9qL2ljdTRjc2Nhbi9jb29rZWQKK211bHRpL3Byb2ovaWN1NGNzY2FuL2R0ZGNhY2hlCittdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sCittdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwKK211bHRpL3Byb2ovaWN1NGpzY2FuL2JpbgorbXVsdGkvcHJvai9wcm92aWRlci9NYWtlZmlsZS5sb2NhbAorbXVsdGkvcHJvai9wcm92aWRlci9vdXQKK211bHRpL3RtcAorcmVsZWFzZS9jL3Vjb25maWd0ZXN0CityZWxlYXNlL2MvdWNvbmZpZ3Rlc3QubG9jYWwKK3JlbGVhc2UvamF2YS9BUElDaGFuZ2VSZXBvcnQqCityZWxlYXNlL2phdmEvTWFrZWZpbGUubG9jYWwKK3JlbGVhc2UvamF2YS9jbGFzc2VzCityZWxlYXNlL2phdmEvbGliCit0cmFjL0ljdUNvZGVUb29scy8wLjExLyouZWdnLWluZm8KK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvYnVpbGQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzLyoucHljCit0cmFjL0ljdUNvZGVUb29scy8wLjEyLyouZWdnLWluZm8KK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvYnVpbGQKK3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzLyoucHljCit1bmljb2RlL2MvZ2VucHJvcHMvKi5kCit1bmljb2RlL2MvZ2VucHJvcHMvKi5uY2IKK3VuaWNvZGUvYy9nZW5wcm9wcy8qLm8KK3VuaWNvZGUvYy9nZW5wcm9wcy8qLm9wdAordW5pY29kZS9jL2dlbnByb3BzLyoucGRiCit1bmljb2RlL2MvZ2VucHJvcHMvKi5wbGcKK3VuaWNvZGUvYy9nZW5wcm9wcy9EZWJ1ZwordW5pY29kZS9jL2dlbnByb3BzL01ha2VmaWxlCit1bmljb2RlL2MvZ2VucHJvcHMvUmVsZWFzZQordW5pY29kZS9jL2dlbnByb3BzL2RlYnVnCit1bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMKK3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy5bMC05XQordW5pY29kZS9jL2dlbnByb3BzL2dlbnByb3BzLnZjcHJvai4qLioudXNlcgordW5pY29kZS9jL2dlbnByb3BzL3JlbGVhc2UKK3VuaWNvZGUvYy9nZW5wcm9wcy94NjQKK3VuaWNvZGUvYy9nZW5wcm9wcy94ODYKK3VuaWNvZGUvYy9nZW51Y2EvKi5kCit1bmljb2RlL2MvZ2VudWNhLyoubwordW5pY29kZS9jL2dlbnVjYS8qLnBkYgordW5pY29kZS9jL2dlbnVjYS9EZWJ1ZwordW5pY29kZS9jL2dlbnVjYS9NYWtlZmlsZQordW5pY29kZS9jL2dlbnVjYS9SZWxlYXNlCit1bmljb2RlL2MvZ2VudWNhL2RlYnVnCit1bmljb2RlL2MvZ2VudWNhL2dlbnVjYQordW5pY29kZS9jL2dlbnVjYS9nZW51Y2EuOAordW5pY29kZS9jL2dlbnVjYS9nZW51Y2EudmNwcm9qLiouKi51c2VyCit1bmljb2RlL2MvZ2VudWNhL3JlbGVhc2UKK3VuaWNvZGUvYy9nZW51Y2EveDY0Cit1bmljb2RlL2MvZ2VudWNhL3g4NgordW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2xpYgpkaWZmIC0tZ2l0IGEvY29scHJvYmUvTWFrZWZpbGUuaW4gYi9jb2xwcm9iZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmJlZmZkCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4MSBAQAorIyMgTWFrZWZpbGUuaW4gZm9yIElDVSAtIGV4dHJhL2NvbHByb2JlCisjIyBDb3B5cmlnaHQgKGMpIDIwMDEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisjIyBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyMjIFNvdXJjZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24KK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKK3RvcF9idWlsZGRpciA9IC4uLy4uCisKK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL2ljdWRlZnMubWsKKworIyMgQnVpbGQgZGlyZWN0b3J5IGluZm9ybWF0aW9uCitzdWJkaXIgPSBleHRyYS9jb2xwcm9iZQorCisjIyBFeHRyYSBmaWxlcyB0byByZW1vdmUgZm9yICdtYWtlIGNsZWFuJworQ0xFQU5GSUxFUyA9ICp+ICQoREVQUykKKworIyMgVGFyZ2V0IGluZm9ybWF0aW9uCitUQVJHRVQgPSBjb2xwcm9iZSAKK0xPTkdOQU1FID0gbG9uZ25hbWUKKworQ1BQRkxBR1MgKz0gLUkkKHRvcF9zcmNkaXIpL2NvbW1vbiAtSSQodG9wX3NyY2RpcikvaTE4biAtSSQodG9wX3NyY2RpcikvdG9vbHMvdG9vbHV0aWwgLUkkKHRvcF9zcmNkaXIpL2lvCitMSUJTID0gJChMSUJJQ1VJMThOKSAkKExJQklDVVVDKSAkKExJQlVTVERJTykgJChMSUJJQ1VUT09MVVRJTCkgJChERUZBVUxUX0xJQlMpICQoTElCX00pCisKK09CSkVDVFMgPSBjb2xwcm9iZU5ldy5vIGxpbmUubyBzb3J0ZWRsaW5lcy5vIHN0cmVuZ3RocHJvYmUubyB1cHJpbnRlci5vIAorTE9OR05BTUVfT0JKID0gbG9uZ25hbWUubworCitERVBTID0gJChPQkpFQ1RTOi5vPS5kKQorTE9OR05BTUVfREVQUyA9ICQoTE9OR05BTUVfT0JKOi5vPS5kKQorCisjIyBMaXN0IG9mIHBob255IHRhcmdldHMKKy5QSE9OWSA6IGFsbCBhbGwtbG9jYWwgaW5zdGFsbCBpbnN0YWxsLWxvY2FsIGNsZWFuIGNsZWFuLWxvY2FsCVwKK2Rpc3RjbGVhbiBkaXN0Y2xlYW4tbG9jYWwgZGlzdCBkaXN0LWxvY2FsIGNoZWNrIGNoZWNrLWxvY2FsCisKKyMjIENsZWFyIHN1ZmZpeCBsaXN0CisuU1VGRklYRVMgOgorCisjIyBMaXN0IG9mIHN0YW5kYXJkIHRhcmdldHMKK2FsbDogYWxsLWxvY2FsCitpbnN0YWxsOiBpbnN0YWxsLWxvY2FsCitjbGVhbjogY2xlYW4tbG9jYWwKK2Rpc3RjbGVhbiA6IGRpc3RjbGVhbi1sb2NhbAorZGlzdDogZGlzdC1sb2NhbAorY2hlY2s6IGFsbCBjaGVjay1sb2NhbAorCithbGwtbG9jYWw6ICQoVEFSR0VUKQorCitpbnN0YWxsLWxvY2FsOgorCitkaXN0LWxvY2FsOgorCitjbGVhbi1sb2NhbDoKKwl0ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCAkKFJNVikgJChDTEVBTkZJTEVTKQorCSQoUk1WKSAkKE9CSkVDVFMpICQoVEFSR0VUKQorCitkaXN0Y2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsCisJJChSTVYpIE1ha2VmaWxlCisKK2NoZWNrLWxvY2FsOiBhbGwtbG9jYWwKKworTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAgJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcikgXAorCSAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKworJChUQVJHRVQpIDogJChPQkpFQ1RTKQorCSQoTElOSy5jYykgLW8gJEAgJF4gJChMSUJTKQorCiskKExPTkdOQU1FKSA6ICQoTE9OR05BTUVfT0JKKQorCSQoTElOSy5jYykgLW8gJEAgJF4gJChMSUJTKQorCitpbnZva2U6CisJSUNVX0RBVEE9JCR7SUNVX0RBVEE6LSQodG9wX2J1aWxkZGlyKS9kYXRhL30gVFo9UFNUOFBEVCAkKElOVk9LRSkgJChJTlZPQ0FUSU9OKQorCitpZmVxICgsJChNQUtFQ01ER09BTFMpKQorLWluY2x1ZGUgJChERVBTKQorZWxzZQoraWZuZXEgKCQocGF0c3Vic3QgJWNsZWFuLCwkKE1BS0VDTURHT0FMUykpLCkKKy1pbmNsdWRlICQoREVQUykKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29scHJvYmUvY29scHJvYmUuY3BwIGIvY29scHJvYmUvY29scHJvYmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzUxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9jb2xwcm9iZS5jcHAKQEAgLTAsMCArMSwxNzMwIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBGaWxlIGNvbHByb2JlLmNwcAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDAzLzE4LzIwMDMgIHdlaXYgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgInVvcHRpb25zLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y29sLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y29sZWl0ci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXJlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS91c2V0aXRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNoYXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzY3JpcHQuaCIKKyNpbmNsdWRlICJ1cHJvcHMuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAidWNvbF9pbXAuaCIKKworI2luY2x1ZGUgInVuaWNvZGUvdXN0ZGlvLmgiCisjaW5jbHVkZSAidW5pY29kZS91dHJhbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAiY29scHJvYmUuaCIKKworCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorLy8KKy8vICBTdHVicyBmb3IgV2luZG93cyBBUEkgZnVuY3Rpb25zIHdoZW4gYnVpbGRpbmcgb24gVU5JWGVzLgorLy8KK3R5cGVkZWYgaW50IERXT1JEOworaW5saW5lIGludCBDb21wYXJlU3RyaW5nVyhEV09SRCwgRFdPUkQsIFVDaGFyICosIGludCwgVUNoYXIgKiwgaW50KSB7cmV0dXJuIDA7fTsKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgordW5zaWduZWQgbG9uZyB0aW1lR2V0VGltZSgpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0OworICAgIGdldHRpbWVvZmRheSgmdCwgMCk7CisgICAgdW5zaWduZWQgbG9uZyB2YWwgPSB0LnR2X3NlYyAqIDEwMDA7ICAvLyBMZXQgaXQgb3ZlcmZsb3cuICBXaG8gY2FyZXMuCisgICAgdmFsICs9IHQudHZfdXNlYyAvIDEwMDA7CisgICAgcmV0dXJuIHZhbDsKK307CitpbmxpbmUgaW50IExDTWFwU3RyaW5nVyhEV09SRCwgRFdPUkQsIFVDaGFyICosIGludCwgVUNoYXIgKiwgaW50KSB7cmV0dXJuIDA7fTsKK2NvbnN0IGludCBMQ01BUF9TT1JUS0VZID0gMDsKKyNkZWZpbmUgTUFLRUxDSUQoYSxiKSAwCitjb25zdCBpbnQgU09SVF9ERUZBVUxUID0gMDsKKyNlbmRpZgorCisjaW5jbHVkZSAibGluZS5oIgorCitzdGF0aWMgVUJvb2wgZ1ZlcmJvc2UgPSBGQUxTRTsKK3N0YXRpYyBVQm9vbCBnRGVidWcgPSBGQUxTRTsKK3N0YXRpYyBVQm9vbCBnUXVpZXQgPSBGQUxTRTsKK3N0YXRpYyBVQm9vbCBnRXhlbXBsYXIgPSBGQUxTRTsKKworRFdPUkQgICAgICAgICAgZ1dpbkxDSUQ7CitpbnQgICAgICAgICAgICBnQ291bnQ7CitMaW5lICAgICAgICAgICoqZ0lDVUxpbmVzOworVUNvbGxhdG9yICAgICAqZ0NvbDsKK1VDb2xsYXRvciAgICAgKmdVQ0E7CitMaW5lICAgICAgICAgIHNvdXJjZTsKK0xpbmUgICAgICAgICAgdGFyZ2V0OworTGluZSAgICAgICAgICAqZ1NvdXJjZSA9ICZzb3VyY2U7CitMaW5lICAgICAgICAgICpnVGFyZ2V0ID0gJnRhcmdldDsKK0hhc2h0YWJsZSAgICAgZ0VsZW1lbnRzKEZBTFNFKTsKK0hhc2h0YWJsZSAgICAgZ0V4cGFuc2lvbnMoRkFMU0UpOworQ29tcGFyZUZuIGdDb21wYXJlcjsKKworY29uc3QgVUNoYXIgc2VwYXJhdG9yQ2hhciA9IDB4MDAzMDsKKworVUZJTEUgKm91dCA9IE5VTEw7CitVRklMRSAqZXJyID0gTlVMTDsKK1VGSUxFICpsb2cgPSBOVUxMOyAKKworY29uc3QgY2hhciAqcHJvZ05hbWUgPSAiY29scHJvYmUiOworCitjb25zdCBjaGFyICpnTG9jYWxlID0gTlVMTDsKKy8vY2hhciBwbGF0Zm9ybVsyNTZdOworaW50MzJfdCBwbGF0Zm9ybUluZGV4ID0gLTE7CitpbnQzMl90IGdQbGF0Zm9ybU5vID0gMDsKK2ludDMyX3QgZ1BsYXRmb3JtSW5kZXhlc1sxMF07CitpbnQzMl90IGdMb2NhbGVObyA9IDA7Citjb25zdCBjaGFyKiBnTG9jYWxlc1sxMDBdOworVUJvb2wgZ1J1bGVzU3RkaW4gPSBGQUxTRTsKKworZW51bSB7CisgIEhFTFAxLAorICAgIEhFTFAyLAorICAgIFZFUkJPU0UsCisgICAgUVVJRVQsCisgICAgVkVSU0lPTiwKKyAgICBJQ1VEQVRBRElSLAorICAgIENPUFlSSUdIVCwKKyAgICBMT0NBTEUsCisgICAgUExBVEZPUk0sCisgICAgREVCVUcsIAorICAgIEVYRU1QTEFSLAorICAgIFJVTEVTU1RESU4KK307CisKK1VPcHRpb24gb3B0aW9uc1tdPXsKKyAgLyowKi8gVU9QVElPTl9IRUxQX0gsCisgIC8qMSovIFVPUFRJT05fSEVMUF9RVUVTVElPTl9NQVJLLAorICAvKjIqLyBVT1BUSU9OX1ZFUkJPU0UsCisgIC8qMyovIFVPUFRJT05fUVVJRVQsCisgIC8qNCovIFVPUFRJT05fVkVSU0lPTiwKKyAgLyo1Ki8gVU9QVElPTl9JQ1VEQVRBRElSLAorICAvKjYqLyBVT1BUSU9OX0NPUFlSSUdIVCwKKyAgLyo3Ki8gVU9QVElPTl9ERUYoImxvY2FsZSIsICdsJywgVU9QVF9SRVFVSVJFU19BUkcpLAorICAvKjgqLyBVT1BUSU9OX0RFRigicGxhdGZvcm0iLCAncCcsIFVPUFRfUkVRVUlSRVNfQVJHKSwKKyAgLyo5Ki8gVU9QVElPTl9ERUYoImRlYnVnIiwgJ0QnLCBVT1BUX05PX0FSRyksCisgIC8qMTAqLyBVT1BUSU9OX0RFRigiZXhlbXBsYXIiLCAnRScsIFVPUFRfTk9fQVJHKSwKKyAgLyoxMSovIFVPUFRJT05fREVGKCJydWxlc3N0ZGluIiwgJ1InLCBVT1BUX05PX0FSRykKK307CisKK2ludCBXaW5zdHJjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgeworICAgIGdDb3VudCsrOworICAgIGludCB0OworICAgIHQgPSBDb21wYXJlU3RyaW5nVyhnV2luTENJRCwgMCwgCisgICAgICAoKihMaW5lICoqKWEpLT5uYW1lLCAoKihMaW5lICoqKWEpLT5sZW4sIAorICAgICAgKCooTGluZSAqKiliKS0+bmFtZSwgKCooTGluZSAqKiliKS0+bGVuKTsKKyAgICByZXR1cm4gdC0yOworfQorCitpbnQgSUNVc3RyY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKKyAgICBnQ291bnQrKzsKKyAgICBVQ29sbGF0aW9uUmVzdWx0IHQ7CisgICAgdCA9IHVjb2xfc3RyY29sbChnQ29sLCAKKyAgICAgICgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYSktPmxlbiwgIAorICAgICAgKCooTGluZSAqKiliKS0+bmFtZSwgKCooTGluZSAqKiliKS0+bGVuKTsKKyAgICBpZiAodCA9PSBVQ09MX0xFU1MpIHJldHVybiAtMTsKKyAgICBpZiAodCA9PSBVQ09MX0dSRUFURVIpIHJldHVybiArMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RydWN0IHsKKyAgY29uc3QgY2hhciogbmFtZTsKKyAgQ29tcGFyZUZuIGNvbXBhcmVyOworfSBwbGF0Zm9ybXNbXSA9IHsKKyAgeyAiaWN1IiwgSUNVc3RyY21wIH0sCisgIHsgIndpbiIsIFdpbnN0cmNtcH0KK307CisKKwordm9pZCBkZWxldGVMaW5lRWxlbWVudCh2b2lkICpsaW5lKSB7CisgIGRlbGV0ZSgoTGluZSAqKWxpbmUpOworfQorCit2b2lkIHN0cmluZ1RvTG93ZXIoY2hhciAqc3RyaW5nKSB7CisgIHVpbnQzMl90IGkgPSAwOworICBmb3IoaSA9IDA7IGkgPCBzdHJsZW4oc3RyaW5nKTsgaSsrKSB7CisgICAgc3RyaW5nW2ldID0gdG9sb3dlcihzdHJpbmdbaV0pOworICB9Cit9CisKK3ZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbmFtZSkgeworICB1X2ZwcmludGYob3V0LCAiVXNhZ2U6ICVzIC0tbG9jYWxlIGxvY19uYW1lIC0tcGxhdGZvcm0gcGxhdGZvcm1cbiIsIG5hbWUpOworfQorCit2b2lkIGxpc3RLbm93blBsYXRmb3JtcygpIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgdV9mcHJpbnRmKGVyciwgIktub3duIHBsYXRmb3JtczpcbiIpOworICBmb3IoaSA9IDA7IGkgPCBzaXplb2YocGxhdGZvcm1zKS9zaXplb2YocGxhdGZvcm1zWzBdKTsgaSsrKSB7CisgICAgdV9mcHJpbnRmKGVyciwgIlx0JXNcbiIsIHBsYXRmb3Jtc1tpXSk7CisgIH0KK30KKwordm9pZCBhZGRQbGF0Zm9ybShjb25zdCBjaGFyICpwbGF0Zm9ybSkgeworICBpbnQzMl90IGk7CisgIC8vc3RyaW5nVG9Mb3dlcihwbGF0Zm9ybSk7CisgIGludDMyX3Qgb2xkUGxhdGZvcm1ObyA9IGdQbGF0Zm9ybU5vOworCisgIGZvcihpID0gMDsgaSA8IHNpemVvZihwbGF0Zm9ybXMpL3NpemVvZihwbGF0Zm9ybXNbMF0pOyBpKyspIHsKKyAgICBpZihzdHJjbXAocGxhdGZvcm0sIHBsYXRmb3Jtc1tpXS5uYW1lKSA9PSAwKSB7CisgICAgICBnUGxhdGZvcm1JbmRleGVzW2dQbGF0Zm9ybU5vKytdID0gaTsKKyAgICB9CisgIH0KKyAgaWYoZ1BsYXRmb3JtTm8gPT0gb2xkUGxhdGZvcm1ObykgeworICAgIHVfZnByaW50ZihlcnIsICJVbmtub3duIHBsYXRmb3JtICVzXG4iLCBwbGF0Zm9ybSk7CisgICAgbGlzdEtub3duUGxhdGZvcm1zKCk7CisgIH0KK30KKwordm9pZCBwcm9jZXNzQXJncyhpbnQgYXJnYywgY2hhciogYXJndltdLCBVRXJyb3JDb2RlICZzdGF0dXMpCit7CisgIGludDMyX3QgaSA9IDA7CisgIFVfTUFJTl9JTklUX0FSR1MoYXJnYywgYXJndik7CisKKyAgYXJnYyA9IHVfcGFyc2VBcmdzKGFyZ2MsIGFyZ3YsIChpbnQzMl90KShzaXplb2Yob3B0aW9ucykvc2l6ZW9mKG9wdGlvbnNbMF0pKSwgb3B0aW9ucyk7CisKKyAgaWYoYXJnYyA8IDApIHsKKyAgICB1X2ZwcmludGYoZXJyLCAiVW5rbm93biBvcHRpb246ICVzXG4iLCBhcmd2Wy1hcmdjXSk7CisgICAgdXNhZ2UocHJvZ05hbWUpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmKG9wdGlvbnNbMF0uZG9lc09jY3VyIHx8IG9wdGlvbnNbMV0uZG9lc09jY3VyKSB7CisgICAgdXNhZ2UocHJvZ05hbWUpOworICAgIHJldHVybjsKKyAgfQorICBpZihvcHRpb25zW1ZFUkJPU0VdLmRvZXNPY2N1cikgeworICAgIGdWZXJib3NlID0gVFJVRTsKKyAgfQorICBpZihvcHRpb25zW0RFQlVHXS5kb2VzT2NjdXIpIHsKKyAgICBnRGVidWcgPSBUUlVFOworICAgIGdWZXJib3NlID0gVFJVRTsKKyAgfQorICBpZihvcHRpb25zW0VYRU1QTEFSXS5kb2VzT2NjdXIpIHsKKyAgICBnRXhlbXBsYXIgPSBUUlVFOworICB9CisgIGlmKG9wdGlvbnNbUVVJRVRdLmRvZXNPY2N1cikgeworICAgIGdRdWlldCA9IFRSVUU7CisgIH0KKy8qCisgIGZvcihpID0gODsgaSA8IDk7IGkrKykgeworICAgIGlmKCFvcHRpb25zW2ldLmRvZXNPY2N1cikgeworICAgICAgdV9mcHJpbnRmKGVyciwgIk9wdGlvbiAlcyBpcyByZXF1aXJlZCFcbiIsIG9wdGlvbnNbaV0ubG9uZ05hbWUpOworICAgICAgdXNhZ2UocHJvZ05hbWUpOworICAgICAgc3RhdHVzID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgIH0KKyAgICBpZihvcHRpb25zW2ldLnZhbHVlID09IE5VTEwpIHsKKyAgICAgIHVfZnByaW50ZihlcnIsICJPcHRpb24gJXMgbmVlZHMgYW4gYXJndW1lbnQhXG4iLCBvcHRpb25zW2ldLmxvbmdOYW1lKTsKKyAgICAgIHVzYWdlKHByb2dOYW1lKTsKKyAgICAgIHN0YXR1cyA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICB9CisgIH0KKyovCisgIC8vIEFTQ0lJIGJhc2VkIG9wdGlvbnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgLy8gdGhpcyBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2lsbCBhbGxvdyB0byBsb2FkCisgIC8vIHVwIElDVSBydWxlcyBhbmQgdGhlbiBwb2tlIHRocm91Z2ggdGhlbS4KKyAgLy8gSW4gdGhhdCBjYXNlLCB3ZSB0ZXN0IG9ubHkgSUNVIGFuZCBkb24ndCBuZWVkIAorICAvLyBhIGxvY2FsZS4KKyAgaWYob3B0aW9uc1tSVUxFU1NURElOXS5kb2VzT2NjdXIpIHsKKyAgICBnUnVsZXNTdGRpbiA9IFRSVUU7CisgICAgYWRkUGxhdGZvcm0oImljdSIpOworICAgIHJldHVybjsKKyAgfSAKKworICBpZihvcHRpb25zW0xPQ0FMRV0uZG9lc09jY3VyKSB7CisgICAgZ0xvY2FsZSA9IG9wdGlvbnNbTE9DQUxFXS52YWx1ZTsKKyAgfSBlbHNlIHsKKyAgICBmb3IoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKyAgICAgIGdMb2NhbGVzW2dMb2NhbGVObysrXSA9IGFyZ3ZbaV07CisgICAgfQorICB9CisgIGlmKG9wdGlvbnNbUExBVEZPUk1dLmRvZXNPY2N1cikgeworICAgIC8vc3RyY3B5KHBsYXRmb3JtLCBvcHRpb25zW1BMQVRGT1JNXS52YWx1ZSk7CisgICAgLy9hZGRQbGF0Zm9ybSgiaWN1Iik7CisgICAgYWRkUGxhdGZvcm0ob3B0aW9uc1tQTEFURk9STV0udmFsdWUpOworICB9IGVsc2UgeyAvLyB0aGVyZSBpcyBhIGxpc3Qgb2YgcGxhdGZvcm1zIAorICAgIHVfZnByaW50ZihlcnIsICJPcHRpb24gJXMgaXMgcmVxdWlyZWQhXG4iLCBvcHRpb25zW2ldLmxvbmdOYW1lKTsKKyAgICB1c2FnZShwcm9nTmFtZSk7CisgICAgc3RhdHVzID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICB9CisKKyAgLy8KKyAgLy8gIFNldCB1cCBhIFdpbmRvd3MgTENJRAorICAvLworICBnV2luTENJRCA9IHVsb2NfZ2V0TENJRChnTG9jYWxlKTsKKyAgLyoKKyAgaWYgKGdMb2NhbGUgIT0gMCkgeworICAgICAgZ1dpbkxDSUQgPSBNQUtFTENJRChnTG9jYWxlLCBTT1JUX0RFRkFVTFQpOworICB9CisgIGVsc2UgeworICAgICAgZ1dpbkxDSUQgPSB1bG9jX2dldExDSUQoZ0xvY2FsZSk7CisgIH0KKyAgKi8KKworfQorCit2b2lkIHByaW50UnVsZXMoY29uc3QgVUNoYXIgKm5hbWUsIGludDMyX3QgbGVuLCBVRklMRSAqZmlsZSkgeworICAvLyB2ZXJ5IHJ1ZGltZW50YXJ5IHByZXR0eSBydWxlcyBwcmludAorICBpbnQzMl90IGkgPSAwOworICBVQ2hhciB0b1ByaW50WzE2Mzg0XTsKKyAgaW50MzJfdCB0b1ByaW50SW5kZXggPSAwOworICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIGlmKG5hbWVbaV0gPT0gMHgwMDI2KSB7CisgICAgICBpZih0b1ByaW50SW5kZXgpIHsKKyAgICAgICAgdG9QcmludFt0b1ByaW50SW5kZXhdID0gMDsKKyAgICAgICAgdV9mcHJpbnRmKGZpbGUsICIlVVxuIiwgdG9QcmludCk7CisgICAgICAgIHRvUHJpbnRJbmRleCA9IDA7CisgICAgICAgIHRvUHJpbnRbdG9QcmludEluZGV4KytdID0gbmFtZVtpXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRvUHJpbnRbdG9QcmludEluZGV4KytdID0gbmFtZVtpXTsKKyAgICAgIH0gCisgICAgfSBlbHNlIHsKKyAgICAgIHRvUHJpbnRbdG9QcmludEluZGV4KytdID0gbmFtZVtpXTsKKyAgICB9CisgIH0KKyAgaWYodG9QcmludEluZGV4KSB7CisgICAgdG9QcmludFt0b1ByaW50SW5kZXhdID0gMDsKKyAgICB1X2ZwcmludGYoZmlsZSwgIiVVXG4iLCB0b1ByaW50KTsKKyAgICB0b1ByaW50SW5kZXggPSAwOworICB9CisKKworfQorCit2b2lkIGVzY2FwZVN0cmluZyhjb25zdCBVQ2hhciAqbmFtZSwgaW50MzJfdCBsZW4sIFVGSUxFICpmaWxlKSB7CisgIHVfZnByaW50ZihmaWxlLCAiJVUiLCBuYW1lKTsKKy8qCisgIGludDMyX3QgaiA9IDA7CisgIGZvcihqID0gMDsgaiA8IGxlbjsgaisrKSB7CisgICAgaWYobmFtZVtqXSA+PSAweDIwICYmIG5hbWVbal0gPCAweDgwKSB7CisgICAgICB1X2ZwcmludGYoZmlsZSwgIiVjIiwgbmFtZVtqXSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHVfZnByaW50ZihmaWxlLCAiXFx1JTA0WCIsIG5hbWVbal0pOworICAgIH0KKyAgfQorKi8KK30KK3ZvaWQgZXNjYXBlQUxpbmUoTGluZSAqbGluZSwgVUZJTEUgKmZpbGUpIHsKKyAgZXNjYXBlU3RyaW5nKGxpbmUtPm5hbWUsIGxpbmUtPmxlbiwgZmlsZSk7Cit9CisKK3ZvaWQgZXNjYXBlRXhwYW5zaW9uKExpbmUgKmxpbmUsIFVGSUxFICpmaWxlKSB7CisgIGVzY2FwZVN0cmluZyhsaW5lLT5leHBhbnNpb25TdHJpbmcsIGxpbmUtPmV4cExlbiwgZmlsZSk7Cit9CisKK3ZvaWQgc2hvd05hbWVzKExpbmUgKmxpbmUsIFVGSUxFICpmaWxlKSB7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBpbnQzMl90IGogPSAwOworICBjaGFyIGNoYXJOYW1lWzI1Nl07CisgIGZvcihqID0gMDsgaiA8IGxpbmUtPmxlbjsgaisrKSB7CisgICAgdV9jaGFyTmFtZShsaW5lLT5uYW1lW2pdLCBVX0VYVEVOREVEX0NIQVJfTkFNRSwgY2hhck5hbWUsIDI1NiwgJnN0YXR1cyk7CisgICAgdV9mcHJpbnRmKGZpbGUsICIlcyAiLCBjaGFyTmFtZSk7CisgIH0KK30KKwordm9pZCBzZXRBcnJheShMaW5lICoqYXJyYXksIExpbmUgKmNvbnRlbnRzLCBpbnQzMl90IHNpemUpIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgYXJyYXlbaV0gPSBjb250ZW50cytpOworICB9Cit9CisKKy8vIHNldCBhbiBhcnJheSBmcm9tIGEgSGFzaHRhYmxlCitpbnQzMl90IAorc2V0QXJyYXkoTGluZSAqKmFycmF5LCBIYXNodGFibGUgKnRhYmxlID0gJmdFbGVtZW50cykgeworICBpbnQzMl90IHNpemUgPSB0YWJsZS0+Y291bnQoKTsKKyAgaW50MzJfdCBoYXNoSW5kZXggPSAtMTsKKyAgY29uc3QgVUhhc2hFbGVtZW50ICpoYXNoRWxlbWVudCA9IE5VTEw7CisgIGludDMyX3QgY291bnQgPSAwOworICB3aGlsZSgoaGFzaEVsZW1lbnQgPSB0YWJsZS0+bmV4dEVsZW1lbnQoaGFzaEluZGV4KSkgIT0gTlVMTCkgeworICAgIGFycmF5W2NvdW50KytdID0gKExpbmUgKiloYXNoRWxlbWVudC0+dmFsdWUucG9pbnRlcjsKKyAgfQorICByZXR1cm4gc2l6ZTsKK30KKworVUJvb2wgdHJ5U3dhbXBlZChMaW5lICoqc21hbGxlciwgTGluZSAqKmdyZWF0ZXIsIFVDaGFyIGNoYXJzWzJdLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgdV9zdHJjcHkoZ1NvdXJjZS0+bmFtZSwgKCpzbWFsbGVyKS0+bmFtZSk7CisgIGdTb3VyY2UtPm5hbWVbKCpzbWFsbGVyKS0+bGVuXSA9IHNlcGFyYXRvckNoYXI7CisgIGdTb3VyY2UtPm5hbWVbKCpzbWFsbGVyKS0+bGVuKzFdID0gY2hhcnNbMF07CisgIGdTb3VyY2UtPm5hbWVbKCpzbWFsbGVyKS0+bGVuKzJdID0gMDsKKyAgZ1NvdXJjZS0+bGVuID0gKCpzbWFsbGVyKS0+bGVuKzI7CisKKyAgdV9zdHJjcHkoZ1RhcmdldC0+bmFtZSwgKCpncmVhdGVyKS0+bmFtZSk7CisgIGdUYXJnZXQtPm5hbWVbKCpncmVhdGVyKS0+bGVuXSA9IHNlcGFyYXRvckNoYXI7CisgIGdUYXJnZXQtPm5hbWVbKCpncmVhdGVyKS0+bGVuKzFdID0gY2hhcnNbMV07CisgIGdUYXJnZXQtPm5hbWVbKCpncmVhdGVyKS0+bGVuKzJdID0gMDsKKyAgZ1RhcmdldC0+bGVuID0gKCpncmVhdGVyKS0+bGVuKzI7CisKKyAgaWYoY29tcGFyZXIoJmdTb3VyY2UsICZnVGFyZ2V0KSA+IDApIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworVUJvb2wgdHJ5U3dhbXBzKExpbmUgKipzbWFsbGVyLCBMaW5lICoqZ3JlYXRlciwgVUNoYXIgY2hhcnNbMl0sIENvbXBhcmVGbiBjb21wYXJlcikgeworICBnU291cmNlLT5uYW1lWzBdID0gY2hhcnNbMF07CisgIGdTb3VyY2UtPm5hbWVbMV0gPSBzZXBhcmF0b3JDaGFyOworICB1X3N0cmNweShnU291cmNlLT5uYW1lKzIsICgqc21hbGxlciktPm5hbWUpOworICBnU291cmNlLT5sZW4gPSAoKnNtYWxsZXIpLT5sZW4rMjsKKworICBnVGFyZ2V0LT5uYW1lWzBdID0gY2hhcnNbMV07CisgIGdUYXJnZXQtPm5hbWVbMV0gPSBzZXBhcmF0b3JDaGFyOworICB1X3N0cmNweShnVGFyZ2V0LT5uYW1lKzIsICgqZ3JlYXRlciktPm5hbWUpOworICBnVGFyZ2V0LT5sZW4gPSAoKmdyZWF0ZXIpLT5sZW4rMjsKKworICBpZihjb21wYXJlcigmZ1NvdXJjZSwgJmdUYXJnZXQpIDwgMCkgeworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitVQ29sQXR0cmlidXRlVmFsdWUgCitwcm9iZVN0cmVuZ3RoKExpbmUqKiBwcmV2TGluZSwgTGluZSAqKmN1cnJMaW5lLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgLy8gUHJpbWFyeSBzd2FtcHMgc2Vjb25kYXJ5CisgIC8vIGhhdmUgcGFpcnMgd2hlcmUgWzBdIDI+IFsxXQorICBVQ2hhciBwcmltU3dhbXBzW11bMl0gPSB7CisgICAgeyAweDAwRTAsIDB4MDA2MSB9LAorICAgIHsgMHgwNDUwLCAweDA0MzUgfSwKKyAgICB7IDB4MzFhMywgMHgzMTBkIH0KKyAgfTsKKyAgLy8gU2Vjb25kYXJ5IHN3YW1wcyB0ZXJ0aWFyeQorICAvLyBoYXZlIHBhaXJzIHdoZXJlIFswXSAzPiBbMV0KKyAgVUNoYXIgc2VjU3dhbXBzW11bMl0gPSB7CisgICAgeyAweDAwNTMsIDB4MDA3MyB9LAorICAgIHsgMHgwNDE1LCAweDA0MzUgfSwKKyAgICB7IDB4MzFiNiwgMHgzMTBlIH0KKyAgfTsKKyAgLy8gU2Vjb25kYXJ5IGlzIHN3YW1wZWQgYnkgcHJpbWFyeQorICAvLyBoYXZlIHBhaXJzIHdoZXJlIFswXSAxPiBbMV0KKyAgVUNoYXIgc2VjU3dhbXBlZFtdWzJdID0geworICAgIHsgMHgwMDYyLCAweDAwNjEgfSwKKyAgICB7IDB4MDQzNiwgMHgwNDU0IH0sCisgICAgeyAweDMxMGUsIDB4MzEwZCB9CisgIH07CisgIC8vIFRlcnRpYXJ5IGlzIHN3YW1wZWQgYnkgc2Vjb25kYXJ5CisgIC8vIGhhdmUgcGFpcnMgd2hlcmUgWzBdIDI+IFsxXQorICBVQ2hhciB0ZXJTd2FtcGVkW11bMl0gPSB7CisgICAgeyAweDAwRTAsIDB4MDA2MSB9LAorICAgIHsgMHgwNDUwLCAweDA0MzUgfSwKKyAgICB7IDB4MzFhMywgMHgzMTBkIH0KKyAgfTsKKyAgaW50MzJfdCBpID0gMDsKKyAgLy8gVGVydGlhcnkgc3dhbXBzIGVxdWFsPworICBpbnQgcmVzdWx0ID0gMDsKKyAgLy8gQ2hvb3NlIHRoZSBwYWlyCisgIGkgPSAwOworICAvKgorICBpZigoKnByZXZMaW5lKS0+bmFtZVswXSA+IDB4RkYgJiYgKCpjdXJyTGluZSktPm5hbWVbMF0gPiAweEZGKSB7CisgICAgaSA9IDA7CisgIH0gZWxzZSBpZigoKnByZXZMaW5lKS0+bmFtZVswXSA8IDB4MDQwMCAmJiAoKmN1cnJMaW5lKS0+bmFtZVswXSA8IDB4MDQwMCkgeworICAgIGkgPSAxOworICB9IGVsc2UgeworICAgIGkgPSAyOworICB9CisgICovCisgIC8vIGFyZSB0aGV5IGVxdWFsPworICBpZigocmVzdWx0ID0gY29tcGFyZXIocHJldkxpbmUsIGN1cnJMaW5lKSkgPT0gMCkgeworICAgIHJldHVybiBVQ09MX0lERU5USUNBTDsKKyAgfSBlbHNlIGlmKHJlc3VsdCA+IDApIHsKKyAgICAvL2ZwcmludGYoc3RkZXJyLCAibGluZXMgc2hvdWxkIGJlIG9yZGVyZWQhIik7CisgICAgcmV0dXJuIFVDT0xfT0ZGOworICB9IGVsc2UgaWYodHJ5U3dhbXBzKHByZXZMaW5lLCBjdXJyTGluZSwgcHJpbVN3YW1wc1tpXSwgY29tcGFyZXIpKSB7CisgICAgcmV0dXJuIFVDT0xfUFJJTUFSWTsKKyAgfSBlbHNlIGlmKHRyeVN3YW1wcyhwcmV2TGluZSwgY3VyckxpbmUsIHNlY1N3YW1wc1tpXSwgY29tcGFyZXIpKSB7CisgICAgcmV0dXJuIFVDT0xfU0VDT05EQVJZOworICB9IGVsc2UgaWYodHJ5U3dhbXBlZChwcmV2TGluZSwgY3VyckxpbmUsIHRlclN3YW1wZWRbaV0sIGNvbXBhcmVyKSkgeworICAgIC8vIGlzIHRoZXJlIGEgdGVydGlhcnkgZGlmZmVyZW5jZQorICAgIHJldHVybiBVQ09MX1RFUlRJQVJZOworICB9IGVsc2UgeworICAgIC8vZnByaW50ZihzdGRlcnIsICJVbmtub3duIHN0cmVuZ3RoIVxuIik7CisgICAgcmV0dXJuIFVDT0xfT047CisgIH0KK30KKworLy8gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBwcm9iZSB0aGUgc2V0IG9mIGxpbmVzIAorLy8gKGFscmVhZHkgc29ydGVkIGJ5IHFzb3J0KSBhbmQgZGVkdWN0IHRoZSBzdHJlbmd0aHMKK3ZvaWQgCithbmFseXplU3RyZW5ndGgoTGluZSAqKmxpbmVzLCBpbnQzMl90IHNpemUsIENvbXBhcmVGbiBjb21wYXJlcikgeworICBpbnQzMl90IGkgPSAwOworCisgIGZvcihpID0gMTsgaSA8IHNpemU7IGkrKykgeworICAgIExpbmUgKipwcmV2TGluZSA9IGxpbmVzK2ktMTsKKyAgICBMaW5lICoqY3VyckxpbmUgPSBsaW5lcytpOworICAgICgqY3VyckxpbmUpLT5zdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgocHJldkxpbmUsIGN1cnJMaW5lLCBjb21wYXJlcik7CisgICAgKCpjdXJyTGluZSktPnNvcnRlZEluZGV4ID0gaTsKKyAgICAoKmN1cnJMaW5lKS0+cHJldmlvdXMgPSAqcHJldkxpbmU7CisgICAgKCpwcmV2TGluZSktPm5leHQgPSAqY3VyckxpbmU7CisKKyAgfQorCit9CisKK3ZvaWQgcHJpbnRTdHJlbmd0aChVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGgsIFVGSUxFICpmaWxlKSB7CisgIHVfZnByaW50ZihmaWxlLCAiICIpOworICBzd2l0Y2goc3RyZW5ndGgpIHsKKyAgY2FzZSBVQ09MX0lERU5USUNBTDoKKyAgICB1X2ZwcmludGYoZmlsZSwgIj0iKTsKKyAgICBicmVhazsKKyAgY2FzZSBVQ09MX1RFUlRJQVJZOgorICAgIC8vdV9mcHJpbnRmKGZpbGUsICI8MyIpOworICAgIHVfZnByaW50ZihmaWxlLCAiPDw8Iik7CisgICAgYnJlYWs7CisgIGNhc2UgVUNPTF9TRUNPTkRBUlk6CisgICAgLy91X2ZwcmludGYoZmlsZSwgIjwyIik7CisgICAgdV9mcHJpbnRmKGZpbGUsICI8PCIpOworICAgIGJyZWFrOworICBjYXNlIFVDT0xfUFJJTUFSWToKKyAgICAvL3VfZnByaW50ZihmaWxlLCAiPDEiKTsKKyAgICB1X2ZwcmludGYoZmlsZSwgIjwiKTsKKyAgICBicmVhazsKKyAgY2FzZSBVQ09MX09GRjoKKyAgICB1X2ZwcmludGYoZmlsZSwgIj4/Iik7CisgIGRlZmF1bHQ6CisgICAgdV9mcHJpbnRmKGZpbGUsICI/ISIpOworICAgIGJyZWFrOworICB9CisgIHVfZnByaW50ZihmaWxlLCAiICIpOworfQorCit2b2lkIHByaW50U3RyZW5ndGgoTGluZSAqbGluZSwgVUZJTEUgKmZpbGUpIHsKKyAgcHJpbnRTdHJlbmd0aChsaW5lLT5zdHJlbmd0aCwgZmlsZSk7Cit9CisKK3ZvaWQgcHJpbnRMaW5lKExpbmUgKmxpbmUsIFVGSUxFICpmaWxlKSB7CisgIGVzY2FwZUFMaW5lKGxpbmUsIGZpbGUpOworICBpZihsaW5lLT5pc0V4cGFuc2lvbikgeworICAgIHVfZnByaW50ZihmaWxlLCAiLyIpOworICAgIGVzY2FwZUV4cGFuc2lvbihsaW5lLCBmaWxlKTsKKyAgfQorfQorCit2b2lkIHByaW50T3JkZXJpbmcoTGluZSAqKmxpbmVzLCBpbnQzMl90IHNpemUsIFVGSUxFICpmaWxlLCBVQm9vbCB1c2VMaW5rcyA9IEZBTFNFKSB7CisgIGludDMyX3QgaSA9IDA7CisKKyAgLy9wcmludExpbmUoKmxpbmVzKTsKKyAgLy9lc2NhcGVBTGluZSgqbGluZXMpOyAvLyBQcmludCBmaXJzdCBsaW5lCisKKyAgTGluZSAqbGluZSA9IE5VTEw7CisgIExpbmUgKnByZXZpb3VzID0gKmxpbmVzOworICBpZihwcmV2aW91cy0+aXNSZXNldCkgeworICAgIHVfZnByaW50ZihmaWxlLCAiXG4mICIpOworICAgIGVzY2FwZUFMaW5lKHByZXZpb3VzLCBmaWxlKTsKKyAgfSBlbHNlIGlmKCFwcmV2aW91cy0+aXNSZW1vdmVkKSB7CisgICAgcHJpbnRMaW5lKHByZXZpb3VzLCBmaWxlKTsKKyAgfQorICBpID0gMTsKKyAgd2hpbGUoaSA8IHNpemUgJiYgcHJldmlvdXMtPm5leHQpIHsKKyAgICBpZih1c2VMaW5rcykgeworICAgICAgbGluZSA9IHByZXZpb3VzLT5uZXh0OworICAgIH0gZWxzZSB7CisgICAgICBsaW5lID0gKihsaW5lcytpKTsKKyAgICB9CisgICAgaWYobGluZS0+aXNSZXNldCkgeworICAgICAgdV9mcHJpbnRmKGZpbGUsICJcbiYgIik7CisgICAgICBlc2NhcGVBTGluZShsaW5lLCBmaWxlKTsKKyAgICB9IGVsc2UgaWYoIWxpbmUtPmlzUmVtb3ZlZCkgeworICAgICAgaWYoZmlsZSA9PSBvdXQpIHsKKyAgICAgICAgdV9mcHJpbnRmKGZpbGUsICJcbiIpOworICAgICAgfQorICAgICAgaWYoaSA+IDApIHsKKyAgICAgICAgcHJpbnRTdHJlbmd0aChsaW5lLCBmaWxlKTsKKyAgICAgIH0KKyAgICAgIHByaW50TGluZShsaW5lLCBmaWxlKTsKKyAgICAgIC8vZXNjYXBlQUxpbmUobGluZSwgZmlsZSk7CisgICAgfQorICAgIHByZXZpb3VzID0gbGluZTsKKyAgICBpKys7CisgIH0KKyAgdV9mcHJpbnRmKGZpbGUsICJcbiIpOworfQorCisKK3ZvaWQgc2V0SW5kZXhlcyhMaW5lICoqbGluZXMsIGludDMyX3Qgc2l6ZSkgeworICBpbnQzMl90IGkgPSAwOworICAoKmxpbmVzKS0+c29ydGVkSW5kZXggPSAwOworICBmb3IoaSA9IDE7IGkgPCBzaXplOyBpKyspIHsKKyAgICBMaW5lICpsaW5lID0gKihsaW5lcytpKTsKKyAgICBMaW5lICpwcmV2ID0gKihsaW5lcytpLTEpOworICAgIGxpbmUtPnByZXZpb3VzID0gcHJldjsKKyAgICBwcmV2LT5uZXh0ID0gbGluZTsKKyAgICBsaW5lLT5zb3J0ZWRJbmRleCA9IGk7CisgIH0KK30KKworCisvLyB0aGlzIHNlZW1zIHRvIGJlIGEgZGVhZCBlbmQKK3ZvaWQKK25vdGVFeHBhbnNpb24oTGluZSAqKmdMaW5lcywgTGluZSAqbGluZSwgaW50MzJfdCBzaXplLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisKKyAgVW5pY29kZVN0cmluZyBrZXkobGluZS0+bmFtZSwgbGluZS0+bGVuKTsKKyAgLy9MaW5lICp0b0luc2VydCA9IChMaW5lICopZ0VsZW1lbnRzLmdldChrZXkpOworICBMaW5lICp0b0luc2VydCA9IChMaW5lICopZ0V4cGFuc2lvbnMuZ2V0KGtleSk7CisgIGlmKHRvSW5zZXJ0ICE9IE5VTEwpIHsKKyAgICB0b0luc2VydC0+aXNFeHBhbnNpb24gPSBUUlVFOworICAgIHVfc3RyY3B5KHRvSW5zZXJ0LT5leHBhbnNpb25TdHJpbmcsIGxpbmUtPmV4cGFuc2lvblN0cmluZyk7CisgICAgdG9JbnNlcnQtPmV4cExlbiA9IGxpbmUtPmV4cExlbjsKKyAgICB0b0luc2VydC0+cHJldmlvdXMtPm5leHQgPSB0b0luc2VydC0+bmV4dDsKKyAgICB0b0luc2VydC0+bmV4dC0+cHJldmlvdXMgPSB0b0luc2VydC0+cHJldmlvdXM7CisgICAgZ0VsZW1lbnRzLnJlbW92ZShrZXkpOworICB9IGVsc2UgeworICAgIHRvSW5zZXJ0ID0gbmV3IExpbmUoKmxpbmUpOyAKKyAgICB0b0luc2VydC0+aXNFeHBhbnNpb24gPSBUUlVFOworICAgIGdFbGVtZW50cy5wdXQoVW5pY29kZVN0cmluZyh0b0luc2VydC0+bmFtZSwgdG9JbnNlcnQtPmxlbiksIHRvSW5zZXJ0LCBzdGF0dXMpOworICB9CisKKyAgaW50MzJfdCBpID0gMDsKKyAgTGluZSB0ZXN0TGluZTsKKyAgTGluZSAqbCA9ICZ0ZXN0TGluZTsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgdV9zdHJjcHkodGVzdExpbmUubmFtZSwgKCooZ0xpbmVzK2kpKS0+bmFtZSk7CisgICAgdV9zdHJjYXQodGVzdExpbmUubmFtZSwgbGluZS0+ZXhwYW5zaW9uU3RyaW5nKTsKKyAgICB0ZXN0TGluZS5sZW4gPSAoKihnTGluZXMraSkpLT5sZW4gKyBsaW5lLT5leHBMZW47CisgICAgaWYoY29tcGFyZXIoJmwsICZsaW5lKSA+IDApIHsKKyAgICAgIHRvSW5zZXJ0LT5wcmV2aW91cyA9ICooZ0xpbmVzK2ktMSk7CisgICAgICB0b0luc2VydC0+bmV4dCA9ICooZ0xpbmVzK2kpOworICAgICAgdG9JbnNlcnQtPnByZXZpb3VzLT5uZXh0ID0gdG9JbnNlcnQ7CisgICAgICB0b0luc2VydC0+bmV4dC0+cHJldmlvdXMgPSB0b0luc2VydDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZihnVmVyYm9zZSkgeworICAgIHVfZnByaW50Zihsb2csICJBZGRpbmcgZXhwYW5zaW9uXG4iKTsKKyAgICBlc2NhcGVBTGluZShsaW5lLCBsb2cpOworICAgIHVfZnByaW50Zihsb2csICIvIik7CisgICAgZXNjYXBlRXhwYW5zaW9uKGxpbmUsIGxvZyk7CisgICAgdV9mcHJpbnRmKGxvZywgIiAiKTsKKyAgfQorfQorCit2b2lkCitwb3NpdGlvbkV4cGFuc2lvbnMoTGluZSAqKmdMaW5lcywgaW50MzJfdCBzaXplLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgaW50IHJlc3VsdCA9IDA7CisgIExpbmUgKmxpbmUgPSBOVUxMOworICBMaW5lICp0b01vdmUgPSBOVUxMOworICBpbnQzMl90IGkgPSAwLCBqID0gMDsKKyAgTGluZSAqKnNvcnRlZEV4cGFuc2lvbnMgPSBuZXcgTGluZSpbZ0V4cGFuc2lvbnMuY291bnQoKV07CisgIGludDMyX3Qgc29ydGVkRXhwYW5zaW9uc1NpemUgPSBzZXRBcnJheShzb3J0ZWRFeHBhbnNpb25zLCAmZ0V4cGFuc2lvbnMpOworICBxc29ydChzb3J0ZWRFeHBhbnNpb25zLCBzb3J0ZWRFeHBhbnNpb25zU2l6ZSwgc2l6ZW9mKExpbmUgKiksIGNvbXBhcmVyKTsKKyAgLy8gTWFrZSBhIGxpc3Qgb2YgdGhpbmdzIGluIHRoZSB2aW5jaW5pdHkgb2YgZXhwYW5zaW9uIGNhbmRpZGF0ZQorICBmb3IoaiA9IDA7IGogPCBzb3J0ZWRFeHBhbnNpb25zU2l6ZTsgaisrKSB7CisgICAgbGluZSA9ICooc29ydGVkRXhwYW5zaW9ucytqKTsKKyAgICBVbmljb2RlU3RyaW5nIGtleShsaW5lLT5uYW1lLCBsaW5lLT5sZW4pOworICAgIHRvTW92ZSA9IChMaW5lICopZ0VsZW1lbnRzLmdldChrZXkpOworICAgIGludDMyX3QgaSA9IDA7CisgICAgTGluZSB0ZXN0TGluZSwgcHJldlRlc3RMaW5lOworICAgIExpbmUgKmwgPSAmdGVzdExpbmU7CisgICAgTGluZSAqcHJldkwgPSAmcHJldlRlc3RMaW5lOworICAgIC8vIFRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkLCBzaW5jZSB3ZSBub3cga25vdyB0aGF0IHdlIGhhdmUgYSAKKyAgICAvLyBzb3J0ZWQgbGlzdCBvZiBleHBhbnNpb25zLCBzbyBjdXJyZW50IGNhbiBzdGFydCBmcm9tIHRvTW92ZSwgc2luY2UgYWxsCisgICAgLy8gdGhlIGVsZW1lbnRzIGJlZm9yZSBpdCBhcmUgYWxyZWFkeSBzbWFsbGVyLiBJbiB0aGUgYmVnZ2luaW5nIGl0IG5lZWRzIHRvIAorICAgIC8vIGJlIG9uIGdMaW5lcywgdGhvdWdoLgorICAgIExpbmUgKmN1cnJlbnQgPSAqZ0xpbmVzOworICAgIHdoaWxlKGN1cnJlbnQpIHsKKyAgICAgIGlmKGN1cnJlbnQgPT0gdG9Nb3ZlKSB7CisgICAgICAgIC8vIHdlIGFyZSB3YWRpbmcgdGhyb3VnaCBhIHNvcnRlZCBsaXN0CisgICAgICAgIC8vIGlmIHdlIGZvdW5kIG91cnNlbHZlcywgaXQgbWVhbnMgdGhhdCB3ZSAKKyAgICAgICAgLy8gYXJlIGFscmVhZHkgaW4gYSByaWdodCBwbGFjZSwgc28gbm8gbW92aW5nCisgICAgICAgIC8vIGlzIG5lZWRlZCwgYnV0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUKKyAgICAgICAgLy8gdGhlIHJpZ2h0IHN0cmVuZ3RoLgorICAgICAgICB0b01vdmUtPnN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmcHJldkwsICZ0b01vdmUsIGNvbXBhcmVyKTsKKyAgICAgICAgaWYoMCkgeworICAgICAgICAgIHVfZnByaW50Zihsb2csICJQb3NpdGlvbmVkIGV4cGFuc2lvbiB3aXRob3V0IG1vdmluZyAiKTsKKyAgICAgICAgICBwcmludExpbmUodG9Nb3ZlLCBsb2cpOworICAgICAgICAgIHVfZnByaW50Zihsb2csICIgbmV3IG9yZGVyaW5nOiBcbiIpOworICAgICAgICAgIHByaW50T3JkZXJpbmcoZ0xpbmVzLCBzaXplLCBsb2csIFRSVUUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdV9zdHJjcHkodGVzdExpbmUubmFtZSwgY3VycmVudC0+bmFtZSk7CisgICAgICAgIGlmKCFjdXJyZW50LT5pc0V4cGFuc2lvbikgeworICAgICAgICAgIHVfc3RyY2F0KHRlc3RMaW5lLm5hbWUsIGxpbmUtPmV4cGFuc2lvblN0cmluZyk7CisgICAgICAgICAgdGVzdExpbmUubGVuID0gY3VycmVudC0+bGVuICsgbGluZS0+ZXhwTGVuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRlc3RMaW5lLmxlbiA9IGN1cnJlbnQtPmxlbjsKKyAgICAgICAgfQorICAgICAgICBpZihjb21wYXJlcigmbCwgJmxpbmUpID4gMCkgeworICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIGNoYWluCisgICAgICAgICAgaWYodG9Nb3ZlLT5uZXh0KSB7CisgICAgICAgICAgICB0b01vdmUtPm5leHQtPnN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmKHRvTW92ZS0+cHJldmlvdXMpLCAmKHRvTW92ZS0+bmV4dCksIGNvbXBhcmVyKTsKKyAgICAgICAgICAgIHRvTW92ZS0+bmV4dC0+cHJldmlvdXMgPSB0b01vdmUtPnByZXZpb3VzOworICAgICAgICAgIH0KKyAgICAgICAgICBpZih0b01vdmUtPnByZXZpb3VzKSB7CisgICAgICAgICAgICB0b01vdmUtPnByZXZpb3VzLT5uZXh0ID0gdG9Nb3ZlLT5uZXh0OworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIGluc2VydAorICAgICAgICAgIHRvTW92ZS0+cHJldmlvdXMgPSBjdXJyZW50LT5wcmV2aW91czsKKyAgICAgICAgICB0b01vdmUtPm5leHQgPSBjdXJyZW50OworCisgICAgICAgICAgaWYoY3VycmVudC0+cHJldmlvdXMpIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPnByZXZpb3VzLT5uZXh0ID0gdG9Nb3ZlOworICAgICAgICAgIH0KKyAgICAgICAgICBjdXJyZW50LT5wcmV2aW91cyA9IHRvTW92ZTsKKworICAgICAgICAgIHRvTW92ZS0+c3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKCZwcmV2TCwgJnRvTW92ZSwgY29tcGFyZXIpOworICAgICAgICAgIHRvTW92ZS0+bmV4dC0+c3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKCZ0b01vdmUsICZsLCBjb21wYXJlcik7CisgICAgICAgICAgaWYoMCkgeworICAgICAgICAgICAgdV9mcHJpbnRmKGxvZywgIlBvc2l0aW9uZWQgZXhwYW5zaW9uICIpOworICAgICAgICAgICAgcHJpbnRMaW5lKHRvTW92ZSwgbG9nKTsKKyAgICAgICAgICAgIHVfZnByaW50Zihsb2csICIgbmV3IG9yZGVyaW5nOiBcbiIpOworICAgICAgICAgICAgcHJpbnRPcmRlcmluZyhnTGluZXMsIHNpemUsIGxvZywgVFJVRSk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKHRvTW92ZS0+c3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICAgICAgICAgIC8vIGNoZWNrIGZvciBjcmF6aW5lc3Mgc3VjaCBhcyBzID0gc3MvcworICAgICAgICAgICAgLy8gc3VjaCBsaW5lIHdvdWxkIGNvbnNpc3Qgb2YgcHJldmlvdXMgKG9yIG5leHQpIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBleHBhbnNpb24gdmFsdWUKKyAgICAgICAgICAgIC8vIG1ha2UgYSB0ZXN0CisgICAgICAgICAgICBVQ2hhciBmdWxsU3RyaW5nWzI1Nl07CisgICAgICAgICAgICB1X3N0cmNweShmdWxsU3RyaW5nLCB0b01vdmUtPnByZXZpb3VzLT5uYW1lKTsKKyAgICAgICAgICAgIHVfc3RyY2F0KGZ1bGxTdHJpbmcsIHRvTW92ZS0+ZXhwYW5zaW9uU3RyaW5nKTsKKyAgICAgICAgICAgIGlmKHVfc3RyY21wKGZ1bGxTdHJpbmcsIHRvTW92ZS0+bmFtZSkgPT0gMCkgeworICAgICAgICAgICAgICB0b01vdmUtPnByZXZpb3VzLT5uZXh0ID0gdG9Nb3ZlLT5uZXh0OworICAgICAgICAgICAgICB0b01vdmUtPm5leHQtPnByZXZpb3VzID0gdG9Nb3ZlLT5wcmV2aW91czsKKyAgICAgICAgICAgICAgdG9Nb3ZlLT5pc1JlbW92ZWQgPSBUUlVFOworICAgICAgICAgICAgICB1X2ZwcmludGYobG9nLCAiUmVtb3ZlZDogIik7CisgICAgICAgICAgICAgIHByaW50TGluZSh0b01vdmUsIGxvZyk7CisgICAgICAgICAgICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICAgICAgICAgICAgfSAKKyAgICAgICAgICB9IGVsc2UgaWYodG9Nb3ZlLT5uZXh0LT5zdHJlbmd0aCA9PSBVQ09MX0lERU5USUNBTCkgeworICAgICAgICAgICAgVUNoYXIgZnVsbFN0cmluZ1syNTZdOworICAgICAgICAgICAgdV9zdHJjcHkoZnVsbFN0cmluZywgdG9Nb3ZlLT5uZXh0LT5uYW1lKTsKKyAgICAgICAgICAgIHVfc3RyY2F0KGZ1bGxTdHJpbmcsIHRvTW92ZS0+ZXhwYW5zaW9uU3RyaW5nKTsKKyAgICAgICAgICAgIGlmKHVfc3RyY21wKGZ1bGxTdHJpbmcsIHRvTW92ZS0+bmFtZSkgPT0gMCkgeworICAgICAgICAgICAgICB0b01vdmUtPm5leHQtPnN0cmVuZ3RoID0gdG9Nb3ZlLT5zdHJlbmd0aDsKKyAgICAgICAgICAgICAgdG9Nb3ZlLT5wcmV2aW91cy0+bmV4dCA9IHRvTW92ZS0+bmV4dDsKKyAgICAgICAgICAgICAgdG9Nb3ZlLT5uZXh0LT5wcmV2aW91cyA9IHRvTW92ZS0+cHJldmlvdXM7CisgICAgICAgICAgICAgIHRvTW92ZS0+aXNSZW1vdmVkID0gVFJVRTsKKyAgICAgICAgICAgICAgdV9mcHJpbnRmKGxvZywgIlJlbW92ZWQgYmVjYXVzZSBvZiBiYWNrOiAiKTsKKyAgICAgICAgICAgICAgcHJpbnRMaW5lKHRvTW92ZSwgbG9nKTsKKyAgICAgICAgICAgICAgdV9mcHJpbnRmKGxvZywgIlxuIik7CisgICAgICAgICAgICB9IAorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwcmV2VGVzdExpbmUgPSB0ZXN0TGluZTsKKyAgICAgIH0KKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworICAgIH0KKyAgfQorICBkZWxldGVbXSBzb3J0ZWRFeHBhbnNpb25zOworfQorCisKK3ZvaWQKK25vdGVFeHBhbnNpb24oTGluZSAqbGluZSkgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgVW5pY29kZVN0cmluZyBrZXkobGluZS0+bmFtZSwgbGluZS0+bGVuKTsKKyAgTGluZSAqZWwgPSAoTGluZSAqKWdFbGVtZW50cy5nZXQoa2V5KTsKKyAgaWYoZWwgIT0gTlVMTCkgeworICAgIGVsLT5pc0V4cGFuc2lvbiA9IFRSVUU7CisgICAgdV9zdHJjcHkoZWwtPmV4cGFuc2lvblN0cmluZywgbGluZS0+ZXhwYW5zaW9uU3RyaW5nKTsKKyAgICBlbC0+ZXhwTGVuID0gbGluZS0+ZXhwTGVuOworICB9IGVsc2UgeworICAgIExpbmUgKnRvSW5zZXJ0ID0gbmV3IExpbmUoKmxpbmUpOyAKKyAgICB0b0luc2VydC0+aXNFeHBhbnNpb24gPSBUUlVFOworICAgIGdFbGVtZW50cy5wdXQoVW5pY29kZVN0cmluZyhsaW5lLT5uYW1lLCBsaW5lLT5sZW4pLCB0b0luc2VydCwgc3RhdHVzKTsKKyAgfQorCisgIExpbmUgKmVsMiA9IChMaW5lICopZ0V4cGFuc2lvbnMuZ2V0KGtleSk7CisgIGVsMi0+aXNFeHBhbnNpb24gPSBUUlVFOworICB1X3N0cmNweShlbDItPmV4cGFuc2lvblN0cmluZywgbGluZS0+ZXhwYW5zaW9uU3RyaW5nKTsKKyAgZWwyLT5leHBMZW4gPSBsaW5lLT5leHBMZW47CisKKyAgaWYoZ0RlYnVnKSB7CisgICAgdV9mcHJpbnRmKGxvZywgIkFkZGluZyBleHBhbnNpb25cbiIpOworICAgIHByaW50TGluZShsaW5lLCBsb2cpOworICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICB9Cit9CisKK3ZvaWQgCitub3RlQ29udHJhY3Rpb24oTGluZSAqbGluZSkgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgTGluZSAqdG9JbnNlcnQgPSBuZXcgTGluZSgqbGluZSk7IAorICB0b0luc2VydC0+aXNDb250cmFjdGlvbiA9IFRSVUU7CisgIGdFbGVtZW50cy5wdXQoVW5pY29kZVN0cmluZyhsaW5lLT5uYW1lLCBsaW5lLT5sZW4pLCB0b0luc2VydCwgc3RhdHVzKTsKKyAgaWYoZ1ZlcmJvc2UpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiQWRkaW5nIGNvbnRyYWN0aW9uXG4iKTsKKyAgICBlc2NhcGVBTGluZShsaW5lLCBsb2cpOworICAgIHVfZnByaW50Zihsb2csICIgIik7CisgIH0KK30KKwordm9pZAorbm90ZUVsZW1lbnQoTGluZSAqbGluZSkgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgTGluZSAqdG9JbnNlcnQgPSBuZXcgTGluZSgqbGluZSk7CisgIGdFbGVtZW50cy5wdXQoVW5pY29kZVN0cmluZyhsaW5lLT5uYW1lLCBsaW5lLT5sZW4pLCB0b0luc2VydCwgc3RhdHVzKTsKKyAgaWYoMCkgeyAvL2lmKGdEZWJ1ZykgCisgICAgZXNjYXBlQUxpbmUobGluZSwgbG9nKTsKKyAgICB1X2ZwcmludGYobG9nLCAiICIpOworICB9Cit9CisKKworCisvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGNvbWJpbmF0aW9uIG9mIGNoYXJhY3RlcnMgaGFzIGNoYW5nZWQgcGxhY2Ugd2l0aCB0aGUgCisvLyBhZGphY2VudCBlbGVtZW50cy4gSWYgc28sIHRoZXNlIGFyZSBtb3N0IHByb2JhYmx5IGNvbnRyYWN0aW9ucy4KKy8vIEhvd2V2ZXIsIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGNoZWNrZWQgaWYgdGhlc2UgY29udHJhY3Rpb25zIGFyZSBmYWtlIC0gdGhlIAorLy8gdGVzdCBpcyBzaW1wbGUgLSBpZiB4eSBpcyBzdXNwZWN0ZWQgY29udHJhY3Rpb24sIGlmIHdlIGdldCB0aGF0IHgveSBpcyBleHBhbnNpb24sIHRoZW4KKy8vIHh5IGlzIGEgZmFrZSBjb250cmFjdGlvbi4KK2ludDMyX3QgCithbmFseXplQ29udHJhY3Rpb25zKExpbmUqKiBsaW5lcywgaW50MzJfdCBzaXplLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgaW50MzJfdCBpID0gMCwgaiA9IDA7CisgIGludDMyX3Qgb3V0T2ZPcmRlciA9IDA7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCA9IFVDT0xfT0ZGOworICBVQ29sQXR0cmlidXRlVmFsdWUgY3VyclN0cmVuZ3RoID0gVUNPTF9PRkY7CisgIExpbmUgKipwcmV2TGluZSA9IGxpbmVzOworICBMaW5lICoqY3VyckxpbmUgPSBOVUxMOworICBMaW5lICoqYmFja3VwTGluZSA9IE5VTEw7CisgIFVCb29sIHByZXZJc0NvbnRyYWN0aW9uID0gRkFMU0UsIGN1cnJJc0NvbnRyYWN0aW9uID0gRkFMU0U7CisgIC8vIFByb2JsZW0gaGVyZSBpcyBkZXRlY3RpbmcgYSBjb250cmFjdGlvbiB0aGF0IGlzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgc29ydGVkIGxpc3QKKyAgZm9yKGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgY3VyckxpbmUgPSBsaW5lcytpOworICAgIHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aChwcmV2TGluZSwgY3VyckxpbmUsIGNvbXBhcmVyKTsKKyAgICBpZihzdHJlbmd0aCA9PSBVQ09MX09GRiB8fCBzdHJlbmd0aCAhPSAoKmN1cnJMaW5lKS0+c3RyZW5ndGgpIHsKKyAgICAgIHByZXZJc0NvbnRyYWN0aW9uID0gRkFMU0U7CisgICAgICBjdXJySXNDb250cmFjdGlvbiA9IEZBTFNFOworICAgICAgaWYoIW91dE9mT3JkZXIpIHsKKyAgICAgICAgaWYoZ1ZlcmJvc2UpIHsKKyAgICAgICAgICB1X2ZwcmludGYobG9nLCAiUG9zc2libGUgY29udHJhY3Rpb25zOiAiKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLy8gbm93IHdlIGhhdmUgdHdvIGVsZW1lbnRzIHRoYXQgYXJlIGRpZmZlcmVudC4gVGhlIHF1ZXN0aW9uIGlzLCAKKyAgICAgIC8vIHdoaWNoIG9uZSBvZiB0aGVtIGlzIHRoZSBjb250cmFjdGlvbiAtIHdoaWNoIG9uZSBoYXMgbW92ZWQuIAorICAgICAgLy8gQ291bGQgYmUgdGhlIHByZXZpb3VzLCBidXQgY291bGQgYWxzbyBiZSB0aGUgY3VycmVudC4KKworICAgICAgb3V0T2ZPcmRlcisrOworCisgICAgICAvLyBGaXJzdCwgbGV0cyBjaGVjayB3aGV0aGVyIHRoZSBwcmV2aW91cyBoYXMganVtcGVkIGJhY2sKKyAgICAgIGogPSBpKzE7CisgICAgICAvLyBza2lwIGFsbCB0aGUgbmV4dHMgdGhhdCBoYXZlIHNtYWxsZXIgc3RyZW5ndGgsIHRoZXkgZG9uJ3QgaGF2ZSBhbiBlZmZlY3QKKyAgICAgIHdoaWxlKGogPCBzaXplICYmICgqKGxpbmVzK2opKS0+c3RyZW5ndGggPiAoKmN1cnJMaW5lKS0+c3RyZW5ndGgpIHsKKyAgICAgICAgaisrOworICAgICAgfQorICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGVsZW1lbnRzIG9mIHNhbWUgb3IgZ3JlYXRlciBzdHJlbmd0aAorICAgICAgd2hpbGUoaiA8IHNpemUgJiYgCisgICAgICAgIChzdHJlbmd0aCA9IHByb2JlU3RyZW5ndGgocHJldkxpbmUsIChiYWNrdXBMaW5lID0gbGluZXMraiksIGNvbXBhcmVyKSkgPT0gVUNPTF9PRkYpIHsKKyAgICAgICAgaisrOworICAgICAgICAvLyBpZiB3ZSBza2lwcGVkIG1vcmUgdGhhbiBvbmUsIGl0IG1pZ2h0IGJlIGluIGZhY3QgYSBjb250cmFjdGlvbgorICAgICAgICBwcmV2SXNDb250cmFjdGlvbiA9IFRSVUU7CisgICAgICB9CisgICAgICBpZihwcmV2SXNDb250cmFjdGlvbikgeworICAgICAgICBub3RlQ29udHJhY3Rpb24oKnByZXZMaW5lKTsKKyAgICAgICAgaiA9IGktMjsKKyAgICAgICAgLy8gYWRkIGFsbCB0aGUgcHJldmlvdXMgZWxlbWVudHMgd2l0aCBzbWFsbGVyIHN0cmVuZ3RoLCBzaW5jZSB0aGV5IGFsc28KKyAgICAgICAgLy8gd2lsbCBqdW1wIG92ZXIgYW5kIGFyZSBjb250cmFjdGlvbnMKKyAgICAgICAgd2hpbGUoaiA+PSAwICYmICgqKGxpbmVzK2orMSkpLT5zdHJlbmd0aCA+ICgqY3VyckxpbmUpLT5zdHJlbmd0aCkgeworICAgICAgICAgIHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aChsaW5lcytqLCBjdXJyTGluZSwgY29tcGFyZXIpOworICAgICAgICAgIGlmKHN0cmVuZ3RoID09IFVDT0xfT0ZGKSB7CisgICAgICAgICAgICBub3RlQ29udHJhY3Rpb24oKihsaW5lcytqKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGotLTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBub3cgd2UgY2hlY2sgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBqdW1waW5nIGZvcndhcmQsCisgICAgICAvLyB0aGUgZGFuY2Ugc3RlcHMgYXJlIGFuYWxvZ291cyB0byBhYm92ZS4KKyAgICAgIGogPSBpIC0gMjsKKyAgICAgIHdoaWxlKGogPj0gMCAmJiAoKihsaW5lcytqKzEpKS0+c3RyZW5ndGggPiAoKmN1cnJMaW5lKS0+c3RyZW5ndGgpIHsKKyAgICAgICAgai0tOworICAgICAgfQorICAgICAgd2hpbGUoaiA+PSAwICYmIAorICAgICAgICAoc3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKChiYWNrdXBMaW5lID0gbGluZXMraiksIGN1cnJMaW5lLCBjb21wYXJlcikpID09IFVDT0xfT0ZGKSB7CisgICAgICAgIGotLTsKKyAgICAgICAgY3VycklzQ29udHJhY3Rpb24gPSBUUlVFOworICAgICAgfQorICAgICAgaWYoY3VycklzQ29udHJhY3Rpb24pIHsKKyAgICAgICAgaWYoZ1ZlcmJvc2UpIHsKKyAgICAgICAgICBlc2NhcGVBTGluZSgqY3VyckxpbmUsIGxvZyk7CisgICAgICAgICAgdV9mcHJpbnRmKGxvZywgIiAiKTsKKyAgICAgICAgfQorICAgICAgICBqID0gaSsxOworICAgICAgICB3aGlsZShqIDwgc2l6ZSAmJiAoKihsaW5lcytqKSktPnN0cmVuZ3RoID4gKCpjdXJyTGluZSktPnN0cmVuZ3RoKSB7CisgICAgICAgICAgc3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKHByZXZMaW5lLCBsaW5lcytqLCBjb21wYXJlcik7CisgICAgICAgICAgaWYoc3RyZW5ndGggPT0gVUNPTF9PRkYpIHsKKyAgICAgICAgICAgIG5vdGVDb250cmFjdGlvbigqKGxpbmVzK2opKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaisrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIE5vdCBzdXJlIGFib3V0IGVpdGhlci4gTGlzdCBib3RoIGFuZCB0aGVuIGNoZWNrCisgICAgICBpZighKHByZXZJc0NvbnRyYWN0aW9uIHx8IGN1cnJJc0NvbnRyYWN0aW9uKSkgeworICAgICAgICBub3RlQ29udHJhY3Rpb24oKnByZXZMaW5lKTsKKyAgICAgICAgbm90ZUNvbnRyYWN0aW9uKCpjdXJyTGluZSk7CisgICAgICB9CisgICAgfQorICAgIHByZXZMaW5lID0gY3VyckxpbmU7CisgIH0KKyAgaWYob3V0T2ZPcmRlcikgeworICAgIGlmKGdWZXJib3NlKSB7CisgICAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG91dE9mT3JkZXI7Cit9CisKK2ludDMyX3QKK2RldGVjdENvbnRyYWN0aW9ucyhMaW5lICoqZ0xpbmVzLCBMaW5lICpsaW5lcywgaW50MzJfdCBzaXplLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgaW50MzJfdCBpID0gMCwgaiA9IDA7CisgIGludDMyX3Qgbm9Db250cmFjdGlvbnMgPSAwOworICAvLyBDcmVhdGUgYW5kIGNvbXBhcmUgZG91YmxlczoKKyAgTGluZSAqYmFja3VwTGluZXMgPSBuZXcgTGluZVtzaXplXTsgCisgIExpbmU6OmNvcHlBcnJheShiYWNrdXBMaW5lcywgbGluZXMsIHNpemUpOyAKKyAgLy8gZGV0ZWN0IGNvbnRyYWN0aW9ucworCisgIExpbmUgKipnTGluZXNCYWNrdXAgPSBOVUxMOyAvL25ldyBMaW5lKltzaXplXTsgCisKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgLy8gcHJlc2VydmUgaW5kZXggYW5kIHByZXZpb3VzCisgICAgTGluZTo6Y29weUFycmF5KGxpbmVzLCBiYWNrdXBMaW5lcywgc2l6ZSk7IAorICAgIGZvcihqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgdV9zdHJjcHkobGluZXNbal0ubmFtZSwgYmFja3VwTGluZXNbaV0ubmFtZSk7CisgICAgICB1X3N0cmNhdChsaW5lc1tqXS5uYW1lLCBiYWNrdXBMaW5lc1tqXS5uYW1lKTsKKyAgICAgIGxpbmVzW2pdLmxlbiA9IGJhY2t1cExpbmVzW2ldLmxlbitiYWNrdXBMaW5lc1tqXS5sZW47ICAgICAKKyAgICB9CisKKyAgICBpZigobm9Db250cmFjdGlvbnMgKz0gYW5hbHl6ZUNvbnRyYWN0aW9ucyhnTGluZXMsIHNpemUsIGNvbXBhcmVyKSkgJiYgZ0RlYnVnKSB7CisgICAgICBpZihnTGluZXNCYWNrdXAgPT0gTlVMTCkgeworICAgICAgICBnTGluZXNCYWNrdXAgPSBuZXcgTGluZSpbc2l6ZV07CisgICAgICB9CisgICAgICAvLyBTaG93IHRoZSBzb3J0ZWQgZG91YmxlcywgZm9yIGRlYnVnZ2luZworICAgICAgc2V0QXJyYXkoZ0xpbmVzQmFja3VwLCBsaW5lcywgc2l6ZSk7CisgICAgICBxc29ydChnTGluZXNCYWNrdXAsIHNpemUsIHNpemVvZihMaW5lICopLCBjb21wYXJlcik7CisgICAgICAvL3NldEluZGV4ZXMoZ0xpbmVzQmFja3VwLCBzaXplKTsKKyAgICAgIGFuYWx5emVTdHJlbmd0aChnTGluZXNCYWNrdXAsIHNpemUsIGNvbXBhcmVyKTsKKyAgICAgIHByaW50T3JkZXJpbmcoZ0xpbmVzQmFja3VwLCBzaXplLCBsb2cpOworICAgIH0KKyAgICBpZighZ1F1aWV0KSB7CisgICAgICB1X2ZwcmludGYobG9nLCAiLiIpOworICAgIH0KKyAgfQorICBpZighZ1F1aWV0KSB7CisgICAgdV9mcHJpbnRmKGxvZywgIlxuIik7CisgIH0KKyAgZGVsZXRlW10gYmFja3VwTGluZXM7IAorICBpZihnTGluZXNCYWNrdXApIHsKKyAgICBkZWxldGVbXSBnTGluZXNCYWNrdXA7IAorICB9CisgIHJldHVybiBub0NvbnRyYWN0aW9uczsKK30KKworLy8gZ0xpbmVzIGluIHRoaXMgZnVuY3Rpb24gaXMgYW4gYXJyYXkgb2Ygc29ydGVkIHBvaW50ZXJzLgorLy8gQ29udHJhY3Rpb25zIGFyZSBhbHJlYWR5IGluY2x1ZGVkLiAKK2ludDMyX3QKK2RldGVjdEV4cGFuc2lvbnMoTGluZSAqKmdMaW5lcywgaW50MzJfdCBzaXplLCBDb21wYXJlRm4gY29tcGFyZXIpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIC8vIGRldGVjdCBleHBhbnNpb25zCisKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0YXJ0U3RyZW5ndGggPSBVQ09MX09GRiwgZW5kU3RyZW5ndGggPSBVQ09MX09GRiwgCisgICAgc3RyZW5ndGggPSBVQ09MX09GRiwgcHJldmlvdXNTdHJlbmd0aCA9IFVDT0xfT0ZGOworICBMaW5lIHN0YXJ0LCBlbmQsIHNyYzsKKyAgTGluZSAqc3RhcnRQID0gJnN0YXJ0LCAqZW5kUCA9ICZlbmQsICpzcmNQID0gJnNyYzsKKyAgTGluZSAqY3VycmVudCA9IE5VTEw7CisgIG1lbXNldChzdGFydFAsIDAsIHNpemVvZihMaW5lKSk7CisgIG1lbXNldChlbmRQLCAwLCBzaXplb2YoTGluZSkpOworICBtZW1zZXQoc3JjUCwgMCwgc2l6ZW9mKExpbmUpKTsKKyAgaW50MzJfdCBzcmNMZW47CisgIGludDMyX3QgaSA9IDAsIGogPSAwLCBrID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgdV9zdHJjcHkoc3RhcnQubmFtZSwgKCooZ0xpbmVzK2kpKS0+bmFtZSk7CisgICAgdV9zdHJjcHkoZW5kLm5hbWUsICgqKGdMaW5lcytpKSktPm5hbWUpOworICAgIHNyY0xlbiA9ICgqKGdMaW5lcytpKSktPmxlbjsKKyAgICB1X3N0cmNweShzdGFydC5uYW1lK3NyY0xlbiwgKCooZ0xpbmVzKSktPm5hbWUpOworICAgIHN0YXJ0LmxlbiA9IHNyY0xlbiArICgqKGdMaW5lcykpLT5sZW47CisgICAgdV9zdHJjcHkoZW5kLm5hbWUrc3JjTGVuLCAoKihnTGluZXMrc2l6ZS0xKSktPm5hbWUpOworICAgIGVuZC5sZW4gPSBzcmNMZW4gKyAoKihnTGluZXMrc2l6ZS0xKSktPmxlbjsKKworICAgIGZvcihrID0gMDsgayA8IHNpemU7IGsrKykgeyAvLyBrIGlzIGluZGV4IG9mIGEgdGhpbmcgdGhhdCBpcyBub3QgZG91YmxlZAorICAgICAgY3VycmVudCA9ICooZ0xpbmVzK2spOworICAgICAgLy8gc2VlIGlmIHdlIGhhdmUgbW92ZWQgdG8gZnJvbnQKKyAgICAgIC8vIGhhcyBpdCBtb3ZlZCB0byB0aGUgdmVyeSBiZWdnaW5pbmcKKyAgICAgIGlmKChzdGFydFN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgoZ0xpbmVzK2spLCAmc3RhcnRQLCBjb21wYXJlcikpICE9IFVDT0xfT0ZGKSB7CisgICAgICAgIGNvbnRpbnVlOyAvLyB0aGlzIG9uZSBpcyBpbiB0aGUgZnJvbnQKKyAgICAgIH0KKyAgICAgIC8vIGhhcyBpdCBtb3ZlZCB0byB0aGUgdmVyeSBlbmQ/CisgICAgICBpZigoZW5kU3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKCZlbmRQLCAoZ0xpbmVzK2spLCBjb21wYXJlcikpICE9IFVDT0xfT0ZGKSB7CisgICAgICAgIGNvbnRpbnVlOyAvLyB0aGlzIG9uZSBpcyBpbiB0aGUgYmFjaworICAgICAgfQorICAgICAgLy8gUG90ZW50aWFsIEV4cGFuc2lvbiAgICAgCisgICAgICBpZihnRGVidWcpIHsgLy9nVmVyYm9zZQorICAgICAgICB1X2ZwcmludGYobG9nLCAiUG9zc2libGUgZXhwYW5zaW9uOiAiKTsKKyAgICAgICAgZXNjYXBlQUxpbmUoKihnTGluZXMrayksIGxvZyk7CisgICAgICAgIHVfZnByaW50Zihsb2csICIgIik7CisgICAgICB9CisgICAgICAvLyBOb3cgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHJlYWxseSBhbiBleHBhbnNpb24KKyAgICAgIC8vIEZpcnN0LCB3ZSBoYXZlIHRvIGZpbmQgaXQKKyAgICAgIHVfc3RyY3B5KHNyYy5uYW1lLCAoKihnTGluZXMraSkpLT5uYW1lKTsKKyAgICAgIGZvcihqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICB1X3N0cmNweShzcmMubmFtZStzcmNMZW4sICgqKGdMaW5lcytqKSktPm5hbWUpOworICAgICAgICBzcmMubGVuID0gc3JjTGVuICsgKCooZ0xpbmVzK2opKS0+bGVuOworICAgICAgICBpZigoc3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKCZzcmNQLCAoZ0xpbmVzK2spLCBjb21wYXJlcikpID09IFVDT0xfT0ZGKSB7CisgICAgICAgICAgc3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKChnTGluZXMrayksICZzcmNQLCBjb21wYXJlcik7CisgICAgICAgICAgLy8gd2UgZm91bmQgaXQgKihnTGluZXMrai0xKSBpcyB0aGUgZWxlbWVudCB0aGF0IGlzIGludGVyZXN0aW5nCisgICAgICAgICAgLy8gc2luY2UgZ0xpbmVzK2otMSA8IGdMaW5lcytrIDwgZ0xpbmVzK2oKKyAgICAgICAgICBpZihnRGVidWcpIHsgLy9nVmVyYm9zZQorICAgICAgICAgICAgdV9mcHJpbnRmKGxvZywgImkgPSAlaSwgayA9ICVpLCBqID0gJWkgIiwgaSwgaywgaik7CisgICAgICAgICAgICBlc2NhcGVBTGluZSgqKGdMaW5lcytpKSwgbG9nKTsKKyAgICAgICAgICAgIGVzY2FwZUFMaW5lKCooZ0xpbmVzK2otMSksIGxvZyk7CisgICAgICAgICAgICBwcmludFN0cmVuZ3RoKHByZXZpb3VzU3RyZW5ndGgsIGxvZyk7CisgICAgICAgICAgICBlc2NhcGVBTGluZShjdXJyZW50LCBsb2cpOworICAgICAgICAgICAgcHJpbnRTdHJlbmd0aChzdHJlbmd0aCwgbG9nKTsKKyAgICAgICAgICAgIGVzY2FwZUFMaW5lKCooZ0xpbmVzK2kpLCBsb2cpOworICAgICAgICAgICAgZXNjYXBlQUxpbmUoKihnTGluZXMraiksIGxvZyk7CisgICAgICAgICAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciBpdCBpcyBhIGNvbnRyYWN0aW9uIHRoYXQgaXMgdGhlIHNhbWUgYXMgYW4gZXhwYW5zaW9uCisgICAgICAgICAgLy8gb3IgYSBtdWx0aSBjaGFyYWN0ZXIgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgY3VycmVudC0+YWRkRXhwYW5zaW9uSGl0KGksIGopOworICAgICAgICAgIGN1cnJlbnQtPmlzRXhwYW5zaW9uID0gVFJVRTsKKyAgICAgICAgICBjdXJyZW50LT5leHBJbmRleCA9IGs7CisgICAgICAgICAgLy8gY2FjaGUgZXhwYW5zaW9uCisgICAgICAgICAgZ0V4cGFuc2lvbnMucHV0KFVuaWNvZGVTdHJpbmcoY3VycmVudC0+bmFtZSwgY3VycmVudC0+bGVuKSwgY3VycmVudCwgc3RhdHVzKTsgLy9uZXcgTGluZSgqY3VycmVudCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwcmV2aW91c1N0cmVuZ3RoID0gc3RyZW5ndGg7CisgICAgICB9CisgICAgfQorICAgIGlmKCFnUXVpZXQpIHsKKyAgICAgIHVfZnByaW50Zihsb2csICIuIik7CisgICAgfQorICB9ICAKKyAgaWYoIWdRdWlldCkgeworICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICB9CisgIC8vIG5vdyB3ZSBoYXZlIGlkZW50aWZpZWQgcG9zc2libGUgZXhwYW5zaW9ucy4gV2UgbmVlZCB0byBmaW5kIG91dCBob3cgZG8gdGhleSBleHBhbmQuIAorICAvLyBMZXQncyBpdGVyYXRlIG92ZXIgZXhwYW5zaW9ucyBjYWNoZSAtIGl0J3MgZWFzaWVyLgorICBjb25zdCBVSGFzaEVsZW1lbnQgKmVsID0gTlVMTDsKKyAgaW50MzJfdCBoYXNoSW5kZXggPSAtMTsKKyAgTGluZSAqZG91YmxlcyA9IG5ldyBMaW5lW3NpemUqMTBdOyAKKyAgTGluZSAqKnNvcnRlciA9IG5ldyBMaW5lKltzaXplKjEwXTsKKyAgaW50MzJfdCBjdXJyU2l6ZSA9IDA7CisgIGludDMyX3QgbmV3U2l6ZSA9IDA7CisgIExpbmUgKnByZXYgPSBOVUxMOworICBMaW5lICpuZXh0ID0gTlVMTDsKKyAgTGluZSAqb3JpZ2luID0gTlVMTDsKKyAgaW50IHJlc3VsdCA9IDA7CisgIC8vIE1ha2UgYSBsaXN0IG9mIHRoaW5ncyBpbiB0aGUgdmluY2luaXR5IG9mIGV4cGFuc2lvbiBjYW5kaWRhdGUKKyAgLy8gaW4gZXhwYW5zaW9uUHJlZml4ZXMgYW5kIGV4cGFuc2lvbkFmdGVyIHdlIGhhdmUgc3RvcmVkIHRoZQorICAvLyBwcmVmaXhlcyBvZiBzdHVmZiB0aGF0IGNhdXNlZCB0aGUgZGV0ZWN0aW9uIG9mIGFuIGV4cGFuc2lvbgorICAvLyBhbmQgYSBwb3NpdGlvbiB3aGVyZSB0aGUgZXhwYW5zaW9uIHdhcy4gCisgIC8vIEZvciBleGFtcGxlIChpY3UsIGRlX19QSE9ORUJPT0spLCB3ZSBoYWQ6CisgIC8vIGFFIDw8PCBcdTAwRTQgPCBhZgorICAvLyBBRCA8IFx1MDBFNCA8PDwgQWUKKyAgLy8gRnJvbSB0aGF0IHdlIHdpbGwgY29uc3RydWN0IHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6CisgIC8vIEFEIDwgYUUgPDw8IFx1MDBFNC8gPDw8IEFlIDwgYWYKKyAgLy8gdGhlbiB3ZSB3aWxsIHRha2UgdGhlIHZpbmNpbml0eSBvZiBcdTAwRTQ6CisgIC8vIGFFIDw8PCBcdTAwRTQvIDw8PCBBZQorICAvLyB0aGVuIHdlIHdpbGwgY2hvb3NlIHRoZSBzbWFsbGVzdCBleHBhbnNpb24gdG8gYmUgdGhlIGV4cGFuc2lvbgorICAvLyBwYXJ0OiAnZScuCisgIC8vIGlmIHRoZXJlIGlzIGVxdWFsaXR5LCB3ZSBjaG9vc2UgdGhlIGVxdWFsIHBhcnQ6CisgIC8vICh3aW4zMiwgZGVfX1BIT05FQk9PSyk6CisgIC8vIEFEIDwgXHUwMEU0LyA9IGFlIDw8PCBhRSA8PDwgQWUKKyAgLy8gd2UgY2hvb3NlICdlJy4KKworICB3aGlsZSgoZWwgPSBnRXhwYW5zaW9ucy5uZXh0RWxlbWVudChoYXNoSW5kZXgpKSAhPSBOVUxMKSB7CisgICAgbmV3U2l6ZSA9IDA7CisgICAgY3VycmVudCA9IChMaW5lICopZWwtPnZhbHVlLnBvaW50ZXI7CisgICAgY3VyclNpemUgPSBzaXplKmN1cnJlbnQtPmV4cGFuc2lvblByZWZpeGVzU2l6ZTsKKyAgICBpZihnRGVidWcpIHsKKyAgICAgIGVzY2FwZUFMaW5lKGN1cnJlbnQsIGxvZyk7CisgICAgICB1X2ZwcmludGYobG9nLCAiIE51bWJlcjogJWlcbiIsIGN1cnJlbnQtPmV4cGFuc2lvblByZWZpeGVzU2l6ZSk7CisgICAgfQorICAgIC8vIGNvbnN0cnVjdCB0aGUgZG91YmxlcyAKKyAgICBmb3IoaSA9IDA7IGkgPCBjdXJyZW50LT5leHBhbnNpb25QcmVmaXhlc1NpemU7IGkrKykgeworICAgICAgZG91Ymxlc1tuZXdTaXplXS5zdWZmaXggPSBjdXJyZW50LT5leHBhbnNpb25BZnRlcltpXS0xOworICAgICAgZG91Ymxlc1tuZXdTaXplKytdLnNldFRvQ29uY2F0KCooZ0xpbmVzK2N1cnJlbnQtPmV4cGFuc2lvblByZWZpeGVzW2ldKSwgKihnTGluZXMrY3VycmVudC0+ZXhwYW5zaW9uQWZ0ZXJbaV0tMSkpOworICAgICAgZG91Ymxlc1tuZXdTaXplXS5zdWZmaXggPSBjdXJyZW50LT5leHBhbnNpb25BZnRlcltpXTsKKyAgICAgIGRvdWJsZXNbbmV3U2l6ZSsrXS5zZXRUb0NvbmNhdCgqKGdMaW5lcytjdXJyZW50LT5leHBhbnNpb25QcmVmaXhlc1tpXSksICooZ0xpbmVzK2N1cnJlbnQtPmV4cGFuc2lvbkFmdGVyW2ldKSk7CisgICAgfQorICAgIC8vIGFkZCB0aGUgZXhwYW5zaW9uIHdlJ3JlIG9ic2VydmluZworICAgIGRvdWJsZXNbbmV3U2l6ZSsrXSA9ICpjdXJyZW50OworICAgIHNldEFycmF5KHNvcnRlciwgZG91YmxlcywgbmV3U2l6ZSk7CisgICAgcXNvcnQoc29ydGVyLCBuZXdTaXplLCBzaXplb2YoTGluZSopLCBjb21wYXJlcik7CisgICAgYW5hbHl6ZVN0cmVuZ3RoKHNvcnRlciwgbmV3U2l6ZSwgY29tcGFyZXIpOworICAgIGlmKGdEZWJ1ZykgeworICAgICAgcHJpbnRPcmRlcmluZyhzb3J0ZXIsIG5ld1NpemUsIGxvZyk7CisgICAgfQorICAgIGkgPSAwOworICAgIHdoaWxlKCoqKHNvcnRlcitpKSAhPSAqY3VycmVudCkgeworICAgICAgaSsrOworICAgIH0KKyAgICAvLyBmaW5kIHRoZSB0d28gYWRkaXRpb25zCisgICAgaWYoKCooc29ydGVyK2kpKS0+c3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICAgIC8vIGlmIHdlIGFlIGlkCisgICAgICBvcmlnaW4gPSAqKGdMaW5lcysoKCooc29ydGVyK2ktMSkpLT5zdWZmaXgpKTsKKyAgICAgIHVfc3RyY3B5KGN1cnJlbnQtPmV4cGFuc2lvblN0cmluZywgb3JpZ2luLT5uYW1lKTsKKyAgICAgIGN1cnJlbnQtPmV4cExlbiA9IG9yaWdpbi0+bGVuOworICAgIH0gZWxzZSBpZihpIDwgbmV3U2l6ZS0xICYmICgqKHNvcnRlcitpKzEpKS0+c3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICAgIG9yaWdpbiA9ICooZ0xpbmVzKygoKihzb3J0ZXIraSsxKSktPnN1ZmZpeCkpOworICAgICAgdV9zdHJjcHkoY3VycmVudC0+ZXhwYW5zaW9uU3RyaW5nLCBvcmlnaW4tPm5hbWUpOworICAgICAgY3VycmVudC0+ZXhwTGVuID0gb3JpZ2luLT5sZW47CisgICAgfSBlbHNlIHsKKyAgICAgIGlmKGkgPiAwKSB7CisgICAgICAgIHByZXYgPSAqKGdMaW5lcysoKihzb3J0ZXIraS0xKSktPnN1ZmZpeCk7CisgICAgICAgIGlmKGkgPCBuZXdTaXplLTEpIHsKKyAgICAgICAgICBuZXh0ID0gKihnTGluZXMrKCooc29ydGVyK2krMSkpLT5zdWZmaXgpOworICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmVyKCZwcmV2LCAmbmV4dCk7CisgICAgICAgICAgaWYocmVzdWx0IDw9IDApIHsKKyAgICAgICAgICAgIHVfc3RyY3B5KGN1cnJlbnQtPmV4cGFuc2lvblN0cmluZywgcHJldi0+bmFtZSk7CisgICAgICAgICAgICBjdXJyZW50LT5leHBMZW4gPSBwcmV2LT5sZW47CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVfc3RyY3B5KGN1cnJlbnQtPmV4cGFuc2lvblN0cmluZywgbmV4dC0+bmFtZSk7CisgICAgICAgICAgICBjdXJyZW50LT5leHBMZW4gPSBuZXh0LT5sZW47CisgICAgICAgICAgfQorICAgICAgICB9ICAgICAgCisgICAgICB9CisgICAgICBpZigwKSB7IC8vaWYoZ0RlYnVnKQorICAgICAgICB1X2ZwcmludGYobG9nLCAiRXhwYW5zaW9uIGlzOiAiKTsKKyAgICAgICAgZXNjYXBlQUxpbmUoY3VycmVudCwgbG9nKTsKKyAgICAgICAgdV9mcHJpbnRmKGxvZywgIi8iKTsKKyAgICAgICAgZXNjYXBlRXhwYW5zaW9uKGN1cnJlbnQsIGxvZyk7CisgICAgICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICAgICAgfQorICAgIH0KKyAgICBub3RlRXhwYW5zaW9uKGN1cnJlbnQpOworICAgIC8vbm90ZUV4cGFuc2lvbihnTGluZXMsIGN1cnJlbnQsIHNpemUsIGNvbXBhcmVyKTsKKyAgICBpZighZ1F1aWV0KSB7CisgICAgICB1X2ZwcmludGYobG9nLCAiLiIpOworICAgIH0KKyAgfQorICBpZighZ1F1aWV0KSB7CisgICAgdV9mcHJpbnRmKGxvZywgIlxuIik7CisgIH0KKyAgZGVsZXRlW10gZG91YmxlczsKKyAgZGVsZXRlW10gc29ydGVyOworICByZXR1cm4gZ0V4cGFuc2lvbnMuY291bnQoKTsKK30KKworVUJvb2wKK2lzVGFpbG9yZWQoTGluZSAqbGluZSwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIFVCb29sIHJlc3VsdCA9IEZBTFNFOworICBVQ29sbGF0aW9uRWxlbWVudHMgKnRhaWxvcmluZyA9IHVjb2xfb3BlbkVsZW1lbnRzKGdDb2wsIGxpbmUtPm5hbWUsIGxpbmUtPmxlbiwgJnN0YXR1cyk7CisgIFVDb2xsYXRpb25FbGVtZW50cyAqdWNhID0gdWNvbF9vcGVuRWxlbWVudHMoZ1VDQSwgbGluZS0+bmFtZSwgbGluZS0+bGVuLCAmc3RhdHVzKTsKKworICBpbnQzMl90IHRhaWxFbGVtZW50ID0gVUNPTF9OVUxMT1JERVI7CisgIGludDMyX3QgdWNhRWxlbWVudCA9IFVDT0xfTlVMTE9SREVSOworCisgIGRvIHsKKyAgICBkbyB7CisgICAgICB0YWlsRWxlbWVudCA9IHVjb2xfbmV4dCh0YWlsb3JpbmcsICZzdGF0dXMpOworICAgIH0gd2hpbGUodGFpbEVsZW1lbnQgPT0gMCk7CisgICAgZG8geworICAgICAgdWNhRWxlbWVudCA9IHVjb2xfbmV4dCh1Y2EsICZzdGF0dXMpOworICAgIH0gd2hpbGUodWNhRWxlbWVudCA9PSAwKTsKKyAgICBpZih0YWlsRWxlbWVudCAhPSB1Y2FFbGVtZW50KSB7CisgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgfQorICB9IHdoaWxlICh0YWlsRWxlbWVudCAhPSBVQ09MX05VTExPUkRFUiAmJiB1Y2FFbGVtZW50ICE9IFVDT0xfTlVMTE9SREVSKTsKKworICB1Y29sX2Nsb3NlRWxlbWVudHModGFpbG9yaW5nKTsKKyAgdWNvbF9jbG9zZUVsZW1lbnRzKHVjYSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK3JlZHVjZVVudGFpbG9yZWQoTGluZSAqKmdMaW5lcywgaW50MzJfdCBzaXplKXsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIExpbmUgKmN1cnJlbnQgPSAqKGdMaW5lcyk7CisgIExpbmUgKnByZXZpb3VzID0gTlVMTDsKKyAgd2hpbGUoY3VycmVudCkgeworICAgIC8vIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgbm90IHRhaWxvcmVkIGFjY29yZGluZyB0byB0aGUgVUNBCisgICAgaWYoIWlzVGFpbG9yZWQoY3VycmVudCwgc3RhdHVzKSkgeworICAgICAgLy8gd2UgcmVtb3ZlIGl0CisgICAgICBjdXJyZW50LT5pc1JlbW92ZWQgPSBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICAvLyBpZiBpdCdzIHRhaWxvcmVkIAorICAgICAgaWYoY3VycmVudC0+cHJldmlvdXMgJiYgY3VycmVudC0+cHJldmlvdXMtPmlzUmVtb3ZlZCA9PSBUUlVFKSB7CisgICAgICAgIHByZXZpb3VzID0gY3VycmVudC0+cHJldmlvdXM7CisgICAgICAgIHdoaWxlKHByZXZpb3VzICYmIChwcmV2aW91cy0+c3RyZW5ndGggPiBjdXJyZW50LT5zdHJlbmd0aCB8fCBwcmV2aW91cy0+aXNFeHBhbnNpb24gfHwgcHJldmlvdXMtPmlzQ29udHJhY3Rpb24pICYmIHByZXZpb3VzLT5pc1JlbW92ZWQpIHsKKyAgICAgICAgICBpZihwcmV2aW91cy0+cHJldmlvdXMgJiYgcHJldmlvdXMtPnByZXZpb3VzLT5pc1JlbW92ZWQpIHsKKyAgICAgICAgICAgIHByZXZpb3VzID0gcHJldmlvdXMtPnByZXZpb3VzOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYocHJldmlvdXMpIHsKKyAgICAgICAgICBwcmV2aW91cy0+aXNSZXNldCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgKCooZ0xpbmVzKSktPmlzUmVzZXQgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworICB9Cit9CisKK3ZvaWQKK2NvbnN0cnVjdEFuZEFuYWx5emUoTGluZSAqKmdMaW5lcywgTGluZSAqbGluZXMsIGludDMyX3Qgc2l6ZSwgQ29tcGFyZUZuIGNvbXBhcmVyKSB7CisgIGludDMyX3QgaSA9IDAsIGogPSAwLCBrID0gMDsKKyAgLy8gc2V0dXAgb3VyIGNvbXBhcmUgYXJyYXlzIHRvIHBvaW50IHRvIHNpbmdsZSBzZXQuCisKKyAgLy8gRm9yIGNvbnRyYWN0aW9ucyB3ZSBuZWVkIGEgYmxvY2sgb2YgZGF0YQorICBzZXRBcnJheShnTGluZXMsIGxpbmVzLCBzaXplKTsKKyAgLy9zaXplID0gc2V0QXJyYXkoZ0xpbmVzKTsKKworICBxc29ydChnTGluZXMsIHNpemUsIHNpemVvZihMaW5lICopLCBjb21wYXJlcik7CisKKyAgLy8gRXN0YWJsaXNoIHdobyBpcyBwcmV2aW91cyBhY2NvcmRpbmcgdG8gdGhlIHNvcnQgb3JkZXIKKyAgLy9zZXRJbmRleGVzKGdMaW5lcywgc2l6ZSk7CisKKyAgYW5hbHl6ZVN0cmVuZ3RoKGdMaW5lcywgc2l6ZSwgY29tcGFyZXIpOworICBpZihnVmVyYm9zZSkgeworICAgIHVfZnByaW50Zihsb2csICJPcmRlcmluZzpcbiIpOworICAgIHByaW50T3JkZXJpbmcoZ0xpbmVzLCBzaXplLCBsb2cpOworICB9CisKKyAgLy9zaG93RGlmZmVyZW5jZXMoZXhlbXBsYXJTZXRTaXplKTsKKyAgLy9kdW1wRGF0YShleGVtcGxhclNldFNpemUpOworCisgIGlmKCFnUXVpZXQpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiRGV0ZWN0aW5nIGNvbnRyYWN0aW9ucz9cbiIpOworICB9CisgIGludDMyX3Qgbm9Db250cmFjdGlvbnMgPSAwOworICBub0NvbnRyYWN0aW9ucyA9IGRldGVjdENvbnRyYWN0aW9ucyhnTGluZXMsIGxpbmVzLCBzaXplLCBjb21wYXJlcik7CisgIGlmKCFnUXVpZXQpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiRGV0ZWN0ZWQgJWkgY29udHJhY3Rpb25zXG4iLCBub0NvbnRyYWN0aW9ucyk7CisgIH0KKworICAvLyBub3cgd2UgaGF2ZSBzdXNwZWN0ZWQgY29udHJhY3Rpb25zIGluIHRoZSB0YWJsZQorICAvLyB3ZSBoYXZlIHRvIHJlLXNvcnQgdGhlIHRoaW5ncyAKKyAgc2l6ZSA9IHNldEFycmF5KGdMaW5lcyk7CisgIHFzb3J0KGdMaW5lcywgc2l6ZSwgc2l6ZW9mKExpbmUgKiksIGNvbXBhcmVyKTsKKyAgYW5hbHl6ZVN0cmVuZ3RoKGdMaW5lcywgc2l6ZSwgY29tcGFyZXIpOworCisgIGlmKCFnUXVpZXQpIHsKKyAgICB1X2ZwcmludGYobG9nLCAiRGV0ZWN0aW5nIGV4cGFuc2lvbnNcbiIpOworICB9CisgIGludDMyX3Qgbm9FeHBhbnNpb25zID0gZGV0ZWN0RXhwYW5zaW9ucyhnTGluZXMsIHNpemUsIGNvbXBhcmVyKTsKKyAgaWYoIWdRdWlldCkgeworICAgIHVfZnByaW50Zihsb2csICJEZXRlY3RlZCAlaSBleHBhbnNpb25zXG4iLCBub0V4cGFuc2lvbnMpOworICB9CisKKyAgcG9zaXRpb25FeHBhbnNpb25zKGdMaW5lcywgc2l6ZSwgY29tcGFyZXIpOworCisgIGlmKGdWZXJib3NlKSB7CisgICAgdV9mcHJpbnRmKGxvZywgIkFmdGVyIHBvc2l0aW9uaW5nIGV4cGFuc2lvbnM6XG4iKTsKKyAgICBwcmludE9yZGVyaW5nKGdMaW5lcywgc2l6ZSwgbG9nLCBUUlVFKTsKKyAgfQorICAvL3JlZHVjZVVudGFpbG9yZWQoZ0xpbmVzLCBzaXplKTsKKyAgaWYoIWdRdWlldCkgeworICAgIHVfZnByaW50ZihvdXQsICJGaW5hbCByZXN1bHRcbiIpOworICB9CisgIHByaW50T3JkZXJpbmcoZ0xpbmVzLCBzaXplLCBvdXQsIFRSVUUpOworICBwcmludE9yZGVyaW5nKGdMaW5lcywgc2l6ZSwgbG9nLCBUUlVFKTsKK30KKworLy8gQ2hlY2sgd2hldGhlciB1cHBlciBjYXNlIGNvbWVzIGJlZm9yZSBsb3dlciBjYXNlIG9yIHZpY2UtdmVyc2EKK2ludDMyX3QgCitjaGVja0Nhc2VPcmRlcmluZyh2b2lkKSB7CisgIFVDaGFyIHN0dWZmW11bM10gPSB7CisgICAgeyAweDAwNjEsIHNlcGFyYXRvckNoYXIsIDB4MDA2MX0sIC8vImFhIiwKKyAgICB7IDB4MDA2MSwgc2VwYXJhdG9yQ2hhciwgMHgwMDQxIH0sIC8vImFcXHUwMEUwIiwKKyAgICB7IDB4MDA0MSwgc2VwYXJhdG9yQ2hhciwgMHgwMDYxIH0sIC8vIlxcdTAwRTBhIiwKKyAgICB7IDB4MDA0MSwgc2VwYXJhdG9yQ2hhciwgMHgwMDQxIH0sIC8vIlxcdTAwRTBhIiwKKyAgICAvL3sgMHgwMEUwLCBzZXBhcmF0b3JDaGFyLCAweDAwRTAgfSAgLy8iXFx1MDBFMFxcdTAwRTAiCisgIH07CisgIGNvbnN0IGludDMyX3Qgc2l6ZSA9IHNpemVvZihzdHVmZikvc2l6ZW9mKHN0dWZmWzBdKTsKKworICBMaW5lICoqc29ydGVkTGluZXMgPSBuZXcgTGluZSpbc2l6ZV07CisgIExpbmUgbGluZXNbc2l6ZV07CisKKyAgaW50MzJfdCBpID0gMDsKKyAgaW50MzJfdCBvcmRlcmVkID0gMCwgcmV2ZXJzZWQgPSAwOworCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGxpbmVzW2ldLnNldE5hbWUoc3R1ZmZbaV0sIDMpOworICB9CisgIHNldEFycmF5KHNvcnRlZExpbmVzLCBsaW5lcywgc2l6ZSk7CisgIHFzb3J0KHNvcnRlZExpbmVzLCBzaXplLCBzaXplb2YoTGluZSopLCBnQ29tcGFyZXIpOworCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGlmKCooc29ydGVkTGluZXMraSkgPT0gJmxpbmVzW2ldKSB7CisgICAgICBvcmRlcmVkKys7CisgICAgfQorICAgIGlmKCooc29ydGVkTGluZXMraSkgPT0gJmxpbmVzW3NpemUtaS0xXSkgeworICAgICAgcmV2ZXJzZWQrKzsKKyAgICB9CisgIH0KKworICBkZWxldGVbXSBzb3J0ZWRMaW5lczsKKyAgaWYob3JkZXJlZCA9PSBzaXplKSB7CisgICAgcmV0dXJuIDA7IC8vIGluIG5vcm1hbCBvcmRlcgorICB9IGVsc2UgaWYocmV2ZXJzZWQgPT0gc2l6ZSkgeworICAgIHJldHVybiAxOyAvLyBpbiByZXZlcnNlZCBvcmRlcgorICB9IGVsc2UgeworICAgIHJldHVybiAtMTsgLy8gdW5rbm93biBvcmRlcgorICB9Cit9CisKKworLy8gQ2hlY2sgd2hldGhlciB0aGUgc2Vjb25kYXJpZXMgYXJlIGluIHRoZSBzdHJhaWdodCBvciByZXZlcnNlZCBvcmRlcgoraW50MzJfdCAKK2NoZWNrU2Vjb25kYXJ5T3JkZXJpbmcodm9pZCkgeworICBVQ2hhciBzdHVmZltdWzVdID0geworICAgIHsgMHgwMDYxLCBzZXBhcmF0b3JDaGFyLCAweDAwNjEsIHNlcGFyYXRvckNoYXIsIDB4MDBFMCB9LCAvLyJhYSIsCisgICAgeyAweDAwNjEsIHNlcGFyYXRvckNoYXIsIDB4MDBFMCwgc2VwYXJhdG9yQ2hhciwgMHgwMDYxIH0sIC8vImFcXHUwMEUwIiwKKyAgICB7IDB4MDBFMCwgc2VwYXJhdG9yQ2hhciwgMHgwMDYxLCBzZXBhcmF0b3JDaGFyLCAweDAwNjEgfSwgLy8iXFx1MDBFMGEiLAorICAgIC8veyAweDAwRTAsIHNlcGFyYXRvckNoYXIsIDB4MDBFMCB9ICAvLyJcXHUwMEUwXFx1MDBFMCIKKyAgfTsKKyAgY29uc3QgaW50MzJfdCBzaXplID0gc2l6ZW9mKHN0dWZmKS9zaXplb2Yoc3R1ZmZbMF0pOworCisgIExpbmUgKipzb3J0ZWRMaW5lcyA9IG5ldyBMaW5lKltzaXplXTsKKyAgTGluZSBsaW5lc1tzaXplXTsKKworICBpbnQzMl90IGkgPSAwOworICBpbnQzMl90IG9yZGVyZWQgPSAwLCByZXZlcnNlZCA9IDA7CisKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgbGluZXNbaV0uc2V0TmFtZShzdHVmZltpXSwgNSk7CisgIH0KKyAgc2V0QXJyYXkoc29ydGVkTGluZXMsIGxpbmVzLCBzaXplKTsKKyAgcXNvcnQoc29ydGVkTGluZXMsIHNpemUsIHNpemVvZihMaW5lKiksIGdDb21wYXJlcik7CisKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgaWYoKihzb3J0ZWRMaW5lcytpKSA9PSAmbGluZXNbaV0pIHsKKyAgICAgIG9yZGVyZWQrKzsKKyAgICB9CisgICAgaWYoKihzb3J0ZWRMaW5lcytpKSA9PSAmbGluZXNbc2l6ZS1pLTFdKSB7CisgICAgICByZXZlcnNlZCsrOworICAgIH0KKyAgfQorCisgIGRlbGV0ZVtdIHNvcnRlZExpbmVzOworICBpZihvcmRlcmVkID09IHNpemUpIHsKKyAgICByZXR1cm4gMDsgLy8gaW4gbm9ybWFsIG9yZGVyCisgIH0gZWxzZSBpZihyZXZlcnNlZCA9PSBzaXplKSB7CisgICAgcmV0dXJuIDE7IC8vIGluIHJldmVyc2VkIG9yZGVyCisgIH0gZWxzZSB7CisgICAgcmV0dXJuIC0xOyAvLyB1bmtub3duIG9yZGVyCisgIH0KK30KKworLy8gV2UgaGF2ZSB0byByZW1vdmUgaWdub3JhYmxlIGNoYXJhY3RlcnMgZnJvbSB0aGUgZXhlbXBsYXIgc2V0LAorLy8gb3RoZXJ3aXNlLCB3ZSBnZXQgbWVzc2VkIHVwIHJlc3VsdHMKK3ZvaWQgcmVtb3ZlSWdub3JhYmxlQ2hhcnMoVW5pY29kZVNldCAmZXhlbXBsYXJVU2V0LCBDb21wYXJlRm4gY29tcGFyZXIsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICBVbmljb2RlU2V0IGlnbm9yYWJsZXMsIHByaW1hcnlJZ25vcmFibGVzOworICBVbmljb2RlU2V0SXRlcmF0b3IgZXhlbXBsYXJVU2V0SXRlcihleGVtcGxhclVTZXQpOworICBleGVtcGxhclVTZXRJdGVyLnJlc2V0KCk7CisgIExpbmUgZW1wdHk7CisgIExpbmUgKmVtcHR5UCA9ICZlbXB0eTsKKyAgTGluZSBjdXJyZW50OworICBMaW5lICpjdXJyTGluZSA9ICZjdXJyZW50OworICBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGggPSBVQ09MX09GRjsKKworCisgIHdoaWxlKGV4ZW1wbGFyVVNldEl0ZXIubmV4dCgpKSB7CisgICAgaWYoZXhlbXBsYXJVU2V0SXRlci5pc1N0cmluZygpKSB7IC8vIHByb2Nlc3MgYSBzdHJpbmcKKyAgICAgIHVfbWVtY3B5KGN1cnJMaW5lLT5uYW1lLCBleGVtcGxhclVTZXRJdGVyLmdldFN0cmluZygpLmdldEJ1ZmZlcigpLCBleGVtcGxhclVTZXRJdGVyLmdldFN0cmluZygpLmxlbmd0aCgpKTsKKyAgICAgIGN1cnJMaW5lLT5sZW4gPSBleGVtcGxhclVTZXRJdGVyLmdldFN0cmluZygpLmxlbmd0aCgpOworICAgICAgc3RyZW5ndGggPSBwcm9iZVN0cmVuZ3RoKCZlbXB0eVAsICZjdXJyTGluZSwgY29tcGFyZXIpOworICAgICAgaWYoc3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICAgICAgaWdub3JhYmxlcy5hZGQoZXhlbXBsYXJVU2V0SXRlci5nZXRTdHJpbmcoKSk7CisgICAgICB9IGVsc2UgaWYoc3RyZW5ndGggPiBVQ09MX1BSSU1BUlkpIHsKKyAgICAgICAgcHJpbWFyeUlnbm9yYWJsZXMuYWRkKGV4ZW1wbGFyVVNldEl0ZXIuZ2V0U3RyaW5nKCkpOworICAgICAgfQorICAgIH0gZWxzZSB7IC8vIHByb2Nlc3MgY29kZSBwb2ludAorICAgICAgVUJvb2wgaXNFcnJvciA9IEZBTFNFOworICAgICAgVUNoYXIzMiBjb2RlUG9pbnQgPSBleGVtcGxhclVTZXRJdGVyLmdldENvZGVwb2ludCgpOworICAgICAgY3VyckxpbmUtPmxlbiA9IDA7CisgICAgICBVMTZfQVBQRU5EKGN1cnJMaW5lLT5uYW1lLCBjdXJyTGluZS0+bGVuLCAyNSwgY29kZVBvaW50LCBpc0Vycm9yKTsKKyAgICAgIHN0cmVuZ3RoID0gcHJvYmVTdHJlbmd0aCgmZW1wdHlQLCAmY3VyckxpbmUsIGNvbXBhcmVyKTsKKyAgICAgIGlmKHN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAgIGlnbm9yYWJsZXMuYWRkKGNvZGVQb2ludCk7CisgICAgICB9IGVsc2UgaWYoc3RyZW5ndGggPiBVQ09MX1BSSU1BUlkpIHsKKyAgICAgICAgcHJpbWFyeUlnbm9yYWJsZXMuYWRkKGNvZGVQb2ludCk7CisgICAgICB9CisgICAgfQorICB9CisKKworCisgIGV4ZW1wbGFyVVNldC5yZW1vdmVBbGwoaWdub3JhYmxlcyk7CisgIGV4ZW1wbGFyVVNldC5yZW1vdmVBbGwocHJpbWFyeUlnbm9yYWJsZXMpOworCisgIFVuaWNvZGVTdHJpbmcgcmVtb3ZlZFBhdHRlcm47CisgIGlmKGlnbm9yYWJsZXMuc2l6ZSgpKSB7CisgICAgdV9mcHJpbnRmKGxvZywgIklnbm9yYWJsZXM6XG4iKTsKKyAgICBpZ25vcmFibGVzLnRvUGF0dGVybihyZW1vdmVkUGF0dGVybiwgVFJVRSk7CisgICAgcmVtb3ZlZFBhdHRlcm4uc2V0Q2hhckF0KHJlbW92ZWRQYXR0ZXJuLmxlbmd0aCgpLCAwKTsKKyAgICBlc2NhcGVTdHJpbmcocmVtb3ZlZFBhdHRlcm4uZ2V0QnVmZmVyKCksIHJlbW92ZWRQYXR0ZXJuLmxlbmd0aCgpLCBsb2cpOworICAgIHVfZnByaW50Zihsb2csICJcbiIpOworICB9CisgIGlmKHByaW1hcnlJZ25vcmFibGVzLnNpemUoKSkgeworICAgIHVfZnByaW50Zihsb2csICJQcmltYXJ5IGlnbm9yYWJsZXM6XG4iKTsKKyAgICBwcmltYXJ5SWdub3JhYmxlcy50b1BhdHRlcm4ocmVtb3ZlZFBhdHRlcm4sIFRSVUUpOworICAgIHJlbW92ZWRQYXR0ZXJuLnNldENoYXJBdChyZW1vdmVkUGF0dGVybi5sZW5ndGgoKSwgMCk7CisgICAgZXNjYXBlU3RyaW5nKHJlbW92ZWRQYXR0ZXJuLmdldEJ1ZmZlcigpLCByZW1vdmVkUGF0dGVybi5sZW5ndGgoKSwgbG9nKTsKKyAgICB1X2ZwcmludGYobG9nLCAiXG4iKTsKKyAgfQorCit9CisKKy8vIFRPRE86IGRldmVsb3AgbG9naWMgZm9yIGNob29zaW5nIGJvdW5kYXJ5IGNoYXJhY3RlcnMgLSByaWdodCBub3cgaXQgaXMgaGFyZGNvZGVkCisvLyBJdCBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiB1c2VkIHNjcmlwdHMuIEFsc28sIGNoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBzYXZlIAorLy8gdXNlZCBzY3JpcHQgbmFtZXMKK3ZvaWQgYWRkVXRpbGl0eUNoYXJzKFVuaWNvZGVTZXQgJmV4ZW1wbGFyVVNldCwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisKKyAgLy8gaW4gb3JkZXIgdG8gZ2V0IG5pY2UgcnVsZXMsIHdlIG5lZWQgdG8gYWRkIHNvbWUgY2hhcmFjdGVycyB0byB0aGUKKyAgLy8gc3RhcnRpbmcgc2V0LiBUaGVzZSBhcmUgbW9zdGx5IHBhcnRzIG9mIGNvbXBhdGliaXR5IGNvbXBvc2VkIGNoYXJhY3RlcnMsCisgIC8vIHN1Y2ggYXMgTC1taWRkbGUgZG90IChtaWRkbGUgZG90IGlzIDB4MDBCNykuIElmIHdlIGRvbid0IGFkZCB0aGVzZSwgd2Ugd291bGQKKyAgLy8gZ2V0IGEgcmVzZXQgYXQgYSBmdW5reSBjaGFyYWN0ZXIsIHN1Y2ggYXMgTC1taWRkbGUgZG90LiBUaGlzIGxpc3Qgd2lsbCBwcm9iYWJseQorICAvLyBncm93LgorICBleGVtcGxhclVTZXQuYWRkKDB4MDBCNyk7CisKKyAgLy8gdGhlc2UgdGhpbmdzIHJlcHJlc2VudCBhIHNjcmlwdCBiZWZvcmUgdGhlIHRhcmdldCBzY3JpcHQgYW5kIAorICAvLyBhIHNjcmlwdCBhZnRlci4gTW9yZSBsb2dpYyBzaG91bGQgYmUgYWRkZWQgc28gdGhhdCB0aGVzZSBjaGFyYWN0ZXJzIGFyZQorICAvLyBjaG9zZW4gYXV0b21hdGljYWxseQorCisgIGV4ZW1wbGFyVVNldC5hZGQoMHgwMDM4KTsKKyAgZXhlbXBsYXJVU2V0LmFkZCgweDAwMzkpOworCisgIC8vZXhlbXBsYXJVU2V0LmFkZCgweDA0MzMpOworICAvL2V4ZW1wbGFyVVNldC5hZGQoMHgwNDM2KTsKKyAgZXhlbXBsYXJVU2V0LmFkZCgweGZhMjkpOworICBleGVtcGxhclVTZXQuYWRkKDB4ZmEyOCk7Cit9CisKK3ZvaWQKK2dldEV4ZW1wbGFycyhjb25zdCBjaGFyICpsb2NhbGUsIFVuaWNvZGVTZXQgJmV4ZW1wbGFycywgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIC8vIGZpcnN0IHdlIGZpbGwgb3V0IHN0cnVjdHVyZXMgd2l0aCBleGVtcGxhciBjaGFyYWN0ZXJzLgorICBVUmVzb3VyY2VCdW5kbGUgKnJlcyA9IHVyZXNfb3BlbihOVUxMLCBsb2NhbGUsICZzdGF0dXMpOworICBpbnQzMl90IGV4ZW1wbGFyTGVuZ3RoID0gMDsKKyAgVW5pY29kZVN0cmluZyBleGVtcGxhclN0cmluZyA9IHVyZXNfZ2V0VW5pY29kZVN0cmluZ0J5S2V5KHJlcywgIkV4ZW1wbGFyQ2hhcmFjdGVycyIsICZzdGF0dXMpOworICBleGVtcGxhcnMuY2xlYXIoKTsKKyAgZXhlbXBsYXJzLmFwcGx5UGF0dGVybihleGVtcGxhclN0cmluZywgc3RhdHVzKTsKKyAgdXJlc19jbG9zZShyZXMpOworfQorCit2b2lkCitwcmVwYXJlU3RhcnRpbmdTZXQoVW5pY29kZVNldCAmZXhlbXBsYXJVU2V0LCBDb21wYXJlRm4gY29tcGFyZXIsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICBpbnQzMl90IGkgPSAwOworICBVbmljb2RlU3RyaW5nIGV4ZW1wbGFyU3RyaW5nOworICBleGVtcGxhclVTZXQudG9QYXR0ZXJuKGV4ZW1wbGFyU3RyaW5nKTsKKyAgLy8gUHJvZHVjZSBjYXNlIGNsb3N1cmUgb2YgZXhlbXBsYXIgY2hhcmFjdGVycworICAvLyBUaGVuIHdlIHdhbnQgdG8gZmlndXJlIG91dCB3aGF0IGlzIHRoZSBzY3JpcHQgb2YgdGhlIGV4ZW1wbGFyIGNoYXJhY3RlcnMKKyAgLy8ganVzdCBwaWNrIHNldmVyYWwgYW5kIHNlZSB0aGVpciBzY3JpcHQKKyAgY29uc3QgY2hhciogdXNlZFNjcmlwdE5hbWVzW1VTQ1JJUFRfQ09ERV9MSU1JVF07CisgIGludDMyX3QgbnVtYmVyT2ZVc2VkU2NyaXB0cyA9IDA7CisgIGNoYXIgc2NyaXB0U2V0UGF0dGVyblsyNTZdOworICBVbmljb2RlU3RyaW5nIHBhdHRlcm47IC8vIGZvciBkZWJ1Z2dpbmcKKyAgVUNoYXIzMiBleENoYXIgPSAtMTsKKyAgd2hpbGUoZXhlbXBsYXJVU2V0LnNpemUoKSAhPSAwICYmIChleENoYXIgPSBleGVtcGxhclVTZXQuY2hhckF0KDApKSAhPSAtMSkgeyAKKyAgICBpbnQzMl90IHNjcmlwdE5vID0gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlKGV4Q2hhciwgVUNIQVJfU0NSSVBUKTsKKyAgICB1c2VkU2NyaXB0TmFtZXNbbnVtYmVyT2ZVc2VkU2NyaXB0c10gPSB1X2dldFByb3BlcnR5VmFsdWVOYW1lKFVDSEFSX1NDUklQVCwgc2NyaXB0Tm8sIFVfU0hPUlRfUFJPUEVSVFlfTkFNRSk7CisgICAgc3ByaW50ZihzY3JpcHRTZXRQYXR0ZXJuLCAiWzolczpdIiwgdXNlZFNjcmlwdE5hbWVzW251bWJlck9mVXNlZFNjcmlwdHNdKTsKKyAgICBudW1iZXJPZlVzZWRTY3JpcHRzKys7CisgICAgVW5pY29kZVNldCBzY3JpcHRTZXQoVW5pY29kZVN0cmluZyhzY3JpcHRTZXRQYXR0ZXJuLCAiIiksIHN0YXR1cyk7CisgICAgZXhlbXBsYXJVU2V0LnJlbW92ZUFsbChzY3JpcHRTZXQpOworICAgIGV4ZW1wbGFyVVNldC50b1BhdHRlcm4ocGF0dGVybiwgVFJVRSk7CisgIH0KKyAgZXhlbXBsYXJVU2V0LmNsZWFyKCk7CisKKyAgLy8gYWx3YXlzIGFkZCBBU0NJSQorICAvL2V4ZW1wbGFyVVNldC5hZGRBbGwoVW5pY29kZVNldChVbmljb2RlU3RyaW5nKCJbXFx1MDAyMC1cXHUwMDdmXSIsICIiKSwgc3RhdHVzKSk7CisgIGV4ZW1wbGFyVVNldC5hZGRBbGwoVW5pY29kZVNldChVbmljb2RlU3RyaW5nKCJbXFx1MDA0MS1cXHUwMDViXSIsICIiKSwgc3RhdHVzKSk7CisgIGlmKGdFeGVtcGxhcikgeworICAgIGV4ZW1wbGFyVVNldC5hcHBseVBhdHRlcm4oZXhlbXBsYXJTdHJpbmcsIHN0YXR1cyk7CisgICAgZXhlbXBsYXJVU2V0LmNsb3NlT3ZlcihVU0VUX0NBU0UpOworICAgIGlmKCFnUXVpZXQpIHsKKyAgICAgIHVfZnByaW50ZihvdXQsICJJQ1UgZXhlbXBsYXIgY2hhcmFjdGVyczpcbiIpOworICAgICAgZXNjYXBlU3RyaW5nKGV4ZW1wbGFyU3RyaW5nLmdldEJ1ZmZlcigpLCBleGVtcGxhclN0cmluZy5sZW5ndGgoKSwgb3V0KTsKKyAgICAgIHVfZnByaW50ZihvdXQsICJcbiIpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZighZ1F1aWV0KSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiVXNpbmcgc2NyaXB0czpcbiIpOworICAgIH0KKyAgICAvLyBhZGQgaW50ZXJlc3Rpbmcgc2NyaXB0cworICAgIGZvcihpID0gMDsgaSA8IG51bWJlck9mVXNlZFNjcmlwdHM7IGkrKykgeworICAgICAgc3ByaW50ZihzY3JpcHRTZXRQYXR0ZXJuLCAiWzolczpdIiwgdXNlZFNjcmlwdE5hbWVzW2ldKTsKKyAgICAgIGV4ZW1wbGFyVVNldC5hZGRBbGwoVW5pY29kZVNldChVbmljb2RlU3RyaW5nKHNjcmlwdFNldFBhdHRlcm4sICIiKSwgc3RhdHVzKSk7CisgICAgICBpZighZ1F1aWV0KSB7CisgICAgICAgIHVfZnByaW50ZihvdXQsICIlc1xuIiwgc2NyaXB0U2V0UGF0dGVybik7CisgICAgICB9CisgICAgfQorICB9CisKKworICByZW1vdmVJZ25vcmFibGVDaGFycyhleGVtcGxhclVTZXQsIGNvbXBhcmVyLCBzdGF0dXMpOworCisgIGFkZFV0aWxpdHlDaGFycyhleGVtcGxhclVTZXQsIHN0YXR1cyk7CisKKy8qCisgIC8vIHRyeSB0byBjaGVjayB3aGV0aGVyIHRhaWxvcmVkIHNldCBhbmQgZXhlbXBsYXIgY2hhcmFjdGVycyBtYXRjaC4KKyAgVVNldCAqdGFpbG9yZWQgPSB1Y29sX2dldFRhaWxvcmVkU2V0KGdDb2wsICZzdGF0dXMpOworICBVQm9vbCB0YWlsb3JlZENvbnRhaW5lZCA9IGV4ZW1wbGFyVVNldC5jb250YWluc0FsbCgqKChVbmljb2RlU2V0ICopdGFpbG9yZWQpKTsKKyAgaWYoIXRhaWxvcmVkQ29udGFpbmVkKSB7CisgICAgKChVbmljb2RlU2V0ICopdGFpbG9yZWQpLT5yZW1vdmVBbGwoZXhlbXBsYXJVU2V0KTsKKyAgICBVbmljb2RlU3RyaW5nIHBhdHRlcm47CisgICAgKChVbmljb2RlU2V0ICopdGFpbG9yZWQpLT50b1BhdHRlcm4ocGF0dGVybiwgVFJVRSk7CisgIH0KKyAgdXNldF9jbG9zZSh0YWlsb3JlZCk7CisqLworCisgIC8vcmV0dXJuIGV4ZW1wbGFyVVNldDsKK30KKwordm9pZCAKK3NldE91dHB1dEZpbGUoY29uc3QgY2hhciAqbmFtZSwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIGludDMyX3QgaSA9IDA7CisgIGNoYXIgZmlsZW5hbWVbMjU2XTsKKyAgc3RyY3B5KGZpbGVuYW1lLCBuYW1lKTsKKyAgZm9yKGkgPSAwOyBpIDwgZ1BsYXRmb3JtTm87IGkrKykgeworICAgIHN0cmNhdChmaWxlbmFtZSwgIl8iKTsKKyAgICBzdHJjYXQoZmlsZW5hbWUsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzW2ldXS5uYW1lKTsKKyAgfQorICBpZihnRXhlbXBsYXIpIHsKKyAgICBzdHJjYXQoZmlsZW5hbWUsICJfZXhlbXBsYXIiKTsKKyAgfSBlbHNlIHsKKyAgICBzdHJjYXQoZmlsZW5hbWUsICJfc2NyaXB0Iik7CisgIH0KKyAgc3RyY2F0KGZpbGVuYW1lLCAiLnV0ZjE2LnR4dCIpOworICBvdXQgPSB1X2ZvcGVuKGZpbGVuYW1lLCAid2IiLCAiZW4iLCAidXRmLTE2Iik7Cit9CisKK3ZvaWQKK3Byb2Nlc3NDb2xsYXRvcihVQ29sbGF0b3IgKmNvbCwgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIGludDMyX3QgaSA9IDA7CisgIGdDb2wgPSBjb2w7CisgIFVDaGFyIHJ1bGVTdHJpbmdbMTYzODRdOworICBpbnQzMl90IHJ1bGVTdHJpbmdMZW5ndGggPSB1Y29sX2dldFJ1bGVzRXgoZ0NvbCwgVUNPTF9UQUlMT1JJTkdfT05MWSwgcnVsZVN0cmluZywgMTYzODQpOworICBpZighZ1F1aWV0KSB7CisgICAgdV9mcHJpbnRmKG91dCwgIklDVSBydWxlczpcbiIpOworICAgIHByaW50UnVsZXMocnVsZVN0cmluZywgcnVsZVN0cmluZ0xlbmd0aCwgb3V0KTsKKyAgICBwcmludFJ1bGVzKHJ1bGVTdHJpbmcsIHJ1bGVTdHJpbmdMZW5ndGgsIGxvZyk7CisgICAgLy9lc2NhcGVTdHJpbmcocnVsZVN0cmluZywgcnVsZVN0cmluZ0xlbmd0aCwgb3V0KTsKKyAgICB1X2ZwcmludGYob3V0LCAiXG4iKTsKKyAgfQorICBjb25zdCBjaGFyICpsb2NhbGUgPSB1Y29sX2dldExvY2FsZShnQ29sLCBVTE9DX1JFUVVFU1RFRF9MT0NBTEUsICZzdGF0dXMpOworICBVbmljb2RlU2V0IGV4ZW1wbGFyVVNldDsKKyAgaWYobG9jYWxlKSB7CisgICAgZ2V0RXhlbXBsYXJzKGxvY2FsZSwgZXhlbXBsYXJVU2V0LCBzdGF0dXMpOworICB9IGVsc2UgeworICAgIGV4ZW1wbGFyVVNldCA9ICooKFVuaWNvZGVTZXQgKil1Y29sX2dldFRhaWxvcmVkU2V0KGdDb2wsICZzdGF0dXMpKTsKKyAgfQorCisKKyAgZm9yKGkgPSAwOyBpIDwgZ1BsYXRmb3JtTm87IGkrKykgeworICAgIHVfZnByaW50ZihvdXQsICJcbkdlbmVyYXRpbmcgb3JkZXIgZm9yIHBsYXRmb3JtOiAlc1xuIiwgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbaV1dLm5hbWUpOworICAgIGdDb21wYXJlciA9IHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzW2ldXS5jb21wYXJlcjsKKworICAgIHByZXBhcmVTdGFydGluZ1NldChleGVtcGxhclVTZXQsIGdDb21wYXJlciwgc3RhdHVzKTsKKyAgICBpbnQzMl90IGl0ZW1MZW4gPSAwOworICAgIC8vIGdldCB0aGUgbnVtYmVyIG9mIGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUgc2V0IChib3RoIGNvZGVwb2ludHMgYW5kIHN0cmluZ3MpCisgICAgaW50MzJfdCBleGVtcGxhclNldFNpemUgPSBleGVtcGxhclVTZXQuc2l6ZSgpOworICAgIFVuaWNvZGVTZXRJdGVyYXRvciBleGVtcGxhclVTZXRJdGVyKGV4ZW1wbGFyVVNldCk7CisKKyAgICAvLyBhbGxvY2F0ZSBJQ1UgbGluZXMKKyAgICBnSUNVTGluZXMgPSBuZXcgTGluZSpbZXhlbXBsYXJTZXRTaXplKjVdOyAKKyAgICBpbnQzMl90IGogPSAwOworICAgIGludDMyX3QgbGluZXNDb3VudCA9IDA7CisgICAgTGluZSAqbGluZXMgPSBuZXcgTGluZVtleGVtcGxhclNldFNpemVdOyAKKworICAgIGludDMyX3QgcmV2ZXJzZWRTZWNvbmRhcnkgPSBjaGVja1NlY29uZGFyeU9yZGVyaW5nKCk7CisgICAgaWYocmV2ZXJzZWRTZWNvbmRhcnkgPT0gMCkgeworICAgICAgdV9mcHJpbnRmKG91dCwgIlNlY29uZGFyaWVzIGRvIG5vdCBzZWVtIHRvIGJlIHJldmVyc2VkXG4iKTsKKyAgICB9IGVsc2UgaWYocmV2ZXJzZWRTZWNvbmRhcnkgPT0gMSkgeworICAgICAgdV9mcHJpbnRmKG91dCwgIlNlY29uZGFyaWVzIGFyZSByZXZlcnNlZFxuIik7CisgICAgICBpZihnQ29tcGFyZXIgPT0gSUNVc3RyY21wKSB7CisgICAgICAgIHVjb2xfc2V0QXR0cmlidXRlKGdDb2wsIFVDT0xfRlJFTkNIX0NPTExBVElPTiwgVUNPTF9PRkYsICZzdGF0dXMpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiQ2Fubm90IGNvbmNsdWRlIGlmIHNlY29uZGFyaWVzIGFyZSByZXZlcnNlZFxuIik7CisgICAgfQorCisgICAgaW50MzJfdCByZXZlcnNlZENhc2UgPSBjaGVja0Nhc2VPcmRlcmluZygpOworICAgIGlmKHJldmVyc2VkQ2FzZSA9PSAwKSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiQ2FzZSBkb2VzIG5vdCBzZWVtIHRvIGJlIHJldmVyc2VkXG4iKTsKKyAgICB9IGVsc2UgaWYocmV2ZXJzZWRDYXNlID09IDEpIHsKKyAgICAgIHVfZnByaW50ZihvdXQsICJDYXNlIGlzIHJldmVyc2VkXG4iKTsKKyAgICAgIGlmKGdDb21wYXJlciA9PSBJQ1VzdHJjbXApIHsKKyAgICAgICAgdWNvbF9zZXRBdHRyaWJ1dGUoZ0NvbCwgVUNPTF9DQVNFX0ZJUlNULCBVQ09MX09GRiwgJnN0YXR1cyk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHVfZnByaW50ZihvdXQsICJDYW5ub3QgY29uY2x1ZGUgaWYgY2FzZSBpcyByZXZlcnNlZFxuIik7CisgICAgfQorICAgICAgCisgICAgZXhlbXBsYXJVU2V0SXRlci5yZXNldCgpOworICAgIGdFbGVtZW50cy5yZW1vdmVBbGwoKTsKKyAgICBnRXhwYW5zaW9ucy5yZW1vdmVBbGwoKTsKKyAgICBsaW5lc0NvdW50ID0gMDsKKworICAgIHdoaWxlKGV4ZW1wbGFyVVNldEl0ZXIubmV4dCgpKSB7CisgICAgICBMaW5lICpjdXJyTGluZSA9IGxpbmVzK2xpbmVzQ291bnQ7CisgICAgICBpZihleGVtcGxhclVTZXRJdGVyLmlzU3RyaW5nKCkpIHsgLy8gcHJvY2VzcyBhIHN0cmluZworICAgICAgICB1X21lbWNweShjdXJyTGluZS0+bmFtZSwgZXhlbXBsYXJVU2V0SXRlci5nZXRTdHJpbmcoKS5nZXRCdWZmZXIoKSwgZXhlbXBsYXJVU2V0SXRlci5nZXRTdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgICAgIGN1cnJMaW5lLT5sZW4gPSBleGVtcGxhclVTZXRJdGVyLmdldFN0cmluZygpLmxlbmd0aCgpOworICAgICAgfSBlbHNlIHsgLy8gcHJvY2VzcyBjb2RlIHBvaW50CisgICAgICAgIFVCb29sIGlzRXJyb3IgPSBGQUxTRTsKKyAgICAgICAgY3VyckxpbmUtPmxlbiA9IDA7CisgICAgICAgIFUxNl9BUFBFTkQoY3VyckxpbmUtPm5hbWUsIGN1cnJMaW5lLT5sZW4sIDI1LCBleGVtcGxhclVTZXRJdGVyLmdldENvZGVwb2ludCgpLCBpc0Vycm9yKTsKKyAgICAgIH0KKyAgICAgIGN1cnJMaW5lLT5uYW1lW2N1cnJMaW5lLT5sZW5dID0gMDsgLy8gemVybyB0ZXJtaW5hdGUsIGZvciBvdXIgZXZpbCB3YXlzCisgICAgICBjdXJyTGluZS0+aW5kZXggPSBsaW5lc0NvdW50OworICAgICAgbGluZXNDb3VudCsrOworICAgICAgbm90ZUVsZW1lbnQoY3VyckxpbmUpOworICAgIH0KKyAgICBjb25zdHJ1Y3RBbmRBbmFseXplKGdJQ1VMaW5lcywgbGluZXMsIGV4ZW1wbGFyU2V0U2l6ZSwgZ0NvbXBhcmVyKTsKKworICAgIGRlbGV0ZVtdIGxpbmVzOyAKKyAgfQorCisKKyAgLy8gY2xlYW51cCBnbG9iYWxzCisgIGRlbGV0ZVtdIGdJQ1VMaW5lczsgCisgIHVfZmZsdXNoKG91dCk7CisgIHVfZmNsb3NlKG91dCk7CisgIHVjb2xfY2xvc2UoZ0NvbCk7Cit9CisKK3ZvaWQKK3Byb2Nlc3NMb2NhbGUoY29uc3QgY2hhciAqbG9jYWxlLCBVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgZ1dpbkxDSUQgPSB1bG9jX2dldExDSUQobG9jYWxlKTsKKworICBVQ29sbGF0b3IgKmNvbCA9IHVjb2xfb3Blbihsb2NhbGUsICZzdGF0dXMpOworCisgIHNldE91dHB1dEZpbGUobG9jYWxlLCBzdGF0dXMpOworCisgIHVfZnByaW50ZihvdXQsICJMb2NhbGUgJXMgKExDSUQ6JTA2WClcbiIsIGxvY2FsZSwgZ1dpbkxDSUQpOworCisgIHByb2Nlc3NDb2xsYXRvcihjb2wsIHN0YXR1cyk7Cit9CisKK1VCb29sIAoraGFzQ29sbGF0aW9uRWxlbWVudHMoY29uc3QgY2hhciAqbG9jTmFtZSkgeworCisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBVUmVzb3VyY2VCdW5kbGUgKkNvbEVsID0gTlVMTDsKKworICBVUmVzb3VyY2VCdW5kbGUgKmxvYyA9IHVyZXNfb3BlbihOVUxMLCBsb2NOYW1lLCAmc3RhdHVzKTs7CisKKyAgaWYoVV9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgQ29sRWwgPSB1cmVzX2dldEJ5S2V5KGxvYywgIkNvbGxhdGlvbkVsZW1lbnRzIiwgQ29sRWwsICZzdGF0dXMpOworICAgIGlmKHN0YXR1cyA9PSBVX1pFUk9fRVJST1IpIHsgLyogZG8gdGhlIHRlc3QgLSB0aGVyZSBhcmUgcmVhbCBlbGVtZW50cyAqLworICAgICAgdXJlc19jbG9zZShDb2xFbCk7CisgICAgICB1cmVzX2Nsb3NlKGxvYyk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgdXJlc19jbG9zZShDb2xFbCk7CisgICAgdXJlc19jbG9zZShsb2MpOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworaW50CittYWluKGludCBhcmdjLAorICAgICBjaGFyKiBhcmd2W10pCit7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBlcnIgPSB1X2Zpbml0KHN0ZGVyciwgImVuIiwgImxhdGluLTEiKTsKKyAgbG9nID0gdV9maW5pdChzdGRvdXQsICJlbiIsICJsYXRpbi0xIik7CisKKy8qCisgIFVTZXQgKndzcCA9IHVwcnZfb3BlblJ1bGVXaGl0ZVNwYWNlU2V0KCZzdGF0dXMpOworICB1c2V0X2FkZCh3c3AsIDB4MDA0MSk7CisgIHVzZXRfcmVtb3ZlKHdzcCwgMHgwMDQxKTsKKyAgVW5pY29kZVN0cmluZyBwYXQ7CisgICgoVW5pY29kZVNldCAqKXdzcCktPnRvUGF0dGVybihwYXQsIFRSVUUpOworICBwYXQuc2V0Q2hhckF0KHBhdC5sZW5ndGgoKSwgMCk7CisgIGVzY2FwZVN0cmluZyhwYXQuZ2V0QnVmZmVyKCksIHBhdC5sZW5ndGgoKSwgbG9nKTsKKyAgdV9mZmx1c2gobG9nKTsKKyovCisKKyAgVVRyYW5zbGl0ZXJhdG9yICphbnlIZXggPSB1dHJhbnNfb3BlbigiW15cXHUwMDBhXFx1MDAyMC1cXHUwMDdmXSBBbnktSGV4L0phdmEiLCBVVFJBTlNfRk9SV0FSRCwgTlVMTCwgMCwgTlVMTCwgJnN0YXR1cyk7CisgIHVfZnNldHRyYW5zbGl0ZXJhdG9yKGxvZywgVV9XUklURSwgYW55SGV4LCAmc3RhdHVzKTsKKworICBwcm9jZXNzQXJncyhhcmdjLCBhcmd2LCBzdGF0dXMpOworICBpbnQzMl90IGkgPSAwOworCisKKyAgZ0VsZW1lbnRzLnNldFZhbHVlRGVsZXRlcihkZWxldGVMaW5lRWxlbWVudCk7CisKKworICBpZihVX0ZBSUxVUkUoc3RhdHVzKSB8fCBnUGxhdGZvcm1ObyA9PSAwKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZ1VDQSA9IHVjb2xfb3Blbigicm9vdCIsICZzdGF0dXMpOworCisgIGlmKGdSdWxlc1N0ZGluKSB7CisgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgVUNoYXIgcnVsZUJ1ZmZlclsxNjM4NF07CisgICAgVUNoYXIgKnJ1bGVzID0gcnVsZUJ1ZmZlcjsKKyAgICBpbnQzMl90IG1heFJ1bGVMZW4gPSAxNjM4NDsKKyAgICBpbnQzMl90IHJMZW4gPSAwOworICAgIHdoaWxlKGdldHMoYnVmZmVyKSkgeworICAgICAgaWYoYnVmZmVyWzBdICE9ICcvJyAmJiBidWZmZXJbMV0gIT0gJy8nKSB7CisgICAgICAgIHJMZW4gPSB1X3VuZXNjYXBlKGJ1ZmZlciwgcnVsZXMsIG1heFJ1bGVMZW4pOworICAgICAgICBydWxlcyArPSByTGVuOworICAgICAgICBtYXhSdWxlTGVuIC09IHJMZW47CisgICAgICB9CisgICAgfQorICAgIFVQYXJzZUVycm9yIHBhcnNlRXJyb3I7CisgICAgLy9lc2NhcGVTdHJpbmcocnVsZUJ1ZmZlciwgcnVsZXMtcnVsZUJ1ZmZlciwgbG9nKTsvLworICAgIHVfZnByaW50Zihsb2csICIlVVxuIiwgcnVsZUJ1ZmZlcik7CisKKyAgICBVQ29sbGF0b3IgKmNvbCA9IHVjb2xfb3BlblJ1bGVzKHJ1bGVCdWZmZXIsIHJ1bGVzLXJ1bGVCdWZmZXIsIFVDT0xfREVGQVVMVCwgVUNPTF9ERUZBVUxULCAmcGFyc2VFcnJvciwgJnN0YXR1cyk7CisgICAgaWYoVV9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICAgIHNldE91dHB1dEZpbGUoInN0ZGluUnVsZXMiLCBzdGF0dXMpOworICAgICAgcHJvY2Vzc0NvbGxhdG9yKGNvbCwgc3RhdHVzKTsKKyAgICB9IGVsc2UgeworICAgICAgdV9mcHJpbnRmKGVyciwgIkVycm9yICVzXG4iLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKyAgICB9CisgIH0gZWxzZSB7CisKKyAgICBpZihnTG9jYWxlKSB7CisgICAgICBwcm9jZXNzTG9jYWxlKGdMb2NhbGUsIHN0YXR1cyk7CisgICAgfSBlbHNlIGlmKGdMb2NhbGVObykgeworICAgICAgZm9yKGkgPSAwOyBpIDwgZ0xvY2FsZU5vOyBpKyspIHsKKyAgICAgICAgcHJvY2Vzc0xvY2FsZShnTG9jYWxlc1tpXSwgc3RhdHVzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBkbyB0aGUgbG9vcCB0aHJvdWdoIGFsbCB0aGUgbG9jYWxlcworICAgICAgaW50MzJfdCBub09mTG9jID0gdWxvY19jb3VudEF2YWlsYWJsZSgpOworICAgICAgY29uc3QgY2hhciAqbG9jTmFtZSA9IE5VTEw7CisgICAgICBmb3IoaSA9IDA7IGk8bm9PZkxvYzsgaSsrKSB7CisgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgbG9jTmFtZSA9IHVsb2NfZ2V0QXZhaWxhYmxlKGkpOworICAgICAgICBpZihoYXNDb2xsYXRpb25FbGVtZW50cyhsb2NOYW1lKSkgeworICAgICAgICAgIHByb2Nlc3NMb2NhbGUobG9jTmFtZSwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgdWNvbF9jbG9zZShnVUNBKTsKKworICB1X2ZmbHVzaChsb2cpOworICB1X2ZjbG9zZShsb2cpOworICB1X2ZmbHVzaChlcnIpOworICB1X2ZjbG9zZShlcnIpOworCisgIHJldHVybiAwOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbHByb2JlL2NvbHByb2JlLmRzcCBiL2NvbHByb2JlL2NvbHByb2JlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjc0Yzg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvY29scHJvYmUuZHNwCkBAIC0wLDAgKzEsMTQ4IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImNvbHByb2JlIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9Y29scHJvYmUgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJjb2xwcm9iZS5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgImNvbHByb2JlLm1hayIgQ0ZHPSJjb2xwcm9iZSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgImNvbHByb2JlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJjb2xwcm9iZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gImNvbHByb2JlIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorTVRMPW1pZGwuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9JICIuLi8uLi8uLi9pbmNsdWRlIiAvSSAiLi4vLi4vdG9vbHMvdG9vbHV0aWwiIC9JICIuLi8uLi9jb21tb24iIC9JICIuLi8uLi9pMThuIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBpY3Vpby5saWIgaWN1dWMubGliIGljdWluLmxpYiBpY3V0dS5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NiAvbGlicGF0aDoiLi4vLi4vLi4vbGliIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiY29scHJvYmUgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK01UTD1taWRsLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLi8uLi8uLi9pbmNsdWRlIiAvSSAiLi4vLi4vdG9vbHMvdG9vbHV0aWwiIC9JICIuLi8uLi9jb21tb24iIC9JICIuLi8uLi9pMThuIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgaWN1aW9kLmxpYiBpY3V1Y2QubGliIGljdWluZC5saWIgaWN1dHVkLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi8uLi8uLi9saWIiCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJjb2xwcm9iZSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgImNvbHByb2JlIC0gV2luMzIgRGVidWciCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cY29scHJvYmVOZXcuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxsaW5lLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cc29ydGVkbGluZXMuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxzdHJlbmd0aHByb2JlLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdGFyZ2V0c2V0Z2VuZXJhdG9yLmNwcAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdXByaW50ZXIuY3BwCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llxjb2xwcm9iZS5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9LlxsaW5lLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHNvcnRlZGxpbmVzLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHN0cmVuZ3RocHJvYmUuaAorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cdGFyZ2V0c2V0Z2VuZXJhdG9yLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHVwcmludGVyLmgKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBHcm91cAorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIgorIyBFbmQgR3JvdXAKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvY29scHJvYmUvY29scHJvYmUuaCBiL2NvbHByb2JlL2NvbHByb2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExMmM0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2NvbHByb2JlLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBDT0xQUk9CRV9ICisjZGVmaW5lIENPTFBST0JFX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS9ub3JtbHpyLmgiCisKK3R5cGVkZWYgaW50ICgqQ29tcGFyZUZuKSAoY29uc3Qgdm9pZCAqZWxlbTEsIGNvbnN0IHZvaWQgKmVsZW0yKTsKK3R5cGVkZWYgaW50ICgqR2V0U29ydEtleUZuKSAoY29uc3QgVUNoYXIgKnN0cmluZywgaW50MzJfdCBsZW4sIHVpbnQ4X3QgKmJ1ZmZlciwgaW50MzJfdCBidWZmQ2FwYWNpdHkpOworLy90eXBlZGVmIGludCAoX19jZGVjbCAqQ29tcGFyZUZuKShjb25zdCB2b2lkICplbGVtMSwgY29uc3Qgdm9pZCAqZWxlbTIpOwordm9pZCBnZW5lcmF0ZVJlcGVydG9pcmUoY29uc3QgY2hhciAqbG9jYWxlLCBVbmljb2RlU2V0ICZyZXAsIFVCb29sICZoYW5BcHBlYXJzLCBVRXJyb3JDb2RlICZzdGF0dXMpOworVW5pY29kZVNldCBmbGF0dGVuKGNvbnN0IFVuaWNvZGVTZXQgJnNvdXJjZSwgVUVycm9yQ29kZSAmc3RhdHVzKTsKKworLy9Vbmljb2RlU2V0IGdlbmVyYXRlUmVwZXJ0b2lyZShjb25zdCBjaGFyICpsb2NhbGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbHByb2JlL2NvbHByb2JlTmV3LmNwcCBiL2NvbHByb2JlL2NvbHByb2JlTmV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmNmYzUxCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvY29scHJvYmVOZXcuY3BwCkBAIC0wLDAgKzEsMTA3OCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSBjb2xwcm9iZS5jcHAKKyoKKyogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMy8xOC8yMDAzICB3ZWl2ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlICJ1b3B0aW9ucy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNvbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNvbGVpdHIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VyZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNldGl0ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2NyaXB0LmgiCisjaW5jbHVkZSAidW5pY29kZS9sb2NpZC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgInVwcm9wcy5oIgorI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJ1Y29sX2ltcC5oIgorCisjaW5jbHVkZSAidW5pY29kZS91c3RkaW8uaCIKKyNpbmNsdWRlICJ1bmljb2RlL3V0cmFucy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisvLyB1bml4IHRvbG93ZXIKKyNpbmNsdWRlIDxjdHlwZS5oPgorLy8gdW5peCBzZXRsb2NhbGUKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2luY2x1ZGUgImNvbHByb2JlLmgiCisKKyNpbmNsdWRlICJsaW5lLmgiCisjaW5jbHVkZSAic29ydGVkbGluZXMuaCIKKyNpbmNsdWRlICJzdHJlbmd0aHByb2JlLmgiCisKK3ZvaWQgdGVzdFdpbihTdHJlbmd0aFByb2JlICZwcm9iZSwgVUVycm9yQ29kZSAmc3RhdHVzKSA7CisKKyNpZiBkZWZpbmVkIFdJTjMyCisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxkaXJlY3QuaD4KKworaW50IGNyZWF0ZURpcihjb25zdCBjaGFyKiBkaXJOYW1lKSB7CisgIHN0cnVjdCBfc3RhdCBteVN0YXQ7CisgIGludCByZXN1bHQgPSBfc3RhdChkaXJOYW1lLCAmbXlTdGF0KTsKKyAKKyAgaWYocmVzdWx0ID09IC0xKSB7CisgICAgcmVzdWx0ID0gX21rZGlyKGRpck5hbWUpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0gZWxzZSBpZihteVN0YXQuc3RfbW9kZSAmIF9TX0lGRElSKSB7CisgICAgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDE7CisgIH0KK30KKworLy8jZWxpZiBkZWZpbmVkIFBPU0lYCisjZWxzZQorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBjcmVhdGVEaXIoY29uc3QgY2hhciogZGlyTmFtZSkgeworICBzdHJ1Y3Qgc3RhdCBteVN0YXQ7CisgIGludCByZXN1bHQgPSBzdGF0KGRpck5hbWUsICZteVN0YXQpOworIAorICBpZihyZXN1bHQgPT0gLTEpIHsKKyAgICByZXN1bHQgPSBta2RpcihkaXJOYW1lLCBTX0lSVVNSfFNfSVdVU1J8U19JWFVTUnxTX0lSR1JQfFNfSVdHUlB8U19JWEdSUHxTX0lST1RIfFNfSVdPVEh8U19JWE9USCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSBlbHNlIGlmKFNfSVNESVIobXlTdGF0LnN0X21vZGUpKSB7CisgICAgcmV0dXJuIDA7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDE7CisgIH0KK30KKy8vCisvLyAgU3R1YnMgZm9yIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyB3aGVuIGJ1aWxkaW5nIG9uIFVOSVhlcy4KKy8vCit0eXBlZGVmIGludCBEV09SRDsKK2lubGluZSBpbnQgQ29tcGFyZVN0cmluZ1coRFdPUkQsIERXT1JELCBVQ2hhciAqLCBpbnQsIFVDaGFyICosIGludCkge3JldHVybiAwO307CisvLyNlbHNlCisvLyNlcnJvciAiTm90IFBPU0lYIG9yIFdpbmRvd3MuIFdvbid0IHdvcmsuIgorI2VuZGlmCisKKyNpbmNsdWRlICJsaW5lLmgiCisKK3N0YXRpYyBVQm9vbCBnVmVyYm9zZSA9IEZBTFNFOworc3RhdGljIFVCb29sIGdEZWJ1ZyA9IEZBTFNFOworc3RhdGljIFVCb29sIGdRdWlldCA9IEZBTFNFOworc3RhdGljIFVCb29sIGdFeGVtcGxhciA9IEZBTFNFOworCitEV09SRCAgICAgICAgICBnV2luTENJRDsKK2ludCAgICAgICAgICAgIGdDb3VudDsKK1VDb2xsYXRvciAgICAgKmdDb2w7CitVQ29sbGF0b3IgICAgICpnVUNBOworVUNvbnZlcnRlciAgICAqdXRmOGNudjsKK0NvbXBhcmVGbiBnQ29tcGFyZXI7CitpbnQgICAgICAgZ1JlZk51bTsKK1VuaWNvZGVTZXQgZ0V4Y2x1ZGVTZXQ7CitVbmljb2RlU2V0IGdSZXBlcnRvaXJlOworCitjb25zdCBVQ2hhciBzZXBhcmF0b3JDaGFyID0gMHgwMDMwOworCitVUHJpbnRlciAqbG9nZ2VyOworVVByaW50ZXIgKmRlYnVnOworVVByaW50ZXIgKnRhaWxvcmluZ0J1bmRsZTsKK1VQcmludGVyICpyZWZlcmVuY2VCdW5kbGU7CitVUHJpbnRlciAqYnVuZGxlOworRklMRSAgICAgKmZUYWlsb3JpbmdEdW1wOworRklMRSAgICAgKmZEZWZhdWx0RHVtcDsKKworY29uc3QgY2hhciAqcHJvZ05hbWUgPSAiY29scHJvYmUiOworCitjb25zdCBjaGFyICpnTG9jYWxlID0gTlVMTDsKK2ludDMyX3QgcGxhdGZvcm1JbmRleCA9IC0xOworaW50MzJfdCBnUGxhdGZvcm1ObyA9IDA7CitpbnQzMl90IGdQbGF0Zm9ybUluZGV4ZXNbMTBdOworaW50MzJfdCBnTG9jYWxlTm8gPSAwOworY29uc3QgY2hhciogZ0xvY2FsZXNbMTAwXTsKK1VCb29sIGdSdWxlc1N0ZGluID0gRkFMU0U7Citjb25zdCBjaGFyICpvdXRwdXRGb3JtYXQgPSAiSFRNTCI7Citjb25zdCBjaGFyICpvdXRFeHRlbnNpb24gPSAiaHRtbCI7CisKK2VudW0geworICBIRUxQMSwKKyAgICBIRUxQMiwKKyAgICBWRVJCT1NFLAorICAgIFFVSUVULAorICAgIFZFUlNJT04sCisgICAgSUNVREFUQURJUiwKKyAgICBDT1BZUklHSFQsCisgICAgTE9DQUxFLAorICAgIFBMQVRGT1JNLAorICAgIERFQlVHLCAKKyAgICBFWEVNUExBUiwKKyAgICBSVUxFU1NURElOLAorICAgIFJFRkVSRU5DRSwKKyAgICBFWENMVURFU0VULAorICAgIFJFUEVSVE9JUkUsCisgIElOVEVSQUNUSVZFLAorICBQUklOVFJFRiwKKyAgRElGRiwgCisgIE9VVFBVVAorfTsKKworVU9wdGlvbiBvcHRpb25zW109eworICAvKjAqLyBVT1BUSU9OX0hFTFBfSCwKKyAgLyoxKi8gVU9QVElPTl9IRUxQX1FVRVNUSU9OX01BUkssCisgIC8qMiovIFVPUFRJT05fVkVSQk9TRSwKKyAgLyozKi8gVU9QVElPTl9RVUlFVCwKKyAgLyo0Ki8gVU9QVElPTl9WRVJTSU9OLAorICAvKjUqLyBVT1BUSU9OX0lDVURBVEFESVIsCisgIC8qNiovIFVPUFRJT05fQ09QWVJJR0hULAorICAvKjcqLyBVT1BUSU9OX0RFRigibG9jYWxlIiwgJ2wnLCBVT1BUX1JFUVVJUkVTX0FSRyksCisgIC8qOCovIFVPUFRJT05fREVGKCJwbGF0Zm9ybSIsICdwJywgVU9QVF9SRVFVSVJFU19BUkcpLAorICAvKjkqLyBVT1BUSU9OX0RFRigiZGVidWciLCAnRCcsIFVPUFRfTk9fQVJHKSwKKyAgLyoxMCovIFVPUFRJT05fREVGKCJleGVtcGxhciIsICdFJywgVU9QVF9OT19BUkcpLAorICAvKjExKi8gVU9QVElPTl9ERUYoInJ1bGVzc3RkaW4iLCAnUicsIFVPUFRfTk9fQVJHKSwKKyAgLyoxMiovIFVPUFRJT05fREVGKCJyZWYiLCAnYycsIFVPUFRfUkVRVUlSRVNfQVJHKSwKKyAgLyoxMyovIFVPUFRJT05fREVGKCJleGNsdWRlc2V0IiwgJ3gnLCBVT1BUX1JFUVVJUkVTX0FSRyksCisgIC8qMTQqLyBVT1BUSU9OX0RFRigicmVwZXJ0b2lyZSIsICd0JywgVU9QVF9SRVFVSVJFU19BUkcpLAorICAvKjE1Ki8gVU9QVElPTl9ERUYoImludGVyYWN0aXZlIiwgJ0knLCBVT1BUX05PX0FSRyksCisgIC8qMTYqLyBVT1BUSU9OX0RFRigicHJpbnRyZWYiLCAwLCBVT1BUX05PX0FSRyksCisgIC8qMTcqLyBVT1BUSU9OX0RFRigiZGlmZiIsIDAsIFVPUFRfTk9fQVJHKSwKKyAgLyoxOCovIFVPUFRJT05fREVGKCJvdXRwdXQiLCAwLCBVT1BUX1JFUVVJUkVTX0FSRykKK307CisKK1VDaGFyIGNvbXBBWzI1Nl07CitVQ2hhciBjb21wQlsyNTZdOworaW50MzJfdCBjb21wQUxlbiA9IDA7CitpbnQzMl90IGNvbXBCTGVuID0gMDsKKworY2hhciBjb21wVVRGOEFbMjU2XTsKK2NoYXIgY29tcFVURjhCWzI1Nl07CitpbnQzMl90IGNvbXBVVEY4QUxlbiA9IDA7CitpbnQzMl90IGNvbXBVVEY4QkxlbiA9IDA7CisKK2ludCBVTklYc3RyY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgZ0NvdW50Kys7CisgICAgaW50IHQ7CisgICAgY29tcEFMZW4gPSB1bm9ybV9ub3JtYWxpemUoKCooTGluZSAqKilhKS0+bmFtZSwgKCooTGluZSAqKilhKS0+bGVuLCBVTk9STV9ORkMsIDAsIGNvbXBBLCAyNTYsICZzdGF0dXMpOworICAgIGNvbXBCTGVuID0gdW5vcm1fbm9ybWFsaXplKCgqKExpbmUgKiopYiktPm5hbWUsICgqKExpbmUgKiopYiktPmxlbiwgVU5PUk1fTkZDLCAwLCBjb21wQiwgMjU2LCAmc3RhdHVzKTsKKyAgICBjb21wVVRGOEFMZW4gPSB1Y252X2Zyb21VQ2hhcnModXRmOGNudiwgY29tcFVURjhBLCAyNTYsIGNvbXBBLCBjb21wQUxlbiwgJnN0YXR1cyk7CisgICAgY29tcFVURjhBW2NvbXBVVEY4QUxlbl0gPSAwOworICAgIGNvbXBVVEY4QkxlbiA9IHVjbnZfZnJvbVVDaGFycyh1dGY4Y252LCBjb21wVVRGOEIsIDI1NiwgY29tcEIsIGNvbXBCTGVuLCAmc3RhdHVzKTsKKyAgICBjb21wVVRGOEJbY29tcFVURjhCTGVuXSA9IDA7CisgICAgdCA9IHN0cmNvbGwoY29tcFVURjhBLCBjb21wVVRGOEIpOworICAgIHJldHVybiB0OworfQorCitpbnQgVU5JWGdldFNvcnRLZXkoY29uc3QgVUNoYXIgKnN0cmluZywgaW50MzJfdCBsZW4sIHVpbnQ4X3QgKmJ1ZmZlciwgaW50MzJfdCBidWZmQ2FwYWNpdHkpIHsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIGNvbXBBTGVuID0gdW5vcm1fbm9ybWFsaXplKHN0cmluZywgbGVuLCBVTk9STV9ORkMsIDAsIGNvbXBBLCAyNTYsICZzdGF0dXMpOworICBjb21wVVRGOEFMZW4gPSB1Y252X2Zyb21VQ2hhcnModXRmOGNudiwgY29tcFVURjhBLCAyNTYsIGNvbXBBLCBjb21wQUxlbiwgJnN0YXR1cyk7CisgIGNvbXBVVEY4QVtjb21wVVRGOEFMZW5dID0gMDsKKyAgcmV0dXJuIChzdHJ4ZnJtKChjaGFyICopYnVmZmVyLCBjb21wVVRGOEEsIGJ1ZmZDYXBhY2l0eSkrMSk7Cit9CisKKyNpZmRlZiBXSU4zMgoraW50IFdpbnN0cmNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGdDb3VudCsrOworICAgIGludCB0OworICAgIC8vY29tcEFMZW4gPSB1bm9ybV9jb21wb3NlKGNvbXBBLCAyNTYsICgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYSktPmxlbiwgRkFMU0UsIDAsICZzdGF0dXMpOworICAgIC8vY29tcEJMZW4gPSB1bm9ybV9jb21wb3NlKGNvbXBCLCAyNTYsICgqKExpbmUgKiopYiktPm5hbWUsICgqKExpbmUgKiopYiktPmxlbiwgRkFMU0UsIDAsICZzdGF0dXMpOworICAgIGNvbXBBTGVuID0gdW5vcm1fbm9ybWFsaXplKCgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYSktPmxlbiwgVU5PUk1fTkZDLCAwLCBjb21wQSwgMjU2LCAmc3RhdHVzKTsKKyAgICBjb21wQkxlbiA9IHVub3JtX25vcm1hbGl6ZSgoKihMaW5lICoqKWIpLT5uYW1lLCAoKihMaW5lICoqKWIpLT5sZW4sIFVOT1JNX05GQywgMCwgY29tcEIsIDI1NiwgJnN0YXR1cyk7CisgICAgdCA9IENvbXBhcmVTdHJpbmdXKGdXaW5MQ0lELCAgU09SVF9TVFJJTkdTT1JULCAvLzAsCisgICAgICBjb21wQSwgY29tcEFMZW4sIAorICAgICAgY29tcEIsIGNvbXBCTGVuKTsKKworLyogICAgCisgICAgdCA9IENvbXBhcmVTdHJpbmdXKGdXaW5MQ0lELCAwLCAKKyAgICAgICgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYSktPmxlbiwgCisgICAgICAoKihMaW5lICoqKWIpLT5uYW1lLCAoKihMaW5lICoqKWIpLT5sZW4pOworKi8KKyAgICByZXR1cm4gdC0yOworfQorCitpbnQgV2luZ2V0U29ydEtleShjb25zdCBVQ2hhciAqc3RyaW5nLCBpbnQzMl90IGxlbiwgdWludDhfdCAqYnVmZmVyLCBpbnQzMl90IGJ1ZmZDYXBhY2l0eSkgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgY29tcEFMZW4gPSB1bm9ybV9ub3JtYWxpemUoc3RyaW5nLCBsZW4sIFVOT1JNX05GQywgMCwgY29tcEEsIDI1NiwgJnN0YXR1cyk7CisgIHJldHVybiBMQ01hcFN0cmluZ1coZ1dpbkxDSUQsIExDTUFQX1NPUlRLRVkgfCBTT1JUX1NUUklOR1NPUlQsIGNvbXBBLCBjb21wQUxlbiwgKHVuc2lnbmVkIHNob3J0ICopYnVmZmVyLCBidWZmQ2FwYWNpdHkpOworfQorCisjaWYgMAoraW50IFdpbnN0cmNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICB1aW50OF90IGIxWzI1Nl0sIGIyWzI1Nl07CisgIGludDMyX3QgYjFMZW4sIGIyTGVuOworICBiMUxlbiA9IFdpbmdldFNvcnRLZXkoKCooTGluZSAqKilhKS0+bmFtZSwgKCooTGluZSAqKilhKS0+bGVuLCBiMSwgMjU2KTsKKyAgYjJMZW4gPSBXaW5nZXRTb3J0S2V5KCgqKExpbmUgKiopYiktPm5hbWUsICgqKExpbmUgKiopYiktPmxlbiwgYjIsIDI1Nik7CisKKyAgYjFbYjFMZW5dID0gMDsKKyAgYjJbYjJMZW5dID0gMDsKKyAgCisgIHJldHVybiBzdHJjbXAoKGNvbnN0IGNoYXIgKiliMSwgKGNvbnN0IGNoYXIgKiliMik7Cit9CisjZW5kaWYKKworI2Vsc2UKK2ludCBXaW5zdHJjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgeworICBpZihhID09IGIpOworICByZXR1cm4gMDsKK30KK2ludCBXaW5nZXRTb3J0S2V5KGNvbnN0IFVDaGFyICosIGludDMyX3QgLCB1aW50OF90ICosIGludDMyX3QgKSB7CisgIHJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBJQ1VzdHJjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgeworICAgIGdDb3VudCsrOworICAgIFVDb2xsYXRpb25SZXN1bHQgdDsKKyAgICB0ID0gdWNvbF9zdHJjb2xsKGdDb2wsIAorICAgICAgKCooTGluZSAqKilhKS0+bmFtZSwgKCooTGluZSAqKilhKS0+bGVuLCAgCisgICAgICAoKihMaW5lICoqKWIpLT5uYW1lLCAoKihMaW5lICoqKWIpLT5sZW4pOworICAgIGlmICh0ID09IFVDT0xfTEVTUykgcmV0dXJuIC0xOworICAgIGlmICh0ID09IFVDT0xfR1JFQVRFUikgcmV0dXJuICsxOworICAgIHJldHVybiAwOworfQorCitpbnQgSUNVZ2V0U29ydEtleShjb25zdCBVQ2hhciAqc3RyaW5nLCBpbnQzMl90IGxlbiwgdWludDhfdCAqYnVmZmVyLCBpbnQzMl90IGJ1ZmZDYXBhY2l0eSkgeworICByZXR1cm4gdWNvbF9nZXRTb3J0S2V5KGdDb2wsIHN0cmluZywgbGVuLCBidWZmZXIsIGJ1ZmZDYXBhY2l0eSk7Cit9CisKK3N0cnVjdCB7CisgIGNvbnN0IGNoYXIqIG5hbWU7CisgIENvbXBhcmVGbiBjb21wYXJlcjsKKyAgR2V0U29ydEtleUZuIHNrZ2V0dGVyOworfSBwbGF0Zm9ybXNbXSA9IHsKKyAgeyAiaWN1IiwgSUNVc3RyY21wLCBJQ1VnZXRTb3J0S2V5IH0sCisgIHsgIncyayIsIFdpbnN0cmNtcCwgV2luZ2V0U29ydEtleX0sCisgIHsgIndpbnhwIiwgV2luc3RyY21wLCBXaW5nZXRTb3J0S2V5fSwKKyAgeyAiYWl4IiwgVU5JWHN0cmNtcCwgVU5JWGdldFNvcnRLZXl9LAorICB7ICJsaW51eCIsIFVOSVhzdHJjbXAsIFVOSVhnZXRTb3J0S2V5fQorfTsKKworCit2b2lkIHN0cmluZ1RvTG93ZXIoY2hhciAqc3RyaW5nKSB7CisgIHVpbnQzMl90IGkgPSAwOworICBmb3IoaSA9IDA7IGkgPCBzdHJsZW4oc3RyaW5nKTsgaSsrKSB7CisgICAgc3RyaW5nW2ldID0gdG9sb3dlcihzdHJpbmdbaV0pOworICB9Cit9CisKK3ZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbmFtZSkgeworICBsb2dnZXItPmxvZygiVXNhZ2U6ICVzIC0tbG9jYWxlIGxvY19uYW1lIC0tcGxhdGZvcm0gcGxhdGZvcm1cbiIsIG5hbWUpOworfQorCit2b2lkIGxpc3RLbm93blBsYXRmb3JtcygpIHsKKyAgdWludDMyX3QgaSA9IDA7CisgIGxvZ2dlci0+bG9nKCJLbm93biBwbGF0Zm9ybXM6XG4iKTsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHBsYXRmb3Jtcykvc2l6ZW9mKHBsYXRmb3Jtc1swXSk7IGkrKykgeworICAgIGxvZ2dlci0+bG9nKCJcdCVzXG4iLCBwbGF0Zm9ybXNbaV0pOworICB9Cit9CisKK3ZvaWQgYWRkUGxhdGZvcm0oY29uc3QgY2hhciAqcGxhdGZvcm0pIHsKKyAgdWludDMyX3QgaTsKKyAgLy9zdHJpbmdUb0xvd2VyKHBsYXRmb3JtKTsKKyAgaW50MzJfdCBvbGRQbGF0Zm9ybU5vID0gZ1BsYXRmb3JtTm87CisKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHBsYXRmb3Jtcykvc2l6ZW9mKHBsYXRmb3Jtc1swXSk7IGkrKykgeworICAgIGlmKHN0cmNtcChwbGF0Zm9ybSwgcGxhdGZvcm1zW2ldLm5hbWUpID09IDApIHsKKyAgICAgIGdQbGF0Zm9ybUluZGV4ZXNbZ1BsYXRmb3JtTm8rK10gPSBpOworICAgIH0KKyAgfQorICBpZihnUGxhdGZvcm1ObyA9PSBvbGRQbGF0Zm9ybU5vKSB7CisgICAgbG9nZ2VyLT5sb2coIlVua25vd24gcGxhdGZvcm0gJXNcbiIsIHBsYXRmb3JtKTsKKyAgICBsaXN0S25vd25QbGF0Zm9ybXMoKTsKKyAgfQorfQorCit2b2lkIHByb2Nlc3NBcmdzKGludCBhcmdjLCBjaGFyKiBhcmd2W10sIFVFcnJvckNvZGUgJnN0YXR1cykKK3sKKyAgaW50MzJfdCBpID0gMDsKKyAgVV9NQUlOX0lOSVRfQVJHUyhhcmdjLCBhcmd2KTsKKworICBhcmdjID0gdV9wYXJzZUFyZ3MoYXJnYywgYXJndiwgKGludDMyX3QpKHNpemVvZihvcHRpb25zKS9zaXplb2Yob3B0aW9uc1swXSkpLCBvcHRpb25zKTsKKworICBpZihhcmdjIDwgMCkgeworICAgIGxvZ2dlci0+bG9nKCJVbmtub3duIG9wdGlvbjogJXNcbiIsIGFyZ3ZbLWFyZ2NdKTsKKyAgICB1c2FnZShwcm9nTmFtZSk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYob3B0aW9uc1swXS5kb2VzT2NjdXIgfHwgb3B0aW9uc1sxXS5kb2VzT2NjdXIpIHsKKyAgICB1c2FnZShwcm9nTmFtZSk7CisgICAgcmV0dXJuOworICB9CisgIGlmKG9wdGlvbnNbVkVSQk9TRV0uZG9lc09jY3VyKSB7CisgICAgZ1ZlcmJvc2UgPSBUUlVFOworICB9CisgIGlmKG9wdGlvbnNbREVCVUddLmRvZXNPY2N1cikgeworICAgIGdEZWJ1ZyA9IFRSVUU7CisgICAgZ1ZlcmJvc2UgPSBUUlVFOworICB9CisgIGlmKG9wdGlvbnNbRVhFTVBMQVJdLmRvZXNPY2N1cikgeworICAgIGdFeGVtcGxhciA9IFRSVUU7CisgIH0KKyAgaWYob3B0aW9uc1tRVUlFVF0uZG9lc09jY3VyKSB7CisgICAgZ1F1aWV0ID0gVFJVRTsKKyAgfQorCisgIC8vIEFTQ0lJIGJhc2VkIG9wdGlvbnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgLy8gdGhpcyBpcyBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2lsbCBhbGxvdyB0byBsb2FkCisgIC8vIHVwIElDVSBydWxlcyBhbmQgdGhlbiBwb2tlIHRocm91Z2ggdGhlbS4KKyAgLy8gSW4gdGhhdCBjYXNlLCB3ZSB0ZXN0IG9ubHkgSUNVIGFuZCBkb24ndCBuZWVkIAorICAvLyBhIGxvY2FsZS4KKyAgaWYob3B0aW9uc1tSVUxFU1NURElOXS5kb2VzT2NjdXIpIHsKKyAgICBnUnVsZXNTdGRpbiA9IFRSVUU7CisgICAgYWRkUGxhdGZvcm0oImljdSIpOworICAgIHJldHVybjsKKyAgfSAKKworICBpZihvcHRpb25zW0xPQ0FMRV0uZG9lc09jY3VyKSB7CisgICAgZ0xvY2FsZSA9IG9wdGlvbnNbTE9DQUxFXS52YWx1ZTsKKyAgfSBlbHNlIHsKKyAgICBnTG9jYWxlID0gYXJndlsxXTsKKyAgICAvL2ZvcihpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworICAgIC8vZ0xvY2FsZXNbZ0xvY2FsZU5vKytdID0gYXJndltpXTsKKyAgICAvL30KKyAgfQorCisgIGlmKG9wdGlvbnNbUExBVEZPUk1dLmRvZXNPY2N1cikgeworICAgIGFkZFBsYXRmb3JtKG9wdGlvbnNbUExBVEZPUk1dLnZhbHVlKTsKKyAgfSBlbHNlIHsgLy8gdGhlcmUgaXMgYSBsaXN0IG9mIHBsYXRmb3JtcyAKKyAgICBhZGRQbGF0Zm9ybSgiaWN1Iik7CisgIH0KKworICBpZihvcHRpb25zW1JFRkVSRU5DRV0uZG9lc09jY3VyKSB7CisgICAgZm9yKGkgPSAwOyBpIDwgKGludDMyX3QpKHNpemVvZihwbGF0Zm9ybXMpL3NpemVvZihwbGF0Zm9ybXNbMF0pKTsgaSsrKSB7CisgICAgICBpZihzdHJjbXAob3B0aW9uc1tSRUZFUkVOQ0VdLnZhbHVlLCBwbGF0Zm9ybXNbaV0ubmFtZSkgPT0gMCkgeworICAgICAgICBnUmVmTnVtID0gaTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmKGkgPT0gc2l6ZW9mKHBsYXRmb3Jtcykvc2l6ZW9mKHBsYXRmb3Jtc1swXSkpIHsKKyAgICAgIGxvZ2dlci0+bG9nKCJVbmtub3duIHJlZmVyZW5jZSAlcyFcbiIsIG9wdGlvbnNbUkVGRVJFTkNFXS52YWx1ZSk7CisgICAgICBzdGF0dXMgPSBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICByZXR1cm47CisgICAgfQorICB9IGVsc2UgeworICAgIGdSZWZOdW0gPSAwOworICB9CisKKyAgaWYob3B0aW9uc1tFWENMVURFU0VUXS5kb2VzT2NjdXIpIHsKKyAgICBnRXhjbHVkZVNldC5hcHBseVBhdHRlcm4oVW5pY29kZVN0cmluZyhvcHRpb25zW0VYQ0xVREVTRVRdLnZhbHVlKSwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAgbG9nZ2VyLT5sb2coIkNhbm5vdCBjb25zdHJ1Y3QgZXhjbHVkZSBzZXQgZnJvbSBhcmd1bWVudCAlcy4gRXJyb3IgJXNcbiIsIG9wdGlvbnNbRVhDTFVERVNFVF0udmFsdWUsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICBVbmljb2RlU3RyaW5nIHBhdHRlcm47CisgICAgICBsb2dnZXItPmxvZyhnRXhjbHVkZVNldC50b1BhdHRlcm4ocGF0dGVybiwgVFJVRSksIFRSVUUpOworICAgIH0KKyAgfQorCisgIGlmKG9wdGlvbnNbUkVQRVJUT0lSRV0uZG9lc09jY3VyKSAgeworICAgIGdSZXBlcnRvaXJlLmFwcGx5UGF0dGVybihVbmljb2RlU3RyaW5nKG9wdGlvbnNbUkVQRVJUT0lSRV0udmFsdWUpLCBzdGF0dXMpOworICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICBsb2dnZXItPmxvZygiQ2Fubm90IGNvbnN0cnVjdCByZXBlcnRvaXJlIGZyb20gYXJndW1lbnQgJXMuIEVycm9yICVzXG4iLCBvcHRpb25zW1JFUEVSVE9JUkVdLnZhbHVlLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBpZihvcHRpb25zW09VVFBVVF0uZG9lc09jY3VyKSB7CisgICAgb3V0cHV0Rm9ybWF0ID0gb3B0aW9uc1tPVVRQVVRdLnZhbHVlOworICAgIGlmKHN0cmNtcChvdXRwdXRGb3JtYXQsICJIVE1MIikgPT0gMCkgeworICAgICAgb3V0RXh0ZW5zaW9uID0gImh0bWwiOworICAgIH0gZWxzZSBpZihzdHJjbXAob3V0cHV0Rm9ybWF0LCAiWE1MIikgPT0gMCkgeworICAgICAgb3V0RXh0ZW5zaW9uID0gInhtbCI7CisgICAgfSBlbHNlIHsKKyAgICAgIG91dEV4dGVuc2lvbiA9ICJ0eHQiOworICAgIH0KKyAgfQorCit9CisKKy8vIENoZWNrIHdoZXRoZXIgdXBwZXIgY2FzZSBjb21lcyBiZWZvcmUgbG93ZXIgY2FzZSBvciB2aWNlLXZlcnNhCitpbnQzMl90IAorY2hlY2tDYXNlT3JkZXJpbmcodm9pZCkgeworICBVQ2hhciBzdHVmZltdWzNdID0geworICAgIHsgMHgwMDYxLCBzZXBhcmF0b3JDaGFyLCAweDAwNjF9LCAvLyJhYSIsCisgICAgeyAweDAwNjEsIHNlcGFyYXRvckNoYXIsIDB4MDA0MSB9LCAvLyJhXFx1MDBFMCIsCisgICAgeyAweDAwNDEsIHNlcGFyYXRvckNoYXIsIDB4MDA2MSB9LCAvLyJcXHUwMEUwYSIsCisgICAgeyAweDAwNDEsIHNlcGFyYXRvckNoYXIsIDB4MDA0MSB9LCAvLyJcXHUwMEUwYSIsCisgICAgLy97IDB4MDBFMCwgc2VwYXJhdG9yQ2hhciwgMHgwMEUwIH0gIC8vIlxcdTAwRTBcXHUwMEUwIgorICB9OworICBjb25zdCBpbnQzMl90IHNpemUgPSBzaXplb2Yoc3R1ZmYpL3NpemVvZihzdHVmZlswXSk7CisKKyAgTGluZSAqKnNvcnRlZExpbmVzID0gbmV3IExpbmUqW3NpemVdOworICBMaW5lIGxpbmVzW3NpemVdOworCisgIGludDMyX3QgaSA9IDA7CisgIGludDMyX3Qgb3JkZXJlZCA9IDAsIHJldmVyc2VkID0gMDsKKworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBsaW5lc1tpXS5zZXROYW1lKHN0dWZmW2ldLCAzKTsKKyAgfQorICAvL3NldEFycmF5KHNvcnRlZExpbmVzLCBsaW5lcywgc2l6ZSk7CisgIHFzb3J0KHNvcnRlZExpbmVzLCBzaXplLCBzaXplb2YoTGluZSopLCBnQ29tcGFyZXIpOworCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGlmKCooc29ydGVkTGluZXMraSkgPT0gJmxpbmVzW2ldKSB7CisgICAgICBvcmRlcmVkKys7CisgICAgfQorICAgIGlmKCooc29ydGVkTGluZXMraSkgPT0gJmxpbmVzW3NpemUtaS0xXSkgeworICAgICAgcmV2ZXJzZWQrKzsKKyAgICB9CisgIH0KKworICBkZWxldGVbXSBzb3J0ZWRMaW5lczsKKyAgaWYob3JkZXJlZCA9PSBzaXplKSB7CisgICAgcmV0dXJuIDA7IC8vIGluIG5vcm1hbCBvcmRlcgorICB9IGVsc2UgaWYocmV2ZXJzZWQgPT0gc2l6ZSkgeworICAgIHJldHVybiAxOyAvLyBpbiByZXZlcnNlZCBvcmRlcgorICB9IGVsc2UgeworICAgIHJldHVybiAtMTsgLy8gdW5rbm93biBvcmRlcgorICB9Cit9CisKK3ZvaWQKK2dldEV4ZW1wbGFycyhjb25zdCBjaGFyICpsb2NhbGUsIFVuaWNvZGVTZXQgJmV4ZW1wbGFycywgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIC8vIGZpcnN0IHdlIGZpbGwgb3V0IHN0cnVjdHVyZXMgd2l0aCBleGVtcGxhciBjaGFyYWN0ZXJzLgorICBVUmVzb3VyY2VCdW5kbGUgKnJlcyA9IHVyZXNfb3BlbihOVUxMLCBsb2NhbGUsICZzdGF0dXMpOworICBVbmljb2RlU3RyaW5nIGV4ZW1wbGFyU3RyaW5nID0gdXJlc19nZXRVbmljb2RlU3RyaW5nQnlLZXkocmVzLCAiRXhlbXBsYXJDaGFyYWN0ZXJzIiwgJnN0YXR1cyk7CisgIGV4ZW1wbGFycy5jbGVhcigpOworICBleGVtcGxhcnMuYXBwbHlQYXR0ZXJuKGV4ZW1wbGFyU3RyaW5nLCBzdGF0dXMpOworICB1cmVzX2Nsb3NlKHJlcyk7Cit9CisKKwordm9pZAorZ2V0RmlsZU5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhaWxvcmluZ05hbWUsIGNoYXIgKnRhaWxvcmluZ0R1bXBOYW1lLCBjaGFyICpkZWZhdWx0TmFtZSwgY2hhciAqZGVmYXVsdER1bXBOYW1lLCBjaGFyICpkaWZmTmFtZSkgeworICBpZih0YWlsb3JpbmdOYW1lKSB7CisgICAgc3RyY3B5KHRhaWxvcmluZ05hbWUsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5uYW1lKTsKKyAgICBzdHJjYXQodGFpbG9yaW5nTmFtZSwgIi8iKTsKKyAgICBzdHJjYXQodGFpbG9yaW5nTmFtZSwgbmFtZSk7CisgICAgc3RyY2F0KHRhaWxvcmluZ05hbWUsICJfcmF3LiIpOworICAgIHN0cmNhdCh0YWlsb3JpbmdOYW1lLCBvdXRFeHRlbnNpb24pOworICB9CisgIGlmKHRhaWxvcmluZ0R1bXBOYW1lKSB7CisgICAgc3RyY3B5KHRhaWxvcmluZ0R1bXBOYW1lLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSk7CisgICAgc3RyY2F0KHRhaWxvcmluZ0R1bXBOYW1lLCAiLyIpOworICAgIHN0cmNhdCh0YWlsb3JpbmdEdW1wTmFtZSwgbmFtZSk7CisgICAgc3RyY2F0KHRhaWxvcmluZ0R1bXBOYW1lLCAiLmR1bXAiKTsKKyAgfQorCisgIGlmKGRpZmZOYW1lKSB7CisgICAgc3RyY3B5KGRpZmZOYW1lLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSk7CisgICAgc3RyY2F0KGRpZmZOYW1lLCAiLyIpOworICAgIHN0cmNhdChkaWZmTmFtZSwgbmFtZSk7CisgICAgc3RyY2F0KGRpZmZOYW1lLCAiX2NvbGxhdGlvbi4iKTsKKyAgICBzdHJjYXQoZGlmZk5hbWUsIG91dEV4dGVuc2lvbik7CisgIH0KKworICBpZihkZWZhdWx0TmFtZSkgeworICAgIHN0cmNweShkZWZhdWx0TmFtZSwgcGxhdGZvcm1zW2dSZWZOdW1dLm5hbWUpOworICAgIHN0cmNhdChkZWZhdWx0TmFtZSwgIi8iKTsKKyAgICBzdHJjYXQoZGVmYXVsdE5hbWUsIG5hbWUpOworICAgIHN0cmNhdChkZWZhdWx0TmFtZSwgIl9kZWZhdWx0X3Jhdy4iKTsKKyAgICBzdHJjYXQoZGVmYXVsdE5hbWUsIG91dEV4dGVuc2lvbik7CisgIH0KKworICBpZihkZWZhdWx0RHVtcE5hbWUpIHsKKyAgICBzdHJjcHkoZGVmYXVsdER1bXBOYW1lLCBwbGF0Zm9ybXNbZ1JlZk51bV0ubmFtZSk7CisgICAgc3RyY2F0KGRlZmF1bHREdW1wTmFtZSwgIi8iKTsKKyAgICBzdHJjYXQoZGVmYXVsdER1bXBOYW1lLCBuYW1lKTsKKyAgICBzdHJjYXQoZGVmYXVsdER1bXBOYW1lLCAiX2RlZmF1bHQuZHVtcCIpOworICB9Cit9CisKK3ZvaWQgCitzZXRGaWxlcyhjb25zdCBjaGFyICpuYW1lLCBVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICByZXR1cm47CisgIH0KKyAgaW50MzJfdCBpID0gMDsKKyAgY2hhciB0YWlsb3JpbmdOYW1lWzI1Nl07CisgIGNoYXIgdGFpbG9yaW5nRHVtcE5hbWVbMjU2XTsKKyAgY2hhciBkZWZhdWx0TmFtZVsyNTZdOworICBjaGFyIGRlZmF1bHREdW1wTmFtZVsyNTZdOworICBjaGFyIGRpZmZOYW1lWzI1Nl07CisKKyAgZ2V0RmlsZU5hbWVzKG5hbWUsIHRhaWxvcmluZ05hbWUsIHRhaWxvcmluZ0R1bXBOYW1lLCBkZWZhdWx0TmFtZSwgZGVmYXVsdER1bXBOYW1lLCBkaWZmTmFtZSk7CisgIGlmKG9wdGlvbnNbUExBVEZPUk1dLmRvZXNPY2N1ciAmJiAhb3B0aW9uc1tESUZGXS5kb2VzT2NjdXIpIHsgIAorICAgIGlmKGNyZWF0ZURpcihwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSkgPT0gMCkgeworICAgICAgdGFpbG9yaW5nQnVuZGxlID0gbmV3IFVQcmludGVyKHRhaWxvcmluZ05hbWUsICJlbiIsICJ1dGYtOCIsIE5VTEwsIEZBTFNFKTsKKyAgICAgIGZUYWlsb3JpbmdEdW1wID0gZm9wZW4odGFpbG9yaW5nRHVtcE5hbWUsICJ3YiIpOworICAgIH0gZWxzZSB7CisgICAgICBzdGF0dXMgPSBVX0ZJTEVfQUNDRVNTX0VSUk9SOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIGlmKG9wdGlvbnNbUkVGRVJFTkNFXS5kb2VzT2NjdXIgJiYgIW9wdGlvbnNbRElGRl0uZG9lc09jY3VyKSB7CisgICAgaWYoY3JlYXRlRGlyKHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lKSA9PSAwKSB7CisgICAgICByZWZlcmVuY2VCdW5kbGUgPSBuZXcgVVByaW50ZXIoZGVmYXVsdE5hbWUsICJlbiIsICJ1dGYtOCIsIE5VTEwsIEZBTFNFKTsKKyAgICAgIGZEZWZhdWx0RHVtcCA9IGZvcGVuKGRlZmF1bHREdW1wTmFtZSwgIndiIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0YXR1cyA9IFVfRklMRV9BQ0NFU1NfRVJST1I7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgaWYoKG9wdGlvbnNbUExBVEZPUk1dLmRvZXNPY2N1ciAmJiBvcHRpb25zW1JFRkVSRU5DRV0uZG9lc09jY3VyKSB8fCBvcHRpb25zW0RJRkZdLmRvZXNPY2N1cikgeworICAgIGlmKGNyZWF0ZURpcihwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSkgPT0gMCkgeworICAgICAgYnVuZGxlID0gbmV3IFVQcmludGVyKGRpZmZOYW1lLCAiZW4iLCAidXRmLTgiLCBOVUxMLCBGQUxTRSk7CisgICAgfQorICB9CisgIGlmKG9wdGlvbnNbRElGRl0uZG9lc09jY3VyKSB7CisgICAgZlRhaWxvcmluZ0R1bXAgPSBmb3Blbih0YWlsb3JpbmdEdW1wTmFtZSwgInJiIik7CisgICAgZkRlZmF1bHREdW1wID0gZm9wZW4oZGVmYXVsdER1bXBOYW1lLCAicmIiKTsKKyAgfQorfQorCisKK1VFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworc3RhdGljIFVuaWNvZGVTZXQgVU5BU1NJR05FRChVbmljb2RlU3RyaW5nKCJbOkNuOl0iKSwgc3RhdHVzKTsKK3N0YXRpYyBVbmljb2RlU2V0IEdFTkVSQUxfQUNDRU5UUyhVbmljb2RlU3RyaW5nKCJbWzpibG9jaz1Db21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3M6XS1bOkNuOl1dIiksIHN0YXR1cyk7CisvL3N0YXRpYyBVbmljb2RlU2V0IEFTQ0lJX0JBU0UoVW5pY29kZVN0cmluZygiW1s6QVNDSUk6XS1bOkw6XS1bOk46XV0iKSwgc3RhdHVzKTsKK3N0YXRpYyBVbmljb2RlU2V0IEFTQ0lJX0JBU0UoVW5pY29kZVN0cmluZygiW1s6QVNDSUk6XV0iKSwgc3RhdHVzKTsKK3N0YXRpYyBVbmljb2RlU2V0IEFMUEhBQkVUSUMoVW5pY29kZVN0cmluZygiWzphbHBoYWJldGljOl0iKSwgc3RhdHVzKTsKKy8vc3RhdGljIFVuaWNvZGVTZXQgQ09OVFJPTChVbmljb2RlU3RyaW5nKCJbWzpjb250cm9sOl1bXFx1MDAwMC1cXHUwMDJGXV0iKSwgc3RhdHVzKTsKK3N0YXRpYyBVbmljb2RlU2V0IEJNUChVbmljb2RlU3RyaW5nKCJbXFx1MDAwMC1cXHVGRkZGXSIpLCBzdGF0dXMpOworCitzdGF0aWMgVW5pY29kZVNldCBDT05UUk9MKFVuaWNvZGVTdHJpbmcoIls6Y29udHJvbDpdIiksIHN0YXR1cyk7CisKK1VDb2xsYXRvciAqCitzZXRMb2NhbGUoY29uc3QgY2hhciogbG9jYWxlLCBVRXJyb3JDb2RlICZzdGF0dXMpCit7CisgIGdXaW5MQ0lEID0gdWxvY19nZXRMQ0lEKGxvY2FsZSk7CisgIHNldGxvY2FsZShMQ19DT0xMQVRFLCBsb2NhbGUpOworCisgIGlmKGdDb2wpIHsKKyAgICB1Y29sX2Nsb3NlKGdDb2wpOworICB9CisgIGdDb2wgPSB1Y29sX29wZW4obG9jYWxlLCAmc3RhdHVzKTsKKyAgdWNvbF9zZXRBdHRyaWJ1dGUoZ0NvbCwgVUNPTF9OT1JNQUxJWkFUSU9OX01PREUsIFVDT0xfT04sICZzdGF0dXMpOworICAvL3Vjb2xfc2V0QXR0cmlidXRlKGNvbCwgVUNPTF9BTFRFUk5BVEVfSEFORExJTkcsIFVDT0xfU0hJRlRFRCwgJnN0YXR1cyk7CisgIC8vdWNvbF9zZXRBdHRyaWJ1dGUoY29sLCBVQ09MX1NUUkVOR1RILCBVQ09MX1FVQVRFUk5BUlksICZzdGF0dXMpOworCisgIHJldHVybiBnQ29sOworfQorCisKKworVUNvbGxhdG9yICoKK3NldFJlZmVyZW5jZShVRXJyb3JDb2RlICZzdGF0dXMpIAoreworICBnV2luTENJRCA9IHVsb2NfZ2V0TENJRCgiZW4iKTsKKyAgc2V0bG9jYWxlKExDX0NPTExBVEUsICJlbl9VUy5VVEYtOCIpOworICBpZihnQ29sKSB7CisgICAgdWNvbF9jbG9zZShnQ29sKTsKKyAgfQorICBnQ29sID0gdWNvbF9vcGVuKCJyb290IiwgJnN0YXR1cyk7CisgIHVjb2xfc2V0QXR0cmlidXRlKGdDb2wsIFVDT0xfTk9STUFMSVpBVElPTl9NT0RFLCBVQ09MX09OLCAmc3RhdHVzKTsKKyAgcmV0dXJuIGdDb2w7Cit9CisKK3ZvaWQKK3Byb2Nlc3NJbnRlcmFjdGl2ZSgpIHsKKyAgY2hhciBjb21tYW5kWzI1Nl07CisgIHdoaWxlKGZnZXRzKGNvbW1hbmQsIDI1Niwgc3RkaW4pKSB7CisKKyAgfQorfQorCitVQ2hhciBwcm9iZUNoYXJzW11bNF0gPSB7CisgIHsgMHgwMDYxLCAweDAwNjIsIDB4MDBFMSwgMHgwMDQxIH0sIC8vIGxhdGluIHdpdGggYS1ncmF2ZQorICB7IDB4MDA0MSwgMHgwMDQyLCAweDAwQzEsIDB4MDA2MSB9LCAvLyB1cHBlciBmaXJzdAorICB7IDB4MDA2RSwgMHgwMDZGLCAweDAwRjEsIDB4MDA0RSB9LCAvLyBsYXRpbiB3aXRoIG4tdGlsZGEKKyAgeyAweDAwNEUsIDB4MDA0RiwgMHgwMEQxLCAweDAwNkUgfSwgLy8gdXBwZXIgZmlyc3QKKyAgeyAweDA0MzMsIDB4MDQ5MywgMHgwNDkxLCAweDA0MTMgfSwgLy8gQ3lyaWxsaWMKKyAgeyAweDA0MTMsIDB4MDQ5MiwgMHgwNDkwLCAweDA0MzMgfSwgLy8gdXBwZXIgZmlyc3QKKyAgeyAweDMwNDUsIDB4MzA0NywgMHgzMDk0LCAweDMwNDYgfSAgLy8gSGlyYWdhbmEvS2F0YWthbmEgKGxhc3QgcmVzb3J0KQorCit9OworCit2b2lkCitwcm9jZXNzQ29sbGF0b3IoVUNvbGxhdG9yICpjb2wsIFVFcnJvckNvZGUgJnN0YXR1cykgeworICBpbnQzMl90IGkgPSAwOworICB1aW50MzJfdCBqID0gMDsKKyAgZ0NvbCA9IGNvbDsKKyAgVUNoYXIgcnVsZVN0cmluZ1sxNjM4NF07CisgIGNoYXIgbXlMb2NbMjU2XTsKKworICBpbnQzMl90IHJ1bGVTdHJpbmdMZW5ndGggPSB1Y29sX2dldFJ1bGVzRXgoZ0NvbCwgVUNPTF9UQUlMT1JJTkdfT05MWSwgcnVsZVN0cmluZywgMTYzODQpOworICBsb2dnZXItPmxvZyhVbmljb2RlU3RyaW5nKHJ1bGVTdHJpbmcsIHJ1bGVTdHJpbmdMZW5ndGgpLCBUUlVFKTsKKyAgY29uc3QgY2hhciAqbG9jYWxlID0gdWNvbF9nZXRMb2NhbGUoZ0NvbCwgVUxPQ19SRVFVRVNURURfTE9DQUxFLCAmc3RhdHVzKTsKKyAgaWYobG9jYWxlID09IE5VTEwpIHsKKyAgICBsb2NhbGUgPSAiZW4iOworICB9CisgIHN0cmNweShteUxvYywgbG9jYWxlKTsKKyAgVW5pY29kZVNldCBleGVtcGxhclVTZXQ7CisgIFVuaWNvZGVTZXQgUmVmUmVwZXJ0b2lyZTsKKworICBVbmljb2RlU2V0IHRhaWxvcmVkOworCisgIHRhaWxvcmVkID0gKigoVW5pY29kZVNldCAqKXVjb2xfZ2V0VGFpbG9yZWRTZXQoZ0NvbCwgJnN0YXR1cykpOworICB0YWlsb3JlZC5yZW1vdmVBbGwoQ09OVFJPTCk7CisKKworICBVbmljb2RlU3RyaW5nIHBhdHRlcm47CisgIGludCBzYW5pdHlSZXN1bHQ7CisKKyAgVW5pY29kZVNldCBoYW5TZXQ7CisgIFVCb29sIGhhbkFwcGVhcnMgPSBGQUxTRTsKKworICBkZWJ1Zy0+bG9nKCJcbkdlbmVyYXRpbmcgb3JkZXIgZm9yIHBsYXRmb3JtOiAlc1xuIiwgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUpOworICBnQ29tcGFyZXIgPSBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0uY29tcGFyZXI7CisKKyAgU3RyZW5ndGhQcm9iZSBwcm9iZShwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0uY29tcGFyZXIsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5za2dldHRlciwgMHgwMDMwLCBwcm9iZUNoYXJzWzBdWzBdLCBwcm9iZUNoYXJzWzBdWzFdLCBwcm9iZUNoYXJzWzBdWzJdLCBwcm9iZUNoYXJzWzBdWzNdKTsKKyAgc2FuaXR5UmVzdWx0ID0gcHJvYmUuY2hlY2tTYW5pdHkoKTsKKyAgaiA9IDA7CisgIHdoaWxlKHNhbml0eVJlc3VsdCAmJiBqKzEgPCBzaXplb2YocHJvYmVDaGFycykvc2l6ZW9mKHByb2JlQ2hhcnNbMF0pKSB7CisgICBqKys7CisgICBzYW5pdHlSZXN1bHQgPSAgcHJvYmUuc2V0UHJvYmVDaGFycyhwcm9iZUNoYXJzW2pdWzBdLCBwcm9iZUNoYXJzW2pdWzFdLCBwcm9iZUNoYXJzW2pdWzJdLCBwcm9iZUNoYXJzW2pdWzNdKTsKKyAgfQorICBpZihzYW5pdHlSZXN1bHQpIHsKKyAgICBsb2dnZXItPmxvZygiQmFkIGNob2ljZSBvZiBwcm9iZSBjaGFyYWN0ZXJzISBTYW5pdHkgcmV0dXJuZWQgJWkuIEV4aXRpbmdcbiIsIHNhbml0eVJlc3VsdCwgc2FuaXR5UmVzdWx0KTsKKyAgICByZXR1cm47CisgIH0KKyAgbG9nZ2VyLT5sb2coIlByb2JlIGNoYXJzOiAlQywgJUMsICVDLCAlQ1xuIiwgcHJvYmVDaGFyc1tqXVswXSwgcHJvYmVDaGFyc1tqXVsxXSwgcHJvYmVDaGFyc1tqXVsyXSwgcHJvYmVDaGFyc1tqXVszXSk7IAorCisgIGRlYnVnLT5vZmYoKTsKKworICBpZihnUmVwZXJ0b2lyZS5zaXplKCkpIHsKKyAgICBleGVtcGxhclVTZXQgPSBnUmVwZXJ0b2lyZTsKKyAgfSBlbHNlIHsKKyAgICBnZW5lcmF0ZVJlcGVydG9pcmUobG9jYWxlLCBleGVtcGxhclVTZXQsIGhhbkFwcGVhcnMsIHN0YXR1cyk7CisgIH0KKyAgZXhlbXBsYXJVU2V0LmFkZEFsbCh0YWlsb3JlZCk7CisgIGhhblNldC5hcHBseUludFByb3BlcnR5VmFsdWUoVUNIQVJfU0NSSVBULCBVU0NSSVBUX0hBTiwgc3RhdHVzKTsKKyAgZXhlbXBsYXJVU2V0LnJlbW92ZUFsbChoYW5TZXQpOworICAKKyAgbG9nZ2VyLT5sb2coZXhlbXBsYXJVU2V0LnRvUGF0dGVybihwYXR0ZXJuLCBUUlVFKSwgVFJVRSk7CisKKyAgZXhlbXBsYXJVU2V0ID0gZmxhdHRlbihleGVtcGxhclVTZXQsIHN0YXR1cyk7CisgIGxvZ2dlci0+bG9nKGV4ZW1wbGFyVVNldC50b1BhdHRlcm4ocGF0dGVybiwgVFJVRSksIFRSVUUpOworCisgIGlmKCFvcHRpb25zW1BSSU5UUkVGXS5kb2VzT2NjdXIpIHsKKworICAgIGxvZ2dlci0+bG9nKCJcbioqKiBEZXRlY3Rpbmcgb3JkZXJpbmcgZm9yIHRoZSBsb2NhbGVcblxuIik7CisKKyAgICBkZWJ1Zy0+b24oKTsKKyAgICBTb3J0ZWRMaW5lcyBsaW5lcyhleGVtcGxhclVTZXQsIGdFeGNsdWRlU2V0LCBwcm9iZSwgbG9nZ2VyLCBkZWJ1Zyk7CisgICAgbGluZXMuYW5hbHlzZShzdGF0dXMpOworICAgIGxpbmVzLmNhbGN1bGF0ZVNvcnRLZXlzKCk7CisgICAgZGVidWctPmxvZygiXG4qKiogRmluYWwgb3JkZXJcblxuIik7CisgICAgZGVidWctPmxvZyhsaW5lcy50b1ByZXR0eVN0cmluZyhUUlVFLCBUUlVFKSwgVFJVRSk7CisgICAgbGluZXMudG9GaWxlKGZUYWlsb3JpbmdEdW1wLCBUUlVFLCBzdGF0dXMpOworICAgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKGxpbmVzLnRvT3V0cHV0KG91dHB1dEZvcm1hdCwgbXlMb2MsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5uYW1lLCBOVUxMLCBUUlVFLCBUUlVFLCBoYW5BcHBlYXJzKSwgVFJVRSk7CisgICAgLy9kZWJ1Zy0+b2ZmKCk7CisKKyAgICBpZihvcHRpb25zW1JFRkVSRU5DRV0uZG9lc09jY3VyKSB7CisgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICBsaW5lcy5nZXRSZXBlcnRvaXJlKFJlZlJlcGVydG9pcmUpOworICAgICAgc2V0UmVmZXJlbmNlKHN0YXR1cyk7CisKKyAgICAgIGxvZ2dlci0+bG9nKGV4ZW1wbGFyVVNldC50b1BhdHRlcm4ocGF0dGVybiwgVFJVRSksIFRSVUUpOworICAgICAgbG9nZ2VyLT5sb2coUmVmUmVwZXJ0b2lyZS50b1BhdHRlcm4ocGF0dGVybiwgVFJVRSksIFRSVUUpOworCisgICAgICBTdHJlbmd0aFByb2JlIFJlZlByb2JlKHBsYXRmb3Jtc1tnUmVmTnVtXS5jb21wYXJlciwgcGxhdGZvcm1zW2dSZWZOdW1dLnNrZ2V0dGVyKTsKKyAgICAgIGxvZ2dlci0+bG9nKCJcbioqKiBEZXRlY3Rpbmcgb3JkZXJpbmcgZm9yIHJlZmVyZW5jZVxuXG4iKTsKKyAgICAgIFNvcnRlZExpbmVzIFJlZkxpbmVzKGV4ZW1wbGFyVVNldCwgZ0V4Y2x1ZGVTZXQsIFJlZlByb2JlLCBsb2dnZXIsIGRlYnVnKTsKKyAgICAgIFJlZkxpbmVzLmFuYWx5c2Uoc3RhdHVzKTsKKyAgICAgIHJlZmVyZW5jZUJ1bmRsZS0+bG9nKFJlZkxpbmVzLnRvT3V0cHV0KG91dHB1dEZvcm1hdCwgbXlMb2MsIHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lLCBOVUxMLCBUUlVFLCBUUlVFLCBGQUxTRSksIFRSVUUpOworICAgICAgUmVmTGluZXMudG9GaWxlKGZEZWZhdWx0RHVtcCwgVFJVRSwgc3RhdHVzKTsKKworICAgICAgbGluZXMucmVkdWNlRGlmZmVyZW5jZShSZWZMaW5lcyk7CisgICAgICBsb2dnZXItPmxvZygiXG4qKiogRmluYWwgcnVsZXNcblxuIik7CisgICAgICBsb2dnZXItPmxvZyhsaW5lcy50b1ByZXR0eVN0cmluZyhUUlVFKSwgVFJVRSk7CisgICAgICBidW5kbGUtPmxvZyhsaW5lcy50b091dHB1dChvdXRwdXRGb3JtYXQsIG15TG9jLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSwgcGxhdGZvcm1zW2dSZWZOdW1dLm5hbWUsIFRSVUUsIFRSVUUsIGhhbkFwcGVhcnMpLCBUUlVFKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc2V0UmVmZXJlbmNlKHN0YXR1cyk7CisgICAgU3RyZW5ndGhQcm9iZSBSZWZQcm9iZShwbGF0Zm9ybXNbZ1JlZk51bV0uY29tcGFyZXIsIHBsYXRmb3Jtc1tnUmVmTnVtXS5za2dldHRlcik7CisgICAgbG9nZ2VyLT5sb2coIlxuKioqIERldGVjdGluZyBvcmRlcmluZyBmb3IgcmVmZXJlbmNlXG5cbiIpOworICAgIFNvcnRlZExpbmVzIFJlZkxpbmVzKGV4ZW1wbGFyVVNldCwgZ0V4Y2x1ZGVTZXQsIFJlZlByb2JlLCBsb2dnZXIsIGRlYnVnKTsKKyAgICBSZWZMaW5lcy5hbmFseXNlKHN0YXR1cyk7CisgICAgbG9nZ2VyLT5sb2coUmVmTGluZXMudG9QcmV0dHlTdHJpbmcoVFJVRSksIFRSVUUpOworICAgIHJlZmVyZW5jZUJ1bmRsZS0+bG9nKFJlZkxpbmVzLnRvT3V0cHV0KG91dHB1dEZvcm1hdCwgbXlMb2MsIHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lLCBOVUxMLCBUUlVFLCBUUlVFLCBGQUxTRSksIFRSVUUpOworICB9CisgIGlmKGhhbkFwcGVhcnMpIHsKKyAgICAvLyB0aGVyZSBhcmUgSGFuIGNoYXJhY3RlcnMuIFRoaXMgaXMgYSBodWdlIGJsb2NrLiBUaGUgYmVzdCB3ZSBjYW4gZG8gaXMgdG8ganVzdCBzb3J0IGl0LCBjb21wYXJlIHRvIGVtcHR5CisgICAgLy8gYW5kIHNwaXQgaXQgb3V0LiBBbnl0aGluZyBlbHNlIHdvdWxkIGJlIGEgc3VpY2lkZSAoYWN0dWFsbHkgaXMgLSBrZXJuZWwganVzdCBraWxscyB5b3UgOikKKyAgICBsb2dnZXItPmxvZygiXG4qKiogRGV0ZWN0aW5nIG9yZGVyIGZvciBIYW5cbiIpOworICAgIGRlYnVnLT5vZmYoKTsKKyAgICBzZXRMb2NhbGUoZ0xvY2FsZSwgc3RhdHVzKTsKKyAgICBleGVtcGxhclVTZXQuY2xlYXIoKTsKKyAgICBleGVtcGxhclVTZXQuYXBwbHlJbnRQcm9wZXJ0eVZhbHVlKFVDSEFSX1NDUklQVCwgVVNDUklQVF9IQU4sIHN0YXR1cyk7CisgICAgZXhlbXBsYXJVU2V0ID0gZmxhdHRlbihleGVtcGxhclVTZXQsIHN0YXR1cyk7CisgICAgU29ydGVkTGluZXMgaGFuKGV4ZW1wbGFyVVNldCwgZ0V4Y2x1ZGVTZXQsIHByb2JlLCBsb2dnZXIsIGRlYnVnKTsKKyAgICBoYW4uc29ydChUUlVFLCBUUlVFKTsKKyAgICBoYW4uY2xhc3NpZnlSZXBlcnRvaXJlKCk7CisgICAgaGFuLmdldEJvdW5kcyhzdGF0dXMpOworICAgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKCJIYW4gb3JkZXJpbmc6PGJyPlxuIik7CisgICAgdGFpbG9yaW5nQnVuZGxlLT5sb2coaGFuLnRvT3V0cHV0KG91dHB1dEZvcm1hdCwgbXlMb2MsIHBsYXRmb3Jtc1tnUGxhdGZvcm1JbmRleGVzWzBdXS5uYW1lLCBOVUxMLCBUUlVFLCBGQUxTRSwgRkFMU0UpLCBUUlVFKTsKKyAgICBidW5kbGUtPmxvZyhoYW4udG9PdXRwdXQob3V0cHV0Rm9ybWF0LCBteUxvYywgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUsIE5VTEwsIFRSVUUsIEZBTFNFLCBGQUxTRSksIFRSVUUpOworICB9CisgIHVjb2xfY2xvc2UoZ0NvbCk7Cit9CisKK3ZvaWQKK3Byb2Nlc3NMb2NhbGUoY29uc3QgY2hhciAqbG9jYWxlLCBVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgc2V0TG9jYWxlKGxvY2FsZSwgc3RhdHVzKTsKKyAgc2V0RmlsZXMobG9jYWxlLCBzdGF0dXMpOworICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGRlYnVnLT5sb2coIkxvY2FsZSAlcyAoTENJRDolMDZYLCB1bml4OiVzKVxuIiwgbG9jYWxlLCBnV2luTENJRCwgc2V0bG9jYWxlKExDX0NPTExBVEUsIE5VTEwpKTsKKyAgdGFpbG9yaW5nQnVuZGxlLT5sb2coIi8vIE9yZGVyaW5nIGZvciBsb2NhbGUgJXMgKExDSUQ6JTA2WCwgdW5peDolcyksIHBsYXRmb3JtICVzIHJlZmVyZW5jZSAlczxicj5cbiIsIAorICAgIGxvY2FsZSwgZ1dpbkxDSUQsIHNldGxvY2FsZShMQ19DT0xMQVRFLCBOVUxMKSwgCisgICAgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUsIHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lKTsKKyAgaWYob3B0aW9uc1tSRUZFUkVOQ0VdLmRvZXNPY2N1cikgeworICAgIHJlZmVyZW5jZUJ1bmRsZS0+bG9nKCIvLyBSZWZlcmVuY2UgZm9yIGxvY2FsZSAlcyAoTENJRDolMDZYLCB1bml4OiVzKSwgcGxhdGZvcm0gJXMgcmVmZXJlbmNlICVzPGJyPlxuIiwgCisgICAgICBsb2NhbGUsIGdXaW5MQ0lELCBzZXRsb2NhbGUoTENfQ09MTEFURSwgTlVMTCksIAorICAgICAgcGxhdGZvcm1zW2dQbGF0Zm9ybUluZGV4ZXNbMF1dLm5hbWUsIHBsYXRmb3Jtc1tnUmVmTnVtXS5uYW1lKTsKKyAgfQorCisKKyAgcHJvY2Vzc0NvbGxhdG9yKGdDb2wsIHN0YXR1cyk7Cit9CisKKworCitVQm9vbCAKK2hhc0NvbGxhdGlvbkVsZW1lbnRzKGNvbnN0IGNoYXIgKmxvY05hbWUpIHsKKworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgVVJlc291cmNlQnVuZGxlICpDb2xFbCA9IE5VTEw7CisKKyAgVVJlc291cmNlQnVuZGxlICpsb2MgPSB1cmVzX29wZW4oTlVMTCwgbG9jTmFtZSwgJnN0YXR1cyk7OworCisgIGlmKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIENvbEVsID0gdXJlc19nZXRCeUtleShsb2MsICJDb2xsYXRpb25FbGVtZW50cyIsIENvbEVsLCAmc3RhdHVzKTsKKyAgICBpZihzdGF0dXMgPT0gVV9aRVJPX0VSUk9SKSB7IC8qIGRvIHRoZSB0ZXN0IC0gdGhlcmUgYXJlIHJlYWwgZWxlbWVudHMgKi8KKyAgICAgIHVyZXNfY2xvc2UoQ29sRWwpOworICAgICAgdXJlc19jbG9zZShsb2MpOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHVyZXNfY2xvc2UoQ29sRWwpOworICAgIHVyZXNfY2xvc2UobG9jKTsKKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywKKyAgICAgY2hhciogYXJndltdKQoreworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgbG9nZ2VyID0gbmV3IFVQcmludGVyKHN0ZG91dCwgImVuIiwgImxhdGluLTEiKTsKKyAgZGVidWcgPSAgbmV3IFVQcmludGVyKHN0ZGVyciwgImVuIiwgImxhdGluLTEiKTsKKworLyoKKyAgVVNldCAqd3NwID0gdXBydl9vcGVuUnVsZVdoaXRlU3BhY2VTZXQoJnN0YXR1cyk7CisgIHVzZXRfYWRkKHdzcCwgMHgwMDQxKTsKKyAgdXNldF9yZW1vdmUod3NwLCAweDAwNDEpOworICBVbmljb2RlU3RyaW5nIHBhdDsKKyAgKChVbmljb2RlU2V0ICopd3NwKS0+dG9QYXR0ZXJuKHBhdCwgVFJVRSk7CisgIHBhdC5zZXRDaGFyQXQocGF0Lmxlbmd0aCgpLCAwKTsKKyAgZXNjYXBlU3RyaW5nKHBhdC5nZXRCdWZmZXIoKSwgcGF0Lmxlbmd0aCgpLCBsb2cpOworICB1X2ZmbHVzaChsb2cpOworKi8KKworICBwcm9jZXNzQXJncyhhcmdjLCBhcmd2LCBzdGF0dXMpOworICBpbnQzMl90IGkgPSAwOworCisKKworICBpZihVX0ZBSUxVUkUoc3RhdHVzKSB8fCBnUGxhdGZvcm1ObyA9PSAwKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgdXRmOGNudiA9IHVjbnZfb3BlbigidXRmLTgiLCAmc3RhdHVzKTsgICAgLy8gd2UgYXJlIGp1c3QgZG9pbmcgVVRGLTggbG9jYWxlcyBmb3Igbm93LgorICBnVUNBID0gdWNvbF9vcGVuKCJyb290IiwgJnN0YXR1cyk7CisKKyAgaWYob3B0aW9uc1tJTlRFUkFDVElWRV0uZG9lc09jY3VyKSB7CisgICAgcHJvY2Vzc0ludGVyYWN0aXZlKCk7CisgIH0gZWxzZSB7CisgICAgaWYoZ1J1bGVzU3RkaW4pIHsKKyAgICAgIGNoYXIgYnVmZmVyWzEwMjRdOworICAgICAgVUNoYXIgcnVsZUJ1ZmZlclsxNjM4NF07CisgICAgICBVQ2hhciAqcnVsZXMgPSBydWxlQnVmZmVyOworICAgICAgaW50MzJfdCBtYXhSdWxlTGVuID0gMTYzODQ7CisgICAgICBpbnQzMl90IHJMZW4gPSAwOworICAgICAgd2hpbGUoZmdldHMoYnVmZmVyLCAxMDI0LCBzdGRpbikpIHsKKyAgICAgICAgaWYoYnVmZmVyWzBdICE9ICcvJyAmJiBidWZmZXJbMV0gIT0gJy8nKSB7CisgICAgICAgICAgckxlbiA9IHVfdW5lc2NhcGUoYnVmZmVyLCBydWxlcywgbWF4UnVsZUxlbik7CisgICAgICAgICAgcnVsZXMgKz0gckxlbjsKKyAgICAgICAgICBtYXhSdWxlTGVuIC09IHJMZW47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIFVQYXJzZUVycm9yIHBhcnNlRXJyb3I7CisgICAgICAvL2VzY2FwZVN0cmluZyhydWxlQnVmZmVyLCBydWxlcy1ydWxlQnVmZmVyLCBsb2cpOy8vCisgICAgICBkZWJ1Zy0+bG9nKCIlVVxuIiwgcnVsZUJ1ZmZlcik7CisKKyAgICAgIFVDb2xsYXRvciAqY29sID0gdWNvbF9vcGVuUnVsZXMocnVsZUJ1ZmZlciwgcnVsZXMtcnVsZUJ1ZmZlciwgVUNPTF9ERUZBVUxULCBVQ09MX0RFRkFVTFQsICZwYXJzZUVycm9yLCAmc3RhdHVzKTsKKyAgICAgIGlmKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIHNldEZpbGVzKCJzdGRpblJ1bGVzIiwgc3RhdHVzKTsKKyAgICAgICAgcHJvY2Vzc0NvbGxhdG9yKGNvbCwgc3RhdHVzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ2dlci0+bG9nKCJFcnJvciAlc1xuIiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisgICAgICB9CisgICAgfSBlbHNlIGlmKG9wdGlvbnNbRElGRl0uZG9lc09jY3VyKSB7CisgICAgICBsb2dnZXItPmxvZygiRGlmZmluZyB0d28gZHVtcHNcbiIpOworICAgICAgLy8gbXVzdCBoYXZlIGxvY2FsZSwgcGxhdGZvcm0gYW5kIHJlZiBpbiBvcmRlciB0byBiZSAKKyAgICAgIC8vIGFibGUgdG8gZmluZCBkdW1wIGZpbGVzLgorICAgICAgc2V0RmlsZXMoZ0xvY2FsZSwgc3RhdHVzKTsKKyAgCisgICAgICBpZihmVGFpbG9yaW5nRHVtcCAmJiBmRGVmYXVsdER1bXApIHsKKwkgICAgU29ydGVkTGluZXMgdGFpbG9yaW5nKGZUYWlsb3JpbmdEdW1wLCBsb2dnZXIsIGRlYnVnLCBzdGF0dXMpOworCSAgICBsb2dnZXItPmxvZyh0YWlsb3JpbmcudG9TdHJpbmcoVFJVRSksIFRSVUUpOworCSAgICBTb3J0ZWRMaW5lcyByZWZlcmVuY2UoZkRlZmF1bHREdW1wLCBsb2dnZXIsIGRlYnVnLCBzdGF0dXMpOworCSAgICBsb2dnZXItPmxvZyhyZWZlcmVuY2UudG9TdHJpbmcoVFJVRSksIFRSVUUpOworCSAgICB0YWlsb3JpbmcucmVkdWNlRGlmZmVyZW5jZShyZWZlcmVuY2UpOworCSAgICBsb2dnZXItPmxvZygiXG4qKiogRmluYWwgcnVsZXNcblxuIik7CisJICAgIGxvZ2dlci0+bG9nKHRhaWxvcmluZy50b1ByZXR0eVN0cmluZyhUUlVFKSwgVFJVRSk7CisJICAgIC8vcmVzdWx0LT5sb2cobGluZXMudG9QcmV0dHlTdHJpbmcoVFJVRSksIFRSVUUpOworCSAgICBidW5kbGUtPmxvZyh0YWlsb3JpbmcudG9PdXRwdXQob3V0cHV0Rm9ybWF0LCBnTG9jYWxlLCBwbGF0Zm9ybXNbZ1BsYXRmb3JtSW5kZXhlc1swXV0ubmFtZSwgcGxhdGZvcm1zW2dSZWZOdW1dLm5hbWUsIFRSVUUsIFRSVUUsIEZBTFNFKSwgVFJVRSk7CisgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgaWYoZ0xvY2FsZSkgeworICAgICAgICBwcm9jZXNzTG9jYWxlKGdMb2NhbGUsIHN0YXR1cyk7CisgICAgICB9IGVsc2UgaWYoZ0xvY2FsZU5vKSB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IGdMb2NhbGVObzsgaSsrKSB7CisgICAgICAgICAgcHJvY2Vzc0xvY2FsZShnTG9jYWxlc1tpXSwgc3RhdHVzKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsgLy8gZG8gdGhlIGxvb3AgdGhyb3VnaCBhbGwgdGhlIGxvY2FsZXMKKyAgICAgICAgaW50MzJfdCBub09mTG9jID0gdWxvY19jb3VudEF2YWlsYWJsZSgpOworICAgICAgICBjb25zdCBjaGFyICpsb2NOYW1lID0gTlVMTDsKKyAgICAgICAgZm9yKGkgPSAwOyBpPG5vT2ZMb2M7IGkrKykgeworICAgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICBsb2NOYW1lID0gdWxvY19nZXRBdmFpbGFibGUoaSk7CisgICAgICAgICAgaWYoaGFzQ29sbGF0aW9uRWxlbWVudHMobG9jTmFtZSkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NMb2NhbGUobG9jTmFtZSwgc3RhdHVzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIHVjb2xfY2xvc2UoZ1VDQSk7CisgIHVjbnZfY2xvc2UodXRmOGNudik7CisKKyAgZGVsZXRlIGxvZ2dlcjsKKyAgZGVsZXRlIGRlYnVnOworICBpZih0YWlsb3JpbmdCdW5kbGUpIHsKKyAgICBkZWxldGUgdGFpbG9yaW5nQnVuZGxlOworICB9CisgIGlmKHJlZmVyZW5jZUJ1bmRsZSkgeworICAgIGRlbGV0ZSByZWZlcmVuY2VCdW5kbGU7CisgIH0KKyAgaWYoYnVuZGxlKSB7CisgICAgZGVsZXRlIGJ1bmRsZTsKKyAgfQorICBpZihmVGFpbG9yaW5nRHVtcCkgeworICAgIGZjbG9zZShmVGFpbG9yaW5nRHVtcCk7CisgIH0KKyAgaWYoZkRlZmF1bHREdW1wKSB7CisgICAgZmNsb3NlKGZEZWZhdWx0RHVtcCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworVW5pY29kZVN0cmluZyBwcm9wZXJ0eUFuZFZhbHVlTmFtZShVUHJvcGVydHkgcHJvcCwgaW50MzJfdCBpKSB7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICByZXN1bHQuYXBwZW5kKHVfZ2V0UHJvcGVydHlOYW1lKHByb3AsIFVfTE9OR19QUk9QRVJUWV9OQU1FKSk7CisgIHJlc3VsdC5hcHBlbmQoIj0iKTsKKyAgcmVzdWx0LmFwcGVuZCh1X2dldFByb3BlcnR5VmFsdWVOYW1lKHByb3AsIGksIFVfTE9OR19QUk9QRVJUWV9OQU1FKSk7CisKKyAgICAvLysgIigiICsgcHJvcCArICIsIiArIGkgKyAiKSAiOworICByZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQgZ2VuZXJhdGVSZXBlcnRvaXJlKGNvbnN0IGNoYXIgKmxvY2FsZSwgVW5pY29kZVNldCAmcmVwLCBVQm9vbCAmaGFuQXBwZWFycywgVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgICAgVW5pY29kZVN0cmluZyBkaXNwTmFtZTsKKyAgICBkZWJ1Zy0+bG9nKCJHZXR0aW5nIHJlcGVydG9pcmUgZm9yICVzXG4iLCBsb2NhbGUpOworICAgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKCIvLyBTY3JpcHRzIGluIHJlcGVydG9pcmU6ICIpOworICAgIGlmKG9wdGlvbnNbUkVGRVJFTkNFXS5kb2VzT2NjdXIpIHsKKyAgICAgIHJlZmVyZW5jZUJ1bmRsZS0+bG9nKCIvLyBTY3JpcHRzIGluIHJlcGVydG9pcmU6ICIpOworICAgIH0KKwlyZXAuY2xlYXIoKTsKKyAgICBVbmljb2RlU2V0IGRlbHRhOworICAgIAorICAgIFVTY3JpcHRDb2RlIHNjcmlwdFsyNTZdOworICAgIGludDMyX3QgaSA9IDA7CisgICAgLy8gbm93IGFkZCB0aGUgc2NyaXB0cyBmb3IgdGhlIGxvY2FsZQorICAgIFVQcm9wZXJ0eSBwcm9wID0gVUNIQVJfU0NSSVBUOworCWludDMyX3Qgc2NyaXB0TGVuZ3RoID0gdXNjcmlwdF9nZXRDb2RlKGxvY2FsZSwgc2NyaXB0LCAyNTYsICZzdGF0dXMpOworICAgIGlmKHNjcmlwdExlbmd0aCkgeworCSAgZm9yIChpID0gMDsgaSA8IHNjcmlwdExlbmd0aDsgKytpKSB7CisgICAgICAgIGlmKHNjcmlwdFtpXSA9PSBVU0NSSVBUX0hBTikgeworICAgICAgICAgIGhhbkFwcGVhcnMgPSBUUlVFOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRlbHRhLmFwcGx5SW50UHJvcGVydHlWYWx1ZShwcm9wLCBzY3JpcHRbaV0sIHN0YXR1cyk7CisgICAgICAgIGRlYnVnLT5sb2coIkFkZGluZyAiKTsKKyAgICAgICAgZGVidWctPmxvZyhwcm9wZXJ0eUFuZFZhbHVlTmFtZShwcm9wLCBzY3JpcHRbaV0pLCBUUlVFKTsKKyAgICAgICAgdGFpbG9yaW5nQnVuZGxlLT5sb2coIi8vICIpOworICAgICAgICB0YWlsb3JpbmdCdW5kbGUtPmxvZyhwcm9wZXJ0eUFuZFZhbHVlTmFtZShwcm9wLCBzY3JpcHRbaV0pLCBUUlVFKTsKKyAgICAgICAgaWYob3B0aW9uc1tSRUZFUkVOQ0VdLmRvZXNPY2N1cikgeworICAgICAgICAgIHJlZmVyZW5jZUJ1bmRsZS0+bG9nKCIvLyAiKTsKKyAgICAgICAgICByZWZlcmVuY2VCdW5kbGUtPmxvZyhwcm9wZXJ0eUFuZFZhbHVlTmFtZShwcm9wLCBzY3JpcHRbaV0pLCBUUlVFKTsKKyAgICAgICAgfQorCQlyZXAuYWRkQWxsKGRlbHRhKTsKKwkgIH0KKyAgICB9IGVsc2UgeworICAgICAgZGVsdGEuYXBwbHlJbnRQcm9wZXJ0eVZhbHVlKFVDSEFSX1NDUklQVCwgVVNDUklQVF9MQVRJTiwgc3RhdHVzKTsKKyAgICAgIHJlcC5hZGRBbGwoZGVsdGEpOworICAgIH0KKyAgICAKKyAgICAvLyBub3cgc2VlIHdoaWNoIGJsb2NrcyB0aG9zZSBvdmVybGFwLCBhbmQgYWRkCisgICAgcHJvcCA9IFVDSEFSX0JMT0NLOworICAgIGludDMyX3QgbWluID0gdV9nZXRJbnRQcm9wZXJ0eU1pblZhbHVlKHByb3ApOworICAgIGludDMyX3QgbWF4ID0gdV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKHByb3ApOworICAgIFVuaWNvZGVTZXQgY2hlY2tEZWx0YTsKKyAgICBmb3IgKGkgPSBtaW47IGkgPD0gbWF4OyArK2kpIHsKKyAgICAgICAgLy8gc2tpcCBjZXJ0YWluIGJsb2NrcworICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gdV9nZXRQcm9wZXJ0eVZhbHVlTmFtZShwcm9wLCBpLCBVX0xPTkdfUFJPUEVSVFlfTkFNRSk7CisgICAgICAgIGlmIChzdHJjbXAobmFtZSwgIlN1cGVyc2NyaXB0c19hbmRfU3Vic2NyaXB0cyIpID09IDAKKyAgICAgICAgfHwgc3RyY21wKG5hbWUsICJMZXR0ZXJsaWtlX1N5bWJvbHMiKSA9PSAwCisgICAgICAgIHx8IHN0cmNtcChuYW1lLCAiQWxwaGFiZXRpY19QcmVzZW50YXRpb25fRm9ybXMiKSA9PSAwCisgICAgICAgIHx8IHN0cmNtcChuYW1lLCAiSGFsZndpZHRoX2FuZF9GdWxsd2lkdGhfRm9ybXMiKSA9PSAwKSBjb250aW51ZTsKKworICAgICAgICBkZWx0YS5hcHBseUludFByb3BlcnR5VmFsdWUocHJvcCwgaSwgc3RhdHVzKS5yZW1vdmVBbGwoVU5BU1NJR05FRCk7CisgICAgICAgIGlmICghcmVwLmNvbnRhaW5zU29tZShkZWx0YSkpIGNvbnRpbnVlOworICAgICAgICBpZiAocmVwLmNvbnRhaW5zQWxsKGRlbHRhKSkgY29udGludWU7IC8vIGp1c3QgdG8gc2VlIHdoYXQgd2UgYXJlIGFkZGluZworICAgICAgICBkZWJ1Zy0+bG9nKCJBZGRpbmcgIik7CisgICAgICAgIGRlYnVnLT5sb2cocHJvcGVydHlBbmRWYWx1ZU5hbWUocHJvcCwgaSksIFRSVUUpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgdGFpbG9yaW5nQnVuZGxlLT5sb2coIi8vICIpOworICAgICAgICB0YWlsb3JpbmdCdW5kbGUtPmxvZyhwcm9wZXJ0eUFuZFZhbHVlTmFtZShwcm9wLCBpKSwgVFJVRSk7CisgICAgICAgIGlmKG9wdGlvbnNbUkVGRVJFTkNFXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgICByZWZlcmVuY2VCdW5kbGUtPmxvZygiLy8gIik7CisgICAgICAgICAgcmVmZXJlbmNlQnVuZGxlLT5sb2cocHJvcGVydHlBbmRWYWx1ZU5hbWUocHJvcCwgaSksIFRSVUUpOworICAgICAgICB9CisgICAgICAgIHJlcC5hZGRBbGwoZGVsdGEpOworICAgIH0KKyAgICAKKyAgICAvLyBhZGQgQVNDSUkgYW5kIGdlbmVyYWwgYWNjZW50cworICAgIHJlcC5hZGRBbGwoR0VORVJBTF9BQ0NFTlRTKS5hZGRBbGwoQVNDSUlfQkFTRSk7CisgICAgcmVwLnJlbW92ZUFsbChDT05UUk9MKTsKKyAgICAvL2RlbHRhLmFwcGx5SW50UHJvcGVydHlWYWx1ZShVQ0hBUl9TQ1JJUFQsIFVTQ1JJUFRfSEFOLCBzdGF0dXMpOworICAgIC8vcmVwLnJlbW92ZUFsbChkZWx0YSk7CisKKyAgICAvLyBub3cgYWRkIHRoZSBleGVtcGxhciBjaGFyYWN0ZXJzCisgICAgLy8gY2FuJ3QgZ2V0IGF0IHRoZW0gZnJvbSBKYXZhIHJpZ2h0IG5vdworICAgIHRhaWxvcmluZ0J1bmRsZS0+bG9nKCI8YnI+XG4iKTsKKyAgICBpZihvcHRpb25zW1JFRkVSRU5DRV0uZG9lc09jY3VyKSB7CisgICAgICByZWZlcmVuY2VCdW5kbGUtPmxvZygiPGJyPlxuIik7CisgICAgfQorfQorCitVbmljb2RlU2V0IGZsYXR0ZW4oY29uc3QgVW5pY29kZVNldCAmc291cmNlLCBVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgICBVbmljb2RlU2V0IHJlc3VsdDsKKyAgICBVbmljb2RlU2V0SXRlcmF0b3IgaXQoc291cmNlKTsKKyAgICBVbmljb2RlU3RyaW5nIGl0ZW0sIGl0ZW1ORktELCB0b05vcm1hbGl6ZTsKKyAgICB3aGlsZSAoaXQubmV4dCgpKSB7CisgICAgICAgIC8vIHdvdWxkIGJlIG5pY2VyIGlmIFVuaWNvZGVTZXRJdGVyYXRvciBoYWQgYSBnZXRTdHJpbmcgZnVuY3Rpb24KKyAgICAgICAgaWYgKGl0LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICBOb3JtYWxpemVyOjpub3JtYWxpemUoaXQuZ2V0U3RyaW5nKCksIFVOT1JNX05GRCwgMCwgaXRlbSwgc3RhdHVzKTsKKyAgICAgICAgICBOb3JtYWxpemVyOjpub3JtYWxpemUoaXQuZ2V0U3RyaW5nKCksIFVOT1JNX05GS0QsIDAsIGl0ZW1ORktELCBzdGF0dXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRvTm9ybWFsaXplLnNldFRvKGl0LmdldENvZGVwb2ludCgpKTsKKyAgICAgICAgICBOb3JtYWxpemVyOjpub3JtYWxpemUodG9Ob3JtYWxpemUsIFVOT1JNX05GRCwgMCwgaXRlbSwgc3RhdHVzKTsKKyAgICAgICAgICBOb3JtYWxpemVyOjpub3JtYWxpemUodG9Ob3JtYWxpemUsIFVOT1JNX05GS0QsIDAsIGl0ZW1ORktELCBzdGF0dXMpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hZGRBbGwoaXRlbSk7CisgICAgICAgIHJlc3VsdC5hZGRBbGwoaXRlbU5GS0QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQgdGVzdFdpbihTdHJlbmd0aFByb2JlICZwcm9iZSwgVUVycm9yQ29kZSAmc3RhdHVzKSAKK3sKKyAgVW5pY29kZVNldCB0cmFpbGluZ3MoVW5pY29kZVN0cmluZygiW1xcdUZFN0RcXHVGRTdDXFx1MzBGRFxcdUZGNzBcXHUzMEZDXFx1MzA5RFxcdTMwMzJcXHUzMDMxXFx1MzAwNVxcdTA2NTFdIiksIHN0YXR1cyk7CisgIGNoYXIgaW50Q2hhcltdID0gIlxcdUZFN0RcXHVGRTdDXFx1MzBGRFxcdUZGNzBcXHUzMEZDXFx1MzA5RFxcdTMwMzJcXHUzMDMxXFx1MzAwNVxcdTA2NTEiOworICBVQ2hhciBpbnRlcmVzdGluZ1syNTZdOworICBpbnQzMl90IGludExlbiA9IHVfdW5lc2NhcGUoaW50Q2hhciwgaW50ZXJlc3RpbmcsIDI1Nik7CisgIFVDaGFyIGkgPSAwOworICBVQ2hhciBqID0gMCwgIGsgPSAwOworICBpbnQzMl90IGNvdW50OworICBMaW5lIG15Q2gsIGNvbWJvLCB0cmlhbCwgaW50ZXIsIGtMaW5lOworICBmb3IoaSA9IDA7IGkgPCBpbnRMZW47IGkrKykgeworICAgIGludGVyLnNldFRvKGludGVyZXN0aW5nW2ldKTsKKyAgICBsb2dnZXItPmxvZyhpbnRlci50b1N0cmluZyhUUlVFKSwgVFJVRSk7CisgICAgbG9nZ2VyLT5sb2coIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgIGZvcihqID0gMDsgaiA8IDB4RkZGRjsgaisrKSB7CisgICAgICBteUNoLnNldFRvKGopOworICAgICAgaWYocHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcobXlDaCkgPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBsb2dnZXItPmxvZyhteUNoLnRvU3RyaW5nKFRSVUUpKTsKKyAgICAgIGNvbWJvLnNldFRvKGopOworICAgICAgY29tYm8uYXBwZW5kKGludGVyZXN0aW5nW2ldKTsKKyAgICAgIGNvdW50ID0gMDsKKyAgICAgIGZvcihrID0gMDsgayA8IDB4RkZGRjsgaysrKSB7CisgICAgICAgIGtMaW5lLnNldFRvKGspOworICAgICAgICB0cmlhbC5zZXRUbyhqKTsKKyAgICAgICAgdHJpYWwuYXBwZW5kKGspOworICAgICAgICBpZihwcm9iZS5jb21wYXJlKGtMaW5lLCBpbnRlcikgPCAwKSB7CisgICAgICAgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbCwgY29tYm8pID49IDApIHsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBsb2dnZXItPmxvZygiJWkgJWlcbiIsIGNvdW50LCBjb3VudCk7CisgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2NvbHByb2JlL2NyZWF0ZUNvbXBhcmlzb25UYWJsZXMucGwgYi9jb2xwcm9iZS9jcmVhdGVDb21wYXJpc29uVGFibGVzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE4ZjZhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9jcmVhdGVDb21wYXJpc29uVGFibGVzLnBsCkBAIC0wLDAgKzEsMTY0IEBACisjISAvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7CisKKworbXkgJGxvY2FsZSA9ICRBUkdWWzBdOworCisKK215ICRsb25nX25hbWUgPSBgL2hvbWUvd2Vpdi9zcmMvaWN1L3NvdXJjZS9leHRyYS9jb2xwcm9iZS9sb25nbmFtZSAkbG9jYWxlYDsKK215ICRwYWdlVGl0bGUgPSAkbG9jYWxlLiJfY29sbGF0aW9uIjsKK215ICRmaWxlbmFtZSA9ICRwYWdlVGl0bGUuIi5odG1sIjsKKworb3BlbiBUQUJMRSwgIj4kZmlsZW5hbWUiOworCisKK3ByaW50IFRBQkxFIDw8IkVuZE9mVGVtcGxhdGUiOworPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPiRwYWdlVGl0bGU8L3RpdGxlPgorPHN0eWxlPgorICAgICAgICAgPCEtLQorICAgICAgICAgdGFibGUgICAgICAgIHsgYm9yZGVyLXNwYWNpbmc6IDA7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHdpZHRoOiAxMDAlOyAKKyAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KK3RkLCB0aCAgICAgICB7IHdpZHRoOiAxMCU7IGJvcmRlci1zcGFjaW5nOiAwOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBjb2xvcjogYmxhY2s7IAorICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2sgfQorLS0+CisgICAgIDwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiPgorCis8cD48Yj48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+Q29sbGF0aW9uOjwvZm9udD4gJGxvY2FsZSAoJGxvbmdfbmFtZSkgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2NnaS1iaW4vaWN1L2x4L2VuLz9fPSRsb2NhbGUiPkRlbW88L2E+LCAKKworPGEgaHJlZj0iLi4vYWxsX2RpZmZfeG1sL2NvbXBhcmlzb25fY2hhcnRzLmh0bWwiPkNvdmVyIAorUGFnZTwvYT4sIDxhIGhyZWY9Ii4uL2FsbF9kaWZmX3htbC9pbmRleC5odG1sIj5JbmRleDwvYT48L2I+PC9wPgorPHRhYmxlPgorICA8dHI+CitFbmRPZlRlbXBsYXRlCisKK215ICRkaXJDb21tb24gPSAiY29tbW9uIjsKK215ICRyZWZDb21tb24gPSAkZGlyQ29tbW9uLiIvVUNBUnVsZXMudHh0IjsKK215ICRuYW1lQ29tbW9uID0gJGRpckNvbW1vbi4iLyIuJGxvY2FsZS4iX2NvbGxhdGlvbi5odG1sIjsKK215ICRjb2xvckNvbW1vbiA9ICIjQUQ5ODlEIjsKKworbXkgJGxvYzsKKworaWYoISgtZSAkbmFtZUNvbW1vbikpIHsKKyAgJGxvY2FsZSA9fiAvXy87CisgICRsb2MgPSAkYDsKKyAgJG5hbWVDb21tb24gPSAiJGRpckNvbW1vbi8kbG9jIi4iX2NvbGxhdGlvbi5odG1sIjsKK30KK3ByaW50IFRBQkxFICIgICAgPHRoIGJnY29sb3I9XCIkY29sb3JDb21tb25cIj5DT01NT04gKDxhIGhyZWY9XCIkcmVmQ29tbW9uXCI+VUNBPC9hPiA8YSBocmVmPVwiLi4vJGRpckNvbW1vbi94bWwvJGxvY2FsZS54bWxcIj54bWw8L2E+KTwvdGg+XG4iOworCitteSAkZGlyTGludXggPSAibGludXgiOworbXkgJHJlZkxpbnV4ID0gJGRpckxpbnV4LiIvIi4kbG9jYWxlLiIudXRmOF9kZWZhdWx0X3Jhdy5odG1sIjsKK215ICRyYXdMaW51eCA9ICRkaXJMaW51eC4iLyIuJGxvY2FsZS4iLnV0ZjhfcmF3Lmh0bWwiOworbXkgJGRlZkxpbnV4ID0gJGRpckxpbnV4LiIvIi4kbG9jYWxlOworbXkgJG5hbWVMaW51eCA9ICIkZGlyTGludXgvJGxvY2FsZSIuIi51dGY4X2NvbGxhdGlvbi5odG1sIjsKK215ICRjb2xvckxpbnV4ID0gIiMxMTkxRjEiOworCitwcmludCBUQUJMRSAiICAgIDx0aCBiZ2NvbG9yPVwiJGNvbG9yTGludXhcIj5MSU5VWCAoIjsKK2lmICghKC1lICRuYW1lTGludXgpKSB7CisjdHJ5IHRoZSB2YXJpYW50IHRoYXQgaGFzIEBldXJvIHN0dWNrIGluCisgICRuYW1lTGludXggPSAiJGRpckxpbnV4LyRsb2NhbGUiLicudXRmOEBldXJvX2NvbGxhdGlvbi5odG1sJzsKKyAgaWYoLWUgJG5hbWVMaW51eCkgeworICAgICRyZWZMaW51eCA9ICRkaXJMaW51eC4iLyIuJGxvY2FsZS4nLnV0ZjhAZXVyb19kZWZhdWx0X3Jhdy5odG1sJzsKKyAgICAkcmF3TGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGUuJy51dGY4QGV1cm9fcmF3Lmh0bWwnOworICB9Cit9CitpZiAoLWUgJG5hbWVMaW51eCkgeworICAgIHByaW50IFRBQkxFICI8YSBocmVmPVwiJHJhd0xpbnV4XCI+T3JkZXJpbmc8L2E+IDxhIGhyZWY9XCIkZGVmTGludXhcIj5EZWZpbml0aW9uPC9hPiA8YSBocmVmPVwiJHJlZkxpbnV4XCI+YmFzZTwvYT4iOworfSAKKworcHJpbnQgVEFCTEUgIiA8YSBocmVmPVwiLi4vJGRpckxpbnV4L3htbC8kbG9jYWxlLnhtbFwiPnhtbDwvYT4pPC90aD5cbiI7CisKK215ICRkaXJXaW4gPSAid2lueHAiOworbXkgJHJlZldpbiA9ICRkaXJXaW4uIi8iLiRsb2NhbGUuIl9kZWZhdWx0X3Jhdy5odG1sIjsKK215ICRyYXdXaW4gPSAkZGlyV2luLiIvIi4kbG9jYWxlLiJfcmF3Lmh0bWwiOworbXkgJG5hbWVXaW4gPSAiJGRpcldpbi8kbG9jYWxlIi4iX2NvbGxhdGlvbi5odG1sIjsKK215ICRjb2xvcldpbiA9ICIjOThGQjk4IjsKKworcHJpbnQgVEFCTEUgIiAgICA8dGggYmdjb2xvcj1cIiRjb2xvcldpblwiPldJTkRPV1MgKCI7IAoraWYgKC1lICRuYW1lV2luKSB7CisgICBwcmludCBUQUJMRSAiPGEgaHJlZj1cIiRyYXdXaW5cIj5PcmRlcmluZzwvYT4gPGEgaHJlZj1cIiRyZWZXaW5cIj5iYXNlPC9hPiAiOworfSAKK3ByaW50IFRBQkxFICI8YSBocmVmPVwiLi4vd2luZG93cy94bWwvJGxvY2FsZS54bWxcIj54bWw8L2E+KTwvdGg+XG4iOworCitwcmludCBUQUJMRSAiICA8L3RyPlxuICA8dHI+IjsKKworCityZWFkUnVsZXMoJG5hbWVDb21tb24sICIjQUQ5ODlEIiwgIlNhbWUgYXMgdGhlIFVDQS4iKTsKK3JlYWRSdWxlcygkbmFtZUxpbnV4LCAiIzExOTFGMSIsICJObyBkYXRhIGF2YWlsYWJsZS4iKTsgICAgICAKK3JlYWRSdWxlcygkbmFtZVdpbiwgIiM5OEZCOTgiLCAiTm8gZGF0YSBhdmFpbGFibGUuIik7CisKKworcHJpbnQgVEFCTEUgPDwiRW5kT2ZGb290ZXIiOworICA8L3RyPgorPC90YWJsZT4KKworPC9ib2R5PgorPC9odG1sPgorRW5kT2ZGb290ZXIKKworCitzdWIgcmVhZFJ1bGVzIHsKKyAgIyByZWFkUnVsZXMoJGZpbGUsICRjb2xvcikKKyAgbXkgJGZpbGVuYW1lICA9IHNoaWZ0OworICBteSAkY29sb3IgPSBzaGlmdDsKKyAgbXkgJGNvbW1lbnQgPSBzaGlmdDsKKyAgbXkgJG5vTGluZXMgPSAwOworICBteSAkcHJpbnRPdXQgPSAwOworCisgIG15ICRmaWxlOworCisgIGlmKC1lICRmaWxlbmFtZSkgeworICAgIG9wZW4oJGZpbGUsICI8JGZpbGVuYW1lIikgfHwgZGllICJzb21ldGhpbmcgdmVyeSBzdHJhbmdlIGhhcHBlbmVkXG4iOworICAgIHByaW50IFRBQkxFICI8dGQgYmdjb2xvcj1cIiRjb2xvclwiPlxuIjsKKyAgICB3aGlsZSAoPCRmaWxlPikgeworICAgICAgaWYgKC9cfVw8YnJcPiQvKSB7CisgICAgICAgICRwcmludE91dCA9IDA7CisKKyAgICAgIH0KKyAgICAgIGlmICgkcHJpbnRPdXQpIHsKKyAgICAgICAgcHJpbnQgVEFCTEUgJF87CisgICAgICAgICRub0xpbmVzKys7CisgICAgICB9CisgICAgICBpZiAoL1NlcXVlbmNlLykgeworICAgICAgICAkcHJpbnRPdXQgPSAxOworICAgICAgICBwcmludCAiZm91bmQgc2VxdWVuY2VcbiI7CisgICAgICAgICRub0xpbmVzID0gMDsKKyAgICAgIH0KKworICAgIH0KKyAgICBpZiAoISRub0xpbmVzKSB7CisgICAgICBwcmludCBUQUJMRSAiU2FtZSBvcmRlcmluZyBhcyBiYXNlXG4iOworICAgIH0KKyAgICBwcmludCBUQUJMRSAiPC90ZD5cbiI7CisgIH0gZWxzZSB7CisgICAgcHJpbnQgVEFCTEUgIjx0ZCBiZ2NvbG9yPVwiJGNvbG9yXCI+XG4kY29tbWVudDwvdGQ+XG4iOworICB9ICAgIAorfQorCisKKyMgVGFzdGluZyBvZiBmb29kIHByb2R1Y3QKKyMgNjUwLTU3NC00NTUxICQ1MCAxIGhvdXIKKworCisjICAgICA8dGQgYmdjb2xvcj0iI0FEOTg5RCI+MS4wLWFscGhhPC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj4xLjA8L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPjxzcGFuIHRpdGxlPSIwMDZFIHtMQVRJTiBTTUFMTCBMRVRURVIgTn0iPiZhbXA7bjwvc3Bhbj48YnI+CisjICAgICAgIDxzcGFuIHRpdGxlPSIwMDZFIDAwNzkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbHQ7Jm5ic3A7bnk8L3NwYW4+PGJyPgorCisjICAgICAgIDxzcGFuIHRpdGxlPSIwMDZFIDAwNkUgMDA3OSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBZfSAvIDAwNkUgMDA3OSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBTTUFMTCBMRVRURVIgWX0iPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOz0mbmJzcDtubnkmbmJzcDsvJm5ic3A7bnk8L3NwYW4+PGJyPgorIyAgICAgICA8c3BhbiB0aXRsZT0iMDA2RSAwMDU5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIENBUElUQUwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7Jmx0OyZsdDsmbmJzcDtuWTwvc3Bhbj48YnI+CisjICAgICA8L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRkZGMzMiPjEuMjwvdGQ+CisKKyMgICAgIDx0ZCBiZ2NvbG9yPSIjOThGQjk4Ij5XaW5kb3dzIFhQPC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KKyMgICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KZGlmZiAtLWdpdCBhL2NvbHByb2JlL2RvQ29tcGFyaXNvblRhYmxlLnBsIGIvY29scHJvYmUvZG9Db21wYXJpc29uVGFibGUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2EwMmVmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9kb0NvbXBhcmlzb25UYWJsZS5wbApAQCAtMCwwICsxLDIwOSBAQAorIyEgL3Vzci9iaW4vcGVybCAtdworCit1c2Ugc3RyaWN0OwordXNlIElPOjpGaWxlOworCisKK215ICRsb2NhbGUgPSAkQVJHVlswXTsKKworCitteSAkbG9uZ19uYW1lID0gYC9ob21lL3dlaXYvc3JjL2ljdS9zb3VyY2UvZXh0cmEvY29scHJvYmUvbG9uZ25hbWUgJGxvY2FsZWA7CitwcmludCAiTG9uZyBuYW1lIGlzICRsb25nX25hbWVcbiI7CitteSAkcGFnZVRpdGxlID0gJGxvY2FsZS4iIGNvbGxhdGlvbiI7CitteSAkZmlsZW5hbWUgPSAkbG9jYWxlLiIuaHRtbCI7CisKK29wZW4gVEFCTEUsICI+JGZpbGVuYW1lIjsKKworCitwcmludCBUQUJMRSA8PCJFbmRPZlRlbXBsYXRlIjsKKzxodG1sPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT4kcGFnZVRpdGxlPC90aXRsZT4KKzxzdHlsZT4KKyAgICAgICAgIDwhLS0KKyAgICAgICAgIHRhYmxlICAgICAgICB7IGJvcmRlci1zcGFjaW5nOiAwOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTsgCisgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjayB9Cit0ZCwgdGggICAgICAgeyB3aWR0aDogMTAlOyBib3JkZXItc3BhY2luZzogMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgY29sb3I6IGJsYWNrOyAKKyAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KKy0tPgorICAgICA8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIj4KKworPHA+PGI+PGZvbnQgY29sb3I9IiNGRjAwMDAiPkNvbGxhdGlvbjo8L2ZvbnQ+ICRsb2NhbGUgKCRsb25nX25hbWUpIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jZ2ktYmluL2ljdS9seC9lbi8/Xz0kbG9jYWxlIj5EZW1vPC9hPiwgCisKKzxhIGhyZWY9Ii4uLy4uL2NvbXBhcmlzb25fY2hhcnRzLmh0bWwiPkNvdmVyIAorUGFnZTwvYT4sIDxhIGhyZWY9Ii4uL21haW4vaW5kZXguaHRtbCI+TG9jYWxlIERpZmZzIEluZGV4PC9hPiwgPGEgaHJlZj0iaW5kZXguaHRtbCI+Q29sbGF0aW9uIERpZmZzIEluZGV4PC9hPjwvYj48L3A+Cis8dGFibGU+CisgIDx0cj4KK0VuZE9mVGVtcGxhdGUKKworbXkgJGRpckNvbW1vbiA9ICJpY3Vjb2xsYXRpb25zIjsKK215ICRyZWZDb21tb24gPSAkZGlyQ29tbW9uLiIvVUNBUnVsZXMudHh0IjsKK215ICRuYW1lQ29tbW9uID0gJGRpckNvbW1vbi4iLyIuJGxvY2FsZS4iX2NvbGxhdGlvbi5odG1sIjsKK215ICRjb2xvckNvbW1vbiA9ICIjQUQ5ODlEIjsKKworbXkgJGxvYyA9ICRsb2NhbGU7CisKK2lmKCEoLWUgJG5hbWVDb21tb24pKSB7CisgICRsb2NhbGUgPX4gL18vOworICAkbG9jID0gJGA7CisgICRuYW1lQ29tbW9uID0gIiRkaXJDb21tb24vJGxvYyIuIl9jb2xsYXRpb24uaHRtbCI7Cit9CisKK3ByaW50ICJDb21tb24gaXMgJG5hbWVDb21tb25cbiI7CisKK3ByaW50IFRBQkxFICIgICAgPHRoIGJnY29sb3I9XCIkY29sb3JDb21tb25cIj5DT01NT04gKCI7CitpZigtZSAkbmFtZUNvbW1vbikgeworICBwcmludCBUQUJMRSAiPGEgaHJlZj1cIi4uLy4uL2NvbW1vbi9jb2xsYXRpb24vJGxvYy54bWxcIj54bWw8L2E+ICI7Cit9CitwcmludCBUQUJMRSAiPGEgaHJlZj1cIi4uLy4uL2NvbW1vbi9jb2xsYXRpb24vcm9vdC54bWxcIj5VQ0E8L2E+KTwvdGg+XG4iOworCitteSAkZGlyTGludXggPSAibGludXhjb2xsYXRpb25zIjsKK215ICRyZWZMaW51eCA9ICRkaXJMaW51eC4iLyIuJGxvY2FsZS4iLnV0ZjhfZGVmYXVsdF9yYXcuaHRtbCI7CitteSAkcmF3TGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGUuIi51dGY4X3Jhdy5odG1sIjsKK215ICRkZWZMaW51eCA9ICRkaXJMaW51eC4iLyIuJGxvY2FsZTsKK215ICRuYW1lTGludXggPSAiJGRpckxpbnV4LyRsb2NhbGUiLiJfY29sbGF0aW9uLmh0bWwiOworbXkgJGNvbG9yTGludXggPSAiIzExOTFGMSI7CisKK3ByaW50IFRBQkxFICIgICAgPHRoIGJnY29sb3I9XCIkY29sb3JMaW51eFwiPkxJTlVYIjsKK2lmICghKC1lICRuYW1lTGludXgpKSB7CisjdHJ5IHRoZSB2YXJpYW50IHRoYXQgaGFzIEBldXJvIHN0dWNrIGluCisgICRuYW1lTGludXggPSAiJGRpckxpbnV4LyRsb2NhbGUiLicudXRmOEBldXJvX2NvbGxhdGlvbi5odG1sJzsKKyAgaWYoLWUgJG5hbWVMaW51eCkgeworICAgICRyZWZMaW51eCA9ICRkaXJMaW51eC4iLyIuJGxvY2FsZS4nLnV0ZjhAZXVyb19kZWZhdWx0X3Jhdy5odG1sJzsKKyAgICAkcmF3TGludXggPSAkZGlyTGludXguIi8iLiRsb2NhbGUuJy51dGY4QGV1cm9fcmF3Lmh0bWwnOworICB9Cit9CitpZiAoLWUgJG5hbWVMaW51eCkgeworICBwcmludCBUQUJMRSAiICg8YSBocmVmPVwiLi4vLi4vbGludXgvY29sbGF0aW9uLyRsb2NhbGUueG1sXCI+eG1sPC9hPiI7CisgIG15ICRsaW51eEJhc2UgPSAmZ2V0QmFzZUxvY2FsZSgiJGRpckxpbnV4L2Jhc2UiLCAkbG9jYWxlKTsKKyAgaWYoJGxpbnV4QmFzZSBuZSAiIikgeworICAgIHByaW50IFRBQkxFICIgPGEgaHJlZj1cIi4uLy4uL2xpbnV4L2NvbGxhdGlvbi8kbGludXhCYXNlLnhtbFwiPkJhc2UgKCRsaW51eEJhc2UpPC9hPiI7CisgIH0KKyAgcHJpbnQgVEFCTEUgIikiOworfSAKK3ByaW50IFRBQkxFICI8L3RoPlxuIjsKKworCitteSAkZGlyV2luID0gIncya2NvbGxhdGlvbnMiOworbXkgJHJlZldpbiA9ICRkaXJXaW4uIi8iLiRsb2NhbGUuIl9kZWZhdWx0X3Jhdy5odG1sIjsKK215ICRyYXdXaW4gPSAkZGlyV2luLiIvIi4kbG9jYWxlLiJfcmF3Lmh0bWwiOworbXkgJG5hbWVXaW4gPSAiJGRpcldpbi8kbG9jYWxlIi4iX2NvbGxhdGlvbi5odG1sIjsKK215ICRjb2xvcldpbiA9ICIjOThGQjk4IjsKKyRsb2MgPSAkbG9jYWxlOworI3RyeSBmYWxsYmFjayBmb3Igd2luZG93cworcHJpbnQgVEFCTEUgIiAgICA8dGggYmdjb2xvcj1cIiRjb2xvcldpblwiPldJTkRPV1MiOyAKK2lmKCEoLWUgJG5hbWVXaW4pKSB7CisgICRsb2NhbGUgPX4gL18vOworICAkbG9jID0gJGA7CisgICRuYW1lV2luID0gIiRkaXJXaW4vJGxvYyIuIl9jb2xsYXRpb24uaHRtbCI7Cit9CisKK3ByaW50ICJXaW5kb3dzIGxvYyBpcyAkbG9jXG4iOworCitpZiAoLWUgJG5hbWVXaW4pIHsKKyAgcHJpbnQgVEFCTEUgIiAoPGEgaHJlZj1cIi4uLy4uL3dpbmRvd3MvY29sbGF0aW9uLyRsb2MueG1sXCI+eG1sPC9hPiI7CisgIG15ICR3aW5CYXNlID0gJmdldEJhc2VMb2NhbGUoIiRkaXJXaW4vYmFzZSIsICRsb2NhbGUpOworICBpZigkd2luQmFzZSBuZSAiIikgeworICAgIHByaW50IFRBQkxFICI8YSBocmVmPVwiLi4vLi4vd2luZG93cy9jb2xsYXRpb24vJHdpbkJhc2UueG1sXCI+YmFzZSAoJHdpbkJhc2UpPC9hPiI7CisgIH0KKyAgcHJpbnQgVEFCTEUgIikiOworfSAKK3ByaW50IFRBQkxFICI8L3RoPlxuIjsKK3ByaW50IFRBQkxFICIgIDwvdHI+XG4gIDx0cj4iOworCisKK3JlYWRSdWxlcygkbmFtZUNvbW1vbiwgIiNBRDk4OUQiLCAiU2FtZSBhcyB0aGUgVUNBLiIpOworcmVhZFJ1bGVzKCRuYW1lTGludXgsICIjMTE5MUYxIiwgIk5vIGRhdGEgYXZhaWxhYmxlLiIpOyAgICAgIAorcmVhZFJ1bGVzKCRuYW1lV2luLCAiIzk4RkI5OCIsICJObyBkYXRhIGF2YWlsYWJsZS4iKTsKKworCitwcmludCBUQUJMRSA8PCJFbmRPZkZvb3RlciI7CisgIDwvdHI+Cis8L3RhYmxlPgorCis8L2JvZHk+Cis8L2h0bWw+CitFbmRPZkZvb3RlcgorCisKK3N1YiByZWFkUnVsZXMgeworICAjIHJlYWRSdWxlcygkZmlsZSwgJGNvbG9yKQorICBteSAkZmlsZW5hbWUgID0gc2hpZnQ7CisgIG15ICRjb2xvciA9IHNoaWZ0OworICBteSAkY29tbWVudCA9IHNoaWZ0OworICBteSAkbm9MaW5lcyA9IDA7CisgIG15ICRwcmludE91dCA9IDA7CisKKyAgbXkgJGZpbGU7CisKKyAgaWYoLWUgJGZpbGVuYW1lKSB7CisgICAgb3BlbigkZmlsZSwgIjwkZmlsZW5hbWUiKSB8fCBkaWUgInNvbWV0aGluZyB2ZXJ5IHN0cmFuZ2UgaGFwcGVuZWRcbiI7CisgICAgcHJpbnQgVEFCTEUgIjx0ZCBiZ2NvbG9yPVwiJGNvbG9yXCI+XG4iOworICAgIHdoaWxlICg8JGZpbGU+KSB7CisgICAgICBpZiAoL1x9XDxiclw+JC8pIHsKKyAgICAgICAgJHByaW50T3V0ID0gMDsKKworICAgICAgfQorICAgICAgaWYgKCRwcmludE91dCkgeworICAgICAgICBpZighL14kLyAmJiAhLyZuYnNwOzxicj4kLykgeworICAgICAgICAgIHByaW50IFRBQkxFICRfOworICAgICAgICAgICRub0xpbmVzKys7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmICgvU2VxdWVuY2UvKSB7CisgICAgICAgICRwcmludE91dCA9IDE7CisgICAgICAgIHByaW50ICJmb3VuZCBzZXF1ZW5jZVxuIjsKKyAgICAgICAgJG5vTGluZXMgPSAwOworICAgICAgfQorCisgICAgfQorICAgIGlmICghJG5vTGluZXMpIHsKKyAgICAgIHByaW50IFRBQkxFICJTYW1lIG9yZGVyaW5nIGFzIGJhc2VcbiI7CisgICAgfQorICAgIHByaW50IFRBQkxFICI8L3RkPlxuIjsKKyAgfSBlbHNlIHsKKyAgICBwcmludCBUQUJMRSAiPHRkIGJnY29sb3I9XCIkY29sb3JcIj5cbiRjb21tZW50PC90ZD5cbiI7CisgIH0gICAgCit9CisKK3N1YiBnZXRCYXNlTG9jYWxlKCl7CisgICAgbXkgJGJhc2VmaWxlID0gc2hpZnQ7CisgICAgbXkgJGxvY2FsZSA9IHNoaWZ0OworICAgIG15ICRiYXNlRkggPSBJTzo6RmlsZS0+bmV3KCRiYXNlZmlsZSwiciIpCisgICAgICAgICAgICBvciBkaWUgICJjb3VsZCBub3Qgb3BlbiB0aGUgZmlsZSAkYmFzZWZpbGUgZm9yIHJlYWRpbmc6ICQhIFxuIjsKKyAgICBteSAkYnNlOworICAgIG15ICRsb2M7CisgICAgd2hpbGUoZGVmaW5lZCAoIG15ICRsaW5lID0gPCRiYXNlRkg+KSl7CisgICAgICAgIGlmKCAkbGluZSA9fiAvXDwkbG9jYWxlXD4vKXsKKyAgICAgICAgICAgICgkbG9jLCRic2UpID0gc3BsaXQgKC9cPi8sICRsaW5lKTsKKyAgICAgICAgICAgICAkYnNlID1+IHMvXlxzK1w8Ly87CisgICAgICAgICAgICAgcmV0dXJuICRic2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworIyBUYXN0aW5nIG9mIGZvb2QgcHJvZHVjdAorIyA2NTAtNTc0LTQ1NTEgJDUwIDEgaG91cgorCisKKyMgICAgIDx0ZCBiZ2NvbG9yPSIjQUQ5ODlEIj4xLjAtYWxwaGE8L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPjEuMDwvdGQ+CisjICAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PTwvdGQ+CisjICAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PHNwYW4gdGl0bGU9IjAwNkUge0xBVElOIFNNQUxMIExFVFRFUiBOfSI+JmFtcDtuPC9zcGFuPjxicj4KKyMgICAgICAgPHNwYW4gdGl0bGU9IjAwNkUgMDA3OSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBTTUFMTCBMRVRURVIgWX0iPiZuYnNwOyZuYnNwOyZsdDsmbmJzcDtueTwvc3Bhbj48YnI+CisKKyMgICAgICAgPHNwYW4gdGl0bGU9IjAwNkUgMDA2RSAwMDc5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIFl9IC8gMDA2RSAwMDc5IHtMQVRJTiBTTUFMTCBMRVRURVIgTn0ge0xBVElOIFNNQUxMIExFVFRFUiBZfSI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PSZuYnNwO25ueSZuYnNwOy8mbmJzcDtueTwvc3Bhbj48YnI+CisjICAgICAgIDxzcGFuIHRpdGxlPSIwMDZFIDAwNTkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWX0iPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsmbHQ7Jmx0OyZuYnNwO25ZPC9zcGFuPjxicj4KKyMgICAgIDwvdGQ+CisjICAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PTwvdGQ+CisjICAgICA8dGQgYmdjb2xvcj0iI0ZGRkYzMyI+MS4yPC90ZD4KKworIyAgICAgPHRkIGJnY29sb3I9IiM5OEZCOTgiPldpbmRvd3MgWFA8L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgorIyAgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgpkaWZmIC0tZ2l0IGEvY29scHJvYmUvZXh0cmFjdENvbGxhdGlvbkRhdGEucGwgYi9jb2xwcm9iZS9leHRyYWN0Q29sbGF0aW9uRGF0YS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzA3OWJlCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvZXh0cmFjdENvbGxhdGlvbkRhdGEucGwKQEAgLTAsMCArMSwyNDYgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIFVuaWNvZGU6OlVDRCAnY2hhcmluZm8nOwordXNlIFVuaWNvZGU6Ok5vcm1hbGl6ZTsKK3VzZSB1dGY4OwordXNlIG9wZW4gJzp1dGY4JzsKKworbXkgJHByaW50b3V0ID0gMDsKK215ICRicmFjZXMgPSAwOworbXkgJGNvbGxzID0gMDsKK215ICRhbGlhc2VkID0gMDsKK215ICRuZXdOYW1lID0gIiI7CitteSAkZmlsZW5hbWU7CitteSAkc3VmZml4OworbXkgJGxvY2FsZTsKKworTkVXX0ZJTEU6Citmb3JlYWNoIG15ICRhcmcgKEBBUkdWKSB7CisgIGlmKCRuZXdOYW1lID1+IC9eJC8pIHsKKyAgICAkbG9jYWxlID0gJGFyZzsKKyAgICAkbG9jYWxlID1+IHMjXi4qLyMjZzsKKyAgICAkbG9jYWxlID1+IHMvXC50eHQvLzsKKyAgfSBlbHNlIHsKKyAgICAkbmV3TmFtZSA9ICIiOworICB9CisgIG15ICRjb21tYW5kID0gIi9ob21lL3dlaXYvYnVpbGQvY3VycmVudC9iaW4vdWNvbnYgLXggaGV4LWFueS9KYXZhIC1mIHV0ZjggLXQgdXRmOCAkYXJnIjsKKyAgcHJpbnQgJGNvbW1hbmQuIlxuIjsKKyAgbXkgQGJ1bmRsZSA9IGAkY29tbWFuZGA7CisgIGZvcmVhY2ggJF8gKEBidW5kbGUpIHsKKyAjd2hpbGUoPD4pIHsKKyAgICNwcmludCAkQVJHViBpZiBlb2Y7CisgICBpZigvXlwvXC8vKSB7CisgICAgIG5leHQ7CisgICB9CisgICBpZigvY29sbGF0aW9ucy8pIHsKKyAgICAgcHJpbnQgImZvdW5kIENvbGxhdGlvbnNcbiI7CisgICAgICRjb2xscyA9IDE7CisgICAgIGlmKC9hbGlhcy8pIHsKKyAgICAgICBwcmludCAiY29sbGF0aW9ucyBhcmUgYWxpYXNlZFxuIjsKKyAgICAgICAkYWxpYXNlZCA9IDE7CisgICAgIH0KKyAgIH0KKyAgIGlmKCRhbGlhc2VkKSB7CisgICAgIHByaW50ICJwcm9jZXNzaW5nIGFsaWFzZWQgZGF0YTogJF9cbiI7CisgICAgIGlmKC9cey8pIHsKKyAgICAgICBwcmludCAiQnJhY2VzIG9wZW5lZFxuIjsKKyAgICAgICAkYnJhY2VzID0gMTsKKyAgICAgfQorICAgICBpZigkYnJhY2VzICYmIC9cIiguKilcIi8pIHsKKyAgICAgICAkbmV3TmFtZSA9ICQxOworICAgICAgIHByaW50ICJBbGlhc2luZyB0byAkbmV3TmFtZVxuIjsKKyAgICAgfQorICAgICBpZigkYnJhY2VzICYmIC9cfS8pIHsKKyAgICAgICAkYnJhY2VzID0gMDsKKyAgICAgICBwcmludCAiQnJhY2VzIGNsb3NlZFxuIjsKKyAgICAgICAkYWxpYXNlZCA9IDA7CisgICAgICAgcHJpbnQgIlN3aXRjaGluZyBmcm9tICRmaWxlbmFtZSB0byAkbmV3TmFtZVxuIjsKKyAgICAgICAkYXJnID1+IHMvJGxvY2FsZVwudHh0JC8kbmV3TmFtZVwudHh0LzsKKyAgICAgICBwcmludCAiJGFyZ1xuIjsKKyAgICAgICByZWRvIE5FV19GSUxFOworICAgICB9CisKKyAgIH0KKyAgIGlmKC9zdGFuZGFyZHxwaG9uZWJvb2t8dHJhZGl0aW9uYWx8cGlueWlufHN0cm9rZXxkaXJlY3QvICYmICRjb2xscykgeworICAgICBwcmludCAiZm91bmQgJCYgY29sbGF0aW9uXG4iOworICAgICAkc3VmZml4ID0gIl8iLnVjKCQmKTsKKyAgICAgaWYoL3N0YW5kYXJkLykgeworICAgICAgICRzdWZmaXggPSAiIjsKKyAgICAgfQorICAgfQorICAgaWYoL1NlcXVlbmNlLyAmJiAkY29sbHMpIHsKKyAgICAgI2Jpbm1vZGUgQVJHViwgIjp1dGY4IjsKKyAgICAgJHByaW50b3V0ID0gMTsKKyAgICAgIyRmaWxlbmFtZSA9ICRBUkdWOworICAgICAkZmlsZW5hbWUgPSAkbG9jYWxlOworICAgICBpZigkc3VmZml4KSB7CisgICAgICAgJGZpbGVuYW1lIC49ICJfIi4kc3VmZml4OworICAgICB9CisgICAgICRmaWxlbmFtZSAuPSAiX2NvbGxhdGlvbi5odG1sIjsKKyAgICAgcHJpbnQgImZpbGVuYW1lIGlzICRmaWxlbmFtZVxuIjsKKyAgICAgI29wZW4oT1VULCAiPjp1dGY4IiwgIiRmaWxlbmFtZSIpOworICAgICBvcGVuKE9VVCwgIj4kZmlsZW5hbWUiKTsKKyAgICAgcHJpbnRIZWFkaW5nKCRhcmcpOworICAgICAjbmV4dDsKKyAgIH0KKyAgIG15ICRsaW5lID0gJF87CisgICBpZigkbGluZSA9fiAvXHsvICYmICRwcmludG91dCkgeworICAgICAkYnJhY2VzKys7CisgICB9CisgICBpZigkcHJpbnRvdXQpIHsKKyAgICAgcHJpbnQgT1VUIHByb2Nlc3NMaW5lKCRsaW5lKTsKKyAgICAgcHJpbnQgT1VUICJcbiI7CisgICB9CisgICBpZiggJGxpbmUgPX4gL1x9LyAmJiAkcHJpbnRvdXQpIHsKKyAgICAgJGJyYWNlcy0tOworICAgICBpZigkYnJhY2VzID09IDApIHsKKyAgICAgICAkcHJpbnRvdXQgPSAwOworICAgICAgIHByaW50Rm9vdGluZygpOworICAgICAgIGNsb3NlKE9VVCk7CisgICAgIH0KKyAgIH0KKyB9IAorfQorCitzdWIgcHJvY2Vzc0xpbmUgeworICBteSAkbGluZSA9IHNoaWZ0OworICAkXyA9ICRsaW5lOworICBteSAkaSA9IDA7CisgIG15ICRqID0gMDsKKyAgbXkgJHJlc3VsdDsKKyMgcmVtb3ZlIGNvbW1lbnRzCisgIHMjLy8uKiQjI2c7CisjIHJlbW92ZSAiU2VxdWVuY2UiIGlmIHByZXNlbnQKKyAgcy9TZXF1ZW5jZVxzKi8vOworIyByZW1vdmUgbGVhZGluZyBicmFjZSBpZiBwcmVzZW50CisgIHMvXlxzKnsvLzsKKyMgcmVtb3ZlIHRyYWlsaW5nIGJyYWNlIGlmIHByZXNlbnQKKyAgcy99XHMqJC8vOworIyByZW1vdmUgdHJhaWxpbmcgcXVvdGUKKyAgcy8iXHMqJC8vOworI3JlbW92ZSBsZWFkIHF1b3RlCisgIHMvXlxzKiIvLzsKKyNzZXBhcmF0ZSBvcHRpb25zCisgIHMvKFxbLipcXSkvXG5cMS9nOworI3NlcGFyYXRlIHJlc2V0cworICBzL1xzKlwmXHMqL1xuXCYgL2c7Cisjc2VwYXJhdGUgc3RyZW5ndGhzIGFuZCBpbnNlcnQgc3BhY2VzCisgIHMvXHMqKDx7MSw0fSlccyovXG5cMSAvZzsKKyNzZXBhcmF0ZSBlcXVhbHMgYW5kIGluc2VydCBzcGFjZXMKKyAgcy9ccyo9XHMqL1xuPSAvZzsKKworIyBicmVhayBpbnRvIGluZGl2aWR1YWwgcmVzZXQvc3RyZW5ndGgvc2V0dGluZyBsaW5lcworICBteSBAbGluZXMgPSBzcGxpdCgvXG4vKTsKKworICBteSAkbGluZTsKKyAgbXkgJG5hbWU7CisgIG15ICRzcGFuRW5kID0gIiI7CisgIG15ICRyZXN1bHQgPSAiIjsKKyAgbXkgJG5hbWVzID0gIiI7CisgIG15ICRjb2RlcyA9ICIiOworICBteSAkbHJtID0gIiI7CisKKyAgZm9yZWFjaCAkbGluZSAoQGxpbmVzKSB7CisgICAgIyBza2lwIGVtcHR5IGxpbmVzCisgICAgaWYoJGxpbmUgPX4gL14kLykgeworICAgICAgbmV4dDsKKyAgICB9CisgICAgJHNwYW5FbmQgPSAiIjsKKyAgICAkbmFtZSA9ICIiOworICAgICRscm0gPSAiIjsKKyAgICAkbGluZSA9IE5GQygkbGluZSk7CisgICAgIyBmb3IgcmVzZXRzIGFuZCBzdHJlbmd0aHMgd2Ugd2lsbCBnZXQgbmFtZSBmb3IgZWxlbWVudHMKKyAgICBpZigkbGluZSA9fiAvPHsxLDR9IHw9IHwmIFxbLipcXXwmIC8pIHsKKyAgICAgICRuYW1lID0gIjxzcGFuIHRpdGxlPVwiIjsKKyAgICAgICRuYW1lcyA9ICIiOworICAgICAgJGNvZGVzID0gIiI7CisgICAgICBteSAkc3RhcnQgPSAkJjsKKyAgICAgIG15ICRyZXN0ID0gJCc7CisgICAgICBmb3IgKCRqID0gMDsgJGogPCBsZW5ndGgoJHJlc3QpOyAkaisrKSB7CisJbXkgJGNoYXIgPSBzdWJzdHIoJHJlc3QsICRqLCAxKTsKKwlteSAkY2hhclZhbCA9IG9yZCgkY2hhcik7CisJIyBzb21lIG9mIGVsZW1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBzeW50YXgsIHNvIHRoZXkgYXJlCisJIyBlbnRlcmVkIHdpdGhvdXQgdHJhbnNsYXRpb24gdG8gdGhlIG5hbWUKKwlpZigkY2hhclZhbCA9PSAweDAwMkYgfHwgJGNoYXJWYWwgPT0gMHgwMDdDKSB7CisJICAkbmFtZSAuPSAkY29kZXMuJG5hbWVzLiIgJGNoYXIgIjsKKwkgICRjb2RlcyA9ICIiOworCSAgJG5hbWVzID0gIiI7CisJfSBlbHNpZigkY2hhclZhbCA9PSAweDAwMjcpIHsgI3F1b3RlIHJlcXVpcmVzIG1vcmUgcHJvY2Vzc2luZworCSAgIyRuYW1lIC49ICInIjsKKwl9IGVsc2UgeworCSAgbXkgJGNoYXJpbmZvID0gY2hhcmluZm8oJGNoYXJWYWwpOworCSAgJGNvZGVzIC49ICRjaGFyaW5mby0+eydjb2RlJ30uIiAiOworCSAgJG5hbWVzIC49ICJ7Ii4kY2hhcmluZm8tPnsnbmFtZSd9LiJ9ICI7CisgICAgICAgICAgaWYoJGNoYXJpbmZvLT57J2JpZGknfSBlcSAiUiIgfHwgJGNoYXJpbmZvLT57J2JpZGknfSBlcSAiQUwiKSB7CisgICAgICAgICAgICAkbHJtID0gIiZscm07IjsKKyAgICAgICAgICB9CisJICAjJG5hbWUgLj0gJGNoYXJpbmZvLT57J2NvZGUnfS4iIHsiLiRjaGFyaW5mby0+eyduYW1lJ30uIn0gIjsKKwl9CisgICAgICB9CisgICAgICAkbmFtZSAuPSAkY29kZXMuJG5hbWVzLiJcIiA+IjsKKyAgICAgICRzcGFuRW5kID0gIjwvc3Bhbj4iOworICAgIH0KKyAgICAjcHJpbnQgJG5hbWUuIlxuIjsKKyAgICBpZigkbGluZSA9fiAvXjw8PDwvKSB7CisgICAgICAkbGluZSA9ICIgICAgJGxpbmUiOworICAgIH0gZWxzaWYoJGxpbmUgPX4gL148PDwvKSB7CisgICAgICAkbGluZSA9ICIgICAkbGluZSI7CisgICAgfSBlbHNpZigkbGluZSA9fiAvXjw8LykgeworICAgICAgJGxpbmUgPSAiICAkbGluZSI7CisgICAgfSBlbHNpZigkbGluZSA9fiAvXjwvKSB7CisgICAgICAkbGluZSA9ICIgJGxpbmUiOworICAgIH0gZWxzaWYoJGxpbmUgPX4gL149LykgeworICAgICAgJGxpbmUgPSAiICAgICRsaW5lIjsKKyAgICB9CisgICAgIyBpbnNlcnQgc3BhY2VzIGFyb3VuZCB2ZXJ0aWNhbCBiYXJzIChmaXggcHJlZml4ZXMpCisKKyAgICAjIGluc2VydCBzcGFjZXMgYXJvdW5kIHNsYXNoZXMgKGZpeCBleHBhbnNpb25zKQorICAgICRsaW5lID1+IHMjLyMgLyAjZzsKKyAgICAjIHJlcGxhY2UgJgorICAgICRsaW5lID1+IHMvXCYvJmFtcDsvZzsKKyAgICAjIHJlcGxhY2Ugc3BhY2VzCisgICAgJGxpbmUgPX4gcy8gLyZuYnNwOy9nOworICAgICMgcmVwbGFjZSA8CisgICAgJGxpbmUgPX4gcy88LyZsdDsvZzsKKyAgICAjIHJlcGxhY2UgPgorICAgICRsaW5lID1+IHMvPi8mZ3Q7L2c7CisKKyAgICAjJGxpbmVzWyRpXSA9ICRuYW1lLiRscm0uJGxpbmUuIjwvc3Bhbj48YnI+IjsgCisgICAgIyRpKys7CisgICAgJHJlc3VsdCAuPSAgJG5hbWUuJGxybS4kbGluZS4kc3BhbkVuZC4iPGJyPlxuIjsKKyAgfQorCisgICMkXyA9IGpvaW4oIlxuIiwgQGxpbmVzKTsKKyAgcmV0dXJuICRyZXN1bHQ7CisKK30KKyAKK3N1YiBwcmludEhlYWRpbmcgeworbXkgJGZpbGVuYW1lID0gc2hpZnQ7CiskZmlsZW5hbWUgPX4gcy9cLnR4dC8vOworcHJpbnQgT1VUIDw8IkVuZE9mSGVhZGluZyI7Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPC9oZWFkPgorIyBDb2xsYXRpb24gZGF0YSByZXNvdXJjZSBidW5kbGUgZ2VuZXJhdGVkIGZvciBsb2NhbGU6ICRmaWxlbmFtZTxicj4KKyMgRm9yIHBsYXRmb3JtIGljdSByZWZlcmVuY2UgcGxhdGZvcm0gVUNBPGJyPjxicj4KKworCiskZmlsZW5hbWUmbmJzcDt7PGJyPgorJm5ic3A7Jm5ic3A7Q29sbGF0aW9uRWxlbWVudHMmbmJzcDt7PGJyPgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2VxdWVuY2UmbmJzcDt7PGJyPgorRW5kT2ZIZWFkaW5nCit9CisKK3N1YiBwcmludEZvb3RpbmcgeworcHJpbnQgT1VUIDw8IkVuZE9mRm9vdGluZyI7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PGJyPgorJm5ic3A7Jm5ic3A7fTxicj4KK308YnI+CisKKzwvcHJlPgorPC9odG1sPgorRW5kT2ZGb290aW5nCit9CmRpZmYgLS1naXQgYS9jb2xwcm9iZS9nY2QyLnBsIGIvY29scHJvYmUvZ2NkMi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOGU1Zjg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvZ2NkMi5wbApAQCAtMCwwICsxLDI0IEBACisjIS91c3IvYmluL3BlcmwgLXcKKwordXNlIHN0cmljdDsKKworI215ICRsb2NhbGVNaW51c0EgPSBgbG9jYWxlIC1hYDsKK215ICRsb2NhbGVNaW51c0EgPSBgY2F0IH4vc3JjL2ljdS9zb3VyY2UvZXh0cmEvY29scHJvYmUvbG9jYWxlLnR4dGA7CitteSBAbG9jYWxlcyA9IHNwbGl0KC9cbi8sICRsb2NhbGVNaW51c0EpOworbXkgJGxvY2FsZTsKK215ICRjb21tYW5kOworCitteSAkcGxhdGZvcm0gPSAkQVJHVlswXTsKKworbWtkaXIgJHBsYXRmb3JtLiJsb2dzMiI7Citta2RpciAkcGxhdGZvcm07CisKK2ZvcmVhY2ggJGxvY2FsZSAoQGxvY2FsZXMpIHsKKyAgJGNvbW1hbmQgPSAifi9zcmMvaWN1L3NvdXJjZS9leHRyYS9jb2xwcm9iZS9jb2xwcm9iZSAtLXBsYXRmb3JtICRwbGF0Zm9ybSAtLXJlZiAkcGxhdGZvcm0gLS1kaWZmICRsb2NhbGUgPiRwbGF0Zm9ybSIuImxvZ3MyLyRsb2NhbGUiLiJMb2cudHh0IDI+JjEiOworICAoJGxvY2FsZSwgJF8pID0gc3BsaXQoL1wuLywgJGxvY2FsZSk7CisgICRjb21tYW5kIC49ICI7IGNwIC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzLyRsb2NhbGUgJHBsYXRmb3JtLyI7CisgIHByaW50ICIkY29tbWFuZFxuIjsKKyAgYCRjb21tYW5kYDsKKyAgI2NoZGlyICIuLiI7CisKK30KZGlmZiAtLWdpdCBhL2NvbHByb2JlL2dlbkNvbGxEYXRhLnBsIGIvY29scHJvYmUvZ2VuQ29sbERhdGEucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmY0NjE4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2dlbkNvbGxEYXRhLnBsCkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCit1c2Ugc3RyaWN0OworCitteSAkbG9jYWxlTWludXNBID0gYGxvY2FsZSAtYWA7CitteSBAbG9jYWxlcyA9IHNwbGl0KC9cbi8sICRsb2NhbGVNaW51c0EpOworbXkgJGxvY2FsZTsKK215ICRjb21tYW5kOworCitteSAkcGxhdGZvcm0gPSAkQVJHVlswXTsKKworbWtkaXIgJHBsYXRmb3JtLiJsb2dzIjsKK21rZGlyICRwbGF0Zm9ybTsKKworZm9yZWFjaCAkbG9jYWxlIChAbG9jYWxlcykgeworICAkY29tbWFuZCA9ICJ+L3NyYy9pY3Uvc291cmNlL2V4dHJhL2NvbHByb2JlL2NvbHByb2JlIC0tb3V0cHV0IHJlc2IgLS1wbGF0Zm9ybSBsaW51eCAtLXJlZiBsaW51eCAkbG9jYWxlID4kcGxhdGZvcm0iLiJsb2dzLyRsb2NhbGUiLiJMb2cudHh0IDI+JjEiOworICAoJGxvY2FsZSwgJF8pID0gc3BsaXQoL1wuLywgJGxvY2FsZSk7CisgICRjb21tYW5kIC49ICI7IGNwIC91c3Ivc2hhcmUvaTE4bi9sb2NhbGVzLyRsb2NhbGUgJHBsYXRmb3JtLyI7CisgIHByaW50ICIkY29tbWFuZFxuIjsKKyAgYCRjb21tYW5kYDsKKyAgI2NoZGlyICIuLiI7CisKK30KZGlmZiAtLWdpdCBhL2NvbHByb2JlL2xpbmUuY3BwIGIvY29scHJvYmUvbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4MjlkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2xpbmUuY3BwCkBAIC0wLDAgKzEsNzAxIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBGaWxlIGxpbmUuY3BwCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDMvMTgvMjAwMyAgd2VpdiAgICAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSAibGluZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK1VuaWNvZGVTZXQgKiBMaW5lOjpuZWVkc1F1b3RpbmcgPSBOVUxMOworCit2b2lkCitMaW5lOjppbml0KCkKK3sKKyAgICAgICAgbGVuID0gMDsKKyAgICAgICAgZXhwTGVuID0gMDsKKyAgICAgICAgc3RyZW5ndGggPSBVQ09MX09GRjsKKyAgICAgICAgc3RyZW5ndGhGcm9tRW1wdHkgPSBVQ09MX09GRjsKKyAgICAgICAgY3VtdWxhdGl2ZVN0cmVuZ3RoID0gVUNPTF9PRkY7CisgICAgICAgIGV4cFN0cmVuZ3RoID0gVUNPTF9PRkY7CisgICAgICAgIHByZXZpb3VzID0gTlVMTDsKKyAgICAgICAgbmV4dCA9IE5VTEw7CisgICAgICAgIGxlZnQgPSBOVUxMOworICAgICAgICByaWdodCA9IE5VTEw7CisgICAgICAgIGlzQ29udHJhY3Rpb24gPSBGQUxTRTsKKyAgICAgICAgaXNFeHBhbnNpb24gPSBGQUxTRTsKKyAgICAgICAgaXNSZW1vdmVkID0gRkFMU0U7CisgICAgICAgIGlzUmVzZXQgPSBGQUxTRTsKKyAgICAgICAgZXhwSW5kZXggPSAwOworICAgICAgICBmaXJzdENDID0gMDsKKyAgICAgICAgbGFzdENDID0gMDsKKyAgICAgICAgc29ydEtleSA9IE5VTEw7Cit9CisKK0xpbmU6OkxpbmUoKQoreworICBpbml0KCk7CisgIG1lbXNldChuYW1lLCAwLCAyNSpzaXplb2YoVUNoYXIpKTsKKyAgbWVtc2V0KGV4cGFuc2lvblN0cmluZywgMCwgMjUqc2l6ZW9mKFVDaGFyKSk7Cit9CisKK0xpbmU6OkxpbmUoY29uc3QgVUNoYXIqIG5hbWUsIGludDMyX3QgbGVuKQoreworICBpbml0KCk7CisgIHRoaXMtPmxlbiA9IGxlbjsKKyAgdV9tZW1jcHkodGhpcy0+bmFtZSwgbmFtZSwgbGVuKTsKKyAgbWVtc2V0KGV4cGFuc2lvblN0cmluZywgMCwgMjUqc2l6ZW9mKFVDaGFyKSk7CisgIFVDaGFyMzIgYzsKKyAgVTE2X0dFVChuYW1lLCAwLCAwLCBsZW4sIGMpOworICBmaXJzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhjKTsKKyAgVTE2X0dFVChuYW1lLCAwLCBsZW4tMSwgbGVuLCBjKTsKKyAgbGFzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhjKTsKK30KKworTGluZTo6TGluZShjb25zdCBVQ2hhciBuYW1lKQoreworICAgIGluaXQoKTsKKyAgICBsZW4gPSAxOworICAgIHRoaXMtPm5hbWVbMF0gPSBuYW1lOworICAgIHRoaXMtPm5hbWVbMV0gPSAwOworICBtZW1zZXQoZXhwYW5zaW9uU3RyaW5nLCAwLCAyNSpzaXplb2YoVUNoYXIpKTsKKyAgZmlyc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MobmFtZSk7CisgIGxhc3RDQyA9IGZpcnN0Q0M7Cit9CisKK0xpbmU6OkxpbmUoY29uc3QgVW5pY29kZVN0cmluZyAmc3RyaW5nKQoreworICBpbml0KCk7CisgIHNldFRvKHN0cmluZyk7Cit9CisKK0xpbmU6OkxpbmUoY29uc3QgY2hhciAqYnVmZiwgaW50MzJfdCBidWZmTGVuLCBVRXJyb3JDb2RlICZzdGF0dXMpIDoKK3ByZXZpb3VzKE5VTEwpLAorbmV4dChOVUxMKSwKK2xlZnQoTlVMTCksCityaWdodChOVUxMKQoreworICBpbml0RnJvbVN0cmluZyhidWZmLCBidWZmTGVuLCBzdGF0dXMpOworfQorCitMaW5lOjpMaW5lKGNvbnN0IExpbmUgJm90aGVyKSA6CisgIHByZXZpb3VzKE5VTEwpLAorICBuZXh0KE5VTEwpLAorbGVmdChOVUxMKSwKK3JpZ2h0KE5VTEwpCit7CisgICp0aGlzID0gb3RoZXI7Cit9CisgICAgICAgICAKK0xpbmUgJgorTGluZTo6b3BlcmF0b3I9KGNvbnN0IExpbmUgJm90aGVyKSB7CisgIGxlbiA9IG90aGVyLmxlbjsKKyAgZXhwTGVuID0gb3RoZXIuZXhwTGVuOworICBzdHJlbmd0aCA9IG90aGVyLnN0cmVuZ3RoOworICBzdHJlbmd0aEZyb21FbXB0eSA9IG90aGVyLnN0cmVuZ3RoRnJvbUVtcHR5OworICBjdW11bGF0aXZlU3RyZW5ndGggPSBvdGhlci5jdW11bGF0aXZlU3RyZW5ndGg7CisgIGV4cFN0cmVuZ3RoID0gb3RoZXIuZXhwU3RyZW5ndGg7CisgIGlzQ29udHJhY3Rpb24gPSBvdGhlci5pc0NvbnRyYWN0aW9uOworICBpc0V4cGFuc2lvbiA9IG90aGVyLmlzRXhwYW5zaW9uOworICBpc1JlbW92ZWQgPSBvdGhlci5pc1JlbW92ZWQ7CisgIGlzUmVzZXQgPSBvdGhlci5pc1Jlc2V0OworICBleHBJbmRleCA9IG90aGVyLmV4cEluZGV4OworICBmaXJzdENDID0gb3RoZXIuZmlyc3RDQzsKKyAgbGFzdENDID0gb3RoZXIubGFzdENDOworICB1X3N0cmNweShuYW1lLCBvdGhlci5uYW1lKTsKKyAgdV9zdHJjcHkoZXhwYW5zaW9uU3RyaW5nLCBvdGhlci5leHBhbnNpb25TdHJpbmcpOworICBzb3J0S2V5ID0gb3RoZXIuc29ydEtleTsKKyAgbGVmdCA9IG90aGVyLmxlZnQ7CisgIHJpZ2h0ID0gb3RoZXIucmlnaHQ7CisgIHJldHVybiAqdGhpczsKK30KKworVUJvb2wgCitMaW5lOjpvcGVyYXRvcj09KGNvbnN0IExpbmUgJm90aGVyKSBjb25zdCB7CisgIGlmKHRoaXMgPT0gJm90aGVyKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgaWYobGVuICE9IG90aGVyLmxlbikgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZih1X3N0cmNtcChuYW1lLCBvdGhlci5uYW1lKSAhPSAwKSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIHJldHVybiBUUlVFOworfQorCitVQm9vbCAKK0xpbmU6OmVxdWFscyhjb25zdCBMaW5lICZvdGhlcikgY29uc3QgeworICBpZih0aGlzID09ICZvdGhlcikgeworICAgIHJldHVybiBUUlVFOworICB9CisgIGlmKGxlbiAhPSBvdGhlci5sZW4pIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYodV9zdHJjbXAobmFtZSwgb3RoZXIubmFtZSkgIT0gMCkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZihzdHJlbmd0aCAhPSBvdGhlci5zdHJlbmd0aCkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZihleHBMZW4gIT0gb3RoZXIuZXhwTGVuKSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGlmKHVfc3RyY21wKGV4cGFuc2lvblN0cmluZywgb3RoZXIuZXhwYW5zaW9uU3RyaW5nKSkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworVUJvb2wKK0xpbmU6Om9wZXJhdG9yIT0oY29uc3QgTGluZSAmb3RoZXIpIGNvbnN0IHsKKyAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCisKK0xpbmU6On5MaW5lKCkgeworfQorCit2b2lkCitMaW5lOjpjb3B5QXJyYXkoTGluZSAqZGVzdCwgY29uc3QgTGluZSAqc3JjLCBpbnQzMl90IHNpemUpIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgZGVzdFtpXSA9IHNyY1tpXTsKKyAgfQorfQorCit2b2lkCitMaW5lOjpzZXROYW1lKGNvbnN0IFVDaGFyKiBuYW1lLCBpbnQzMl90IGxlbikgeworICB0aGlzLT5sZW4gPSBsZW47CisgIHVfbWVtY3B5KHRoaXMtPm5hbWUsIG5hbWUsIGxlbik7CisgIFVDaGFyMzIgYzsKKyAgVTE2X0dFVChuYW1lLCAwLCAwLCBsZW4sIGMpOworICBmaXJzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhjKTsKKyAgVTE2X0dFVChuYW1lLCAwLCBsZW4tMSwgbGVuLCBjKTsKKyAgbGFzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhjKTsKK30KKwordm9pZCAKK0xpbmU6OnNldFRvQ29uY2F0KGNvbnN0IExpbmUgKmZpcnN0LCBjb25zdCBMaW5lICpzZWNvbmQpIHsKKyAgdV9zdHJjcHkobmFtZSwgZmlyc3QtPm5hbWUpOworICB1X3N0cmNhdChuYW1lLCBzZWNvbmQtPm5hbWUpOworICBsZW4gPSBmaXJzdC0+bGVuICsgc2Vjb25kLT5sZW47CisgIGZpcnN0Q0MgPSBmaXJzdC0+Zmlyc3RDQzsKKyAgbGFzdENDID0gc2Vjb25kLT5sYXN0Q0M7Cit9CisKK1VuaWNvZGVTdHJpbmcKK0xpbmU6OnN0cmluZ1RvTmFtZShVQ2hhciAqc3RyaW5nLCBpbnQzMl90IGxlbikgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgVW5pY29kZVN0cmluZyByZXN1bHQ7CisgIGNoYXIgYnVmZmVyWzI1Nl07CisgIGludDMyX3QgaSA9IDA7CisgIFVDaGFyMzIgYzsgCisgIHdoaWxlKGkgPCBsZW4pIHsKKyAgICBVMTZfTkVYVChzdHJpbmcsIGksIGxlbiwgYyk7CisgICAgaWYoYyA8IDB4MTAwMDApIHsKKyAgICAgIHNwcmludGYoYnVmZmVyLCAiJTA0WCAiLCBjKTsKKyAgICB9IGVsc2UgeworICAgICAgc3ByaW50ZihidWZmZXIsICIlMDZYICIsIGMpOworICAgIH0KKyAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgIH0KKyAgaSA9IDA7CisgIHdoaWxlKGkgPCBsZW4pIHsKKyAgICBVMTZfTkVYVChzdHJpbmcsIGksIGxlbiwgYyk7CisgICAgdV9jaGFyTmFtZShjLCBVX0VYVEVOREVEX0NIQVJfTkFNRSwgYnVmZmVyLCAyNTYsICZzdGF0dXMpOworICAgIHJlc3VsdC5hcHBlbmQoInsiKTsKKyAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgICAgcmVzdWx0LmFwcGVuZCgifSAiKTsKKyAgfQorLyoKKyAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiUwNFggIiwgc3RyaW5nW2ldKTsKKyAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlcik7CisgIH0KKyAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICB1X2NoYXJOYW1lKHN0cmluZ1tpXSwgVV9FWFRFTkRFRF9DSEFSX05BTUUsIGJ1ZmZlciwgMjU2LCAmc3RhdHVzKTsKKyAgICByZXN1bHQuYXBwZW5kKCJ7Iik7CisgICAgcmVzdWx0LmFwcGVuZChidWZmZXIpOworICAgIHJlc3VsdC5hcHBlbmQoIn0gIik7CisgIH0KKyovICAKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworVW5pY29kZVN0cmluZworTGluZTo6dG9CdW5kbGVTdHJpbmcoKSAKK3sKKworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIGlmKCFuZWVkc1F1b3RpbmcpIHsKKyAgICBuZWVkc1F1b3RpbmcgPSBuZXcgVW5pY29kZVNldCgiW1s6d2hpdGVzcGFjZTpdWzpjOl1bOno6XVtbOmFzY2lpOl0tW2EtekEtWjAtOV1dXSIsIHN0YXR1cyk7CisgIH0KKyAgVUNoYXIgTkZDWzUwXTsKKyAgaW50MzJfdCBORkNMZW4gPSB1bm9ybV9ub3JtYWxpemUobmFtZSwgbGVuLCBVTk9STV9ORkMsIDAsIE5GQywgNTAsICZzdGF0dXMpOworICByZXN1bHQuYXBwZW5kKCJcIiIpOworICBpZihpc1Jlc2V0KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiJiIpOworICB9IGVsc2UgeworICAgIHJlc3VsdC5hcHBlbmQoc3RyZW5ndGhUb1N0cmluZyhzdHJlbmd0aCwgRkFMU0UsIEZBTFNFKSk7CisgIH0KKyAgVUJvb2wgcXVvdGUgPSBuZWVkc1F1b3RpbmctPmNvbnRhaW5zU29tZShuYW1lKSB8fCBuZWVkc1F1b3RpbmctPmNvbnRhaW5zU29tZShORkMpOworICBpZihxdW90ZSkgeworICAgIHJlc3VsdC5hcHBlbmQoIiciKTsKKyAgfQorICBpZihORkNbMF0gPT0gMHgyMikgeworICAgIHJlc3VsdC5hcHBlbmQoIlxcdTAwMjIiKTsKKyAgfSBlbHNlIHsKKyAgICByZXN1bHQuYXBwZW5kKE5GQywgTkZDTGVuKTsKKyAgfQorICBpZihxdW90ZSAmJiBORkNbMF0gIT0gMHgwMDI3KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiJyIpOworICB9CisgIGlmKGV4cExlbiAmJiAhaXNSZXNldCkgeworICAgIHF1b3RlID0gbmVlZHNRdW90aW5nLT5jb250YWluc1NvbWUoZXhwYW5zaW9uU3RyaW5nKTsKKyAgICByZXN1bHQuYXBwZW5kKCIgLyAiKTsKKyAgICBpZihxdW90ZSkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiJyIpOworICAgIH0KKyAgICByZXN1bHQuYXBwZW5kKGV4cGFuc2lvblN0cmluZyk7CisgICAgaWYocXVvdGUpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiciKTsKKyAgICB9CisgIH0KKyAgcmVzdWx0LmFwcGVuZCgiXCIgLy8iKTsKKworICByZXN1bHQuYXBwZW5kKHN0cmluZ1RvTmFtZShORkMsIE5GQ0xlbikpOworICBpZihleHBMZW4gJiYgIWlzUmVzZXQpIHsKKyAgICByZXN1bHQuYXBwZW5kKCIgLyAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHN0cmluZ1RvTmFtZShleHBhbnNpb25TdHJpbmcsIGV4cExlbikpOworICB9CisgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1VuaWNvZGVTdHJpbmcKK0xpbmU6OnRvSFRNTFN0cmluZygpIAoreworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIFVDaGFyIE5GQ1s1MF07CisgIGludDMyX3QgTkZDTGVuID0gdW5vcm1fbm9ybWFsaXplKG5hbWUsIGxlbiwgVU5PUk1fTkZDLCAwLCBORkMsIDUwLCAmc3RhdHVzKTsKKyAgcmVzdWx0LmFwcGVuZCgiPHNwYW4gdGl0bGU9XCIiKTsKKyAgcmVzdWx0LmFwcGVuZChzdHJpbmdUb05hbWUoTkZDLCBORkNMZW4pKTsKKyAgaWYoZXhwTGVuICYmICFpc1Jlc2V0KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiIC8gIik7CisgICAgcmVzdWx0LmFwcGVuZChzdHJpbmdUb05hbWUoZXhwYW5zaW9uU3RyaW5nLCBleHBMZW4pKTsKKyAgfQorICByZXN1bHQuYXBwZW5kKCJcIj4iKTsKKyAgaWYoaXNSZXNldCkgeworICAgIHJlc3VsdC5hcHBlbmQoIiZhbXA7Iik7CisgIH0gZWxzZSB7CisgICAgcmVzdWx0LmFwcGVuZChzdHJlbmd0aFRvU3RyaW5nKHN0cmVuZ3RoLCBGQUxTRSwgVFJVRSkpOworICB9CisgIHJlc3VsdC5hcHBlbmQoTkZDLCBORkNMZW4pOworICBpZihleHBMZW4gJiYgIWlzUmVzZXQpIHsKKyAgICByZXN1bHQuYXBwZW5kKCImbmJzcDsvJm5ic3A7Iik7CisgICAgcmVzdWx0LmFwcGVuZChleHBhbnNpb25TdHJpbmcpOworICB9CisgIHJlc3VsdC5hcHBlbmQoIjwvc3Bhbj48YnI+XG4iKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworVW5pY29kZVN0cmluZworTGluZTo6dG9TdHJpbmcoVUJvb2wgcHJldHR5KSB7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICBpZighcHJldHR5KSB7CisgICAgcmVzdWx0LnNldFRvKG5hbWUpOworICAgIGlmKGV4cExlbikgeworICAgICAgcmVzdWx0LmFwcGVuZCgiLyIpOworICAgICAgcmVzdWx0LmFwcGVuZChleHBhbnNpb25TdHJpbmcpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQ2hhciBORkNbNTBdOworICAgIGludDMyX3QgTkZDTGVuID0gdW5vcm1fbm9ybWFsaXplKG5hbWUsIGxlbiwgVU5PUk1fTkZDLCAwLCBORkMsIDUwLCAmc3RhdHVzKTsKKyAgICByZXN1bHQuc2V0VG8oTkZDLCBORkNMZW4pOworICAgIGlmKGV4cExlbikgeworICAgICAgcmVzdWx0LmFwcGVuZCgiLyIpOworICAgICAgcmVzdWx0LmFwcGVuZChleHBhbnNpb25TdHJpbmcpOworICAgIH0KKyAgICAvKgorICAgIGlmKE5GQ0xlbiAhPSBsZW4gfHwgdV9zdHJuY21wKG5hbWUsIE5GQywgbGVuKSAhPSAwKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCIoTkZDOiAiKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQoTkZDLCBORkNMZW4pOworICAgICAgcmVzdWx0LmFwcGVuZChzdHJpbmdUb05hbWUoTkZDLCBORkNMZW4pKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIikiKTsKKyAgICB9CisgICAgKi8KKyAgICByZXN1bHQuYXBwZW5kKCIgICAgIyAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHN0cmluZ1RvTmFtZShORkMsIE5GQ0xlbikpOworICAgIGlmKGV4cExlbikgeworICAgICAgcmVzdWx0LmFwcGVuZCgiLyAiKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQoc3RyaW5nVG9OYW1lKGV4cGFuc2lvblN0cmluZywgZXhwTGVuKSk7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZAorTGluZTo6c2V0VG8oY29uc3QgVW5pY29kZVN0cmluZyAmc3RyaW5nKSB7CisgIGludDMyX3QgbGVuID0gc3RyaW5nLmxlbmd0aCgpOworICB1X3N0cm5jcHkobmFtZSwgc3RyaW5nLmdldEJ1ZmZlcigpLCBsZW4pOworICBuYW1lW2xlbl0gPSAwOworICB0aGlzLT5sZW4gPSBsZW47CisgIFVDaGFyMzIgYzsKKyAgVTE2X0dFVChuYW1lLCAwLCAwLCBsZW4sIGMpOworICBmaXJzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhjKTsKKyAgVTE2X0dFVChuYW1lLCAwLCBsZW4tMSwgbGVuLCBjKTsKKyAgbGFzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhjKTsKK30KKwordm9pZCAKK0xpbmU6OnNldFRvKGNvbnN0IFVDaGFyMzIgbikgeworICBVQm9vbCBpc0Vycm9yID0gRkFMU0U7CisgIGxlbiA9IDA7IC8vIHdlIGFyZSBzZXR0aW5nIHRoZSBsaW5lIHRvIGNoYXIsIG5vdCBhcHBlbmRpbmcKKyAgVTE2X0FQUEVORChuYW1lLCBsZW4sIDI1LCBuLCBpc0Vycm9yKTsKKyAgbmFtZVtsZW5dID0gMDsKKyAgZmlyc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3Mobik7CisgIGxhc3RDQyA9IGZpcnN0Q0M7Cit9CisKKworVW5pY29kZVN0cmluZworTGluZTo6c3RyZW5ndGhJbmRlbnQoVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoLCBpbnQgaW5kZW50U2l6ZSwgVW5pY29kZVN0cmluZyAmcmVzdWx0KSAKK3sKKyAgaW50IGk7CisgIGludCBudW1JbmRlbnRzID0gc3RyZW5ndGgrMTsKKyAgaWYoc3RyZW5ndGggPiBVQ09MX0lERU5USUNBTCkgeworICAgIHJldHVybiByZXN1bHQ7CisgIH0gZWxzZSBpZihzdHJlbmd0aCA9PSBVQ09MX0lERU5USUNBTCkgeworICAgIG51bUluZGVudHMgPSA1OworICB9CisgIGZvcihpID0gMDsgaSA8IG51bUluZGVudHMqaW5kZW50U2l6ZTsgaSsrKSB7CisgICAgcmVzdWx0LmFwcGVuZCgiICIpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1VuaWNvZGVTdHJpbmcgCitMaW5lOjpzdHJlbmd0aFRvU3RyaW5nKFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCwgVUJvb2wgcHJldHR5LCBVQm9vbCBodG1sKSB7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICBpZihodG1sKSB7CisgICAgc3dpdGNoKHN0cmVuZ3RoKSB7CisgICAgY2FzZSBVQ09MX0lERU5USUNBTDoKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOz0mbmJzcDsiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9RVUFURVJOQVJZOgorICAgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0OyZsdDsmbHQ7Jmx0OyZuYnNwOyIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVQ09MX1RFUlRJQVJZOgorICAgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0OyZsdDsmbHQ7Jm5ic3A7Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfU0VDT05EQVJZOgorICAgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0OyZsdDsmbmJzcDsiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9QUklNQVJZOgorICAgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7Jm5ic3A7Jmx0OyZuYnNwOyIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVQ09MX09GRjoKKyAgICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZndDs/Jm5ic3A7Iik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7PyEmbmJzcDsiKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzd2l0Y2goc3RyZW5ndGgpIHsKKyAgICBjYXNlIFVDT0xfSURFTlRJQ0FMOgorICAgICAgaWYocHJldHR5KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgICAgICAgIik7CisgICAgICB9CisgICAgICByZXN1bHQuYXBwZW5kKCIgPSAiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9RVUFURVJOQVJZOgorICAgICAgaWYocHJldHR5KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgICAgICAgIik7CisgICAgICB9CisgICAgICByZXN1bHQuYXBwZW5kKCIgPDw8PCAiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9URVJUSUFSWToKKyAgICAgIC8vdV9mcHJpbnRmKGZpbGUsICI8MyIpOworICAgICAgaWYocHJldHR5KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgICAgICIpOworICAgICAgfQorICAgICAgcmVzdWx0LmFwcGVuZCgiIDw8PCAiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9TRUNPTkRBUlk6CisgICAgICAvL3VfZnByaW50ZihmaWxlLCAiPDIiKTsKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgIik7CisgICAgICB9CisgICAgICByZXN1bHQuYXBwZW5kKCIgPDwgIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVDT0xfUFJJTUFSWToKKyAgICAgIC8vdV9mcHJpbnRmKGZpbGUsICI8MSIpOworICAgICAgaWYocHJldHR5KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgIik7CisgICAgICB9CisgICAgICByZXN1bHQuYXBwZW5kKCIgPCAiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVUNPTF9PRkY6CisgICAgICByZXN1bHQuYXBwZW5kKCIgPj8gIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmVzdWx0LmFwcGVuZCgiID8hICIpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK0xpbmUgKgorTGluZTo6bmV4dEludGVyZXN0aW5nKCkgeworICBMaW5lICpyZXN1bHQgPSB0aGlzLT5uZXh0OworICB3aGlsZShyZXN1bHQgJiYgcmVzdWx0LT5zdHJlbmd0aCAhPSBVQ09MX0lERU5USUNBTCkgeworICAgIHJlc3VsdCA9IHJlc3VsdC0+bmV4dDsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkCitMaW5lOjphcHBlbmQoY29uc3QgVUNoYXIqIG4sIGludDMyX3QgbGVuZ3RoKSAKK3sKKyAgdV9zdHJuY2F0KG5hbWUsIG4sIGxlbmd0aCk7CisgIG5hbWVbbGVuK2xlbmd0aF0gPSAwOworICBsZW4gKz0gbGVuZ3RoOworICBVQ2hhcjMyIGVuZDsKKyAgVTE2X0dFVChuLCAwLCBsZW5ndGgtMSwgbGVuZ3RoLCBlbmQpOworICBsYXN0Q0MgPSB1X2dldENvbWJpbmluZ0NsYXNzKGVuZCk7Cit9CisKK3ZvaWQKK0xpbmU6OmFwcGVuZChjb25zdCBVQ2hhciBuKSAKK3sKKyAgbmFtZVtsZW5dID0gbjsKKyAgbmFtZVtsZW4rMV0gPSAwOworICBsZW4rKzsKKyAgbGFzdENDID0gdV9nZXRDb21iaW5pbmdDbGFzcyhuKTsKK30KKwordm9pZAorTGluZTo6YXBwZW5kKGNvbnN0IExpbmUgJmwpCit7CisgIGFwcGVuZChsLm5hbWUsIGwubGVuKTsKKyAgbGFzdENDID0gbC5sYXN0Q0M7Cit9CisKK3ZvaWQKK0xpbmU6OmNsZWFyKCkKK3sKKyAgbmFtZVswXSA9IDA7CisgIGxlbiA9IDA7Cit9CisKK2ludDMyX3QKK0xpbmU6OndyaXRlKGNoYXIgKmJ1ZmYsIGludDMyX3QsIFVFcnJvckNvZGUgJikgCit7CisgIC8qCisgICAgVUNoYXIgICAgIG5hbWVbMjVdOworICAgIGludDMyX3QgICBsZW47CisgICAgVUNoYXIgICAgIGV4cGFuc2lvblN0cmluZ1syNV07CisgICAgaW50MzJfdCAgIGV4cExlbjsKKworICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aDsKKyAgICBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGhGcm9tRW1wdHk7CisgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIGN1bXVsYXRpdmVTdHJlbmd0aDsKKyAgICBVQ29sQXR0cmlidXRlVmFsdWUgZXhwU3RyZW5ndGg7CisKKyAgICBMaW5lICpwcmV2aW91czsKKyAgICBMaW5lICpuZXh0OworCisgICAgVUJvb2wgICBpc0NvbnRyYWN0aW9uOworICAgIFVCb29sICAgaXNFeHBhbnNpb247CisgICAgVUJvb2wgICBpc1JlbW92ZWQ7CisgICAgVUJvb2wgICBpc1Jlc2V0OworCisgICAgaW50MzJfdCBleHBJbmRleDsKKyAgICB1aW50OF90IGZpcnN0Q0M7CisgICAgdWludDhfdCBsYXN0Q0M7CisqLworICBpbnQzMl90IHJlc0xlbiA9IDA7CisgIGludDMyX3QgaSA9IDA7CisgIHNwcmludGYoYnVmZityZXNMZW4sICIlMDRYIiwgbmFtZVswXSk7CisgIHJlc0xlbiArPSA0OworICBmb3IoaSA9IDE7IGkgPCBsZW47IGkrKykgeworICAgIHNwcmludGYoYnVmZityZXNMZW4sICIgJTA0WCIsIG5hbWVbaV0pOworICAgIHJlc0xlbiArPSA1OworICB9CisgIHNwcmludGYoYnVmZityZXNMZW4sICIvIik7CisgIHJlc0xlbiArPSAxOworCisgIGkgPSAwOworICBpZihleHBMZW4pIHsKKyAgICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiJTA0WCIsIGV4cGFuc2lvblN0cmluZ1swXSk7CisgICAgcmVzTGVuICs9IDQ7CisgICAgZm9yKGkgPSAxOyBpIDwgZXhwTGVuOyBpKyspIHsKKyAgICAgIHNwcmludGYoYnVmZityZXNMZW4sICIgJTA0WCIsIGV4cGFuc2lvblN0cmluZ1tpXSk7CisgICAgICByZXNMZW4gKz0gNTsKKyAgICB9CisgIH0KKyAgc3ByaW50ZihidWZmK3Jlc0xlbiwgIjsgIik7CisgIHJlc0xlbiArPSAyOworCisgIHNwcmludGYoYnVmZityZXNMZW4sICIlMDJpICIsIHN0cmVuZ3RoKTsKKyAgcmVzTGVuICs9IDM7CisgIHNwcmludGYoYnVmZityZXNMZW4sICIlMDJpIiwgc3RyZW5ndGhGcm9tRW1wdHkpOworICByZXNMZW4gKz0gMjsKKyAgc3ByaW50ZihidWZmK3Jlc0xlbiwgIiUwMmkiLCBjdW11bGF0aXZlU3RyZW5ndGgpOworICByZXNMZW4gKz0gMjsKKyAgc3ByaW50ZihidWZmK3Jlc0xlbiwgIiUwMmkiLCBleHBTdHJlbmd0aCk7CisgIHJlc0xlbiArPSAyOworCisgIC8vIFZhcmlvdXMgZmxhZ3MuIFRoZSBvbmx5IGludGVyZXN0aW5nIG9uZXMgYXJlIGlzUmVzZXQgYW5kIGlzUmVtb3ZlZC4gV2Ugd2lsbCBub3Qgb3V0cHV0IHJlbW92ZWQgbGluZXMKKyAgLy9zcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiJTFpJTFpJTFpJTFpICIsIGlzQ29udHJhY3Rpb24sIGlzRXhwYW5zaW9uLCBpc1JlbW92ZWQsIGlzUmVzZXQpOworICAvL3Jlc0xlbiArPSA1OworICBzcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiJTFpJTFpICIsIGlzUmVtb3ZlZCwgaXNSZXNldCk7CisgIHJlc0xlbiArPSAzOworCisgIC8vIGZpcnN0IGFuZCBsYXN0IENDCisgIC8vIGNhbiBiZSBjYWxjdWxhdGVkIG9uIHJlYWRpbmcKKyAgLy9zcHJpbnRmKGJ1ZmYrcmVzTGVuLCAiJTAzaSAlMDNpICIsIGZpcnN0Q0MsIGxhc3RDQyk7CisgIC8vcmVzTGVuICs9IDg7CisKKyAgc3ByaW50ZihidWZmK3Jlc0xlbiwgIiUwOFgiLCBleHBJbmRleCk7CisgIHJlc0xlbiArPSA4OworCisgIGJ1ZmZbcmVzTGVuXSA9IDA7CisKKyAgcmV0dXJuIHJlc0xlbjsKK30KKwordm9pZAorTGluZTo6aW5pdEZyb21TdHJpbmcoY29uc3QgY2hhciAqYnVmZiwgaW50MzJfdCwgVUVycm9yQ29kZSAmKQoreworICBpbnQzMl90IGJ1ZkluZGV4ID0gMDsKKyAgaW50MzJfdCBpID0gMDsKKworICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiUwNFgiLCAmbmFtZVtpXSk7CisgIGkrKzsKKyAgYnVmSW5kZXggKz0gNDsKKyAgd2hpbGUoYnVmZltidWZJbmRleF0gIT0gJy8nKSB7CisgICAgc3NjYW5mKGJ1ZmYrYnVmSW5kZXgsICIgJTA0WCIsICZuYW1lW2ldKTsKKyAgICBpKys7CisgICAgYnVmSW5kZXggKz0gNTsKKyAgfQorICBsZW4gPSBpOworICBuYW1lW2xlbl0gPSAwOworICBidWZJbmRleCsrOworCisgIGlmKGkgPiAxKSB7CisgICAgaXNDb250cmFjdGlvbiA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgaXNDb250cmFjdGlvbiA9IEZBTFNFOworICB9CisKKyAgaWYoYnVmZltidWZJbmRleF0gPT0gJzsnKSB7CisgICAgaXNFeHBhbnNpb24gPSBGQUxTRTsKKyAgICBidWZJbmRleCArPSAyOworICAgIGV4cGFuc2lvblN0cmluZ1swXSA9IDA7CisgICAgZXhwTGVuID0gMDsKKyAgfSBlbHNlIHsKKyAgICBpID0gMDsKKyAgICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiUwNFgiLCAmZXhwYW5zaW9uU3RyaW5nW2ldKTsKKyAgICBpKys7CisgICAgYnVmSW5kZXggKz0gNDsKKyAgICB3aGlsZShidWZmW2J1ZkluZGV4XSAhPSAnOycpIHsKKyAgICAgIHNzY2FuZihidWZmK2J1ZkluZGV4LCAiICUwNFgiLCAmZXhwYW5zaW9uU3RyaW5nW2ldKTsKKyAgICAgIGkrKzsKKyAgICAgIGJ1ZkluZGV4ICs9IDU7CisgICAgfQorICAgIGV4cExlbiA9IGk7CisgICAgZXhwYW5zaW9uU3RyaW5nW2V4cExlbl0gPSAwOworICAgIGJ1ZkluZGV4ICs9IDI7CisgIH0KKyAgc3NjYW5mKGJ1ZmYrYnVmSW5kZXgsICIlMDJpICIsICZzdHJlbmd0aCk7CisgIGJ1ZkluZGV4ICs9IDM7CisgIHNzY2FuZihidWZmK2J1ZkluZGV4LCAiJTAyaSIsICZzdHJlbmd0aEZyb21FbXB0eSk7CisgIGJ1ZkluZGV4ICs9IDI7CisgIHNzY2FuZihidWZmK2J1ZkluZGV4LCAiJTAyaSIsICZjdW11bGF0aXZlU3RyZW5ndGgpOworICBidWZJbmRleCArPSAyOworICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiUwMmkiLCAmZXhwU3RyZW5ndGgpOworICBidWZJbmRleCArPSAyOworCisgIHNzY2FuZihidWZmK2J1ZkluZGV4LCAiJTFpJTFpICIsICZpc1JlbW92ZWQsICZpc1Jlc2V0KTsKKyAgYnVmSW5kZXggKz0gMzsKKworICBzc2NhbmYoYnVmZitidWZJbmRleCwgIiUwOFgiLCAmZXhwSW5kZXgpOworICBidWZJbmRleCArPSA4OworCisgIC8vIGNhbGN1bGF0ZSBmaXJzdCBhbmQgbGFzdCBDQworICBVQ2hhcjMyIGM7CisgIFUxNl9HRVQobmFtZSwgMCwgMCwgbGVuLCBjKTsKKyAgZmlyc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7CisgIFUxNl9HRVQobmFtZSwgMCwgbGVuLTEsIGxlbiwgYyk7CisgIGxhc3RDQyA9IHVfZ2V0Q29tYmluaW5nQ2xhc3MoYyk7Cit9CisKK3ZvaWQKK0xpbmU6OnN3YXBDYXNlKFVDaGFyICpzdHJpbmcsIGludDMyX3QgJnNMZW4pCit7CisgIFVDaGFyMzIgYyA9IDA7CisgIGludDMyX3QgaSA9IDAsIGogPSAwOworICBVQ2hhciBidWZmWzI1Nl07CisgIFVCb29sIGlzRXJyb3IgPSBGQUxTRTsKKyAgd2hpbGUoaSA8IHNMZW4pIHsKKyAgICBVMTZfTkVYVChzdHJpbmcsIGksIHNMZW4sIGMpOworICAgIGlmKHVfaXNVVXBwZXJjYXNlKGMpKSB7CisgICAgICBjID0gdV90b2xvd2VyKGMpOworICAgIH0gZWxzZSBpZih1X2lzVUxvd2VyY2FzZShjKSkgeworICAgICAgYyA9IHVfdG91cHBlcihjKTsKKyAgICB9CisgICAgVTE2X0FQUEVORChidWZmLCBqLCAyNTYsIGMsIGlzRXJyb3IpOworICB9CisgIGJ1ZmZbal0gPSAwOworICB1X3N0cmNweShzdHJpbmcsIGJ1ZmYpOworICBzTGVuID0gajsKK30KKworCit2b2lkCitMaW5lOjpzd2FwQ2FzZSgpCit7CisgIHN3YXBDYXNlKG5hbWUsIGxlbik7CisgIHN3YXBDYXNlKGV4cGFuc2lvblN0cmluZywgZXhwTGVuKTsKK30KKworVW5pY29kZVN0cmluZworTGluZTo6ZHVtcFNvcnRrZXkoKSAKK3sKKworICBjaGFyIGJ1ZmZlclsyNTZdOworICBjaGFyICpidWZmID0gYnVmZmVyOworICAqYnVmZiA9IDA7CisgIHVpbnQ4X3QgKmtleSA9IHNvcnRLZXk7CisgIGlmKHNvcnRLZXkpIHsKKyAgICB3aGlsZSgqa2V5KSB7CisgICAgICBzcHJpbnRmKGJ1ZmYsICIlMDJYICIsICprZXkpOworICAgICAga2V5Kys7CisgICAgICBidWZmICs9IDM7CisgICAgICBpZihidWZmIC0gYnVmZmVyID4gMjUyKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gVW5pY29kZVN0cmluZyhidWZmZXIpOworfQorCmRpZmYgLS1naXQgYS9jb2xwcm9iZS9saW5lLmggYi9jb2xwcm9iZS9saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZTIwNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2xpbmUuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSBsaW5lLmgKKyoKKyogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMy8xOC8yMDAzICB3ZWl2ICAgICAgICBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKy8vCisvLyAgIGNsYXNzIExpbmUKKy8vCisvLyAgICAgIEVhY2ggbGluZSBmcm9tIHRoZSBzb3VyY2UgZmlsZSAoY29udGFpbmluZyBhIG5hbWUsIHByZXN1bWFibHkpIGdldHMKKy8vICAgICAgb25lIG9mIHRoZXNlIHN0cnVjdHMuCisvLworCisjaWZuZGVmIENPTFBST0JFX0xJTkVfSAorI2RlZmluZSBDT0xQUk9CRV9MSU5FX0gKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNvbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc3RyLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2hhci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAiY29scHJvYmUuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgY29uc3QgaW50IE1BWF9FWFBBTlNJT05fUFJFRklYRVMgPSAxMDsKKworY2xhc3MgIExpbmUgeworcHVibGljOgorICBzdGF0aWMgdm9pZCBjb3B5QXJyYXkoTGluZSAqZGVzdCwgY29uc3QgTGluZSAqc3JjLCBpbnQzMl90IHNpemUpOworICBMaW5lKCk7CisgIExpbmUoY29uc3QgTGluZSAmb3RoZXIpOworICBMaW5lKGNvbnN0IFVDaGFyKiBuYW1lLCBpbnQzMl90IGxlbik7CisgIExpbmUoY29uc3QgVW5pY29kZVN0cmluZyAmc3RyaW5nKTsKKyAgTGluZShjb25zdCBVQ2hhciBuYW1lKTsKKyAgTGluZShjb25zdCBjaGFyICpidWZmLCBpbnQzMl90IGJ1ZmZMZW4sIFVFcnJvckNvZGUgJnN0YXR1cyk7CisgIH5MaW5lKCk7CisgIExpbmUgJiBvcGVyYXRvcj0oY29uc3QgTGluZSAmb3RoZXIpOworICBVQm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmUgJm90aGVyKSBjb25zdDsKKyAgVUJvb2wgb3BlcmF0b3IhPShjb25zdCBMaW5lICZvdGhlcikgY29uc3Q7CisgIHZvaWQgc2V0VG9Db25jYXQoY29uc3QgTGluZSAqZmlyc3QsIGNvbnN0IExpbmUgKnNlY29uZCk7CisgIHZvaWQgc2V0TmFtZShjb25zdCBVQ2hhciogbmFtZSwgaW50MzJfdCBsZW4pOworICBVbmljb2RlU3RyaW5nIHRvU3RyaW5nKFVCb29sIHByZXR0eSA9IEZBTFNFKTsKKyAgVW5pY29kZVN0cmluZyB0b0J1bmRsZVN0cmluZygpOworICBVbmljb2RlU3RyaW5nIHRvSFRNTFN0cmluZygpOworICBpbnQzMl90IHdyaXRlKGNoYXIgKmJ1ZmYsIGludDMyX3QgYnVmZkxlbiwgVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgdm9pZCBpbml0RnJvbVN0cmluZyhjb25zdCBjaGFyICpidWZmLCBpbnQzMl90IGJ1ZmZMZW4sIFVFcnJvckNvZGUgJnN0YXR1cyk7CisgIAorCisgIFVuaWNvZGVTdHJpbmcgc3RyZW5ndGhJbmRlbnQoVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoLCBpbnQgaW5kZW50U2l6ZSwgVW5pY29kZVN0cmluZyAmcmVzdWx0KTsKKyAgVW5pY29kZVN0cmluZyBzdHJlbmd0aFRvU3RyaW5nKFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCwgVUJvb2wgcHJldHR5LCBVQm9vbCBodG1sID0gRkFMU0UpOworICBVbmljb2RlU3RyaW5nIHN0cmluZ1RvTmFtZShVQ2hhciAqc3RyaW5nLCBpbnQzMl90IGxlbik7CisgIHZvaWQgc2V0VG8oY29uc3QgVW5pY29kZVN0cmluZyAmc3RyaW5nKTsKKyAgdm9pZCBzZXRUbyhjb25zdCBVQ2hhcjMyIG4pOworICBVQm9vbCBlcXVhbHMoY29uc3QgTGluZSAmb3RoZXIpIGNvbnN0OworICBMaW5lICpuZXh0SW50ZXJlc3RpbmcoKTsKKyAgdm9pZCBhcHBlbmQoY29uc3QgVUNoYXIgbik7CisgIHZvaWQgYXBwZW5kKGNvbnN0IFVDaGFyKiBuLCBpbnQzMl90IGxlbmd0aCk7CisgIHZvaWQgYXBwZW5kKGNvbnN0IExpbmUgJmwpOworICB2b2lkIGNsZWFyKCk7CisgIHZvaWQgc3dhcENhc2UoKTsKKyAgdm9pZCBzd2FwQ2FzZShVQ2hhciAqc3RyaW5nLCBpbnQzMl90ICZzTGVuKTsKKyAgVW5pY29kZVN0cmluZyBkdW1wU29ydGtleSgpOworICB2b2lkIGluaXQoKTsKKworICAKK3B1YmxpYzoKKyAgICBVQ2hhciAgICAgbmFtZVsyNV07CisgICAgaW50MzJfdCAgIGxlbjsKKyAgICBVQ2hhciAgICAgZXhwYW5zaW9uU3RyaW5nWzI1XTsKKyAgICBpbnQzMl90ICAgZXhwTGVuOworCisgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoOworICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aEZyb21FbXB0eTsKKyAgICBVQ29sQXR0cmlidXRlVmFsdWUgY3VtdWxhdGl2ZVN0cmVuZ3RoOworICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBleHBTdHJlbmd0aDsKKworICAgIExpbmUgKnByZXZpb3VzOworICAgIExpbmUgKm5leHQ7CisKKyAgICAvLyBJbiBjYXNlIHRoaXMgZWxlbWVudCBpcyBhIGNvbnRyYWN0aW9uCisgICAgLy8gd2Uga2VlcCBhIHBvaW50ZXIgYXQgd2hpY2ggbGluZXMgd2VyZSBjb21wb25lbnRzCisgICAgTGluZSAqbGVmdDsKKyAgICBMaW5lICpyaWdodDsKKworICAgIFVCb29sICAgaXNDb250cmFjdGlvbjsKKyAgICBVQm9vbCAgIGlzRXhwYW5zaW9uOworICAgIFVCb29sICAgaXNSZW1vdmVkOworICAgIFVCb29sICAgaXNSZXNldDsKKworICAgIGludDMyX3QgZXhwSW5kZXg7CisgICAgdWludDhfdCBmaXJzdENDOworICAgIHVpbnQ4X3QgbGFzdENDOworCisgICAgdWludDhfdCAgICpzb3J0S2V5OworcHVibGljOgorICBzdGF0aWMgVW5pY29kZVNldCAqbmVlZHNRdW90aW5nOworfTsKKworCisjZW5kaWYgLy9DT0xQUk9CRV9MSU5FX0gKZGlmZiAtLWdpdCBhL2NvbHByb2JlL2xvY2FsZS50eHQgYi9jb2xwcm9iZS9sb2NhbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNGFiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9sb2NhbGUudHh0CkBAIC0wLDAgKzEsMjQxIEBACithZgorYWZfWkEKK2FtCithbV9FVAorYXIKK2FyX0FFCithcl9CSAorYXJfRFoKK2FyX0VHCithcl9JTgorYXJfSVEKK2FyX0pPCithcl9LVworYXJfTEIKK2FyX0xZCithcl9NQQorYXJfT00KK2FyX1FBCithcl9TQQorYXJfU0QKK2FyX1NZCithcl9UTgorYXJfWUUKK2JlCitiZV9CWQorYmcKK2JnX0JHCitibgorYm5fSU4KK2NhCitjYV9FUworI2NhX0VTX1BSRUVVUk8KK2NzCitjc19DWgorZGEKK2RhX0RLCitkZQorZGVfQVQKKyNkZV9BVF9QUkVFVVJPCitkZV9CRQorZGVfQ0gKK2RlX0RFCisjZGVfREVfUFJFRVVSTworZGVfTFUKKyNkZV9MVV9QUkVFVVJPCitkZV9fUEhPTkVCT09LCitlbAorZWxfR1IKKyNlbF9HUl9QUkVFVVJPCitlbgorZW5fQVUKK2VuX0JFCisjZW5fQkVfUFJFRVVSTworZW5fQlcKK2VuX0NBCitlbl9HQgorI2VuX0dCX0VVUk8KK2VuX0hLCitlbl9JRQorI2VuX0lFX1BSRUVVUk8KK2VuX0lOCitlbl9NVAorZW5fTloKK2VuX1BICitlbl9TRworZW5fVVMKK2VuX1VTX1BPU0lYCitlbl9WSQorZW5fWkEKK2VuX1pXCitlbworZXMKK2VzX0FSCitlc19CTworZXNfQ0wKK2VzX0NPCitlc19DUgorZXNfRE8KK2VzX0VDCitlc19FUworI2VzX0VTX1BSRUVVUk8KK2VzX0dUCitlc19ITgorZXNfTVgKK2VzX05JCitlc19QQQorZXNfUEUKK2VzX1BSCitlc19QWQorZXNfU1YKK2VzX1VTCitlc19VWQorZXNfVkUKK2VzX19UUkFESVRJT05BTAorZXQKK2V0X0VFCitldQorZXVfRVMKKyNldV9FU19QUkVFVVJPCitmYQorZmFfQUYKK2ZhX0lSCitmaQorZmlfRkkKKyNmaV9GSV9QUkVFVVJPCitmbworZm9fRk8KK2ZyCitmcl9CRQorI2ZyX0JFX1BSRUVVUk8KK2ZyX0NBCitmcl9DSAorZnJfRlIKKyNmcl9GUl9QUkVFVVJPCitmcl9MVQorI2ZyX0xVX1BSRUVVUk8KK2dhCitnYV9JRQorI2dhX0lFX1BSRUVVUk8KK2dsCitnbF9FUworI2dsX0VTX1BSRUVVUk8KK2d1CitndV9JTgorZ3YKK2d2X0dCCitoZQoraGVfSUwKK2hpCitoaV9JTgoraGlfX0RJUkVDVAoraHIKK2hyX0hSCitodQoraHVfSFUKK2h5CitoeV9BTQoraHlfQU1fUkVWSVNFRAoraWQKK2lkX0lECitpcworaXNfSVMKK2l0CitpdF9DSAoraXRfSVQKKyNpdF9JVF9QUkVFVVJPCitqYQoramFfSlAKKyNqYV9KUF9UUkFESVRJT05BTAora2tfS1oKK2tsCitrbF9HTAora24KK2tuX0lOCitrbwora29fS1IKK2tvawora29rX0lOCitrdwora3dfR0IKK2x0CitsdF9MVAorbHYKK2x2X0xWCittaworbWtfTUsKK21yCittcl9JTgorbXNfTVkKK210CittdF9NVAorbmIKK25iX05PCitubAorbmxfQkUKKyNubF9CRV9QUkVFVVJPCitubF9OTAorI25sX05MX1BSRUVVUk8KK25uCitubl9OTworb20KK29tX0VUCitvbV9LRQorcGwKK3BsX1BMCitwcworcHNfQUYKK3B0CitwdF9CUgorcHRfUFQKKyNwdF9QVF9QUkVFVVJPCitybworcm9fUk8KK3J1CitydV9SVQorcnVfVUEKK3NoCitzaF9ZVQorc2sKK3NrX1NLCitzbAorc2xfU0kKK3NvCitzb19ESgorc29fRVQKK3NvX0tFCitzb19TTworc3EKK3NxX0FMCitzcgorc3JfWVUKK3N2Citzdl9GSQorc3ZfU0UKK3N3Citzd19LRQorc3dfVFoKK3RhCit0YV9JTgordGUKK3RlX0lOCit0aAordGhfVEgKKyN0aF9USF9UUkFESVRJT05BTAordGkKK3RpX0VSCit0aV9FVAordHIKK3RyX1RSCit1awordWtfVUEKK3ZpCit2aV9WTgoremgKK3poX0NOCit6aF9ISworemhfTU8KK3poX1NHCit6aF9UVworemhfVFdfU1RST0tFCit6aF9fUElOWUlOCmRpZmYgLS1naXQgYS9jb2xwcm9iZS9sb25nbmFtZS5jcHAgYi9jb2xwcm9iZS9sb25nbmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiYTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL2xvbmduYW1lLmNwcApAQCAtMCwwICsxLDQ4IEBACisjaW5jbHVkZSAidW5pY29kZS91bmlzdHIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2lkLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y252LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsCisgICAgIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIGNvbnN0IGNoYXIgKmxvYyA9IGFyZ3ZbMV07CisgIGludDMyX3QgaGFzQ291bnRyeTsKKyAgVUNvbnZlcnRlciAqY29udiA9IHVjbnZfb3BlbigidXRmOCIsICZzdGF0dXMpOworCisgIAorICBVQ2hhciBVQnVmZmVyWzI1Nl07CisgIGludDMyX3QgdUJ1ZkxlbiA9IDA7CisgIGNoYXIgYnVmZmVyWzI1Nl07CisgIGludDMyX3QgYnVmTGVuID0gMDsKKworICB1QnVmTGVuID0gdWxvY19nZXREaXNwbGF5TGFuZ3VhZ2UobG9jLCAiZW4iLCBVQnVmZmVyLCAyNTYsICZzdGF0dXMpOworICBidWZMZW4gPSB1Y252X2Zyb21VQ2hhcnMoY29udiwgYnVmZmVyLCAyNTYsIFVCdWZmZXIsIHVCdWZMZW4sICZzdGF0dXMpOworICAvL3VfVUNoYXJzVG9DaGFycyhVQnVmZmVyLCAgYnVmZmVyLCB1QnVmTGVuKTsKKyAgYnVmZmVyW2J1Zkxlbl0gPSAwOworICBwcmludGYoIiVzIiwgYnVmZmVyKTsKKworICBpZihoYXNDb3VudHJ5ID0gdWxvY19nZXRDb3VudHJ5KGxvYywgYnVmZmVyLCAyNTYsICZzdGF0dXMpKSB7CisgICAgdUJ1ZkxlbiA9IHVsb2NfZ2V0RGlzcGxheUNvdW50cnkobG9jLCAiZW4iLCBVQnVmZmVyLCAyNTYsICZzdGF0dXMpOworICAgIGJ1ZkxlbiA9IHVjbnZfZnJvbVVDaGFycyhjb252LCBidWZmZXIsIDI1NiwgVUJ1ZmZlciwgdUJ1ZkxlbiwgJnN0YXR1cyk7CisgICAgLy91X1VDaGFyc1RvQ2hhcnMoVUJ1ZmZlciwgIGJ1ZmZlciwgdUJ1Zkxlbik7CisgICAgYnVmZmVyW2J1Zkxlbl0gPSAwOworICAgIHByaW50ZigiXyVzIiwgYnVmZmVyKTsKKyAgfQorCisgIGlmKHVsb2NfZ2V0VmFyaWFudChsb2MsIGJ1ZmZlciwgMjU2LCAmc3RhdHVzKSkgeworICAgIHVCdWZMZW4gPSB1bG9jX2dldERpc3BsYXlWYXJpYW50KGxvYywgImVuIiwgVUJ1ZmZlciwgMjU2LCAmc3RhdHVzKTsKKyAgICBidWZMZW4gPSB1Y252X2Zyb21VQ2hhcnMoY29udiwgYnVmZmVyLCAyNTYsIFVCdWZmZXIsIHVCdWZMZW4sICZzdGF0dXMpOworICAgIC8vdV9VQ2hhcnNUb0NoYXJzKFVCdWZmZXIsICBidWZmZXIsIHVCdWZMZW4pOworICAgIGJ1ZmZlcltidWZMZW5dID0gMDsKKyAgICBpZighaGFzQ291bnRyeSkgeworICAgICAgcHJpbnRmKCJfIik7CisgICAgfQorICAgIHByaW50ZigiXyVzIiwgYnVmZmVyKTsKKyAgfQorICBwcmludGYoIlxuIik7CisKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbHByb2JlL3JlYWRtZS50eHQgYi9jb2xwcm9iZS9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjkxNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS9yZWFkbWUudHh0CkBAIC0wLDAgKzEsNCBAQAorVGhlcmUgYXJlIHNldmVyYWwgdG9vbHMgaW4gdGhpcyBkaXJlY3RvcnkgdGhhdCBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gZ2VuZXJhdGUgY29sbGF0aW9uIGRhdGE6CitleHRyYWN0Q29sbGF0aW9uRGF0YS5wbCAtIHBlcmwgc2NyaXB0IHRoYXQgcmVhZHMgSUNVIHJlc291cmNlIGJ1bmRsZSBmaWxlcyBhbmQgb3V0cHV0cyBhIGxvY2FsZV9jb2xsYXRpb24uaHRtbCBmaWxlIGlmIGNvbGxhdGlvbiBlbGVtZW50cyBhcmUgcHJlc2VudCBpbiB0aGUgbG9jYWxlLiBBcmd1bWVudHMgYXJlIHRoZSBsaXN0IG9mIGxvY2FsZSBzb3VyY2UgZmlsZXMgKCoudHh0KSB0aGF0IG5lZWQgdG8gYmUgcHJvY2Vzc2VkLgorY3JlYXRlQ29tcGFyaXNvblRhYmxlcy5wbCAtIHRha2VzIGEgbG9jYWxlIG5hbWUuIExvb2tzIGluIGRpcmVjdG9yaWVzIHRoYXQgc2hvdWxkIGNvbnRhaW4gdGhlIGh0bWwgZGF0YSBwcm9kdWNlZCBieSBjb2xwcm9iZSBvciBleHRyYWN0Q29sbGF0aW9uRGF0YS4KK3RhYmxlU3RhcnRlci5wbCAtIGludm9rZXMgY3JlYXRlQ29tcGFyaXNvblRhYmxlcy5wbCB3aXRoIGEgbGlzdCBvZiBsb2NhbGVzLiAKZGlmZiAtLWdpdCBhL2NvbHByb2JlL3NvcnRlZGxpbmVzLmNwcCBiL2NvbHByb2JlL3NvcnRlZGxpbmVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGYzZGZlCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvc29ydGVkbGluZXMuY3BwCkBAIC0wLDAgKzEsMjA2NyBAQAorI2luY2x1ZGUgInNvcnRlZGxpbmVzLmgiCisKK3N0YXRpYyBpbnQgY29kZVBvaW50Q21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKKyAgcmV0dXJuIHVfc3RyY21wKCgqKExpbmUgKiopYSktPm5hbWUsICgqKExpbmUgKiopYiktPm5hbWUpOworfQorCitTb3J0ZWRMaW5lczo6U29ydGVkTGluZXMoY29uc3QgVW5pY29kZVNldCAmc2V0LCBjb25zdCBVbmljb2RlU2V0ICZleGNsdWRlQm91bmRzLCBjb25zdCBTdHJlbmd0aFByb2JlICZwcm9iZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgVVByaW50ZXIgKmxvZ2dlciwgVVByaW50ZXIgKmRlYnVnKSA6Cit0b1NvcnQoTlVMTCksCit0b1NvcnRDYXBhY2l0eSgwKSwKK2xpbmVzKE5VTEwpLAorc2l6ZSgwKSwKK2NhcGFjaXR5KDApLAorcmVwZXJ0b2lyZShzZXQpLAorZXhjbHVkZUJvdW5kcyhleGNsdWRlQm91bmRzKSwKK3Byb2JlKHByb2JlKSwKK2ZpcnN0KE5VTEwpLAorbGFzdChOVUxMKSwKK2xvZ2dlcihsb2dnZXIpLAorZGVidWcoZGVidWcpLAorY29udHJhY3Rpb25zVGFibGUoTlVMTCksCitkdXBsaWNhdG9ycyhOVUxMKSwKK21heEV4cGFuc2lvblByZWZpeFNpemUoMCksCit3b3JkU29ydChGQUxTRSksCitmcmVuY2hTZWNvbmRhcnkoRkFMU0UpLAordXBwZXJGaXJzdChGQUxTRSksCitzb3J0a2V5cyhOVUxMKSwKK3NvcnRrZXlPZmZzZXQoMCkKK3sKKyAgbWVtc2V0KFVCLCAwLCBzaXplb2YoVUIpKTsKKyAgaW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgVUNPTF9PRkY7IGkrKykgeworICAgIFVCW2ldID0gJmVtcHR5OworICB9CisgIGluaXQoKTsKK30KKworU29ydGVkTGluZXM6On5Tb3J0ZWRMaW5lcygpCit7CisgIGRlbGV0ZVtdIGxpbmVzOworICBpZihzb3J0a2V5cykgeworICAgIGRlbGV0ZVtdIHNvcnRrZXlzOworICB9CisgIGlmKHRvU29ydCkgeworICAgIGRlbGV0ZVtdIHRvU29ydDsKKyAgfQorICBpZihjb250cmFjdGlvbnNUYWJsZSkgeworICAgIGRlbGV0ZSBjb250cmFjdGlvbnNUYWJsZTsKKyAgfQorICBpZihkdXBsaWNhdG9ycykgeworICAgIGRlbGV0ZSBkdXBsaWNhdG9yczsKKyAgfQorfQorCit2b2lkCitTb3J0ZWRMaW5lczo6Z2V0Qm91bmRzKFVFcnJvckNvZGUgJnN0YXR1cykgeworICAvLyBmaXJzdCBzb3J0IHRocm91Z2ggdGhlIHNldAorICBkZWJ1Zy0+bG9nKHRvU3RyaW5nKCksIFRSVUUpOworICBpbnQzMl90IGkgPSAwLCBqID0gMDsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoID0gVUNPTF9PRkY7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGlmKHRvU29ydFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPCBzdHJlbmd0aCkgeworICAgICAgaWYoaSAmJiBzdHJlbmd0aCA8IFVDT0xfT0ZGKSB7CisgICAgICAgIC8vdV9zdHJjcHkoVUJbc3RyZW5ndGhdLCB0b1NvcnRbaS0xXS0+bmFtZSk7CisgICAgICAgIGogPSAxOworICAgICAgICB3aGlsZShleGNsdWRlQm91bmRzLmNvbnRhaW5zKFVuaWNvZGVTdHJpbmcodG9Tb3J0W2ktal0tPm5hbWUsIHRvU29ydFtpLWpdLT5sZW4pKSkgeworICAgICAgICAgIGorKzsKKyAgICAgICAgfQorICAgICAgICBVQltzdHJlbmd0aF0gPSB0b1NvcnRbaS1qXTsKKyAgICAgIH0KKyAgICAgIHN0cmVuZ3RoID0gdG9Tb3J0W2ldLT5zdHJlbmd0aEZyb21FbXB0eTsKKyAgICAgIGlmKHN0cmVuZ3RoID09IFVDT0xfUFJJTUFSWSkgeworICAgICAgICBwcm9iZS5TRSA9IHRvU29ydFtpXS0+bmFtZVswXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgLy91X3N0cmNweShVQltzdHJlbmd0aF0sIHRvU29ydFtzaXplLTFdLT5uYW1lKTsKKyAgLy8gYSBkaWZmZXJlbnQgc29sdXRpb24gZm9yIGJvdW5kczogZ28gZnJvbSBlbmQgYW5kIHNlZSBpZiB0aGUgZ3V5cyBvbiB0aGUgdG9wCisgIC8vIGNhdXNlIGR1cGxpY2F0aW9uIGZvciB0aGluZ3MKKyAgVUNoYXIgZHVwY2hbXSA9IHsgMHgwMDIwLCAweDAwMzAsIDB4MDA0MiwgMHgwMDUxLCAweDAwNjIsIDB4MDA3MSwgMHgwMzkxLCAweDAzOTYsIDB4MDNiMSwgMHgwM2I2IH07CisgIGogPSAxOworICBMaW5lIGR1cDsKKyAgTGluZSBib3VuZDsKKyAgaW50MzJfdCBkdXBzID0gMDsKKyAgd2hpbGUoaiA8IHNpemUpIHsKKyAgICBkdXBzID0gMDsKKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YoZHVwY2gpL3NpemVvZihkdXBjaFswXSk7IGkrKykgeworICAgICAgZHVwLnNldFRvKGR1cGNoW2ldKTsKKyAgICAgIGR1cC5hcHBlbmQoZHVwY2hbaV0pOworICAgICAgYm91bmQuc2V0VG8oZHVwY2hbaV0pOworICAgICAgYm91bmQuYXBwZW5kKHRvU29ydFtzaXplLWpdLT5uYW1lLCB0b1NvcnRbc2l6ZS1qXS0+bGVuKTsKKyAgICAgIGlmKHByb2JlLmdldFN0cmVuZ3RoKGR1cCwgYm91bmQpID49IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAgIGR1cHMrKzsKKyAgICAgIH0KKyAgICB9CisgICAgaWYoZHVwcyA9PSAwKSB7CisgICAgICBicmVhazsKKyAgICB9IGVsc2UgeworICAgICAgaWYoIWR1cGxpY2F0b3JzKSB7CisgICAgICAgIGR1cGxpY2F0b3JzID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgfQorICAgICAgZHVwbGljYXRvcnMtPnB1dChVbmljb2RlU3RyaW5nKHRvU29ydFtzaXplLWpdLT5uYW1lLCB0b1NvcnRbc2l6ZS1qXS0+bGVuKSwgJnRvU29ydFtzaXplLWpdLCBzdGF0dXMpOworICAgICAgZGVidWctPmxvZyh0b1NvcnRbc2l6ZS1qXS0+dG9TdHJpbmcoKSk7CisgICAgICBkZWJ1Zy0+bG9nKCIgaXMgbm90IGdvb2QgZW5vdWdoIHRvIGJlIGFuIHVwcGVyIGJvdW5kXG4iKTsKKyAgICAgIGorKzsKKyAgICB9CisgIH0KKyAgaWYoaiA9PSBzaXplKSB7CisgICAgZGVidWctPmxvZygiT2khIEknbSBoYWxsdWNpbmF0aW5nLiBXaWxsIHVzZSB0aGUgZmlyc3QgdXBwZXIgYm91bmQiKTsKKyAgICBkZWxldGUgZHVwbGljYXRvcnM7CisgICAgZHVwbGljYXRvcnMgPSBOVUxMOworICAgIGogPSAxOworICB9CisvKgorICBqID0gMTsKKyAgd2hpbGUoZXhjbHVkZUJvdW5kcy5jb250YWlucyhVbmljb2RlU3RyaW5nKHRvU29ydFtzaXplLWpdLT5uYW1lLCB0b1NvcnRbc2l6ZS1qXS0+bGVuKSkpIHsKKyAgICBqKys7CisgIH0KKyovCisgIFVCW3N0cmVuZ3RoXSA9IHRvU29ydFtzaXplLWpdOworICBmb3IoaSA9IDA7IGkgPCBVQ09MX09GRjsgaSsrKSB7CisgICAgaWYoVUJbaV0pIHsKKyAgICAgIC8vZGVidWctPmxvZyhVQltpXSwgVFJVRSk7CisgICAgICBkZWJ1Zy0+bG9nKFVCW2ldLT50b1N0cmluZyhUUlVFKSwgVFJVRSk7CisgICAgfQorICB9Cit9CisKKy8vIGNsYXNzaWZpZXMgcmVwZXJ0b2lyZSBhY2NvcmRpbmcgdG8gdGhlIHN0cmVuZ3RoIG9mIHRoZWlyIGRpZmZlcmVuY2UKKy8vIGZyb20gdGhlIGVtcHR5IHN0cmluZwordm9pZAorU29ydGVkTGluZXM6OmNsYXNzaWZ5UmVwZXJ0b2lyZSgpIHsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cm9uZ2VzdFN0cmVuZ3RoRnJvbUVtcHR5ID0gVUNPTF9PRkY7CisgIGludDMyX3QgbGFzdENoYW5nZSA9IDA7CisgIGludDMyX3QgaSA9IDAsIGogPSAwOworICB3aGlsZShpIDwgc2l6ZSkgLy8gJiYgcHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoKnRvU29ydFtpXSkgPiBVQ09MX1BSSU1BUlkpIAorICB7CisgICAgdG9Tb3J0W2ldLT5zdHJlbmd0aEZyb21FbXB0eSA9IHByb2JlLmRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKCp0b1NvcnRbaV0pOworICAgIGlmKHRvU29ydFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPCBzdHJvbmdlc3RTdHJlbmd0aEZyb21FbXB0eSkgeworICAgICAgc3Ryb25nZXN0U3RyZW5ndGhGcm9tRW1wdHkgPSB0b1NvcnRbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5OworICAgICAgbGFzdENoYW5nZSA9IGk7CisgICAgfSBlbHNlIGlmICh0b1NvcnRbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5ID4gc3Ryb25nZXN0U3RyZW5ndGhGcm9tRW1wdHkpIHsgCisgICAgICAvLyB0aGVyZSBpcyBhIHByb2JsZW0gaW4gZGV0ZWN0aW9uLiBNb3N0IHByb2JhYmx5IGEgcXVhdGVybmFyeS4KKyAgICAgIC8vIHdoeSBkb24ndCB3ZSB0cnkgdG8gaW50ZXJwb2xhdGUKKyAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBuZXh0U3RyZW5ndGggPSBVQ09MX09GRjsKKyAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBwcmV2U3RyZW5ndGggPSBVQ09MX09GRjsKKyAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdCA9IFVDT0xfT0ZGOworCisgICAgICBsb2dnZXItPmxvZygiSW50ZXJwb2xhdGluZyB0byBnZXQgdGhlIGRpc3RhbmNlIGZyb20gZW1wdHkgZm9yIExpbmUgIik7CisgICAgICBsb2dnZXItPmxvZyh0b1NvcnRbaV0tPnRvU3RyaW5nKFRSVUUpLCBUUlVFKTsKKworICAgICAgaWYoaSkgeworICAgICAgICBzdCA9IHByb2JlLmdldFN0cmVuZ3RoKCp0b1NvcnRbaS0xXSwgKnRvU29ydFtpXSk7CisgICAgICAgIGlmKHN0ID09IFVDT0xfT0ZGKSB7CisgICAgICAgICAgbG9nZ2VyLT5sb2coIkNhbm5vdCBkZWR1Y2UgZGlzdGFuY2UgZnJvbSBlbXB0eSB1c2luZyBwcmV2aW91cyBlbGVtZW50LiBTb21ldGhpbmcgaXMgdmVyeSB3cm9uZyEgTGluZToiKTsKKyAgICAgICAgICBsb2dnZXItPmxvZyh0b1NvcnRbaV0tPnRvU3RyaW5nKFRSVUUpLCBUUlVFKTsKKyAgICAgICAgfSBlbHNlIGlmKHN0ID09IFVDT0xfSURFTlRJQ0FMIHx8IHN0ID49IHRvU29ydFtpLTFdLT5zdHJlbmd0aEZyb21FbXB0eSkgeworICAgICAgICAgIHByZXZTdHJlbmd0aCAgPSB0b1NvcnRbaS0xXS0+c3RyZW5ndGhGcm9tRW1wdHk7CisgICAgICAgIH0gZWxzZSBpZihzdCA8IHRvU29ydFtpLTFdLT5zdHJlbmd0aEZyb21FbXB0eSkgeyAKKyAgICAgICAgICBwcmV2U3RyZW5ndGggPSBzdDsKKyAgICAgICAgfQorICAgICAgICB0b1NvcnRbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5ID0gcHJldlN0cmVuZ3RoOworICAgICAgfQorICAgICAgaWYoaSA8IHNpemUtMikgeworICAgICAgICB0b1NvcnRbaSsxXS0+c3RyZW5ndGhGcm9tRW1wdHkgPSBwcm9iZS5kaXN0YW5jZUZyb21FbXB0eVN0cmluZygqdG9Tb3J0W2krMV0pOworICAgICAgICBzdCA9IHByb2JlLmdldFN0cmVuZ3RoKCp0b1NvcnRbaSsxXSwgKnRvU29ydFtpXSk7CisgICAgICAgIGlmKHN0ID09IFVDT0xfT0ZGKSB7CisgICAgICAgICAgbG9nZ2VyLT5sb2coIkNhbm5vdCBkZWR1Y2UgZGlzdGFuY2UgZnJvbSBlbXB0eSB1c2luZyBuZXh0IGVsZW1lbnQuIFNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nISBMaW5lOiIpOworICAgICAgICAgIGxvZ2dlci0+bG9nKHRvU29ydFtpXS0+dG9TdHJpbmcoVFJVRSksIFRSVUUpOworICAgICAgICB9IGVsc2UgaWYoc3QgPT0gVUNPTF9JREVOVElDQUwgfHwgc3QgPCB0b1NvcnRbaSsxXS0+c3RyZW5ndGhGcm9tRW1wdHkpIHsKKyAgICAgICAgICBuZXh0U3RyZW5ndGggPSB0b1NvcnRbaSsxXS0+c3RyZW5ndGhGcm9tRW1wdHk7CisgICAgICAgIH0gZWxzZSBpZihzdCA+PSB0b1NvcnRbaSsxXS0+c3RyZW5ndGhGcm9tRW1wdHkpIHsgCisgICAgICAgICAgbmV4dFN0cmVuZ3RoID0gc3Q7CisgICAgICAgIH0gICAgICAgIAorICAgICAgICBpZihpKSB7CisgICAgICAgICAgaWYocHJldlN0cmVuZ3RoICE9IG5leHRTdHJlbmd0aCkgeworICAgICAgICAgICAgbG9nZ2VyLT5sb2coIkluY29uc2lzdGVudCByZXN1bHRzIGZyb20gaW50ZXJwb2xhdGlvbiEgUmVzdWx0cyB3aWxsIG1vc3QgbGlrZWx5IGJlIHdyb25nXG4iKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdG9Tb3J0W2ldLT5zdHJlbmd0aEZyb21FbXB0eSA9IG5leHRTdHJlbmd0aDsKKyAgICAgIH0KKyAgICAgIC8qCisgICAgICBVQ29sQXR0cmlidXRlVmFsdWUgcHJvYmxlbVN0cmVuZ3RoID0gVUNPTF9QUklNQVJZOworICAgICAgZm9yKGogPSBsYXN0Q2hhbmdlOyBqIDwgaSA7IGorKykgeworICAgICAgICBpZih0b1NvcnRbal0tPnN0cmVuZ3RoID4gcHJvYmxlbVN0cmVuZ3RoKSB7CisgICAgICAgICAgcHJvYmxlbVN0cmVuZ3RoID0gdG9Tb3J0W2pdLT5zdHJlbmd0aDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZm9yKGogPSBsYXN0Q2hhbmdlOyBqIDwgaSA7IGorKykgeworICAgICAgICB0b1NvcnRbal0tPnN0cmVuZ3RoRnJvbUVtcHR5ID0gcHJvYmxlbVN0cmVuZ3RoOworICAgICAgfQorICAgICAgc3Ryb25nZXN0U3RyZW5ndGhGcm9tRW1wdHkgPSB0b1NvcnRbaV0tPnN0cmVuZ3RoRnJvbUVtcHR5OworICAgICAgbGFzdENoYW5nZSA9IGk7CisgICAgICBkZWJ1Zy0+bG9nKCJQcm9ibGVtIGRldGVjdGVkIGluIGRpc3RhbmNlcyBmcm9tIGVtcHR5LiBNb3N0IHByb2JhYmx5IHdvcmQgc29ydCBpcyBvblxuIik7CisgICAgICAqLworICAgICAgd29yZFNvcnQgPSBUUlVFOworICAgIH0KKyAgICBpKys7CisgIH0KKyAgZGVidWctPmxvZygiRGlzdGFuY2VzIGZyb20gZW1wdHkgc3RyaW5nXG4iKTsKKyAgZGVidWctPmxvZyh0b1N0cmluZ0Zyb21FbXB0eSgpLCBUUlVFKTsKK30KKwordm9pZAorU29ydGVkTGluZXM6OmFuYWx5c2UoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIGZyZW5jaFNlY29uZGFyeSA9IHByb2JlLmlzRnJlbmNoU2Vjb25kYXJ5KHN0YXR1cyk7CisgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgbG9nZ2VyLT5sb2coIlRlc3QgZm9yIEZyZW5jaCBzZWNvbmRhcnkgZmFpbGVkLiBCYWlsaW5nIG91dCFcbiIpOworICAgIHJldHVybjsKKyAgfQorICBsb2dnZXItPmxvZygiRnJlbmNoIHNlY29uZGFyeSB2YWx1ZSBpcyAlaVxuIiwgZnJlbmNoU2Vjb25kYXJ5LCBmcmVuY2hTZWNvbmRhcnkpOworICB1cHBlckZpcnN0ID0gcHJvYmUuaXNVcHBlckZpcnN0KHN0YXR1cyk7CisgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgbG9nZ2VyLT5sb2coIlRlc3QgZm9yIHVwcGVyIGZpcnN0IGZhaWxlZC4gQmFpbGluZyBvdXQhXG4iKTsKKyAgICByZXR1cm47CisgIH0KKyAgbG9nZ2VyLT5sb2coInVwcGVyIGZpcnN0IHZhbHVlIGlzICVpXG4iLCB1cHBlckZpcnN0LCB1cHBlckZpcnN0KTsKKyAgc29ydChUUlVFLCBUUlVFKTsKKyAgY2xhc3NpZnlSZXBlcnRvaXJlKCk7CisgIGdldEJvdW5kcyhzdGF0dXMpOworICAvL3NvcnQoVFJVRSwgVFJVRSk7CisgIGFkZENvbnRyYWN0aW9uc1RvUmVwZXJ0b2lyZShzdGF0dXMpOworICAvL3NvcnQoVFJVRSwgVFJVRSk7CisgIGRlYnVnLT5sb2coIlxuKioqIE9yZGVyIGFmdGVyIGRldGVjdGluZyBjb250cmFjdGlvbnNcblxuIik7CisgIGNhbGN1bGF0ZVNvcnRLZXlzKCk7CisgIGRlYnVnLT5sb2codG9QcmV0dHlTdHJpbmcoRkFMU0UsIFRSVUUpLCBUUlVFKTsKKyAgZGV0ZWN0RXhwYW5zaW9ucygpOworfQorCit2b2lkIFNvcnRlZExpbmVzOjppbml0KCkgCit7CisgIHNpemUgPSByZXBlcnRvaXJlLnNpemUoKTsKKyAgY2FwYWNpdHkgPSA1KnNpemU7CisgIGxpbmVzID0gbmV3IExpbmVbY2FwYWNpdHldOworICBpbml0KHJlcGVydG9pcmUsIGxpbmVzKTsKK30KKwordm9pZCBTb3J0ZWRMaW5lczo6aW5pdChVbmljb2RlU2V0ICZyZXAsIExpbmUgKmxpbikKK3sKKworICBVbmljb2RlU2V0SXRlcmF0b3IgZXhlbXBsYXJVU2V0SXRlcihyZXApOworICBpbnQzMl90IHNpemUgPSAwOworCisgIHdoaWxlKGV4ZW1wbGFyVVNldEl0ZXIubmV4dCgpKSB7CisgICAgTGluZSAqY3VyckxpbmUgPSBsaW4rc2l6ZTsKKyAgICBpZihleGVtcGxhclVTZXRJdGVyLmlzU3RyaW5nKCkpIHsgLy8gcHJvY2VzcyBhIHN0cmluZworICAgICAgY3VyckxpbmUtPnNldFRvKGV4ZW1wbGFyVVNldEl0ZXIuZ2V0U3RyaW5nKCkpOworICAgIH0gZWxzZSB7IC8vIHByb2Nlc3MgY29kZSBwb2ludAorICAgICAgY3VyckxpbmUtPnNldFRvKGV4ZW1wbGFyVVNldEl0ZXIuZ2V0Q29kZXBvaW50KCkpOworICAgIH0KKyAgICBjdXJyTGluZS0+bmFtZVtjdXJyTGluZS0+bGVuXSA9IDA7IC8vIHplcm8gdGVybWluYXRlLCBmb3Igb3VyIGV2aWwgd2F5cworICAgIC8vY3VyckxpbmUtPmluZGV4ID0gc2l6ZTsKKyAgICBzaXplKys7CisgIH0KK30KKwordm9pZCAKK1NvcnRlZExpbmVzOjpzZXRTb3J0aW5nQXJyYXkoTGluZSAqKnNvcnRpbmdBcnJheSwgTGluZSAqZWxlbWVudHMsIGludDMyX3Qgc2l6ZVRvU29ydCkgeworICBpbnQzMl90IGkgPSAwOworICBmb3IoaSA9IDA7IGkgPCBzaXplVG9Tb3J0OyBpKyspIHsKKyAgICBzb3J0aW5nQXJyYXlbaV0gPSAmZWxlbWVudHNbaV07CisgIH0KK30KKworaW50MzJfdAorU29ydGVkTGluZXM6OnNldFNvcnRpbmdBcnJheShMaW5lICoqc29ydGluZ0FycmF5LCBIYXNodGFibGUgKnRhYmxlKSB7CisgIGludDMyX3Qgc2l6ZSA9IHRhYmxlLT5jb3VudCgpOworICBpbnQzMl90IGhhc2hJbmRleCA9IC0xOworICBjb25zdCBVSGFzaEVsZW1lbnQgKmhhc2hFbGVtZW50ID0gTlVMTDsKKyAgaW50MzJfdCBjb3VudCA9IDA7CisgIHdoaWxlKChoYXNoRWxlbWVudCA9IHRhYmxlLT5uZXh0RWxlbWVudChoYXNoSW5kZXgpKSAhPSBOVUxMKSB7CisgICAgc29ydGluZ0FycmF5W2NvdW50KytdID0gKExpbmUgKiloYXNoRWxlbWVudC0+dmFsdWUucG9pbnRlcjsKKyAgfQorICByZXR1cm4gc2l6ZTsKK30KKwordm9pZAorU29ydGVkTGluZXM6OnNvcnQoTGluZSAqKnNvcnRpbmdBcnJheSwgaW50MzJfdCBzaXplVG9Tb3J0LCBVQm9vbCBzZXRTdHJlbmd0aHMsIFVCb29sIGxpbmspIHsKKyAgaW50MzJfdCBpID0gMDsKKyAgaW50MzJfdCBlcXVhbFN0YXJ0ID0gMDsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGVxdWFsU3RyZW5ndGggPSBVQ09MX09GRjsKKworICBxc29ydChzb3J0aW5nQXJyYXksIHNpemVUb1NvcnQsIHNpemVvZihMaW5lICopLCBwcm9iZS5jb21wYXJlcik7CisKKyAgaWYoc2V0U3RyZW5ndGhzKSB7IC8vIGFuYWx5emUgc3RyZW5ndGhzCisgICAgZm9yKGkgPSAxOyBpIDwgc2l6ZVRvU29ydDsgaSsrKSB7CisgICAgICBzb3J0aW5nQXJyYXlbaV0tPnN0cmVuZ3RoID0gcHJvYmUuZ2V0U3RyZW5ndGgoKnNvcnRpbmdBcnJheVtpLTFdLCAqc29ydGluZ0FycmF5W2ldKTsKKyAgICB9CisgICAgLy8gZm9yIGVxdWFsIGd1eXMsIGRvIHRoZSBjb2RlIHBvaW50IG9yZGVyaW5nCisgICAgCisgICAgaSA9IDE7CisgICAgd2hpbGUoaSA8IHNpemVUb1NvcnQpIAorICAgIHsKKyAgICAgIGlmKHNvcnRpbmdBcnJheVtpXS0+c3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwpIHsKKyAgICAgICAgZXF1YWxTdGFydCA9IGkgLSAxOworICAgICAgICBlcXVhbFN0cmVuZ3RoID0gc29ydGluZ0FycmF5W2VxdWFsU3RhcnRdLT5zdHJlbmd0aDsKKyAgICAgICAgc29ydGluZ0FycmF5W2VxdWFsU3RhcnRdLT5zdHJlbmd0aCA9IFVDT0xfSURFTlRJQ0FMOworICAgICAgICB3aGlsZShpIDwgc2l6ZVRvU29ydCAmJiBzb3J0aW5nQXJyYXlbaV0tPnN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKSB7CisgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgICAgIHFzb3J0KHNvcnRpbmdBcnJheStlcXVhbFN0YXJ0LCBpLWVxdWFsU3RhcnQsIHNpemVvZihMaW5lICopLCBjb2RlUG9pbnRDbXApOworICAgICAgICBzb3J0aW5nQXJyYXlbZXF1YWxTdGFydF0tPnN0cmVuZ3RoID0gZXF1YWxTdHJlbmd0aDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGkrKzsKKyAgICAgIH0KKyAgICB9CisgICAgCisgIH0KKworCisKKyAgaWYobGluaykgeyAvLyBkbyB0aGUgbGlua2luZworICAgIGZvcihpID0gMDsgaSA8IHNpemVUb1NvcnQgLSAxOyBpKyspIHsKKyAgICAgIExpbmUgKmN1cnIgPSAqKHNvcnRpbmdBcnJheStpKTsKKyAgICAgIGN1cnItPm5leHQgPSAqKHNvcnRpbmdBcnJheStpKzEpOworICAgICAgKCooc29ydGluZ0FycmF5K2krMSkpLT5wcmV2aW91cyA9IGN1cnI7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK1NvcnRlZExpbmVzOjpzb3J0KFVCb29sIHNldFN0cmVuZ3RocywgVUJvb2wgbGluaykgeworICBpZih0b1NvcnRDYXBhY2l0eSA8IHNpemUgfHwgIXRvU29ydCkgeworICAgIGlmKHRvU29ydCkgeworICAgICAgZGVsZXRlW10gdG9Tb3J0OworICAgIH0KKyAgICB0b1NvcnQgPSBuZXcgTGluZSpbc2l6ZSoyXTsKKyAgICB0b1NvcnRDYXBhY2l0eSA9IHNpemUqMjsKKyAgfQorCisgIHNldFNvcnRpbmdBcnJheSh0b1NvcnQsIGxpbmVzLCBzaXplKTsKKyAgc29ydCh0b1NvcnQsIHNpemUsIHNldFN0cmVuZ3RocywgbGluayk7CisKKyAgZmlyc3QgPSBsYXN0ID0gTlVMTDsKKworICBpZihsaW5rKSB7IC8vIGRvIHRoZSBsaW5raW5nCisgICAgZmlyc3QgPSAqdG9Tb3J0OworICAgIGxhc3QgPSAqKHRvU29ydCtzaXplLTEpOworICB9Cit9CisKK3ZvaWQKK1NvcnRlZExpbmVzOjp1cGRhdGVCb3VuZHMoVW5pY29kZVNldCAmc2V0KSB7CisgIExpbmUgbGluZTsKKyAgVW5pY29kZVN0cmluZyBzMTsKKyAgVW5pY29kZVNldEl0ZXJhdG9yIGl0MShzZXQpOyAKKyAgd2hpbGUoaXQxLm5leHQoKSkgeworICAgIGlmKCFkZWJ1Zy0+aXNPbigpKSB7CisgICAgICBsb2dnZXItPmxvZygiLiIpOworICAgIH0KKyAgICBpZihpdDEuaXNTdHJpbmcoKSkgeyAvLyBwcm9jZXNzIGEgc3RyaW5nCisgICAgICBzMS5zZXRUbyhpdDEuZ2V0U3RyaW5nKCkpOworICAgIH0gZWxzZSB7IC8vIHByb2Nlc3MgY29kZSBwb2ludAorICAgICAgczEuc2V0VG8oaXQxLmdldENvZGVwb2ludCgpKTsKKyAgICB9CisgICAgLy9saW5lLnNldFRvKHMxKTsKKyAgICBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGggPSBwcm9iZS5kaXN0YW5jZUZyb21FbXB0eVN0cmluZyhzMSk7CisgICAgaWYocHJvYmUuY29tcGFyZShVbmljb2RlU3RyaW5nKFVCW3N0cmVuZ3RoXS0+bmFtZSksIHMxKSA8IDApIHsKKyAgICAgIC8vIFRPRE86IGxlYWsgaGVyZSAtIGZpeGl0IQorICAgICAgVUJbc3RyZW5ndGhdID0gbmV3IExpbmUoczEpOworICAgICAgLy91X3N0cmNweShVQltzdHJlbmd0aF0sIHMxLmdldFRlcm1pbmF0ZWRCdWZmZXIoKSk7CisgICAgfQorICB9CisKKworCit9CisKK3ZvaWQgU29ydGVkTGluZXM6OmFkZEFsbChMaW5lKiB0b0FkZCwgaW50MzJfdCB0b0FkZFNpemUpIAoreworICBpZihzaXplK3RvQWRkU2l6ZSA+IGNhcGFjaXR5KSB7CisgICAgaW50MzJfdCBkb0dyb3dpbmdCcmVha3BvaW50ID0gMDsKKyAgICAvLyB3ZSBuZWVkIHRvIGRvIGdyb3dpbmcgaGVyZQorICB9CisgIGludDMyX3QgaSA9IDA7CisKKyAgZm9yKGkgPSAwOyBpIDwgdG9BZGRTaXplOyBpKyspIHsKKyAgICBsaW5lc1tzaXplK2ldID0gdG9BZGRbaV07CisgIH0KKyAgc2l6ZSArPSB0b0FkZFNpemU7Cit9CisKK3ZvaWQgU29ydGVkTGluZXM6OnNldERpc3RhbmNlc0Zyb21FbXB0eShMaW5lKiBhcnJheSwgaW50MzJfdCBhcnJheVNpemUpCit7CisgIGludDMyX3QgaSA9IDA7CisgIGZvcihpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKSB7CisgICAgYXJyYXlbaV0uc3RyZW5ndGhGcm9tRW1wdHkgPSBwcm9iZS5kaXN0YW5jZUZyb21FbXB0eVN0cmluZyhhcnJheVtpXSk7CisgIH0KK30KKworCisvLyBhZGRzIGNvbnRyYWN0aW9ucyBpbiB0byByZXBlcnRvaXJlCitpbnQzMl90IFNvcnRlZExpbmVzOjphZGRDb250cmFjdGlvbnNUb1JlcGVydG9pcmUoVUVycm9yQ29kZSAmc3RhdHVzKSAKK3sKKyAgbG9nZ2VyLT5sb2coIlxuKioqIERldGVjdGluZyBjb250cmFjdGlvbnNcblxuIik7CisgIGNvbnRyYWN0aW9uc1RhYmxlID0gbmV3IEhhc2h0YWJsZSgpOworICBpbnQzMl90IG5vQ29udHMgPSAwOworICBpbnQzMl90IGFsbG9jYXRlU2l6ZSA9IDUwKnNpemU7CisgIC8vIGZpcnN0IGNoZWNrIGZvciBzaW1wbGUgY29udHJhY3Rpb25zCisgIExpbmUqIGRlbHRhID0gbmV3IExpbmVbYWxsb2NhdGVTaXplXTsKKyAgTGluZSoqIGRlbHRhU29ydGVkID0gbmV3IExpbmUqW2FsbG9jYXRlU2l6ZV07CisgIExpbmUqIGxlc3NlclRvQWRkVG8gPSBuZXcgTGluZVthbGxvY2F0ZVNpemVdOworICBMaW5lKiBuZXdEZWx0YSA9IG5ldyBMaW5lW2FsbG9jYXRlU2l6ZV07CisgIExpbmUqKiBuZXdEZWx0YVNvcnRlZCA9IG5ldyBMaW5lKlthbGxvY2F0ZVNpemVdOworICBMaW5lKiBkZWx0YVAgPSBkZWx0YTsgCisgIExpbmUqKiBkZWx0YVBQID0gZGVsdGFTb3J0ZWQ7CisgIExpbmUqIG5ld0RlbHRhUCA9IG5ld0RlbHRhOworICBpbnQzMl90IGRlbHRhU2l6ZSA9IDAsIGxlc3NlclRvQWRkVG9TaXplID0gMCwgbmV3RGVsdGFTaXplID0gMDsKKyAgbG9nZ2VyLT5sb2coIisrIENvbnRyYWN0aW9uIGRldGVjdGlvbiBnZW5lcmF0aW9uIDBcbiIpOworICBub0NvbnRzID0gZGV0ZWN0Q29udHJhY3Rpb25zKHRvU29ydCwgc2l6ZSwgdG9Tb3J0LCBzaXplLCAKKwkJCSAgICAgICBkZWx0YSwgZGVsdGFTaXplLCBsZXNzZXJUb0FkZFRvLCBsZXNzZXJUb0FkZFRvU2l6ZSwgMypzaXplLCBzdGF0dXMpOworICBzZXRTb3J0aW5nQXJyYXkoZGVsdGFTb3J0ZWQsIGRlbHRhLCBkZWx0YVNpemUpOworICBzb3J0KGRlbHRhU29ydGVkLCBkZWx0YVNpemUsIFRSVUUpOworCisgIHNldERpc3RhbmNlc0Zyb21FbXB0eShkZWx0YSwgZGVsdGFTaXplKTsKKyAgaW50MzJfdCBkZWx0YVBTaXplID0gZGVsdGFTaXplOworICAvL3VwZGF0ZUJvdW5kcyhkZWx0YSk7CisKKyAgaW50MzJfdCBnZW5lcmF0aW9uID0gMDsKKyAgLy8gaWYgd2UgZm91bmQgYW55LCB3ZSBoYXZlIHRvIHRyeSBtdWx0aXBsZSBjb250cmFjdGlvbnMKKyAgLy8gSG93ZXZlciwgd2Ugd2FudCB0byBwcmV2ZW50IHRoZSBjb250cmFjdGlvbnMgZXhwbG9zaW9uCisgIC8vIGlmIHRoZSBudW1iZXIgb2Ygc2ltcGxlIGNvbnRyYWN0aW9ucyBpcyBncmVhdGVyIHRoYW4gdGhlCisgIC8vIHN0YXJ0aW5nIHNpemUsIGNoYW5jZXMgYXJlIHRoYXQgd2UgZWl0aGVyIGhhdmUgYW4gYWxnb3JpdGhtaWMKKyAgLy8gY29udHJhY3Rpb24gKGxpa2UgaXRlcmF0aW9uIG1hcmtzIG9uIHcyaykgb3Igc29tZXRoaW5nCisgIC8vIGlzIHNlcmlvc2x5IHdyb25nLgorICBpZihkZWx0YVBTaXplIDwgc2l6ZS8yKSB7CisgICAgd2hpbGUgKGRlbHRhUFNpemUgJiYgZ2VuZXJhdGlvbiA8IDEpIHsKKyAgICAgIGdlbmVyYXRpb24rKzsKKyAgICAgIGxvZ2dlci0+bG9nKCJcbisrIENvbnRyYWN0aW9uIGRldGVjdGlvbiBnZW5lcmF0aW9uICVpXG4iLCBnZW5lcmF0aW9uLCBnZW5lcmF0aW9uKTsKKyAgICAgIC8vIGZpbmQgbW9yZSwgYnV0IGF2b2lkIHRlc3RpbmcgdGhlIGNvbWJpbmF0aW9ucyB3ZSBhbHJlYWR5IGhhdmUKKyAgICAgIG5vQ29udHMgKz0gZGV0ZWN0Q29udHJhY3Rpb25zKHRvU29ydCwgc2l6ZSwgZGVsdGFQUCwgZGVsdGFQU2l6ZSwKKwkJCQkgICAgbmV3RGVsdGFQLCBuZXdEZWx0YVNpemUsIGxlc3NlclRvQWRkVG8sIGxlc3NlclRvQWRkVG9TaXplLCAzKnNpemUsIHN0YXR1cyk7CisgICAgICBub0NvbnRzICs9IGRldGVjdENvbnRyYWN0aW9ucyhkZWx0YVBQLCBkZWx0YVBTaXplLCB0b1NvcnQsIHNpemUsIAorCQkJCSAgICBuZXdEZWx0YVAsIG5ld0RlbHRhU2l6ZSwgbGVzc2VyVG9BZGRUbywgbGVzc2VyVG9BZGRUb1NpemUsIDMqc2l6ZSwgc3RhdHVzKTsKKyAgICAgIGNhbGN1bGF0ZVNvcnRLZXlzKCk7CisKKyAgICAgIGFkZEFsbChkZWx0YVAsIGRlbHRhUFNpemUpOworICAgICAgc2V0U29ydGluZ0FycmF5KHRvU29ydCwgbGluZXMsIHNpemUpOworICAgICAgc29ydChUUlVFLCBUUlVFKTsKKyAgICAgIHNldFNvcnRpbmdBcnJheShuZXdEZWx0YVNvcnRlZCwgbmV3RGVsdGFQLCBuZXdEZWx0YVNpemUpOworICAgICAgc29ydChuZXdEZWx0YVNvcnRlZCwgbmV3RGVsdGFTaXplLCBUUlVFKTsKKwkgIAorICAgICAgLy8gaWYgbm8gbmV3IG9uZXMsIGJhaWwKKyAgICAgIC8vaWYgKG5ld0RlbHRhU2l6ZSA9PSAwKSBicmVhazsKKworICAgICAgZGVsdGFQU2l6ZSA9IG5ld0RlbHRhU2l6ZTsKKyAgICAgIG5ld0RlbHRhU2l6ZSA9IDA7CisgICAgICBpZihkZWx0YVAgPT0gZGVsdGEpIHsKKyAgICAgICAgZGVsdGFQID0gbmV3RGVsdGE7CisgICAgICAgIGRlbHRhUFAgPSBuZXdEZWx0YVNvcnRlZDsKKyAgICAgICAgbmV3RGVsdGFQID0gZGVsdGE7CisgICAgICB9IGVsc2UgeworICAgICAgICBkZWx0YVAgPSBkZWx0YTsKKyAgICAgICAgZGVsdGFQUCA9IGRlbHRhU29ydGVkOworICAgICAgICBuZXdEZWx0YVAgPSBuZXdEZWx0YTsKKyAgICAgIH0KKyAgICAgIHNldERpc3RhbmNlc0Zyb21FbXB0eShkZWx0YVAsIGRlbHRhUFNpemUpOworICAgIH0KKyAgfQorICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgIC8vIGFkZCBzdHVmZiBmcm9tIHRoZSBsYXN0IGJhdGNoCisgIGFkZEFsbChkZWx0YVAsIGRlbHRhUFNpemUpOworCisgIC8vIHdhcm5pbmc6IHdlIGRvbid0IGFkZCB0aGUgbGVzc2VyIG9uZXMgaW4gcmVjdXJzaXZlbHksIHNpbmNlIHRoZXkgd2lsbAorICAvLyBpbmZpbml0ZWx5IGxvb3AKKyAgc2V0RGlzdGFuY2VzRnJvbUVtcHR5KGxlc3NlclRvQWRkVG8sIGxlc3NlclRvQWRkVG9TaXplKTsKKyAgYWRkQWxsKGxlc3NlclRvQWRkVG8sIGxlc3NlclRvQWRkVG9TaXplKTsKKyAgc2V0U29ydGluZ0FycmF5KHRvU29ydCwgbGluZXMsIHNpemUpOworICBzb3J0KFRSVUUsIFRSVUUpOworCisgIGRlbGV0ZVtdIGRlbHRhU29ydGVkOworICBkZWxldGVbXSBkZWx0YTsKKyAgZGVsZXRlW10gbGVzc2VyVG9BZGRUbzsKKyAgZGVsZXRlW10gbmV3RGVsdGFTb3J0ZWQ7CisgIGRlbGV0ZVtdIG5ld0RlbHRhOworICByZXR1cm4gbm9Db250czsKK30KKworCitpbnQzMl90IFNvcnRlZExpbmVzOjpkZXRlY3RDb250cmFjdGlvbnMoTGluZSAqKmZpcnN0UmVwLCBpbnQzMl90IGZpcnN0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICoqc2Vjb25kUmVwLCBpbnQzMl90IHNlY29uZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAqdG9BZGRUbywgaW50MzJfdCAmdG9BZGRUb1NpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgKmxlc3NlclRvQWRkVG8sIGludDMyX3QgJmxlc3NlclRvQWRkVG9TaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgY2FwYWNpdHksIFVFcnJvckNvZGUgJnN0YXR1cykgCit7CisgIGludDMyX3Qgbm9Db250cyA9IDA7CisgIGludCBpID0gMCwgaiA9IDAsIGsgPSAwOworICBMaW5lIGxvd2VyLCB1cHBlciwgdHJpYWwsIHRvQWRkLCBoZWxwZXI7CisgIFVDaGFyMzIgZmlyc3RTdGFydCwgZmlyc3RFbmQsIHNlY29uZFN0YXJ0OworICBVQ2hhciBORkNUcmlhbFsyNTZdOworICBpbnQzMl90IE5GQ1RyaWFsTGVuID0gMDsKKyAgVUJvb2wgdGhhaTsKKyAgaSA9IC0xOworICB3aGlsZShpIDwgZmlyc3RTaXplLTEgJiYgVV9TVUNDRVNTKHN0YXR1cykpIHsKKyAgICBpKys7CisgICAgaWYoIWRlYnVnLT5pc09uKCkpIHsKKyAgICAgIGxvZ2dlci0+bG9nKCJcclRlc3RpbmcgJTA1aS8lMDVpLiBGb3VuZCAlMDVpIGNvbnRzLiIsIGksIGZpcnN0U2l6ZSwgbm9Db250cyk7CisgICAgfQorICAgIFUxNl9HRVQoZmlyc3RSZXBbaV0tPm5hbWUsIDAsIDAsIGZpcnN0UmVwW2ldLT5sZW4sIGZpcnN0U3RhcnQpOworICAgIGlmKHVzY3JpcHRfZ2V0U2NyaXB0KGZpcnN0U3RhcnQsICZzdGF0dXMpID09IFVTQ1JJUFRfSEFOIHx8IGZpcnN0UmVwW2ldLT5zdHJlbmd0aEZyb21FbXB0eSA+IFVDT0xfUFJJTUFSWSkgLy9VQ09MX1RFUlRJQVJZKSAKKyAgICAgIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgbG93ZXIgPSAqZmlyc3RSZXBbaV07CisgICAgZm9yKGogPSAwOyBqIDwgc2Vjb25kU2l6ZTsgaisrKSB7CisgICAgICBpZihub0NvbnRzID09IGNhcGFjaXR5KSB7CisgICAgICAgIHJldHVybiBub0NvbnRzOworICAgICAgfQorICAgICAgVTE2X0dFVChzZWNvbmRSZXBbal0tPm5hbWUsIDAsIDAsIHNlY29uZFJlcFtqXS0+bGVuLCBzZWNvbmRTdGFydCk7CisgICAgICBpZihmaXJzdFN0YXJ0ID09IDB4NDEgJiYgc2Vjb25kU3RhcnQgPT0gMHgzMDgpIHsKKyAgICAgIGludDMyX3QgcHV0QnJlYWtQb2ludEhlcmUgPSAwOworICAgIH0KKyAgICAgIGlmKHVzY3JpcHRfZ2V0U2NyaXB0KHNlY29uZFN0YXJ0LCAmc3RhdHVzKSA9PSBVU0NSSVBUX0hBTikgLy8gfHwgc2Vjb25kUmVwW2pdLT5zdHJlbmd0aEZyb21FbXB0eSA+IFVDT0xfVEVSVElBUlkpIAorCXsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgCWlmKGR1cGxpY2F0b3JzICYmIGR1cGxpY2F0b3JzLT5nZXQoVW5pY29kZVN0cmluZyhzZWNvbmRSZXBbal0tPm5hbWUsIHNlY29uZFJlcFtqXS0+bGVuKSkgIT0gTlVMTCkgeworICAgICAgICAgIGRlYnVnLT5sb2coIlNraXBwaW5nIGR1cGxpY2F0b3IgIik7CisgICAgICAgICAgZGVidWctPmxvZyhzZWNvbmRSZXBbal0tPnRvU3RyaW5nKCksIFRSVUUpOworCQkgIGNvbnRpbnVlOworCQl9CisKKyAgICAgIGlmKGZpcnN0UmVwW2ldLT5uYW1lWzBdID09IDB4NjEgJiYgc2Vjb25kUmVwW2pdLT5uYW1lWzBdID09IDB4MzA4KSB7CisJICAgIGludDMyX3QgcHV0QnJlYWtwb2ludGhlcmUgPSAwOworICAgICAgfQorICAgICAgdXBwZXIuc2V0VG9Db25jYXQoZmlyc3RSZXBbaV0sIFVCW1VDT0xfUFJJTUFSWV0pOworICAgICAgLy91cHBlci5zZXRUb0NvbmNhdChmaXJzdFJlcFtpXSwgVUJbc2Vjb25kUmVwW2pdLT5zdHJlbmd0aEZyb21FbXB0eV0pOworICAgICAgdG9BZGQuc2V0VG9Db25jYXQoZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSk7ICAgICAgICAgIAorICAgICAgVTE2X0dFVChmaXJzdFJlcFtpXS0+bmFtZSwgMCwgZmlyc3RSZXBbaV0tPmxlbi0xLCBmaXJzdFJlcFtpXS0+bGVuLCBmaXJzdEVuZCk7CisgICAgICBpZigodGhhaSA9IHVfaGFzQmluYXJ5UHJvcGVydHkoZmlyc3RFbmQsIFVDSEFSX0xPR0lDQUxfT1JERVJfRVhDRVBUSU9OKSkpIHsKKwkvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGxvd2VyIGlzIHNpbmdsZSByZW9yZGVyaW5nIGNoYXJhY3RlcgorCS8vIGlmIHdlIGRvIHRoZSBsb3dlciB0ZXN0IHdpdGhvdXQgdGFraW5nIHRoaXMgaW50byBhY2NvdW50LAorCS8vIHdlJ2xsIGNvbXBhcmluZyB0aGUgc2Vjb25kUmVwIGRpcmVjdGx5IHRvIFRoYWkuIFdlIGFkZCBVQltVQ09MX1BSSU1BUlldIHRvCisJLy8gZW5kIG9mIGxvd2VyIGFuZCBpbiB0aGUgbWlkZGxlIG9mIHRyaWFsLCBzbyB3ZSB3aWxsIGhhdmUgCisJLy8gbG93ZXIgPSBUaGFpICsgVUIsIHRyaWFsIFRoYWkgKyBVQiArIHgsIHJlc29sdmluZyB0bworCS8vIFVCICsgVGhhaSB2cyBVQiArIFRoYWkgKyB4LgorCS8vIGZvciB1cHBlciBib3VuZCwgd2UgZG8gdGhlIHNpbWlsYXIsIHNvIHdlIGhhdmUKKwkvLyB1cHBlciA9IFRoYWkgKyBVQiArIFVCLCB0cmlhbCA9IFRoYWkgKyBVQiArIHgsCisJLy8gcmVzb2x2aW5nIHRvIFVCICsgVGhhaSArIFVCIHZzIFVCICsgVGhhaSArIHgKKwlpZihzZWNvbmRSZXBbal0tPmZpcnN0Q0MpIHsKKwkgIFVDaGFyMzIgVUJDaGFyOworCSAgVTE2X0dFVChVQltVQ09MX1NFQ09OREFSWV0tPm5hbWUsIDAsIDAsIFVCW1VDT0xfU0VDT05EQVJZXS0+bGVuLCBVQkNoYXIpOworCSAgaWYoc2Vjb25kUmVwW2pdLT5maXJzdENDID4gdV9nZXRDb21iaW5pbmdDbGFzcyhVQkNoYXIpKSB7CisJICAgIGNvbnRpbnVlOworCSAgfQorCX0gCisJdXBwZXIgPSAqZmlyc3RSZXBbaV07CisJdXBwZXIuYXBwZW5kKCpVQltVQ09MX1BSSU1BUlldKTsKKwkvL3VwcGVyLmFwcGVuZCgqVUJbc2Vjb25kUmVwW2pdLT5zdHJlbmd0aEZyb21FbXB0eV0pOworCXVwcGVyLmFwcGVuZCgqVUJbVUNPTF9QUklNQVJZXSk7CisJbG93ZXIuYXBwZW5kKCpVQltVQ09MX1BSSU1BUlldKTsKKwl0cmlhbCA9ICpmaXJzdFJlcFtpXTsKKwl0cmlhbC5hcHBlbmQoKlVCW1VDT0xfUFJJTUFSWV0pOworCXRyaWFsLmFwcGVuZCgqc2Vjb25kUmVwW2pdKTsKKyAgICAgIH0gZWxzZSBpZigoZmlyc3RSZXBbaV0tPmxhc3RDQyA+IHNlY29uZFJlcFtqXS0+Zmlyc3RDQyAmJiBzZWNvbmRSZXBbal0tPmZpcnN0Q0MgJiYgIWZyZW5jaFNlY29uZGFyeSkgCisJCXx8IChmaXJzdFJlcFtpXS0+Zmlyc3RDQyA8IHNlY29uZFJlcFtqXS0+bGFzdENDICYmIGZpcnN0UmVwW2ldLT5maXJzdENDICYmIGZyZW5jaFNlY29uZGFyeSkpIHsKKwkvLyBTa2lwIGJlY2F1c2Ugbm9ybWFsaXphdGlvbiB3aWxsIHJlb3JkZXIKKwkvLyB0aGVyZSB3aWxsIGJlIGEgY2hhbmNlIHRvIGNoZWNrIHRoaXMgYWdhaW4sIHNpbmNlIGlmIHdlCisJLy8gdHJ5IGErYiwgd2Ugd2lsbCBhbHNvIHRyeSBiK2EKKwkgICAgY29udGludWU7CisgICAgICB9IGVsc2UgaWYoZnJlbmNoU2Vjb25kYXJ5ICYmIChmaXJzdFJlcFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPiBVQ09MX1BSSU1BUlkgJiYgc2Vjb25kUmVwW2pdLT5zdHJlbmd0aEZyb21FbXB0eSA+IFVDT0xfUFJJTUFSWSkpIHsKKwkgICAgY29udGludWU7CisgICAgICB9ZWxzZSBpZihmaXJzdFJlcFtpXS0+bGFzdENDICYmIHNlY29uZFJlcFtqXS0+Zmlyc3RDQyAmJiBmcmVuY2hTZWNvbmRhcnkpIHsKKwkgICAgdHJpYWwuc2V0VG9Db25jYXQoc2Vjb25kUmVwW2pdLCBmaXJzdFJlcFtpXSk7CisgICAgICB9IGVsc2UgeworICAgIAl0cmlhbC5zZXRUb0NvbmNhdChmaXJzdFJlcFtpXSwgc2Vjb25kUmVwW2pdKTsgICAgICAgICAgCisgICAgICB9CisgICAgICAvLyBOb3cgbGV0J3MgY2hlY2sgdGhlIHRyaWFsLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4geW91IGNvbWJpbmUgY2hhcmFjdGVycywgCisgICAgICAvLyB5b3UgY2FuIGVuZCB1cCB3aXRoIGNvbmNhdGVuYXRpb24gdGhhdCBpcyB1bmtub3duIGZvciB0aGUgZXhhbWluZWQgQVBJLgorICAgICAgTkZDVHJpYWxMZW4gPSB1bm9ybV9ub3JtYWxpemUodHJpYWwubmFtZSwgdHJpYWwubGVuLCBVTk9STV9ORkMsIDAsIE5GQ1RyaWFsLCAyNTYsICZzdGF0dXMpOworICAgICAgaWYoKHVfc3RyY21wKHRyaWFsLm5hbWUsIE5GQ1RyaWFsKSA9PSAwKSB8fCB1X3N0ckZpbmRMYXN0KE5GQ1RyaWFsLCBORkNUcmlhbExlbiwgc2Vjb25kUmVwW2pdLT5uYW1lLCBzZWNvbmRSZXBbal0tPmxlbikpIHsKKwkgICBpZihzZWNvbmRSZXBbal0tPnN0cmVuZ3RoRnJvbUVtcHR5ID4gVUNPTF9URVJUSUFSWSkgeworCSAgICAgY29udGludWU7CisJICAgfQorCSB9CisgICAgICBVQ2hhcjMyIGM7CisgICAgICBVMTZfR0VUKE5GQ1RyaWFsLCAwLCAwLCBORkNUcmlhbExlbiwgYyk7CisgICAgICBoZWxwZXIuc2V0VG8oYyk7CisgICAgICBpZihwcm9iZS5kaXN0YW5jZUZyb21FbXB0eVN0cmluZyhoZWxwZXIpID4gVUNPTF9URVJUSUFSWSkgeworCSAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmKE5GQ1RyaWFsTGVuID4gMSkgeworCSAgICBVMTZfR0VUKE5GQ1RyaWFsLCAwLCBORkNUcmlhbExlbi0xLCBORkNUcmlhbExlbiwgYyk7CisJICAgIGhlbHBlci5zZXRUbyhjKTsKKyAgICAgICAgaWYocHJvYmUuZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoaGVscGVyKSA+IFVDT0xfVEVSVElBUlkpIHsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorICAgICAgfQorCisgICAgICBpZiAocHJvYmUuY29tcGFyZShsb3dlciwgdHJpYWwpID49IDApIHsgLy8gaWYgbG93ZXIgaXMgYmlnZ2VyIHRoYW4gdHJpYWwKKyAgICAgICAgLy8gdGhpcyBtaWdodCBiZSBvaywgYnV0IEknbSBoYXZpbmcgZG91YnRzLiBIZXJlIGlzIGFuIGFkZGl0aW9uYWwgY2hlY2s6CisgICAgICAgIGlmKGZpcnN0UmVwW2ldLT5sZW4gPT0gMSB8fCBzZWNvbmRSZXBbal0tPnN0cmVuZ3RoRnJvbUVtcHR5ID09IFVDT0xfUFJJTUFSWSkgeworICAgICAgICAgIC8vIEknbSBiYXNpY2FsbHkgc2F5aW5nIHRoYXQgSSdsbCBhZGQgdGhpcyBraW5kIG9mIGNvbnRyYWN0aW9uIGZvciBjYXNlcyB3aGVyZSBJIGNvbWJpbmUKKyAgICAgICAgICAvLyBvbmUgbGV0dGVyIHdpdGggYW4gYWNjZW50IE9SIHdoZW4gSSdtIGNvbWJpbmluZyBtb3JlIHRoYW4gb25lIHN5bWJvbCB3aXRoIGEgbGV0dGVyLgorICAgICAgICAgIG5vdGVDb250cmFjdGlvbigiTCIsIGxlc3NlclRvQWRkVG8sIGxlc3NlclRvQWRkVG9TaXplLCBmaXJzdFJlcFtpXSwgc2Vjb25kUmVwW2pdLCBub0NvbnRzLCBzdGF0dXMpOworICAgICAgICB9CisgICAgICB9IAorICAgICAgZWxzZSBpZiAocHJvYmUuY29tcGFyZSh0cmlhbCwgdXBwZXIpID4gMCkgeyAvLyB0cmlhbCBpcyBiaWdnZXIgdGhhbiB1cHBlcj8/CisgICAgICAgIG5vdGVDb250cmFjdGlvbigiVSIsIHRvQWRkVG8sIHRvQWRkVG9TaXplLCBmaXJzdFJlcFtpXSwgc2Vjb25kUmVwW2pdLCBub0NvbnRzLCBzdGF0dXMpOworICAgICAgfSAKKyNpZiAwCisgICAgICBlbHNlIGlmKGZpcnN0UmVwW2ldLT5zdHJlbmd0aEZyb21FbXB0eSA9PSBVQ09MX1BSSU1BUlkpCisgICAgICB7CisgICAgICAgIExpbmUgZXhwYW5zaW9uTGluZTsKKyAgICAgICAgaWYoZ2V0RXhwYW5zaW9uTGluZSh0cmlhbCwgKmZpcnN0UmVwW2ldLCAqc2Vjb25kUmVwW2pdLCBleHBhbnNpb25MaW5lKSAmJgorICAgICAgICBleHBhbnNpb25MaW5lLmxlbiAmJiAhKGV4cGFuc2lvbkxpbmUgPT0gKnNlY29uZFJlcFtqXSkpIHsKKyAgICAgICAgICBub3RlQ29udHJhY3Rpb24oIkQiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSwgbm9Db250cywgc3RhdHVzKTsKKyAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgfQorI2VuZGlmCisgICAgICBlbHNlIGlmKGZpcnN0UmVwW2ldLT5zdHJlbmd0aEZyb21FbXB0eSA9PSBVQ09MX1BSSU1BUlkgJiYgcHJvYmUuZ2V0U3RyZW5ndGgobG93ZXIsIHRyaWFsKSA8IHNlY29uZFJlcFtqXS0+c3RyZW5ndGhGcm9tRW1wdHkpIHsKKyAgICAgICAgbm90ZUNvbnRyYWN0aW9uKCJEMSIsIHRvQWRkVG8sIHRvQWRkVG9TaXplLCBmaXJzdFJlcFtpXSwgc2Vjb25kUmVwW2pdLCBub0NvbnRzLCBzdGF0dXMpOworICAgICAgfSAKKyAgICAgIGVsc2UgaWYgKGZpcnN0UmVwW2ldLT5zdHJlbmd0aEZyb21FbXB0eSA9PSBVQ09MX1BSSU1BUlkgJiYgc2Vjb25kUmVwW2pdLT5zdHJlbmd0aEZyb21FbXB0eSA9PSBVQ09MX1BSSU1BUlkpIAorICAgICAgeworICAgICAgICAvLyBJIGhhdmUgYWRkZWQgYW4gYWRkaXRpb25hbCBjaGVjay4gVGhlIGNoZWNrcyB2ZXJzdXMgdXBwZXIgYW5kIGxvd2VyIGJvdW5kIHNob3VsZCBiZSBzdWZmaWNpZW50CisgICAgICAgIC8vIHdoZW4gdGhlIHJpZ2h0IHNpZGUgaXMgYSBjb21iaW5pbmcgbWFyay4gVGhlcmUgbWlnaHQgYmUgYSByZW9yZGVyaW5nIG9mIGNvbWJpbmluZyBtYXJrcywgYnV0CisgICAgICAgIC8vIHRoYXQgc2hvdWxkIGJlIGFscmVhZHkgdmlzaWJsZSBpbiB0aGVpciBvcmRlci4KKwkvLyBjb21wYXJlIHRoZSBzZXF1ZW5jZSAKKwkvLyBZLSA8PyBZIDw/IFkrCisJLy8gYW5kIAorCS8vIFhZLSA8PyBYWSA8PyBYWSsKKwlMaW5lIHh5bSwgeHlwLCB4eTsKKwlVQm9vbCB4eW1Jc0NvbnRyYWN0aW9uID0gRkFMU0UsIHRvQWRkSXNDb250cmFjdGlvbiA9IEZBTFNFOworICAgIGlmKGopIHsKKwkgIGlmKCgoIXNlY29uZFJlcFtqLTFdLT5maXJzdENDIHx8IGZpcnN0UmVwW2ldLT5sYXN0Q0MgPCBzZWNvbmRSZXBbai0xXS0+Zmlyc3RDQykgJiYgIWZyZW5jaFNlY29uZGFyeSkgCisgICAgICAgICAgICAgfHwoKCFmaXJzdFJlcFtpXS0+Zmlyc3RDQyB8fCBmaXJzdFJlcFtpXS0+Zmlyc3RDQyA+IHNlY29uZFJlcFtqLTFdLT5sYXN0Q0MpICYmIGZyZW5jaFNlY29uZGFyeSkpIHsKKwkgICAgeHltLnNldFRvQ29uY2F0KGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbai0xXSk7CisJICAgIHRvQWRkLnN0cmVuZ3RoID0gcHJvYmUuZ2V0U3RyZW5ndGgoeHltLCB0b0FkZCk7CisJICAgIGlmKHNlY29uZFJlcFtqXS0+c3RyZW5ndGggIT0gdG9BZGQuc3RyZW5ndGgpIHsKKwkgICAgICAvLyB0aGVyZSBpcyBwb3NzaWJpbGl0eSB0aGF0IGVpdGhlciB4eW0gb3IgeHkgYXJlIGNvbnRyYWN0aW9ucworCSAgICAgIC8vIFRoZXJlIGFyZSB0d28gc2l0dWF0aW9uczoKKwkgICAgICAvLyB4eW0gPiB4eSBvciB4eW0gPG4geHkgYW5kIHltIDxrIHkgYnV0IG4gIT0gaworCSAgICAgIC8vIGlmIHRoZXkgYXJlIHJlb3JkZXJlZCwgd2UgYXJlIGdvaW5nIHRvIHNlZSBpZiBlYWNoIG9mIHRoZW0gCisJICAgICAgLy8gaXMgZnVydGhlciByZW9yZGVyZWQKKwkgICAgICBpZih0b0FkZC5zdHJlbmd0aCA9PSBVQ09MX09GRikgeworCQkvLyBjaGVjayB3aGV0aGVyIHRvQWRkIHNoaWZ0ZWQgbW9yZSBkb3duCisJCWsgPSBqIC0gMjsKKwkJd2hpbGUoaz49MCAmJiBzZWNvbmRSZXBba10tPnN0cmVuZ3RoID4gc2Vjb25kUmVwW2pdLT5zdHJlbmd0aCkgeworCQkgIGstLTsKKwkJfQorCQl3aGlsZSghdG9BZGRJc0NvbnRyYWN0aW9uICYmIGs+PTApIHsKKwkJICB4eXAuc2V0VG9Db25jYXQoZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtrXSk7CisJCSAgaWYoY29udHJhY3Rpb25zVGFibGUtPmdldChVbmljb2RlU3RyaW5nKHh5cC5uYW1lLCB4eXAubGVuKSkgIT0gTlVMTCkgeworCQkgICAgay0tOworCQkgICAgY29udGludWU7CisJCSAgfQorCQkgIGlmKHByb2JlLmNvbXBhcmUoeHlwLCB4eW0pID49IDApIHsKKwkJICAgIC8vIHh5cCBsb29rcyBsaWtlIGEgY29udHJhY3Rpb24KKwkJICAgIG5vdGVDb250cmFjdGlvbigiITEiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSwgbm9Db250cywgc3RhdHVzKTsKKwkJICAgIHRvQWRkSXNDb250cmFjdGlvbiA9IFRSVUU7CisJCSAgfSBlbHNlIHsKKwkJICAgIGJyZWFrOworCQkgIH0KKwkJfQorICAgICAgICAgIC8vIGZpcnN0IGxldCdzIHNlZSBpZiB4eW0gaGFzIG1vdmVkIGJleW9uZAorICAgICAgICAgIGlmKGNvbnRyYWN0aW9uc1RhYmxlLT5nZXQoVW5pY29kZVN0cmluZyh4eW0ubmFtZSwgeHltLmxlbikpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGsgPSBqKzE7CisgICAgICAgICAgICAvLyBpZ25vcmUgd2Vha2VyIHN0cmVuZ3RocworICAgICAgICAgICAgd2hpbGUoayA8IHNlY29uZFNpemUgJiYgc2Vjb25kUmVwW2tdLT5zdHJlbmd0aCA+IHNlY29uZFJlcFtqXS0+c3RyZW5ndGgpIHsKKyAgICAgICAgICAgICAgaysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2Ugc2tpcHBlZCB0aGUgZm9sbG93aW5nIGd1eQorICAgICAgICAgICAgaWYoayA8IHNlY29uZFNpemUpIHsKKyAgICAgICAgICAgICAgeHlwLnNldFRvQ29uY2F0KGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBba10pOworICAgICAgICAgICAgICBpZihwcm9iZS5jb21wYXJlKHh5cCwgeHltKSA8PSAwKSB7CisJICAgICAgICAgICAgLy8geHlwIGxvb2tzIGxpa2UgYSBjb250cmFjdGlvbgorCSAgICAgICAgICAgIG5vdGVDb250cmFjdGlvbigiITIiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqLTFdLCBub0NvbnRzLCBzdGF0dXMpOworCSAgICAgICAgICAgIHh5bUlzQ29udHJhY3Rpb24gPSBUUlVFOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHh5bUlzQ29udHJhY3Rpb24gPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgICAvLyBpZiB0aGV5IGhhdmUgcmVvcmRlcmVkLCBidXQgbm9uZSBoYXMgbW92ZWQsIHRoZW4gd2UgYWRkIHRoZW0gYm90aAorICAgICAgICAgIC8vIGFuZCBob3BlIGZvciB0aGUgYmVzdAorICAgICAgICAgIGlmKCF4eW1Jc0NvbnRyYWN0aW9uICYmICF0b0FkZElzQ29udHJhY3Rpb24pIHsKKyAgICAgICAgICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBhbiBORkMgdmVyc2lvbiB2ZXJzaW9uIG9mIG9uZSBvZiB0aGUgCisgICAgICAgICAgICAgIC8vIHN0cmluZ3MuIElmIHdlIGhhdmUgWFkgPiBYWiwgYnV0IE5GQyhYWikgPSBXIGFuZCBYIDwgVywgd2UgbWlnaHQgaGF2ZQorICAgICAgICAgICAgICAvLyBoYXZlIGEgZmFsc2UgY29udHJhY3Rpb24uCisgICAgICAgICAgICAgIHRyaWFsLmxlbiA9IHVub3JtX25vcm1hbGl6ZSh0b0FkZC5uYW1lLCB0b0FkZC5sZW4sIFVOT1JNX05GQywgMCwgdHJpYWwubmFtZSwgMjUsICZzdGF0dXMpOworICAgICAgICAgICAgICAvL1VDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCA9IHByb2JlLmdldFN0cmVuZ3RoKCpmaXJzdFJlcFtpXSwgdHJpYWwpOworICAgICAgICAgICAgICBpZih0cmlhbCA9PSB0b0FkZCkgeworICAgICAgICAgICAgICAgIG5vdGVDb250cmFjdGlvbigiITMiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqLTFdLCBub0NvbnRzLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIG5vdGVDb250cmFjdGlvbigiITMiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSwgbm9Db250cywgc3RhdHVzKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBub3RlQ29udHJhY3Rpb24oIiE0IiwgdG9BZGRUbywgdG9BZGRUb1NpemUsIGZpcnN0UmVwW2ldLCBzZWNvbmRSZXBbal0sIG5vQ29udHMsIHN0YXR1cyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkgICAgICB9IGVsc2UgeyAvLyBvbmx5IHRoZSBzdHJlbmd0aCBoYXMgY2hhbmdlZAorICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgcHJldmlvdXMgaXMgY29udHJhY3Rpb24gYW5kIGlmIG5vdCwgYWRkIHRoZSBjdXJyZW50CisgICAgICAgICAgICBpZihjb250cmFjdGlvbnNUYWJsZS0+Z2V0KFVuaWNvZGVTdHJpbmcoeHltLm5hbWUsIHh5bS5sZW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgIG5vdGVDb250cmFjdGlvbigiITUiLCB0b0FkZFRvLCB0b0FkZFRvU2l6ZSwgZmlyc3RSZXBbaV0sIHNlY29uZFJlcFtqXSwgbm9Db250cywgc3RhdHVzKTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwl9CisgICAgICB9CisgICAgICBpZih0aGFpKSB7IC8vIHJlc3RvcmUgbG93ZXIKKyAgICAgICAgbG93ZXIgPSAqZmlyc3RSZXBbaV07CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBub0NvbnRzOworfQorCit2b2lkCitTb3J0ZWRMaW5lczo6bm90ZUNvbnRyYWN0aW9uKGNvbnN0IGNoYXIqIG1zZywgTGluZSAqdG9BZGRUbywgaW50MzJfdCAmdG9BZGRUb1NpemUsIExpbmUgKmxlZnQsIExpbmUgKnJpZ2h0LCBpbnQzMl90ICZub0NvbnRzLCBVRXJyb3JDb2RlICZzdGF0dXMpIAoreworICBMaW5lIHRvQWRkOworICB0b0FkZC5zZXRUb0NvbmNhdChsZWZ0LCByaWdodCk7CisgIHRvQWRkLmxlZnQgPSBsZWZ0OworICB0b0FkZC5yaWdodCA9IHJpZ2h0OworICAvLyBpZiB3ZSdyZSBhZGRpbmcgYW4gYWNjZW50IHRvIGFuIGV4aXN0aW5nIGNvbnRyYWN0aW9uLCB3ZSB3YW50IHRvIGNoZWNrCisjaWYgMAorICBMaW5lIHRlc3QsIHRyaWFsMSwgdHJpYWwyOworICBpZihyaWdodC0+c3RyZW5ndGhGcm9tRW1wdHkgPiBVQ09MX1BSSU1BUlkpIHsKKyAgICBpZihsZWZ0LT5yaWdodCAmJiBsZWZ0LT5yaWdodC0+cHJldmlvdXMgJiYgbGVmdC0+cmlnaHQtPm5leHQpIHsKKyAgICAgIHRlc3Quc2V0VG9Db25jYXQobGVmdC0+bGVmdCwgbGVmdC0+cmlnaHQtPnByZXZpb3VzKTsKKyAgICAgIHRyaWFsMS5zZXRUb0NvbmNhdCgmdGVzdCwgcmlnaHQpOworCisgICAgICB0ZXN0LnNldFRvQ29uY2F0KGxlZnQtPmxlZnQsIGxlZnQtPnJpZ2h0LT5uZXh0KTsKKyAgICAgIHRyaWFsMi5zZXRUb0NvbmNhdCgmdGVzdCwgcmlnaHQpOworICAgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbDEsIHRvQWRkKSA8IDAgJiYgcHJvYmUuY29tcGFyZSh0b0FkZCwgdHJpYWwyKSA8IDApIHsKKyAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IHRoZSBjb250cmFjdGlvbiBoYXMgYmVlbiBicm9rZW4gYnkgdGhlIG5ld2x5IGFkZGVkIGFjY2VudAorICAgICAgICAvLyBzbyB3aGlsZSAnY2gnIGlzIGNvbnRyYWN0aW9uLCAnY2gnK2RvdF9hYm92ZSBzb3J0cyBiZXR3ZWVuICdjZycrZG90X2Fib3ZlIGFuZCAnY2knK2RvdF9hYm92ZQorICAgICAgICBkZWJ1Zy0+bG9nKCJDb24gLSIpOworICAgICAgICBkZWJ1Zy0+bG9nKG1zZyk7CisgICAgICAgIGRlYnVnLT5sb2codG9BZGQudG9TdHJpbmcoRkFMU0UpLCBUUlVFKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZihyaWdodC0+cHJldmlvdXMgJiYgcmlnaHQtPm5leHQpIHsKKyAgICAgICAgdHJpYWwxLnNldFRvQ29uY2F0KGxlZnQsIHJpZ2h0LT5wcmV2aW91cyk7CisgICAgICAgIHRyaWFsMi5zZXRUb0NvbmNhdChsZWZ0LCByaWdodC0+bmV4dCk7CisgICAgICAgIGlmKHByb2JlLmNvbXBhcmUodHJpYWwxLCB0b0FkZCkgPCAwICYmIHByb2JlLmNvbXBhcmUodG9BZGQsIHRyaWFsMikgPCAwKSB7CisgICAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IHRoZSBjb250cmFjdGlvbiBoYXMgYmVlbiBicm9rZW4gYnkgdGhlIG5ld2x5IGFkZGVkIGFjY2VudAorICAgICAgICAgIC8vIHNvIHdoaWxlICdjaCcgaXMgY29udHJhY3Rpb24sICdjaCcrZG90X2Fib3ZlIHNvcnRzIGJldHdlZW4gJ2NnJytkb3RfYWJvdmUgYW5kICdjaScrZG90X2Fib3ZlCisgICAgICAgICAgZGVidWctPmxvZygiQ29uIC0iKTsKKyAgICAgICAgICBkZWJ1Zy0+bG9nKG1zZyk7CisgICAgICAgICAgZGVidWctPmxvZyh0b0FkZC50b1N0cmluZyhGQUxTRSksIFRSVUUpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYobGVmdC0+cHJldmlvdXMgJiYgbGVmdC0+bmV4dCkgeworICAgICAgICB0cmlhbDEuc2V0VG9Db25jYXQobGVmdC0+cHJldmlvdXMsIHJpZ2h0KTsKKyAgICAgICAgdHJpYWwyLnNldFRvQ29uY2F0KGxlZnQtPm5leHQsIHJpZ2h0KTsKKyAgICAgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbDEsIHRvQWRkKSA8IDAgJiYgcHJvYmUuY29tcGFyZSh0b0FkZCwgdHJpYWwyKSA8IDApIHsKKyAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRyYWN0aW9uIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgbmV3bHkgYWRkZWQgYWNjZW50CisgICAgICAgICAgLy8gc28gd2hpbGUgJ2NoJyBpcyBjb250cmFjdGlvbiwgJ2NoJytkb3RfYWJvdmUgc29ydHMgYmV0d2VlbiAnY2cnK2RvdF9hYm92ZSBhbmQgJ2NpJytkb3RfYWJvdmUKKyAgICAgICAgICBkZWJ1Zy0+bG9nKCJDb24gLSIpOworICAgICAgICAgIGRlYnVnLT5sb2cobXNnKTsKKyAgICAgICAgICBkZWJ1Zy0+bG9nKHRvQWRkLnRvU3RyaW5nKEZBTFNFKSwgVFJVRSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisKKyAgICB9CisgIH0KKyAgaWYocmlnaHQtPnJpZ2h0ICYmIHJpZ2h0LT5yaWdodC0+c3RyZW5ndGhGcm9tRW1wdHkgPiBVQ09MX1BSSU1BUlkgJiYgcmlnaHQtPmxlZnQtPnByZXZpb3VzICYmIHJpZ2h0LT5sZWZ0LT5uZXh0KSB7IC8vIG1heWJlIHdlIGFscmVhZHkgaGFkIGEgY29udHJhY3Rpb24gd2l0aCBhbiBhY2NlbnQKKyAgICB0ZXN0LnNldFRvQ29uY2F0KHJpZ2h0LT5sZWZ0LT5wcmV2aW91cywgcmlnaHQtPnJpZ2h0KTsKKyAgICB0cmlhbDEuc2V0VG9Db25jYXQobGVmdCwgJnRlc3QpOworICAgIHRlc3Quc2V0VG9Db25jYXQocmlnaHQtPmxlZnQtPm5leHQsIHJpZ2h0LT5yaWdodCk7CisgICAgdHJpYWwyLnNldFRvQ29uY2F0KGxlZnQsICZ0ZXN0KTsKKyAgICBpZihwcm9iZS5jb21wYXJlKHRyaWFsMSwgdG9BZGQpIDwgMCAmJiBwcm9iZS5jb21wYXJlKHRvQWRkLCB0cmlhbDIpIDwgMCkgeworICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IHRoZSBjb250cmFjdGlvbiBoYXMgYmVlbiBicm9rZW4gYnkgdGhlIG5ld2x5IGFkZGVkIGFjY2VudAorICAgICAgLy8gc28gd2hpbGUgJ2NoJyBpcyBjb250cmFjdGlvbiwgJ2NoJytkb3RfYWJvdmUgc29ydHMgYmV0d2VlbiAnY2cnK2RvdF9hYm92ZSBhbmQgJ2NpJytkb3RfYWJvdmUKKyAgICAgIGRlYnVnLT5sb2coIkNvbiAtIik7CisgICAgICBkZWJ1Zy0+bG9nKG1zZyk7CisgICAgICBkZWJ1Zy0+bG9nKHRvQWRkLnRvU3RyaW5nKEZBTFNFKSwgVFJVRSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisjZW5kaWYKKyAgaWYoY29udHJhY3Rpb25zVGFibGUtPmdldChVbmljb2RlU3RyaW5nKHRvQWRkLm5hbWUsIHRvQWRkLmxlbikpID09IE5VTEwpIHsKKyAgICBpZihwcm9iZS5kaXN0YW5jZUZyb21FbXB0eVN0cmluZyh0b0FkZCkgPD0gVUNPTF9URVJUSUFSWSkgeworICAgICAgdG9BZGRUb1t0b0FkZFRvU2l6ZSsrXSA9IHRvQWRkOworICAgICAgY29udHJhY3Rpb25zVGFibGUtPnB1dChVbmljb2RlU3RyaW5nKHRvQWRkLm5hbWUsIHRvQWRkLmxlbiksICZ0b0FkZCwgc3RhdHVzKTsKKyAgICAgIG5vQ29udHMrKzsKKyAgICAgIGRlYnVnLT5sb2cobXNnKTsKKyAgICAgIGRlYnVnLT5sb2coIiBDb24gKyAiKTsKKyAgICAgIGRlYnVnLT5sb2codG9BZGQudG9TdHJpbmcoRkFMU0UpLCBUUlVFKTsKKworICAgICAgaWYoIWxlZnQtPnNvcnRLZXkpIHsKKyAgICAgICAgY2FsY3VsYXRlU29ydEtleSgqbGVmdCk7CisgICAgICB9CisgICAgICBkZWJ1Zy0+bG9nKGxlZnQtPmR1bXBTb3J0a2V5KCkpOworICAgICAgZGVidWctPmxvZygiICsgIik7CisKKyAgICAgIGlmKCFyaWdodC0+c29ydEtleSkgeworICAgICAgICBjYWxjdWxhdGVTb3J0S2V5KCpyaWdodCk7CisgICAgICB9CisgICAgICBkZWJ1Zy0+bG9nKHJpZ2h0LT5kdW1wU29ydGtleSgpKTsKKyAgICAgIGRlYnVnLT5sb2coIiA9ICIpOworCisgICAgICBjYWxjdWxhdGVTb3J0S2V5KHRvQWRkKTsKKyAgICAgIGRlYnVnLT5sb2codG9BZGQuZHVtcFNvcnRrZXkoKSwgVFJVRSk7CisgICAgICBpZihub0NvbnRzID4gc2l6ZS8yKSB7CisgICAgICAgIHN0YXR1cyA9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKK1VCb29sCitTb3J0ZWRMaW5lczo6Z2V0RXhwYW5zaW9uTGluZShjb25zdCBMaW5lICZleHBhbnNpb24sIGNvbnN0IExpbmUgJnByZXZpb3VzLCBjb25zdCBMaW5lICZleHAsIExpbmUgJmV4cGFuc2lvbkxpbmUpIAoreworICBpbnQgZXhwSW5kZXhTaXplID0gMDsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGV4cFN0cmVuZ3RoID0gVUNPTF9PRkY7CisgIGludDMyX3QgY29tcGFyaXNvblJlc3VsdCA9IDA7CisgIGludDMyX3QgaSA9IDAsIGsgPSAwLCBwcmV2SyA9IDA7CisgIExpbmUgdHJpYWw7CisgIFVCb29sIHNlcXVlbmNlQ29tcGxldGVkID0gRkFMU0U7CisgIGludDMyX3QgZXhwSW5kZXhlc1syNTZdOworICBpbnQzMl90IGV4cEluZGV4ZXNTaXplID0gMDsKKworICBpZighc2VxdWVuY2VDb21wbGV0ZWQpIHsKKyAgICBleHBJbmRleFNpemUgPSAwOworICAgIGV4cGFuc2lvbkxpbmUuY2xlYXIoKTsKKworICAgIC8vIHdlIHdpbGwgc3RhcnQgZnJvbSBzdHJlbmd0aCBiZXR3ZWVuIHRoZSBleHBhbnNpb24KKyAgICAvLyBhbmQgdGhlIHRhcmdldCAodG9Tb3J0W2ldIGFuZCB0b1NvcnRbal0uIEZpcnN0IHdlCisgICAgLy8gd2lsbCBhZGQgYXMgbWFueSBwcmltYXJpZXMgYXMgcG9zc2libGUuIFRoZW4gd2Ugd2lsbAorICAgIC8vIHRyeSB0byBhZGQgc2Vjb25kYXJ5IHBpZWNlcyBhbmQgdGhlbiB0ZXJ0aWFyeS4gCisgICAgLy8gZm91bmQgYW4gZXhwYW5zaW9uIC0gd2hhdCBpcyB0aGUgZXhwYW5kaW5nIHNlcXVlbmNlPworICAKKyAgICBleHBTdHJlbmd0aCA9IFVDT0xfUFJJTUFSWTsKKyAgICB3aGlsZSghc2VxdWVuY2VDb21wbGV0ZWQpIHsKKyAgICAgIGsgPSAwOworICAgICAgcHJldksgPSAwOworICAgICAgd2hpbGUoayA8IHNpemUpIHsKKyAgICAgICAgaWYoZXhwYW5zaW9uTGluZS5sZW4gPiAxNSkgeworICAgICAgICAgIHNlcXVlbmNlQ29tcGxldGVkID0gVFJVRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB3aGlsZShrIDwgc2l6ZSAmJiB0b1NvcnRba10tPnN0cmVuZ3RoICE9IFVDT0xfUFJJTUFSWSkgCisgICAgICAgIHsKKyAgICAgICAgICBrKys7CisgICAgICAgIH0KKyAgICAgICAgLy8gbm90aGluZyBmb3VuZAorICAgICAgICBpZihrID09IHNpemUpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyB3ZSBuZWVkIHRvIHNraXAgb3ZlciByZW9yZGVyaW5nIHRoaW5ncy4gSWYgdGhleSB3ZXJlIHdvcnRoeSwgdGhleSB3b3VsZAorICAgICAgICAvLyBoYXZlIGJlZW4gZGV0ZWN0ZWQgaW4gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4KKyAgICAgICAgLy9pZihleHBhbnNpb25MaW5lLmxhc3RDQyAmJiB0b1NvcnRba10tPmZpcnN0Q0MgJiYgZXhwYW5zaW9uTGluZS5sYXN0Q0MgPiB0b1NvcnRba10tPmZpcnN0Q0MpIHsKKyAgICAgICAgICAvL2srKzsKKyAgICAgICAgICAvL2NvbnRpbnVlOworICAgICAgICAvL30KKyAgICAgICAgdHJpYWwgPSBwcmV2aW91czsKKyAgICAgICAgdHJpYWwuYXBwZW5kKGV4cGFuc2lvbkxpbmUpOworICAgICAgICB0cmlhbC5hcHBlbmQoKnRvU29ydFtrXSk7ICAgICAgICAKKyAgICAgICAgaWYodG9Tb3J0W2tdLT5uYW1lWzBdID09IDB4MDA2NykgeworICAgICAgICAgIGludDMyX3QgcHV0QnJlYWtQb2ludEhlcmUgPSAwOworICAgICAgICB9CisgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBwcm9iZS5jb21wYXJlKHRyaWFsLCBleHBhbnNpb24pOworICAgICAgICBpZihjb21wYXJpc29uUmVzdWx0ID09IDApIHsKKyAgICAgICAgICBleHBhbnNpb25MaW5lID0gKnRvU29ydFtrXTsKKyAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uUmVzdWx0ID4gMCkgeworICAgICAgICAgIGlmKHByZXZLKSB7CisgICAgICAgICAgICBpZihleHAgPT0gKnRvU29ydFtwcmV2S10pIHsKKyAgICAgICAgICAgICAgZXhwYW5zaW9uTGluZSA9IGV4cDsKKyAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gcHJldks7CisgICAgICAgICAgICB3aGlsZShpIDwgay0xKSB7CisgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgaWYodG9Tb3J0W2ldLT5zdHJlbmd0aCA+IGV4cC5zdHJlbmd0aCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHRyaWFsID0gcHJldmlvdXM7CisgICAgICAgICAgICAgIHRyaWFsLmFwcGVuZChleHBhbnNpb25MaW5lKTsKKyAgICAgICAgICAgICAgdHJpYWwuYXBwZW5kKCp0b1NvcnRbaV0pOworICAgICAgICAgICAgICBpZihwcm9iZS5jb21wYXJlKHRyaWFsLCBleHBhbnNpb24pID4gMCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyB3ZSBnb3QgaW50byBzaXR1YXRpb24gd2hlcmUgd2UgaGF2ZSBjaCA+IGNoK2RvdC1iZWxvdworICAgICAgICAgICAgLy8gaG93ZXZlciwgY2ggaXMgYSBjb250cmFjdGlvbiBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCB1c2UKKyAgICAgICAgICAgIC8vIGl0IHByb3Blcmx5LiBJZiB3ZSBoYXZlIGhpdCBvbiBhIGNvbnRyYWN0aW9uLCB3ZSdsbCBqdXN0IHRyeQorICAgICAgICAgICAgLy8gdG8gY29udGludWUuIFByb2JhYmx5IG5lZWQgbW9yZSBsb2dpYyBoZXJlLgorICAgICAgICAgICAgaWYoY29udHJhY3Rpb25zVGFibGUtPmdldChVbmljb2RlU3RyaW5nKHRyaWFsLm5hbWUsIHRyaWFsLmxlbikpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgZXhwYW5zaW9uTGluZS5hcHBlbmQoKnRvU29ydFtpLTFdKTsKKyAgICAgICAgICAgICAgZXhwSW5kZXhlc1tleHBJbmRleFNpemUrK10gPSBpLTE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaW50MzJfdCBwdXRCcmVha1BvaW50SGVyZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlcXVlbmNlQ29tcGxldGVkID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICAvL2JyZWFrOworICAgICAgICB9CisgICAgICAgIHByZXZLID0gazsKKyAgICAgICAgaysrOworICAgICAgfQorICAgICAgaWYoIXByZXZLIHx8IGsgPT0gc2l6ZSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGV4cEluZGV4U2l6ZSA+IDA7Cit9CisKK2ludDMyX3QKK1NvcnRlZExpbmVzOjpnb29zZVVwKGludDMyX3QgcmVzZXRJbmRleCwgaW50MzJfdCBleHBhbnNpb25JbmRleCwgTGluZSAmZXhwTGluZSwgaW50MzJfdCAqZXhwSW5kZXhlcywgaW50MzJfdCAmZXhwSW5kZXhTaXplLCBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGgpIAoreworICBpbnQzMl90IGkgPSBleHBhbnNpb25JbmRleCwgayA9IHJlc2V0SW5kZXgrMSwgbiA9IDAsIG0gPSAwLCBzdGFydCA9IDA7CisgIFVCb29sIGhhdmVDaGFuZ2VzID0gRkFMU0U7CisgIExpbmUgdHJpYWwsIHByZWZpeCwgc3VmZml4OworICAvLyB3ZSB3aWxsIGZpcnN0IHRyeSBnb29zaW5nIHVwIHRoZSByZXNldCBpbmRleAorICAvL3doaWxlKHRvU29ydFtrXS0+c3RyZW5ndGggPj0gc3RyZW5ndGgpCisgIGZvciggOyB0b1NvcnRba10tPnN0cmVuZ3RoID09IHN0cmVuZ3RoOyBrKyspIAorICB7CisgICAgLy9pZih0b1NvcnRba10tPnN0cmVuZ3RoID4gc3RyZW5ndGgpIHsKKyAgICAgIC8vY29udGludWU7CisgICAgLy99CisgICAgdHJpYWwuc2V0VG9Db25jYXQodG9Tb3J0W2tdLCAmZXhwTGluZSk7CisgICAgaWYocHJvYmUuY29tcGFyZSh0cmlhbCwgKnRvU29ydFtpXSkgPiAwKSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmVzZXRJbmRleCA9IGstMTsKKworICAvLyBnb29zZSB1cCBpbmRpdmlkdWFsIGNoYXJhY3RlcnMKKyAgcHJlZml4ID0gKnRvU29ydFtyZXNldEluZGV4XTsKKyAgZm9yKG4gPSAwOyBuIDwgZXhwSW5kZXhTaXplOyBuKyspIHsKKyAgICBzdWZmaXguY2xlYXIoKTsKKyAgICBmb3IobSA9IG4rMTsgbSA8IGV4cEluZGV4U2l6ZTsgbSsrKSB7CisgICAgICBzdWZmaXguYXBwZW5kKCp0b1NvcnRbZXhwSW5kZXhlc1ttXV0pOworICAgIH0KKyAgICBrID0gZXhwSW5kZXhlc1tuXSsxOworICAgIC8vd2hpbGUodG9Tb3J0W2tdLT5zdHJlbmd0aCA+PSBzdHJlbmd0aCkKKyAgICBmb3IoIDsgdG9Tb3J0W2tdLT5zdHJlbmd0aCA9PSBzdHJlbmd0aDsgaysrKSAKKyAgICB7CisgICAgICAvL2lmKHRvU29ydFtrXS0+c3RyZW5ndGggPiBzdHJlbmd0aCkgeworICAgICAgICAvL2NvbnRpbnVlOworICAgICAgLy99CisgICAgICB0cmlhbC5zZXRUb0NvbmNhdCgmcHJlZml4LCB0b1NvcnRba10pOworICAgICAgdHJpYWwuYXBwZW5kKHN1ZmZpeCk7CisgICAgICBpZihwcm9iZS5jb21wYXJlKHRyaWFsLCAqdG9Tb3J0W2ldKSA+IDApIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmKGsgPiBleHBJbmRleGVzW25dKzEpIHsKKyAgICAgIGhhdmVDaGFuZ2VzID0gVFJVRTsKKyAgICAgIGV4cEluZGV4ZXNbbl0gPSBrLTE7CisgICAgfQorICAgIHByZWZpeC5hcHBlbmQoKnRvU29ydFtleHBJbmRleGVzW25dXSk7CisgIH0KKworICAvLyB0cnkgaW5zZXJ0aW5nIGluZ29yYWJsZXMKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGxhc3RTdHIgPSBVQ09MX09GRjsKKyAgayA9IDA7CisgIHdoaWxlKHRvU29ydFtrXS0+c3RyZW5ndGhGcm9tRW1wdHkgPiBzdHJlbmd0aCkgeworICAgIGsrKzsKKyAgfQorICBpZih0b1NvcnRba10tPnN0cmVuZ3RoRnJvbUVtcHR5ID09IHN0cmVuZ3RoKSB7CisgICAgc3RhcnQgPSBrOworICAgIHByZWZpeCA9ICp0b1NvcnRbcmVzZXRJbmRleF07CisgICAgbiA9IDA7CisgICAgd2hpbGUobiA8PSBleHBJbmRleFNpemUpIHsKKyAgICAgIHN1ZmZpeC5jbGVhcigpOworICAgICAgZm9yKG0gPSBuOyBtIDwgZXhwSW5kZXhTaXplOyBtKyspIHsKKyAgICAgICAgc3VmZml4LmFwcGVuZCgqdG9Tb3J0W2V4cEluZGV4ZXNbbV1dKTsKKyAgICAgIH0KKyAgICAgIGsgPSBzdGFydDsKKyAgICAgIHdoaWxlKHRvU29ydFtrXS0+c3RyZW5ndGhGcm9tRW1wdHkgPT0gc3RyZW5ndGgpIHsKKyAgICAgICAgdHJpYWwuc2V0VG9Db25jYXQoJnByZWZpeCwgdG9Tb3J0W2tdKTsKKyAgICAgICAgdHJpYWwuYXBwZW5kKHN1ZmZpeCk7CisgICAgICAgIGxhc3RTdHIgPSBwcm9iZS5nZXRTdHJlbmd0aCh0cmlhbCwgKnRvU29ydFtpXSk7CisgICAgICAgIGlmKGxhc3RTdHIgPT0gVUNPTF9PRkYpIHsgLy8gc2hvdCBvdmVyIC0gd2Ugd29uJ3QgZmluZCBhbnl0aGluZyBoZXJlCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZihsYXN0U3RyID4gc3RyZW5ndGgpIHsKKyAgICAgICAgICBmb3IobSA9IGV4cEluZGV4U2l6ZTsgbSA+IG47IG0tLSkgeworICAgICAgICAgICAgZXhwSW5kZXhlc1ttXSA9IGV4cEluZGV4ZXNbbS0xXTsKKyAgICAgICAgICB9CisgICAgICAgICAgZXhwSW5kZXhlc1tuXSA9IGs7CisgICAgICAgICAgZXhwSW5kZXhTaXplKys7CisgICAgICAgICAgaGF2ZUNoYW5nZXMgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgMAorICAgICAgICBpZihwcm9iZS5jb21wYXJlKHRyaWFsLCAqdG9Tb3J0W2ldKSA+IDApIHsKKyAgICAgICAgICAvLyBpZiB0aGUgZmlyc3Qgb25lIHNraXBzLCB0aGF0IG1lYW5zIHRoYXQKKyAgICAgICAgICAvLyB0aGlzIHBvc2l0aW9uIGRvZXNuJ3Qgd29yaworICAgICAgICAgIGlmKGsgPiBzdGFydCkgeworICAgICAgICAgICAgLy8gaW5zZXJ0IGFuIGlnbm9yYWJsZSBvbiBwb3NpdGlvbiBuCisgICAgICAgICAgICBmb3IobSA9IGV4cEluZGV4U2l6ZTsgbSA+IG47IG0tLSkgeworICAgICAgICAgICAgICBleHBJbmRleGVzW21dID0gZXhwSW5kZXhlc1ttLTFdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwSW5kZXhlc1tuXSA9IGstMTsKKyAgICAgICAgICAgIGV4cEluZGV4U2l6ZSsrOworICAgICAgICAgICAgaGF2ZUNoYW5nZXMgPSBUUlVFOworICAgICAgICAgICAgaWYobiA9PSBleHBJbmRleFNpemUtMSkgeyAvLyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0ciA9IHByb2JlLmdldFN0cmVuZ3RoKHRyaWFsLCAqdG9Tb3J0W2ldKTsKKyAgICAgICAgICAgICAgaW50MzJfdCBwdXRCcmVha0hlcmUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsYXN0U3RyID0gcHJvYmUuZ2V0U3RyZW5ndGgodHJpYWwsICp0b1NvcnRbaV0pOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaysrOworICAgICAgfQorICAgICAgcHJlZml4LmFwcGVuZCgqdG9Tb3J0W2V4cEluZGV4ZXNbbl1dKTsKKyAgICAgIG4rKzsKKyAgICB9CisgIH0KKworICBpZihoYXZlQ2hhbmdlcykgeworICAgIGV4cExpbmUuY2xlYXIoKTsKKyAgICBmb3IobSA9IDA7IG0gPCBleHBJbmRleFNpemU7IG0rKykgeworICAgICAgZXhwTGluZS5hcHBlbmQoKnRvU29ydFtleHBJbmRleGVzW21dXSk7CisgICAgfQorICB9CisgIHJldHVybiByZXNldEluZGV4OworfQorCitpbnQzMl90IAorU29ydGVkTGluZXM6OmRldGVjdEV4cGFuc2lvbnMoKSAKK3sKKyAgbG9nZ2VyLT5sb2coIlxuKioqIERldGVjdGluZyBleHBhbnNpb25zXG5cbiIpOworICBpbnQzMl90IGV4Q291bnQgPSAwOworICBpbnQzMl90IGkgPSAwLCBqID0gMCwgayA9IDAsIHByZXZLID0gMDsKKyAgTGluZSAqcHJldmlvdXMsIHRyaWFsLCBleHBhbnNpb25MaW5lOworICBVQm9vbCBmb3VuZEV4cCA9IEZBTFNFLCBzZXF1ZW5jZUNvbXBsZXRlZCA9IEZBTFNFOworICBVQ29sQXR0cmlidXRlVmFsdWUgc3RyZW5ndGggPSBVQ09MX09GRjsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIG1heFN0cmVuZ3RoID0gVUNPTF9JREVOVElDQUw7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBleHBTdHJlbmd0aCA9IFVDT0xfT0ZGOworICBpbnQzMl90IGV4cEluZGV4ZXNbMjU2XTsKKyAgaW50MzJfdCBleHBJbmRleFNpemUgPSAwOworICBtZW1zZXQoZXhwSW5kZXhlcywgMCwgc2l6ZW9mKGV4cEluZGV4ZXMpKTsKKworICAvLyBmb3IgZWFjaCBlbGVtZW50LCB3ZSBsb29rIGJhY2sgdG8gZmluZCB3aGV0aGVyIHRoZXJlIGlzIHN1Y2ggYSBxIGZvciB3aGljaAorICAvLyBxIDxuIHggPCBxVUJuLiBUaGVzZSBhcmUgcG9zc2libGUgZXhwYW5zaW9ucy4gV2hlbiBnb2luZyBiYWNrd2FyZHMgd2Ugc2tpcCAKKyAgLy8gb3ZlciBhbHJlYWR5IGRldGVjdGVkIGV4cGFuc2lvbnMuCisgIGkgPSAwOworICAvLyBpdCB0dXJucyBvdXQgdGhhdCBsb29raW5nIGF0IGFjY2VudHMgYXMgcG9zc2libGUgZXhwYW5zaW9ucyBpcworICAvLyBxdWl0ZSBhIHN0dXBpZCB0aGluZyB0byBkbywgZXNwZWNpYWxseSBvbiBub24gSUNVIHBsYXRmb3Jtcy4KKyAgLy8gUHJldmlvdXNseSB0aGlzIGxpbmUgc2tpcHBlZCBvdmVyIGlkZW50aWNhbHMgb25seSwgYnV0IAorICAvLyBub3cgd2UgYXJlIGdvaW5nIHRvIHNraXAgYWxsIHRoZSB3YXkgdG8gbm9uLWlnbm9yYWJsZXMuCisgIHdoaWxlKHRvU29ydFtpXS0+c3RyZW5ndGhGcm9tRW1wdHkgPiBVQ09MX1BSSU1BUlkpIHsKKyAgICBpKys7CisgIH0KKyAgaSsrOworICBmb3IoIDsgaSA8IHNpemU7IGkrKykgeworICAgIGlmKHRvU29ydFtpXS0+bmFtZVswXT09MHgwMDYzICYmIHRvU29ydFtpXS0+bmFtZVsxXSA9PSAweDY4KSAvLyAmJiB0b1NvcnRbaV0tPm5hbWVbMV0gPT0gMHgzMDgpMDA0MyAwMDQzIDAyMTkKKyAgICB7IAorICAgICAgaW50MzJfdCBwdXRCcmVha3BvaW50aGVyZSA9IDA7CisgICAgfQorICAgIGZvdW5kRXhwID0gRkFMU0U7CisgICAgc2VxdWVuY2VDb21wbGV0ZWQgPSBGQUxTRTsKKyAgICBzdHJlbmd0aCA9IHRvU29ydFtpXS0+c3RyZW5ndGg7CisgICAgaWYoc3RyZW5ndGggPT0gVUNPTF9JREVOVElDQUwgJiYgdG9Tb3J0W2ktMV0tPmlzRXhwYW5zaW9uID09IFRSVUUpIHsKKyAgICAgIHVfc3RyY3B5KHRvU29ydFtpXS0+ZXhwYW5zaW9uU3RyaW5nLCB0b1NvcnRbaS0xXS0+ZXhwYW5zaW9uU3RyaW5nKTsKKyAgICAgIHRvU29ydFtpXS0+ZXhwTGVuID0gdG9Tb3J0W2ktMV0tPmV4cExlbjsKKyAgICAgIHRvU29ydFtpXS0+aXNFeHBhbnNpb24gPSBUUlVFOworICAgICAgdG9Tb3J0W2ldLT5leHBJbmRleCA9IHRvU29ydFtpLTFdLT5leHBJbmRleDsKKyAgICAgIHRvU29ydFtpXS0+ZXhwU3RyZW5ndGggPSBVQ09MX0lERU5USUNBTDsKKyAgICAgIC8vdG9Tb3J0W2ldLT5leHBTdHJlbmd0aCA9IHRvU29ydFtpLTFdLT5leHBTdHJlbmd0aDsKKyAgICAgIGZvdW5kRXhwID0gVFJVRTsKKyAgICAgIHNlcXVlbmNlQ29tcGxldGVkID0gVFJVRTsKKyAgICB9CisgICAgLy9sb2dnZXItPmxvZygiJWkgJWlcbiIsIGksIGopOworICAgIHdoaWxlKCFmb3VuZEV4cCAmJiBzdHJlbmd0aCA8PSBtYXhTdHJlbmd0aCkgeworICAgICAgaiA9IGktMTsKKyAgICAgIHdoaWxlKGogJiYgKHRvU29ydFtqXS0+aXNFeHBhbnNpb24gPT0gVFJVRSB8fCB0b1NvcnRbal0tPmlzUmVtb3ZlZCA9PSBUUlVFKSkgeworICAgICAgICAvL2lmKHRvU29ydFtqXS0+c3RyZW5ndGggPCBzdHJlbmd0aCkgeworICAgICAgICAgIC8vc3RyZW5ndGggPSB0b1NvcnRbal0tPnN0cmVuZ3RoOworICAgICAgICAvL30KKyAgICAgICAgai0tOworICAgICAgfQorCisgICAgICAvL3doaWxlKGogJiYgdG9Tb3J0W2pdLT5zdHJlbmd0aCA+IHN0cmVuZ3RoKQorICAgICAgd2hpbGUoaiAmJiB0b1NvcnRbal0tPnN0cmVuZ3RoID4gcHJvYmUuZ2V0U3RyZW5ndGgoKnRvU29ydFtqXSwgKnRvU29ydFtpXSkpCisgICAgICB7CisgICAgICAgIGotLTsKKyAgICAgIH0KKyAgICAgIC8vaWYodG9Tb3J0W2pdLT5zdHJlbmd0aCA9PSBzdHJlbmd0aCkgeworICAgICAgICBwcmV2aW91cyA9IHRvU29ydFtqXTsKKyAgICAgICAgaWYocHJldmlvdXMtPnN0cmVuZ3RoRnJvbUVtcHR5ID49IFVDT0xfSURFTlRJQ0FMIHx8CisgICAgICAgICAgKHByZXZpb3VzLT5zdHJlbmd0aEZyb21FbXB0eSA9PSBVQ09MX1NFQ09OREFSWQorICAgICAgICAgICYmIHN0cmVuZ3RoID09IFVDT0xfU0VDT05EQVJZCisgICAgICAgICAgJiYgcHJldmlvdXMtPmxhc3RDQyA+IFVCW3N0cmVuZ3RoXS0+Zmlyc3RDQykpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICAvL2NvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vdHJpYWwuc2V0VG9Db25jYXQocHJldmlvdXMsIFVCW3N0cmVuZ3RoXSk7CisgICAgICAgIHRyaWFsLnNldFRvQ29uY2F0KHByZXZpb3VzLCBVQltwcm9iZS5nZXRTdHJlbmd0aCgqdG9Tb3J0W2pdLCAqdG9Tb3J0W2ldKV0pOworICAgICAgICBpZihwcm9iZS5jb21wYXJlKHRyaWFsLCAqdG9Tb3J0W2ldKSA+IDApIHsKKyAgICAgICAgICBmb3VuZEV4cCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgIC8vfQorICAgICAgaWYoc3RyZW5ndGggPT0gVUNPTF9RVUFURVJOQVJZKSB7CisgICAgICAgIHN0cmVuZ3RoID0gVUNPTF9JREVOVElDQUw7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdHJlbmd0aCA9IChVQ29sQXR0cmlidXRlVmFsdWUpKHN0cmVuZ3RoICsgMSk7CisgICAgICB9CisgICAgfQorICAgIC8vIGNhbGN1bGF0ZSB0aGUgZXhwYW5kaW5nIHNlcXVlbmNlCisgICAgaWYoZm91bmRFeHAgJiYgIXNlcXVlbmNlQ29tcGxldGVkKSB7CisgICAgICBleHBJbmRleFNpemUgPSAwOworICAgICAgZXhwYW5zaW9uTGluZS5jbGVhcigpOworICAgICAgZXhDb3VudCsrOworICAgICAgLy8gd2Ugd2lsbCBzdGFydCBmcm9tIHN0cmVuZ3RoIGJldHdlZW4gdGhlIGV4cGFuc2lvbgorICAgICAgLy8gYW5kIHRoZSB0YXJnZXQgKHRvU29ydFtpXSBhbmQgdG9Tb3J0W2pdLiBGaXJzdCB3ZQorICAgICAgLy8gd2lsbCBhZGQgYXMgbWFueSBwcmltYXJpZXMgYXMgcG9zc2libGUuIFRoZW4gd2Ugd2lsbAorICAgICAgLy8gdHJ5IHRvIGFkZCBzZWNvbmRhcnkgcGllY2VzIGFuZCB0aGVuIHRlcnRpYXJ5LiAKKyAgICAgIC8vIGZvdW5kIGFuIGV4cGFuc2lvbiAtIHdoYXQgaXMgdGhlIGV4cGFuZGluZyBzZXF1ZW5jZT8KKyAgICAgIAorICAgICAgZXhwU3RyZW5ndGggPSBVQ09MX1BSSU1BUlk7CisgICAgICB3aGlsZSghc2VxdWVuY2VDb21wbGV0ZWQpIHsKKyAgICAgICAgayA9IDA7CisgICAgICAgIHByZXZLID0gMDsKKyAgICAgICAgd2hpbGUoayA8IHNpemUpIHsKKyAgICAgICAgICBpZihleHBhbnNpb25MaW5lLmxlbiA+IDE1KSB7CisgICAgICAgICAgICBzZXF1ZW5jZUNvbXBsZXRlZCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUoayA8IHNpemUgJiYgdG9Tb3J0W2tdLT5zdHJlbmd0aCAhPSBVQ09MX1BSSU1BUlkpIHsKKyAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgLy8gbm90aGluZyBmb3VuZAorICAgICAgICAgIGlmKGsgPT0gc2l6ZSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIHdlIG5lZWQgdG8gc2tpcCBvdmVyIHJlb3JkZXJpbmcgdGhpbmdzLiBJZiB0aGV5IHdlcmUgd29ydGh5LCB0aGV5IHdvdWxkCisgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRldGVjdGVkIGluIHRoZSBwcmV2aW91cyBpdGVyYXRpb24uCisgICAgICAgICAgLy9pZihleHBhbnNpb25MaW5lLmxhc3RDQyAmJiB0b1NvcnRba10tPmZpcnN0Q0MgJiYgZXhwYW5zaW9uTGluZS5sYXN0Q0MgPiB0b1NvcnRba10tPmZpcnN0Q0MpIHsKKyAgICAgICAgICAgIC8vaysrOworICAgICAgICAgICAgLy9jb250aW51ZTsKKyAgICAgICAgICAvL30KKyAgICAgICAgICB0cmlhbCA9ICpwcmV2aW91czsKKyAgICAgICAgICB0cmlhbC5hcHBlbmQoZXhwYW5zaW9uTGluZSk7CisgICAgICAgICAgdHJpYWwuYXBwZW5kKCp0b1NvcnRba10pOyAgICAgICAgCisgICAgICAgICAgaWYodG9Tb3J0W2tdLT5uYW1lWzBdID09IDB4MDA2NykgeworICAgICAgICAgICAgaW50MzJfdCBwdXRCcmVha1BvaW50SGVyZSA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGlmKHByb2JlLmNvbXBhcmUodHJpYWwsICp0b1NvcnRbaV0pID4gMCkgeworICAgICAgICAgICAgaWYocHJldkspIHsKKyAgICAgICAgICAgICAgLy8gd2UgZ290IGludG8gc2l0dWF0aW9uIHdoZXJlIHdlIGhhdmUgY2ggPiBjaCtkb3QtYmVsb3cKKyAgICAgICAgICAgICAgLy8gaG93ZXZlciwgY2ggaXMgYSBjb250cmFjdGlvbiBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCB1c2UKKyAgICAgICAgICAgICAgLy8gaXQgcHJvcGVybHkuIElmIHdlIGhhdmUgaGl0IG9uIGEgY29udHJhY3Rpb24sIHdlJ2xsIGp1c3QgdHJ5CisgICAgICAgICAgICAgIC8vIHRvIGNvbnRpbnVlLiBQcm9iYWJseSBuZWVkIG1vcmUgbG9naWMgaGVyZS4KKyAgICAgICAgICAgICAgaWYoY29udHJhY3Rpb25zVGFibGUtPmdldChVbmljb2RlU3RyaW5nKHRyaWFsLm5hbWUsIHRyaWFsLmxlbikpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBleHBhbnNpb25MaW5lLmFwcGVuZCgqdG9Tb3J0W3ByZXZLXSk7CisgICAgICAgICAgICAgICAgZXhwSW5kZXhlc1tleHBJbmRleFNpemUrK10gPSBwcmV2SzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHB1dEJyZWFrUG9pbnRIZXJlID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgc2VxdWVuY2VDb21wbGV0ZWQgPSBUUlVFOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIHByZXZLID0gazsKKyAgICAgICAgICBrKys7CisgICAgICAgIH0KKyAgICAgICAgaWYoIXByZXZLIHx8IGsgPT0gc2l6ZSkgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICAvLyBhZnRlciB0aGlzIHdlIGhhdmUgcHJpbWFyaWVzIGxpbmVkIHVwLgorICAgICAgLy8gd2UgYXJlIGdvaW5nIHRvIGdvb3NlIHVwIHdpdGggc2Vjb25kYXJpZXMgYW5kIAorICAgICAgLy8gdGVydGlhcmllcworICAgICAgdHJpYWwuc2V0VG9Db25jYXQodG9Tb3J0W2pdLCAmZXhwYW5zaW9uTGluZSk7CisgICAgICBleHBTdHJlbmd0aCA9IHByb2JlLmdldFN0cmVuZ3RoKHRyaWFsLCAqdG9Tb3J0W2ldKTsKKyAgICAgIGlmKGV4cFN0cmVuZ3RoID4gVUNPTF9QUklNQVJZKSB7CisgICAgICAgIGlmKGV4cFN0cmVuZ3RoID09IFVDT0xfU0VDT05EQVJZIHx8IGV4cFN0cmVuZ3RoID09IFVDT0xfT0ZGKSB7CisgICAgICAgICAgaiA9IGdvb3NlVXAoaiwgaSwgZXhwYW5zaW9uTGluZSwgZXhwSW5kZXhlcywgZXhwSW5kZXhTaXplLCBVQ09MX1NFQ09OREFSWSk7CisgICAgICAgICAgdHJpYWwuc2V0VG9Db25jYXQodG9Tb3J0W2pdLCAmZXhwYW5zaW9uTGluZSk7CisgICAgICAgICAgZXhwU3RyZW5ndGggPSBwcm9iZS5nZXRTdHJlbmd0aCh0cmlhbCwgKnRvU29ydFtpXSk7CisgICAgICAgICAgaWYoZXhwU3RyZW5ndGggPT0gVUNPTF9URVJUSUFSWSkgeworICAgICAgICAgICAgaiA9IGdvb3NlVXAoaiwgaSwgZXhwYW5zaW9uTGluZSwgZXhwSW5kZXhlcywgZXhwSW5kZXhTaXplLCBVQ09MX1RFUlRJQVJZKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZihleHBTdHJlbmd0aCA9PSBVQ09MX1RFUlRJQVJZKSB7CisgICAgICAgICAgaiA9IGdvb3NlVXAoaiwgaSwgZXhwYW5zaW9uTGluZSwgZXhwSW5kZXhlcywgZXhwSW5kZXhTaXplLCBVQ09MX1RFUlRJQVJZKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgdHJpYWwuc2V0VG9Db25jYXQodG9Tb3J0W2pdLCAmZXhwYW5zaW9uTGluZSk7CisgICAgICBleHBTdHJlbmd0aCA9IHByb2JlLmdldFN0cmVuZ3RoKHRyaWFsLCAqdG9Tb3J0W2ldKTsKKyAgICAgIGlmKGV4cGFuc2lvbkxpbmUubGVuKSB7CisgICAgICAgIGlmKGV4cGFuc2lvbkxpbmUubmFtZVswXSA9PSAweDczICYmIGV4cGFuc2lvbkxpbmUubmFtZVsxXSA9PSAweDdhKSB7CisgICAgICAgICAgaW50MzJfdCBwdXRCcmVha3BvaW50aGVyZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgVUJvb2wgaXNFeHBhbnNpb25MaW5lQUNvbnRyYWN0aW9uID0gKGNvbnRyYWN0aW9uc1RhYmxlLT5nZXQoVW5pY29kZVN0cmluZyhleHBhbnNpb25MaW5lLm5hbWUsIGV4cGFuc2lvbkxpbmUubGVuKSkgIT0gTlVMTCk7CisgICAgICAgIC8vIHdlIGhhdmUgYW4gZXhwYW5zaW9uIGxpbmUgYW5kIGFuIGV4cGFuc2lvbi4gVGhlcmUgY291bGQgYmUgc29tZSBleHBhbnNpb25zIHdoZXJlIAorICAgICAgICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGV4cGFuc2lvbiBsaW5lIGFuZCB0aGUgZW5kIG9mIGV4cGFuc2lvbiBzZXF1ZW5jZSBpcyBsZXNzIG9yIAorICAgICAgICAvLyBlcXVhbCB0aGFuIHRoZSBleHBhbnNpb24gc3RyZW5ndGguIFRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkLgorICAgICAgICBpbnQzMl90IGRpZmZMZW4gPSB0b1NvcnRbaV0tPmxlbiAtIGV4cGFuc2lvbkxpbmUubGVuOworICAgICAgICBpZihkaWZmTGVuID4gMCkgeworICAgICAgICAgIHRyaWFsLnNldFRvKFVuaWNvZGVTdHJpbmcodG9Tb3J0W2ldLT5uYW1lICsgZGlmZkxlbiwgdG9Tb3J0W2ldLT5sZW4gLSBkaWZmTGVuKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdHJpYWwgPSAqdG9Tb3J0W2ldOworICAgICAgICB9CisgICAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzMSA9IHByb2JlLmdldFN0cmVuZ3RoKHRyaWFsLCBleHBhbnNpb25MaW5lKTsKKyAgICAgICAgaWYoczEgPT0gVUNPTF9PRkYpIHsKKyAgICAgICAgICBzMSA9IHByb2JlLmdldFN0cmVuZ3RoKGV4cGFuc2lvbkxpbmUsIHRyaWFsKTsKKyAgICAgICAgfQorICAgICAgICBpZigoIWlzRXhwYW5zaW9uTGluZUFDb250cmFjdGlvbiAmJiBzMSA+PSBleHBTdHJlbmd0aCkgfHwgKGRpZmZMZW4gPD0gMCAmJiBzMSA9PSBVQ09MX0lERU5USUNBTCkpIHsKKyAgICAgICAgICBjb250cmFjdGlvbnNUYWJsZS0+cmVtb3ZlKFVuaWNvZGVTdHJpbmcodG9Tb3J0W2ldLT5uYW1lLCB0b1NvcnRbaV0tPmxlbikpOworICAgICAgICAgIHRvU29ydFtpXS0+aXNSZW1vdmVkID0gVFJVRTsKKyAgICAgICAgICBpZih0b1NvcnRbaV0tPm5leHQgJiYgdG9Tb3J0W2ldLT5wcmV2aW91cykgeworICAgICAgICAgICAgdG9Tb3J0W2ldLT5wcmV2aW91cy0+bmV4dCA9IHRvU29ydFtpXS0+bmV4dDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYodG9Tb3J0W2ldLT5wcmV2aW91cyAmJiB0b1NvcnRbaV0tPm5leHQpIHsKKyAgICAgICAgICAgIHRvU29ydFtpXS0+bmV4dC0+cHJldmlvdXMgPSB0b1NvcnRbaV0tPnByZXZpb3VzOworICAgICAgICAgIH0KKwkgICAgICBkZWJ1Zy0+bG9nKCJFeHAgLU46ICIpOworCSAgICAgIGRlYnVnLT5sb2codG9Tb3J0W2ldLT50b1N0cmluZyhGQUxTRSkpOworCSAgICAgIGRlYnVnLT5sb2coIiAvICIpOworCSAgICAgIGRlYnVnLT5sb2coZXhwYW5zaW9uTGluZS50b1N0cmluZyhGQUxTRSksIFRSVUUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeyAgICAgICAgIAorICAgICAgICAgIHVfc3RybmNhdCh0b1NvcnRbaV0tPmV4cGFuc2lvblN0cmluZywgZXhwYW5zaW9uTGluZS5uYW1lLCBleHBhbnNpb25MaW5lLmxlbik7CisgICAgICAgICAgdG9Tb3J0W2ldLT5pc0V4cGFuc2lvbiA9IFRSVUU7CisgICAgICAgICAgdG9Tb3J0W2ldLT5leHBTdHJlbmd0aCA9IGV4cFN0cmVuZ3RoOworICAgICAgICAgIHRvU29ydFtpXS0+ZXhwTGVuID0gZXhwYW5zaW9uTGluZS5sZW47CisgICAgICAgICAgdG9Tb3J0W2ldLT5leHBhbnNpb25TdHJpbmdbdG9Tb3J0W2ldLT5leHBMZW5dID0gMDsKKyAgICAgICAgICB0b1NvcnRbaV0tPmV4cEluZGV4ID0gajsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZih0b1NvcnRbaV0tPmlzRXhwYW5zaW9uID09IFRSVUUpIHsKKyAgICAgIGlmKGRlYnVnLT5pc09uKCkpIHsKKyAgICAgICAgZGVidWctPmxvZygiRXhwICsgOiAmIik7CisgICAgICAgIGRlYnVnLT5sb2codG9Tb3J0W2pdLT50b1N0cmluZyhGQUxTRSkpOworICAgICAgICBkZWJ1Zy0+bG9nKHRvU29ydFtpXS0+c3RyZW5ndGhUb1N0cmluZyh0b1NvcnRbaV0tPmV4cFN0cmVuZ3RoLCBUUlVFKSk7CisgICAgICAgIGRlYnVnLT5sb2codG9Tb3J0W2ldLT50b1N0cmluZyhGQUxTRSkpOworICAgICAgICBkZWJ1Zy0+bG9nKCIgIik7CisgICAgICAgIGlmKCF0b1NvcnRbal0tPnNvcnRLZXkpIHsKKyAgICAgICAgICBjYWxjdWxhdGVTb3J0S2V5KCp0b1NvcnRbal0pOworICAgICAgICB9CisgICAgICAgIGRlYnVnLT5sb2codG9Tb3J0W2pdLT5kdW1wU29ydGtleSgpKTsKKyAgICAgICAgZGVidWctPmxvZygiIC4uLiAiKTsKKyAgICAgICAgaWYoIXRvU29ydFtpXS0+c29ydEtleSkgeworICAgICAgICAgIGNhbGN1bGF0ZVNvcnRLZXkoKnRvU29ydFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgZGVidWctPmxvZyh0b1NvcnRbaV0tPmR1bXBTb3J0a2V5KCkpOworICAgICAgICBjYWxjdWxhdGVTb3J0S2V5KGV4cGFuc2lvbkxpbmUpOworICAgICAgICBkZWJ1Zy0+bG9nKCIvIik7CisgICAgICAgIGRlYnVnLT5sb2coZXhwYW5zaW9uTGluZS5kdW1wU29ydGtleSgpLCBUUlVFKTsKKyAgICAgIH0KKyAgICAgIAorICAgIH0KKyAgfQorICAvLyBhZnRlciBkZXRlY3RpbmcgZXhwYW5zaW9ucywgd2Ugd2FudCB0byBwb3NpdGlvbiB0aGVtLiAKKyAgLy8gaXQgaXMgYmV0dGVyIHRvIHBvc2l0aW9uIGV4cGFuc2lvbnMgYWZ0ZXIgYWxsIGhhdmUgYmVlbiBkZXRlY3RlZCwKKyAgLy8gc2luY2Ugb3RoZXJ3aXNlIHdlIHdpbGwgY2hhbmdlIHRoZSBvcmRlcmluZy4KKyAgZm9yKGkgPSBzaXplLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgaWYodG9Tb3J0W2ldLT5pc0V4cGFuc2lvbikgeworICAgICAgaWYodG9Tb3J0W2ldLT5uYW1lWzBdID09IDB4MkEzKSB7CisgICAgICAgIGludDMyX3QgcHV0QnJlYWtQb2ludEhlcmUgPSAwOworICAgICAgfQorICAgICAgaWYoaSkgeworICAgICAgICBpZih0b1NvcnRbaV0tPnByZXZpb3VzKSB7CisgICAgICAgICAgdG9Tb3J0W2ldLT5wcmV2aW91cy0+bmV4dCA9IHRvU29ydFtpXS0+bmV4dDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYoaSA8IHNpemUtMSkgeworICAgICAgICBpZih0b1NvcnRbaV0tPm5leHQpIHsKKyAgICAgICAgICB0b1NvcnRbaV0tPm5leHQtPnByZXZpb3VzID0gdG9Tb3J0W2ldLT5wcmV2aW91czsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaiA9IHRvU29ydFtpXS0+ZXhwSW5kZXg7CisgICAgICB0b1NvcnRbaV0tPm5leHQgPSB0b1NvcnRbal0tPm5leHQ7CisgICAgICB0b1NvcnRbaV0tPnByZXZpb3VzID0gdG9Tb3J0W2pdOworICAgICAgdG9Tb3J0W2pdLT5uZXh0ID0gdG9Tb3J0W2ldOworICAgICAgaWYodG9Tb3J0W2ldLT5uZXh0KSB7CisgICAgICAgIHRvU29ydFtpXS0+bmV4dC0+cHJldmlvdXMgPSB0b1NvcnRbaV07CisgICAgICB9CisgICAgICB0b1NvcnRbaV0tPnN0cmVuZ3RoID0gdG9Tb3J0W2ldLT5leHBTdHJlbmd0aDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGV4Q291bnQ7Cit9CisKKworTGluZSAqCitTb3J0ZWRMaW5lczo6Z2V0Rmlyc3QoKSB7CisgIGN1cnJlbnQgPSBmaXJzdDsKKyAgcmV0dXJuIGN1cnJlbnQ7Cit9CisKK0xpbmUgKgorU29ydGVkTGluZXM6OmdldExhc3QoKSB7CisgIGN1cnJlbnQgPSBsYXN0OworICByZXR1cm4gY3VycmVudDsKK30KKwordm9pZCAKK1NvcnRlZExpbmVzOjphZGQoTGluZSAqbGluZSwgVUJvb2wgbGlua0luKSB7CisgIGlmKHNpemUrKyA9PSBjYXBhY2l0eSkgeworICAgIC8vIGdyb3cKKyAgfQorICBsaW5lc1tzaXplXSA9ICpsaW5lOworICBMaW5lICp0b0FkZCA9ICZsaW5lc1tzaXplXTsKKyAgaWYobGlua0luICYmIGZpcnN0KSB7CisgICAgTGluZSAqY3VycmVudCA9IGZpcnN0OworICAgIHdoaWxlKGN1cnJlbnQgIT0gTlVMTCAmJiBwcm9iZS5jb21wYXJlcigmY3VycmVudCwgJnRvQWRkKSA8IDApIHsKKyAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworICAgIH0KKyAgICBpZihjdXJyZW50ID09IE5VTEwpIHsKKyAgICAgIHRvQWRkLT5wcmV2aW91cyA9IGxhc3Q7CisgICAgICB0b0FkZC0+bmV4dCA9IE5VTEw7CisgICAgICBpZihsYXN0ICE9IE5VTEwpIHsKKyAgICAgICAgbGFzdC0+bmV4dCA9IHRvQWRkOworICAgICAgfQorICAgICAgbGFzdCA9IHRvQWRkOworICAgICAgaWYoZmlyc3QgPT0gTlVMTCkgeworICAgICAgICBmaXJzdCA9IHRvQWRkOworICAgICAgfQorICAgIH0gZWxzZSB7IC8vIGN1cnJlbnQgIT0gTlVMTAorICAgICAgdG9BZGQtPm5leHQgPSBjdXJyZW50OworICAgICAgdG9BZGQtPnByZXZpb3VzID0gY3VycmVudC0+cHJldmlvdXM7CisgICAgICBpZihjdXJyZW50LT5wcmV2aW91cykgeworICAgICAgICBjdXJyZW50LT5wcmV2aW91cy0+bmV4dCA9IHRvQWRkOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZmlyc3QgPSB0b0FkZDsKKyAgICAgIH0KKyAgICAgIGN1cnJlbnQtPnByZXZpb3VzID0gdG9BZGQ7CisgICAgfQorICB9Cit9CisKKworTGluZSAqCitTb3J0ZWRMaW5lczo6Z2V0TmV4dCgpCit7CisgIGlmKGN1cnJlbnQgIT0gTlVMTCkgeworICAgIGN1cnJlbnQ9Y3VycmVudC0+bmV4dDsKKyAgfQorICByZXR1cm4gY3VycmVudDsKK30KKworTGluZSAqCitTb3J0ZWRMaW5lczo6Z2V0UHJldmlvdXMoKQoreworICBpZihjdXJyZW50ICE9IE5VTEwpIHsKKyAgICBjdXJyZW50PWN1cnJlbnQtPnByZXZpb3VzOworICB9CisgIHJldHVybiBjdXJyZW50OworfQorCitMaW5lICoKK1NvcnRlZExpbmVzOjpvcGVyYXRvcltdKGludDMyX3QgaW5kZXgpCit7CisgIGludDMyX3QgaSA9IDA7CisgIExpbmUgKmMgPSBmaXJzdDsKKyAgZm9yKGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgeworICAgIGlmKGMgIT0gTlVMTCkgeworICAgICAgYyA9IGMtPm5leHQ7CisgICAgfQorICB9CisgIHJldHVybiBjOworfQorCitVbmljb2RlU3RyaW5nCitTb3J0ZWRMaW5lczo6YXJyYXlUb1N0cmluZyhMaW5lKiogc29ydGVkTGluZXMsIGludDMyX3QgbGluZXNTaXplLCBVQm9vbCBwcmV0dHksIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBwcmludFNvcnRLZXlzKSB7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICBpbnQzMl90IGkgPSAwOworCisgIExpbmUgKmxpbmUgPSBOVUxMOworICBMaW5lICpwcmV2aW91cyA9IHNvcnRlZExpbmVzWzBdOworICBpZihwcmludFNvcnRLZXlzICYmICFzb3J0a2V5cykgeworICAgIHByaW50U29ydEtleXMgPSBGQUxTRTsKKyAgfQorICBpZihwcmV2aW91cy0+aXNSZXNldCkgeworICAgIHJlc3VsdC5hcHBlbmQoIiAmICIpOworICAgIHJlc3VsdC5hcHBlbmQocHJldmlvdXMtPm5hbWUsIHByZXZpb3VzLT5sZW4pOworICAgIGlmKHByZXR0eSkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiICAgICAgICAjICIpOworICAgICAgcmVzdWx0LmFwcGVuZChwcmV2aW91cy0+c3RyaW5nVG9OYW1lKHByZXZpb3VzLT5uYW1lLCBwcmV2aW91cy0+bGVuKSk7CisgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworICAgIH0KKyAgfSBlbHNlIGlmKCFwcmV2aW91cy0+aXNSZW1vdmVkKSB7CisgICAgcmVzdWx0LmFwcGVuZChwcmV2aW91cy0+dG9TdHJpbmcocHJldHR5KSk7CisgICAgaWYocHJldHR5KSB7CisgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworICAgIH0KKyAgfQorICBpID0gMTsKKyAgd2hpbGUoKGkgPCBsaW5lc1NpemUgJiYgIXVzZUxpbmtzKSB8fCAocHJldmlvdXMtPm5leHQgJiYgdXNlTGlua3MpKSB7CisgICAgaWYodXNlTGlua3MpIHsKKyAgICAgIGxpbmUgPSBwcmV2aW91cy0+bmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgbGluZSA9IHNvcnRlZExpbmVzW2ldOworICAgIH0KKyAgICBpZihsaW5lLT5pc1Jlc2V0KSB7CisgICAgICByZXN1bHQuYXBwZW5kKCIgJiIpOworICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT5uYW1lLCBsaW5lLT5sZW4pOworICAgICAgaWYocHJldHR5KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgICAgICAgIyAiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT5zdHJpbmdUb05hbWUobGluZS0+bmFtZSwgbGluZS0+bGVuKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisgICAgICB9CisgICAgfSBlbHNlIGlmKCFsaW5lLT5pc1JlbW92ZWQpIHsKKyAgICAgIGlmKGkgPiAwKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+c3RyZW5ndGhUb1N0cmluZyhsaW5lLT5zdHJlbmd0aCwgcHJldHR5KSk7CisgICAgICB9CisgICAgICByZXN1bHQuYXBwZW5kKGxpbmUtPnRvU3RyaW5nKHByZXR0eSkpOworICAgICAgaWYocHJpbnRTb3J0S2V5cykgeworICAgICAgICByZXN1bHQuYXBwZW5kKGxpbmUtPmR1bXBTb3J0a2V5KCkpOworICAgICAgfQorICAgICAgaWYocHJldHR5KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisgICAgICB9CisgICAgfQorICAgIHByZXZpb3VzID0gbGluZTsKKyAgICBpKys7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworU29ydGVkTGluZXM6OlNvcnRlZExpbmVzKEZJTEUgKmZpbGUsIFVQcmludGVyICpsb2dnZXIsIFVQcmludGVyICpkZWJ1ZywgVUVycm9yQ29kZSAmc3RhdHVzKSA6Cit0b1NvcnQoTlVMTCksCit0b1NvcnRDYXBhY2l0eSgwKSwKK2xpbmVzKE5VTEwpLAorc2l6ZSgwKSwKK2NhcGFjaXR5KDApLAorZmlyc3QoTlVMTCksCitsYXN0KE5VTEwpLAorbG9nZ2VyKGxvZ2dlciksCitkZWJ1ZyhkZWJ1ZyksCitjb250cmFjdGlvbnNUYWJsZShOVUxMKSwKK2R1cGxpY2F0b3JzKE5VTEwpLAorbWF4RXhwYW5zaW9uUHJlZml4U2l6ZSgwKSwKK3dvcmRTb3J0KEZBTFNFKSwKK2ZyZW5jaFNlY29uZGFyeShGQUxTRSksCit1cHBlckZpcnN0KEZBTFNFKSwKK3NvcnRrZXlzKE5VTEwpLAorc29ydGtleU9mZnNldCgwKQoreworICBkZWJ1Zy0+bG9nKCIqKiogbG9hZGluZyBhIGR1bXBcbiIpOworICBtZW1zZXQoVUIsIDAsIHNpemVvZihVQikpOworICBpbnQzMl90IGkgPSAwOworICBmb3IoaSA9IDA7IGkgPCBVQ09MX09GRjsgaSsrKSB7CisgICAgVUJbaV0gPSAmZW1wdHk7CisgIH0KKworICBpbnQzMl90IG5ld0ZyZW5jaCwgbmV3VXBwZXJGaXJzdDsKKyAgZnNjYW5mKGZpbGUsICIlaSwlaSwlaVxuIiwgJnNpemUsICZuZXdGcmVuY2gsICZuZXdVcHBlckZpcnN0KTsKKyAgZGVidWctPmxvZygiUmVhZCBzaXplICVpLCBmcmVuY2hTZWNvbmRhcnkgJWkgYW5kIHVwcGVyRmlyc3QgJWlcbiIsIHNpemUsIG5ld0ZyZW5jaCwgbmV3VXBwZXJGaXJzdCk7CisgIGZyZW5jaFNlY29uZGFyeSA9IChVQm9vbCluZXdGcmVuY2g7CisgIHVwcGVyRmlyc3QgPSAoVUJvb2wpbmV3VXBwZXJGaXJzdDsKKyAgY2FwYWNpdHkgPSBzaXplOworICBsaW5lcyA9IG5ldyBMaW5lW2NhcGFjaXR5XTsKKyAgaSA9IDA7CisKKyAgY2hhciBidWZmWzI1Nl07CisKKyAgd2hpbGUoZmdldHMoYnVmZiwgMjU2LCBmaWxlKSkgeworICAgIGlmKGkgJSAyMCA9PSAwKSB7CisgICAgICBsb2dnZXItPmxvZygiXHJMaW5lOiAlMDRpIiwgaSwgYnVmZik7CisgICAgfQorICAgIGxpbmVzW2ldLmluaXRGcm9tU3RyaW5nKGJ1ZmYsIDI1Niwgc3RhdHVzKTsKKyAgICBpZihpKSB7CisgICAgICBsaW5lc1tpXS5wcmV2aW91cyA9ICZsaW5lc1tpLTFdOworICAgICAgbGluZXNbaS0xXS5uZXh0ID0gJmxpbmVzW2ldOworICAgIH0KKyAgICBpKys7CisgIH0KKyAgc2l6ZSA9IGk7CisgIHRvU29ydCA9IG5ldyBMaW5lKltzaXplXTsKKyAgc2V0U29ydGluZ0FycmF5KHRvU29ydCwgbGluZXMsIHNpemUpOworICBmaXJzdCA9ICZsaW5lc1swXTsKKyAgbGFzdCA9ICZsaW5lc1tzaXplLTFdOworfQorCit2b2lkCitTb3J0ZWRMaW5lczo6dG9GaWxlKEZJTEUgKmZpbGUsIFVCb29sIHVzZUxpbmtzLCBVRXJyb3JDb2RlICZzdGF0dXMpIAoreworICBmcHJpbnRmKGZpbGUsICIlaSwlaSwlaVxuIiwgc2l6ZSwgZnJlbmNoU2Vjb25kYXJ5LCB1cHBlckZpcnN0KTsKKyAgaW50MzJfdCBpID0gMTsKKyAgTGluZSAqcHJldmlvdXMgPSB0b1NvcnRbMF07CisgIExpbmUgKmxpbmUgPSBOVUxMOworICBjaGFyIGJ1ZmZbMjU2XTsKKyAgcHJldmlvdXMtPndyaXRlKGJ1ZmYsIDI1Niwgc3RhdHVzKTsKKyAgZnByaW50ZihmaWxlLCAiJXNcbiIsIGJ1ZmYpOworICBmZmx1c2goZmlsZSk7CisgIHdoaWxlKHByZXZpb3VzLT5uZXh0KSB7CisgICAgaWYodXNlTGlua3MpIHsKKyAgICAgIGxpbmUgPSBwcmV2aW91cy0+bmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgbGluZSA9IHRvU29ydFtpXTsKKyAgICB9CisgICAgbGluZS0+d3JpdGUoYnVmZiwgMjU2LCBzdGF0dXMpOworICAgIGZwcmludGYoZmlsZSwgIiVzXG4iLCBidWZmKTsKKyAgICBpKys7CisgICAgcHJldmlvdXMgPSBsaW5lOworICB9Cit9CisKKworCitVbmljb2RlU3RyaW5nIAorU29ydGVkTGluZXM6OnRvU3RyaW5nRnJvbUVtcHR5KCkgeworICBVQm9vbCB1c2VMaW5rcyA9IEZBTFNFOworICBVQm9vbCBwcmV0dHkgPSBGQUxTRTsKKyAgVW5pY29kZVN0cmluZyByZXN1bHQ7CisgIGludDMyX3QgaSA9IDA7CisKKyAgTGluZSAqbGluZSA9IE5VTEw7CisgIExpbmUgKnByZXZpb3VzID0gdG9Tb3J0WzBdOworICBpZihwcmV2aW91cy0+aXNSZXNldCkgeworICAgIHJlc3VsdC5hcHBlbmQoIiAmICIpOworICAgIGlmKHByZXR0eSkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKyAgICB9CisgICAgcmVzdWx0LmFwcGVuZChwcmV2aW91cy0+bmFtZSwgcHJldmlvdXMtPmxlbik7CisgIH0gZWxzZSBpZighcHJldmlvdXMtPmlzUmVtb3ZlZCkgeworICAgIHJlc3VsdC5hcHBlbmQocHJldmlvdXMtPnRvU3RyaW5nKHByZXR0eSkpOworICAgIGlmKHByZXR0eSkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKyAgICB9CisgIH0KKyAgaSA9IDE7CisgIHdoaWxlKGkgPCBzaXplIHx8IHByZXZpb3VzLT5uZXh0KSB7CisgICAgaWYodXNlTGlua3MpIHsKKyAgICAgIGxpbmUgPSBwcmV2aW91cy0+bmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgbGluZSA9IHRvU29ydFtpXTsKKyAgICB9CisgICAgaWYobGluZS0+aXNSZXNldCkgeworICAgICAgcmVzdWx0LmFwcGVuZCgiICYiKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+bmFtZSwgbGluZS0+bGVuKTsKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCIgICAgICAgICMgIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+c3RyaW5nVG9OYW1lKGxpbmUtPm5hbWUsIGxpbmUtPmxlbikpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworICAgICAgfQorICAgIH0gZWxzZSBpZighbGluZS0+aXNSZW1vdmVkKSB7CisgICAgICBpZihpID4gMCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGxpbmUtPnN0cmVuZ3RoVG9TdHJpbmcobGluZS0+c3RyZW5ndGhGcm9tRW1wdHksIHByZXR0eSkpOworICAgICAgfQorICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT50b1N0cmluZyhwcmV0dHkpKTsKKyAgICAgIGlmKHByZXR0eSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOworICAgICAgfQorICAgIH0KKyAgICBwcmV2aW91cyA9IGxpbmU7CisgICAgaSsrOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1VuaWNvZGVTdHJpbmcgCitTb3J0ZWRMaW5lczo6dG9TdHJpbmcoVUJvb2wgdXNlTGlua3MpIAoreworICByZXR1cm4gYXJyYXlUb1N0cmluZyh0b1NvcnQsIHNpemUsIEZBTFNFLCB1c2VMaW5rcywgRkFMU0UpOworfQorCisKK1VuaWNvZGVTdHJpbmcgCitTb3J0ZWRMaW5lczo6dG9QcmV0dHlTdHJpbmcoVUJvb2wgdXNlTGlua3MsIFVCb29sIHByaW50U29ydEtleXMpIAoreworICByZXR1cm4gYXJyYXlUb1N0cmluZyh0b1NvcnQsIHNpemUsIFRSVUUsIHVzZUxpbmtzLCBwcmludFNvcnRLZXlzKTsKK30KKworVW5pY29kZVN0cmluZyAKK1NvcnRlZExpbmVzOjp0b091dHB1dChjb25zdCBjaGFyICpmb3JtYXQsIAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKnBsYXRmb3JtLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIAorICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCB1c2VMaW5rcywgVUJvb2wgaW5pdGlhbGl6ZSwgVUJvb2wgbW9yZVRvQ29tZSkgeworICBpZihzdHJjbXAoZm9ybWF0LCAiSFRNTCIpID09IDApIHsKKyAgICByZXR1cm4gdG9IVE1MKGxvY2FsZSwgcGxhdGZvcm0sIHJlZmVyZW5jZSwgdXNlTGlua3MsIGluaXRpYWxpemUsIG1vcmVUb0NvbWUpOworICB9IGVsc2UgaWYoc3RyY21wKGZvcm1hdCwgIlhNTCIpID09IDApIHsKKyAgICByZXR1cm4gdG9YTUwobG9jYWxlLCBwbGF0Zm9ybSwgcmVmZXJlbmNlLCB1c2VMaW5rcywgaW5pdGlhbGl6ZSwgbW9yZVRvQ29tZSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHRvQnVuZGxlKGxvY2FsZSwgcGxhdGZvcm0sIHJlZmVyZW5jZSwgdXNlTGlua3MsIGluaXRpYWxpemUsIG1vcmVUb0NvbWUpOworICB9Cit9CisKKworVW5pY29kZVN0cmluZyAKK1NvcnRlZExpbmVzOjp0b0hUTUwoY29uc3QgY2hhciAqbG9jYWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGxhdGZvcm0sIGNvbnN0IGNoYXIgKnJlZmVyZW5jZSwgCisgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBpbml0aWFsaXplLCBVQm9vbCBtb3JlVG9Db21lKQoreworICBVbmljb2RlU3RyaW5nIHJlc3VsdDsKKyAgaW50MzJfdCBpID0gMDsKKyAgaWYoaW5pdGlhbGl6ZSkgeworICAgIHJlc3VsdC5hcHBlbmQoIjxodG1sPlxuPGhlYWQ+XG48bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPlxuPC9oZWFkPlxuIik7CisgICAgcmVzdWx0LmFwcGVuZCgiIyBDb2xsYXRpb24gZGF0YSByZXNvdXJjZSBidW5kbGUgZ2VuZXJhdGVkIGZvciBsb2NhbGU6ICIpOworICAgIHJlc3VsdC5hcHBlbmQobG9jYWxlKTsKKyAgICByZXN1bHQuYXBwZW5kKCI8YnI+XG4jIEZvciBwbGF0Zm9ybSAiKTsKKyAgICByZXN1bHQuYXBwZW5kKHBsYXRmb3JtKTsKKyAgICByZXN1bHQuYXBwZW5kKCIgcmVmZXJlbmNlIHBsYXRmb3JtICIpOworICAgIHJlc3VsdC5hcHBlbmQocmVmZXJlbmNlKTsKKyAgICByZXN1bHQuYXBwZW5kKCI8YnI+PGJyPlxuXG5cbiIpOworCisgICAgcmVzdWx0LmFwcGVuZChsb2NhbGUpOworICAgIGlmKHBsYXRmb3JtKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCJfIik7CisgICAgICByZXN1bHQuYXBwZW5kKHBsYXRmb3JtKTsKKyAgICB9CisgICAgaWYocmVmZXJlbmNlKSB7CisgICAgICByZXN1bHQuYXBwZW5kKCJfdnNfIik7CisgICAgICByZXN1bHQuYXBwZW5kKHJlZmVyZW5jZSk7CisgICAgfQorICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwO3s8YnI+XG4iKTsKKworICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwO2NvbGxhdGlvbnMmbmJzcDt7PGJyPlxuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7c3RhbmRhcmQmbmJzcDt7PGJyPlxuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2VxdWVuY2UmbmJzcDt7PGJyPlxuIik7CisgIH0KKworICBpZihmcmVuY2hTZWNvbmRhcnkpIHsKKyAgICByZXN1bHQuYXBwZW5kKCJbYmFja3dhcmRzIDJdPGJyPlxuIik7CisgIH0KKyAgaWYodXBwZXJGaXJzdCkgeworICAgIHJlc3VsdC5hcHBlbmQoIltjYXNlZmlyc3QgdXBwZXJdPGJyPlxuIik7CisgIH0KKworICBMaW5lICpsaW5lID0gdG9Tb3J0WzBdOworCisgIGkgPSAwOworICB3aGlsZSgoaSA8IHNpemUgJiYgIXVzZUxpbmtzKSB8fCAobGluZS0+bmV4dCAmJiB1c2VMaW5rcykpIHsKKyAgICBpZihsaW5lLT5pc1Jlc2V0IHx8ICFsaW5lLT5pc1JlbW92ZWQpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQobGluZS0+dG9IVE1MU3RyaW5nKCkpOworICAgIH0KKyAgICBpKys7CisgICAgaWYodXNlTGlua3MpIHsKKyAgICAgIGxpbmUgPSBsaW5lLT5uZXh0OworICAgIH0gZWxzZSB7CisgICAgICBsaW5lID0gdG9Tb3J0W2ldOworICAgIH0KKyAgfQorICBpZighbW9yZVRvQ29tZSkgeworICAgIHJlc3VsdC5hcHBlbmQoIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO308YnI+XG4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PGJyPlxuJm5ic3A7Jm5ic3A7fTxicj5cbn08YnI+XG4iKTsKKworICAgIHJlc3VsdC5hcHBlbmQoIjwvaHRtbD5cbiIpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworVW5pY29kZVN0cmluZyAKK1NvcnRlZExpbmVzOjp0b1hNTChjb25zdCBjaGFyICpsb2NhbGUsIAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwbGF0Zm9ybSwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgdXNlTGlua3MsIFVCb29sIGluaXRpYWxpemUsIFVCb29sIG1vcmVUb0NvbWUpCit7CisgIFVuaWNvZGVTdHJpbmcgcmVzdWx0OworICBpbnQzMl90IGkgPSAwOworICBpZihpbml0aWFsaXplKSB7CisgICAgcmVzdWx0LmFwcGVuZCgiPGh0bWw+XG48aGVhZD5cbjxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI+XG48L2hlYWQ+XG4iKTsKKyAgICByZXN1bHQuYXBwZW5kKCIjIENvbGxhdGlvbiBkYXRhIHJlc291cmNlIGJ1bmRsZSBnZW5lcmF0ZWQgZm9yIGxvY2FsZTogIik7CisgICAgcmVzdWx0LmFwcGVuZChsb2NhbGUpOworICAgIHJlc3VsdC5hcHBlbmQoIjxicj5cbiMgRm9yIHBsYXRmb3JtICIpOworICAgIHJlc3VsdC5hcHBlbmQocGxhdGZvcm0pOworICAgIHJlc3VsdC5hcHBlbmQoIiByZWZlcmVuY2UgcGxhdGZvcm0gIik7CisgICAgcmVzdWx0LmFwcGVuZChyZWZlcmVuY2UpOworICAgIHJlc3VsdC5hcHBlbmQoIjxicj48YnI+XG5cblxuIik7CisKKyAgICByZXN1bHQuYXBwZW5kKGxvY2FsZSk7CisgICAgaWYocGxhdGZvcm0pIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIl8iKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQocGxhdGZvcm0pOworICAgIH0KKyAgICBpZihyZWZlcmVuY2UpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIl92c18iKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQocmVmZXJlbmNlKTsKKyAgICB9CisgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7ezxicj5cbiIpOworCisgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7Jm5ic3A7Y29sbGF0aW9ucyZuYnNwO3s8YnI+XG4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtzdGFuZGFyZCZuYnNwO3s8YnI+XG4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXF1ZW5jZSZuYnNwO3s8YnI+XG4iKTsKKyAgfQorCisgIGlmKGZyZW5jaFNlY29uZGFyeSkgeworICAgIHJlc3VsdC5hcHBlbmQoIltiYWNrd2FyZHMgMl08YnI+XG4iKTsKKyAgfQorICBpZih1cHBlckZpcnN0KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiW2Nhc2VmaXJzdCB1cHBlcl08YnI+XG4iKTsKKyAgfQorCisgIExpbmUgKmxpbmUgPSB0b1NvcnRbMF07CisKKyAgaSA9IDA7CisgIHdoaWxlKChpIDwgc2l6ZSAmJiAhdXNlTGlua3MpIHx8IChsaW5lLT5uZXh0ICYmIHVzZUxpbmtzKSkgeworICAgIGlmKGxpbmUtPmlzUmVzZXQgfHwgIWxpbmUtPmlzUmVtb3ZlZCkgeworICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT50b0hUTUxTdHJpbmcoKSk7CisgICAgfQorICAgIGkrKzsKKyAgICBpZih1c2VMaW5rcykgeworICAgICAgbGluZSA9IGxpbmUtPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxpbmUgPSB0b1NvcnRbaV07CisgICAgfQorICB9CisgIGlmKCFtb3JlVG9Db21lKSB7CisgICAgcmVzdWx0LmFwcGVuZCgiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7fTxicj5cbiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO308YnI+XG4mbmJzcDsmbmJzcDt9PGJyPlxufTxicj5cbiIpOworCisgICAgcmVzdWx0LmFwcGVuZCgiPC9odG1sPlxuIik7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitVbmljb2RlU3RyaW5nIAorU29ydGVkTGluZXM6OnRvQnVuZGxlKGNvbnN0IGNoYXIgKmxvY2FsZSwgCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBsYXRmb3JtLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIAorICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCB1c2VMaW5rcywgVUJvb2wgaW5pdGlhbGl6ZSwgVUJvb2wgbW9yZVRvQ29tZSkKK3sKKyAgVW5pY29kZVN0cmluZyByZXN1bHQ7CisgIGludDMyX3QgaSA9IDA7CisKKyAgaWYoaW5pdGlhbGl6ZSkgeworICAgIHJlc3VsdC5hcHBlbmQoIi8vIENvbGxhdGlvbiBkYXRhIHJlc291cmNlIGJ1bmRsZSBnZW5lcmF0ZWQgZm9yIGxvY2FsZTogIik7CisgICAgcmVzdWx0LmFwcGVuZChsb2NhbGUpOworICAgIHJlc3VsdC5hcHBlbmQoIlxuLy8gRm9yIHBsYXRmb3JtICIpOworICAgIHJlc3VsdC5hcHBlbmQocGxhdGZvcm0pOworICAgIHJlc3VsdC5hcHBlbmQoIiByZWZlcmVuY2UgcGxhdGZvcm0gIik7CisgICAgcmVzdWx0LmFwcGVuZChyZWZlcmVuY2UpOworICAgIHJlc3VsdC5hcHBlbmQoIlxuXG5cbiIpOworCisgICAgcmVzdWx0LmFwcGVuZChsb2NhbGUpOworICAgIC8qCisgICAgaWYocGxhdGZvcm0pIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIl8iKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQocGxhdGZvcm0pOworICAgIH0KKyAgICBpZihyZWZlcmVuY2UpIHsKKyAgICAgIHJlc3VsdC5hcHBlbmQoIl92c18iKTsKKyAgICAgIHJlc3VsdC5hcHBlbmQocmVmZXJlbmNlKTsKKyAgICB9CisgICAgKi8KKyAgICByZXN1bHQuYXBwZW5kKCIge1xuIik7CisKKyAgICByZXN1bHQuYXBwZW5kKCIgIGNvbGxhdGlvbnMge1xuICAgc3RhbmRhcmQge1xuICAgIFNlcXVlbmNlIHtcbiIpOworICB9CisKKyAgaWYoZnJlbmNoU2Vjb25kYXJ5KSB7CisgICAgcmVzdWx0LmFwcGVuZCgiW2JhY2t3YXJkcyAyXVxuIik7CisgIH0KKyAgaWYodXBwZXJGaXJzdCkgeworICAgIHJlc3VsdC5hcHBlbmQoIltjYXNlZmlyc3QgdXBwZXJdXG4iKTsKKyAgfQorCisgIExpbmUgKmxpbmUgPSB0b1NvcnRbMF07CisKKyAgaSA9IDA7CisgIHdoaWxlKChpIDwgc2l6ZSAmJiAhdXNlTGlua3MpIHx8IChsaW5lLT5uZXh0ICYmIHVzZUxpbmtzKSkgeworICAgIGlmKGxpbmUtPmlzUmVzZXQgfHwgIWxpbmUtPmlzUmVtb3ZlZCkgeworICAgICAgcmVzdWx0LmFwcGVuZChsaW5lLT50b0J1bmRsZVN0cmluZygpKTsKKyAgICB9CisgICAgaSsrOworICAgIGlmKHVzZUxpbmtzKSB7CisgICAgICBsaW5lID0gbGluZS0+bmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgbGluZSA9IHRvU29ydFtpXTsKKyAgICB9CisgIH0KKworICBpZighbW9yZVRvQ29tZSkgeworICAgIHJlc3VsdC5hcHBlbmQoIiAgICB9XG4gICB9XG4gIH1cbn1cbiIpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQzMl90IAorU29ydGVkTGluZXM6OmdldFNpemUoKSBjb25zdCB7CisgIHJldHVybiByZXBlcnRvaXJlLnNpemUoKTsKK30KKwordm9pZAorU29ydGVkTGluZXM6OnJlZHVjZURpZmZlcmVuY2UoU29ydGVkTGluZXMmIHJlZmVyZW5jZSkgeworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgaWYodXBwZXJGaXJzdCkgeworICAgIHN3YXBDYXNlKCk7CisgIH0KKyAgLy8gYm90aCBzb3J0ZWQgbGluZXMgc3RydWN0dXJlcyBuZWVkIHRvIGhhdmUgZXN0YWJsaXNoZWQgbGlua3MgYW5kIHN0cmVuZ3RocworICAvLyBXZSB3YWxrIGRvd24gYm90aCBzdHJ1Y3R1cmVzIGFuZCBub3RlIGRpZmZlcmVuY2VzLiBUaGVzZQorICAvLyBkaWZmZXJlbmNlcyB3aWxsIG1vZGlmeSB0aGlzIGJ5IHJlbW92bmcgZWxlbWVudHMsIHNldHRpbmcgcmVzZXRzCisgIC8vIGV0Yy4uLgorICAvLyB3ZSB3aWxsIHByZWZlciBpbnNlcnRpb25zIGZyb20gdGFpbG9yaW5nIHRvIHJlZmVyZW5jZSwgdGhlbiBkZWxldGlvbnMKKyAgLy8gdGhlcmUgYXJlIHR3byB0YWJsZXMgdGhhdCBrZWVwIHNlZW4gZWxlbWVudHMuCisgIEhhc2h0YWJsZSAqc2VlblRoaXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgIEhhc2h0YWJsZSAqc2VlblJlZmVyZW5jZSA9IG5ldyBIYXNodGFibGUoKTsKKworCisgIFVCb29sIGZvdW5kID0gRkFMU0U7CisgIFVCb29sIGZpbmlzaGVkID0gRkFMU0U7CisgIGNvbnN0IGludDMyX3QgbG9va0ZvcndhcmQgPSAyMDsKKyAgaW50MzJfdCB0YWlsb3JpbmdNb3ZlID0gMDsKKyAgLy9pbnQzMl90IHJlZmVyZW5jZVNpemUgPSByZWZlcmVuY2UuZ2V0U2l6ZSgpOworICBMaW5lICpyZWZMaW5lID0gcmVmZXJlbmNlLmdldEZpcnN0KCk7CisgIExpbmUgKnJlZkxhdGVzdEVxdWFsID0gcmVmTGluZTsKKyAgcmVmTGluZSA9IHJlZkxpbmUtPm5leHQ7CisgIExpbmUgKm15TGluZSA9IGdldEZpcnN0KCk7CisgIExpbmUgKm15TGF0ZXN0RXF1YWwgPSBteUxpbmU7CisgIG15TGF0ZXN0RXF1YWwtPmlzUmVtb3ZlZCA9IFRSVUU7CisgIG15TGluZSA9IG15TGluZS0+bmV4dDsKKyAgd2hpbGUobXlMaW5lICYmIHJlZkxpbmUpIHsKKyAgICBmb3VuZCA9IEZBTFNFOworICAgIHdoaWxlKG15TGluZSAmJiByZWZMaW5lICYmIG15TGluZS0+ZXF1YWxzKCpyZWZMaW5lKSkgeworICAgICAgbXlMYXRlc3RFcXVhbCA9IG15TGluZTsKKyAgICAgIG15TGF0ZXN0RXF1YWwtPmlzUmVtb3ZlZCA9IFRSVUU7CisgICAgICBteUxpbmUgPSBteUxpbmUtPm5leHQ7CisgICAgICByZWZMYXRlc3RFcXVhbCA9IHJlZkxpbmU7CisgICAgICByZWZMaW5lID0gcmVmTGluZS0+bmV4dDsKKyAgICAgIGlmKHJlZkxpbmUgPT0gTlVMTCAmJiBteUxpbmUgPT0gTlVMTCkgeworICAgICAgICBmaW5pc2hlZCA9IFRSVUU7CisgICAgICB9CisgICAgfQorICAgIGlmKG15TGluZSkgeworICAgICAgbXlMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGggPSBteUxpbmUtPnN0cmVuZ3RoOyAgCisgICAgfQorICAgIGlmKHJlZkxpbmUpIHsKKyAgICAgIHJlZkxpbmUtPmN1bXVsYXRpdmVTdHJlbmd0aCA9IHJlZkxpbmUtPnN0cmVuZ3RoOworICAgIH0KKyAKKyAgICAvLyBoZXJlIGlzIHRoZSBkaWZmZXJlbmNlCisgICAgd2hpbGUoIWZvdW5kICYmICFmaW5pc2hlZCkgeworICAgICAgdGFpbG9yaW5nTW92ZSA9IDA7CisgICAgICBpZihteUxpbmUgJiYgcmVmTGluZSkgeworICAgICAgICBpZihteUxpbmUtPmN1bXVsYXRpdmVTdHJlbmd0aCA+IHJlZkxpbmUtPmN1bXVsYXRpdmVTdHJlbmd0aCkgeyAKKyAgICAgICAgICAvLyB0YWlsb3JpbmcgeiA8PDwgeCwgVUNBIHogPCB5CisgICAgICAgICAgd2hpbGUobXlMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGggPiByZWZMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGgpIHsKKyAgICAgICAgICAgIG15TGluZSA9IG15TGluZS0+bmV4dDsKKyAgICAgICAgICAgIGlmKG15TGluZSkgeworICAgICAgICAgICAgICB0cmFuc2ZlckN1bXVsYXRpdmVTdHJlbmd0aChteUxpbmUtPnByZXZpb3VzLCBteUxpbmUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYobXlMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGggPCByZWZMaW5lLT5jdW11bGF0aXZlU3RyZW5ndGgpIHsgIAorICAgICAgICAgIC8vIHRhaWxvcmluZyB6IDwgeCwgVUNBIHogPDw8IHkKKyAgICAgICAgICB3aGlsZShteUxpbmUtPmN1bXVsYXRpdmVTdHJlbmd0aCA8IHJlZkxpbmUtPmN1bXVsYXRpdmVTdHJlbmd0aCkgeworICAgICAgICAgICAgc2VlblJlZmVyZW5jZS0+cHV0KFVuaWNvZGVTdHJpbmcocmVmTGluZS0+bmFtZSwgcmVmTGluZS0+bGVuKSwgcmVmTGluZSwgc3RhdHVzKTsKKyAgICAgICAgICAgIHJlZkxpbmUgPSByZWZMaW5lLT5uZXh0OworICAgICAgICAgICAgaWYocmVmTGluZSkgeworICAgICAgICAgICAgICB0cmFuc2ZlckN1bXVsYXRpdmVTdHJlbmd0aChyZWZMaW5lLT5wcmV2aW91cywgcmVmTGluZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhpcyBpcyB0aGUgaW50ZXJlc3RpbmcgcG9pbnQuIE5vdyB3ZSBzZWFyY2ggZm9yIGNoYXJhY3RlciBtYXRjaAorICAgICAgICB3aGlsZShteUxpbmUgJiYgcmVmTGluZSAmJiAoIW15TGluZS0+ZXF1YWxzKCpyZWZMaW5lKSB8fCBteUxpbmUtPnN0cmVuZ3RoID09IFVDT0xfSURFTlRJQ0FMKQorICAgICAgICAgICYmIHRhaWxvcmluZ01vdmUgPCBsb29rRm9yd2FyZCkgeworICAgICAgICAgIGlmKHNlZW5UaGlzLT5nZXQoVW5pY29kZVN0cmluZyhyZWZMaW5lLT5uYW1lLCByZWZMaW5lLT5sZW4pKSkgeworICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHN0dWZmIGZyb20gdGhlIHJlZmVyZW5jZSB0aGF0IGlzIGFscmVhZHkgYWNjb3VudGVkCisgICAgICAgICAgICAvLyBmb3IgaW4gdGhlIHRhaWxvcmluZy4KKyAgICAgICAgICAgIHJlZkxpbmUgPSByZWZMaW5lLT5uZXh0OworICAgICAgICAgICAgaWYocmVmTGluZSkgeworICAgICAgICAgICAgICB0cmFuc2ZlckN1bXVsYXRpdmVTdHJlbmd0aChyZWZMaW5lLT5wcmV2aW91cywgcmVmTGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG15TGluZSA9IG15TGluZS0+bmV4dDsKKyAgICAgICAgICAgIGlmKG15TGluZSkgeworICAgICAgICAgICAgICB0cmFuc2ZlckN1bXVsYXRpdmVTdHJlbmd0aChteUxpbmUtPnByZXZpb3VzLCBteUxpbmUpOworICAgICAgICAgICAgICBpZighc2VlblJlZmVyZW5jZS0+Z2V0KFVuaWNvZGVTdHJpbmcobXlMaW5lLT5uYW1lLCBteUxpbmUtPmxlbikpKSB7CisgICAgICAgICAgICAgICAgdGFpbG9yaW5nTW92ZSsrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZihyZWZMaW5lID09IE5VTEwpIHsgLy8gcmFuIG91dCBvZiByZWZlcmVuY2UKKyAgICAgICAgLy8gdGhpcyBpcyB0aGUgdGFpbCBvZiB0YWlsb3JpbmcgLSB0aGUgbGFzdCBpbnNlcnRpb24KKyAgICAgICAgbXlMaW5lICA9IE5VTEw7CisgICAgICAgIGZvdW5kID0gVFJVRTsKKyAgICAgIH0gZWxzZSBpZih0YWlsb3JpbmdNb3ZlID09IGxvb2tGb3J3YXJkIHx8IG15TGluZSA9PSBOVUxMKSB7IC8vIHJ1biBvdmVyIHRyZXNob2xkIG9yIG91dCBvZiB0YWlsb3JpbmcKKyAgICAgICAgdGFpbG9yaW5nTW92ZSA9IDA7CisgICAgICAgIC8vIHdlIGRpZG4ndCBmaW5kIGluc2VydGlvbiBhZnRlciBhbGwKKyAgICAgICAgLy8gd2Ugd2lsbCB0cnkgc3Vic3RpdHV0aW9uIG5leHQKKyAgICAgICAgLy8gcmVzZXQgdGhlIHRhaWxvcmluZyBwb2ludGVyCisgICAgICAgIG15TGluZSA9IG15TGF0ZXN0RXF1YWwtPm5leHQ7CisgICAgICAgIC8vIG1vdmUgdGhlIHJlZmVyZW5jZQorICAgICAgICByZWZMaW5lID0gcmVmTGluZS0+bmV4dDsKKyAgICAgICAgaWYocmVmTGluZSkgeworICAgICAgICAgIHRyYW5zZmVyQ3VtdWxhdGl2ZVN0cmVuZ3RoKHJlZkxpbmUtPnByZXZpb3VzLCByZWZMaW5lKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsgLy8gd2UgZm91bmQgYW4gaW5zZXJ0aW9uCisgICAgICAgIHRhaWxvcmluZ01vdmUgPSAwOworICAgICAgICBpZihteUxpbmUtPnN0cmVuZ3RoICE9IHJlZkxpbmUtPnN0cmVuZ3RoKSB7CisgICAgICAgICAgd2hpbGUobXlMaW5lICYmIHJlZkxpbmUgJiYgKm15TGluZSA9PSAqcmVmTGluZSAKKyAgICAgICAgICAgICYmIChteUxpbmUtPnN0cmVuZ3RoICE9IHJlZkxpbmUtPnN0cmVuZ3RoIAorICAgICAgICAgICAgfHwgbXlMaW5lLT5zdHJlbmd0aCA9PSBVQ09MX0lERU5USUNBTCkpIHsKKyAgICAgICAgICAgIG15TGluZSA9IG15TGluZS0+bmV4dDsKKyAgICAgICAgICAgIHJlZkxpbmUgPSByZWZMaW5lLT5uZXh0OworICAgICAgICAgIH0KKyAgICAgICAgICBpZigqbXlMaW5lICE9ICpyZWZMaW5lKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYobXlMaW5lICYmIHJlZkxpbmUgJiYgbXlMaW5lLT5wcmV2aW91cy0+c3RyZW5ndGggPCBteUxpbmUtPnN0cmVuZ3RoKSB7CisgICAgICAgICAgbXlMaW5lID0gbXlMaW5lLT5uZXh0OworICAgICAgICAgIHJlZkxpbmUgPSByZWZMaW5lLT5uZXh0OworICAgICAgICAgIGlmKCpteUxpbmUgIT0gKnJlZkxpbmUpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3VuZCA9IFRSVUU7CisgICAgICB9CisgICAgICBpZihmb3VuZCkgeworICAgICAgICBpZihteUxhdGVzdEVxdWFsLT5uZXh0ICE9IG15TGluZSB8fCByZWZMaW5lID09IE5VTEwpIHsKKyAgICAgICAgICBMaW5lICpteVN0YXJ0ID0gTlVMTDsKKyAgICAgICAgICAvLyB0aGlzIGlzIGEgcmVzZXQgYW5kIGEgc2VxdWVuY2UKKyAgICAgICAgICAvLyBteUxhdGVzdEVxdWFsIHBvaW50cyBhdCB0aGUgbGFzdCBwb2ludCB0aGF0IHdhcyB0aGUgc2FtZQorICAgICAgICAgIC8vIFRoaXMgcG9pbnQgd2lsbCBiZSBhIHJlc2V0CisgICAgICAgICAgaWYobXlMaW5lICYmIHJlZkxpbmUpIHsgLy8gaWYgdGhlcmUgaXMgYW55dGhpbmcgbW9yZSB0byBkbyAtIGl0IG1pZ2h0IGJlIHdvcnRoIHNhdmluZyBpdAorICAgICAgICAgICAgbXlTdGFydCA9IG15TGF0ZXN0RXF1YWw7CisgICAgICAgICAgICB3aGlsZShteVN0YXJ0ICE9IG15TGluZSkgeworICAgICAgICAgICAgICBzZWVuVGhpcy0+cHV0KFVuaWNvZGVTdHJpbmcobXlTdGFydC0+bmFtZSwgbXlTdGFydC0+bGVuKSwgbXlTdGFydCwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgbXlTdGFydCA9IG15U3RhcnQtPm5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIC8vIFRyeSB0byB3ZWVkIG91dCBzdHVmZiB0aGF0IGlzIG5vdCBhZmZlY3RlZCwgbGlrZToKKyAgICAgICAgICAvLyBUYWlsb3Jpbmc6CisgICAgICAgICAgLy8gPDw8Uzw8XHUwMTdGPFx1MDE2MTw8PFx1MDE2MDx0CisgICAgICAgICAgLy8gVUNBOgorICAgICAgICAgIC8vIDw8PFM8PFx1MDE2MTw8PFx1MDE2MDw8XHUwMTdGPHQKKyAgICAgICAgICAvLyBSZXN1bHQ6CisgICAgICAgICAgLy8gJlM8PFx1MDE3RjxcdTAxNjE8PDxcdTAxNjAKKyAgICAgICAgICAvLyB3ZSBoYXZlIGEgc2VxdWVuY2UgdGhhdCBzcGFucyBmcm9tIG15TGF0ZXN0RXF1YWwgdG8gbXlMaW5lICh0aGF0IG9uZSBjb3VsZCBiZSBOVUxMLCAKKyAgICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGdvIGRvd24gZnJvbSBteUxhdGVzdEVxdWFsLiAKKyAgICAgICAgICAvLyBCYXNpY2FsbHksIGZvciBldmVyeSBlbGVtZW50LCB3ZSB3YW50IHRvIHNlZSB0aGUgc3Ryb25nZXN0IGN1bXVsYXRpdmUgZGlmZmVyZW5jZSAKKyAgICAgICAgICAvLyBmcm9tIHRoZSByZXNldCBwb2ludC4gSWYgdGhlIGN1bXVsYXRpdmUgZGlmZmVyZW5jZSBpcyB0aGUgc2FtZSBpbiBib3RoIHRoZSByZWZlcmVuY2UgYW5kCisgICAgICAgICAgLy8gdGFpbG9yaW5nLCB0aGF0IGVsZW1lbnQgY291bGQgYmUgcmVtb3ZlZC4KKyAgICAgICAgICBjYWxjdWxhdGVDdW11bGF0aXZlU3RyZW5ndGhzKG15TGF0ZXN0RXF1YWwsIG15TGluZSk7CisgICAgICAgICAgY2FsY3VsYXRlQ3VtdWxhdGl2ZVN0cmVuZ3RocyhyZWZMYXRlc3RFcXVhbCwgcmVmTGluZSk7CisgICAgICAgICAgbXlTdGFydCA9IG15TGF0ZXN0RXF1YWw7CisgICAgICAgICAgaW50MzJfdCByZW1vdmVkID0gMDsKKyAgICAgICAgICBpbnQzMl90IHRyYXZlcnNlZCA9IDA7CisgICAgICAgICAgd2hpbGUobXlTdGFydCAmJiBteVN0YXJ0ICE9IG15TGluZSkgeworICAgICAgICAgICAgTGluZSAqcmVmU3RhcnQgPSByZWZMYXRlc3RFcXVhbDsKKyAgICAgICAgICAgIHdoaWxlKHJlZlN0YXJ0ICYmIHJlZlN0YXJ0ICE9IHJlZkxpbmUpIHsKKyAgICAgICAgICAgICAgaWYoKm15U3RhcnQgPT0gKnJlZlN0YXJ0KSB7CisgICAgICAgICAgICAgICAgaWYobXlTdGFydC0+Y3VtdWxhdGl2ZVN0cmVuZ3RoID09IHJlZlN0YXJ0LT5jdW11bGF0aXZlU3RyZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgIG15U3RhcnQtPmlzUmVtb3ZlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICByZW1vdmVkKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJlZlN0YXJ0ID0gcmVmU3RhcnQtPm5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBteVN0YXJ0ID0gbXlTdGFydC0+bmV4dDsKKyAgICAgICAgICAgIHRyYXZlcnNlZCsrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZihyZW1vdmVkIDwgdHJhdmVyc2VkKSB7CisgICAgICAgICAgICBteUxhdGVzdEVxdWFsLT5pc1Jlc2V0ID0gVFJVRTsKKyAgICAgICAgICAgIG15TGF0ZXN0RXF1YWwtPmlzUmVtb3ZlZCA9IEZBTFNFOworICAgICAgICAgIH0KKworICAgICAgICAgIG15TGF0ZXN0RXF1YWwgPSBteUxpbmU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZih1cHBlckZpcnN0KSB7CisgICAgLy9zd2FwQ2FzZSgpOworICB9CisKKyAgZGVsZXRlIHNlZW5UaGlzOworICBkZWxldGUgc2VlblJlZmVyZW5jZTsKKworfQorCit2b2lkCitTb3J0ZWRMaW5lczo6dHJhbnNmZXJDdW11bGF0aXZlU3RyZW5ndGgoTGluZSAqcHJldmlvdXMsIExpbmUgKnRoYXQpIHsKKyAgaWYodGhhdC0+c3RyZW5ndGggPiBwcmV2aW91cy0+Y3VtdWxhdGl2ZVN0cmVuZ3RoKSB7CisgICAgdGhhdC0+Y3VtdWxhdGl2ZVN0cmVuZ3RoID0gcHJldmlvdXMtPmN1bXVsYXRpdmVTdHJlbmd0aDsKKyAgfSBlbHNlIHsKKyAgICB0aGF0LT5jdW11bGF0aXZlU3RyZW5ndGggPSB0aGF0LT5zdHJlbmd0aDsKKyAgfQorfQorCit2b2lkCitTb3J0ZWRMaW5lczo6Y2FsY3VsYXRlQ3VtdWxhdGl2ZVN0cmVuZ3RocyhMaW5lICpzdGFydCwgTGluZSAqZW5kKSB7CisgIC8vIHN0YXJ0IGlzIGEgcmVzZXQgLSBlbmQgbWF5IGJlIE5VTEwKKyAgc3RhcnQgPSBzdGFydC0+bmV4dDsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGN1bXVsYXRpdmVTdHJlbmd0aCA9IFVDT0xfT0ZGOworICB3aGlsZShzdGFydCAmJiBzdGFydCAhPSBlbmQpIHsKKyAgICBpZihzdGFydC0+c3RyZW5ndGggPCBjdW11bGF0aXZlU3RyZW5ndGgpIHsKKyAgICAgIGN1bXVsYXRpdmVTdHJlbmd0aCA9IHN0YXJ0LT5zdHJlbmd0aDsKKyAgICB9CisgICAgc3RhcnQtPmN1bXVsYXRpdmVTdHJlbmd0aCA9IGN1bXVsYXRpdmVTdHJlbmd0aDsKKyAgICBzdGFydCA9IHN0YXJ0LT5uZXh0OworICB9Cit9CisKKwordm9pZCAKK1NvcnRlZExpbmVzOjpnZXRSZXBlcnRvaXJlKFVuaWNvZGVTZXQgJmZpbGxJbikgeworICBmaWxsSW4uY2xlYXIoKTsKKyAgZmlsbEluLmFkZEFsbChyZXBlcnRvaXJlKTsKK30KKworCit2b2lkCitTb3J0ZWRMaW5lczo6cmVtb3ZlRGVjb21wb3NpdGlvbnNGcm9tUmVwZXJ0b2lyZSgpIHsKKyAgVW5pY29kZVNldEl0ZXJhdG9yIHJlcGVydG9pcmVJdGVyKHJlcGVydG9pcmUpOworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgVUNoYXIgc3RyaW5nWzI1Nl07CisgIFVDaGFyIGNvbXBvc2VkWzI1Nl07CisgIGludDMyX3QgbGVuID0gMCwgY29tcExlbiA9IDA7CisgIFVuaWNvZGVTdHJpbmcgY29tcFN0cmluZzsKKyAgVW5pY29kZVNldCB0b1JlbW92ZTsKKworICB3aGlsZShyZXBlcnRvaXJlSXRlci5uZXh0KCkpIHsKKyAgICBsZW4gPSAwOworICAgIGlmKHJlcGVydG9pcmVJdGVyLmlzU3RyaW5nKCkpIHsgLy8gcHJvY2VzcyBhIHN0cmluZworICAgICAgbGVuID0gcmVwZXJ0b2lyZUl0ZXIuZ2V0U3RyaW5nKCkubGVuZ3RoKCk7CisgICAgICB1X21lbWNweShzdHJpbmcsIHJlcGVydG9pcmVJdGVyLmdldFN0cmluZygpLmdldEJ1ZmZlcigpLCBsZW4pOworICAgIH0gZWxzZSB7IC8vIHByb2Nlc3MgY29kZSBwb2ludAorICAgICAgVUJvb2wgaXNFcnJvciA9IEZBTFNFOworICAgICAgVTE2X0FQUEVORChzdHJpbmcsIGxlbiwgMjUsIHJlcGVydG9pcmVJdGVyLmdldENvZGVwb2ludCgpLCBpc0Vycm9yKTsKKyAgICB9CisgICAgc3RyaW5nW2xlbl0gPSAwOyAvLyB6ZXJvIHRlcm1pbmF0ZSwgZm9yIG91ciBldmlsIHdheXMKKyAgICBjb21wTGVuID0gdW5vcm1fbm9ybWFsaXplKHN0cmluZywgbGVuLCBVTk9STV9ORkMsIDAsIGNvbXBvc2VkLCAyNTYsICZzdGF0dXMpOworICAgIGlmKGNvbXBMZW4gIT0gbGVuIHx8IHVfc3RyY21wKHN0cmluZywgY29tcG9zZWQpICE9IDApIHsKKyAgICAgIGNvbXBTdHJpbmcuc2V0VG8oY29tcG9zZWQsIGNvbXBMZW4pOworICAgICAgaWYocmVwZXJ0b2lyZS5jb250YWlucyhjb21wU3RyaW5nKSkgeworICAgICAgICB0b1JlbW92ZS5hZGQoVW5pY29kZVN0cmluZyhzdHJpbmcsIGxlbikpOworICAgICAgfQorICAgIH0KKyAgfQorICBkZWJ1Zy0+bG9nKCJcblJlbW92aW5nXG4iKTsKKyAgZGVidWctPmxvZyh0b1JlbW92ZS50b1BhdHRlcm4oY29tcFN0cmluZywgVFJVRSksIFRSVUUpOworICByZXBlcnRvaXJlLnJlbW92ZUFsbCh0b1JlbW92ZSk7Cit9CisKKwordm9pZAorU29ydGVkTGluZXM6OnN3YXBDYXNlKCkgCit7CisgIGludDMyX3QgaSA9IDA7CisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIHRvU29ydFtpXS0+c3dhcENhc2UoKTsKKyAgfQorfQorCit2b2lkCitTb3J0ZWRMaW5lczo6Y2FsY3VsYXRlU29ydEtleShMaW5lICZsaW5lKSAKK3sKKyAgaWYoIXNvcnRrZXlzKSB7CisgICAgc29ydGtleXMgPSBuZXcgdWludDhfdFtzaXplKjEwMjRdOworICAgIG1lbXNldChzb3J0a2V5cywgMCwgc2l6ZSoxMDI0KTsKKyAgfQorICBsaW5lLnNvcnRLZXkgPSBzb3J0a2V5cytzb3J0a2V5T2Zmc2V0OworICBzb3J0a2V5T2Zmc2V0ICs9IHByb2JlLmdldFNvcnRLZXkobGluZSwgc29ydGtleXMrc29ydGtleU9mZnNldCwgc2l6ZSoyNTYtc29ydGtleU9mZnNldCk7Cit9CisKKwordm9pZCAKK1NvcnRlZExpbmVzOjpjYWxjdWxhdGVTb3J0S2V5cygpCit7CisgIGlmKHNvcnRrZXlzKSB7CisgICAgZGVsZXRlW10gc29ydGtleXM7CisgIH0KKyAgc29ydGtleU9mZnNldCA9IDA7CisgIHNvcnRrZXlzID0gbmV3IHVpbnQ4X3Rbc2l6ZSoyNTZdOworICBtZW1zZXQoc29ydGtleXMsIDAsIHNpemUqMjU2KTsKKyAgaW50MzJfdCBpID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgY2FsY3VsYXRlU29ydEtleSgqdG9Tb3J0W2ldKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvY29scHJvYmUvc29ydGVkbGluZXMuaCBiL2NvbHByb2JlL3NvcnRlZGxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNzAwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3NvcnRlZGxpbmVzLmgKQEAgLTAsMCArMSwxMjAgQEAKKyNpZm5kZWYgQ09MUFJPQkVfU09SVEVETElORVNfSAorI2RlZmluZSBDT0xQUk9CRV9TT1JURURMSU5FU19ICisKKy8vIGNvbHByb2JlIGluY2x1ZGVzCisjaW5jbHVkZSAiY29scHJvYmUuaCIKKyNpbmNsdWRlICJsaW5lLmgiCisjaW5jbHVkZSAidXByaW50ZXIuaCIKKyNpbmNsdWRlICJzdHJlbmd0aHByb2JlLmgiCisKKworLy8gSUNVIGluY2x1ZGVzCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzZXRpdGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2NyaXB0LmgiCisjaW5jbHVkZSAiaGFzaC5oIgorCitjbGFzcyBTb3J0ZWRMaW5lcyB7CisgIExpbmUgZW1wdHk7CisgIExpbmUgKlVCW1VDT0xfT0ZGXTsKKyAgVW5pY29kZVNldCBpZ25vcmFibGVzW1VDT0xfT0ZGXTsKKworICBMaW5lICoqdG9Tb3J0OworICBpbnQzMl90IHRvU29ydENhcGFjaXR5OworICBMaW5lICpsaW5lczsKKyAgaW50MzJfdCBzaXplOworICBpbnQzMl90IGNhcGFjaXR5OworCisgIFVuaWNvZGVTZXQgcmVwZXJ0b2lyZTsKKyAgVW5pY29kZVNldCBleGNsdWRlQm91bmRzOworCisgIFN0cmVuZ3RoUHJvYmUgcHJvYmU7CisKKyAgTGluZSAqZmlyc3Q7CisgIExpbmUgKmxhc3Q7CisgIExpbmUgKmN1cnJlbnQ7CisgIFNvcnRlZExpbmVzKCkge307CisKKyAgVVByaW50ZXIgKmxvZ2dlcjsKKyAgVVByaW50ZXIgKmRlYnVnOworCisgIEhhc2h0YWJsZSAqY29udHJhY3Rpb25zVGFibGU7CisgIEhhc2h0YWJsZSAqZHVwbGljYXRvcnM7IC8vIGVsZW1lbnRzIHRoYXQgZHVwbGljYXRlIHByZWNlZGluZyBjaGFyYWN0ZXJzCisgIGludDMyX3QgbWF4RXhwYW5zaW9uUHJlZml4U2l6ZTsKKworICAvLyBQcm9wZXJ0aWVzIG9mIHRoZSBzb3J0CisgIFVCb29sIHdvcmRTb3J0OworICBVQm9vbCBmcmVuY2hTZWNvbmRhcnk7CisgIFVCb29sIHVwcGVyRmlyc3Q7CisKKyAgdWludDhfdCAqc29ydGtleXM7CisgIGludDMyX3Qgc29ydGtleU9mZnNldDsKK3B1YmxpYzoKKyAgU29ydGVkTGluZXMoY29uc3QgVW5pY29kZVNldCAmc2V0LCBjb25zdCBVbmljb2RlU2V0ICZleGNsdWRlQm91bmRzLCBjb25zdCBTdHJlbmd0aFByb2JlICZwcm9iZSwgVVByaW50ZXIgKmxvZ2dlciwgVVByaW50ZXIgKmRlYnVnKTsKKyAgU29ydGVkTGluZXMoRklMRSAqZmlsZSwgVVByaW50ZXIgKmxvZ2dlciwgVVByaW50ZXIgKmRlYnVnLCBVRXJyb3JDb2RlICZzdGF0dXMpOworICB+U29ydGVkTGluZXMoKTsKKyAgdm9pZCBhbmFseXNlKFVFcnJvckNvZGUgJnN0YXR1cyk7CisKKyAgdm9pZCBzb3J0KFVCb29sIHNldFN0cmVuZ3RocyA9IFRSVUUsIFVCb29sIGxpbmsgPSBGQUxTRSk7CisgIHZvaWQgc29ydChMaW5lICoqc29ydGluZ0FycmF5LCBpbnQzMl90IHNpemVUb1NvcnQsIFVCb29sIHNldFN0cmVuZ3RocyA9IFRSVUUsIFVCb29sIGxpbmsgPSBGQUxTRSk7CisKKyAgTGluZSAqZ2V0Rmlyc3QoKTsKKyAgTGluZSAqZ2V0TGFzdCgpOworICB2b2lkIGFkZChMaW5lICpsaW5lLCBVQm9vbCBsaW5rSW4gPSBGQUxTRSk7CisgIHZvaWQgaW5zZXJ0KExpbmUgKmxpbmUsIGludDMyX3QgaW5kZXgpOworICBMaW5lICpnZXROZXh0KCk7CisgIExpbmUgKmdldFByZXZpb3VzKCk7CisgIExpbmUgKm9wZXJhdG9yW10oaW50MzJfdCBpbmRleCk7CisgIGludDMyX3QgYWRkQ29udHJhY3Rpb25zVG9SZXBlcnRvaXJlKFVFcnJvckNvZGUgJnN0YXR1cyk7CisKKyAgaW50MzJfdCBnZXRTaXplKCkgY29uc3Q7CisKKyAgaW50MzJfdCBkZXRlY3RFeHBhbnNpb25zKCk7CisgIAorICBVbmljb2RlU3RyaW5nIHRvU3RyaW5nKFVCb29sIHVzZUxpbmtzID0gRkFMU0UpOworICBVbmljb2RlU3RyaW5nIHRvU3RyaW5nRnJvbUVtcHR5KCk7CisgIFVuaWNvZGVTdHJpbmcgdG9QcmV0dHlTdHJpbmcoVUJvb2wgdXNlTGlua3MsIFVCb29sIHByaW50U29ydEtleXMgPSBGQUxTRSk7CisgIFVuaWNvZGVTdHJpbmcgdG9PdXRwdXQoY29uc3QgY2hhciAqZm9ybWF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKnBsYXRmb3JtLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBpbml0aWFsaXplLCBVQm9vbCBtb3JlVG9Db21lKTsKKyAgVW5pY29kZVN0cmluZyB0b0J1bmRsZShjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKnBsYXRmb3JtLCBjb25zdCBjaGFyICpyZWZlcmVuY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBpbml0aWFsaXplLCBVQm9vbCBtb3JlVG9Db21lKTsKKyAgVW5pY29kZVN0cmluZyB0b0hUTUwoY29uc3QgY2hhciAqbG9jYWxlLCBjb25zdCBjaGFyICpwbGF0Zm9ybSwgY29uc3QgY2hhciAqcmVmZXJlbmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgdXNlTGlua3MsIFVCb29sIGluaXRpYWxpemUsIFVCb29sIG1vcmVUb0NvbWUpOworICBVbmljb2RlU3RyaW5nIHRvWE1MKGNvbnN0IGNoYXIgKmxvY2FsZSwgY29uc3QgY2hhciAqcGxhdGZvcm0sIGNvbnN0IGNoYXIgKnJlZmVyZW5jZSwgCisgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIHVzZUxpbmtzLCBVQm9vbCBpbml0aWFsaXplLCBVQm9vbCBtb3JlVG9Db21lKTsKKyAgVW5pY29kZVN0cmluZyBhcnJheVRvU3RyaW5nKExpbmUqKiBzb3J0ZWRMaW5lcywgaW50MzJfdCBsaW5lc1NpemUsIFVCb29sIHByZXR0eSwgVUJvb2wgdXNlTGlua3MsIFVCb29sIHByaW50U29ydEtleXMpOworICB2b2lkIHNldFNvcnRpbmdBcnJheShMaW5lICoqc29ydGluZ0FycmF5LCBMaW5lICplbGVtZW50cywgaW50MzJfdCBzaXplVG9Tb3J0KTsKKyAgaW50MzJfdCBzZXRTb3J0aW5nQXJyYXkoTGluZSAqKnNvcnRpbmdBcnJheSwgSGFzaHRhYmxlICp0YWJsZSk7CisKKyAgdm9pZCByZWR1Y2VEaWZmZXJlbmNlKFNvcnRlZExpbmVzJiByZWZlcmVuY2UpOworICB2b2lkIGdldFJlcGVydG9pcmUoVW5pY29kZVNldCAmZmlsbEluKTsKKyAgdm9pZCByZW1vdmVEZWNvbXBvc2l0aW9uc0Zyb21SZXBlcnRvaXJlKCk7CisgIHZvaWQgZ2V0Qm91bmRzKFVFcnJvckNvZGUgJnN0YXR1cyk7CisgIHZvaWQgY2xhc3NpZnlSZXBlcnRvaXJlKCk7CisgIHZvaWQgdG9GaWxlKEZJTEUgKmZpbGUsIFVCb29sIHVzZUxpbmtzLCBVRXJyb3JDb2RlICZzdGF0dXMpOworICB2b2lkIHN3YXBDYXNlKCk7CisgIHZvaWQgY2FsY3VsYXRlU29ydEtleXMoKTsKKyAgdm9pZCBjYWxjdWxhdGVTb3J0S2V5KExpbmUgJmxpbmUpOworcHJpdmF0ZToKKyAgdm9pZCBpbml0KCk7CisgIHZvaWQgaW5pdChVbmljb2RlU2V0ICZyZXAsIExpbmUgKmxpbik7CisgIGludDMyX3QgZGV0ZWN0Q29udHJhY3Rpb25zKExpbmUgKipmaXJzdFJlcCwgaW50MzJfdCBmaXJzdFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZSAqKnNlY29uZFJlcCwgaW50MzJfdCBzZWNvbmRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgKnRvQWRkVG8sIGludDMyX3QgJnRvQWRkVG9TaXplLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lICpsZXNzZXJUb0FkZFRvLCBpbnQzMl90ICZsZXNzZXJUb0FkZFRvU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGNhcGFjaXR5LCBVRXJyb3JDb2RlICZzdGF0dXMpOworCisgIHZvaWQgY2FsY3VsYXRlQ3VtdWxhdGl2ZVN0cmVuZ3RocyhMaW5lICpzdGFydCwgTGluZSAqZW5kKTsKKyAgdm9pZCB0cmFuc2ZlckN1bXVsYXRpdmVTdHJlbmd0aChMaW5lICpwcmV2aW91cywgTGluZSAqdGhhdCk7CisgIHZvaWQgdXBkYXRlQm91bmRzKFVuaWNvZGVTZXQgJnNldCk7CisgIHZvaWQgYWRkQWxsKExpbmUqIHRvQWRkLCBpbnQzMl90IHRvQWRkU2l6ZSk7CisgIHZvaWQgc2V0RGlzdGFuY2VzRnJvbUVtcHR5KExpbmUqIGFycmF5LCBpbnQzMl90IGFycmF5U2l6ZSk7CisgIHZvaWQgbm90ZUNvbnRyYWN0aW9uKGNvbnN0IGNoYXIqIG1zZywgTGluZSAqdG9BZGRUbywgaW50MzJfdCAmdG9BZGRUb1NpemUsIExpbmUgKmxlZnQsIExpbmUgKnJpZ2h0LCBpbnQzMl90ICZub0NvbnRzLCBVRXJyb3JDb2RlICZzdGF0dXMpOworICBpbnQzMl90IGdvb3NlVXAoaW50MzJfdCByZXNldEluZGV4LCBpbnQzMl90IGV4cGFuc2lvbkluZGV4LCBMaW5lICZleHBMaW5lLCBpbnQzMl90ICpleHBJbmRleGVzLCBpbnQzMl90ICZleHBJbmRleFNpemUsIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCk7CisgIFVCb29sIGdldEV4cGFuc2lvbkxpbmUoY29uc3QgTGluZSAmZXhwYW5zaW9uLCBjb25zdCBMaW5lICZwcmV2aW91cywgY29uc3QgTGluZSAmZXhwLCBMaW5lICZleHBhbnNpb25MaW5lKTsKKworCit9OworCisjZW5kaWYgIC8vICNpZm5kZWYgQ09MUFJPQkVfU09SVEVETElORVNfSApkaWZmIC0tZ2l0IGEvY29scHJvYmUvc3RyZW5ndGhwcm9iZS5jcHAgYi9jb2xwcm9iZS9zdHJlbmd0aHByb2JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE5NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvc3RyZW5ndGhwcm9iZS5jcHAKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDAzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgbGluZS5oCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDcvMDcvMjAwMyAgd2VpdiAgICAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisvLworLy8gICBjbGFzcyBMaW5lCisvLworLy8gICAgICBFYWNoIGxpbmUgZnJvbSB0aGUgc291cmNlIGZpbGUgKGNvbnRhaW5pbmcgYSBuYW1lLCBwcmVzdW1hYmx5KSBnZXRzCisvLyAgICAgIG9uZSBvZiB0aGVzZSBzdHJ1Y3RzLgorLy8KKworI2luY2x1ZGUgInN0cmVuZ3RocHJvYmUuaCIKKworU3RyZW5ndGhQcm9iZTo6U3RyZW5ndGhQcm9iZShDb21wYXJlRm4gY29tcGFyZXIsIEdldFNvcnRLZXlGbiBnZXR0ZXIsIFVDaGFyIFNFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIgQjAsIFVDaGFyIEIxLCBVQ2hhciBCMiwgVUNoYXIgQjMpIDoKK1NFKFNFKSwKK0IwKEIwKSwgQjEoQjEpLCBCMihCMiksIEIzKEIzKSwKK3V0aWxGaXJzdFAoJnV0aWxGaXJzdCksIHV0aWxTZWNvbmRQKCZ1dGlsU2Vjb25kKSwKK2ZyZW5jaFNlY29uZGFyeShGQUxTRSksCitjb21wYXJlcihjb21wYXJlciksIHNrZ2V0dGVyKGdldHRlcikKK3sKK30KKworaW50CitTdHJlbmd0aFByb2JlOjpzZXRQcm9iZUNoYXJzKFVDaGFyIEIwLCBVQ2hhciBCMSwgVUNoYXIgQjIsIFVDaGFyIEIzKQoreworICB0aGlzLT5CMCA9IEIwOworICB0aGlzLT5CMSA9IEIxOworICB0aGlzLT5CMiA9IEIyOworICB0aGlzLT4KK0IzID0gQjM7CisgIHJldHVybiBjaGVja1Nhbml0eSgpOworfQorCitpbnQKK1N0cmVuZ3RoUHJvYmU6OmNoZWNrU2FuaXR5KCkgCit7CisgIGludCBzYW5pdHlSZXM7CisgIHV0aWxGaXJzdC5zZXRUbyhCMCk7CisgIHV0aWxTZWNvbmQuc2V0VG8oQjMpOworICBpZigoc2FuaXR5UmVzID0gY29tcGFyZXIoJnV0aWxGaXJzdFAsICZ1dGlsU2Vjb25kUCkpID49IDApIHsKKyAgICByZXR1cm4gc2FuaXR5UmVzKjEwICsgMzsKKyAgfQorICB1dGlsU2Vjb25kLnNldFRvKEIyKTsKKyAgaWYoKHNhbml0eVJlcyA9IGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApKSA+PSAwKSB7CisgICAgcmV0dXJuIHNhbml0eVJlcyoxMCArIDI7CisgIH0KKyAgdXRpbFNlY29uZC5zZXRUbyhCMSk7CisgIGlmKChzYW5pdHlSZXMgPSBjb21wYXJlcigmdXRpbEZpcnN0UCwgJnV0aWxTZWNvbmRQKSkgPj0gMCkgeworICAgIHJldHVybiBzYW5pdHlSZXMqMTAgKyAxOworICB9CisgIHV0aWxGaXJzdC5zZXRUbyhCMyk7CisgIHV0aWxTZWNvbmQuc2V0VG8oQjIpOworICBpZigoc2FuaXR5UmVzID0gY29tcGFyZXIoJnV0aWxGaXJzdFAsICZ1dGlsU2Vjb25kUCkpID49IDApIHsKKyAgICByZXR1cm4gc2FuaXR5UmVzKjEwICsgNTsKKyAgfQorICB1dGlsU2Vjb25kLnNldFRvKEIxKTsKKyAgaWYoKHNhbml0eVJlcyA9IGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApKSA+PSAwKSB7CisgICAgcmV0dXJuIHNhbml0eVJlcyoxMCArIDQ7CisgIH0KKyAgdXRpbEZpcnN0LnNldFRvKEIyKTsKKyAgaWYoKHNhbml0eVJlcyA9IGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApKSA+PSAwKSB7CisgICAgcmV0dXJuIHNhbml0eVJlcyoxMCArIDY7CisgIH0KKyAgdXRpbEZpcnN0LnNldFRvKEIwKTsKKyAgaWYoZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcodXRpbEZpcnN0KSA+IFVDT0xfUFJJTUFSWSkgeworICAgIHJldHVybiAxMDAwOworICB9CisgIHV0aWxGaXJzdC5zZXRUbyhCMSk7CisgIGlmKGRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKHV0aWxGaXJzdCkgPiBVQ09MX1BSSU1BUlkpIHsKKyAgICByZXR1cm4gMTAwMTsKKyAgfQorICB1dGlsRmlyc3Quc2V0VG8oQjIpOworICBpZihkaXN0YW5jZUZyb21FbXB0eVN0cmluZyh1dGlsRmlyc3QpID4gVUNPTF9QUklNQVJZKSB7CisgICAgcmV0dXJuIDEwMDI7CisgIH0KKyAgdXRpbEZpcnN0LnNldFRvKEIzKTsKKyAgaWYoZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcodXRpbEZpcnN0KSA+IFVDT0xfUFJJTUFSWSkgeworICAgIHJldHVybiAxMDAzOworICB9CisgIHJldHVybiAwOworfQorCitVQm9vbCAKK1N0cmVuZ3RoUHJvYmU6OnByb2JlUHJlZml4KGNvbnN0IExpbmUgJngsIGNvbnN0IExpbmUgJnksIFVDaGFyIGZpcnN0LCBVQ2hhciBzZWNvbmQpIHsKKyAgdXRpbEZpcnN0Lm5hbWVbMF0gPSBmaXJzdDsKKyAgdXRpbEZpcnN0Lm5hbWVbMV0gPSBTRTsKKyAgdV9zdHJjcHkodXRpbEZpcnN0Lm5hbWUrMiwgeC5uYW1lKTsKKyAgdXRpbEZpcnN0Lm5hbWVbeC5sZW4rMl0gPSAwOworICB1dGlsRmlyc3QubGVuID0geC5sZW4rMjsKKworICB1dGlsU2Vjb25kLm5hbWVbMF0gPSBzZWNvbmQ7CisgIHV0aWxTZWNvbmQubmFtZVsxXSA9IFNFOworICB1X3N0cmNweSh1dGlsU2Vjb25kLm5hbWUrMiwgeS5uYW1lKTsKKyAgdXRpbFNlY29uZC5uYW1lW3kubGVuKzJdID0gMDsKKyAgdXRpbFNlY29uZC5sZW4gPSB5LmxlbisyOworCisgIGlmKGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApIDwgMCkgeworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitVQm9vbCAKK1N0cmVuZ3RoUHJvYmU6OnByb2JlU3VmZml4KGNvbnN0IExpbmUgJngsIGNvbnN0IExpbmUgJnksIFVDaGFyIGZpcnN0LCBVQ2hhciBzZWNvbmQpIHsKKyAgdV9zdHJjcHkodXRpbEZpcnN0Lm5hbWUsIHgubmFtZSk7CisgIHV0aWxGaXJzdC5uYW1lW3gubGVuXSA9IFNFOworICB1dGlsRmlyc3QubmFtZVt4LmxlbisxXSA9IGZpcnN0OworICB1dGlsRmlyc3QubmFtZVt4LmxlbisyXSA9IDA7CisgIHV0aWxGaXJzdC5sZW4gPSB4LmxlbiArIDI7CisgIHVfc3RyY3B5KHV0aWxTZWNvbmQubmFtZSwgeS5uYW1lKTsKKyAgdXRpbFNlY29uZC5uYW1lW3kubGVuXSA9IFNFOworICB1dGlsU2Vjb25kLm5hbWVbeS5sZW4rMV0gPSBzZWNvbmQ7CisgIHV0aWxTZWNvbmQubmFtZVt5LmxlbisyXSA9IDA7CisgIHV0aWxTZWNvbmQubGVuID0geS5sZW4gKyAyOworCisgIGlmKGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApIDwgMCkgeworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitVQm9vbCAKK1N0cmVuZ3RoUHJvYmU6OnByb2JlUHJlZml4Tm9TZXAoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSwgVUNoYXIgZmlyc3QsIFVDaGFyIHNlY29uZCkgeworICB1dGlsRmlyc3QubmFtZVswXSA9IGZpcnN0OworICB1X3N0cmNweSh1dGlsRmlyc3QubmFtZSsxLCB4Lm5hbWUpOworICB1dGlsRmlyc3QubmFtZVt4LmxlbisxXSA9IDA7CisgIHV0aWxGaXJzdC5sZW4gPSB4LmxlbiArIDE7CisKKyAgdXRpbFNlY29uZC5uYW1lWzBdID0gc2Vjb25kOworICB1X3N0cmNweSh1dGlsU2Vjb25kLm5hbWUrMSwgeS5uYW1lKTsKKyAgdXRpbFNlY29uZC5uYW1lW3kubGVuKzFdID0gMDsKKyAgdXRpbFNlY29uZC5sZW4gPSB5LmxlbiArIDE7CisKKyAgaWYoY29tcGFyZXIoJnV0aWxGaXJzdFAsICZ1dGlsU2Vjb25kUCkgPCAwKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK1VCb29sIAorU3RyZW5ndGhQcm9iZTo6cHJvYmVTdWZmaXhOb1NlcChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5LCBVQ2hhciBmaXJzdCwgVUNoYXIgc2Vjb25kKSB7CisgIHVfc3RyY3B5KHV0aWxGaXJzdC5uYW1lLCB4Lm5hbWUpOworICB1dGlsRmlyc3QubmFtZVt4Lmxlbl0gPSBmaXJzdDsKKyAgdXRpbEZpcnN0Lm5hbWVbeC5sZW4rMV0gPSAwOworICB1dGlsRmlyc3QubGVuID0geC5sZW4gKyAxOworICB1X3N0cmNweSh1dGlsU2Vjb25kLm5hbWUsIHkubmFtZSk7CisgIHV0aWxTZWNvbmQubmFtZVt5Lmxlbl0gPSBzZWNvbmQ7CisgIHV0aWxTZWNvbmQubmFtZVt5LmxlbisxXSA9IDA7CisgIHV0aWxTZWNvbmQubGVuID0geS5sZW4gKyAxOworCisgIGlmKGNvbXBhcmVyKCZ1dGlsRmlyc3RQLCAmdXRpbFNlY29uZFApIDwgMCkgeworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitVQ29sQXR0cmlidXRlVmFsdWUgCitTdHJlbmd0aFByb2JlOjpnZXRTdHJlbmd0aChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5KSB7CisgIGNvbnN0IExpbmUgKnhwID0gJng7CisgIGNvbnN0IExpbmUgKnlwID0gJnk7CisKKyAgTGluZSBlbXB0eTsKKyAgTGluZSAqZW1wdHlQID0gJmVtcHR5OworICBpZihjb21wYXJlcigmZW1wdHlQLCAmeHApID09IDApIHsKKyAgICByZXR1cm4gZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoeSk7CisgIH0KKworICBpbnQzMl90IHJlc3VsdCA9IGNvbXBhcmVyKCZ4cCwgJnlwKTsKKworICBpZihyZXN1bHQgPT0gMCkgeworICAgIHJldHVybiBVQ09MX0lERU5USUNBTDsKKyAgfSBlbHNlIGlmKHJlc3VsdCA+IDApIHsKKyAgICByZXR1cm4gVUNPTF9PRkY7IC8vIGJhZCBzaXR1YXRpb24KKyAgfSBlbHNlIHsgLy8gd2UgbmVlZCB0byBwcm9iZSBzdHJlbmd0aAorICAgIGlmKHByb2JlU3VmZml4KHgsIHksIEIxLCBCMCkpIHsKKyAgICAvL2lmKHByb2JlUHJlZml4KHgsIHksIEIyLCBCMCkpIHsgLy8gc3dhbXBzIHNlY29uZGFyeSBkaWZmZXJlbmNlCisgICAgICByZXR1cm4gVUNPTF9QUklNQVJZOworICAgIH0gZWxzZSBpZihwcm9iZVByZWZpeCh4LCB5LCBCMywgQjApKSB7IC8vIHN3YW1wcyB0ZXJ0aWFyeSBkaWZmZXJlbmNlCisgICAgICByZXR1cm4gVUNPTF9TRUNPTkRBUlk7CisgICAgfSBlbHNlIGlmKHByb2JlU3VmZml4KHgsIHksIEIzLCBCMCkpIHsgLy8gc3dhbXBlZCBieSB0ZXJ0aWFyeSBkaWZmZXJlbmNlCisgICAgICByZXR1cm4gVUNPTF9URVJUSUFSWTsKKyAgICB9IGVsc2UgaWYoIXByb2JlUHJlZml4KHgsIHksIEIzLCBCMCkpIHsKKyAgICAgIHJldHVybiBVQ09MX1FVQVRFUk5BUlk7CisgICAgfQorICAgIC8qCisgICAgLy9pZihwcm9iZVN1ZmZpeCh4LCB5LCBCMSwgQjApKSB7CisgICAgaWYocHJvYmVQcmVmaXgoeCwgeSwgQjIsIEIwKSkgeyAvLyBzd2FtcHMgc2Vjb25kYXJ5IGRpZmZlcmVuY2UKKyAgICAgIHJldHVybiBVQ09MX1BSSU1BUlk7CisgICAgfSBlbHNlIGlmKHByb2JlUHJlZml4KHgsIHksIEIzLCBCMCkpIHsgLy8gc3dhbXBzIHRlcnRpYXJ5IGRpZmZlcmVuY2UKKyAgICAgIHJldHVybiBVQ09MX1NFQ09OREFSWTsKKyAgICB9IGVsc2UgaWYocHJvYmVTdWZmaXgoeCwgeSwgQjMsIEIwKSkgeyAvLyBzd2FtcGVkIGJ5IHRlcnRpYXJ5IGRpZmZlcmVuY2UKKyAgICAgIHJldHVybiBVQ09MX1RFUlRJQVJZOworICAgIH0gZWxzZSBpZighcHJvYmVQcmVmaXgoeCwgeSwgQjMsIEIwKSkgeworICAgICAgcmV0dXJuIFVDT0xfUVVBVEVSTkFSWTsKKyAgICB9CisgICAgKi8KKyAgfQorICByZXR1cm4gVUNPTF9PRkY7IC8vIGJhZAorfQorCitVQ29sQXR0cmlidXRlVmFsdWUgCitTdHJlbmd0aFByb2JlOjpnZXRTdHJlbmd0aChjb25zdCBVbmljb2RlU3RyaW5nICZzeCwgY29uc3QgVW5pY29kZVN0cmluZyAmc3kpIHsKKyAgTGluZSB4KHN4KTsKKyAgTGluZSB5KHN5KTsKKyAgcmV0dXJuIGdldFN0cmVuZ3RoKHgsIHkpOworfQorCitpbnQzMl90IAorU3RyZW5ndGhQcm9iZTo6Y29tcGFyZShjb25zdCBVbmljb2RlU3RyaW5nICZzeCwgY29uc3QgVW5pY29kZVN0cmluZyAmc3kpIHsKKyAgTGluZSB4KHN4KTsKKyAgTGluZSB5KHN5KTsKKyAgY29uc3QgTGluZSAqeHAgPSAmeDsKKyAgY29uc3QgTGluZSAqeXAgPSAmeTsKKyAgcmV0dXJuIGNvbXBhcmVyKCZ4cCwgJnlwKTsKK30KKworaW50MzJfdCAKK1N0cmVuZ3RoUHJvYmU6OmNvbXBhcmUoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSkgeworICBjb25zdCBMaW5lICp4cCA9ICZ4OworICBjb25zdCBMaW5lICp5cCA9ICZ5OworICByZXR1cm4gY29tcGFyZXIoJnhwLCAmeXApOworfQorCitVQ29sQXR0cmlidXRlVmFsdWUgCitTdHJlbmd0aFByb2JlOjpkaXN0YW5jZUZyb21FbXB0eVN0cmluZyhjb25zdCBMaW5lICZ4KSB7CisgIGlmKHgubmFtZVswXSA9PSAweDMwRCkgeworICAgIGludDMyX3QgcHV0QnJlYWtQb2ludEhlcmUgPSAwOworICB9CisgIExpbmUgZW1wdHk7CisgIExpbmUgKmVtcHR5UCA9ICZlbXB0eTsKKyAgdWludDhfdCBidWZmWzI1Nl07CisgIGdldFNvcnRLZXkoZW1wdHkubmFtZSwgZW1wdHkubGVuLCBidWZmLCAyNTYpOworICBMaW5lIEIwTGluZShCMCk7CisgIExpbmUgKkIwTGluZVAgPSAmQjBMaW5lOworICBjb25zdCBMaW5lICp4cCA9ICZ4OworICBpbnQzMl90IHJlc3VsdCA9IGNvbXBhcmVyKCZlbXB0eVAsICZ4cCk7CisgIGlmKHJlc3VsdCA9PSAwKSB7CisgICAgcmV0dXJuIFVDT0xfSURFTlRJQ0FMOworICB9IGVsc2UgaWYocmVzdWx0ID4gMCkgeworICAgIHJldHVybiBVQ09MX09GRjsKKyAgfQorICByZXN1bHQgPSBjb21wYXJlcigmQjBMaW5lUCwgJnhwKTsKKyAgaWYocmVzdWx0IDw9IDApIHsKKyAgICByZXR1cm4gVUNPTF9QUklNQVJZOworICB9CisgIExpbmUgc2V4YjAoU0UpOworICBzZXhiMC5hcHBlbmQoeC5uYW1lLCB4Lmxlbik7CisgIHNleGIwLmFwcGVuZChCMCk7CisKKyAgTGluZSBzZWIwKFNFKTsKKyAgc2ViMC5hcHBlbmQoQjApOworICB1aW50OF90IHNlYjBLWzI1Nl07CisgIHVpbnQ4X3Qgc2V4YjBLWzI1Nl07CisgIHVpbnQ4X3Qgc2ViMktbMjU2XTsKKyAgdWludDhfdCBzZWIzS1syNTZdOworICBtZW1zZXQoc2ViMEssIDAsIDI1Nik7CisgIG1lbXNldChzZXhiMEssIDAsIDI1Nik7CisgIG1lbXNldChzZWIySywgMCwgMjU2KTsKKyAgbWVtc2V0KHNlYjNLLCAwLCAyNTYpOworCisgIGdldFNvcnRLZXkoc2ViMCwgc2ViMEssIDI1Nik7CisgIGdldFNvcnRLZXkoc2V4YjAsIHNleGIwSywgMjU2KTsKKworICBpZihjb21wYXJlKHNlYjAsIHNleGIwKSA8PSAwKSB7CisgICAgTGluZSBzZWIyKFNFKTsKKyAgICBzZWIyLmFwcGVuZChCMik7CisgICAgZ2V0U29ydEtleShzZWIyLCBzZWIySywgMjU2KTsKKyAgICByZXN1bHQgPSBjb21wYXJlKHNlYjIsIHNleGIwKTsKKyAgICBpZigocmVzdWx0IDw9IDAgJiYgIWZyZW5jaFNlY29uZGFyeSkgfHwgKHJlc3VsdCA+PSAwICYmIGZyZW5jaFNlY29uZGFyeSkpIHsgLy8gc3dhbXBzIHRlcnRpYXJ5IGRpZmZlcmVuY2UKKyAgICAgIHJldHVybiBVQ09MX1NFQ09OREFSWTsKKyAgICB9CisgICAgTGluZSBzZWIzKFNFKTsKKyAgICBzZWIzLmFwcGVuZChCMyk7CisgICAgZ2V0U29ydEtleShzZWIzLCBzZWIzSywgMjU2KTsKKyAgICBpZihjb21wYXJlKHNlYjMsIHNleGIwKSA8IDApIHsKKyAgICAgIHJldHVybiBVQ09MX1RFUlRJQVJZOworICAgIH0KKyAgICByZXR1cm4gVUNPTF9RVUFURVJOQVJZOworICB9IGVsc2UgeworICAgIC8vIGlmIHRoaXMgd2FzIFVDQSwgd2Ugd291bGQgaGF2ZSBhIHByaW1hcnkgZGlmZmVyZW5jZS4KKyAgICAvLyBob3dldmVyLCB0aGlzIG1pZ2h0IG5vdCBiZSBzbywgc2luY2Ugbm90IGV2ZXJ5Ym9keSAKKyAgICAvLyBtYWtlcyB3ZWxsIGZvcm1lZCBDRXMuCisgICAgLy8gaW4gY3NfQ1ogb24gbGludXgsIHNwYWNlIGlzIHRlcnRpYXJ5IGlnbm9yYWJsZSwgYnV0CisgICAgLy8gaXRzIHF1YXRlcm5hcnkgbGV2ZWwgc3RyZW5ndGggaXMgbG93ZXIgdGhhbiBxdWFkIAorICAgIC8vIHN0cmVuZ3RocyBmb3Igbm9uLWlnbm9yYWJsZXMuIG9oIHdlbGwsIG1vcmUgdGVzdGluZworICAgIC8vIHJlcXVpcmVkCisgICAgLy8gSSB0aGluayB0aGF0IHdlIGNhbiBvbmx5IGhhdmUgcXVhdGVybmFyeSBkaWZmZXJlbmNlCisgICAgLy8gaGVyZSAoaW4gYWRkaXRpb24gdG8gcHJpbWFyeSBkaWZmZXJlbmNlKS4KKyAgICAvL2lmKCFwcm9iZVByZWZpeCh4LCBlbXB0eSwgQjMsIEIwKSkgeworICAgICAgLy9yZXR1cm4gVUNPTF9RVUFURVJOQVJZOworICAgIC8vfSBlbHNlIHsKKyAgICAgIHJldHVybiBVQ09MX1BSSU1BUlk7CisgICAgLy99CisgIH0KK30KKworVUNvbEF0dHJpYnV0ZVZhbHVlIAorU3RyZW5ndGhQcm9iZTo6ZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoY29uc3QgVW5pY29kZVN0cmluZyAmeCkgeworICBjb25zdCBMaW5lIHhwKHgpOworICByZXR1cm4gZGlzdGFuY2VGcm9tRW1wdHlTdHJpbmcoeHApOworfQorCisKK1VDb2xBdHRyaWJ1dGVWYWx1ZSAKK1N0cmVuZ3RoUHJvYmU6OmdldFByZWZpeGVkU3RyZW5ndGgoY29uc3QgTGluZSAmcHJlZml4LCBjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5KSB7CisgIGNvbnRyYWN0aW9uVXRpbEZpcnN0LnNldFRvQ29uY2F0KCZwcmVmaXgsICZ4KTsKKyAgY29udHJhY3Rpb25VdGlsU2Vjb25kLnNldFRvQ29uY2F0KCZwcmVmaXgsICZ5KTsKKyAgcmV0dXJuIGdldFN0cmVuZ3RoKGNvbnRyYWN0aW9uVXRpbEZpcnN0LCBjb250cmFjdGlvblV0aWxTZWNvbmQpOworfQorCisKK1N0cmVuZ3RoUHJvYmU6OlN0cmVuZ3RoUHJvYmUoY29uc3QgU3RyZW5ndGhQcm9iZSAmdGhhdCkgeworICAqdGhpcyA9IHRoYXQ7Cit9CisKK1N0cmVuZ3RoUHJvYmUgJgorU3RyZW5ndGhQcm9iZTo6b3BlcmF0b3I9KGNvbnN0IFN0cmVuZ3RoUHJvYmUgJnRoYXQpIHsKKyAgaWYodGhpcyAhPSAmdGhhdCkgeworICAgIEIwID0gdGhhdC5CMDsKKyAgICBCMSA9IHRoYXQuQjE7CisgICAgQjIgPSB0aGF0LkIyOworICAgIEIzID0gdGhhdC5CMzsKKyAgICBTRSA9IHRoYXQuU0U7CisgICAgZnJlbmNoU2Vjb25kYXJ5ID0gdGhhdC5mcmVuY2hTZWNvbmRhcnk7CisgICAgY29tcGFyZXIgPSB0aGF0LmNvbXBhcmVyOworICAgIHNrZ2V0dGVyID0gdGhhdC5za2dldHRlcjsKKworICAgIHV0aWxGaXJzdFAgPSAmdXRpbEZpcnN0OworICAgIHV0aWxTZWNvbmRQID0gJnV0aWxTZWNvbmQ7CisgIH0KKworICByZXR1cm4gKnRoaXM7Cit9CisKK1VCb29sCitTdHJlbmd0aFByb2JlOjppc0ZyZW5jaFNlY29uZGFyeShVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgdXRpbEZpcnN0LnNldFRvKEIwKTsKKyAgdXRpbEZpcnN0LmFwcGVuZChTRSk7CisgIHV0aWxGaXJzdC5hcHBlbmQoQjIpOworICB1dGlsU2Vjb25kLnNldFRvKEIyKTsKKyAgdXRpbFNlY29uZC5hcHBlbmQoU0UpOworICB1dGlsU2Vjb25kLmFwcGVuZChCMCk7CisKKyAgaW50MzJfdCByZXN1bHQgPSBjb21wYXJlKHV0aWxGaXJzdCwgdXRpbFNlY29uZCk7CisKKyAgaWYocmVzdWx0IDwgMCkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfSBlbHNlIGlmKHJlc3VsdCA+IDApIHsKKyAgICBmcmVuY2hTZWNvbmRhcnkgPSBUUlVFOworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UgeworICAgIHN0YXR1cyA9IFVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUjsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworVUJvb2wKK1N0cmVuZ3RoUHJvYmU6OmlzVXBwZXJGaXJzdChVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgVUNoYXIgaSA9IDA7CisgIGludDMyX3QgcmVzdWx0ID0gMDsKKyAgaW50MzJfdCB1cHBlciA9IDAsIGxvd2VyID0gMCwgZXF1YWwgPSAwOworICBmb3IoaSA9IDB4NDE7IGkgPCAweDVCOyBpKyspIHsKKyAgICB1dGlsRmlyc3Quc2V0VG8oaSk7CisgICAgdXRpbFNlY29uZC5zZXRUbyhpKzB4MjApOworICAgIHJlc3VsdCA9IGNvbXBhcmUodXRpbEZpcnN0LCB1dGlsU2Vjb25kKTsKKyAgICBpZihyZXN1bHQgPCAwKSB7CisgICAgICB1cHBlcisrOworICAgIH0gZWxzZSBpZihyZXN1bHQgPiAwKSB7CisgICAgICBsb3dlcisrOworICAgIH0gZWxzZSB7CisgICAgICBlcXVhbCsrOworICAgIH0KKyAgfQorICAKKyAgaWYobG93ZXIgPT0gMCAmJiBlcXVhbCA9PSAwKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgaWYodXBwZXIgPT0gMCAmJiBlcXVhbCA9PSAwKSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIHN0YXR1cyA9IFVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUjsKKyAgcmV0dXJuIEZBTFNFOworfQorCmRpZmYgLS1naXQgYS9jb2xwcm9iZS9zdHJlbmd0aHByb2JlLmggYi9jb2xwcm9iZS9zdHJlbmd0aHByb2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5MjViMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3N0cmVuZ3RocHJvYmUuaApAQCAtMCwwICsxLDg1IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBGaWxlIGxpbmUuaAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA3LzA3LzIwMDMgIHdlaXYgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworLy8KKy8vICAgY2xhc3MgTGluZQorLy8KKy8vICAgICAgRWFjaCBsaW5lIGZyb20gdGhlIHNvdXJjZSBmaWxlIChjb250YWluaW5nIGEgbmFtZSwgcHJlc3VtYWJseSkgZ2V0cworLy8gICAgICBvbmUgb2YgdGhlc2Ugc3RydWN0cy4KKy8vCisKKyNpZm5kZWYgQ09MUFJPQkVfU1RSRU5HVEhQUk9CRV9ICisjZGVmaW5lIENPTFBST0JFX1NUUkVOR1RIUFJPQkVfSAorCisjaW5jbHVkZSAiY29scHJvYmUuaCIKKyNpbmNsdWRlICJsaW5lLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzZXRpdGVyLmgiCisKK2NsYXNzIFN0cmVuZ3RoUHJvYmUgeworcHVibGljOgorICBVQ2hhciBTRTsKKyAgVUNoYXIgQjA7CisgIFVDaGFyIEIxOworICBVQ2hhciBCMjsKKyAgVUNoYXIgQjM7Citwcml2YXRlOgorICBMaW5lIHV0aWxGaXJzdDsKKyAgTGluZSB1dGlsU2Vjb25kOworICBMaW5lICp1dGlsRmlyc3RQOworICBMaW5lICp1dGlsU2Vjb25kUDsKKyAgTGluZSBjb250cmFjdGlvblV0aWxGaXJzdDsKKyAgTGluZSBjb250cmFjdGlvblV0aWxTZWNvbmQ7CisgIFVCb29sIHByb2JlUHJlZml4KGNvbnN0IExpbmUgJngsIGNvbnN0IExpbmUgJnksIFVDaGFyIGZpcnN0LCBVQ2hhciBzZWNvbmQpOworICBVQm9vbCBwcm9iZVN1ZmZpeChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5LCBVQ2hhciBmaXJzdCwgVUNoYXIgc2Vjb25kKTsKKyAgVUJvb2wgcHJvYmVQcmVmaXhOb1NlcChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5LCBVQ2hhciBmaXJzdCwgVUNoYXIgc2Vjb25kKTsKKyAgVUJvb2wgcHJvYmVTdWZmaXhOb1NlcChjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5LCBVQ2hhciBmaXJzdCwgVUNoYXIgc2Vjb25kKTsKKworICBVQm9vbCBmcmVuY2hTZWNvbmRhcnk7CisKK3B1YmxpYzoKKyAgQ29tcGFyZUZuIGNvbXBhcmVyOworICBHZXRTb3J0S2V5Rm4gc2tnZXR0ZXI7CisgIAorICBTdHJlbmd0aFByb2JlKCkge307CisgIFN0cmVuZ3RoUHJvYmUoQ29tcGFyZUZuIGNvbXBhcmVyLCBHZXRTb3J0S2V5Rm4gZ2V0dGVyLCBVQ2hhciBTRSA9IDB4MDAzMCwgVUNoYXIgQjAgPSAweDAwNjEsIFVDaGFyIEIxID0gMHgwMDYyLCBVQ2hhciBCMiA9IDB4MDBFMSwgVUNoYXIgQjMgPSAweDAwNDEpOyAvLywgVUNoYXIgTEIgPSAweDAwMzksIFVDaGFyIFVCID0gMHhmYTI5KTsKKyAgaW50IHNldFByb2JlQ2hhcnMoVUNoYXIgQjAsIFVDaGFyIEIxLCBVQ2hhciBCMiwgVUNoYXIgQjMpOworICBpbnQgY2hlY2tTYW5pdHkoKTsKKyAgU3RyZW5ndGhQcm9iZShjb25zdCBTdHJlbmd0aFByb2JlICZ0aGF0KTsKKyAgU3RyZW5ndGhQcm9iZSAmb3BlcmF0b3I9KGNvbnN0IFN0cmVuZ3RoUHJvYmUgJnRoYXQpOworICBVQ29sQXR0cmlidXRlVmFsdWUgZ2V0U3RyZW5ndGgoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSk7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBnZXRTdHJlbmd0aChjb25zdCBVbmljb2RlU3RyaW5nICZ4LCBjb25zdCBVbmljb2RlU3RyaW5nICZ5KTsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGdldFByZWZpeGVkU3RyZW5ndGgoY29uc3QgTGluZSAmcHJlZml4LCBjb25zdCBMaW5lICZ4LCBjb25zdCBMaW5lICZ5KTsKKyAgaW50MzJfdCBjb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcgJngsIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnkpOworICBpbnQzMl90IGNvbXBhcmUoY29uc3QgTGluZSAmeCwgY29uc3QgTGluZSAmeSk7CisgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBkaXN0YW5jZUZyb21FbXB0eVN0cmluZyhjb25zdCBMaW5lICZ4KTsKKyAgVUNvbEF0dHJpYnV0ZVZhbHVlIGRpc3RhbmNlRnJvbUVtcHR5U3RyaW5nKGNvbnN0IFVuaWNvZGVTdHJpbmcgJngpOworICBVQm9vbCBpc0ZyZW5jaFNlY29uZGFyeShVRXJyb3JDb2RlICZzdGF0dXMpOworICBVQm9vbCBpc1VwcGVyRmlyc3QoVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgaW50IGdldFNvcnRLZXkoY29uc3QgTGluZSAmbCwgdWludDhfdCAqYnVmZmVyLCBpbnQzMl90IGJ1ZmZDYXApIHsKKyAgICByZXR1cm4gc2tnZXR0ZXIobC5uYW1lLCBsLmxlbiwgYnVmZmVyLCBidWZmQ2FwKTsKKyAgfTsKKworICBpbnQgZ2V0U29ydEtleShVQ2hhciAqc3RyaW5nLCBpbnQzMl90IHNMZW4sIHVpbnQ4X3QgKmJ1ZmZlciwgaW50MzJfdCBidWZmQ2FwKSB7CisgICAgcmV0dXJuIHNrZ2V0dGVyKHN0cmluZywgc0xlbiwgYnVmZmVyLCBidWZmQ2FwKTsKKyAgfTsKKyAKK307CisKKworI2VuZGlmIC8vI2lmbmRlZiBDT0xQUk9CRV9TVFJFTkdUSFBST0JFX0gKKwpkaWZmIC0tZ2l0IGEvY29scHJvYmUvdGFibGVTdGFydGVyLnBsIGIvY29scHJvYmUvdGFibGVTdGFydGVyLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxYjdmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS90YWJsZVN0YXJ0ZXIucGwKQEAgLTAsMCArMSwxNiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7CisKK215ICRsb2NhbGVNaW51c0EgPSBgY2F0IC9ob21lL3dlaXYvc3JjL2ljdS9zb3VyY2UvZXh0cmEvY29scHJvYmUvbG9jYWxlLnR4dGA7CitteSBAbG9jYWxlcyA9IHNwbGl0KC9cbi8sICRsb2NhbGVNaW51c0EpOworbXkgJGxvY2FsZTsKK215ICRjb21tYW5kOworCitmb3JlYWNoICRsb2NhbGUgKEBsb2NhbGVzKSB7CisgIGlmKCRsb2NhbGUgPX4gL18vICYmICEoJGxvY2FsZSA9fiAvXiMvKSkgeworICAgICRjb21tYW5kID0gIi9ob21lL3dlaXYvc3JjL2ljdS9zb3VyY2UvZXh0cmEvY29scHJvYmUvZG9Db21wYXJpc29uVGFibGUucGwgJGxvY2FsZSI7CisgICAgcHJpbnQgIiRjb21tYW5kXG4iOworICAgIGAkY29tbWFuZGA7CisgIH0KK30KZGlmZiAtLWdpdCBhL2NvbHByb2JlL3RhcmdldHNldGdlbmVyYXRvci5jcHAgYi9jb2xwcm9iZS90YXJnZXRzZXRnZW5lcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZGNiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS90YXJnZXRzZXRnZW5lcmF0b3IuY3BwCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgInRhcmdldHNldGdlbmVyYXRvci5oIgorCitUYXJnZXRTZXRHZW5lcmF0b3I6OlRhcmdldFNldEdlbmVyYXRvcihVbmljb2RlU2V0ICZzdGFydGluZ1NldCwgQ29tcGFyZUZuIGNvbXBhcmVyKSA6CisgY29tcGFyZXIoY29tcGFyZXIpLAorIHNldChzdGFydGluZ1NldCkKK3sKKyAgIGFkZEFsbChzdGFydGluZ1NldCk7Cit9CmRpZmYgLS1naXQgYS9jb2xwcm9iZS90YXJnZXRzZXRnZW5lcmF0b3IuaCBiL2NvbHByb2JlL3RhcmdldHNldGdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODk3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2xwcm9iZS90YXJnZXRzZXRnZW5lcmF0b3IuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIFRBUkdFVFNFVEdFTkVSQVRPUl9ICisjZGVmaW5lIFRBUkdFVFNFVEdFTkVSQVRPUl9ICisKKyNpbmNsdWRlICJjb2xwcm9iZS5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisKK2NsYXNzIFRhcmdldFNldEdlbmVyYXRvciA6IHB1YmxpYyBVbmljb2RlU2V0IHsKK3B1YmxpYzoKKyAgVGFyZ2V0U2V0R2VuZXJhdG9yKFVuaWNvZGVTZXQgJnN0YXJ0aW5nU2V0LCBDb21wYXJlRm4gY29tcGFyZXIpOworcHJpdmF0ZToKKyAgQ29tcGFyZUZuIGNvbXBhcmVyOworICBVbmljb2RlU2V0IHNldDsKK307CisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbHByb2JlL3RlbXBsYXRlIGIvY29scHJvYmUvdGVtcGxhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExYWE5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3RlbXBsYXRlCkBAIC0wLDAgKzEsNDggQEAKKzxodG1sPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT4kbG9jYWxlPC90aXRsZT4KKzxzdHlsZT4KKyAgICAgICAgIDwhLS0KKyAgICAgICAgIHRhYmxlICAgICAgICB7IGJvcmRlci1zcGFjaW5nOiAwOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTsgCisgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjayB9Cit0ZCwgdGggICAgICAgeyB3aWR0aDogMTAlOyBib3JkZXItc3BhY2luZzogMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgY29sb3I6IGJsYWNrOyAKKyAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KKy0tPgorICAgICA8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIj4KKworPHA+PGI+PGZvbnQgY29sb3I9IiNGRjAwMDAiPkNvbGxhdGlvbjo8L2ZvbnQ+ICRsb2NhbGUgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2NnaS1iaW4vaWN1L2x4L2VuLz9fPSRsb2NhbGUiPkRlbW88L2E+LCAKKworPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2N2cy9pY3UvfmNoZWNrb3V0fi9sb2NhbGUvYWxsX2RpZmZfeG1sL2NvbXBhcmlzb25fY2hhcnRzLmh0bWwiPkNvdmVyIAorUGFnZTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jdnMvaWN1L35jaGVja291dH4vbG9jYWxlL2FsbF9kaWZmX3htbC9pbmRleC5odG1sIj5JbmRleDwvYT48L2I+PC9wPgorPHRhYmxlPgorICA8dHI+CisgICAgPHRoIGJnY29sb3I9IiNBRDk4OUQiPkNPTU1PTiAoPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2N2cy9pY3UvfmNoZWNrb3V0fi9sb2NhbGUvY29tbW9uL3htbC8kbG9jYWxlLnhtbCI+eG1sPC9hPik8L3RoPgorICAgIDx0aCBiZ2NvbG9yPSIjMTE5MUYxIj5MSU5VWCAoPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2N2cy9pY3UvfmNoZWNrb3V0fi9sb2NhbGUvbGludXgveG1sLyRsb2NhbGUueG1sIj54bWw8L2E+KTwvdGg+CisgICAgPHRoIGJnY29sb3I9IiM5OEZCOTgiPldJTkRPV1MgKDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9jdnMvaWN1L35jaGVja291dH4vbG9jYWxlL3dpbmRvd3MveG1sLyRsb2NhbGUueG1sIj54bWw8L2E+KTwvdGg+CisgIDwvdHI+CisKKyAgPHRyPgorICAgIDx0ZCBiZ2NvbG9yPSIjQUQ5ODlEIj4xLjAtYWxwaGE8L3RkPgorICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj4xLjA8L3RkPgorICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KKyAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PHNwYW4gdGl0bGU9IjAwNkUge0xBVElOIFNNQUxMIExFVFRFUiBOfSI+JmFtcDtuPC9zcGFuPjxicj4KKyAgICAgIDxzcGFuIHRpdGxlPSIwMDZFIDAwNzkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbHQ7Jm5ic3A7bnk8L3NwYW4+PGJyPgorCisgICAgICA8c3BhbiB0aXRsZT0iMDA2RSAwMDZFIDAwNzkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIE59IHtMQVRJTiBTTUFMTCBMRVRURVIgWX0gLyAwMDZFIDAwNzkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gU01BTEwgTEVUVEVSIFl9Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs9Jm5ic3A7bm55Jm5ic3A7LyZuYnNwO255PC9zcGFuPjxicj4KKyAgICAgIDxzcGFuIHRpdGxlPSIwMDZFIDAwNTkge0xBVElOIFNNQUxMIExFVFRFUiBOfSB7TEFUSU4gQ0FQSVRBTCBMRVRURVIgWX0iPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsmbHQ7Jmx0OyZuYnNwO25ZPC9zcGFuPjxicj4KKyAgICA8L3RkPgorICAgIDx0ZCBiZ2NvbG9yPSIjRkY2NjMzIj49PC90ZD4KKyAgICA8dGQgYmdjb2xvcj0iI0ZGRkYzMyI+MS4yPC90ZD4KKworICAgIDx0ZCBiZ2NvbG9yPSIjOThGQjk4Ij5XaW5kb3dzIFhQPC90ZD4KKyAgICA8dGQgYmdjb2xvcj0iI0ZGNjYzMyI+PTwvdGQ+CisgICAgPHRkIGJnY29sb3I9IiNGRjY2MzMiPj08L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPC9ib2R5PgpkaWZmIC0tZ2l0IGEvY29scHJvYmUvdW5pcXVlRmlsZXMucGwgYi9jb2xwcm9iZS91bmlxdWVGaWxlcy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42N2RhNTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvdW5pcXVlRmlsZXMucGwKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7CisKK215ICRmaWxlOworbXkgJHNlY29uZGZpbGU7CitteSAlc2Vjb25kZmlsZWxpc3Q7CitteSBAc2FtZTsKK215ICVsaXN0OworbXkgJHNhbWVmaWxlOworCitmb3JlYWNoICRzZWNvbmRmaWxlIChAQVJHVikgeworICAkc2Vjb25kZmlsZWxpc3R7JHNlY29uZGZpbGV9ID0gIiI7Cit9CisKK2ZvcmVhY2ggJGZpbGUgKHNvcnQga2V5cyglc2Vjb25kZmlsZWxpc3QpKSB7CisgIGlmKGV4aXN0cyAkc2Vjb25kZmlsZWxpc3R7JGZpbGV9KSB7CisgICAgZGVsZXRlICRzZWNvbmRmaWxlbGlzdHskZmlsZX07CisgICAgZm9yZWFjaCAkc2Vjb25kZmlsZSAoc29ydChrZXlzICVzZWNvbmRmaWxlbGlzdCkpIHsKKyAgICAgICNwcmludCAiZGlmZmluZzogJGZpbGUgYW5kICRzZWNvbmRmaWxlXG4iOworICAgICAgaWYgKCFgZGlmZiAkZmlsZSAkc2Vjb25kZmlsZWApIHsKKyAgICAgICAgI3ByaW50ICIkZmlsZSBhbmQgJHNlY29uZGZpbGUgYXJlIHRoZSBzYW1lXG4iOworICAgICAgICBwdXNoIEBzYW1lLCAkc2Vjb25kZmlsZTsKKyAgICAgIH0KKyAgICB9CisjICAgIGlmICgkI3NhbWUgPiAtMSkgeworICAgICAgcHJpbnQgIkFkZGluZyBAc2FtZSB0byAkZmlsZVxuIjsKKyAgICAgICRsaXN0eyRmaWxlfSA9ICBbQHNhbWVdIDsKKyAgICAgIGZvcmVhY2ggJHNhbWVmaWxlIChAc2FtZSkgeworICAgICAgICBkZWxldGUgJHNlY29uZGZpbGVsaXN0eyRzYW1lZmlsZX07CisgICAgICB9CisgICAgICBkZWxldGUgQHNhbWVbMC4uJCNzYW1lXTsKKyMgICAgfQorICB9Cit9CisKKworbXkgJGkgPSAwOworbXkgJGogPSAwOworIGZvcmVhY2ggJGZpbGUgKHNvcnQoIGtleXMgJWxpc3QpKSB7CisgICAjcHJpbnQgIiRmaWxlIC0+ICI7ICNAe2xpc3R7JGZpbGV9fVxuIjsKKyAgIHByaW50ICI8JGZpbGU+IDwkaj5cbiI7CisgICBmb3JlYWNoICRpICggMCAuLiAkI3sgJGxpc3R7JGZpbGV9IH0gKSB7CisgICAgICNwcmludCAiJGxpc3R7JGZpbGV9WyRpXSAiOworICAgICBwcmludCAiPCRsaXN0eyRmaWxlfVskaV0+IDwkaj5cbiAiOworICAgfQorICAgJGorKzsKKyB9CisKZGlmZiAtLWdpdCBhL2NvbHByb2JlL3VwcmludGVyLmNwcCBiL2NvbHByb2JlL3VwcmludGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDlhYjljCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvdXByaW50ZXIuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBGaWxlIHVwcmludGVyLmNwcAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDAzLzE4LzIwMDMgIHdlaXYgICAgICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgInVwcmludGVyLmgiCisKK1VQcmludGVyOjpVUHJpbnRlcihGSUxFICpmaWxlLCBjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBVQm9vbCB0cmFuc2xpdGVyYXRlTm9uUHJpbnRhYmxlKSB7CisgIF9vbiA9IFRSVUU7CisgIG91dCA9IHVfZmluaXQoZmlsZSwgbG9jYWxlLCBlbmNvZGluZyk7CisgIHN0cmNweShfbG9jYWxlLCBsb2NhbGUpOworICBpZih0cmFuc2xpdGVyYXRlTm9uUHJpbnRhYmxlKSB7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgVVRyYW5zbGl0ZXJhdG9yICphbnlIZXggPSB1dHJhbnNfb3BlbigiW15cXHUwMDBkXFx1MDAwYVxcdTAwMDlcXHUwMDIwLVxcdTAwN2ZdIEFueS1IZXgvSmF2YSIsIFVUUkFOU19GT1JXQVJELCBOVUxMLCAwLCBOVUxMLCAmc3RhdHVzKTsKKyAgICB1X2ZzZXR0cmFuc2xpdGVyYXRvcihvdXQsIFVfV1JJVEUsIGFueUhleCwgJnN0YXR1cyk7CisgIH0KK307CisKK1VQcmludGVyOjpVUHJpbnRlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBVVHJhbnNsaXRlcmF0b3IgKnRyYW5zLCBVQm9vbCB0cmFuc2xpdGVyYXRlTm9uUHJpbnRhYmxlKSB7CisgIF9vbiA9IFRSVUU7CisgIG91dCA9IHVfZm9wZW4obmFtZSwgIndiIiwgbG9jYWxlLCBlbmNvZGluZyk7CisgIHVfZnB1dGMoMHhGRUZGLCBvdXQpOyAvLyBlbWl0IGEgQk9NCisgIHN0cmNweShfbG9jYWxlLCBsb2NhbGUpOworICBpZih0cmFuc2xpdGVyYXRlTm9uUHJpbnRhYmxlKSB7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaWYodHJhbnMgPT0gTlVMTCkgeworICAgICAgVVRyYW5zbGl0ZXJhdG9yICphbnlIZXggPSB1dHJhbnNfb3BlbigiW15cXHUwMDBkXFx1MDAwYVxcdTAwMDlcXHUwMDIwLVxcdTAwN2ZdIEFueS1IZXgvSmF2YSIsIFVUUkFOU19GT1JXQVJELCBOVUxMLCAwLCBOVUxMLCAmc3RhdHVzKTsKKyAgICAgIHVfZnNldHRyYW5zbGl0ZXJhdG9yKG91dCwgVV9XUklURSwgYW55SGV4LCAmc3RhdHVzKTsKKyAgICB9IGVsc2UgeworICAgICAgdV9mc2V0dHJhbnNsaXRlcmF0b3Iob3V0LCBVX1dSSVRFLCB0cmFucywgJnN0YXR1cyk7CisgICAgfQorICB9Cit9OworCitVUHJpbnRlcjo6flVQcmludGVyKCkgeworICB1X2ZjbG9zZShvdXQpOworfQorCit2b2lkIAorVVByaW50ZXI6OmxvZyhjb25zdCBVbmljb2RlU3RyaW5nICZzdHJpbmcsIFVCb29sIG5sKSB7CisgIGlmKF9vbikgeworICAgIGxvZygoKFVuaWNvZGVTdHJpbmcpc3RyaW5nKS5nZXRUZXJtaW5hdGVkQnVmZmVyKCksIG5sKTsKKyAgfQorfQorCit2b2lkIAorVVByaW50ZXI6OmxvZyhjb25zdCBVQ2hhciAqc3RyaW5nLCBVQm9vbCBubCkgeworICBpZihfb24pIHsKKyAgICB1X2ZwcmludGYob3V0LCAiJVMiLCBzdHJpbmcpOworICAgIGlmKG5sKSB7CisgICAgICB1X2ZwcmludGYob3V0LCAiXG4iKTsKKyAgICB9CisgICAgdV9mZmx1c2gob3V0KTsKKyAgfQorfQorLyoKK3ZvaWQgCitVUHJpbnRlcjo6bG9nKGNvbnN0IGNoYXIgKnN0cmluZywgVUJvb2wgbmwpIHsKKyAgaWYoX29uKSB7CisgICAgdV9mcHJpbnRmKG91dCwgIiVzIiwgc3RyaW5nKTsKKyAgICBpZihubCkgeworICAgICAgdV9mcHJpbnRmKG91dCwgIlxuIik7CisgICAgfQorICB9Cit9CisqLwordm9pZCAKK1VQcmludGVyOjpsb2coY29uc3QgTGluZSAqbGluZSwgVUJvb2wgbmwpIHsKKyAgaWYoX29uKSB7CisgICAgbG9nKGxpbmUtPm5hbWUpOworICAgIGlmKGxpbmUtPmV4cExlbikgeworICAgICAgbG9nKCIvIik7CisgICAgICBsb2cobGluZS0+ZXhwYW5zaW9uU3RyaW5nKTsKKyAgICB9CisgICAgaWYobmwpIHsKKyAgICAgIHVfZnByaW50ZihvdXQsICJcbiIpOworICAgICAgdV9mZmx1c2gob3V0KTsKKyAgICB9CisgIH0KK30KKwordm9pZCBVUHJpbnRlcjo6bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIFVDaGFyIGJ1ZmZlcls0MDAwXTsKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgLyogc3ByaW50ZiBpdCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpcyB2YWxpZCAqLworICAgIHVfdnNwcmludGYoYnVmZmVyLCBfbG9jYWxlLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIGlmKCBfb24gKSB7CisgICAgICAgIGxvZyhidWZmZXIpOworICAgIH0KK30KKwordm9pZAorVVByaW50ZXI6Om9uKHZvaWQpIHsKKyAgX29uID0gVFJVRTsKK30KKwordm9pZAorVVByaW50ZXI6Om9mZih2b2lkKSB7CisgIF9vbiA9IEZBTFNFOworfQpkaWZmIC0tZ2l0IGEvY29scHJvYmUvdXByaW50ZXIuaCBiL2NvbHByb2JlL3VwcmludGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0MjEwNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbHByb2JlL3VwcmludGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDMsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSB1cHJpbnRlci5oCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDMvMTgvMjAwMyAgd2VpdiAgICAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIENPTFBST0JFX1VQUklOVEVSX0gKKyNkZWZpbmUgQ09MUFJPQkVfVVBSSU5URVJfSAorCisjaW5jbHVkZSAibGluZS5oIgorCisjaW5jbHVkZSAidW5pY29kZS91c3RkaW8uaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorCisKK2NsYXNzIFVQcmludGVyIHsKKyAgVUZJTEUgKm91dDsKKyAgVUNoYXIgYnVmZmVyWzI1Nl07CisgIFVCb29sIF9vbjsKKyAgY2hhciBfbG9jYWxlWzI1Nl07CitwdWJsaWM6CisgIFVQcmludGVyKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmxvY2FsZSwgY29uc3QgY2hhciAqZW5jb2RpbmcsIFVCb29sIHRyYW5zbGl0ZXJhdGVOb25QcmludGFibGU9VFJVRSk7CisgIFVQcmludGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmxvY2FsZSwgY29uc3QgY2hhciAqZW5jb2RpbmcsIFVUcmFuc2xpdGVyYXRvciAqdHJhbnMsIFVCb29sIHRyYW5zbGl0ZXJhdGVOb25QcmludGFibGUpOworICB+VVByaW50ZXIoKTsKKyAgdm9pZCBsb2coY29uc3QgVW5pY29kZVN0cmluZyAmc3RyaW5nLCBVQm9vbCBubCA9IEZBTFNFKTsKKyAgdm9pZCBsb2coY29uc3QgVUNoYXIgKnN0cmluZywgVUJvb2wgbmwgPSBGQUxTRSk7CisgIC8vdm9pZCBsb2coY29uc3QgY2hhciAqc3RyaW5nLCBVQm9vbCBubCA9IEZBTFNFKTsKKyAgdm9pZCBsb2coY29uc3QgTGluZSAqbGluZSwgVUJvb2wgbmwgPSBGQUxTRSk7CisgIHZvaWQgbG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyAgdm9pZCBvZmYodm9pZCk7CisgIHZvaWQgb24odm9pZCk7CisgIFVCb29sIGlzT24odm9pZCkgeworICAgIHJldHVybiBfb247CisgIH07Cit9OworCisKKworI2VuZGlmIC8vICNpZm5kZWYgQ09MUFJPQkVfVVBSSU5URVJfSApkaWZmIC0tZ2l0IGEvY29scHJvYmUvd2luR2VuQ29sbERhdGEucGwgYi9jb2xwcm9iZS93aW5HZW5Db2xsRGF0YS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNzc0NjRjCi0tLSAvZGV2L251bGwKKysrIGIvY29scHJvYmUvd2luR2VuQ29sbERhdGEucGwKQEAgLTAsMCArMSwzMCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7CisKKyNteSAkbG9jYWxlTWludXNBID0gYGxvY2FsZSAtYWA7CitteSAkbG9jYWxlTWludXNBID0gYGNhdCBsb2NhbGUudHh0YDsKKworbXkgQGxvY2FsZXMgPSBzcGxpdCgvXHJcbi8sICRsb2NhbGVNaW51c0EpOworbXkgJGxvY2FsZTsKK215ICRjb21tYW5kOworCisjbXkgJGNvbW1hbmRQYXRoID0gIn4vc3JjL2ljdS9zb3VyY2UvZXh0cmEvY29scHJvYmUvIjsKK215ICRjb21tYW5kUGF0aCA9ICJjOi9kZXYvMF9pY3Uvc291cmNlL2V4dHJhL2NvbHByb2JlL3JlbGVhc2UvIjsKKworCitteSAkcGxhdGZvcm0gPSAkQVJHVlswXTsKKworbWtkaXIgJHBsYXRmb3JtLiJsb2dzIjsKK21rZGlyICRwbGF0Zm9ybTsKKworZm9yZWFjaCAkbG9jYWxlIChAbG9jYWxlcykgeworICAkXyA9ICRsb2NhbGU7CisgIGNob21wOworICBpZighL15cIy8pIHsgIyAmJiAvXF8vKSB7CisgICAgJGNvbW1hbmQgPSAkY29tbWFuZFBhdGguImNvbHByb2JlIC0tcGxhdGZvcm0gJHBsYXRmb3JtIC0tcmVmICRwbGF0Zm9ybSAtLW91dHB1dCByZXNiICRsb2NhbGUgPiRwbGF0Zm9ybSIuImxvZ3MvJGxvY2FsZSIuIl9sb2cudHh0IDI+JjEiOworIAorICAgIHByaW50ICIkY29tbWFuZFxuIjsKKyAgICBgJGNvbW1hbmRgOworICB9Cit9CmRpZmYgLS1naXQgYS9jdXJyZW5jeS8uY2xhc3NwYXRoIGIvY3VycmVuY3kvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2Q3NDhkCi0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvLmNsYXNzcGF0aApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJvdXQvYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvY3VycmVuY3kvLnByb2plY3QgYi9jdXJyZW5jeS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgwYWQxCi0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvLnByb2plY3QKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5jdXJyZW5jeS1udW1lcmljPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjAxYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI0ZyaSBKYW4gMjAgMDA6MDk6NTMgRVNUIDIwMTINCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KK2VuY29kaW5nLzxwcm9qZWN0Pj1VVEYtOA0KZGlmZiAtLWdpdCBhL2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM3ZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMzQ3IEBACisjVGh1IEphbiAxOSAxMDoyMDo0MCBFU1QgMjAxMg0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25fdHlwZV9tZW1iZXJzX29uX2NvbHVtbnM9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2Fubm90YXRpb249MA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9lbnVtX2NvbnN0YW50PTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fbWV0aG9kX2ludm9jYXRpb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fcXVhbGlmaWVkX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2JpbmFyeV9leHByZXNzaW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29tcGFjdF9pZj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249ODANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9lbnVtX2NvbnN0YW50cz0wDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZXhwcmVzc2lvbnNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tZXRob2RfZGVjbGFyYXRpb249MA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJjbGFzc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Rocm93c19jbGF1c2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249MTYNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9pbXBvcnRzPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfcGFja2FnZT0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0wDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maXJzdF9jbGFzc19ib2R5X2RlY2xhcmF0aW9uPTANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWV0aG9kPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl9pbXBvcnRfZ3JvdXBzPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2s9ZW5kX29mX2xpbmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrX2luX2Nhc2U9ZW5kX29mX2xpbmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2NvbnN0YW50PWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1lbmRfb2ZfbGluZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzX2luX2Jsb2NrX2NvbW1lbnQ9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfaHRtbD10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2phdmFkb2NfY29tbWVudHM9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9saW5lX2NvbW1lbnRzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9wYXJhbWV0ZXJfZGVzY3JpcHRpb249dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9iZWZvcmVfcm9vdF90YWdzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTEyMA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9ibG9ja19ib3VuZGFyaWVzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfamF2YWRvY19ib3VuZGFyaWVzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5wcmVzZXJ2ZV93aGl0ZV9zcGFjZV9iZXR3ZWVuX2NvZGVfYW5kX2xpbmVfY29tbWVudHM9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTINCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj0yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmRpc2FibGluZ190YWc9QGZvcm1hdHRlclw6b2ZmDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmVuYWJsaW5nX3RhZz1AZm9ybWF0dGVyXDpvbg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfZ3VhcmRpYW5fY2xhdXNlX29uX29uZV9saW5lPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9saW5lX2NvbW1lbnRfc3RhcnRpbmdfb25fZmlyc3RfY29sdW1uPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2NvbnN0YW50X2hlYWRlcj10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYnJlYWtzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zdGF0ZW1lbnRzX2NvbXBhcmVfdG9fYm9keT10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRhdGlvbi5zaXplPTQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fZmllbGQ9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2xvY2FsX3ZhcmlhYmxlPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9tZW1iZXI9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21ldGhvZD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFja2FnZT1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFyYW1ldGVyPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fdHlwZT1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2xhYmVsPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2F0Y2hfaW5fdHJ5X3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZWxzZV9pbl9pZl9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2ZpbmFsbHlfaW5fdHJ5X3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fubm90YXRpb25fZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9jb25zdGFudD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9mb3I9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Fubm90YXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9lbGxpcHNpcz1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NhdGNoPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZm9yPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2xhYmVsZWRfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9mb3JfaW5jcmVtZW50cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2xvY2FsX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2RlY2xhcmF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NhdGNoPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9mb3I9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3JldHVybj1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fdGhyb3c9aW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fZm9yPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2JyYWNrZXRzX2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX2xpbmVzX2luX2NvbW1lbnRzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuam9pbl93cmFwcGVkX2xpbmVzPXRydWUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2ltcGxlX2lmX29uX29uZV9saW5lPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmxpbmVTcGxpdD0xMjANCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2Jsb2NrX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5uZXZlcl9pbmRlbnRfbGluZV9jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2JsYW5rX2xpbmVzX2F0X2JlZ2lubmluZ19vZl9tZXRob2RfYm9keT0wDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnB1dF9lbXB0eV9zdGF0ZW1lbnRfb25fbmV3X2xpbmU9dHJ1ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLmNoYXI9c3BhY2UNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5zaXplPTQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX29uX29mZl90YWdzPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV90YWJzX29ubHlfZm9yX2xlYWRpbmdfaW5kZW50YXRpb25zPWZhbHNlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj10cnVlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfb3V0ZXJfZXhwcmVzc2lvbnNfd2hlbl9uZXN0ZWQ9dHJ1ZQ0KZGlmZiAtLWdpdCBhL2N1cnJlbmN5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9jdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmVmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJyZW5jeS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsMTAgQEAKKyNUaHUgSmFuIDE5IDEwOjIwOjM5IEVTVCAyMDEyDQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitmb3JtYXR0ZXJfcHJvZmlsZT1fSUNVNEogU3RhbmRhcmQNCitmb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMg0KK29yZy5lY2xpcHNlLmpkdC51aS5pZ25vcmVsb3dlcmNhc2VuYW1lcz10cnVlDQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsNCitvcmcuZWNsaXBzZS5qZHQudWkuamF2YWRvYz10cnVlDQorb3JnLmVjbGlwc2UuamR0LnVpLm9uZGVtYW5kdGhyZXNob2xkPTk5DQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5DQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/Pjx0ZW1wbGF0ZXM+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iZ2V0dGVyY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgZ2V0dGVyIG1ldGhvZCIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5nZXR0ZXJjb21tZW50IiBuYW1lXD0iZ2V0dGVyY29tbWVudCI+LyoqXHJcbiAqIEByZXR1cm4gdGhlICR7YmFyZV9maWVsZF9uYW1lfVxyXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9InNldHRlcmNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIHNldHRlciBtZXRob2QiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuc2V0dGVyY29tbWVudCIgbmFtZVw9InNldHRlcmNvbW1lbnQiPi8qKlxyXG4gKiBAcGFyYW0gJHtwYXJhbX0gdGhlICR7YmFyZV9maWVsZF9uYW1lfSB0byBzZXRcclxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJjb25zdHJ1Y3RvcmNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGNyZWF0ZWQgY29uc3RydWN0b3JzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmNvbnN0cnVjdG9yY29tbWVudCIgbmFtZVw9ImNvbnN0cnVjdG9yY29tbWVudCI+LyoqXHJcbiAqICR7dGFnc31cclxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9ImZhbHNlIiBjb250ZXh0XD0iZmlsZWNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGNyZWF0ZWQgSmF2YSBmaWxlcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5maWxlY29tbWVudCIgbmFtZVw9ImZpbGVjb21tZW50Ij4vKlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBDb3B5cmlnaHQgKEMpICR7eWVhcn0sIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKlxyXG4gKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9InR5cGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBjcmVhdGVkIHR5cGVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLnR5cGVjb21tZW50IiBuYW1lXD0idHlwZWNvbW1lbnQiPi8qKlxyXG4gKiBAYXV0aG9yICR7dXNlcn1cclxuICpcclxuICogJHt0YWdzfVxyXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImZpZWxkY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgZmllbGRzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmZpZWxkY29tbWVudCIgbmFtZVw9ImZpZWxkY29tbWVudCI+LyoqXHJcbiAqIFxyXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9Im1ldGhvZGNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIG5vbi1vdmVycmlkaW5nIG1ldGhvZHMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMubWV0aG9kY29tbWVudCIgbmFtZVw9Im1ldGhvZGNvbW1lbnQiPi8qKlxyXG4gKiAke3RhZ3N9XHJcbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ib3ZlcnJpZGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBvdmVycmlkaW5nIG1ldGhvZHMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMub3ZlcnJpZGVjb21tZW50IiBuYW1lXD0ib3ZlcnJpZGVjb21tZW50Ij4vKiAobm9uLUphdmFkb2MpXHJcbiAqICR7c2VlX3RvX292ZXJyaWRkZW59XHJcbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iZGVsZWdhdGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBkZWxlZ2F0ZSBtZXRob2RzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmRlbGVnYXRlY29tbWVudCIgbmFtZVw9ImRlbGVnYXRlY29tbWVudCI+LyoqXHJcbiAqICR7dGFnc31cclxuICogJHtzZWVfdG9fdGFyZ2V0fVxyXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9Im5ld3R5cGVfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9Ik5ld2x5IGNyZWF0ZWQgZmlsZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMubmV3dHlwZSIgbmFtZVw9Im5ld3R5cGUiPiR7ZmlsZWNvbW1lbnR9XHJcbiR7cGFja2FnZV9kZWNsYXJhdGlvbn1cclxuXHJcbiR7dHlwZWNvbW1lbnR9XHJcbiR7dHlwZV9kZWNsYXJhdGlvbn08L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImNsYXNzYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgY2xhc3MgdHlwZSBib2RpZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuY2xhc3Nib2R5IiBuYW1lXD0iY2xhc3Nib2R5Ij5cclxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJpbnRlcmZhY2Vib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBpbnRlcmZhY2UgdHlwZSBib2RpZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuaW50ZXJmYWNlYm9keSIgbmFtZVw9ImludGVyZmFjZWJvZHkiPlxyXG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImVudW1ib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBlbnVtIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmVudW1ib2R5IiBuYW1lXD0iZW51bWJvZHkiPlxyXG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImFubm90YXRpb25ib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBhbm5vdGF0aW9uIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmFubm90YXRpb25ib2R5IiBuYW1lXD0iYW5ub3RhdGlvbmJvZHkiPlxyXG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImNhdGNoYmxvY2tfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gbmV3IGNhdGNoIGJsb2NrcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5jYXRjaGJsb2NrIiBuYW1lXD0iY2F0Y2hibG9jayI+Ly8gJHt0b2RvfSBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9ja1xyXG4ke2V4Y2VwdGlvbl92YXJ9LnByaW50U3RhY2tUcmFjZSgpOzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ibWV0aG9kYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBjcmVhdGVkIG1ldGhvZCBzdHVicyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5tZXRob2Rib2R5IiBuYW1lXD0ibWV0aG9kYm9keSI+Ly8gJHt0b2RvfSBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YlxyXG4ke2JvZHlfc3RhdGVtZW50fTwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iY29uc3RydWN0b3Jib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIGNyZWF0ZWQgY29uc3RydWN0b3Igc3R1YnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuY29uc3RydWN0b3Jib2R5IiBuYW1lXD0iY29uc3RydWN0b3Jib2R5Ij4ke2JvZHlfc3RhdGVtZW50fVxyXG4vLyAke3RvZG99IEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWI8L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImdldHRlcmJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gY3JlYXRlZCBnZXR0ZXJzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmdldHRlcmJvZHkiIG5hbWVcPSJnZXR0ZXJib2R5Ij5yZXR1cm4gJHtmaWVsZH07PC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJzZXR0ZXJib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIGNyZWF0ZWQgc2V0dGVycyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5zZXR0ZXJib2R5IiBuYW1lXD0ic2V0dGVyYm9keSI+JHtmaWVsZH0gXD0gJHtwYXJhbX07PC90ZW1wbGF0ZT48L3RlbXBsYXRlcz4NCmRpZmYgLS1naXQgYS9jdXJyZW5jeS9idWlsZC54bWwgYi9jdXJyZW5jeS9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxMjRlYgotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5L2J1aWxkLnhtbApAQCAtMCwwICsxLDc2IEBACis8IS0tCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLT4KKzxwcm9qZWN0IG5hbWU9ImN1cnJlbmN5LW51bWVyaWMiIGRlZmF1bHQ9ImJ1aWxkIiBiYXNlZGlyPSIuIj4KKyAgICA8cHJvcGVydHkgbmFtZT0ib3V0LmRpciIgdmFsdWU9IiR7YmFzZWRpcn0vb3V0Ii8+CisgICAgPHByb3BlcnR5IG5hbWU9InNyYy5kaXIiIHZhbHVlPSIke2Jhc2VkaXJ9L3NyYyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc2VzLmRpciIgdmFsdWU9IiR7b3V0LmRpcn0vYmluIi8+CisgICAgPHByb3BlcnR5IG5hbWU9InJlcy5kaXIiIHZhbHVlPSIke291dC5kaXJ9L3JlcyIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJ4bWwuZGlyIiB2YWx1ZT0iJHtvdXQuZGlyfS94bWwiLz4KKworICAgIDxwcm9wZXJ0eSBuYW1lPSJiYXNlLnVybCIgdmFsdWU9Imh0dHA6Ly93d3cuY3VycmVuY3ktaXNvLm9yZy9jb250ZW50L2RhbS9pc29jeS9kb3dubG9hZHMvIi8+CisgICAgPHByb3BlcnR5IG5hbWU9ImN1cnJlbnQueG1sIiB2YWx1ZT0iZGxfaXNvX3RhYmxlX2ExLnhtbCIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoaXN0b3JpYy54bWwiIHZhbHVlPSJkbF9pc29fdGFibGVfYTMueG1sIi8+CisKKzx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNoZWNrLCByZXNvdXJjZSIgZGVzY3JpcHRpb249IlZlcmlmeSBJQ1UncyBsb2NhbCBkYXRhIGFuZCBnZW5lcmF0ZSBJU08gNDIxNyBhbHBoYS1udW1lcmljIGNvZGUgbWFwcGluZyBkYXRhIHJlc291cmNlIi8+CisKKzx0YXJnZXQgbmFtZT0iY2xhc3NlcyIgZGVzY3JpcHRpb249IkJ1aWxkIHRoZSBKYXZhIHRvb2wiPgorICAgIDxta2RpciBkaXI9IiR7Y2xhc3Nlcy5kaXJ9Ii8+CisgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgZGVzdGRpcj0iJHtjbGFzc2VzLmRpcn0iCisgICAgICAgICAgICB0YXJnZXQ9IjEuNiIgZW5jb2Rpbmc9IlVURi04IiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiLz4KKzwvdGFyZ2V0PgorCis8dGFyZ2V0IG5hbWU9Il9jaGVja0xvY2FsWG1sIj4KKyAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJpc0xvY2FsWG1sIj4KKyAgICAgICAgPGFuZD4KKyAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtiYXNlZGlyfS8ke2N1cnJlbnQueG1sfSIvPgorICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Jhc2VkaXJ9LyR7aGlzdG9yaWMueG1sfSIvPgorICAgICAgICA8L2FuZD4KKyAgICA8L2NvbmRpdGlvbj4KKzwvdGFyZ2V0PgorCis8dGFyZ2V0IG5hbWU9Il9sb2NhbFhtbCIgZGVwZW5kcz0iX2NoZWNrTG9jYWxYbWwiIGlmPSJpc0xvY2FsWG1sIj4KKyAgICA8ZWNobyBtZXNzYWdlPSJVc2luZyBsb2NhbCBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcyIvPgorICAgIDxjb3B5IGZpbGU9IiR7Y3VycmVudC54bWx9IiB0b2Rpcj0iJHt4bWwuZGlyfSIvPgorICAgIDxjb3B5IGZpbGU9IiR7aGlzdG9yaWMueG1sfSIgdG9kaXI9IiR7eG1sLmRpcn0iLz4KKzwvdGFyZ2V0PgorCis8dGFyZ2V0IG5hbWU9Il9kb3dubG9hZFhtbCIgdW5sZXNzPSJpc0xvY2FsWG1sIj4KKyAgICA8ZWNobyBtZXNzYWdlPSJEb3dubG9hZGluZyBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcyIvPgorICAgIDxta2RpciBkaXI9IiR7eG1sLmRpcn0iLz4KKyAgICA8Z2V0IHNyYz0iJHtiYXNlLnVybH0ke2N1cnJlbnQueG1sfSIgZGVzdD0iJHt4bWwuZGlyfSIvPgorICAgIDxnZXQgc3JjPSIke2Jhc2UudXJsfSR7aGlzdG9yaWMueG1sfSIgZGVzdD0iJHt4bWwuZGlyfSIvPgorPC90YXJnZXQ+CisKKzx0YXJnZXQgbmFtZT0ieG1sRGF0YSIgZGVwZW5kcz0iX2xvY2FsWG1sLCBfZG93bmxvYWRYbWwiIGRlc2NyaXB0aW9uPSJQcmVwYXJlIG5lY2Vzc2FyeSBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcyI+Cis8L3RhcmdldD4KKworPHRhcmdldCBuYW1lPSJjaGVjayIgZGVwZW5kcz0iY2xhc3NlcywgeG1sRGF0YSIgZGVzY3JpcHRpb249IlZlcmlmeSBpZiBJQ1UncyBsb2NhbCBtYXBwaW5nIGRhdGEgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIFhNTCBkYXRhIj4KKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5Lk1haW4iCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7Y2xhc3Nlcy5kaXJ9IgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICA8YXJnIHZhbHVlPSJjaGVjayIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke3htbC5kaXJ9LyR7Y3VycmVudC54bWx9Ii8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7eG1sLmRpcn0vJHtoaXN0b3JpYy54bWx9Ii8+CisgICAgPC9qYXZhPgorPC90YXJnZXQ+CisKKzx0YXJnZXQgbmFtZT0icmVzb3VyY2UiIGRlcGVuZHM9ImNsYXNzZXMiIGRlc2NyaXB0aW9uPSJCdWlsZCBJU08gNDIxNyBhbHBoYS1udW1lcmljIGNvZGUgbWFwcGluZyBkYXRhIHJlc291cmNlIj4KKyAgICA8bWtkaXIgZGlyPSIke3Jlcy5kaXJ9Ii8+CisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeS5NYWluIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2NsYXNzZXMuZGlyfSIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgPGFyZyB2YWx1ZT0iYnVpbGQiLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtyZXMuZGlyfSIvPgorICAgIDwvamF2YT4KKyAgICA8ZWNobyBtZXNzYWdlPSJJU08gNDIxNyBudW1lcmljIGNvZGUgbWFwcGluZyBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCBpbiAke3Jlcy5kaXJ9Ii8+Cis8L3RhcmdldD4KKworPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkRlbGV0ZSBidWlsZCBvdXRwdXRzIj4KKyAgICA8ZGVsZXRlIGRpcj0iJHtvdXQuZGlyfSIvPgorPC90YXJnZXQ+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jdXJyZW5jeS9yZWFkbWUudHh0IGIvY3VycmVuY3kvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzU1NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvcmVhZG1lLnR4dApAQCAtMCwwICsxLDExMiBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitbT3ZlcnZpZXddCisKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgdG9vbCB1c2VkIGZvciBtYWludGFpbmluZyBJQ1UncyBJU08gNDIxNyBjdXJyZW5jeQorY29kZSBtYXBwaW5nIGRhdGEuIElDVSB1c2VzIGEgcmVzb3VyY2UgZ2VuZXJhdGVkIGJ5IHRoaXMgdG9vbCBmb3IgbWFwcGluZworSVNPIDQyMTcgY3VycmVuY3kgYWxwaGEgY29kZXMgdG8gbnVtZXJpYyBjb2Rlcy4KKworCitbRmlsZXNdCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3kKKworTWFpbi5qYXZhIC0gVGhlIHRvb2wncyBlbnRyeSBwb2ludAorTnVtZXJpY0NvZGVEYXRhLmphdmEgLSBUaGUgbWFwcGluZyBkYXRhIHVzZWQgYnkgSUNVCitDdXJyZW5jeURhdGFQYXJzZXIuamF2YSAtIElTTyA0MjE3IFhNTCBkYXRhIHBhcnNlcgorQ3VycmVuY3lEYXRhRW50cnkuamF2YSAtIElTTyA0MjE3IFhNTCBkYXRhIGVudHJ5CisKKworW0RldGFpbHNdCisKK2NvbS5pYm0uaWN1LmRldi50b29sLk51bWVyaWNDb2RlRGF0YSBoYXMgU3RyaW5nW11bXSBDT0RFX01BUF9EQVRBLgorVGhpcyBhcnJheSByZXByZXNlbnRzIG1hcHBpbmdzIGJldHdlZW4gSVNPIDQyMTcgYWxwaGEgY29kZXMgYW5kCitudW1lcmljIGNvZGVzLiBJQ1UncyByZXNvdXJjZSBidW5kbGUgY3VycmVuY3lOdW1lcmljQ29kZXMgaXMgZ2VuZXJhdGVkCitmcm9tIHRoZSB0YWJsZS4KKworSVNPIDQyMTcgbWFpbnRlbmFuY2UgYWdlbmN5IC0gU0lYIEludGVyYmFuayBDbGVhcmluZyBkaXN0cmlidXRlcworSVNPIDQyMTcgY29kZSBkYXRhIGluIFhNTCBmb3JtYXQuIFRoZXNlIGZpbGVzIGFyZSBmb3VuZCBpbgoraHR0cDovL3d3dy5jdXJyZW5jeS1pc28ub3JnL2lzb19pbmRleC9pc29fdGFibGVzLmh0bS4gVGhlcmUgYXJlIHR3bworZmlsZXMgdGhhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLgorCisgLSBodHRwOi8vd3d3LmN1cnJlbmN5LWlzby5vcmcvZGxfaXNvX3RhYmxlX2ExLnhtbAorIC0gaHR0cDovL3d3dy5jdXJyZW5jeS1pc28ub3JnL2RsX2lzb190YWJsZXNfYTMueG1sCisKK1RhYmxlIEEuMSBjb250YWlucyBjdXJyZW50IGN1cnJlbmNpZXMgYW5kIGZ1bmRzIGFuZCBUYWJsZSBBLjMgY29udGFpbnMKK2hpc3RvcmljIGRlbm9taW5hdGlvbnMuCisKK1RoZSB0b29sIHN1cHBvcnRzIDIgY29tbWFuZHMgLSBjaGVjayAvIHJlc291cmNlLgorCisxKSBjaGVjaworCitUaGlzIGNvbW1hbmQgY29tcGFyZXMgdGhlIGhhcmRjb2RlZCBtYXBwaW5nIGRhdGEgaW4gTnVtZXJpY0NvZGVEYXRhLmphdmEKK3dpdGggdGhlIElTTyA0MjE3IFhNTCBkYXRhIGZpbGVzIHNpZGUgYnkgc2lkZSBhbmQgY2hlY2sgZGlmZmVyZW5jZXMuCisKKzIpIHJlc291cmNlCisKK1RoaXMgY29tbWFuZCB3cml0ZXMgb3V0IHRoZSBoYXJkY29kZWQgbWFwcGluZyBkYXRhIGluIE51bWVyaWNDb2RlRGF0YS5qYXZhCitpbiBJQ1UgcmVzb3VyY2UgYnVuZGxlIHNvdXJjZSBmb3JtYXQgLSBjdXJyZW5jeU51bWVyaWNDb2Rlcy50eHQuCisKKworW1JlbGVhc2UgVGFza3NdCisKK0ZvciBlYWNoIElDVSByZWxlYXNlLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIG1hcHBpbmcgZGF0YSBpcyB1cCB0byBkYXRlLgorCitQcmVyZXF1aXNpdGVzOiBKYXZhIDYrLCBhbnQKKworRmlyc3QsIHJ1biB0aGUgYW50IHRhcmdldCAiY2hlY2siLiBUaGlzIGFudCB0YXJnZXQgZG93bmxvYWQgWE1MIGZpbGVzIGZyb20KK3RoZSBTSVggSW50ZXJiYW5rIENsZWFyaW5nIHNpdGUgYW5kIGludm9rZSB0aGUgdG9vbCBjb21tYW5kICJjaGVjayIuCisKK1doZW4gdGhlIHRhcmdldCBzdWNjZXNzZnVsbHkgZmluaXNoZWQsIHlvdSBzaG91bGQgc2VlIHRoZSBsb2cgbGlrZSBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0M6XGRldnRsc1x0cnVua1xjdXJyZW5jeT5hbnQgY2hlY2sKK0J1aWxkZmlsZTogQzpcZGV2dGxzXHRydW5rXGN1cnJlbmN5XGJ1aWxkLnhtbAorCitjbGFzc2VzOgorCitfY2hlY2tMb2NhbFhtbDoKKworX2xvY2FsWG1sOgorCitfZG93bmxvYWRYbWw6CisgICAgIFtlY2hvXSBEb3dubG9hZGluZyBJU08gNDIxNyBYTUwgZGF0YSBmaWxlcworICAgICAgW2dldF0gR2V0dGluZzogaHR0cDovL3d3dy5jdXJyZW5jeS1pc28ub3JnL2RsX2lzb190YWJsZV9hMS54bWwKKyAgICAgIFtnZXRdIFRvOiBDOlxkZXZ0bHNcdHJ1bmtcY3VycmVuY3lcb3V0XHhtbFxkbF9pc29fdGFibGVfYTEueG1sCisgICAgICBbZ2V0XSBHZXR0aW5nOiBodHRwOi8vd3d3LmN1cnJlbmN5LWlzby5vcmcvZGxfaXNvX3RhYmxlc19hMy54bWwKKyAgICAgIFtnZXRdIFRvOiBDOlxkZXZ0bHNcdHJ1bmtcY3VycmVuY3lcb3V0XHhtbFxkbF9pc29fdGFibGVzX2EzLnhtbAorCit4bWxEYXRhOgorCitjaGVjazoKKyAgICAgW2phdmFdIFtPS10gSUNVIGRhdGEgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIHJlZmVyZW5jZSBkYXRhCisKK0JVSUxEIFNVQ0NFU1NGVUwKK1RvdGFsIHRpbWU6IDIgc2Vjb25kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gdGhpcyBjYXNlLCBvdXIgZGF0YSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgbGF0ZXN0IFhNTCBkYXRhIGFuZCB5b3UncmUgZG9uZS4KKworCitJZiB0aGUgZGF0YSBpcyBvdXQgb2Ygc3luYywgeW91IHNob3VsZCBzZWUgbWVzc2FnZSBsaWtlIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2hlY2s6CisgICAgIFtqYXZhXSBNaXNzaW5nIGFscGhhIGNvZGUgaW4gSUNVIG1hcCBbWldSXQorICAgICBbamF2YV0gQ29kZXMgbm90IGZvdW5kIGluIHRoZSByZWZlcmVuY2UgZGF0YTogWlpaCisKK0JVSUxEIEZBSUxFRAorQzpcZGV2dGxzXHRydW5rXGN1cnJlbmN5XGJ1aWxkLnhtbDo1NDogSmF2YSByZXR1cm5lZDogMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gdGhpcyBjYXNlLCB5b3UgaGF2ZSB0byB1cGRhdGUgdGhlIGhhcmRjb2RlZCBkYXRhIGluIE51bWVyaWNDb2RlRGF0YS4KK1lvdSBjYW4gZWl0aGVyIGVkaXQgdGhlIHRhYmxlIGluIE51bWVyaWNDb2RlRGF0YSBtYW51YWxseSwgb3IgcnVuIHRoZSB0b29sCitjb21tYW5kICJwcmludCIgYW5kIGNvcHkgdGhlIG91dHB1dCBhbmQgcGFzdGUgaXQgdG8gdGhlIHRhYmxlLgorCitPbmNlIHlvdSBtYWtlIHN1cmUgImFudCBjaGVjayIgcmV0dXJucyBubyBlcnJvcnMsIHJ1biAiYW50IHJlc291cmNlIi4gVGhpcwordGFyZ2V0IGdlbmVyYXRlIG91dC9yZXMvY3VycmVuY3lOdW1lcmljQ29kZXMudHh0LiBUaGUgZmlsZSBzaG91bGQgZ28gdG8KKzxpY3U0Yz4vc291cmNlL2RhdGEvbWlzYyBkaXJlY3RvcnkuCisKK05vdGU6IFRoZSBkZWZhdWx0IGFudCB0YXJnZXQgZG9lcyBib3RoIG9wZXJhdGlvbi4gQWx0aG91Z2ggaXQgY3JlYXRlcyB0aGUKK0lDVSByZXNvdXJjZSBmaWxlLCB5b3UgZG8gbm90IG5lZWQgdG8gcmVwbGFjZSB0aGUgb25lIGluIElDVTRDIHBhY2thZ2Ugd2l0aAordGhlIG5ld2x5IGdlbmVyYXRlZCBvbmUgaWYgImNoZWNrIiBzdWNjZXNzZnVsbHkgZmluaXNoZWQuCisKZGlmZiAtLWdpdCBhL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9DdXJyZW5jeURhdGFFbnRyeS5qYXZhIGIvY3VycmVuY3kvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2N1cnJlbmN5L0N1cnJlbmN5RGF0YUVudHJ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkZmM0MAotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9DdXJyZW5jeURhdGFFbnRyeS5qYXZhCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeTsKKworLyoqCisgKiBDdXJyZW5jeSBkYXRhIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFhNTCBkYXRhIGRpc3RyaWJ1dGVkIGJ5IFNJWCBJbnRlcmJhbmsgQ2xlYXJpbmcKKyAqIChUaGUgSVNPIDQyMTcgbWFpbnRlbmFuY2UgYWdlbmN5KS4KKyAqLworcHVibGljIGNsYXNzIEN1cnJlbmN5RGF0YUVudHJ5IHsKKyAgICBwcml2YXRlIFN0cmluZyBlbnRpdHk7CisgICAgcHJpdmF0ZSBTdHJpbmcgY3VycmVuY3k7CisgICAgcHJpdmF0ZSBTdHJpbmcgYWxwaGFiZXRpY0NvZGU7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIG51bWVyaWNDb2RlOworICAgIHByaXZhdGUgSW50ZWdlciBtaW5vclVuaXQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgd2l0aGRyYXdhbERhdGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgcmVtYXJrOworICAgIHByaXZhdGUgYm9vbGVhbiBoaXN0b3JpYzsKKworICAgIHByaXZhdGUgQ3VycmVuY3lEYXRhRW50cnkoU3RyaW5nIGVudGl0eSwgU3RyaW5nIGN1cnJlbmN5LCBTdHJpbmcgYWxwaGFiZXRpY0NvZGUsIEludGVnZXIgbnVtZXJpY0NvZGUsIEludGVnZXIgbWlub3JVbml0LCBTdHJpbmcgd2l0aGRyYXdhbERhdGUsIFN0cmluZyByZW1hcmssIGJvb2xlYW4gaGlzdG9yaWMpIHsKKyAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CisgICAgICAgIHRoaXMuY3VycmVuY3kgPSBjdXJyZW5jeTsKKyAgICAgICAgdGhpcy5hbHBoYWJldGljQ29kZSA9IGFscGhhYmV0aWNDb2RlOworICAgICAgICB0aGlzLm51bWVyaWNDb2RlID0gbnVtZXJpY0NvZGU7CisgICAgICAgIHRoaXMubWlub3JVbml0ID0gbWlub3JVbml0OworICAgICAgICB0aGlzLndpdGhkcmF3YWxEYXRlID0gd2l0aGRyYXdhbERhdGU7CisgICAgICAgIHRoaXMucmVtYXJrID0gcmVtYXJrOworICAgICAgICB0aGlzLmhpc3RvcmljID0gaGlzdG9yaWM7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBlbnRpdHkoKSB7CisgICAgICAgIHJldHVybiBlbnRpdHk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBjdXJyZW5jeSgpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbmN5OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgYWxwaGFiZXRpY0NvZGUoKSB7CisgICAgICAgIHJldHVybiBhbHBoYWJldGljQ29kZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZWdlciBudW1lcmljQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIG51bWVyaWNDb2RlOworICAgIH0KKworICAgIHB1YmxpYyBJbnRlZ2VyIG1pbm9yVW5pdCgpIHsKKyAgICAgICAgcmV0dXJuIG1pbm9yVW5pdDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHdpdGhkcmF3YWxEYXRlKCkgeworICAgICAgICByZXR1cm4gd2l0aGRyYXdhbERhdGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyByZW1hcmsoKSB7CisgICAgICAgIHJldHVybiByZW1hcms7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGlzdG9yaWMoKSB7CisgICAgICAgIHJldHVybiBoaXN0b3JpYzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgeworICAgICAgICBwcml2YXRlIFN0cmluZyBlbnRpdHlfOworICAgICAgICBwcml2YXRlIFN0cmluZyBjdXJyZW5jeV87CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGFscGhhYmV0aWNDb2RlXzsKKyAgICAgICAgcHJpdmF0ZSBJbnRlZ2VyIG51bWVyaWNDb2RlXzsKKyAgICAgICAgcHJpdmF0ZSBJbnRlZ2VyIG1pbm9yVW5pdF87CisKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgd2l0aGRyYXdhbERhdGVfOworICAgICAgICBwcml2YXRlIFN0cmluZyByZW1hcmtfOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gaGlzdG9yaWNfID0gZmFsc2U7CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RW50aXR5KFN0cmluZyBlbnRpdHkpIHsKKyAgICAgICAgICAgIGVudGl0eV8gPSBlbnRpdHk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEN1cnJlbmN5KFN0cmluZyBjdXJyZW5jeSkgeworICAgICAgICAgICAgY3VycmVuY3lfID0gY3VycmVuY3k7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldEFscGhhYmV0aWNDb2RlKFN0cmluZyBhbHBoYWJldGljQ29kZSkgeworICAgICAgICAgICAgYWxwaGFiZXRpY0NvZGVfID0gYWxwaGFiZXRpY0NvZGU7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE51bWVyaWNDb2RlKFN0cmluZyBudW1lcmljQ29kZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBudW1lcmljQ29kZV8gPSBJbnRlZ2VyLnBhcnNlSW50KG51bWVyaWNDb2RlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgLy8gaWdub3JlCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pbm9yVW5pdChTdHJpbmcgbWlub3JVbml0KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1pbm9yVW5pdF8gPSBJbnRlZ2VyLnBhcnNlSW50KG1pbm9yVW5pdCk7CisgICAgICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIGlnbm9yZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRXaXRoZHJhd2FsRGF0ZShTdHJpbmcgd2l0aGRyYXdhbERhdGUpIHsKKyAgICAgICAgICAgIHdpdGhkcmF3YWxEYXRlXyA9IHdpdGhkcmF3YWxEYXRlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRSZW1hcmsoU3RyaW5nIHJlbWFyaykgeworICAgICAgICAgICAgcmVtYXJrXyA9IHJlbWFyazsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0SGlzdG9yaWMoKSB7CisgICAgICAgICAgICBoaXN0b3JpY18gPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQ3VycmVuY3lEYXRhRW50cnkgYnVpbGQoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEN1cnJlbmN5RGF0YUVudHJ5KGVudGl0eV8sIGN1cnJlbmN5XywgYWxwaGFiZXRpY0NvZGVfLCBudW1lcmljQ29kZV8sIG1pbm9yVW5pdF8sIHdpdGhkcmF3YWxEYXRlXywgcmVtYXJrXywgaGlzdG9yaWNfKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHJlc2V0KCkgeworICAgICAgICAgICAgZW50aXR5XyA9IG51bGw7CisgICAgICAgICAgICBjdXJyZW5jeV8gPSBudWxsOworICAgICAgICAgICAgYWxwaGFiZXRpY0NvZGVfID0gbnVsbDsKKyAgICAgICAgICAgIG51bWVyaWNDb2RlXyA9IG51bGw7CisgICAgICAgICAgICBtaW5vclVuaXRfID0gbnVsbDsKKyAgICAgICAgICAgIHdpdGhkcmF3YWxEYXRlXyA9IG51bGw7CisgICAgICAgICAgICByZW1hcmtfID0gbnVsbDsKKyAgICAgICAgICAgIGhpc3RvcmljXyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jdXJyZW5jeS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY3VycmVuY3kvQ3VycmVuY3lEYXRhUGFyc2VyLmphdmEgYi9jdXJyZW5jeS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY3VycmVuY3kvQ3VycmVuY3lEYXRhUGFyc2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3M2QwMAotLS0gL2Rldi9udWxsCisrKyBiL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9DdXJyZW5jeURhdGFQYXJzZXIuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3k7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOworCitpbXBvcnQgY29tLmlibS5pY3UuZGV2LnRvb2wuY3VycmVuY3kuQ3VycmVuY3lEYXRhRW50cnkuQnVpbGRlcjsKKworLyoqCisgKiBQYXJzZXIgZm9yIElTTyA0MjE3IGRhdGEgZmlsZSBpbiBYTUwgZm9ybWF0IGRpc3RyaWJ1dGVkIGJ5IFNJWCBJbnRlcmJhbmsgQ2xlYXJpbmcKKyAqIChUaGUgSVNPIDQyMTcgbWFpbnRlbmFuY2UgYWdlbmN5KS4KKyAqLworcHVibGljIGNsYXNzIEN1cnJlbmN5RGF0YVBhcnNlciB7CisKKyAgICBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IHBhcnNlKEZpbGUgZGF0YUZpbGUsIGJvb2xlYW4gaGlzdG9yaWMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICBTQVhQYXJzZXIgcGFyc2VyOworICAgICAgICAgICAgcGFyc2VyID0gZmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKKyAgICAgICAgICAgIEhhbmRsZXIgaGFuZGxlciA9IG5ldyBIYW5kbGVyKGhpc3RvcmljKTsKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZShuZXcgRmlsZUlucHV0U3RyZWFtKGRhdGFGaWxlKSwgaGFuZGxlcik7CisgICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyLmdldFBhcnNlZElTT0N1cnJlbmNpZXMoKTsKKyAgICAgICAgfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKKyAgICAgICAgcHJpdmF0ZSBlbnVtIEVsZW1lbnRUeXBlIHsKKyAgICAgICAgICAgIEVOVElUWSwKKyAgICAgICAgICAgIENVUlJFTkNZLAorICAgICAgICAgICAgQUxQSEFCRVRJQ19DT0RFLAorICAgICAgICAgICAgTlVNRVJJQ19DT0RFLAorICAgICAgICAgICAgTUlOT1JfVU5JVCwKKyAgICAgICAgICAgIFdJVEhEUkFXQUxfREFURSwKKyAgICAgICAgICAgIFJFTUFSSywKKyAgICAgICAgICAgIE9USEVSCisgICAgICAgIH07CisKKyAgICAgICAgQ29sbGVjdGlvbjxDdXJyZW5jeURhdGFFbnRyeT4gaXNvQ3VycmVuY2llcyA9IG5ldyBMaW5rZWRMaXN0PEN1cnJlbmN5RGF0YUVudHJ5PigpOworICAgICAgICBFbGVtZW50VHlwZSBlbGVtID0gRWxlbWVudFR5cGUuT1RIRVI7CisgICAgICAgIEJ1aWxkZXIgY3VyckJsZCA9IG5ldyBCdWlsZGVyKCk7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGhpc3RvcmljOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBjdXJyRWxlbU5hbWU7CisKKyAgICAgICAgcHVibGljIEhhbmRsZXIoYm9vbGVhbiBoaXN0b3JpYykgeworICAgICAgICAgICAgdGhpcy5oaXN0b3JpYyA9IGhpc3RvcmljOworICAgICAgICAgICAgY3VyckVsZW1OYW1lID0gaGlzdG9yaWMgPyAiSVNPX0NVUlJFTkNZX0hJU1RPUklDIiA6ICJJU09fQ1VSUkVOQ1kiOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IGdldFBhcnNlZElTT0N1cnJlbmNpZXMoKSB7CisgICAgICAgICAgICByZXR1cm4gaXNvQ3VycmVuY2llczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICAgICAgICAgICAgaWYgKHFOYW1lLmVxdWFscyhjdXJyRWxlbU5hbWUpKSB7CisgICAgICAgICAgICAgICAgY3VyckJsZC5yZXNldCgpOworICAgICAgICAgICAgICAgIGVsZW0gPSBFbGVtZW50VHlwZS5PVEhFUjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IEVsZW1lbnRUeXBlLnZhbHVlT2YocU5hbWUpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBFbGVtZW50VHlwZS5PVEhFUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBxTmFtZSkgeworICAgICAgICAgICAgLy8gZW1pdCBhIGN1cnJlbmN5IGRhdGEKKyAgICAgICAgICAgIGlmIChxTmFtZS5lcXVhbHMoY3VyckVsZW1OYW1lKSkgeworICAgICAgICAgICAgICAgIGlmIChoaXN0b3JpYykgeworICAgICAgICAgICAgICAgICAgICBjdXJyQmxkLnNldEhpc3RvcmljKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlzb0N1cnJlbmNpZXMuYWRkKGN1cnJCbGQuYnVpbGQoKSk7CisgICAgICAgICAgICAgICAgY3VyckJsZC5yZXNldCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxlbSA9IEVsZW1lbnRUeXBlLk9USEVSOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgY2hhcmFjdGVycyhjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkgeworICAgICAgICAgICAgc3dpdGNoIChlbGVtKSB7CisgICAgICAgICAgICBjYXNlIEVOVElUWToKKyAgICAgICAgICAgICAgICBjdXJyQmxkLnNldEVudGl0eShuZXcgU3RyaW5nKGNoLCBzdGFydCwgbGVuZ3RoKS50cmltKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVVJSRU5DWToKKyAgICAgICAgICAgICAgICBjdXJyQmxkLnNldEN1cnJlbmN5KG5ldyBTdHJpbmcoY2gsIHN0YXJ0LCBsZW5ndGgpLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMUEhBQkVUSUNfQ09ERToKKyAgICAgICAgICAgICAgICBjdXJyQmxkLnNldEFscGhhYmV0aWNDb2RlKG5ldyBTdHJpbmcoY2gsIHN0YXJ0LCBsZW5ndGgpLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5VTUVSSUNfQ09ERToKKyAgICAgICAgICAgICAgICBjdXJyQmxkLnNldE51bWVyaWNDb2RlKG5ldyBTdHJpbmcoY2gsIHN0YXJ0LCBsZW5ndGgpLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1JTk9SX1VOSVQ6CisgICAgICAgICAgICAgICAgY3VyckJsZC5zZXRNaW5vclVuaXQobmV3IFN0cmluZyhjaCwgc3RhcnQsIGxlbmd0aCkudHJpbSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV0lUSERSQVdBTF9EQVRFOgorICAgICAgICAgICAgICAgIGN1cnJCbGQuc2V0V2l0aGRyYXdhbERhdGUobmV3IFN0cmluZyhjaCwgc3RhcnQsIGxlbmd0aCkudHJpbSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUkVNQVJLOgorICAgICAgICAgICAgICAgIGN1cnJCbGQuc2V0UmVtYXJrKG5ldyBTdHJpbmcoY2gsIHN0YXJ0LCBsZW5ndGgpLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIE5PT1AKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9NYWluLmphdmEgYi9jdXJyZW5jeS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY3VycmVuY3kvTWFpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYmMxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9jdXJyZW5jeS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2wvY3VycmVuY3kvTWFpbi5qYXZhCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgICAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlNvcnRlZE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKKworLyoqCisgKiBUaGUgdG9vbCB1c2VkIGZvciBJU08gNDIxNyBhbHBoYTMtbnVtZXJpYzMgY29kZSBtYXBwaW5nIGRhdGEgbWFpbnRlbmFuY2UuCisgKiBUaGlzIGNvZGUgaXMgdXNlZCBmb3Igc3luY2hyb25pemluZyBJQ1UgYWxwaGEzLW51bWVyaWMzIG1hcHBpbmcgZGF0YSB3aXRoCisgKiB0aGUgZGF0YSBkaXN0cmlidXRlZCBieSBTSVggSW50ZXJiYW5rIENsZWFyaW5nLgorICovCitwdWJsaWMgY2xhc3MgTWFpbiB7CisgICAgcHJpdmF0ZSBlbnVtIENvbW1hbmQgeworICAgICAgICBDSEVDSywKKyAgICAgICAgUFJJTlQsCisgICAgICAgIEJVSUxELAorICAgIH07CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTTkFNRSA9ICJjdXJyZW5jeU51bWVyaWNDb2RlcyI7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcuLi4gYXJncykgeworICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBDb21tYW5kIGNtZCA9IG51bGw7CisKKyAgICAgICAgLy8gMXN0IGFyZ3VtZW50IG11c3QgYmUgY29tbWFuZAorICAgICAgICBpZiAoYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlKENvbW1hbmQuQ0hFQ0submFtZSgpKSkgeworICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDMpIHsKKyAgICAgICAgICAgICAgICBjbWQgPSBDb21tYW5kLkNIRUNLOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZShDb21tYW5kLlBSSU5ULm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzKSB7CisgICAgICAgICAgICAgICAgY21kID0gQ29tbWFuZC5QUklOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoQ29tbWFuZC5CVUlMRC5uYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMikgeworICAgICAgICAgICAgICAgIGNtZCA9IENvbW1hbmQuQlVJTEQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21kID09IG51bGwpIHsKKyAgICAgICAgICAgIHByaW50VXNhZ2UoKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgCisgICAgICAgIGludCBzdGF0dXMgPSAwOworCisgICAgICAgIGlmIChjbWQgPT0gQ29tbWFuZC5CVUlMRCkgeworICAgICAgICAgICAgRmlsZSBvdXRmaWxlID0gbmV3IEZpbGUoYXJnc1sxXSwgUkVTTkFNRSArICIudHh0Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIE91dHB1dFN0cmVhbVdyaXRlciBvc3cgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dGZpbGUpLCAiVVRGLTgiKTsKKyAgICAgICAgICAgICAgICBOdW1lcmljQ29kZURhdGEuZ2V0RGVmYXVsdEluc3RhbmNlKCkud3JpdGVSZXNvdXJjZShvc3csIFJFU05BTUUpOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDJuZCBhcmd1bWVudCBpcyBjdXJyZW50IGRhdGEgeG1sIGZpbGUKKyAgICAgICAgICAgIC8vIDNyZCBhcmd1bWVudCBpcyBoaXN0b3JpYyBkYXRhIHhtbCBmaWxlCisgICAgICAgICAgICBGaWxlIGN1cnJlbnRYbWwgPSBuZXcgRmlsZShhcmdzWzFdKTsKKyAgICAgICAgICAgIEZpbGUgaGlzdG9yaWNYbWwgPSBuZXcgRmlsZShhcmdzWzJdKTsKKyAgICAgICAgICAgIENvbGxlY3Rpb248Q3VycmVuY3lEYXRhRW50cnk+IGN1cnJlbnREYXRhRW50cmllcyA9IG51bGw7CisgICAgICAgICAgICBDb2xsZWN0aW9uPEN1cnJlbmN5RGF0YUVudHJ5PiBoaXN0b3JpY0RhdGFFbnRyaWVzID0gbnVsbDsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50RGF0YUVudHJpZXMgPSBDdXJyZW5jeURhdGFQYXJzZXIucGFyc2UoY3VycmVudFhtbCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGhpc3RvcmljRGF0YUVudHJpZXMgPSBDdXJyZW5jeURhdGFQYXJzZXIucGFyc2UoaGlzdG9yaWNYbWwsIHRydWUpOworICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKSB7CisgICAgICAgICAgICAgICAgTnVtZXJpY0NvZGVEYXRhIG51bUNvZGVEYXRhID0gTnVtZXJpY0NvZGVEYXRhLmNyZWF0ZUluc3RhbmNlKGN1cnJlbnREYXRhRW50cmllcyk7CisgICAgICAgICAgICAgICAgbnVtQ29kZURhdGEubWVyZ2UoTnVtZXJpY0NvZGVEYXRhLmNyZWF0ZUluc3RhbmNlKGhpc3RvcmljRGF0YUVudHJpZXMpKTsKKworICAgICAgICAgICAgICAgIGlmIChjbWQgPT0gQ29tbWFuZC5QUklOVCkgeworICAgICAgICAgICAgICAgICAgICBudW1Db2RlRGF0YS5wcmludEFycmF5KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNtZCA9PSBDb21tYW5kLkNIRUNLKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc09LID0gY2hlY2tEYXRhKG51bUNvZGVEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzT0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW09LXSBJQ1UgZGF0YSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgcmVmZXJlbmNlIGRhdGEiKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBTeXN0ZW0uZXhpdChzdGF0dXMpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRVc2FnZSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVXNhZ2VdIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAxKSBqYXZhIGNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5Lk1haW4gY2hlY2sgPGN1cnJlbnRYTUw+IDxoaXN0b3JpY1hNTD4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFZlcmlmaWVzIHRoZSBJQ1UgZGF0YSAodGFibGUgaW4gTnVtZXJpY0NvZGVEYXRhKSB3aXRoIHRoZSByZWZlcmVuY2UgZGF0YS4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIEFyZ3VtZW50KHMpOiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICA8Y3VycmVudFhNTD4gIC0gQ3VycmVudCBjdXJyZW5jaWVzICYgZnVuZHMgZGF0YSAoVGFibGUgQS4xKSBpbiBYTUwgZm9ybWF0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIDxoaXN0b3JpY1hNTD4gLSBIaXN0b3JpYyBkZW5vbWluYXRpb25zIGRhdGEgKFRhYmxlIEEuMykgaW4gWE1MIGZvcm1hdCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgMikgamF2YSBjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeS5NYWluIHByaW50IDxjdXJyZW50WE1MPiA8aGlzdG9yaWNYTUw+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBQcmludHMgb3V0IHRoZSBhbHBoYS1udW1lcmljIGNvZGUgbWFwcGluZyBpbXBvcnRlZCBmcm9tIHRoZSByZWZlcmVuY2UgZGF0YS4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIEFyZ3VtZW50KHMpOiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICA8Y3VycmVudFhNTD4gIC0gQ3VycmVudCBjdXJyZW5jaWVzICYgZnVuZHMgZGF0YSAoVGFibGUgQS4xKSBpbiBYTUwgZm9ybWF0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIDxoaXN0b3JpY1hNTD4gLSBIaXN0b3JpYyBkZW5vbWluYXRpb25zIGRhdGEgKFRhYmxlIEEuMykgaW4gWE1MIGZvcm1hdCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgMykgamF2YSBjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeS5NYWluIGJ1aWxkIDxvdXR0eHQ+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBXcml0ZXMgb3V0IHRoZSBhbHBoYS1udW1lcmljIGluIE51bWVyaWNDb2RlRGF0YSBpbnRvIElDVSByZXNvdXJjZSBidW5kbGUgc291cmNlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAoLnR4dCkgZm9ybWF0LiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgQXJndW1lbnQocyk6Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIDxvdXRkaXI+ICAgICAgLSBPdXRwdXQgZGlyZWN0b3J5IG9mIHRoZSBJQ1UgcmVzb3VyY2UgYnVuZGxlIHNvdXJjZSAoLnR4dCkgZm9ybWF0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW05vdGVdIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBSZWZlcmVuY2UgWE1MIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBieSB0aGUgSVNPIDQyMTcgbWFpbnRlbmFuY2UgYWdlbmN5IGF0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBbaHR0cDovL3d3dy5jdXJyZW5jeS1pc28ub3JnL2lzb19pbmRleC9pc29fdGFibGVzLmh0bV0uIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja0RhdGEoTnVtZXJpY0NvZGVEYXRhIHJlZkRhdGEpIHsKKyAgICAgICAgYm9vbGVhbiBpc09LID0gdHJ1ZTsKKworICAgICAgICBTb3J0ZWRNYXA8U3RyaW5nLCBTdHJpbmc+IGljdU1hcCA9IE51bWVyaWNDb2RlRGF0YS5nZXREZWZhdWx0SW5zdGFuY2UoKS5nZXRBbHBoYU51bWVyaWNDb2RlTWFwKCk7CisgICAgICAgIFNvcnRlZE1hcDxTdHJpbmcsIFN0cmluZz4gcmVmTWFwID0gcmVmRGF0YS5nZXRBbHBoYU51bWVyaWNDb2RlTWFwKCk7CisKKyAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIFN0cmluZz4gcmVmRW50cnkgOiByZWZNYXAuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgU3RyaW5nIHJlZkFscGhhID0gcmVmRW50cnkuZ2V0S2V5KCk7CisgICAgICAgICAgICBTdHJpbmcgcmVmTnVtZXJpYyA9IHJlZkVudHJ5LmdldFZhbHVlKCk7CisKKyAgICAgICAgICAgIFN0cmluZyBpY3VOdW1lcmljID0gaWN1TWFwLmdldChyZWZBbHBoYSk7CisgICAgICAgICAgICBpZiAoaWN1TnVtZXJpYyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNaXNzaW5nIGFscGhhIGNvZGUgaW4gSUNVIG1hcCBbIiArIHJlZkFscGhhICsgIl0iKTsKKyAgICAgICAgICAgICAgICBpc09LID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFpY3VOdW1lcmljLmVxdWFscyhyZWZOdW1lcmljKSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtZXJpYyBjb2RlIG1pc21hdGNoIFsiICsgcmVmQWxwaGEgKyAiXSBJQ1U9IiArIGljdU51bWVyaWMgKyAiIC0gUmVmZXJlbmNlPSIgKyByZWZOdW1lcmljKTsKKyAgICAgICAgICAgICAgICBpc09LID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBTZXQ8U3RyaW5nPiBpY3VLZXlTZXQgPSBpY3VNYXAua2V5U2V0KCk7CisgICAgICAgIFNldDxTdHJpbmc+IHJlZktleVNldCA9IHJlZk1hcC5rZXlTZXQoKTsKKyAgICAgICAgaWYgKCFyZWZLZXlTZXQuY29udGFpbnNBbGwoaWN1S2V5U2V0KSkgeworICAgICAgICAgICAgaXNPSyA9IGZhbHNlOworICAgICAgICAgICAgU2V0PFN0cmluZz4gdG1wID0gbmV3IFRyZWVTZXQ8U3RyaW5nPihpY3VLZXlTZXQpOworICAgICAgICAgICAgdG1wLnJlbW92ZUFsbChyZWZLZXlTZXQpOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBhbHBoYSA6IHRtcCkgeworICAgICAgICAgICAgICAgIGlmIChidWYubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGFscGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb2RlcyBub3QgZm91bmQgaW4gdGhlIHJlZmVyZW5jZSBkYXRhOiAiICsgYnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpc09LOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9OdW1lcmljQ29kZURhdGEuamF2YSBiL2N1cnJlbmN5L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbC9jdXJyZW5jeS9OdW1lcmljQ29kZURhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E5ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvY3VycmVuY3kvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29sL2N1cnJlbmN5L051bWVyaWNDb2RlRGF0YS5qYXZhCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLmljdS5kZXYudG9vbC5jdXJyZW5jeTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlNvcnRlZE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CitpbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CisKKy8qKgorICogQ29udGFpbmVyIG9mIElTTyA0MjE3IGFscGhhMyAtIG51bWVyaWMzIGNvZGUgbWFwcGluZyBkYXRhCisgKi8KK3B1YmxpYyBjbGFzcyBOdW1lcmljQ29kZURhdGEgeworICAgIHByaXZhdGUgU29ydGVkTWFwPFN0cmluZywgU3RyaW5nPiBfY29kZU1hcDsKKworICAgIHByaXZhdGUgTnVtZXJpY0NvZGVEYXRhKFNvcnRlZE1hcDxTdHJpbmcsIFN0cmluZz4gY29kZU1hcCkgeworICAgICAgICBfY29kZU1hcCA9IGNvZGVNYXA7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBOdW1lcmljQ29kZURhdGEgZ2V0RGVmYXVsdEluc3RhbmNlKCkgeworICAgICAgICBTb3J0ZWRNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBUcmVlTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgICAgICBmb3IgKFN0cmluZ1tdIGRhdGFFbnRyeSA6IENPREVfTUFQX0RBVEEpIHsKKyAgICAgICAgICAgIG1hcC5wdXQoZGF0YUVudHJ5WzBdLCBkYXRhRW50cnlbMV0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgTnVtZXJpY0NvZGVEYXRhKG1hcCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBOdW1lcmljQ29kZURhdGEgY3JlYXRlSW5zdGFuY2UoQ29sbGVjdGlvbjxDdXJyZW5jeURhdGFFbnRyeT4gZGF0YUVudHJpZXMpIHsKKyAgICAgICAgU29ydGVkTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKyAgICAgICAgZm9yIChDdXJyZW5jeURhdGFFbnRyeSBkYXRhRW50cnkgOiBkYXRhRW50cmllcykgeworICAgICAgICAgICAgU3RyaW5nIGFscGhhQ29kZSA9IGRhdGFFbnRyeS5hbHBoYWJldGljQ29kZSgpOworICAgICAgICAgICAgSW50ZWdlciBudW1Db2RlID0gZGF0YUVudHJ5Lm51bWVyaWNDb2RlKCk7CisgICAgICAgICAgICBpZiAoYWxwaGFDb2RlID09IG51bGwgfHwgbnVtQ29kZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXAucHV0KGFscGhhQ29kZSwgU3RyaW5nLmZvcm1hdCgiJTAzZCIsIG51bUNvZGUpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IE51bWVyaWNDb2RlRGF0YShtYXApOworICAgIH0KKworICAgIHB1YmxpYyBOdW1lcmljQ29kZURhdGEgbWVyZ2UoTnVtZXJpY0NvZGVEYXRhIGFub3RoZXJEYXRhKSB7CisgICAgICAgIFNvcnRlZE1hcDxTdHJpbmcsIFN0cmluZz4gY29kZU1hcCA9IGFub3RoZXJEYXRhLmdldEFscGhhTnVtZXJpY0NvZGVNYXAoKTsKKyAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIFN0cmluZz4gY29kZU1hcEVudHJ5IDogY29kZU1hcC5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgYWxwaGFDb2RlID0gY29kZU1hcEVudHJ5LmdldEtleSgpOworICAgICAgICAgICAgU3RyaW5nIG51bUNvZGUgPSBjb2RlTWFwRW50cnkuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghX2NvZGVNYXAuY29udGFpbnNLZXkoYWxwaGFDb2RlKSkgeworICAgICAgICAgICAgICAgIF9jb2RlTWFwLnB1dChhbHBoYUNvZGUsIG51bUNvZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhpc3RpbmdWYWx1ZSA9IF9jb2RlTWFwLmdldChhbHBoYUNvZGUpOworICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdWYWx1ZS5lcXVhbHMobnVtQ29kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkR1cGxpY2F0ZWQgZGVmaW5pdGlvbiBmb3IgIiArIGFscGhhQ29kZSArICI6IHZhbHVlPSIgKyBleGlzdGluZ1ZhbHVlICsgIi9hbm90aGVyIHZhbHVlPSIgKyBudW1Db2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgcHVibGljIFNvcnRlZE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0QWxwaGFOdW1lcmljQ29kZU1hcCgpIHsKKyAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNvcnRlZE1hcChfY29kZU1hcCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcHJpbnRBcnJheSgpIHsKKyAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBnZXRBbHBoYU51bWVyaWNDb2RlTWFwKCkuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgIHtcIiIgKyBlbnRyeS5nZXRLZXkoKSArICJcIiwgXCIiICsgZW50cnkuZ2V0VmFsdWUoKSArICJcIn0sIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVJlc291cmNlKE91dHB1dFN0cmVhbVdyaXRlciBvc3csIFN0cmluZyByZXNOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpKTsKKworICAgICAgICBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihvc3csIHRydWUpOworCisgICAgICAgIC8vIEhlYWRlcgorICAgICAgICBwdy5wcmludGxuKCIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwdy5wcmludGxuKFN0cmluZy5mb3JtYXQoIi8vIENvcHlyaWdodCAoQykgJTEkdFksIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMiLCBjYWwpKTsKKyAgICAgICAgcHcucHJpbnRsbigiLy8gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIik7CisgICAgICAgIHB3LnByaW50bG4oIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHB3LnByaW50bG4oIi8vIEJ1aWxkIHRvb2w6IGNvbS5pYm0uaWN1LmRldi50b29sLmN1cnJlbmN5Lk51bWVyaWNDb2RlRGF0YSIpOworICAgICAgICBwdy5wcmludGxuKFN0cmluZy5mb3JtYXQoIi8vIEJ1aWxkIGRhdGU6ICUxJHRGVCUxJHRUWiIsIGNhbCkpOworICAgICAgICBwdy5wcmludGxuKCIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwdy5wcmludGxuKCIvLyA+PiAhISEgPj4gICBUSElTIElTIEEgTUFDSElORS1HRU5FUkFURUQgRklMRSAgIDw8ICEhISA8PCIpOworICAgICAgICBwdy5wcmludGxuKCIvLyA+PiAhISEgPj4+ICAgICAgICAgICAgRE8gTk9UIEVESVQgICAgICAgICAgICAgPDw8ICEhISA8PCIpOworICAgICAgICBwdy5wcmludGxuKCIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwdy5wcmludGxuKCIiKTsKKworICAgICAgICAvLyBSZXNvdXJjZSByb290CisgICAgICAgIHB3LnByaW50bG4ocmVzTmFtZSArICI6dGFibGUobm9mYWxsYmFjayl7Iik7CisKKyAgICAgICAgLy8gTWFwIGRhdGEKKyAgICAgICAgcHcucHJpbnRsbigiICAgIGNvZGVNYXB7Iik7CisKKyAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIFN0cmluZz4gbWFwRW50cnkgOiBfY29kZU1hcC5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgYWxwaGFDb2RlID0gbWFwRW50cnkuZ2V0S2V5KCk7CisgICAgICAgICAgICBpbnQgbnVtZXJpY0NvZGVWYWwgPSBJbnRlZ2VyLnBhcnNlSW50KG1hcEVudHJ5LmdldFZhbHVlKCkpOworICAgICAgICAgICAgcHcucHJpbnRsbihTdHJpbmcuZm9ybWF0KCIgICAgICAgICUxJHM6aW50eyUyJGR9IiwgYWxwaGFDb2RlLCBudW1lcmljQ29kZVZhbCkpOworICAgICAgICB9CisKKyAgICAgICAgcHcucHJpbnRsbigiICAgIH0iKTsKKworICAgICAgICBwdy5wcmludGxuKCJ9Iik7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSBDT0RFX01BUF9EQVRBID0geworICAgICAgICB7IkFEUCIsICIwMjAifSwKKyAgICAgICAgeyJBRUQiLCAiNzg0In0sCisgICAgICAgIHsiQUZBIiwgIjAwNCJ9LAorICAgICAgICB7IkFGTiIsICI5NzEifSwKKyAgICAgICAgeyJBTEwiLCAiMDA4In0sCisgICAgICAgIHsiQU1EIiwgIjA1MSJ9LAorICAgICAgICB7IkFORyIsICI1MzIifSwKKyAgICAgICAgeyJBT0EiLCAiOTczIn0sCisgICAgICAgIHsiQU9OIiwgIjAyNCJ9LAorICAgICAgICB7IkFPUiIsICI5ODIifSwKKyAgICAgICAgeyJBUkEiLCAiMDMyIn0sCisgICAgICAgIHsiQVJQIiwgIjAzMiJ9LAorICAgICAgICB7IkFSUyIsICIwMzIifSwKKyAgICAgICAgeyJBVFMiLCAiMDQwIn0sCisgICAgICAgIHsiQVVEIiwgIjAzNiJ9LAorICAgICAgICB7IkFXRyIsICI1MzMifSwKKyAgICAgICAgeyJBWU0iLCAiOTQ1In0sCisgICAgICAgIHsiQVpNIiwgIjAzMSJ9LAorICAgICAgICB7IkFaTiIsICI5NDQifSwKKyAgICAgICAgeyJCQUQiLCAiMDcwIn0sCisgICAgICAgIHsiQkFNIiwgIjk3NyJ9LAorICAgICAgICB7IkJCRCIsICIwNTIifSwKKyAgICAgICAgeyJCRFQiLCAiMDUwIn0sCisgICAgICAgIHsiQkVDIiwgIjk5MyJ9LAorICAgICAgICB7IkJFRiIsICIwNTYifSwKKyAgICAgICAgeyJCRUwiLCAiOTkyIn0sCisgICAgICAgIHsiQkdMIiwgIjEwMCJ9LAorICAgICAgICB7IkJHTiIsICI5NzUifSwKKyAgICAgICAgeyJCSEQiLCAiMDQ4In0sCisgICAgICAgIHsiQklGIiwgIjEwOCJ9LAorICAgICAgICB7IkJNRCIsICIwNjAifSwKKyAgICAgICAgeyJCTkQiLCAiMDk2In0sCisgICAgICAgIHsiQk9CIiwgIjA2OCJ9LAorICAgICAgICB7IkJPViIsICI5ODQifSwKKyAgICAgICAgeyJCUkMiLCAiMDc2In0sCisgICAgICAgIHsiQlJFIiwgIjA3NiJ9LAorICAgICAgICB7IkJSTCIsICI5ODYifSwKKyAgICAgICAgeyJCUk4iLCAiMDc2In0sCisgICAgICAgIHsiQlJSIiwgIjk4NyJ9LAorICAgICAgICB7IkJTRCIsICIwNDQifSwKKyAgICAgICAgeyJCVE4iLCAiMDY0In0sCisgICAgICAgIHsiQldQIiwgIjA3MiJ9LAorICAgICAgICB7IkJZQiIsICIxMTIifSwKKyAgICAgICAgeyJCWVIiLCAiOTc0In0sCisgICAgICAgIHsiQlpEIiwgIjA4NCJ9LAorICAgICAgICB7IkNBRCIsICIxMjQifSwKKyAgICAgICAgeyJDREYiLCAiOTc2In0sCisgICAgICAgIHsiQ0hDIiwgIjk0OCJ9LAorICAgICAgICB7IkNIRSIsICI5NDcifSwKKyAgICAgICAgeyJDSEYiLCAiNzU2In0sCisgICAgICAgIHsiQ0hXIiwgIjk0OCJ9LAorICAgICAgICB7IkNMRiIsICI5OTAifSwKKyAgICAgICAgeyJDTFAiLCAiMTUyIn0sCisgICAgICAgIHsiQ05ZIiwgIjE1NiJ9LAorICAgICAgICB7IkNPUCIsICIxNzAifSwKKyAgICAgICAgeyJDT1UiLCAiOTcwIn0sCisgICAgICAgIHsiQ1JDIiwgIjE4OCJ9LAorICAgICAgICB7IkNTRCIsICI4OTEifSwKKyAgICAgICAgeyJDU0siLCAiMjAwIn0sCisgICAgICAgIHsiQ1VDIiwgIjkzMSJ9LAorICAgICAgICB7IkNVUCIsICIxOTIifSwKKyAgICAgICAgeyJDVkUiLCAiMTMyIn0sCisgICAgICAgIHsiQ1lQIiwgIjE5NiJ9LAorICAgICAgICB7IkNaSyIsICIyMDMifSwKKyAgICAgICAgeyJERE0iLCAiMjc4In0sCisgICAgICAgIHsiREVNIiwgIjI3NiJ9LAorICAgICAgICB7IkRKRiIsICIyNjIifSwKKyAgICAgICAgeyJES0siLCAiMjA4In0sCisgICAgICAgIHsiRE9QIiwgIjIxNCJ9LAorICAgICAgICB7IkRaRCIsICIwMTIifSwKKyAgICAgICAgeyJFQ1MiLCAiMjE4In0sCisgICAgICAgIHsiRUNWIiwgIjk4MyJ9LAorICAgICAgICB7IkVFSyIsICIyMzMifSwKKyAgICAgICAgeyJFR1AiLCAiODE4In0sCisgICAgICAgIHsiRVJOIiwgIjIzMiJ9LAorICAgICAgICB7IkVTQSIsICI5OTYifSwKKyAgICAgICAgeyJFU0IiLCAiOTk1In0sCisgICAgICAgIHsiRVNQIiwgIjcyNCJ9LAorICAgICAgICB7IkVUQiIsICIyMzAifSwKKyAgICAgICAgeyJFVVIiLCAiOTc4In0sCisgICAgICAgIHsiRklNIiwgIjI0NiJ9LAorICAgICAgICB7IkZKRCIsICIyNDIifSwKKyAgICAgICAgeyJGS1AiLCAiMjM4In0sCisgICAgICAgIHsiRlJGIiwgIjI1MCJ9LAorICAgICAgICB7IkdCUCIsICI4MjYifSwKKyAgICAgICAgeyJHRUsiLCAiMjY4In0sCisgICAgICAgIHsiR0VMIiwgIjk4MSJ9LAorICAgICAgICB7IkdIQyIsICIyODgifSwKKyAgICAgICAgeyJHSFAiLCAiOTM5In0sCisgICAgICAgIHsiR0hTIiwgIjkzNiJ9LAorICAgICAgICB7IkdJUCIsICIyOTIifSwKKyAgICAgICAgeyJHTUQiLCAiMjcwIn0sCisgICAgICAgIHsiR05GIiwgIjMyNCJ9LAorICAgICAgICB7IkdRRSIsICIyMjYifSwKKyAgICAgICAgeyJHUkQiLCAiMzAwIn0sCisgICAgICAgIHsiR1RRIiwgIjMyMCJ9LAorICAgICAgICB7IkdXUCIsICI2MjQifSwKKyAgICAgICAgeyJHWUQiLCAiMzI4In0sCisgICAgICAgIHsiSEtEIiwgIjM0NCJ9LAorICAgICAgICB7IkhOTCIsICIzNDAifSwKKyAgICAgICAgeyJIUkQiLCAiMTkxIn0sCisgICAgICAgIHsiSFJLIiwgIjE5MSJ9LAorICAgICAgICB7IkhURyIsICIzMzIifSwKKyAgICAgICAgeyJIVUYiLCAiMzQ4In0sCisgICAgICAgIHsiSURSIiwgIjM2MCJ9LAorICAgICAgICB7IklFUCIsICIzNzIifSwKKyAgICAgICAgeyJJTFMiLCAiMzc2In0sCisgICAgICAgIHsiSU5SIiwgIjM1NiJ9LAorICAgICAgICB7IklRRCIsICIzNjgifSwKKyAgICAgICAgeyJJUlIiLCAiMzY0In0sCisgICAgICAgIHsiSVNLIiwgIjM1MiJ9LAorICAgICAgICB7IklUTCIsICIzODAifSwKKyAgICAgICAgeyJKTUQiLCAiMzg4In0sCisgICAgICAgIHsiSk9EIiwgIjQwMCJ9LAorICAgICAgICB7IkpQWSIsICIzOTIifSwKKyAgICAgICAgeyJLRVMiLCAiNDA0In0sCisgICAgICAgIHsiS0dTIiwgIjQxNyJ9LAorICAgICAgICB7IktIUiIsICIxMTYifSwKKyAgICAgICAgeyJLTUYiLCAiMTc0In0sCisgICAgICAgIHsiS1BXIiwgIjQwOCJ9LAorICAgICAgICB7IktSVyIsICI0MTAifSwKKyAgICAgICAgeyJLV0QiLCAiNDE0In0sCisgICAgICAgIHsiS1lEIiwgIjEzNiJ9LAorICAgICAgICB7IktaVCIsICIzOTgifSwKKyAgICAgICAgeyJMQUsiLCAiNDE4In0sCisgICAgICAgIHsiTEJQIiwgIjQyMiJ9LAorICAgICAgICB7IkxLUiIsICIxNDQifSwKKyAgICAgICAgeyJMUkQiLCAiNDMwIn0sCisgICAgICAgIHsiTFNMIiwgIjQyNiJ9LAorICAgICAgICB7IkxUTCIsICI0NDAifSwKKyAgICAgICAgeyJMVFQiLCAiNDQwIn0sCisgICAgICAgIHsiTFVDIiwgIjk4OSJ9LAorICAgICAgICB7IkxVRiIsICI0NDIifSwKKyAgICAgICAgeyJMVUwiLCAiOTg4In0sCisgICAgICAgIHsiTFZMIiwgIjQyOCJ9LAorICAgICAgICB7IkxWUiIsICI0MjgifSwKKyAgICAgICAgeyJMWUQiLCAiNDM0In0sCisgICAgICAgIHsiTUFEIiwgIjUwNCJ9LAorICAgICAgICB7Ik1ETCIsICI0OTgifSwKKyAgICAgICAgeyJNR0EiLCAiOTY5In0sCisgICAgICAgIHsiTUdGIiwgIjQ1MCJ9LAorICAgICAgICB7Ik1LRCIsICI4MDcifSwKKyAgICAgICAgeyJNTEYiLCAiNDY2In0sCisgICAgICAgIHsiTU1LIiwgIjEwNCJ9LAorICAgICAgICB7Ik1OVCIsICI0OTYifSwKKyAgICAgICAgeyJNT1AiLCAiNDQ2In0sCisgICAgICAgIHsiTVJPIiwgIjQ3OCJ9LAorICAgICAgICB7Ik1UTCIsICI0NzAifSwKKyAgICAgICAgeyJNVVIiLCAiNDgwIn0sCisgICAgICAgIHsiTVZSIiwgIjQ2MiJ9LAorICAgICAgICB7Ik1XSyIsICI0NTQifSwKKyAgICAgICAgeyJNWE4iLCAiNDg0In0sCisgICAgICAgIHsiTVhWIiwgIjk3OSJ9LAorICAgICAgICB7Ik1ZUiIsICI0NTgifSwKKyAgICAgICAgeyJNWk0iLCAiNTA4In0sCisgICAgICAgIHsiTVpOIiwgIjk0MyJ9LAorICAgICAgICB7Ik5BRCIsICI1MTYifSwKKyAgICAgICAgeyJOR04iLCAiNTY2In0sCisgICAgICAgIHsiTklPIiwgIjU1OCJ9LAorICAgICAgICB7Ik5MRyIsICI1MjgifSwKKyAgICAgICAgeyJOT0siLCAiNTc4In0sCisgICAgICAgIHsiTlBSIiwgIjUyNCJ9LAorICAgICAgICB7Ik5aRCIsICI1NTQifSwKKyAgICAgICAgeyJPTVIiLCAiNTEyIn0sCisgICAgICAgIHsiUEFCIiwgIjU5MCJ9LAorICAgICAgICB7IlBFSSIsICI2MDQifSwKKyAgICAgICAgeyJQRU4iLCAiNjA0In0sCisgICAgICAgIHsiUEVTIiwgIjYwNCJ9LAorICAgICAgICB7IlBHSyIsICI1OTgifSwKKyAgICAgICAgeyJQSFAiLCAiNjA4In0sCisgICAgICAgIHsiUEtSIiwgIjU4NiJ9LAorICAgICAgICB7IlBMTiIsICI5ODUifSwKKyAgICAgICAgeyJQTFoiLCAiNjE2In0sCisgICAgICAgIHsiUFRFIiwgIjYyMCJ9LAorICAgICAgICB7IlBZRyIsICI2MDAifSwKKyAgICAgICAgeyJRQVIiLCAiNjM0In0sCisgICAgICAgIHsiUk9MIiwgIjY0MiJ9LAorICAgICAgICB7IlJPTiIsICI5NDYifSwKKyAgICAgICAgeyJSU0QiLCAiOTQxIn0sCisgICAgICAgIHsiUlVCIiwgIjY0MyJ9LAorICAgICAgICB7IlJVUiIsICI4MTAifSwKKyAgICAgICAgeyJSV0YiLCAiNjQ2In0sCisgICAgICAgIHsiU0FSIiwgIjY4MiJ9LAorICAgICAgICB7IlNCRCIsICIwOTAifSwKKyAgICAgICAgeyJTQ1IiLCAiNjkwIn0sCisgICAgICAgIHsiU0REIiwgIjczNiJ9LAorICAgICAgICB7IlNERyIsICI5MzgifSwKKyAgICAgICAgeyJTRUsiLCAiNzUyIn0sCisgICAgICAgIHsiU0dEIiwgIjcwMiJ9LAorICAgICAgICB7IlNIUCIsICI2NTQifSwKKyAgICAgICAgeyJTSVQiLCAiNzA1In0sCisgICAgICAgIHsiU0tLIiwgIjcwMyJ9LAorICAgICAgICB7IlNMTCIsICI2OTQifSwKKyAgICAgICAgeyJTT1MiLCAiNzA2In0sCisgICAgICAgIHsiU1JEIiwgIjk2OCJ9LAorICAgICAgICB7IlNSRyIsICI3NDAifSwKKyAgICAgICAgeyJTU1AiLCAiNzI4In0sCisgICAgICAgIHsiU1REIiwgIjY3OCJ9LAorICAgICAgICB7IlNWQyIsICIyMjIifSwKKyAgICAgICAgeyJTWVAiLCAiNzYwIn0sCisgICAgICAgIHsiU1pMIiwgIjc0OCJ9LAorICAgICAgICB7IlRIQiIsICI3NjQifSwKKyAgICAgICAgeyJUSlIiLCAiNzYyIn0sCisgICAgICAgIHsiVEpTIiwgIjk3MiJ9LAorICAgICAgICB7IlRNTSIsICI3OTUifSwKKyAgICAgICAgeyJUTVQiLCAiOTM0In0sCisgICAgICAgIHsiVE5EIiwgIjc4OCJ9LAorICAgICAgICB7IlRPUCIsICI3NzYifSwKKyAgICAgICAgeyJUUEUiLCAiNjI2In0sCisgICAgICAgIHsiVFJMIiwgIjc5MiJ9LAorICAgICAgICB7IlRSWSIsICI5NDkifSwKKyAgICAgICAgeyJUVEQiLCAiNzgwIn0sCisgICAgICAgIHsiVFdEIiwgIjkwMSJ9LAorICAgICAgICB7IlRaUyIsICI4MzQifSwKKyAgICAgICAgeyJVQUgiLCAiOTgwIn0sCisgICAgICAgIHsiVUFLIiwgIjgwNCJ9LAorICAgICAgICB7IlVHWCIsICI4MDAifSwKKyAgICAgICAgeyJVU0QiLCAiODQwIn0sCisgICAgICAgIHsiVVNOIiwgIjk5NyJ9LAorICAgICAgICB7IlVTUyIsICI5OTgifSwKKyAgICAgICAgeyJVWUkiLCAiOTQwIn0sCisgICAgICAgIHsiVVlVIiwgIjg1OCJ9LAorICAgICAgICB7IlVaUyIsICI4NjAifSwKKyAgICAgICAgeyJWRUIiLCAiODYyIn0sCisgICAgICAgIHsiVkVGIiwgIjkzNyJ9LAorICAgICAgICB7IlZORCIsICI3MDQifSwKKyAgICAgICAgeyJWVVYiLCAiNTQ4In0sCisgICAgICAgIHsiV1NUIiwgIjg4MiJ9LAorICAgICAgICB7IlhBRiIsICI5NTAifSwKKyAgICAgICAgeyJYQUciLCAiOTYxIn0sCisgICAgICAgIHsiWEFVIiwgIjk1OSJ9LAorICAgICAgICB7IlhCQSIsICI5NTUifSwKKyAgICAgICAgeyJYQkIiLCAiOTU2In0sCisgICAgICAgIHsiWEJDIiwgIjk1NyJ9LAorICAgICAgICB7IlhCRCIsICI5NTgifSwKKyAgICAgICAgeyJYQ0QiLCAiOTUxIn0sCisgICAgICAgIHsiWERSIiwgIjk2MCJ9LAorICAgICAgICB7IlhFVSIsICI5NTQifSwKKyAgICAgICAgeyJYT0YiLCAiOTUyIn0sCisgICAgICAgIHsiWFBEIiwgIjk2NCJ9LAorICAgICAgICB7IlhQRiIsICI5NTMifSwKKyAgICAgICAgeyJYUFQiLCAiOTYyIn0sCisgICAgICAgIHsiWFNVIiwgIjk5NCJ9LAorICAgICAgICB7IlhUUyIsICI5NjMifSwKKyAgICAgICAgeyJYVUEiLCAiOTY1In0sCisgICAgICAgIHsiWFhYIiwgIjk5OSJ9LAorICAgICAgICB7IllERCIsICI3MjAifSwKKyAgICAgICAgeyJZRVIiLCAiODg2In0sCisgICAgICAgIHsiWVVNIiwgIjg5MSJ9LAorICAgICAgICB7IllVTiIsICI4OTAifSwKKyAgICAgICAgeyJaQUwiLCAiOTkxIn0sCisgICAgICAgIHsiWkFSIiwgIjcxMCJ9LAorICAgICAgICB7IlpNSyIsICI4OTQifSwKKyAgICAgICAgeyJaTVciLCAiOTY3In0sCisgICAgICAgIHsiWlJOIiwgIjE4MCJ9LAorICAgICAgICB7IlpSWiIsICIxODAifSwKKyAgICAgICAgeyJaV0QiLCAiNzE2In0sCisgICAgICAgIHsiWldMIiwgIjkzMiJ9LAorICAgICAgICB7IlpXTiIsICI5NDIifSwKKyAgICAgICAgeyJaV1IiLCAiOTM1In0sCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL211bHRpL01ha2VmaWxlIGIvbXVsdGkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3ZGJlNgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBJQk0gQ29ycC4gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorY2xlYW46CisJLXJtIC1yZiAuL3RtcApkaWZmIC0tZ2l0IGEvbXVsdGkvYy9NYWtlZmlsZSBiL211bHRpL2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxZThlNgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2MvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgbXVsdGljdS9jIG1ha2VmaWxlCisKK2FsbDoKKwlAZWNobyBUbyBidWlsZCBhbGwgSUNVczogICQoTUFLRSkgYWxsLWljdXMKKwlAZWNobyAiVXNpbmcgdGhlIC1rIG9wdGlvbiBtYXkgYmUgYSBnb29kIGlkZWEgaWYgc29tZSBhcmUgbm90IGJ1aWxkaW5nIHByb3Blcmx5LiIKKwlAZWNobyBJQ1VWRVJTOiAkKElDVVZFUlMpCisKK2luZm86CisKKyNJQ1VDT05GPXNoIC4vY29uZmlndXJlCitJQ1VDT05GPSQoTVVMVElDVV9ST09UKS9jL3N1cGVyY29uZi5zaAorRE9UPSQoc2hlbGwgcHdkKQorTVVMVElDVV9ST09UPSQoRE9UKS8uLgoraW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvY29tbW9uL01ha2VmaWxlLW11bHRpLmluYworLWluY2x1ZGUgTWFrZWZpbGUubG9jYWwKKworSUNVVkVSUzo9JChzaGVsbCBjZCAkKElDVVMpOyBscyBpY3U0YyoudGd6IHwgY3V0IC1kLSAtZjIgfCBzb3J0IHwgdW5pcSB8IGZncmVwIC12IC1mICQoTVVMVElDVV9ST09UKS9jL29sZC1pY3UudHh0KQorSUNVNEpWRVJTOj0kKHNoZWxsIGNkICQoSUNVUyk7IGxzIGljdTRqKi5qYXIgfCBjdXQgLWQtIC1mMiB8IGN1dCAtZC4gLWYxIHwgIHNvcnQgfCB1bmlxIHwgZmdyZXAgLXYgLWYgJChNVUxUSUNVX1JPT1QpL2ovb2xkLWljdTRqLnR4dCkKKworQkxEPSQoQ19CTEQpCitJTlM9JChDX0lOUykKK1NSQz0kKENfU1JDKQorCitBTExJQ1VTPSQoSUNVVkVSUzolPSQoQkxEKS8lLyQoU19CTEQpKSAkKElDVVZFUlM6JT0kKEJMRCkvciUvJChTX0JMRCkpCitSSUNVUz0kKElDVVZFUlM6JT0kKElOUykvciUvJChTX0lOUykpCitJSUNVUz0kKElDVVZFUlM6JT0kKElOUykvJS8kKFNfSU5TKSkgJChSSUNVUykKKworCitBUFJFQ0lPVVM9JChJQ1VWRVJTOiU9JChCTEQpLyUvJChTX1NSQykpICQoSUNVVkVSUzolPSQoQkxEKS9yJS8kKFNfU1JDKSkgJChJQ1VWRVJTOiU9JChCTEQpLyUvJChTX0JMRCkpICQoSUNVVkVSUzolPSQoSU5TKS8lLyQoU19JTlMpKSAkKElDVVZFUlM6JT0kKEJMRCkvciUvJChTX0JMRCkpICQoSUNVVkVSUzolPSQoSU5TKS9yJS8kKFNfSU5TKSkKKworLlBSRUNJT1VTOiAkKEFQUkVDSU9VUykKKwordGVocHJlY2lvdXM6CisJZWNobyAkKEFQUkVDSU9VUykKKworJChNX1RNUCkgJChCTEQpICQoSU5TKToKKwlta2RpciAkKE1fVE1QKQorCW1rZGlyICQoQkxEKSAkKFNSQykgICQoSU5TKQorCiskKElOUykvJS8kKFNfSU5TKTogJChCTEQpLyUvJChTX0JMRCkKKwlAaWYgWyAtZiAkKEJMRCkvJCovYnVpbGQuZXJyIF07IHRoZW4gZWNobyAnIyMjJyBFcnJvciBmb3IgJCogc3RvcmVkIGluICQoQkxEKS8kKi9idWlsZC5lcnIgLSByZW1vdmUgaWYgeW91IHdhbnQgbWUgdG8gcmV0cnk7IGZhbHNlOyAgZmkKKwkoIG1ha2UgJChNQUtFX09QVFMpIC1DICQoQkxEKS8kKi9pY3Uvc291cmNlIDI+JjEgYWxsIGluc3RhbGwgfCB0ZWUgJChCTEQpLyQqL2J1aWxkLmxvZyApIHx8ICggbXYgJChCTEQpLyQqL2J1aWxkLmxvZyAkKEJMRCkvJCovYnVpbGQuZXJyIDsgZmFsc2UgKQorCXRvdWNoIC1jICRACisKKyQoSU5TKS9yJS8kKFNfSU5TKTogJChCTEQpL3IlLyQoU19CTEQpCisJQGlmIFsgLWYgJChCTEQpL3IkKi9idWlsZC5lcnIgXTsgdGhlbiBlY2hvICcjIyMnIEVycm9yIGZvciAkKiBzdG9yZWQgaW4gJChCTEQpL3IkKi9idWlsZC5lcnIgLSByZW1vdmUgaWYgeW91IHdhbnQgbWUgdG8gcmV0cnk7IGZhbHNlOyAgZmkKKwkoIG1ha2UgJChNQUtFX09QVFMpIC1DICQoQkxEKS9yJCovaWN1L3NvdXJjZSAyPiYxIGFsbCBpbnN0YWxsIHwgdGVlICQoQkxEKS9yJCovYnVpbGQubG9nICkgfHwgKCBtdiAkKEJMRCkvciQqL2J1aWxkLmxvZyAkKEJMRCkvciQqL2J1aWxkLmVyciA7IGZhbHNlICkKKwl0b3VjaCAtYyAkQAorCiskKEJMRCkvciUvJChTX1NSQyk6ICQoSUNVUykvaWN1NGMtJS1zcmMudGd6CisJLW12ICQoQkxEKS9yJCogJChCTEQpL3IkKi5vbGQKKwktKCBybSAtcmYgLi8kKEJMRCkvciQqLm9sZCYgKQorCW1rZGlyIC1wICQoQkxEKS9yJCoKKwkoIGNkICQoQkxEKS9yJCogOyBndW56aXAgLWQgPCAkXiB8IHRhciB4ZnAgLSApCisJKFsgLWYgJChET1QpL3BhdGNoLyQqIF0gJiYgcGF0Y2ggLWQgJChCTEQpL3IkKiAtcDEgPCAkKERPVCkvcGF0Y2gvJCopIHx8IHRydWUKKwl0b3VjaCAtYyAkQAorCiskKEJMRCkvJS8kKFNfU1JDKTogJChJQ1VTKS9pY3U0Yy0lLXNyYy50Z3oKKwktbXYgJChCTEQpLyQqICQoQkxEKS8kKi5vbGQKKwktKCBybSAtcmYgLi8kKEJMRCkvJCoub2xkJiApCisJbWtkaXIgLXAgJChCTEQpLyQqCisJKCBjZCAkKEJMRCkvJCogOyBndW56aXAgLWQgPCAkXiB8IHRhciB4ZnAgLSApCisJKFsgLWYgJChET1QpL3BhdGNoLyQqIF0gJiYgcGF0Y2ggLWQgJChCTEQpLyQqIC1wMSA8ICQoRE9UKS9wYXRjaC8kKikgfHwgdHJ1ZQorCXRvdWNoIC1jICRACisKKworJChCTEQpL3IlLyQoU19CTEQpOiAkKEJMRCkvciUvJChTX1NSQykKKwktbWtkaXIgLXAgJChJTlMpCisJLWNobW9kIGErcnggJChCTEQpL3IkKi9pY3Uvc291cmNlL2NvbmZpZ3VyZSAkKEJMRCkvciQqL2ljdS9zb3VyY2UvcnVuQ29uZmlndXJlSUNVCisJKCBjZCAkKEJMRCkvciQqL2ljdS9zb3VyY2UgOyBgJChJQ1VDT05GKSAiJChCTEQpL3IkKi9pY3Uvc291cmNlIiAiJCoiYCAtLWVuYWJsZS1yZW5hbWluZyAtLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxlYXNlIC0tZGlzYWJsZS1kZWJ1ZyAtLXByZWZpeD0kKElOUykvciQqICkKKwl0b3VjaCAtYyAkQAorCiskKEJMRCkvJS8kKFNfQkxEKTogJChCTEQpLyUvJChTX1NSQykKKwktbWtkaXIgLXAgJChJTlMpCisJLWNobW9kIGErcnggJChCTEQpLyQqL2ljdS9zb3VyY2UvY29uZmlndXJlICQoQkxEKS8kKi9pY3Uvc291cmNlL3J1bkNvbmZpZ3VyZUlDVQorCSggY2QgJChCTEQpLyQqL2ljdS9zb3VyY2UgOyBgJChJQ1VDT05GKSAiJChCTEQpLyQqL2ljdS9zb3VyY2UiICIkKiJgIC0tZGlzYWJsZS1yZW5hbWluZyAtLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxlYXNlIC0tZGlzYWJsZS1kZWJ1ZyAtLXByZWZpeD0kKElOUykvJCogKQorCXRvdWNoIC1jICRACisKKworJChJTlMpLyUvYmluLyQoVEFSR0VUKTogJChJTlMpLyUvJChTX0lOUykgJChTUkNTKQorCS1ybSAtcmYgLi8kKEJMRCkvJCovdG1wCisJbWtkaXIgLi8kKEJMRCkvJCovdG1wCisJQGZvciBmaWxlIGluICQoT0JKRUNUUyk7IFwKKwlkbyBcCisJCXdoYXQ9YGJhc2VuYW1lICQkZmlsZSAub2AgOyBcCisJCWVjaG8gY29tcGlsaW5nICQqLyQkd2hhdCA7IFwKKwkJJChDWFgpIC1jIC1vIC4vJChCTEQpLyQqL3RtcC8kJHdoYXQubyAkJHdoYXQuY3BwIC1JICQoSU5TKS8kKi9pbmNsdWRlIC1JICQoQkxEKS8kKi9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsIDsgXAorCWRvbmUKKwkkKENYWCkgLW8gJEAgJChPQkpFQ1RTOiUubz0uLyQoQkxEKS8kKi90bXAvJS5vKSAgLWxpY3VkYXRhIC1saWN1dWMgLWxpY3V0dSAtbGljdWkxOG4gLUwkKElOUykvJCovbGliIAorCitmb286CisJZWNobyAkKEFMTElDVVMpCisKK2FsbGljdXM6ICQoQkxEKSAkKEFMTElDVVMpCisKKworYWxsLWljdXM6IGlpY3VzCisKK2lpY3VzOiAkKEJMRCkgJChJSUNVUykKKworcmljdXM6ICQoUklDVVMpCmRpZmYgLS1naXQgYS9tdWx0aS9jL01ha2VmaWxlLWMuaW5jIGIvbXVsdGkvYy9NYWtlZmlsZS1jLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjI5YjFmCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvYy9NYWtlZmlsZS1jLmluYwpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDEyIElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK2luY2x1ZGUgJChNVUxUSUNVX1JPT1QpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKKworQ19HT09EOj0kKHNoZWxsIFsgLWQgJChDX0lOUykgXSAmJiAoY2QgJChDX0lOUykgOyBscyAtZCAqLyQoU19JTlMpIDI+L2Rldi9udWxsIHwgY3V0IC1kLyAtZjEpKQorQ19SRUw6PSQoc2hlbGwgWyAtZCAkKENfSU5TKSBdICYmIChjZCAkKENfSU5TKSA7IGxzIC1kIHIqLyQoU19JTlMpIDI+L2Rldi9udWxsIHwgY3V0IC1kLyAtZjEpKQorCitDX0NMRUFOX1RBUkdFVD0kKENfR09PRDolPSQoQ19JTlMpLyUvYmluLyQoVEFSR0VUKSkKKworU09VUkNFUz0kKENfU09VUkNFUykgJChDWFhfU09VUkNFUykKK0NfT0JKRUNUUz0kKENfU09VUkNFUzolLmM9JS5vKQorQ1hYX09CSkVDVFM9JChDWFhfU09VUkNFUzolLmNwcD0lLm8pCitPQkpFQ1RTPSQoQ19PQkpFQ1RTKSAkKENYWF9PQkpFQ1RTKQorI0RFQlVHT1BUPS1nCisKKyMgbGlzdCBvZiBJQ1VzIHRvIGJlIGJ1aWx0CQorSUNVX1RBUkJBTExTPSQoc2hlbGwgY2QgJChJQ1VTKSA7IGxzIGljdTRjLSotc3JjLnRneikKKyMgbGlzdCBvZiB2ZXJzaW9ucyAoIGZvcm0gIjNfOCAgNF8wIiBldGMuICkKK0lDVV9UQVJCQUxMU19WRVJTPSQoSUNVX1RBUkJBTExTOmljdTRjLSUtc3JjLnRnej0lKQorCisKKyQoQ19JTlMpLyUvYmluLyQoVEFSR0VUKToJJChTT1VSQ0VTKSAkKEhFQURFUlMpCisJLXJtIC1yZiAkKENfSU5TKS8kKi90bXAKKwlta2RpciAkKENfSU5TKS8kKi90bXAKK2lmbmVxICgsJChDWFhfT0JKRUNUUykpCisJQGZvciBmaWxlIGluICQoQ1hYX09CSkVDVFMpOyBcCisJZG8gXAorCQl3aGF0PWBiYXNlbmFtZSAkJGZpbGUgLm9gIDsgXAorCQllY2hvIGNvbXBpbGluZyAnKEMrKyknICQqLyQkd2hhdCA7IFwKKwkJYCQoQ19JTlMpLyQqL2Jpbi9pY3UtY29uZmlnIC0tY3h4YCBgJChDX0lOUykvJCovYmluL2ljdS1jb25maWcgLS1jeHhmbGFnc2AgJChERUJVR09QVCkgIC1jIC1vICQoQ19JTlMpLyQqL3RtcC8kJHdoYXQubyAkJHdoYXQuY3BwIC1JICQoQ19JTlMpLyQqL2luY2x1ZGUgLUkgJChDX0JMRCkvJCovaWN1L3NvdXJjZS90b29scy90b29sdXRpbCAgfHwgXAorCQkkKENYWCkgJChERUJVR09QVCkgLWMgLW8gJChDX0lOUykvJCovdG1wLyQkd2hhdC5vICQke3doYXR9LmNwcCAtSSAkKENfSU5TKS8kKi9pbmNsdWRlIC1JICQoQ19CTEQpLyQqL2ljdS9zb3VyY2UvdG9vbHMvdG9vbHV0aWwgOyBcCisJZG9uZQorZW5kaWYKK2lmbmVxICgsJChDX09CSkVDVFMpKQorCUBmb3IgZmlsZSBpbiAkKENfT0JKRUNUUyk7IFwKKwlkbyBcCisJCXdoYXQ9YGJhc2VuYW1lICQkZmlsZSAub2AgOyBcCisJCWVjaG8gY29tcGlsaW5nICcoQyAgKScgJCovJCR3aGF0IDsgXAorCQkkKENDKSAkKERFQlVHT1BUKSAtYyAtbyAkKENfSU5TKS8kKi90bXAvJCR3aGF0Lm8gJCR7d2hhdH0uYyAtSSAkKENfSU5TKS8kKi9pbmNsdWRlIC1JICQoQ19CTEQpLyQqL2ljdS9zb3VyY2UvdG9vbHMvdG9vbHV0aWwgOyBcCisJZG9uZQorZW5kaWYKKwlAZWNobyBsaW5raW5nICQqLyQkd2hhdAorCUBgJChDX0lOUykvJCovYmluL2ljdS1jb25maWcgLS1jeHhgIGAkKENfSU5TKS8kKi9iaW4vaWN1LWNvbmZpZyAtLWxkZmxhZ3MgYCAgJChERUJVR09QVCkgLW8gJEAgJChPQkpFQ1RTOiUubz0kKENfSU5TKS8kKi90bXAvJS5vKSAgLWxpY3VkYXRhIC1saWN1dWMgLWxpY3V0dSAtbGljdWkxOG4gLWxpY3VpbyAtTCQoQ19JTlMpLyQqL2xpYiB8fCBcCisJICQoQ1hYKSAkKERFQlVHT1BUKSAtbyAkQCAkKE9CSkVDVFM6JS5vPSQoQ19JTlMpLyQqL3RtcC8lLm8pICAtbGljdWRhdGEgLWxpY3V1YyAtbGljdXR1IC1saWN1aTE4biAtbGljdWlvIC1MJChDX0lOUykvJCovbGliIAorCisKZGlmZiAtLWdpdCBhL211bHRpL2Mvb2xkLWljdS50eHQgYi9tdWx0aS9jL29sZC1pY3UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjdlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9jL29sZC1pY3UudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgYSBsaXN0IG9mIElDVTRDcyB0b28gb2xkIHRvIGJ1aWxkIHdpdGggdGhlIGN1cnJlbnQgcGF0Y2hzZXQuCmRpZmYgLS1naXQgYS9tdWx0aS9jL3BhdGNoLzNfMCBiL211bHRpL2MvcGF0Y2gvM18wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzM4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9jL3BhdGNoLzNfMApAQCAtMCwwICsxLDEyNzc1IEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitPbmx5IGluIDNfMC9pY3Uvc291cmNlOiBiaW4KK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmRlZnMuaAorZGlmZiAtcnUgM18wLm9yaWcvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luIDNfMC9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4KKy0tLSAzXzAub3JpZy9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4JMjAwOC0xMC0yMCAxNDo1Nzo1Mi4wMDAwMDAwMDAgLTA3MDAKKysrKyAzXzAvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luCTIwMDgtMTAtMjAgMTU6NTc6MjguMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNiArMTUsOCBAQAorICMjIENvbW1hbmRzIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgZmlsZXMKKyBHRU5fREVQUy5jPQkkKENDKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisgR0VOX0RFUFMuY2M9CSQoQ1hYKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisrR0VOX0RFUFMuYz0JZWNobworK0dFTl9ERVBTLmNjPQllY2hvCisgCisgIyMgQ29tbWFuZHMgdG8gY29tcGlsZQorIENPTVBJTEUuYz0JJChDQykgJChERUZTKSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWZuby1jb21tb24gLWMKK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmlnLmNhY2hlCitPbmx5IGluIDNfMC5vcmlnL2ljdS9zb3VyY2U6IGNvbmZpZy5sb2cKK2RpZmYgLXJ1IDNfMC5vcmlnL2ljdS9zb3VyY2UvY29uZmlndXJlIDNfMC9pY3Uvc291cmNlL2NvbmZpZ3VyZQorLS0tIDNfMC5vcmlnL2ljdS9zb3VyY2UvY29uZmlndXJlCTIwMDgtMTAtMjAgMTQ6NTg6MTAuMDAwMDAwMDAwIC0wNzAwCisrKysgM18wL2ljdS9zb3VyY2UvY29uZmlndXJlCTIwMDgtMTAtMjAgMTU6NTQ6NDYuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw2NSArMSw4MjIgQEAKKyAjISAvYmluL3NoCistCisgIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEzIAorLSMgQ29weXJpZ2h0IChDKSAxOTkyLCA5MywgOTQsIDk1LCA5NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4KKyAjCisrIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysKKysjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKKytEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBlbXVsYXRlIHNoCisrICBOVUxMQ01EPToKKysgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKysgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKytlbHNlCisrICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKysgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworK2VzYWMKKysKKytmaQorKworKworKworKworKyMgUEFUSCBuZWVkcyBDUgorKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKythc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKythc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKythc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKythc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCisrYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisrCisrYXNfbmw9JworKycKKytleHBvcnQgYXNfbmwKKysjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisrYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisrYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKytpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisrICBhc19lY2hvX249J3ByaW50ZiAlcycKKytlbHNlCisrICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKysgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKysgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworKyAgZWxzZQorKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorKyAgICAgIGFyZz0kMTsKKysgICAgICBjYXNlICRhcmcgaW4KKysgICAgICAqIiRhc19ubCIqKQorKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKysJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKysgICAgICBlc2FjOworKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKysgICAgJworKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKysgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKysgIGZpCisrICBleHBvcnQgYXNfZWNob19ib2R5CisrICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCisrZmkKKysKKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgUEFUSF9TRVBBUkFUT1I9OgorKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgfQorK2ZpCisrCisrIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCisraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc191bnNldD11bnNldAorK2Vsc2UKKysgIGFzX3Vuc2V0PWZhbHNlCisrZmkKKysKKysKKysjIElGUworKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisrIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisrIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisrIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorK0lGUz0iICIiCSRhc19ubCIKKysKKysjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorK2Nhc2UgJDAgaW4KKysgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKysgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICAgICA7OworK2VzYWMKKysjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisrIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCisraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorKyAgYXNfbXlzZWxmPSQwCisrZmkKKytpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisrICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorKyAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKysKKysjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKytmb3IgYXNfdmFyIGluIEVOViBNQUlMIE1BSUxQQVRICisrZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKytkb25lCisrUFMxPSckICcKKytQUzI9Jz4gJworK1BTND0nKyAnCisrCisrIyBOTFMgbnVpc2FuY2VzLgorK0xDX0FMTD1DCisrZXhwb3J0IExDX0FMTAorK0xBTkdVQUdFPUMKKytleHBvcnQgTEFOR1VBR0UKKysKKysjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisrICBhc19leHByPWV4cHIKKytlbHNlCisrICBhc19leHByPWZhbHNlCisrZmkKKysKKytpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisrICBhc19iYXNlbmFtZT1iYXNlbmFtZQorK2Vsc2UKKysgIGFzX2Jhc2VuYW1lPWZhbHNlCisrZmkKKysKKysKKysjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCisrYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CisrJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyskYXNfZWNobyBYLyIkMCIgfAorKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcL1woXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXCkuKi97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgcy8uKi8uLzsgcSdgCisrCisrIyBDRFBBVEguCisrJGFzX3Vuc2V0IENEUEFUSAorKworKworK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKysgIGlmIChldmFsICI6IikgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisrZWxzZQorKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworK2ZpCisrCisrICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0geWVzICYmCSAoZXZhbCAiOgorKyhhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysoCisrICBhc19saW5lbm9fMT1cJExJTkVOTworKyAgYXNfbGluZW5vXzI9XCRMSU5FTk8KKysgIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgorKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMlwiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysiKSAyPiAvZGV2L251bGw7IHRoZW4KKysgIDoKKytlbHNlCisrICBhc19jYW5kaWRhdGVfc2hlbGxzPQorKyAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgY2FzZSAkYXNfZGlyIGluCisrCSAvKikKKysJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworKwkgICAgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9IiRhc19jYW5kaWRhdGVfc2hlbGxzICRhc19kaXIvJGFzX2Jhc2UiCisrCSAgIGRvbmU7OworKyAgICAgICBlc2FjCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysKKysgICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworKwkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorKwkgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisrCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKys6CisrX0FTRU9GCisrfTsgdGhlbgorKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbAorKwkgICAgICAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKysJICAgICAgIGlmIHsgIiRhc19zaGVsbCIgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKys6CisrKGFzX2Z1bmNfcmV0dXJuICgpIHsKKysgIChleGl0ICQxKQorK30KKythc19mdW5jX3N1Y2Nlc3MgKCkgeworKyAgYXNfZnVuY19yZXR1cm4gMAorK30KKythc19mdW5jX2ZhaWx1cmUgKCkgeworKyAgYXNfZnVuY19yZXR1cm4gMQorK30KKythc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKysgIHJldHVybiAwCisrfQorK2FzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworKyAgcmV0dXJuIDEKKyt9CisrCisrZXhpdGNvZGU9MAorK2lmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgorK2ZpCisrCisraWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9ICIkMSIgKTsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorK2ZpCisrCisrdGVzdCAkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKysKKysoCisrICBhc19saW5lbm9fMT0kTElORU5PCisrICBhc19saW5lbm9fMj0kTElORU5PCisrICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKysgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworK19BU0VPRgorK307IHRoZW4KKysgIGJyZWFrCisrZmkKKysKKytmaQorKworKyAgICAgIGRvbmUKKysKKysgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbgorKyAgZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYKKysJZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKysJZG9uZQorKwlleHBvcnQgQ09ORklHX1NIRUxMCisrCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKytmaQorKworKworKyAgICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0gbm87IHRoZW4KKysgIGVjaG8gVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCB0aGUKKysgICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCisrICAgICAgZWNobyBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQorKyAgICAgIGVjaG8gc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLgorKyAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorK2ZpCisrCisrCisrZmkKKysKKytmaQorKworKworKworKyhldmFsICJhc19mdW5jX3JldHVybiAoKSB7CisrICAoZXhpdCBcJDEpCisrfQorK2FzX2Z1bmNfc3VjY2VzcyAoKSB7CisrICBhc19mdW5jX3JldHVybiAwCisrfQorK2FzX2Z1bmNfZmFpbHVyZSAoKSB7CisrICBhc19mdW5jX3JldHVybiAxCisrfQorK2FzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworKyAgcmV0dXJuIDAKKyt9CisrYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7CisrICByZXR1cm4gMQorK30KKysKKytleGl0Y29kZT0wCisraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorK2ZpCisrCisraWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCisrICBleGl0Y29kZT0xCisrICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKytmaQorKworK2lmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKysgIGV4aXRjb2RlPTEKKysgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCisrZmkKKysKKytpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisrICA6CisrZWxzZQorKyAgZXhpdGNvZGU9MQorKyAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCisrZmkKKysKKyt0ZXN0IFwkZXhpdGNvZGUgPSAwIikgfHwgeworKyAgZWNobyBObyBzaGVsbCBmb3VuZCB0aGF0IHN1cHBvcnRzIHNoZWxsIGZ1bmN0aW9ucy4KKysgIGVjaG8gUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCisrICBlY2hvIGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzIG1lc3NhZ2UuCisrICBlY2hvIFRoaXMgY2FuIGhlbHAgdXMgaW1wcm92ZSBmdXR1cmUgYXV0b2NvbmYgdmVyc2lvbnMuCisrICBlY2hvIENvbmZpZ3VyYXRpb24gd2lsbCBub3cgcHJvY2VlZCB3aXRob3V0IHNoZWxsIGZ1bmN0aW9ucy4KKyt9CisrCisrCisrCisrICBhc19saW5lbm9fMT0kTElORU5PCisrICBhc19saW5lbm9fMj0kTElORU5PCisrICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKysgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIgfHwgeworKworKyAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworKyAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQorKyAgIyBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCisrICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAorKyAgIyBsaW5lLW51bWJlciBsaW5lIHdpdGggdGhlIGxpbmUgY29udGFpbmluZyAkTElORU5PLCBhbmQgYXBwZW5kcworKyAgIyB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAorKyAgIyBjYXNlIGF0IGxpbmUgZW5kLgorKyAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCisrICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKKysgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisrICBzZWQgLW4gJworKyAgICBwCisrICAgIC9bJF1MSU5FTk8vPQorKyAgJyA8JGFzX215c2VsZiB8CisrICAgIHNlZCAnCisrICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKysgICAgICB0IGxpbmVubworKyAgICAgIGIKKysgICAgICA6bGluZW5vCisrICAgICAgTgorKyAgICAgIDpsb29wCisrICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisrICAgICAgdCBsb29wCisrICAgICAgcy8tXG4uKi8vCisrICAgICcgPiRhc19tZS5saW5lbm8gJiYKKysgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrCisrICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisrICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorKyAgLiAiLi8kYXNfbWUubGluZW5vIgorKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisrICBleGl0CisrfQorKworKworK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfZGlybmFtZT1kaXJuYW1lCisrZWxzZQorKyAgYXNfZGlybmFtZT1mYWxzZQorK2ZpCisrCisrRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KKytjYXNlIGBlY2hvIC1uIHhgIGluCisrLW4qKQorKyAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKysgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorKyAgKikgICBFQ0hPX0M9J1xjJzs7CisrICBlc2FjOzsKKysqKQorKyAgRUNIT19OPSctbic7OworK2VzYWMKKytpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisrICBhc19leHByPWV4cHIKKytlbHNlCisrICBhc19leHByPWZhbHNlCisrZmkKKysKKytybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorK2Vsc2UKKysgIHJtIC1mIGNvbmYkJC5kaXIKKysgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKytmaQorK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKysgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorKyAgICBhc19sbl9zPSdsbiAtcycKKysgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKysgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKysgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisrICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisrICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKysgICAgICBhc19sbl9zPSdjcCAtcCcKKysgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisrICAgIGFzX2xuX3M9bG4KKysgIGVsc2UKKysgICAgYXNfbG5fcz0nY3AgLXAnCisrICBmaQorK2Vsc2UKKysgIGFzX2xuX3M9J2NwIC1wJworK2ZpCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKysKKytpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisrICBhc19ta2Rpcl9wPToKKytlbHNlCisrICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorKyAgYXNfbWtkaXJfcD1mYWxzZQorK2ZpCisgCistIyBEZWZhdWx0czoKKy1hY19oZWxwPQorK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKytlbHNlCisrICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgYXNfbHNfTF9vcHRpb249TAorKyAgZWxzZQorKyAgICBhc19sc19MX29wdGlvbj0KKysgIGZpCisrICBhc190ZXN0X3g9JworKyAgICBldmFsIHNoIC1jICdcJycKKysgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKysJdGVzdCAtZCAiJDEvLiI7CisrICAgICAgZWxzZQorKwljYXNlICQxIGluCisrCS0qKXNldCAiLi8kMSI7OworKwllc2FjOworKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisrICAgICdcJycgc2gKKysgICcKKytmaQorK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisrCisrIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisrCisrIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCisrYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKysKKysKKysKKytleGVjIDc8JjAgPC9kZXYvbnVsbCA2PiYxCisrCisrIyBOYW1lIG9mIHRoZSBob3N0LgorKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisrIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCisrYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisrCisrIworKyMgSW5pdGlhbGl6YXRpb25zLgorKyMKKyBhY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCistIyBBbnkgYWRkaXRpb25zIGZyb20gY29uZmlndXJlLmluOgorLWFjX2hlbHA9IiRhY19oZWxwCistICAtLWVuYWJsZS1zdHJpY3QgICAgICAgICBjb21waWxlIHdpdGggc3RyaWN0IGNvbXBpbGVyIG9wdGlvbnMgW2RlZmF1bHQ9bm9dIgorLWFjX2hlbHA9IiRhY19oZWxwCistICAtLWVuYWJsZS02NGJpdC1saWJzICAgICBidWlsZCA2NC1iaXQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXNoYXJlZCAgICAgICAgIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtc3RhdGljICAgICAgICAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD1ub10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyBbZGVmYXVsdD1ub10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXJlbGVhc2UgICAgICAgIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzIFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXJlbmFtaW5nICAgICAgIGFkZCBhIHZlcnNpb24gc3VmZml4IHRvIHN5bWJvbHMgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtdHJhY2luZyAgICAgICAgZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtcnBhdGggICAgICAgICAgdXNlIHJwYXRoIHdoZW4gbGlua2luZyBbZGVmYXVsdCBpcyBvbmx5IGlmIG5lY2Vzc2FyeV0iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXRocmVhZHMgICAgICAgIGJ1aWxkIElDVSB3aXRoIHRocmVhZCBzYWZldHkgW2RlZmF1bHQ9eWVzXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS13aXRoLWlvc3RyZWFtPXZlcnNpb24gc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBpb3N0cmVhbSB0byB1c2UgKG5vbmUsIG9sZCwgc3RkLCBhdXRvKSBbZGVmYXVsdD1hdXRvXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtZXh0cmFzICAgICAgICAgYnVpbGQgSUNVIGV4dHJhcyBbZGVmYXVsdD15ZXNdIgorLWFjX2hlbHA9IiRhY19oZWxwCistICAtLWVuYWJsZS1pY3VpbyAgICAgICAgICBidWlsZCBJQ1UncyBpY3VpbyBsaWJyYXJ5IFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLWxheW91dCAgICAgICAgIGJ1aWxkIElDVSdzIGxheW91dCBsaWJyYXJ5IFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0td2l0aC1kYXRhLXBhY2thZ2luZz10eXBlIHNwZWNpZnkgaG93IHRvIHBhY2thZ2UgSUNVIGRhdGEgKGZpbGVzLCBhcmNoaXZlLCBsaWJyYXJ5LCBhdXRvKSBbZGVmYXVsdD1hdXRvXSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS13aXRoLWxpYnJhcnktc3VmZml4PXN1ZmZpeCAgICB0YWcgYSBzdWZmaXggdG8gdGhlIGxpYnJhcnkgbmFtZXMgW2RlZmF1bHQ9XSIKKy1hY19oZWxwPSIkYWNfaGVscAorLSAgLS1lbmFibGUtdGVzdHMgICAgICAgICAgYnVpbGQgSUNVIHRlc3RzIFtkZWZhdWx0PXllc10iCistYWNfaGVscD0iJGFjX2hlbHAKKy0gIC0tZW5hYmxlLXNhbXBsZXMgICAgICAgIGJ1aWxkIElDVSBzYW1wbGVzIFtkZWZhdWx0PXllc10gIAorLUFkZGl0aW9uYWxseSwgdGhlIHZhcmlhYmxlIEZPUkNFX0xJQlMgbWF5IGJlIHNldCBiZWZvcmUgY2FsbGluZyBjb25maWd1cmUuIElmIHNldCwgaXQgd2lsbCBSRVBMQUNFIGFueSBhdXRvbWF0aWMgbGlzdCBvZiBsaWJyYXJpZXMuIgorK2FjX2NsZWFuX2ZpbGVzPQorK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KKytMSUJPQkpTPQorK2Nyb3NzX2NvbXBpbGluZz1ubworK3N1YmRpcnM9CisrTUZMQUdTPQorK01BS0VGTEFHUz0KKytTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorKworKyMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorK1BBQ0tBR0VfTkFNRT0KKytQQUNLQUdFX1RBUk5BTUU9CisrUEFDS0FHRV9WRVJTSU9OPQorK1BBQ0tBR0VfU1RSSU5HPQorK1BBQ0tBR0VfQlVHUkVQT1JUPQorKworK2FjX3VuaXF1ZV9maWxlPSJjb21tb24vdW5pY29kZS91dHlwZXMuaCIKKysjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCisrYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisrIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisrIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNlbmRpZgorKyNpZmRlZiBTVERDX0hFQURFUlMKKysjIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisrI2Vsc2UKKysjIGlmZGVmIEhBVkVfU1RETElCX0gKKysjICBpbmNsdWRlIDxzdGRsaWIuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2lmZGVmIEhBVkVfU1RSSU5HX0gKKysjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKKysjICBpbmNsdWRlIDxtZW1vcnkuaD4KKysjIGVuZGlmCisrIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKysjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisrIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1NURElOVF9ICisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWZkZWYgSEFWRV9VTklTVERfSAorKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisrI2VuZGlmIgorKworK2FjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworK0xJQk9CSlMKKytBSVhfU0hMSUIKKytsZF9ycGF0aF9zdWYKKytwbGF0Zm9ybV9tYWtlX2ZyYWdtZW50CisrcGxhdGZvcm1fbWFrZV9mcmFnbWVudF9uYW1lCisrcGxhdGZvcm0KKytJQ1VEQVRBX0NIQVIKKytTQU1QTEVTX1RSVUUKKytURVNUU19UUlVFCisrSUNVTElCU1VGRklYQ05BTUUKKytVX0hBVkVfTElCX1NVRkZJWAorK0lDVUxJQlNVRkZJWAorK0RBVEFfUEFDS0FHSU5HX01PREUKKytEQVRBX1BBQ0tBR0lOR19DUFBGTEFHUworK3RoZXBrZ2ljdWRhdGFkaXIKKytwa2dpY3VkYXRhZGlyCisrdGhlbGliZGlyCisrdGhlZGF0YWRpcgorK3RoZXN5c2NvbmZkaXIKKytMQVlPVVRfVFJVRQorK0lDVUlPX1RSVUUKKytFWFRSQVNfVFJVRQorK1VfU0laRU9GX1dDSEFSX1QKKytVX0hBVkVfV0NTQ1BZCisrVV9IQVZFX1dDSEFSX0gKKytIQVZFX1VJTlQ2NF9UCisrSEFWRV9JTlQ2NF9UCisrSEFWRV9VSU5UMzJfVAorK0hBVkVfSU5UMzJfVAorK0hBVkVfVUlOVDE2X1QKKytIQVZFX0lOVDE2X1QKKytIQVZFX1VJTlQ4X1QKKytIQVZFX0lOVDhfVAorK1VfVElNRVpPTkUKKytVX0hBVkVfVElNRVpPTkUKKytVX1RaTkFNRQorK1VfVFpTRVQKKytVX0hBVkVfUE9QRU4KKytVX0hBVkVfUExBQ0VNRU5UX05FVworK1VfT1ZFUlJJREVfQ1hYX0FMTE9DQVRJT04KKytVX0hBVkVfTkFNRVNQQUNFCisrVV9OTF9MQU5HSU5GT19DT0RFU0VUCisrVV9IQVZFX05MX0xBTkdJTkZPX0NPREVTRVQKKytVX0hBVkVfTkxfTEFOR0lORk8KKytVX0lTX0JJR19FTkRJQU4KKytVX0lPU1RSRUFNX1NPVVJDRQorK0NYWENQUAorK1VfSEFWRV9JTlRUWVBFU19ICisrRUdSRVAKKytHUkVQCisrQ1BQCisrR0VOQ0NPREVfQVNTRU1CTFkKKytIQVZFX01NQVAKKytJQ1VfVVNFX1RIUkVBRFMKKytUSFJFQURTX1RSVUUKKytVX0lOTElORQorK0VOQUJMRV9SUEFUSAorK1VfRU5BQkxFX1RSQUNJTkcKKytVX0RJU0FCTEVfUkVOQU1JTkcKKytBUgorK1JBTkxJQgorK0VOQUJMRV9SRUxFQVNFCisrRU5BQkxFX0RFQlVHCisrRU5BQkxFX1NUQVRJQworK0VOQUJMRV9TSEFSRUQKKytMSUJfTQorK0NPTVBJTEVfTElOS19FTlZWQVIKKytBUkZMQUdTCisraG9zdF9vcworK2hvc3RfdmVuZG9yCisraG9zdF9jcHUKKytob3N0CisrYnVpbGRfb3MKKytidWlsZF92ZW5kb3IKKytidWlsZF9jcHUKKytidWlsZAorK0RPWFlHRU4KKytVX01BS0UKKytTVFJJUAorK0lOU1RBTExfREFUQQorK0lOU1RBTExfU0NSSVBUCisrSU5TVEFMTF9QUk9HUkFNCisrYWNfY3RfQ1hYCisrQ1hYRkxBR1MKKytDWFgKKytPQkpFWFQKKytFWEVFWFQKKythY19jdF9DQworK0xERkxBR1MKKytDRkxBR1MKKytDQworK0NQUEZMQUdTCisrVU5JQ09ERV9WRVJTSU9OCisrTElCX1ZFUlNJT05fTUFKT1IKKytMSUJfVkVSU0lPTgorK1ZFUlNJT04KKytQQUNLQUdFCisrdGFyZ2V0X2FsaWFzCisraG9zdF9hbGlhcworK2J1aWxkX2FsaWFzCisrTElCUworK0VDSE9fVAorK0VDSE9fTgorK0VDSE9fQworK0RFRlMKKyttYW5kaXIKKytsb2NhbGVkaXIKKytsaWJkaXIKKytwc2RpcgorK3BkZmRpcgorK2R2aWRpcgorK2h0bWxkaXIKKytpbmZvZGlyCisrZG9jZGlyCisrb2xkaW5jbHVkZWRpcgorK2luY2x1ZGVkaXIKKytsb2NhbHN0YXRlZGlyCisrc2hhcmVkc3RhdGVkaXIKKytzeXNjb25mZGlyCisrZGF0YWRpcgorK2RhdGFyb290ZGlyCisrbGliZXhlY2RpcgorK3NiaW5kaXIKKytiaW5kaXIKKytwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCisrcHJlZml4CisrZXhlY19wcmVmaXgKKytQQUNLQUdFX0JVR1JFUE9SVAorK1BBQ0tBR0VfU1RSSU5HCisrUEFDS0FHRV9WRVJTSU9OCisrUEFDS0FHRV9UQVJOQU1FCisrUEFDS0FHRV9OQU1FCisrUEFUSF9TRVBBUkFUT1IKKytTSEVMTCcKKythY19zdWJzdF9maWxlcz0nJworK2FjX3VzZXJfb3B0cz0nCisrZW5hYmxlX29wdGlvbl9jaGVja2luZworK2VuYWJsZV9zdHJpY3QKKytlbmFibGVfNjRiaXRfbGlicworK2VuYWJsZV9zaGFyZWQKKytlbmFibGVfc3RhdGljCisrZW5hYmxlX2RlYnVnCisrZW5hYmxlX3JlbGVhc2UKKytlbmFibGVfcmVuYW1pbmcKKytlbmFibGVfdHJhY2luZworK2VuYWJsZV9ycGF0aAorK2VuYWJsZV90aHJlYWRzCisrd2l0aF9pb3N0cmVhbQorK2VuYWJsZV9leHRyYXMKKytlbmFibGVfbGF5b3V0Cisrd2l0aF9kYXRhX3BhY2thZ2luZworK2VuYWJsZV9tYXBwZWQKKyt3aXRoX2xpYnJhcnlfc3VmZml4CisrZW5hYmxlX3Rlc3RzCisrZW5hYmxlX3NhbXBsZXMKKysnCisrICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKKytob3N0X2FsaWFzCisrdGFyZ2V0X2FsaWFzCisrQ0MKKytDRkxBR1MKKytMREZMQUdTCisrTElCUworK0NQUEZMQUdTCisrQ1hYCisrQ1hYRkxBR1MKKytDQ0MKKytDUFAKKytDWFhDUFAnCisrCisgCisgIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorK2FjX2luaXRfaGVscD0KKythY19pbml0X3ZlcnNpb249ZmFsc2UKKythY191bnJlY29nbml6ZWRfb3B0cz0KKythY191bnJlY29nbml6ZWRfc2VwPQorICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisgIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorLWJ1aWxkPU5PTkUKKy1jYWNoZV9maWxlPS4vY29uZmlnLmNhY2hlCisrY2FjaGVfZmlsZT0vZGV2L251bGwKKyBleGVjX3ByZWZpeD1OT05FCistaG9zdD1OT05FCisgbm9fY3JlYXRlPQorLW5vbm9wdD1OT05FCisgbm9fcmVjdXJzaW9uPQorIHByZWZpeD1OT05FCisgcHJvZ3JhbV9wcmVmaXg9Tk9ORQorQEAgLTY4LDk0ICs4MjUsMTMzIEBACisgc2lsZW50PQorIHNpdGU9Cisgc3JjZGlyPQorLXRhcmdldD1OT05FCisgdmVyYm9zZT0KKyB4X2luY2x1ZGVzPU5PTkUKKyB4X2xpYnJhcmllcz1OT05FCisrCisrIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisrIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisrIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKysjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisrIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKysjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCisgYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKKyBsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworLWRhdGFkaXI9JyR7cHJlZml4fS9zaGFyZScKKytkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9JworIHN5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCisgc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCisgbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKKy1saWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKKyBpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKKyBvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCistaW5mb2Rpcj0nJHtwcmVmaXh9L2luZm8nCistbWFuZGlyPScke3ByZWZpeH0vbWFuJworLQorLSMgSW5pdGlhbGl6ZSBzb21lIG90aGVyIHZhcmlhYmxlcy4KKy1zdWJkaXJzPQorLU1GTEFHUz0gTUFLRUZMQUdTPQorLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CistIyBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBwdXQgaW4gYSBzaGVsbCBoZXJlIGRvY3VtZW50LgorLWFjX21heF9oZXJlX2xpbmVzPTEyCisrZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFfScKKytpbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJworK2h0bWxkaXI9JyR7ZG9jZGlyfScKKytkdmlkaXI9JyR7ZG9jZGlyfScKKytwZGZkaXI9JyR7ZG9jZGlyfScKKytwc2Rpcj0nJHtkb2NkaXJ9JworK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworK2xvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJworK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworIAorIGFjX3ByZXY9CisrYWNfZGFzaGRhc2g9CisgZm9yIGFjX29wdGlvbgorIGRvCistCisgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorLSAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKysgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgICBhY19wcmV2PQorICAgICBjb250aW51ZQorICAgZmkKKyAKKy0gIGNhc2UgIiRhY19vcHRpb24iIGluCistICAtKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRpb24iIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKy0gICopIGFjX29wdGFyZz0gOzsKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworKyAgKikJYWNfb3B0YXJnPXllcyA7OworICAgZXNhYworIAorICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKyAKKy0gIGNhc2UgIiRhY19vcHRpb24iIGluCisrICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKysgIC0tKQorKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKyAKKyAgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCisgICAgIGFjX3ByZXY9YmluZGlyIDs7CisgICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorLSAgICBiaW5kaXI9IiRhY19vcHRhcmciIDs7CisrICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorLSAgICBhY19wcmV2PWJ1aWxkIDs7CisrICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorLSAgICBidWlsZD0iJGFjX29wdGFyZyIgOzsKKysgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworIAorICAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAorICAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCisgICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorLSAgICBjYWNoZV9maWxlPSIkYWNfb3B0YXJnIiA7OworKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKyAKKy0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkIHwgLS1kYXRhIHwgLS1kYXQgfCAtLWRhKQorKyAgLS1jb25maWctY2FjaGUgfCAtQykKKysgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKysKKysgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQorICAgICBhY19wcmV2PWRhdGFkaXIgOzsKKy0gIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSogfCAtLWRhdGE9KiB8IC0tZGF0PSogXAorLSAgfCAtLWRhPSopCistICAgIGRhdGFkaXI9IiRhY19vcHRhcmciIDs7CisrICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQorKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisrICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKysgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKysgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCistICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSpkaXNhYmxlLS8vJ2AKKysgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorLSAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKy0gICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19mZWF0dXJlOiBpbnZhbGlkIGZlYXR1cmUgbmFtZSIgMT4mMjsgZXhpdCAxOyB9CistICAgIGZpCistICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgCistICAgIGV2YWwgImVuYWJsZV8ke2FjX2ZlYXR1cmV9PW5vIiA7OworKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisrICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorKyAgICAgICoiCisrImVuYWJsZV8kYWNfdXNlcm9wdCIKKysiKikgOzsKKysgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKysJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisrICAgIGVzYWMKKysgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKysKKysgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisrICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisrICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKKysgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCisrICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisrICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorKyAgICBkdmlkaXI9JGFjX29wdGFyZyA7OworIAorICAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKy0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmVuYWJsZS0vLycgLWUgJ3MvPS4qLy8nYAorKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCistICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorLSAgICBmaQorLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvLS9fL2cnYAorLSAgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorLSAgICAgICo9KikgOzsKKy0gICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisrICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisrICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKysgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisrICAgICAgKiIKKysiZW5hYmxlXyRhY191c2Vyb3B0IgorKyIqKSA7OworKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisrCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgICBlc2FjCistICAgIGV2YWwgImVuYWJsZV8ke2FjX2ZlYXR1cmV9PSckYWNfb3B0YXJnJyIgOzsKKysgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKyAKKyAgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKK0BAIC0xNjQsMTE2ICs5NjAsNzcgQEAKKyAgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKKyAgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorLSAgICBleGVjX3ByZWZpeD0iJGFjX29wdGFyZyIgOzsKKysgICAgZXhlY19wcmVmaXg9JGFjX29wdGFyZyA7OworIAorICAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgIHdpdGhfZ2FzPXllcyA7OworIAorLSAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUpCistICAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorLSAgICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCistICAgIGNhdCA8PCBFT0YKKy1Vc2FnZTogY29uZmlndXJlIFtvcHRpb25zXSBbaG9zdF0KKy1PcHRpb25zOiBbZGVmYXVsdHMgaW4gYnJhY2tldHMgYWZ0ZXIgZGVzY3JpcHRpb25zXQorLUNvbmZpZ3VyYXRpb246CistICAtLWNhY2hlLWZpbGU9RklMRSAgICAgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRQorLSAgLS1oZWxwICAgICAgICAgICAgICAgICAgcHJpbnQgdGhpcyBtZXNzYWdlCistICAtLW5vLWNyZWF0ZSAgICAgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworLSAgLS1xdWlldCwgLS1zaWxlbnQgICAgICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCistICAtLXZlcnNpb24gICAgICAgICAgICAgICBwcmludCB0aGUgdmVyc2lvbiBvZiBhdXRvY29uZiB0aGF0IGNyZWF0ZWQgY29uZmlndXJlCistRGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzOgorLSAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCistICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorLSAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtzYW1lIGFzIHByZWZpeF0KKy0gIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgaW4gRElSIFtFUFJFRklYL2Jpbl0KKy0gIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBpbiBESVIgW0VQUkVGSVgvc2Jpbl0KKy0gIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgaW4gRElSIFtFUFJFRklYL2xpYmV4ZWNdCistICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCistICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYL3NoYXJlXQorLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQUkVGSVgvZXRjXQorLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBpbiBESVIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvY29tXQorLSAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIGluIERJUiBbUFJFRklYL3Zhcl0KKy0gIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBpbiBESVIgW0VQUkVGSVgvbGliXQorLSAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgaW4gRElSIFtQUkVGSVgvaW5jbHVkZV0KKy0gIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIGluIERJUiBbL3Vzci9pbmNsdWRlXQorLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIGluIERJUiBbUFJFRklYL2luZm9dCistICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9tYW5dCistICAtLXNyY2Rpcj1ESVIgICAgICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciAuLl0KKy0gIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCistICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCistICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCistRU9GCistICAgIGNhdCA8PCBFT0YKKy1Ib3N0IHR5cGU6CistICAtLWJ1aWxkPUJVSUxEICAgICAgICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtCVUlMRD1IT1NUXQorLSAgLS1ob3N0PUhPU1QgICAgICAgICAgICAgY29uZmlndXJlIGZvciBIT1NUIFtndWVzc2VkXQorLSAgLS10YXJnZXQ9VEFSR0VUICAgICAgICAgY29uZmlndXJlIGZvciBUQVJHRVQgW1RBUkdFVD1IT1NUXQorLUZlYXR1cmVzIGFuZCBwYWNrYWdlczoKKy0gIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKy0gIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKy0gIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorLSAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorLSAgLS14LWluY2x1ZGVzPURJUiAgICAgICAgWCBpbmNsdWRlIGZpbGVzIGFyZSBpbiBESVIKKy0gIC0teC1saWJyYXJpZXM9RElSICAgICAgIFggbGlicmFyeSBmaWxlcyBhcmUgaW4gRElSCistRU9GCistICAgIGlmIHRlc3QgLW4gIiRhY19oZWxwIjsgdGhlbgorLSAgICAgIGVjaG8gIi0tZW5hYmxlIGFuZCAtLXdpdGggb3B0aW9ucyByZWNvZ25pemVkOiRhY19oZWxwIgorLSAgICBmaQorLSAgICBleGl0IDAgOzsKKysgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisrICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisrICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCisrICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKysgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKysgICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7CisgCisgICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKy0gICAgYWNfcHJldj1ob3N0IDs7CisrICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKy0gICAgaG9zdD0iJGFjX29wdGFyZyIgOzsKKysgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7CisrCisrICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKysgICAgYWNfcHJldj1odG1sZGlyIDs7CisrICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKysgIHwgLS1odD0qKQorKyAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKy0gICAgaW5jbHVkZWRpcj0iJGFjX29wdGFyZyIgOzsKKysgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCistICAgIGluZm9kaXI9IiRhY19vcHRhcmciIDs7CisrICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworIAorICAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKy0gICAgbGliZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworIAorICAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorLSAgICBsaWJleGVjZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKysKKysgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKysgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKysgIC1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpPSogfCAtLWxvY2FsZWQ9KiB8IC0tbG9jYWxlPSopCisrICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCistICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCistICB8IC0tbG9jYWxzIHwgLS1sb2NhbCB8IC0tbG9jYSB8IC0tbG9jIHwgLS1sbykKKysgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCisgICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCistICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKy0gIHwgLS1sb2NhbHM9KiB8IC0tbG9jYWw9KiB8IC0tbG9jYT0qIHwgLS1sb2M9KiB8IC0tbG89KikKKy0gICAgbG9jYWxzdGF0ZWRpcj0iJGFjX29wdGFyZyIgOzsKKysgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCistICAgIG1hbmRpcj0iJGFjX29wdGFyZyIgOzsKKysgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgIHdpdGhfZnA9bm8gOzsKKyAKKyAgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCistICB8IC0tbm8tY3IgfCAtLW5vLWMpCisrICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICAgbm9fY3JlYXRlPXllcyA7OworIAorICAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCitAQCAtMjg3LDI2ICsxMDQ0LDI2IEBACisgICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKyAgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCistICAgIG9sZGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CisrICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworIAorICAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKy0gICAgcHJlZml4PSIkYWNfb3B0YXJnIiA7OworKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworIAorICAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKyAgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKyAgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKy0gICAgcHJvZ3JhbV9wcmVmaXg9IiRhY19vcHRhcmciIDs7CisrICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKKyAKKyAgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKyAgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCistICAgIHByb2dyYW1fc3VmZml4PSIkYWNfb3B0YXJnIiA7OworKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisgCisgICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCitAQCAtMzIzLDcgKzEwODAsMTcgQEAKKyAgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCistICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9IiRhY19vcHRhcmciIDs7CisrICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworKworKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKysgICAgYWNfcHJldj1wZGZkaXIgOzsKKysgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisrICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisrCisrICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorKyAgICBhY19wcmV2PXBzZGlyIDs7CisrICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKysgICAgcHNkaXI9JGFjX29wdGFyZyA7OworIAorICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorQEAgLTMzMyw3ICsxMTAwLDcgQEAKKyAgICAgYWNfcHJldj1zYmluZGlyIDs7CisgICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICAgfCAtLXNiaT0qIHwgLS1zYj0qKQorLSAgICBzYmluZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCitAQCAtMzQ0LDU4ICsxMTExLDY5IEBACisgICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgICB8IC0tc2hhPSogfCAtLXNoPSopCistICAgIHNoYXJlZHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7OworKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisgCisgICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgICBhY19wcmV2PXNpdGUgOzsKKyAgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCistICAgIHNpdGU9IiRhY19vcHRhcmciIDs7CisrICAgIHNpdGU9JGFjX29wdGFyZyA7OworIAorICAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCistICAgIHNyY2Rpcj0iJGFjX29wdGFyZyIgOzsKKysgICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKKyAKKyAgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCistICAgIHN5c2NvbmZkaXI9IiRhY19vcHRhcmciIDs7CisrICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworIAorICAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKy0gICAgYWNfcHJldj10YXJnZXQgOzsKKysgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKy0gICAgdGFyZ2V0PSIkYWNfb3B0YXJnIiA7OworKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworIAorICAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICAgdmVyYm9zZT15ZXMgOzsKKyAKKy0gIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzKQorLSAgICBlY2hvICJjb25maWd1cmUgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMyIKKy0gICAgZXhpdCAwIDs7CisrICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorKyAgICBhY19pbml0X3ZlcnNpb249OiA7OworIAorICAgLXdpdGgtKiB8IC0td2l0aC0qKQorLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aC0vLycgLWUgJ3MvPS4qLy8nYAorKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCistICAgIGlmIHRlc3QgLW4gImBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvWy1fYS16QS1aMC05XS8vZydgIjsgdGhlbgorLSAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX3BhY2thZ2U6IGludmFsaWQgcGFja2FnZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKy0gICAgZmkKKy0gICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZXwgc2VkICdzLy0vXy9nJ2AKKy0gICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKy0gICAgICAqPSopIDs7CistICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisrICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorKyAgICAgICoiCisrIndpdGhfJGFjX3VzZXJvcHQiCisrIiopIDs7CisrICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisrCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgICBlc2FjCistICAgIGV2YWwgIndpdGhfJHthY19wYWNrYWdlfT0nJGFjX29wdGFyZyciIDs7CisrICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworIAorICAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qd2l0aG91dC0vLydgCisrICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKy0gICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy9bLWEtekEtWjAtOV9dLy9nJ2AiOyB0aGVuCistICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorLSAgICBmaQorLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAorLSAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09bm8iIDs7CisrICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisrICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKysgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisrICAgICAgKiIKKysid2l0aF8kYWNfdXNlcm9wdCIKKysiKikgOzsKKysgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKysJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisrICAgIGVzYWMKKysgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CisgCisgICAtLXgpCisgICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KK0BAIC00MDYsMTY3ICsxMTg0LDczNSBAQAorICAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCistICAgIHhfaW5jbHVkZXM9IiRhY19vcHRhcmciIDs7CisrICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworIAorICAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKy0gICAgeF9saWJyYXJpZXM9IiRhY19vcHRhcmciIDs7CisrICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKyAKKy0gIC0qKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6ICRhY19vcHRpb246IGludmFsaWQgb3B0aW9uOyB1c2UgLS1oZWxwIHRvIHNob3cgdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorKyAgLSopIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICRhY19vcHRpb24KKytUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgIDs7CisgCisrICAqPSopCisrICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKysgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorKyAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisrICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisrCisgICAqKQorLSAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfb3B0aW9ufCBzZWQgJ3MvWy1hLXowLTkuXS8vZydgIjsgdGhlbgorLSAgICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogJGFjX29wdGlvbjogaW52YWxpZCBob3N0IHR5cGUiIDE+JjIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAieCRub25vcHQiICE9IHhOT05FOyB0aGVuCistICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gb25seSBjb25maWd1cmUgZm9yIG9uZSBob3N0IGFuZCBvbmUgdGFyZ2V0IGF0IGEgdGltZSIgMT4mMjsgZXhpdCAxOyB9CistICAgIGZpCistICAgIG5vbm9wdD0iJGFjX29wdGlvbiIKKysgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKysgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisrICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorKyAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgIDs7CisgCisgICBlc2FjCisgZG9uZQorIAorIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorLSAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvIC0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYCIgMT4mMjsgZXhpdCAxOyB9CisrICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisrICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIGZpCisgCistdHJhcCAncm0gLWZyIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29yZSBjb3JlLiogKi5jb3JlICRhY19jbGVhbl9maWxlczsgZXhpdCAxJyAxIDIgMTUKKy0KKy0jIEZpbGUgZGVzY3JpcHRvciB1c2FnZToKKy0jIDAgc3RhbmRhcmQgaW5wdXQKKy0jIDEgZmlsZSBjcmVhdGlvbgorLSMgMiBlcnJvcnMgYW5kIHdhcm5pbmdzCistIyAzIHNvbWUgc3lzdGVtcyBtYXkgb3BlbiBpdCB0byAvZGV2L3R0eQorLSMgNCB1c2VkIG9uIHRoZSBLdWJvdGEgVGl0YW4KKy0jIDYgY2hlY2tpbmcgZm9yLi4uIG1lc3NhZ2VzIGFuZCByZXN1bHRzCistIyA1IGNvbXBpbGVyIG1lc3NhZ2VzIHNhdmVkIGluIGNvbmZpZy5sb2cKKy1pZiB0ZXN0ICIkc2lsZW50IiA9IHllczsgdGhlbgorLSAgZXhlYyA2Pi9kZXYvbnVsbAorLWVsc2UKKy0gIGV4ZWMgNj4mMQorK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKysgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKysgICAgbm8pIDs7CisrICAgIGZhdGFsKSB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OworKyAgZXNhYworIGZpCistZXhlYyA1Pi4vY29uZmlnLmxvZworLQorLWVjaG8gIlwKKy1UaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorLXJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCistIiAxPiY1CisgCistIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCistIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCistYWNfY29uZmlndXJlX2FyZ3M9CistZm9yIGFjX2FyZworKyMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgorK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisrCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisrCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorIGRvCistICBjYXNlICIkYWNfYXJnIiBpbgorLSAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKy0gIHwgLS1uby1jciB8IC0tbm8tYykgOzsKKy0gIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorLSAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpIDs7CistICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP10qKQorLSAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciIDs7CistICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICRhY19hcmciIDs7CisrICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKysgICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCisrICBjYXNlICRhY192YWwgaW4KKysgICAgKi8gKQorKyAgICAgIGFjX3ZhbD1gZXhwciAiWCRhY192YWwiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAorKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgICBlc2FjCisrICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisrICBjYXNlICRhY192YWwgaW4KKysgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKysgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworKyAgZXNhYworKyAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZG9uZQorIAorLSMgTkxTIG51aXNhbmNlcy4KKy0jIE9ubHkgc2V0IHRoZXNlIHRvIEMgaWYgYWxyZWFkeSBzZXQuICBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5CistIyBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCistIyBGaXhpbmcgTENfTUVTU0FHRVMgcHJldmVudHMgU29sYXJpcyBzaCBmcm9tIHRyYW5zbGF0aW5nIHZhciB2YWx1ZXMgaW4gYHNldCchCistIyBOb24tQyBMQ19DVFlQRSB2YWx1ZXMgYnJlYWsgdGhlIGN0eXBlIGNoZWNrLgorLWlmIHRlc3QgIiR7TEFORytzZXR9IiAgID0gc2V0OyB0aGVuIExBTkc9QzsgICBleHBvcnQgTEFORzsgICBmaQorLWlmIHRlc3QgIiR7TENfQUxMK3NldH0iID0gc2V0OyB0aGVuIExDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBmaQorLWlmIHRlc3QgIiR7TENfTUVTU0FHRVMrc2V0fSIgPSBzZXQ7IHRoZW4gTENfTUVTU0FHRVM9QzsgZXhwb3J0IExDX01FU1NBR0VTOyBmaQorLWlmIHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgICAgPSBzZXQ7IHRoZW4gTENfQ1RZUEU9QzsgICAgZXhwb3J0IExDX0NUWVBFOyAgICBmaQorKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKysjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KKysjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCisrYnVpbGQ9JGJ1aWxkX2FsaWFzCisraG9zdD0kaG9zdF9hbGlhcworK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisrCisrIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisrICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisrICBmaQorK2ZpCisrCisrYWNfdG9vbF9wcmVmaXg9CisrdGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorKworK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKysKKysKKythY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKKythY19sc19kaT1gbHMgLWRpIC5gICYmCisrYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisrICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrdGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisrICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIAorLSMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCistcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCistIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCistZWNobyA+IGNvbmZkZWZzLmgKKy0KKy0jIEEgZmlsZW5hbWUgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSwgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0CistIyBjb25maWd1cmUgaXMgaW4sIHdoaWNoIHdlIGNhbiBsb29rIGZvciB0byBmaW5kIG91dCBpZiBzcmNkaXIgaXMgY29ycmVjdC4KKy1hY191bmlxdWVfZmlsZT1jb21tb24vdW5pY29kZS91dHlwZXMuaAorIAorICMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KKyBpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKy0gICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorLSAgYWNfcHJvZz0kMAorLSAgYWNfY29uZmRpcj1gZWNobyAkYWNfcHJvZ3xzZWQgJ3MlL1teL11bXi9dKiQlJSdgCistICB0ZXN0ICJ4JGFjX2NvbmZkaXIiID0gIngkYWNfcHJvZyIgJiYgYWNfY29uZmRpcj0uCisrICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisrICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisrCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorKyRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKyAgIHNyY2Rpcj0kYWNfY29uZmRpcgorLSAgaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisrICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICAgICBzcmNkaXI9Li4KKyAgIGZpCisgZWxzZQorICAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworIGZpCistaWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCistICBpZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4KKy0gICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgc291cmNlcyBpbiAkYWNfY29uZmRpciBvciAuLiIgMT4mMjsgZXhpdCAxOyB9CistICBlbHNlCistICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJHNyY2RpciIgMT4mMjsgZXhpdCAxOyB9CistICBmaQorLWZpCistc3JjZGlyPWBlY2hvICIke3NyY2Rpcn0iIHwgc2VkICdzJVwoW14vXVwpLyokJVwxJSdgCistCistIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KKy1pZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCistICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKy0gICAgQ09ORklHX1NJVEU9IiRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCistICBlbHNlCistICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKy0gIGZpCistZmkKKy1mb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KKy0gIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCistICAgIGVjaG8gImxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIKKy0gICAgLiAiJGFjX3NpdGVfZmlsZSIKKy0gIGZpCisraWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKysgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytmaQorK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKKythY19hYnNfY29uZmRpcj1gKAorKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKwlwd2QpYAorKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCisraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorKyAgc3JjZGlyPS4KKytmaQorKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisrIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisrIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCisrY2FzZSAkc3JjZGlyIGluCisrKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7CisrZXNhYworK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisrICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKysgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorIGRvbmUKKyAKKy1pZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKy0gIGVjaG8gImxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCistICAuICRjYWNoZV9maWxlCistZWxzZQorLSAgZWNobyAiY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCistICA+ICRjYWNoZV9maWxlCisrIworKyMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKysjCisraWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKysgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorKyAgY2F0IDw8X0FDRU9GCisrXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgdGhpcyBwYWNrYWdlIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKysKKytVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKysKKytUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCisrVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKysKKytEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKysKKytDb25maWd1cmF0aW9uOgorKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKysgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKysgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcworKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisrICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKysgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKysgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisrICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisrCisrSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisrICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorKyAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisrCisrQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCisrXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKKythbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorK2ZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCisrCisrRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisrCisrRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKysgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisrICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisrICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKysgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisrICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisrICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKysgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKysgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisrICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisrICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKysgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisrICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9QQUNLQUdFXQorKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisrICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKysgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKytfQUNFT0YKKysKKysgIGNhdCA8PFxfQUNFT0YKKysKKytTeXN0ZW0gdHlwZXM6CisrICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorKyAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCisrX0FDRU9GCisgZmkKKyAKKy1hY19leHQ9YworLSMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKy1hY19jcHA9JyRDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKy1hY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCistCistYWNfZXhlZXh0PQorLWFjX29iamV4dD1vCistaWYgKGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDMpIHwgZ3JlcCBjID4vZGV2L251bGw7IHRoZW4KKy0gICMgU3RhcmRlbnQgVmlzdHJhIFNWUjQgZ3JlcCBsYWNrcyAtZSwgc2F5cyBnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1LgorLSAgaWYgKGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsMykgfCBzZWQgcy8tbi94bi8gfCBncmVwIHhuID4vZGV2L251bGw7IHRoZW4KKy0gICAgYWNfbj0gYWNfYz0nCistJyBhY190PScJJworLSAgZWxzZQorLSAgICBhY19uPS1uIGFjX2M9IGFjX3Q9CisraWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKysKKysgIGNhdCA8PFxfQUNFT0YKKysKKytPcHRpb25hbCBGZWF0dXJlczoKKysgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKysgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKysgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKysgIC0tZW5hYmxlLXN0cmljdCAgICAgICAgIGNvbXBpbGUgd2l0aCBzdHJpY3QgY29tcGlsZXIgb3B0aW9ucyBkZWZhdWx0PW5vCisrICAtLWVuYWJsZS02NGJpdC1saWJzICAgICBidWlsZCA2NC1iaXQgbGlicmFyaWVzIGRlZmF1bHQ9eWVzCisrICAtLWVuYWJsZS1zaGFyZWQgICAgICAgICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIGRlZmF1bHQ9eWVzCisrICAtLWVuYWJsZS1zdGF0aWMgICAgICAgICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIGRlZmF1bHQ9bm8KKysgIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyBkZWZhdWx0PW5vCisrICAtLWVuYWJsZS1yZWxlYXNlICAgICAgICBidWlsZCByZWxlYXNlIGxpYnJhcmllcyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtcmVuYW1pbmcgICAgICAgYWRkIGEgdmVyc2lvbiBzdWZmaXggdG8gc3ltYm9scyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtdHJhY2luZyAgICAgICAgZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcgZGVmYXVsdD15ZXMKKysgIC0tZW5hYmxlLXJwYXRoICAgICAgICAgIHVzZSBycGF0aCB3aGVuIGxpbmtpbmcgZGVmYXVsdCBpcyBvbmx5IGlmIG5lY2Vzc2FyeQorKyAgLS1lbmFibGUtdGhyZWFkcyAgICAgICAgYnVpbGQgSUNVIHdpdGggdGhyZWFkIHNhZmV0eSBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtZXh0cmFzICAgICAgICAgYnVpbGQgSUNVIGV4dHJhcyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtaWN1aW8gICAgICAgICAgYnVpbGQgSUNVJ3MgaWN1aW8gbGlicmFyeSBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtbGF5b3V0ICAgICAgICAgYnVpbGQgSUNVJ3MgbGF5b3V0IGxpYnJhcnkgZGVmYXVsdD15ZXMKKysKKysgIC0tZW5hYmxlLXRlc3RzICAgICAgICAgIGJ1aWxkIElDVSB0ZXN0cyBkZWZhdWx0PXllcworKyAgLS1lbmFibGUtc2FtcGxlcyAgICAgICAgYnVpbGQgSUNVIHNhbXBsZXMgZGVmYXVsdD15ZXMKKytBZGRpdGlvbmFsbHksIHRoZSB2YXJpYWJsZSBGT1JDRV9MSUJTIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgY29uZmlndXJlLiBJZiBzZXQsIGl0IHdpbGwgUkVQTEFDRSBhbnkgYXV0b21hdGljIGxpc3Qgb2YgbGlicmFyaWVzLgorKworK09wdGlvbmFsIFBhY2thZ2VzOgorKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisrICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisrICAtLXdpdGgtaW9zdHJlYW09dmVyc2lvbiBzcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIGlvc3RyZWFtIHRvIHVzZSAobm9uZSwgb2xkLCBzdGQsIGF1dG8pIGRlZmF1bHQ9YXV0bworKyAgLS13aXRoLWRhdGEtcGFja2FnaW5nPXR5cGUgc3BlY2lmeSBob3cgdG8gcGFja2FnZSBJQ1UgZGF0YSAoZmlsZXMsIGFyY2hpdmUsIGxpYnJhcnksIGF1dG8pIGRlZmF1bHQ9YXV0bworKyAgLS13aXRoLWxpYnJhcnktc3VmZml4PXN1ZmZpeCAgICB0YWcgYSBzdWZmaXggdG8gdGhlIGxpYnJhcnkgbmFtZXMgZGVmYXVsdD0KKysKKytTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKysgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorKyAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncworKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisrICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CisrICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CisrICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisrICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKysgIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCisrICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKysgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisrICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCisrCisrVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKKytpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisrCisrX0FDRU9GCisrYWNfc3RhdHVzPSQ/CisrZmkKKysKKytpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisrICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKysgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKysgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKysgICAgICBjb250aW51ZQorKyAgICBhY19idWlsZGRpcj0uCisrCisrY2FzZSAiJGFjX2RpciIgaW4KKysuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysqKQorKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorKworK2Nhc2UgJHNyY2RpciBpbgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgICBhY19zcmNkaXI9LgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworK2VzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisrCisrICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKysgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisrICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKysgICAgICBlY2hvICYmCisrICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKysgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKysgICAgICBlY2hvICYmCisrICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorKyAgICBlbHNlCisrICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKysgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisrICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKysgIGRvbmUKKytmaQorKworK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKysgIGNhdCA8PFxfQUNFT0YKKytjb25maWd1cmUKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjMKKysKKytDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisrMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKytfQUNFT0YKKysgIGV4aXQKKytmaQorK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCisrcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKysKKytJdCB3YXMgY3JlYXRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworKworKyAgJCAkMCAkQAorKworK19BQ0VPRgorK2V4ZWMgNT4+Y29uZmlnLmxvZworK3sKKytjYXQgPDxfQVNVTkFNRQorKyMjIC0tLS0tLS0tLSAjIworKyMjIFBsYXRmb3JtLiAjIworKyMjIC0tLS0tLS0tLSAjIworKworK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisrdW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrdW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrCisrL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisrCisrL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisrL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKysvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisrL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorKworK19BU1VOQU1FCisrCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrfSA+JjUKKysKKytjYXQgPiY1IDw8X0FDRU9GCisrCisrCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyBDb3JlIHRlc3RzLiAjIworKyMjIC0tLS0tLS0tLS0tICMjCisrCisrX0FDRU9GCisrCisrCisrIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKysjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKysjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKysjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisrIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCisrYWNfY29uZmlndXJlX2FyZ3M9CisrYWNfY29uZmlndXJlX2FyZ3MwPQorK2FjX2NvbmZpZ3VyZV9hcmdzMT0KKythY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorK2ZvciBhY19wYXNzIGluIDEgMgorK2RvCisrICBmb3IgYWNfYXJnCisrICBkbworKyAgICBjYXNlICRhY19hcmcgaW4KKysgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKysgICAgICBjb250aW51ZSA7OworKyAgICAqXCcqKQorKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgIGVzYWMKKysgICAgY2FzZSAkYWNfcGFzcyBpbgorKyAgICAxKSBhY19jb25maWd1cmVfYXJnczA9IiRhY19jb25maWd1cmVfYXJnczAgJyRhY19hcmcnIiA7OworKyAgICAyKQorKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisrICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCisrCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKysgICAgICBlbHNlCisrCWNhc2UgJGFjX2FyZyBpbgorKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKysJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisrCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisrCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKysJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKysJICAgIGVzYWMKKysJICAgIDs7CisrCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisrCWVzYWMKKysgICAgICBmaQorKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgJyRhY19hcmcnIgorKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKytkb25lCisrJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMCB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMCtzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczA9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MwOyB9CisrJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMSB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMStzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczE9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MxOyB9CisrCisrIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisrIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisrIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisrIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgorK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKysgIHsKKysgICAgZWNobworKworKyAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgIGVjaG8KKysgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKysoCisrICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisrICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICBjYXNlICRhY192YWwgaW4gIygKKysgICAgKiR7YXNfbmx9KikKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisrICAgICAgZXNhYworKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKysgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgZXNhYyA7OworKyAgICBlc2FjCisrICBkb25lCisrICAoc2V0KSAyPiYxIHwKKysgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisrICAgICAgc2VkIC1uIFwKKysJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorKyAgICAgIDs7ICMoCisrICAgICopCisrICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKysgICAgICA7OworKyAgICBlc2FjIHwKKysgICAgc29ydAorKykKKysgICAgZWNobworKworKyAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgIGVjaG8KKysgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworKyAgICBkbworKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKysgICAgICBlc2FjCisrICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorKyAgICBkb25lIHwgc29ydAorKyAgICBlY2hvCisrCisrICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKysgICAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgICAgZWNobworKyAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisrICAgICAgZG8KKysJZXZhbCBhY192YWw9XCQkYWNfdmFyCisrCWNhc2UgJGFjX3ZhbCBpbgorKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisrCWVzYWMKKysJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorKyAgICAgIGRvbmUgfCBzb3J0CisrICAgICAgZWNobworKyAgICBmaQorKworKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKysgICAgICBjYXQgPDxcX0FTQk9YCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyBjb25mZGVmcy5oLiAjIworKyMjIC0tLS0tLS0tLS0tICMjCisrX0FTQk9YCisrICAgICAgZWNobworKyAgICAgIGNhdCBjb25mZGVmcy5oCisrICAgICAgZWNobworKyAgICBmaQorKyAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisrICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKysgIH0gPiY1CisrICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKysgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorKyAgICBleGl0ICRleGl0X3N0YXR1cworKycgMAorK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCisrZG9uZQorK2FjX3NpZ25hbD0wCisrCisrIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KKytybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorKworKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKKytfQUNFT0YKKysKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCisrX0FDRU9GCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorK19BQ0VPRgorKworKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCisrX0FDRU9GCisrCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKKytfQUNFT0YKKysKKysKKysjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KKysjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorK2FjX3NpdGVfZmlsZTE9Tk9ORQorK2FjX3NpdGVfZmlsZTI9Tk9ORQorK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKysgIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCisrZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKysgIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorK2Vsc2UKKysgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisrICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKKytmaQorK2ZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCisrZG8KKysgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisrICBpZiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisrICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorKyAgICAuICIkYWNfc2l0ZV9maWxlIgorKyAgZmkKKytkb25lCisrCisraWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisrICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAorKyAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCisrICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKysgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisrICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworKyAgICBlc2FjCisgICBmaQorIGVsc2UKKy0gIGFjX249IGFjX2M9J1xjJyBhY190PQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKysgID4kY2FjaGVfZmlsZQorK2ZpCisrCisrIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorKyMgdmFsdWUuCisrYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCisrZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKysgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisrICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorKyAgICBzZXQsKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKysgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworKyAgICAsc2V0KQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisrICAgICwpOzsKKysgICAgKikKKysgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisrCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKysJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisrCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorKwkgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisrCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKysJZWxzZQorKwkgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisrCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorKwlmaQorKwl7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKysJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisrICAgICAgZmk7OworKyAgZXNhYworKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisrICAgIGNhc2UgJGFjX25ld192YWwgaW4KKysgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKysgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKysgICAgZXNhYworKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKysgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KKysgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKysgICAgZXNhYworKyAgZmkKKytkb25lCisraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CisrICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKyAKKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworKworKworK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY29tbW9uL2ljdWNmZy5oIgorKworIFBBQ0tBR0U9ImljdSIKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjU3MDogY2hlY2tpbmcgZm9yIElDVSB2ZXJzaW9uIG51bWJlcnMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElDVSB2ZXJzaW9uIG51bWJlcnMuLi4gIiA+JjY7IH0KKyAKKyBnZXRpY3V2ZXJzaW9uKCkgeworICAgICBzZWQgLW4gJ3MvXlsgCV0qI1sgCV0qZGVmaW5lWyAJXSpVX0lDVV9WRVJTSU9OWyAJXSoiXChbXiJdKlwpIi4qL1wxL3AnICIkQCIKK0BAIC01NzUsNyArMTkyMSw5IEBACisgaWYgdGVzdCB4IiRWRVJTSU9OIiA9IHg7IHRoZW4KKyAgICAgVkVSU0lPTj1gZ2V0aWN1dmVyc2lvbiAkc3JjZGlyL2NvbW1vbi91bmljb2RlLyouaGAKKyAgICAgaWYgdGVzdCB4IiRWRVJTSU9OIiA9IHg7IHRoZW4KKy0gICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBJQ1UgdmVyc2lvbiBudW1iZXIgZnJvbSBoZWFkZXIgZmlsZXMiIDE+JjI7IGV4aXQgMTsgfQorKyAgICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgSUNVIHZlcnNpb24gbnVtYmVyIGZyb20gaGVhZGVyIGZpbGVzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBJQ1UgdmVyc2lvbiBudW1iZXIgZnJvbSBoZWFkZXIgZmlsZXMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgIGZpCisgZmkKKyBMSUJfVkVSU0lPTj1gZWNobyAkVkVSU0lPTiB8IHNlZCAtZSAncy9cLi8vJyAtZSAncy9eXChbXi5dKlwpJC9cMS4wLydgCitAQCAtNTgzLDcgKzE5MzEsOCBAQAorIAorIAorIAorLWVjaG8gIiRhY190IiJyZWxlYXNlICRWRVJTSU9OLCBsaWJyYXJ5ICRMSUJfVkVSU0lPTiIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHJlbGVhc2UgJFZFUlNJT04sIGxpYnJhcnkgJExJQl9WRVJTSU9OIiA+JjUKKyskYXNfZWNobyAicmVsZWFzZSAkVkVSU0lPTiwgbGlicmFyeSAkTElCX1ZFUlNJT04iID4mNjsgfQorIAorIFVOSUNPREVfVkVSU0lPTj0iNC4wLjEiCisgCitAQCAtNTkxLDIxNCArMTk0MCw4MDQgQEAKKyAKKyAjQUNfU1VCU1QoQ0lOVExUU1RfQ1BQRkxBR1MpCisgCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKysgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisrICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0NDPSRhY19jdl9wcm9nX0NDCisraWYgdGVzdCAtbiAiJENDIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKKyskYXNfZWNobyAiJENDIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisrICBhY19jdF9DQz0kQ0MKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6NTk4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorKyAgICBDQz0iIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBDQz0kYWNfY3RfQ0MKKysgIGZpCisrZWxzZQorKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorK2ZpCisrCisraWYgdGVzdCAteiAiJENDIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGFjX2N2X3Byb2dfQ0M9ImdjYyIKKy0gICAgICBicmVhaworLSAgICBmaQorLSAgZG9uZQorLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworIGZpCisgZmkKKy1DQz0iJGFjX2N2X3Byb2dfQ0MiCisrQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorKyRhc19lY2hvICIkQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIGZpCisrZmkKKyBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTo2Mjg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorICAgYWNfcHJvZ19yZWplY3RlZD1ubworLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGlmIHRlc3QgIiRhY19kaXIvJGFjX3dvcmQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorLSAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKy0JY29udGludWUKKy0gICAgICBmaQorLSAgICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorLSAgICAgIGJyZWFrCistICAgIGZpCistICBkb25lCistICBJRlM9IiRhY19zYXZlX2lmcyIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworKyAgICAgICBjb250aW51ZQorKyAgICAgZmkKKysgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisrICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisgaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgICBzaGlmdAorLSAgaWYgdGVzdCAkIyAtZ3QgMDsgdGhlbgorKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgICBzaGlmdAorLSAgICBzZXQgZHVtbXkgIiRhY19kaXIvJGFjX3dvcmQiICIkQCIKKy0gICAgc2hpZnQKKy0gICAgYWNfY3ZfcHJvZ19DQz0iJEAiCisrICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICAgZmkKKyBmaQorIGZpCisgZmkKKy1DQz0iJGFjX2N2X3Byb2dfQ0MiCisrQ0M9JGFjX2N2X3Byb2dfQ0MKKyBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorKyRhc19lY2hvICIkQ0MiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy0gIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKy0gICAgY2FzZSAiYHVuYW1lIC1zYCIgaW4KKy0gICAgKndpbjMyKiB8ICpXSU4zMiopCistICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGNsOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6Njc5OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCisrZmkKKytpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisrICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorIGVsc2UKKy0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCistICBhY19kdW1teT0iJFBBVEgiCistICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKy0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKy0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCistICAgICAgYWNfY3ZfcHJvZ19DQz0iY2wiCistICAgICAgYnJlYWsKKy0gICAgZmkKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfaWZzIgorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisrICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisgZmkKKyBmaQorLUNDPSIkYWNfY3ZfcHJvZ19DQyIKKytDQz0kYWNfY3ZfcHJvZ19DQworIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CisrJGFzX2VjaG8gIiRDQyIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorLSA7OworLSAgICBlc2FjCisrCisrCisrICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKysgIGRvbmUKKytmaQorK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKysgIGFjX2N0X0NDPSRDQworKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisgICBmaQorLSAgdGVzdCAteiAiJENDIiAmJiB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgY2MgZm91bmQgaW4gXCRQQVRIIiAxPiYyOyBleGl0IDE7IH0KKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKKytpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6NzExOiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgd29ya3MiID4mNQorIAorLWFjX2V4dD1jCistIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKy0KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8IEVPRgorLQorLSNsaW5lIDcyMiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLQorLW1haW4oKXtyZXR1cm4oMCk7fQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6NzI3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIGFjX2N2X3Byb2dfY2Nfd29ya3M9eWVzCistICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJvZ3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIuCistICBpZiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19jY19jcm9zcz1ubworKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworK2RvbmUKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorKyAgICBDQz0iIgorICAgZWxzZQorLSAgICBhY19jdl9wcm9nX2NjX2Nyb3NzPXllcworKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBDQz0kYWNfY3RfQ0MKKyAgIGZpCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgYWNfY3ZfcHJvZ19jY193b3Jrcz1ubworIGZpCistcm0gLWZyIGNvbmZ0ZXN0KgorLWFjX2V4dD1jCistIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2Nfd29ya3MiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl9wcm9nX2NjX3dvcmtzID0gbm87IHRoZW4KKy0gIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gcHJvYmxlbTogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CisgZmkKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyICgkQ0MgJENGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjc1MzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiID4mNQorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19jcm9zcyIgMT4mNgorLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6NzU4OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfZ2NjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorLSNpZmRlZiBfX0dOVUNfXworLSAgeWVzOworLSNlbmRpZgorLUVPRgorLWlmIHsgYWNfdHJ5PScke0NDLWNjfSAtRSBjb25mdGVzdC5jJzsgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3Njc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9OyB9IHwgZWdyZXAgeWVzID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgYWNfY3ZfcHJvZ19nY2M9eWVzCisrCisrdGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyt7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorKworKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyskYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorK3NldCBYICRhY19jb21waWxlCisrYWNfY29tcGlsZXI9JDIKKyt7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorKworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKythY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKysjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisrIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorKyMgb2YgZXhlZXh0LgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQorK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisrCisrIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisrCisrYWNfcm1maWxlcz0KKytmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKKytkbworKyAgY2FzZSAkYWNfZmlsZSBpbgorKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisrICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworKyAgZXNhYworK2RvbmUKKytybSAtZiAkYWNfcm1maWxlcworKworK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisrIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKysjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisrIyBBdXRvY29uZi4KKytmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKKytkbworKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisrICBjYXNlICRhY19maWxlIGluCisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKKysJOzsKKysgICAgW2FiXS5vdXQgKQorKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorKwkjIGNlcnRhaW5seSByaWdodC4KKysJYnJlYWs7OworKyAgICAqLiogKQorKyAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisrCXRoZW4gOjsgZWxzZQorKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKysJZmkKKysJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisrCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKysJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisrCSMgYWN0dWFsbHkgd29ya2luZy4KKysJYnJlYWs7OworKyAgICAqICkKKysJYnJlYWs7OworKyAgZXNhYworK2RvbmUKKyt0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKysKKyBlbHNlCistICBhY19jdl9wcm9nX2djYz1ubworKyAgYWNfZmlsZT0nJworIGZpCisrCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9CisraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisreyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisreyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisrICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH07IH0KKytmaQorKworK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisrCisrIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKysjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KKysjIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCisrIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKysgIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisrICBlbHNlCisrICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKysJY3Jvc3NfY29tcGlsaW5nPXllcworKyAgICBlbHNlCisrCXsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCisrSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCisrSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisrICAgIGZpCisrICBmaQorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKKyskYXNfZWNobyAieWVzIiA+JjY7IH0KKysKKytybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAorK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisrIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKysjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CisrJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKysgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorKyMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAorKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisrIyBgcm0nLgorK2ZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisrICBjYXNlICRhY19maWxlIGluCisrICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKysgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisrCSAgYnJlYWs7OworKyAgICAqICkgYnJlYWs7OworKyAgZXNhYworK2RvbmUKKytlbHNlCisrICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyt7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorK2ZpCisrCisrcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQorKworK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKytFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorK2FjX2V4ZWV4dD0kRVhFRVhUCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2djYyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKysgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKysgIGNhc2UgJGFjX2ZpbGUgaW4KKysgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKysgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisrICAgICAgIGJyZWFrOzsKKysgIGVzYWMKKytkb25lCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQorK09CSkVYVD0kYWNfY3Zfb2JqZXh0CisrYWNfb2JqZXh0PSRPQkpFWFQKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2MgPSB5ZXM7IHRoZW4KKytpbnQKKyttYWluICgpCisreworKyNpZm5kZWYgX19HTlVDX18KKysgICAgICAgY2hva2UgbWUKKysjZW5kaWYKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2NvbXBpbGVyX2dudT15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2NvbXBpbGVyX2dudT1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgIEdDQz15ZXMKKyBlbHNlCisgICBHQ0M9CisgZmkKKythY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CisrYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisrICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKysgICBhY19jdl9wcm9nX2NjX2c9bm8KKysgICBDRkxBR1M9Ii1nIgorKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2NfZz15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistYWNfdGVzdF9DRkxBR1M9IiR7Q0ZMQUdTK3NldH0iCistYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistQ0ZMQUdTPQorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQy1jY30gYWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjc4NjogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19jY19nJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCUNGTEFHUz0iIgorKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIDoKKyBlbHNlCistICBlY2hvICd2b2lkIGYoKXt9JyA+IGNvbmZ0ZXN0LmMKKy1pZiB0ZXN0IC16ICJgJHtDQy1jY30gLWcgLWMgY29uZnRlc3QuYyAyPiYxYCI7IHRoZW4KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisrCSBDRkxBR1M9Ii1nIgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfcHJvZ19jY19nPXllcworIGVsc2UKKy0gIGFjX2N2X3Byb2dfY2NfZz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyAKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19nIiAxPiY2Cisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CisgaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorLSAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCisgZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIENGTEFHUz0iLWcgLU8yIgorQEAgLTgxMiwxMzYgKzI3NTEsNDgxIEBACisgICAgIENGTEFHUz0KKyAgIGZpCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19jdl9wcm9nX2NjX2M4OT1ubworK2FjX3NhdmVfQ0M9JENDCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KKytzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CisrRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKKytzdGF0aWMgY2hhciAqZSAocCwgaSkKKysgICAgIGNoYXIgKipwOworKyAgICAgaW50IGk7CisreworKyAgcmV0dXJuIHBbaV07CisrfQorK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKKyt7CisrICBjaGFyICpzOworKyAgdmFfbGlzdCB2OworKyAgdmFfc3RhcnQgKHYscCk7CisrICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworKyAgdmFfZW5kICh2KTsKKysgIHJldHVybiBzOworK30KKyAKKy1mb3IgYWNfcHJvZyBpbiAkQ0NDIGMrKyBnKysgZ2NjIENDIGN4eCBjYysrIGNsCisrLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKysgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisrICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisrICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKysgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKysgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCisraW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKysKKysvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKysgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisrI2RlZmluZSBGT08oeCkgJ3gnCisraW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisrCisraW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Cisrc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Cisrc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CisraW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CisraW50IGFyZ2M7CisrY2hhciAqKmFyZ3Y7CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorIGRvCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6ODIyOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NYWCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisrICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisrICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworK2RvbmUKKytybSAtZiBjb25mdGVzdC4kYWNfZXh0CisrQ0M9JGFjX3NhdmVfQ0MKKysKKytmaQorKyMgQUNfQ0FDSEVfVkFMCisrY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKysgIHgpCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworKyAgeG5vKQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CisrJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKysgICopCisrICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworK2VzYWMKKysKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworK2FjX2V4dD1jcHAKKythY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisrICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgorKyAgICBDWFg9JENDQworKyAgZWxzZQorKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorIGVsc2UKKy0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCistICBhY19kdW1teT0iJFBBVEgiCistICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKy0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKy0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCistICAgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY19wcm9nIgorLSAgICAgIGJyZWFrCistICAgIGZpCistICBkb25lCistICBJRlM9IiRhY19zYXZlX2lmcyIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyBmaQorIGZpCistQ1hYPSIkYWNfY3ZfcHJvZ19DWFgiCisrQ1hYPSRhY19jdl9wcm9nX0NYWAorIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJENYWCIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWCIgPiY1CisrJGFzX2VjaG8gIiRDWFgiID4mNjsgfQorIGVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKy10ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworKworKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworKyAgZG9uZQorK2ZpCisraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKysgIGFjX2N0X0NYWD0kQ1hYCisrICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ1hYK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKyBkb25lCistdGVzdCAtbiAiJENYWCIgfHwgQ1hYPSJnY2MiCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCisraWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorKyRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciAoJENYWCAkQ1hYRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6ODU0OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKCRDWFggJENYWEZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1CisrICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworK2RvbmUKKyAKKy1hY19leHQ9QworLSMgQ1hYRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKy1hY19saW5rPScke0NYWC1nKyt9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKy0KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8IEVPRgorLQorLSNsaW5lIDg2NSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLQorLWludCBtYWluKCl7cmV0dXJuKDApO30KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjg3MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBhY19jdl9wcm9nX2N4eF93b3Jrcz15ZXMKKy0gICMgSWYgd2UgY2FuJ3QgcnVuIGEgdHJpdmlhbCBwcm9ncmFtLCB3ZSBhcmUgcHJvYmFibHkgdXNpbmcgYSBjcm9zcyBjb21waWxlci4KKy0gIGlmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorLSAgICBhY19jdl9wcm9nX2N4eF9jcm9zcz1ubworKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorKyAgICBDWFg9ImcrKyIKKyAgIGVsc2UKKy0gICAgYWNfY3ZfcHJvZ19jeHhfY3Jvc3M9eWVzCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIENYWD0kYWNfY3RfQ1hYCisgICBmaQorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIGFjX2N2X3Byb2dfY3h4X3dvcmtzPW5vCisgZmkKKy1ybSAtZnIgY29uZnRlc3QqCistYWNfZXh0PWMKKy0jIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCistYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCistYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jeHhfd29ya3MiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF93b3JrcyA9IG5vOyB0aGVuCistICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IEMrKyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CisrICBmaQorIGZpCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyICgkQ1hYICRDWFhGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjg5NjogY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyICgkQ1hYICRDWFhGTEFHUyAkTERGTEFHUykgaXMgYSBjcm9zcy1jb21waWxlciIgPiY1CistZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF9jcm9zcyIgMT4mNgorLWNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKysjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCisrJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorK3NldCBYICRhY19jb21waWxlCisrYWNfY29tcGlsZXI9JDIKKyt7IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQysrIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6OTAxOiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQysrIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19neHgnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC5DIDw8RU9GCistI2lmZGVmIF9fR05VQ19fCistICB5ZXM7CisraW50CisrbWFpbiAoKQorK3sKKysjaWZuZGVmIF9fR05VQ19fCisrICAgICAgIGNob2tlIG1lCisgI2VuZGlmCistRU9GCistaWYgeyBhY190cnk9JyR7Q1hYLWcrK30gLUUgY29uZnRlc3QuQyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6OTEwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIGFjX2N2X3Byb2dfZ3h4PXllcworLWVsc2UKKy0gIGFjX2N2X3Byb2dfZ3h4PW5vCistZmkKKy1maQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19neHgiIDE+JjYKKy0KKy1pZiB0ZXN0ICRhY19jdl9wcm9nX2d4eCA9IHllczsgdGhlbgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBhY19jb21waWxlcl9nbnU9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jb21waWxlcl9nbnU9bm8KKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CisraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgICBHWFg9eWVzCisgZWxzZQorICAgR1hYPQorIGZpCisrYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKythY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2crc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWc9JGFjX2N4eF93ZXJyb3JfZmxhZworKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKKysgICBhY19jdl9wcm9nX2N4eF9nPW5vCisrICAgQ1hYRkxBR1M9Ii1nIgorKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCUNYWEZMQUdTPSIiCisrICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorLWFjX3Rlc3RfQ1hYRkxBR1M9IiR7Q1hYRkxBR1Mrc2V0fSIKKy1hY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCistQ1hYRkxBR1M9CistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAke0NYWC1nKyt9IGFjY2VwdHMgLWciIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTo5Mjk6IGNoZWNraW5nIHdoZXRoZXIgJHtDWFgtZysrfSBhY2NlcHRzIC1nIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19jeHhfZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisgZWxzZQorLSAgZWNobyAndm9pZCBmKCl7fScgPiBjb25mdGVzdC5jYworLWlmIHRlc3QgLXogImAke0NYWC1nKyt9IC1nIC1jIGNvbmZ0ZXN0LmNjIDI+JjFgIjsgdGhlbgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisrCSBDWFhGTEFHUz0iLWciCisrCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCisgZWxzZQorLSAgYWNfY3ZfcHJvZ19jeHhfZz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyAKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jeHhfZyIgMT4mNgorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQorIGlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorLSAgQ1hYRkxBR1M9IiRhY19zYXZlX0NYWEZMQUdTIgorKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKKyBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgIENYWEZMQUdTPSItZyAtTzIiCitAQCAtOTU1LDc2ICszMjM5LDQyIEBACisgICAgIENYWEZMQUdTPQorICAgZmkKKyBmaQorLQorLWZvciBhY19kZWNsYXJhdGlvbiBpbiBcCistICAgJydcCistICAgJyNpbmNsdWRlIDxzdGRsaWIuaD4nIFwKKy0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCistICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAorLSAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKKy0gICAndm9pZCBleGl0IChpbnQpOycKKy1kbworLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDk3MCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0kYWNfZGVjbGFyYXRpb24KKy1pbnQgbWFpbigpIHsKKy1leGl0ICg0Mik7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6OTc4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCistICA6CistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgY29udGludWUKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDk4OCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSRhY19kZWNsYXJhdGlvbgorLWludCBtYWluKCkgeworLWV4aXQgKDQyKTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo5OTU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGJyZWFrCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLWZpCistcm0gLWYgY29uZnRlc3QqCistZG9uZQorLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KKy0gIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCistICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAorLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKKy1maQorLQorK2FjX2V4dD1jCisrYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCisgYWNfYXV4X2Rpcj0KKy1mb3IgYWNfZGlyIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uOyBkbworLSAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KKytmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworKyAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgorICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICAgYnJlYWsKKy0gIGVsaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwuc2g7IHRoZW4KKysgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICAgYnJlYWsKKysgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisrICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKysgICAgYnJlYWsKKyAgIGZpCisgZG9uZQorIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorLSAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiAxPiYyOyBleGl0IDE7IH0KKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgZmkKKy1hY19jb25maWdfZ3Vlc3M9JGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzCistYWNfY29uZmlnX3N1Yj0kYWNfYXV4X2Rpci9jb25maWcuc3ViCistYWNfY29uZmlndXJlPSRhY19hdXhfZGlyL2NvbmZpZ3VyZSAjIFRoaXMgc2hvdWxkIGJlIEN5Z251cyBjb25maWd1cmUuCisrCisrIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisrIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KKythY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisrYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorKworIAorICMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorICMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorQEAgLTEwMzMsNjAgKzMyODMsODkgQEAKKyAjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyAjIElSSVggL3NiaW4vaW5zdGFsbAorICMgQUlYIC9iaW4vaW5zdGFsbAorKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworICMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisgIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisgIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworICMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBhIEJTRCBjb21wYXRpYmxlIGluc3RhbGwiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxMDQyOiBjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKysjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF9pbnN0YWxsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisraWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSI6IgorLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKy0gICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCistICAgIGNhc2UgIiRhY19kaXIvIiBpbgorLSAgICAvfC4vfC4vL3wvZXRjLyp8L3Vzci9zYmluLyp8L3Vzci9ldGMvKnwvc2Jpbi8qfC91c3IvYWZzd3MvYmluLyp8L3Vzci91Y2IvKikgOzsKKy0gICAgKikKKy0gICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorLSAgICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorLSAgICAgICMgYnkgZGVmYXVsdC4KKy0gICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCistICAgICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3Byb2c7IHRoZW4KKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKytjYXNlICRhc19kaXIvIGluCisrICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisrICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKysgIC91c3IvdWNiLyogKSA7OworKyAgKikKKysgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKysgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisrICAgICMgYnkgZGVmYXVsdC4KKysgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisgCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKy0gICAgICAgICAgICBncmVwIGRzcG1zZyAkYWNfZGlyLyRhY19wcm9nID4vZGV2L251bGwgMj4mMTsgdGhlbgorKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorIAkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorIAkgICAgOgorKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorKwkgICAgOgorIAkgIGVsc2UKKy0JICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFjX2Rpci8kYWNfcHJvZyAtYyIKKy0JICAgIGJyZWFrIDIKKysJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKysJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisrCSAgICBta2RpciBjb25mdGVzdC5kaXIKKysJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisrCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisrCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKysJICAgIHRoZW4KKysJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorKwkgICAgICBicmVhayAzCisrCSAgICBmaQorIAkgIGZpCisgCWZpCisgICAgICAgZG9uZQorLSAgICAgIDs7CistICAgIGVzYWMKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfSUZTIgorKyAgICBkb25lCisrICAgIDs7CisrZXNhYworKworK2RvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisgCisgZmkKKyAgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCistICAgIElOU1RBTEw9IiRhY19jdl9wYXRoX2luc3RhbGwiCisrICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICAgZWxzZQorLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCistICAgICMgcGF0aCBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisrICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKy0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KKy0gICAgSU5TVEFMTD0iJGFjX2luc3RhbGxfc2giCisrICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKysgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICAgZmkKKyBmaQorLWVjaG8gIiRhY190IiIkSU5TVEFMTCIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKyskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorIAorICMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyAjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgorIHRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKyAKKy10ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTExfUFJPR1JBTX0nCisrdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKyAKKyB0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworIAorQEAgLTExMDIsNzMgKzMzODEsODYgQEAKKyAjQUNfQ0hFQ0tfUFJPRyhBVVRPQ09ORiwgYXV0b2NvbmYsIGF1dG9jb25mLCB0cnVlKQorICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjExMDc6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfU1RSSVAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGFjX2N2X3Byb2dfU1RSSVA9InN0cmlwIgorLSAgICAgIGJyZWFrCistICAgIGZpCistICBkb25lCistICBJRlM9IiRhY19zYXZlX2lmcyIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfU1RSSVA9InN0cmlwIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworICAgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiICYmIGFjX2N2X3Byb2dfU1RSSVA9InRydWUiCisgZmkKKyBmaQorLVNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKKytTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkU1RSSVAiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CisrJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKworIGZvciBhY19wcm9nIGluIGdtYWtlIGdudW1ha2UKKyBkbworLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTE0MDogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF9VX01BS0UnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3BhdGhfVV9NQUtFK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhc2UgIiRVX01BS0UiIGluCistICAvKikKKysgIGNhc2UgJFVfTUFLRSBpbgorKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICBhY19jdl9wYXRoX1VfTUFLRT0iJFVfTUFLRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICA7OworLSAgPzovKikJCQkgCistICBhY19jdl9wYXRoX1VfTUFLRT0iJFVfTUFLRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorLSAgOzsKKyAgICopCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKy0gICAgICBhY19jdl9wYXRoX1VfTUFLRT0iJGFjX2Rpci8kYWNfd29yZCIKKy0gICAgICBicmVhaworLSAgICBmaQorLSAgZG9uZQorLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3BhdGhfVV9NQUtFPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworICAgOzsKKyBlc2FjCisgZmkKKy1VX01BS0U9IiRhY19jdl9wYXRoX1VfTUFLRSIKKytVX01BS0U9JGFjX2N2X3BhdGhfVV9NQUtFCisgaWYgdGVzdCAtbiAiJFVfTUFLRSI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkVV9NQUtFIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVV9NQUtFIiA+JjUKKyskYXNfZWNobyAiJFVfTUFLRSIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorLXRlc3QgLW4gIiRVX01BS0UiICYmIGJyZWFrCisrCisrICB0ZXN0IC1uICIkVV9NQUtFIiAmJiBicmVhaworIGRvbmUKKyB0ZXN0IC1uICIkVV9NQUtFIiB8fCBVX01BS0U9Im1ha2UiCisgCitAQCAtMTE3NiwxODIgKzM0NjgsMTUwIEBACisgCisgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkb3h5Z2VuIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgZG94eWdlbjsgYWNfd29yZD0kMgorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjExODE6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3BhdGhfRE9YWUdFTicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ET1hZR0VOK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGNhc2UgIiRET1hZR0VOIiBpbgorLSAgLyopCisrICBjYXNlICRET1hZR0VOIGluCisrICBbXFwvXSogfCA/OltcXC9dKikKKyAgIGFjX2N2X3BhdGhfRE9YWUdFTj0iJERPWFlHRU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICAgOzsKKy0gID86LyopCQkJIAorLSAgYWNfY3ZfcGF0aF9ET1hZR0VOPSIkRE9YWUdFTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIGRvcyBwYXRoLgorLSAgOzsKKyAgICopCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIOi91c3IvbG9jYWwvYmluOi91c3IvYmluIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvIAorLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKy0gICAgICBhY19jdl9wYXRoX0RPWFlHRU49IiRhY19kaXIvJGFjX3dvcmQiCistICAgICAgYnJlYWsKKy0gICAgZmkKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfaWZzIgorKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2FzX2R1bW15PSIkUEFUSDovdXNyL2xvY2FsL2JpbjovdXNyL2JpbiIKKytmb3IgYXNfZGlyIGluICRhc19kdW1teQorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3BhdGhfRE9YWUdFTj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyAgIDs7CisgZXNhYworIGZpCistRE9YWUdFTj0iJGFjX2N2X3BhdGhfRE9YWUdFTiIKKytET1hZR0VOPSRhY19jdl9wYXRoX0RPWFlHRU4KKyBpZiB0ZXN0IC1uICIkRE9YWUdFTiI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkRE9YWUdFTiIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERPWFlHRU4iID4mNQorKyRhc19lY2hvICIkRE9YWUdFTiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorIAorICMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKy1pZiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CistZWxzZSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgcnVuICRhY19jb25maWdfc3ViIiAxPiYyOyBleGl0IDE7IH0KKy1maQorLQorLWVjaG8gJGFjX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxMjIxOiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKy0KKy1ob3N0X2FsaWFzPSRob3N0CistY2FzZSAiJGhvc3RfYWxpYXMiIGluCistTk9ORSkKKy0gIGNhc2UgJG5vbm9wdCBpbgorLSAgTk9ORSkKKy0gICAgaWYgaG9zdF9hbGlhcz1gJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19ndWVzc2A7IHRoZW4gOgorLSAgICBlbHNlIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBndWVzcyBob3N0IHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAxPiYyOyBleGl0IDE7IH0KKy0gICAgZmkgOzsKKy0gICopIGhvc3RfYWxpYXM9JG5vbm9wdCA7OworLSAgZXNhYyA7OworKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKKyt0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKysgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCisrdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisrICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CisrY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKysqLSotKikgOzsKKysqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworIGVzYWMKKy0KKy1ob3N0PWAke0NPTkZJR19TSEVMTC0vYmluL3NofSAkYWNfY29uZmlnX3N1YiAkaG9zdF9hbGlhc2AKKy1ob3N0X2NwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCistaG9zdF92ZW5kb3I9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorLWhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorLWVjaG8gIiRhY190IiIkaG9zdCIgMT4mNgorLQorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBDeWd3aW4gZW52aXJvbm1lbnQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxMjQyOiBjaGVja2luZyBmb3IgQ3lnd2luIGVudmlyb25tZW50IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY3lnd2luJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDEyNDcgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0KKy1pbnQgbWFpbigpIHsKKy0KKy0jaWZuZGVmIF9fQ1lHV0lOX18KKy0jZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCistI2VuZGlmCistcmV0dXJuIF9fQ1lHV0lOX187CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTI1ODogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfY3lnd2luPXllcworLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X2N5Z3dpbj1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCistcm0gLWYgY29uZnRlc3QqCisrYnVpbGQ9JGFjX2N2X2J1aWxkCisrYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworK3NldCB4ICRhY19jdl9idWlsZAorK3NoaWZ0CisrYnVpbGRfY3B1PSQxCisrYnVpbGRfdmVuZG9yPSQyCisrc2hpZnQ7IHNoaWZ0CisrIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisrIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorK2J1aWxkX29zPSQqCisrSUZTPSRhY19zYXZlX0lGUworK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKysgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCisrZWxzZQorKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKysgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfY3lnd2luIiAxPiY2CistQ1lHV0lOPQorLXRlc3QgIiRhY19jdl9jeWd3aW4iID0geWVzICYmIENZR1dJTj15ZXMKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjEyNzU6IGNoZWNraW5nIGZvciBtaW5ndzMyIGVudmlyb25tZW50IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbWluZ3czMicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAxMjgwICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistCistaW50IG1haW4oKSB7CistcmV0dXJuIF9fTUlOR1czMl9fOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyODc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X21pbmd3MzI9eWVzCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfbWluZ3czMj1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCistcm0gLWYgY29uZnRlc3QqCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KKytjYXNlICRhY19jdl9ob3N0IGluCisrKi0qLSopIDs7CisrKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisrZXNhYworK2hvc3Q9JGFjX2N2X2hvc3QKKythY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCisrc2V0IHggJGFjX2N2X2hvc3QKKytzaGlmdAorK2hvc3RfY3B1PSQxCisraG9zdF92ZW5kb3I9JDIKKytzaGlmdDsgc2hpZnQKKysjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKysjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CisraG9zdF9vcz0kKgorK0lGUz0kYWNfc2F2ZV9JRlMKKytjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfbWluZ3czMiIgMT4mNgorLU1JTkdXMzI9CistdGVzdCAiJGFjX2N2X21pbmd3MzIiID0geWVzICYmIE1JTkdXMzI9eWVzCistCistCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTMwNjogY2hlY2tpbmcgZm9yIGV4ZWN1dGFibGUgc3VmZml4IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZXhlZXh0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgaWYgdGVzdCAiJENZR1dJTiIgPSB5ZXMgfHwgdGVzdCAiJE1JTkdXMzIiID0geWVzOyB0aGVuCistICBhY19jdl9leGVleHQ9LmV4ZQorLWVsc2UKKy0gIHJtIC1mIGNvbmZ0ZXN0KgorLSAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC4kYWNfZXh0CistICBhY19jdl9leGVleHQ9CistICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEzMTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH07IHRoZW4KKy0gICAgZm9yIGZpbGUgaW4gY29uZnRlc3QuKjsgZG8KKy0gICAgICBjYXNlICRmaWxlIGluCistICAgICAgKi5jIHwgKi5vIHwgKi5vYmopIDs7CistICAgICAgKikgYWNfY3ZfZXhlZXh0PWBlY2hvICRmaWxlIHwgc2VkIC1lIHMvY29uZnRlc3QvL2AgOzsKKy0gICAgICBlc2FjCistICAgIGRvbmUKKy0gIGVsc2UKKy0gICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzLiIgMT4mMjsgZXhpdCAxOyB9CistICBmaQorLSAgcm0gLWYgY29uZnRlc3QqCistICB0ZXN0IHgiJHthY19jdl9leGVleHR9IiA9IHggJiYgYWNfY3ZfZXhlZXh0PW5vCistZmkKKy1maQorIAorLUVYRUVYVD0iIgorLXRlc3QgeCIke2FjX2N2X2V4ZWV4dH0iICE9IHhubyAmJiBFWEVFWFQ9JHthY19jdl9leGVleHR9CistZWNobyAiJGFjX3QiIiR7YWNfY3ZfZXhlZXh0fSIgMT4mNgorLWFjX2V4ZWV4dD0kRVhFRVhUCisgCisgCisgCistICAgIGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaWN0IGNvbXBpbGluZyBpcyBvbiIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjEzMzk6IGNoZWNraW5nIHdoZXRoZXIgc3RyaWN0IGNvbXBpbGluZyBpcyBvbiIgPiY1CistICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJpY3Qgb3IgLS1kaXNhYmxlLXN0cmljdCB3YXMgZ2l2ZW4uCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24iID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaWN0IGNvbXBpbGluZyBpcyBvbi4uLiAiID4mNjsgfQorKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RyaWN0IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9zdHJpY3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zdHJpY3QiCistICAKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3N0cmljdDsKKyAgICAgICAgIGlmIHRlc3QgIiRlbmFibGV2YWwiID0gbm8KKyAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICBhY191c2Vfc3RyaWN0X29wdGlvbnM9bm8KKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBhY191c2Vfc3RyaWN0X29wdGlvbnM9eWVzCisgICAgICAgICBmaQorLSAgICAgIAorKworIGVsc2UKKyAgIGFjX3VzZV9zdHJpY3Rfb3B0aW9ucz1ubworIGZpCisgCistICAgIGVjaG8gIiRhY190IiIkYWNfdXNlX3N0cmljdF9vcHRpb25zIiAxPiY2CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY191c2Vfc3RyaWN0X29wdGlvbnMiID4mNQorKyRhc19lY2hvICIkYWNfdXNlX3N0cmljdF9vcHRpb25zIiA+JjY7IH0KKyAKKyAgICAgaWYgdGVzdCAiJGFjX3VzZV9zdHJpY3Rfb3B0aW9ucyIgPSB5ZXMKKyAgICAgdGhlbgorQEAgLTEzOTEsMTcgKzM2NTEsMTcgQEAKKyAKKyAKKyAKKy0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLTY0Yml0LWxpYnMgb3IgLS1kaXNhYmxlLTY0Yml0LWxpYnMgd2FzIGdpdmVuLgorKworKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtNjRiaXQtbGlicyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfNjRiaXRfbGlicytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlXzY0Yml0X2xpYnMiCistICBFTkFCTEVfNjRCSVRfTElCUz0ke2VuYWJsZXZhbH0KKysgIGVuYWJsZXZhbD0kZW5hYmxlXzY0Yml0X2xpYnM7IEVOQUJMRV82NEJJVF9MSUJTPSR7ZW5hYmxldmFsfQorIGVsc2UKKyAgIEVOQUJMRV82NEJJVF9MSUJTPXllcworLSAgICAKKysKKyBmaQorIAorLSAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIDY0LWJpdCBleGVjdXRhYmxlIHN1cHBvcnQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNDA1OiBjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydCIgPiY1CisrICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIDY0LWJpdCBleGVjdXRhYmxlIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciA2NC1iaXQgZXhlY3V0YWJsZSBzdXBwb3J0Li4uICIgPiY2OyB9CisgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgY2FzZSAiJHtob3N0fSIgaW4KKyAgICAgICAgICotKi1ocHV4KikKK0BAIC0xNDY1LDcgKzM3MjUsNyBAQAorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICotKi1haXgqKQorLSAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorKyAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAjIE5vdGU6IEhhdmUgbm90IHRlc3RlZCA2NC1iaXRuZXNzIHdpdGggZ2NjLgorICAgICAgICAgICAgICAgICAjIE1heWJlIHRoZSBmbGFnICItbWFpeDY0IiBjb3VsZCBiZSB1c2VkIHdpdGggZ2NjPworICAgICAgICAgICAgICAgICBPTERfQ0ZMQUdTPSIke0NGTEFHU30iCitAQCAtMTQ3NywyMyArMzczNyw1MCBAQAorICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBlbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMTQ4MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBpbnQgbWFpbih2b2lkKSB7cmV0dXJuIDA7fQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQ4NjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorLXRoZW4KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisrICB7IChjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLWZyIGNvbmZ0ZXN0KgorLSAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBmaQorLXJtIC1mciBjb25mdGVzdCoKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgCisrCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIke09MRF9DRkxBR1N9IgorICAgICAgICAgICAgICAgICAgICAgQ1hYRkxBR1M9IiR7T0xEX0NYWEZMQUdTfSIKK0BAIC0xNTA0LDcgKzM3OTEsNyBAQAorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICotKi1ocHV4KikKKy0gICAgICAgICAgICAgICAgICAgICAgICAKKysKKyAgICAgICAgICAgICBPTERfQ0ZMQUdTPSIke0NGTEFHU30iCisgICAgICAgICAgICAgT0xEX0NYWEZMQUdTPSIke0NYWEZMQUdTfSIKKyAgICAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSArREQ2NCIKK0BAIC0xNTEyLDIzICszNzk5LDUwIEBACisgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIEVOQUJMRV82NEJJVF9MSUJTPW5vCisgZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDE1MTcgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgaW50IG1haW4odm9pZCkge3JldHVybiAwO30KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE1MjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKy10aGVuCisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIEVOQUJMRV82NEJJVF9MSUJTPXllcworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1mciBjb25mdGVzdCoKKy0gIEVOQUJMRV82NEJJVF9MSUJTPW5vCisrICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrKCBleGl0ICRhY19zdGF0dXMgKQorK0VOQUJMRV82NEJJVF9MSUJTPW5vCisgZmkKKy1ybSAtZnIgY29uZnRlc3QqCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorKworICAgICAgICAgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICBDRkxBR1M9IiR7T0xEX0NGTEFHU30iCisgICAgICAgICAgICAgICAgIENYWEZMQUdTPSIke09MRF9DWFhGTEFHU30iCitAQCAtMTUzNywyMyArMzg1MSw1MCBAQAorICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBlbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMTU0MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBpbnQgbWFpbih2b2lkKSB7cmV0dXJuIDA7fQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTU0NjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorLXRoZW4KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisrICB7IChjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgRU5BQkxFXzY0QklUX0xJQlM9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLWZyIGNvbmZ0ZXN0KgorLSAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrRU5BQkxFXzY0QklUX0xJQlM9bm8KKyBmaQorLXJtIC1mciBjb25mdGVzdCoKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgCisrCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRFTkFCTEVfNjRCSVRfTElCUyIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIke09MRF9DRkxBR1N9IgorICAgICAgICAgICAgICAgICAgICAgQ1hYRkxBR1M9IiR7T0xEX0NYWEZMQUdTfSIKK0BAIC0xNTY1LDM0ICszOTA2LDM1IEBACisgICAgICAgICAgICAgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgZmkKKy0gICAgICAgIGVjaG8gIiRhY190IiIkRU5BQkxFXzY0QklUX0xJQlMiIDE+JjYKKysgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRFTkFCTEVfNjRCSVRfTElCUyIgPiY1CisrJGFzX2VjaG8gIiRFTkFCTEVfNjRCSVRfTElCUyIgPiY2OyB9CisgCisgCisgCisgCisgCistCWVjaG8gJGFjX24gImNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE1NzY6IGNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2ljdV9jdl9ob3N0X2ZyYWcnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggTWFrZWZpbGUgZnJhZ21lbnQgdG8gdXNlLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtpY3VfY3ZfaG9zdF9mcmFnK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIAorKworIGNhc2UgIiR7aG9zdH0iIGluCisgKi0qLXNvbGFyaXMqKQorLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgkKKy0JCWljdV9jdl9ob3N0X2ZyYWc9bWgtc29sYXJpcy1nY2MgCisrCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLXNvbGFyaXMtZ2NjCisgCWVsc2UKKyAJCWljdV9jdl9ob3N0X2ZyYWc9bWgtc29sYXJpcworIAlmaSA7OworIGFscGhhKi0qLWxpbnV4LWdudSkKKyAJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJCWljdV9jdl9ob3N0X2ZyYWc9bWgtYWxwaGEtbGludXgtZ2NjCistCWVsc2UgIAorKwllbHNlCisgCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLWFscGhhLWxpbnV4LWNjCisgCWZpIDs7CisgKi0qLWxpbnV4KikgaWN1X2N2X2hvc3RfZnJhZz1taC1saW51eCA7OworICotKi1jeWd3aW4pCistCWlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSB5ZXM7IHRoZW4KKysJaWYgdGVzdCAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA9IHllczsgdGhlbgorIAkgIAlpY3VfY3ZfaG9zdF9mcmFnPW1oLWN5Z3dpbgorIAllbHNlCisgCSAgCWljdV9jdl9ob3N0X2ZyYWc9bWgtY3lnd2luLW1zdmMKK0BAIC0xNjI5LDExMyArMzk3MSwxNjkgQEAKKyAqLXNlcXVlbnQtKikgCWljdV9jdl9ob3N0X2ZyYWc9bWgtcHR4IDs7CisgKikgCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLXVua25vd24gOzsKKyBlc2FjCistCQkKKy0JCistZmkKKyAKKy1lY2hvICIkYWNfdCIiJGljdV9jdl9ob3N0X2ZyYWciIDE+JjYKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRpY3VfY3ZfaG9zdF9mcmFnIiA+JjUKKyskYXNfZWNobyAiJGljdV9jdl9ob3N0X2ZyYWciID4mNjsgfQorIAorIAorIGNhc2UgIiR7aG9zdH0iIGluCistCSotKi1ocHV4KikgCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNjQyOiBjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiA+JjUKKy1hY19saWJfdmFyPWBlY2hvIG0nXydmbG9vciB8IHNlZCAneSUuLystJV9fcF8lJ2AKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCSotKi1ocHV4KikgCXsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9saWJfbV9mbG9vcitzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworIExJQlM9Ii1sbSAgJExJQlMiCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDE2NTAgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIGZsb29yKCk7CistCistaW50IG1haW4oKSB7CistZmxvb3IoKQorLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2NjE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9bm8iCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKy1MSUJTPSIkYWNfc2F2ZV9MSUJTIgorLQorLWZpCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgZmxvb3IgKCk7CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gZmxvb3IgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9saWJfbV9mbG9vcj15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X2xpYl9tX2Zsb29yPW5vCisrZmkKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX21fZmxvb3IiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX21fZmxvb3IiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfbGliX21fZmxvb3IiID0geCIieWVzOyB0aGVuCisgICBMSUJfTT0iLWxtIgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorIGZpCisgIDs7CistCQorLQkqKSAJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNjgzOiBjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiA+JjUKKy1hY19saWJfdmFyPWBlY2hvIG0nXydmbG9vciB8IHNlZCAneSUuLystJV9fcF8lJ2AKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrCisrCSopCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0uLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2xpYl9tX2Zsb29yK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisgTElCUz0iLWxtICAkTElCUyIKKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMTY5MSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgZmxvb3IoKTsKKy0KKy1pbnQgbWFpbigpIHsKKy1mbG9vcigpCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTcwMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLUxJQlM9IiRhY19zYXZlX0xJQlMiCistCistZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBtIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCistICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCistICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorLSNkZWZpbmUgJGFjX3RyX2xpYiAxCistRU9GCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIGZsb29yICgpOworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIGZsb29yICgpOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorKyAgYWNfY3ZfbGliX21fZmxvb3I9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9saWJfbV9mbG9vcj1ubworK2ZpCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9tX2Zsb29yIiA9IHgiInllczsgdGhlbgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9MSUJNIDEKKytfQUNFT0YKKyAKKyAgIExJQlM9Ii1sbSAkTElCUyIKKyAKKy1lbHNlCistICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKyBmaQorLSAKKysKKyAJCQlMSUJfTT0iIiA7OworIGVzYWMKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNzM0OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9bm8KKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIG9yIC0tZGlzYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NoYXJlZCIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCSAgICAgeWVzfCIiKSBlbmFibGVkPXllczsgRU5BQkxFX1NIQVJFRD1ZRVMgOzsKKyAJICAgICBubyk7OworIAkgICAgICopIDs7CitAQCAtMTc0NSwxNjIgKzQxNDMsMjMwIEBACisgCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGVuYWJsZWQiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlZCIgPiY1CisrJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxNzUzOiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9bm8KKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIG9yIC0tZGlzYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3N0YXRpYyIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCSAgICAgeWVzfCIiKSBlbmFibGVkPXllczsgRU5BQkxFX1NUQVRJQz1ZRVMgOzsKKyAJICAgICBubykgOzsKKyAJICAgICAqKSA7OworICAgICBlc2FjCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGVuYWJsZWQiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlZCIgPiY1CisrJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE3Njk6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzIiA+JjUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgZW5hYmxlZD1ubworIEVOQUJMRV9ERUJVRz0wCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIG9yIC0tZGlzYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlYnVnIgorLSAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgIHllc3wiIikgZW5hYmxlZD15ZXM7IEVOQUJMRV9ERUJVRz0xIDs7CisgICAgICAgICAgKikgOzsKKyAgICAgZXNhYworIGZpCisgCistZWNobyAiJGFjX3QiIiRlbmFibGVkIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZWQiID4mNQorKyRhc19lY2hvICIkZW5hYmxlZCIgPiY2OyB9CisgCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCByZWxlYXNlIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE3ODU6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgcmVsZWFzZSBsaWJyYXJpZXMiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgZW5hYmxlZD15ZXMKKyBFTkFCTEVfUkVMRUFTRT0xCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbGVhc2Ugb3IgLS1kaXNhYmxlLXJlbGVhc2Ugd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWxlYXNlIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9yZWxlYXNlK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfcmVsZWFzZSIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9yZWxlYXNlOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgIG5vKSBlbmFibGVkPW5vOyBFTkFCTEVfUkVMRUFTRT0wIDs7CisgICAgICAgICAgKikgOzsKKyAgICAgZXNhYworIGZpCisgCistZWNobyAiJGFjX3QiIiRlbmFibGVkIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZWQiID4mNQorKyRhc19lY2hvICIkZW5hYmxlZCIgPiY2OyB9CisgCisgCistIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxODAzOiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1JBTkxJQicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyBlbHNlCistICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorLSAgYWNfZHVtbXk9IiRQQVRIIgorLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCistICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCistICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorLSAgICAgIGFjX2N2X3Byb2dfUkFOTElCPSJyYW5saWIiCistICAgICAgYnJlYWsKKy0gICAgZmkKKy0gIGRvbmUKKy0gIElGUz0iJGFjX3NhdmVfaWZzIgorLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIiAmJiBhY19jdl9wcm9nX1JBTkxJQj0iOiIKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyBmaQorIGZpCistUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCisrUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgorIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCistICBlY2hvICIkYWNfdCIiJFJBTkxJQiIgMT4mNgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CisrJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisrICBhY19jdF9SQU5MSUI9JFJBTkxJQgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgorK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKysgICAgUkFOTElCPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorKyAgZmkKKyBlbHNlCistICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKysgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorIGZpCisgCisgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTgzMzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcGF0aF9BUicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9BUitzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBjYXNlICIkQVIiIGluCistICAvKikKKysgIGNhc2UgJEFSIGluCisrICBbXFwvXSogfCA/OltcXC9dKikKKyAgIGFjX2N2X3BhdGhfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICA7OworLSAgPzovKikJCQkgCistICBhY19jdl9wYXRoX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKy0gIDs7CisgICAqKQorLSAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKy0gIGFjX2R1bW15PSIkUEFUSDovYmluOi91c3IvYmluOi91c3IvY2NzL2JpbiIKKy0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKy0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKy0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCistICAgICAgYWNfY3ZfcGF0aF9BUj0iJGFjX2Rpci8kYWNfd29yZCIKKy0gICAgICBicmVhaworLSAgICBmaQorLSAgZG9uZQorLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrYXNfZHVtbXk9IiRQQVRIOi9iaW46L3Vzci9iaW46L3Vzci9jY3MvYmluIgorK2ZvciBhc19kaXIgaW4gJGFzX2R1bW15CisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcGF0aF9BUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKysgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKyAgIHRlc3QgLXogIiRhY19jdl9wYXRoX0FSIiAmJiBhY19jdl9wYXRoX0FSPSJlY2hvIGFyY2hpdmVyIGFyIG5vdCBmb3VuZCByZS1ydW4gY29uZmlndXJlIDsgZmFsc2UiCisgICA7OworIGVzYWMKKyBmaQorLUFSPSIkYWNfY3ZfcGF0aF9BUiIKKytBUj0kYWNfY3ZfcGF0aF9BUgorIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiIkQVIiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1CisrJGFzX2VjaG8gIiRBUiIgPiY2OyB9CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIHJlbmFtaW5nIG9mIHN5bWJvbHMiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxODY4OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSByZW5hbWluZyBvZiBzeW1ib2xzIiA+JjUKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgcmVuYW1pbmcgb2Ygc3ltYm9scyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgcmVuYW1pbmcgb2Ygc3ltYm9scy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9eWVzCisgVV9ESVNBQkxFX1JFTkFNSU5HPTAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVuYW1pbmcgb3IgLS1kaXNhYmxlLXJlbmFtaW5nIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVuYW1pbmcgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3JlbmFtaW5nK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfcmVuYW1pbmciCistICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfcmVuYW1pbmc7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCSAgICAgeWVzfCIiKSBlbmFibGVkPXllcyA7OworIAkgICAgIG5vKSBlbmFibGVkPW5vOyBVX0RJU0FCTEVfUkVOQU1JTkc9MSA7OworIAkgICAgICopIDs7CisgICAgIGVzYWMKKyBmaQorIAorLWVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKyskYXNfZWNobyAiJGVuYWJsZWQiID4mNjsgfQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmciIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToxODg1OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBmdW5jdGlvbiBhbmQgZGF0YSB0cmFjaW5nIiA+JjUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZy4uLiAiID4mNjsgfQorIGVuYWJsZWQ9eWVzCisgVV9FTkFCTEVfVFJBQ0lORz0xCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRyYWNpbmcgb3IgLS1kaXNhYmxlLXRyYWNpbmcgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10cmFjaW5nIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV90cmFjaW5nK3NldH0iID0gc2V0OyB0aGVuCistICBlbmFibGV2YWw9IiRlbmFibGVfdHJhY2luZyIKKy0gICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV90cmFjaW5nOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkgICAgIHllc3wiIikgZW5hYmxlZD15ZXMgOzsKKyAJICAgICBubykgZW5hYmxlZD1ubzsgVV9FTkFCTEVfVFJBQ0lORz0wIDs7CisgCSAgICAgKikgOzsKKyAgICAgZXNhYworIGZpCisgCistZWNobyAiJGFjX3QiIiRlbmFibGVkIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZWQiID4mNQorKyRhc19lY2hvICIkZW5hYmxlZCIgPiY2OyB9CisgCisgCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwYXRoIG9yIC0tZGlzYWJsZS1ycGF0aCB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJwYXRoIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9ycGF0aCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3JwYXRoIgorLSAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkgICAgIHllc3wiIikgRU5BQkxFX1JQQVRIPVlFUyA7OworIAkgICAgIG5vKSA7OworIAkgICAgICopIDs7CitAQCAtMTkxMywzNCArNDM3OSw2MCBAQAorIAorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBkZWZpbml0aW9uIG9mIFVfSU5MSU5FIGZvciBDIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MTkxODogY2hlY2tpbmcgZm9yIGRlZmluaXRpb24gb2YgVV9JTkxJTkUgZm9yIEMiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2lubGluZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRlZmluaXRpb24gb2YgVV9JTkxJTkUgZm9yIEMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2N2X2NfaW5saW5lPW5vCisgZm9yIGFjX2t3IGluIGlubGluZSBfX2lubGluZV9fIF9faW5saW5lOyBkbworLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDE5MjUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCistaW50IG1haW4oKSB7CisraW50CisrbWFpbiAoKQorK3sKKyB9ICRhY19rdyBmb28oKSB7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTkzMjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3OyBicmVhaworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgZG9uZQorLSAgCistZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X2NfaW5saW5lIiAxPiY2CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY19pbmxpbmUiID4mNjsgfQorIGNhc2UgIiRhY19jdl9jX2lubGluZSIgaW4KKyAgICAgICB5ZXMpICAgICAgIFVfSU5MSU5FPSAiaW5saW5lIiA7OworIAkgIG5vICkgICAgICAgVV9JTkxJTkU9IDs7CitAQCAtMTk1MCwxMyArNDQ0MiwxNCBAQAorIAorIHRocmVhZHM9dHJ1ZQorIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10aHJlYWRzIG9yIC0tZGlzYWJsZS10aHJlYWRzIHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGhyZWFkcyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfdGhyZWFkcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX3RocmVhZHMiCistICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV90aHJlYWRzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCQl5ZXMpIHRocmVhZHM9dHJ1ZSA7OworIAkJbm8pICB0aHJlYWRzPWZhbHNlIDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRocmVhZHMiIDE+JjI7IGV4aXQgMTsgfSA7OworKwkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRocmVhZHMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10aHJlYWRzIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIHRocmVhZHM9dHJ1ZQorQEAgLTE5NzIsMTcxICs0NDY1LDI5NSBAQAorIElDVV9VU0VfVEhSRUFEUz0wCisgCisgaWYgdGVzdCAkdGhyZWFkcyA9IHRydWU7IHRoZW4KKy0gICAgICAgICAgIAorLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjE5Nzg6IGNoZWNraW5nIGZvciBwdGhyZWFkX2F0dHJfaW5pdCBpbiAtbHB0aHJlYWQiID4mNQorLWFjX2xpYl92YXI9YGVjaG8gcHRocmVhZCdfJ3B0aHJlYWRfYXR0cl9pbml0IHwgc2VkICd5JS4vKy0lX19wXyUnYAorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfJGFjX2xpYl92YXInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKyBMSUJTPSItbHB0aHJlYWQgICRMSUJTIgorLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAxOTg2ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciBwdGhyZWFkX2F0dHJfaW5pdCgpOworLQorLWludCBtYWluKCkgeworLXB0aHJlYWRfYXR0cl9pbml0KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxOTk3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj15ZXMiCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorLWZpCistcm0gLWYgY29uZnRlc3QqCistTElCUz0iJGFjX3NhdmVfTElCUyIKKy0KKy1maQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCistICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CistICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKy0gICAgLWUgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKKy0gIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCistI2RlZmluZSAkYWNfdHJfbGliIDEKKy1FT0YKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgcHRocmVhZF9hdHRyX2luaXQgKCk7CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gcHRocmVhZF9hdHRyX2luaXQgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdD15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0PW5vCisrZmkKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID0geCIieWVzOyB0aGVuCisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0xJQlBUSFJFQUQgMQorK19BQ0VPRgorIAorICAgTElCUz0iLWxwdGhyZWFkICRMSUJTIgorIAorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorIGZpCisgCisgICBpZiB0ZXN0ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdCA9IHllczsgdGhlbgorICAgIElDVV9VU0VfVEhSRUFEUz0xCisgICBlbHNlCistICAgICAgICAgICAgICAgCistICAgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToyMDMwOiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3knK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcHRocmVhZF9tdXRleF9kZXN0cm95Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveT0ibm8iCisgZm9yIGkgaW4gcHRocmVhZCBwdGhyZWFkcyBjX3IgOyBkbworIExJQlM9Ii1sJGkgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIwMzkgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgpOworLQorLWludCBtYWluKCkgeworLXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgpCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjA1MDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKytpbnQKKyttYWluICgpCisreworK3JldHVybiBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95PSItbCRpIgorIGJyZWFrCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZG9uZQorIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95IiA9ICJubyI7IHRoZW4KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjA2MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgcHRocmVhZF9tdXRleF9kZXN0cm95KCk7CistCistaW50IG1haW4oKSB7CistcHRocmVhZF9tdXRleF9kZXN0cm95KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMDczOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgcHRocmVhZF9tdXRleF9kZXN0cm95ICgpOworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKyAgIGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3k9Im5vbmUgcmVxdWlyZWQiCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBMSUJTPSIkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorIGZpCistCistZWNobyAiJGFjX3QiIiRhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95IiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3kiID4mNQorKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY2OyB9CisgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3kiICE9ICJubyI7IHRoZW4KKyAgIHRlc3QgIiRhY19jdl9zZWFyY2hfcHRocmVhZF9tdXRleF9kZXN0cm95IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSAkTElCUyIKKy0gIAorKworIGVsc2UgOgorLSAgCisrCisgZmkKKyAKKyAgICBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgIT0gbm87IHRoZW4KKyAgICAgSUNVX1VTRV9USFJFQURTPTEKKyAgICBlbHNlCistICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9pbml0IGluIC1scHRocmVhZCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIwOTc6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKy1hY19saWJfdmFyPWBlY2hvIHB0aHJlYWQnXydwdGhyZWFkX211dGV4X2luaXQgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9pbml0IGluIC1scHRocmVhZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfbXV0ZXhfaW5pdCBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworIExJQlM9Ii1scHRocmVhZCAgJExJQlMiCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIxMDUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIHB0aHJlYWRfbXV0ZXhfaW5pdCgpOworLQorLWludCBtYWluKCkgeworLXB0aHJlYWRfbXV0ZXhfaW5pdCgpCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjExNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLUxJQlM9IiRhY19zYXZlX0xJQlMiCistCistZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBwdGhyZWFkIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCistICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCistICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorLSNkZWZpbmUgJGFjX3RyX2xpYiAxCistRU9GCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHB0aHJlYWRfbXV0ZXhfaW5pdCAoKTsKKytpbnQKKyttYWluICgpCisreworK3JldHVybiBwdGhyZWFkX211dGV4X2luaXQgKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQ9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQ9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0IiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCIgPSB4IiJ5ZXM7IHRoZW4KKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfTElCUFRIUkVBRCAxCisrX0FDRU9GCisgCisgICBMSUJTPSItbHB0aHJlYWQgJExJQlMiCisgCistZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgZmkKKyAKKyAgICAgaWYgdGVzdCAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0ID0geWVzOyB0aGVuCitAQCAtMjE0NCw1MyArNDc2MSw5MSBAQAorICAgICBmaQorICAgIGZpCisgCistICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfbXV0ZXhfbG9jayIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIxNDk6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyMTU0ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2suLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIHB0aHJlYWRfbXV0ZXhfbG9jayB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHB0aHJlYWRfbXV0ZXhfbG9jay4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfbG9jayBpbm5vY3VvdXNfcHRocmVhZF9tdXRleF9sb2NrCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jaygpOyBiZWxvdy4gICovCistI2luY2x1ZGUgPGFzc2VydC5oPgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgcHRocmVhZF9tdXRleF9sb2NrKCk7CisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcHRocmVhZF9tdXRleF9sb2NrICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorIAorLWludCBtYWluKCkgeworKyN1bmRlZiBwdGhyZWFkX211dGV4X2xvY2sKKyAKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jayAoKTsKKyAvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfcHRocmVhZF9tdXRleF9sb2NrKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wdGhyZWFkX211dGV4X2xvY2spCisrI2lmIGRlZmluZWQgX19zdHViX3B0aHJlYWRfbXV0ZXhfbG9jayB8fCBkZWZpbmVkIF9fc3R1Yl9fX3B0aHJlYWRfbXV0ZXhfbG9jaworIGNob2tlIG1lCistI2Vsc2UKKy1wdGhyZWFkX211dGV4X2xvY2soKTsKKyAjZW5kaWYKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMTc3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jaz1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLWZpCistCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18ncHRocmVhZF9tdXRleF9sb2NrYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2s9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrIiA+JjY7IH0KKyAKKyAKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jayA9IHllczsgdGhlbgorQEAgLTIxOTgsNyArNDg1Myw3IEBACisgICAgZmkKKyAgICAgICBjYXNlICIke2hvc3R9IiBpbgorICAgICotcGMtY3lnd2luKnwqLXBjLW1pbmd3KikKKy0gICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorKyAgICAgaWYgdGVzdCAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA9IG5vOyB0aGVuCisgICAgICAgICAgICAgICBJQ1VfVVNFX1RIUkVBRFM9MQorICAgICAgZmkgOzsKKyAgICAqLSotaHB1eCopCitAQCAtMjIyMiwzNyArNDg3Nyw2NyBAQAorICMgVGhlIEFDX0ZVTkNfTU1BUCBtYWNybyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuICBJdCBzZWVtcyB0byBiZSB0b28gc3BlY2lmaWMuCisgIyBEbyB0aGlzIGNoZWNrIGluc3RlYWQuCisgSEFWRV9NTUFQPTAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgbW1hcCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIyMjc6IGNoZWNraW5nIGZvciBtbWFwIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19tbWFwX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIyMzIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0gICAgCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtbWFwIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbW1hcC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX29rK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxmY250bC5oPgorLSAgICAKKy1pbnQgbWFpbigpIHsKKysKKytpbnQKKyttYWluICgpCisreworICAgICBtbWFwKCh2b2lkICopMCwgMCwgUFJPVF9SRUFELCAwLCAwLCAwKTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMjQ0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKyAgIGFjX2N2X2Z1bmNfbW1hcF9vaz15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9mdW5jX21tYXBfb2s9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19tbWFwX29rPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdCogCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X2Z1bmNfbW1hcF9vayIgMT4mNgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfb2siID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX29rIiA+JjY7IH0KKyBpZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfb2sgPSB5ZXMKKyB0aGVuCisgICAgIEhBVkVfTU1BUD0xCitAQCAtMjI2OSwxMjQgKzQ5NTQsNzcyIEBACisgCisgCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToyMjc0OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CisrYWNfZXh0PWMKKythY19jcHA9JyRDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisgIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KKyBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICAgQ1BQPQorIGZpCisgaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19DUFAnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorKyAgICBkbworKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKKytmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorKyAgOgorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KKytjb250aW51ZQorK2ZpCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKysKKysgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisrICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KKytfQUNFT0YKKytpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisrICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKythY19wcmVwcm9jX29rPToKKyticmVhaworK2ZpCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKysKKytkb25lCisrIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKytpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorKyAgYnJlYWsKKytmaQorKworKyAgICBkb25lCisrICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKysKKytmaQorKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorIGVsc2UKKy0gICAgIyBUaGlzIG11c3QgYmUgaW4gZG91YmxlIHF1b3Rlcywgbm90IHNpbmdsZSBxdW90ZXMsIGJlY2F1c2UgQ1BQIG1heSBnZXQKKy0gICMgc3Vic3RpdHV0ZWQgaW50byB0aGUgTWFrZWZpbGUgYW5kICIke0NDLWNjfSIgd2lsbCBjb25mdXNlIG1ha2UuCistICBDUFA9IiR7Q0MtY2N9IC1FIgorKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1CisrJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorK2FjX3ByZXByb2Nfb2s9ZmFsc2UKKytmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKy0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjI4OSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxhc3NlcnQuaD4KKy1TeW50YXggRXJyb3IKKy1FT0YKKy1hY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MjI5NTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKy1hY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCistaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorICAgOgorIGVsc2UKKy0gIGVjaG8gIiRhY19lcnIiID4mNQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgQ1BQPSIke0NDLWNjfSAtRSAtdHJhZGl0aW9uYWwtY3BwIgorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIzMDYgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8YXNzZXJ0Lmg+CistU3ludGF4IEVycm9yCistRU9GCistYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKy17IChldmFsIGVjaG8gY29uZmlndXJlOjIzMTI6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CistYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorLWlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisrY29udGludWUKKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfTsgdGhlbgorKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKytjb250aW51ZQorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgICMgUGFzc2VzIGJvdGggdGVzdHMuCisrYWNfcHJlcHJvY19vaz06CisrYnJlYWsKKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrZG9uZQorKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIENQUD0iJHtDQy1jY30gLW5vbG9nbyAtRSIKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyMzIzICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistI2luY2x1ZGUgPGFzc2VydC5oPgorLVN5bnRheCBFcnJvcgorLUVPRgorLWFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCisteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMzI5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKy1pZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisreyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCisrU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisrZmkKKysKKythY19leHQ9YworK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisrICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisrICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCisrY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKypHTlUqKQorKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisrKikKKysgIGFjX2NvdW50PTAKKysgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorKyAgd2hpbGUgOgorKyAgZG8KKysgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKysgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKysgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKysgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworKyAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisrICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisrICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisrICAgIGZpCisrICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKysgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisrICBkb25lCisrICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKytlc2FjCisrCisrICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisrICAgIGRvbmUKKysgIGRvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKysgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZmkKKytlbHNlCisrICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKKytmaQorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorKworKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQorKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisrICAgZWxzZQorKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKysgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisrICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisrIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKysgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisrKkdOVSopCisrICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKysqKQorKyAgYWNfY291bnQ9MAorKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisrICB3aGlsZSA6CisrICBkbworKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisrICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKysgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisrICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKysgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKysgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKysgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKysgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKysgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKysgICAgZmkKKysgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKysgIGRvbmUKKysgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworK2VzYWMKKysKKysgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisrICAgIGRvbmUKKysgIGRvbmUKKytkb25lCisrSUZTPSRhc19zYXZlX0lGUworKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisrICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgZmkKKytlbHNlCisrICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorK2ZpCisrCisrICAgZmkKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZmxvYXQuaD4KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9oZWFkZXJfc3RkYz1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKysgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworK19BQ0VPRgorK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKysgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIENQUD0vbGliL2NwcAorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorIHJtIC1mIGNvbmZ0ZXN0KgorKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKysgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK19BQ0VPRgorK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKysgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICA6CisrZWxzZQorKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorIHJtIC1mIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfcHJvZ19DUFA9IiRDUFAiCisrCisgZmkKKy0gIENQUD0iJGFjX2N2X3Byb2dfQ1BQIgorKworK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisrICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisrICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorKyAgOgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKysjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisrIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorKyNlbHNlCisrIyBkZWZpbmUgSVNMT1dFUihjKSBcCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisrI2VuZGlmCisrCisrI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKKytpbnQKKyttYWluICgpCisreworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKysJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrICAgICAgcmV0dXJuIDI7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIDoKKyBlbHNlCistICBhY19jdl9wcm9nX0NQUD0iJENQUCIKKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKytmaQorK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKysKKysKKytmaQorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KKytpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBTVERDX0hFQURFUlMgMQorK19BQ0VPRgorKworIGZpCistZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKKyAKKy1mb3IgYWNfaGRyIGluIGludHR5cGVzLmgKKysjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorKworKworKworKworKworKworKworKworKworK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisgZG8KKy1hY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2hkciIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjIzNTc6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDIzNjIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8JGFjX2hkcj4KKy1FT0YKKy1hY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MjM2NzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKy1hY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCistaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCistZWxzZQorLSAgZWNobyAiJGFjX2VyciIgPiY1CistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKythc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAiID4mNjsgfQorK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorKworKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKythY19yZXM9YGV2YWwgJ2FzX3ZhbD0keyckYXNfYWNfSGVhZGVyJ30KKysJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CisrJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorK2FzX3ZhbD1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorKwkJICRhc19lY2hvICIkYXNfdmFsIidgCisrICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuCisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisrX0FDRU9GCisrCisgZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgICBhY190cl9oZHI9SEFWRV9gZWNobyAkYWNfaGRyIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCistICBjYXQgPj4gY29uZmRlZnMuaCA8PEVPRgorLSNkZWZpbmUgJGFjX3RyX2hkciAxCistRU9GCistIAorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorKworK2RvbmUKKysKKysKKysKKytmb3IgYWNfaGVhZGVyIGluIGludHR5cGVzLmgKKytkbworK2FzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKytpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICIgPiY2OyB9CisraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytmaQorK2FjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorKwkJICRhc19lY2hvICIkYXNfdmFsIidgCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisrZWxzZQorKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKysjaW5jbHVkZSA8JGFjX2hlYWRlcj4KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2hlYWRlcl9jb21waWxlcj1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisrJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorKworKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICIgPiY2OyB9CisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8JGFjX2hlYWRlcj4KKytfQUNFT0YKKytpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisrICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICBhY19oZWFkZXJfcHJlcHJvYz1ubworK2ZpCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorKworKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworKyAgICA7OworKyAgbm86eWVzOiogKQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisrCisrICAgIDs7CisrZXNhYworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gIiA+JjY7IH0KKytpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKytmaQorK2FjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorKwkJICRhc19lY2hvICIkYXNfdmFsIidgCisrCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisrCisrZmkKKythc192YWw9YGV2YWwgJ2FzX3ZhbD0keyckYXNfYWNfSGVhZGVyJ30KKysJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorKyAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbgorKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorK19BQ0VPRgorKworIGZpCisrCisgZG9uZQorIAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm87IHRoZW4KK0BAIC0yMzk1LDcgKzU3MjgsOCBAQAorICBVX0hBVkVfSU5UVFlQRVNfSD0xCisgZmkKKyBpZiB0ZXN0ICIkQ0MiID0gY2NjOyB0aGVuCistIGVjaG8gIiRhY190IiIiQyBjb21waWxlciBzZXQgdG8gQ0NDICR7Q0N9IiAiIDE+JjYKKysgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogXCJDIGNvbXBpbGVyIHNldCB0byBDQ0MgJHtDQ31cIiAiID4mNQorKyRhc19lY2hvICJcIkMgY29tcGlsZXIgc2V0IHRvIENDQyAke0NDfVwiICIgPiY2OyB9CisgIGNhc2UgIiR7aG9zdH0iIGluCisgICAgICAgICBhbHBoYSotKi0qKSBVX0hBVkVfSU5UVFlQRVNfSD0wOworICBlc2FjCitAQCAtMjQwMywxNSArNTczNywxNyBAQAorIAorIAorIAorLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW9zdHJlYW0gb3IgLS13aXRob3V0LWlvc3RyZWFtIHdhcyBnaXZlbi4KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWlvc3RyZWFtIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfaW9zdHJlYW0rc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIHdpdGh2YWw9IiR3aXRoX2lvc3RyZWFtIgorLSAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKysgIHdpdGh2YWw9JHdpdGhfaW9zdHJlYW07IGNhc2UgIiR7d2l0aHZhbH0iIGluCisgCQlub25lKSBzdHJlYW1zPW5vbmUgOzsKKyAJCW9sZCkgc3RyZWFtcz0xOTg1MDYgOzsKKyAJCXN0ZCkgc3RyZWFtcz0xOTk3MTEgOzsKKyAJCWF1dG8pIHN0cmVhbXM9IDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtaW9zdHJlYW0iIDE+JjI7IGV4aXQgMTsgfSA7OworKwkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtaW9zdHJlYW0iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWlvc3RyZWFtIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIHN0cmVhbXM9CitAQCAtMjQyMSwxMyArNTc1NywxMiBAQAorIFVfSU9TVFJFQU1fU09VUkNFPTAKKyBpZiB0ZXN0IHgkc3RyZWFtcyAhPSB4bm9uZQorIHRoZW4KKy0gICAgCistICAgIGFjX2V4dD1DCistIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCisrCisrICAgIGFjX2V4dD1jcHAKKyBhY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCistYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY3h4X2Nyb3NzCisrYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisgCisgICAgIE9MRF9DWFhGTEFHUz0iJHtDWFhGTEFHU30iCisgICAgIGNhc2UgIiR7aWN1X2N2X2hvc3RfZnJhZ30iIGluCitAQCAtMjQzNSwxMzkgKzU3NzAsNDgxIEBACisgICAgICAgICAgICAgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1BQSIKKyAgICAgICAgIDs7CisgICAgIGVzYWMKKy0gICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjQ0MDogY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5IiA+JjUKKy0gICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI0NDIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlvc3RyZWFtIHVzYWJpbGl0eSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5Li4uICIgPiY2OyB9CisrCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8aW9zdHJlYW0+CistaW50IG1haW4oKSB7CisraW50CisrbWFpbiAoKQorK3sKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNDQ5OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgIGFjX2N2X2hlYWRlcl9pb3N0cmVhbT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9oZWFkZXJfaW9zdHJlYW09bm8KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfaGVhZGVyX2lvc3RyZWFtPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgaWYgdGVzdCAkaWN1X2N2X2hvc3RfZnJhZyA9IG1oLWN5Z3dpbi1tc3ZjCisgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X2hlYWRlcl9pb3N0cmVhbT15ZXMKKyAgICAgZmkKKy0gICAgZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iIDE+JjYKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iID4mNjsgfQorICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW9zdHJlYW0gPSB5ZXMKKyAgICAgdGhlbgorICAgICAgICAgVV9JT1NUUkVBTV9TT1VSQ0U9MTk5NzExCisgICAgIGVsc2UKKyAgICAgICAgIENYWEZMQUdTPSIke09MRF9DWFhGTEFHU30iCistICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjQ3MDogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CisrICAgICAgICBhY19leHQ9Y3BwCisrYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKythY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIGlmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ1hYQ1BQJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisrICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGFjX2V4dD1DCistIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCistYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPScke0NYWC1nKyt9IC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworLSAgQ1hYQ1BQPSIke0NYWC1nKyt9IC1FIgorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI0ODMgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3RkbGliLmg+CistRU9GCistYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKy17IChldmFsIGVjaG8gY29uZmlndXJlOjI0ODg6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CistYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorLWlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCisrICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisrICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKysgICAgZG8KKysgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCisrZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIENYWENQUD0vbGliL2NwcAorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKy0gIGFjX2N2X3Byb2dfQ1hYQ1BQPSIkQ1hYQ1BQIgorLWFjX2V4dD1DCistIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCistYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKy1hY19jb21waWxlPScke0NYWC1nKyt9IC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworLWZpCistZmkKKy1DWFhDUFA9IiRhY19jdl9wcm9nX0NYWENQUCIKKy1lY2hvICIkYWNfdCIiJENYWENQUCIgMT4mNgorLQorLWFjX3NhZmU9YGVjaG8gImlvc3RyZWFtLmgiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpb3N0cmVhbS5oIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjUxNDogY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmgiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjUxOSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxpb3N0cmVhbS5oPgorLUVPRgorLWFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCisteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNTI0OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKy1pZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPXllcyIKKy1lbHNlCistICBlY2hvICIkYWNfZXJyIiA+JjUKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT1ubyIKKysKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorKworKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKysgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorK19BQ0VPRgorK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9OyB0aGVuCisrICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorK2NvbnRpbnVlCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKythY19wcmVwcm9jX29rPToKKyticmVhaworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKysKKytkb25lCisrIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKytpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorKyAgYnJlYWsKKytmaQorKworKyAgICBkb25lCisrICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKysKKytmaQorKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorK2Vsc2UKKysgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQorKyRhc19lY2hvICIkQ1hYQ1BQIiA+JjY7IH0KKythY19wcmVwcm9jX29rPWZhbHNlCisrZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKytkbworKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisrICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKysgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysJCSAgICAgU3ludGF4IGVycm9yCisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgIDoKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCisrY29udGludWUKKytmaQorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCisrY29udGludWUKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrICAjIFBhc3NlcyBib3RoIHRlc3RzLgorK2FjX3ByZXByb2Nfb2s9OgorK2JyZWFrCisgZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorKworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisrCisrZG9uZQorKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgIDoKKyBlbHNlCistICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorK3sgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKKytTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKytmaQorKworK2FjX2V4dD1jcHAKKythY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKythY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorKworKworK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2lvc3RyZWFtX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmguLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9pb3N0cmVhbV9oK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjY7IH0KKytlbHNlCisrICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCB1c2FiaWxpdHkiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlvc3RyZWFtLmggdXNhYmlsaXR5Li4uICIgPiY2OyB9CisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorKyNpbmNsdWRlIDxpb3N0cmVhbS5oPgorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19oZWFkZXJfY29tcGlsZXI9bm8KKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKysKKysjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCBwcmVzZW5jZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaW9zdHJlYW0uaCBwcmVzZW5jZS4uLiAiID4mNjsgfQorK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrI2luY2x1ZGUgPGlvc3RyZWFtLmg+CisrX0FDRU9GCisraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCisrZmkKKysKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CisrJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisrCisrIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKysgICAgOzsKKysgIG5vOnllczoqICkKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorKworKyAgICA7OworK2VzYWMKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmgiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpb3N0cmVhbS5oLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfaW9zdHJlYW1faCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19jdl9oZWFkZXJfaW9zdHJlYW1faD0kYWNfaGVhZGVyX3ByZXByb2MKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfaW9zdHJlYW1faCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfaW9zdHJlYW1faCIgPiY2OyB9CisrCisgZmkKKyAKKysKKyAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oID0geWVzOyB0aGVuCistICAgICAgICAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBvc3RyZWFtIGlzIHJlYWxseSBkZWZpbmVkIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjU0NzogY2hlY2tpbmcgd2hldGhlciBvc3RyZWFtIGlzIHJlYWxseSBkZWZpbmVkIiA+JjUKKy0gICAgICAgICAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaW9zdHJlYW1fb2snK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjU1MiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgb3N0cmVhbSBpcyByZWFsbHkgZGVmaW5lZC4uLiAiID4mNjsgfQorKyAgICAgICAgICAgIGlmIHRlc3QgIiR7YWNfY3ZfaW9zdHJlYW1fb2src2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8aW9zdHJlYW0uaD4KKy1pbnQgbWFpbigpIHsKKytpbnQKKyttYWluICgpCisreworIG9zdHJlYW0gJnRlc3RvdXQgPSBjb3V0OyB0ZXN0b3V0IDw8ICJ0ZXN0IiA8PCBlbmRsOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI1NTk6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl9pb3N0cmVhbV9vaz15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9pb3N0cmVhbV9vaz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9pb3N0cmVhbV9vaz1ubworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyAKKy0gICAgICAgICAgICBlY2hvICIkYWNfdCIiJGFjX2N2X2lvc3RyZWFtX29rIiAxPiY2CisrICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2lvc3RyZWFtX29rIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2lvc3RyZWFtX29rIiA+JjY7IH0KKyAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9pb3N0cmVhbV9vayA9IHllcworICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgVV9JT1NUUkVBTV9TT1VSQ0U9MTk4NTA2CitAQCAtMjU4NywxMDggKzYyNjQsNDI1IEBACisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYworICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiAxPiYyOyBleGl0IDE7IH0KKysgICAgICAgICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgZmkKKyAgICAgZmkKKyBmaQorIAorIGFjX2V4dD1jCistIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCistYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworLWFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKythY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisrCisgCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjI2MDU6IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2JpZ2VuZGlhbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorKyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorICAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorLSMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI2MTIgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLgorKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpZm5kZWYgX19BUFBMRV9DQ19fCisrCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorKwkgICAgICNlbmRpZgorKwkgICAgIHR5cGVkZWYgaW50IGR1bW15OworKworK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKworKwkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcworKwkjIHRoZXJlIGFyZSBzb21lIC1hcmNoIGZsYWdzLiAgTm90ZSB0aGF0ICpwcGMqIGFsc28gbWF0Y2hlcworKwkjIHBwYzY0LiAgVGhpcyBjaGVjayBpcyBhbHNvIHJhdGhlciBsZXNzIHRoYW4gaWRlYWwuCisrCWNhc2UgIiR7Q0N9ICR7Q0ZMQUdTfSAke0NQUEZMQUdTfSAke0xERkxBR1N9IiBpbiAgIygKKysJICAqLWFyY2gqcHBjKnwqLWFyY2gqaTM4Nip8Ki1hcmNoKng4Nl82NCopIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbDs7CisrCWVzYWMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisrICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KKysgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+CistaW50IG1haW4oKSB7CisrCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorIAorLSNpZiAhQllURV9PUkRFUiB8fCAhQklHX0VORElBTiB8fCAhTElUVExFX0VORElBTgorLSBib2d1cyBlbmRpYW4gbWFjcm9zCistI2VuZGlmCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjYyMzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorK2ludAorK21haW4gKCkKKyt7CisrI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorKwkJICAgICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwKKysJCSAgICAgJiYgTElUVExFX0VORElBTikKKysJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworKwkgICAgICNlbmRpZgorKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjYyNyAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorLWludCBtYWluKCkgeworKwkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorIAorK2ludAorK21haW4gKCkKKyt7CisgI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgorLSBub3QgYmlnIGVuZGlhbgorLSNlbmRpZgorLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI2Mzg6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysJCSBub3QgYmlnIGVuZGlhbgorKwkJI2VuZGlmCisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9jX2JpZ2VuZGlhbj1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9jX2JpZ2VuZGlhbj1ubworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCistaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCistaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKy0gICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nIiAxPiYyOyBleGl0IDE7IH0KKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjY1OCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLW1haW4gKCkgeworLSAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworLSAgdW5pb24KKy0gIHsKKy0gICAgbG9uZyBsOworLSAgICBjaGFyIGNbc2l6ZW9mIChsb25nKV07CistICB9IHU7CistICB1LmwgPSAxOworLSAgZXhpdCAodS5jW3NpemVvZiAobG9uZykgLSAxXSA9PSAxKTsKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysgICAgZmkKKysgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisrICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KKysgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysKKytpbnQKKyttYWluICgpCisreworKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisrCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKysJICAgICAjZW5kaWYKKysKKysgIDsKKysgIHJldHVybiAwOworIH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI2NzE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKy10aGVuCistICBhY19jdl9jX2JpZ2VuZGlhbj1ubworLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1mciBjb25mdGVzdCoKKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisraW50CisrbWFpbiAoKQorK3sKKysjaWZuZGVmIF9CSUdfRU5ESUFOCisrCQkgbm90IGJpZyBlbmRpYW4KKysJCSNlbmRpZgorKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9jX2JpZ2VuZGlhbj1ubworK2ZpCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWZyIGNvbmZ0ZXN0KgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKyAgICBmaQorKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKysgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisrICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKysgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKytzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisrCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9OworKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKysJCWludCB1c2VfYXNjaWkgKGludCBpKSB7CisrCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworKwkJfQorKwkJc2hvcnQgaW50IGViY2RpY19paVtdID0KKysJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisrCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorKwkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKKysJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworKwkJfQorKwkJZXh0ZXJuIGludCBmb287CisrCisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KKysJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCisrCSAgICBmaQorKwkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorKwkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgorKwkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKysJICAgICAgZWxzZQorKwkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/CisrCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisrCSAgICAgIGZpCisrCSAgICBmaQorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKyBmaQorIAorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworKworKwkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKysJICAgICB1bmlvbgorKwkgICAgIHsKKysJICAgICAgIGxvbmcgaW50IGw7CisrCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworKwkgICAgIH0gdTsKKysJICAgICB1LmwgPSAxOworKwkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9jX2JpZ2VuZGlhbj1ubworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysoIGV4aXQgJGFjX3N0YXR1cyApCisrYWNfY3ZfY19iaWdlbmRpYW49eWVzCisgZmkKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9jX2JpZ2VuZGlhbiIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0geWVzOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKy0jZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCistRU9GCisgCisrICAgIGZpCisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQorKyRhc19lY2hvICIkYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQorKyBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorKyAgIHllcykKKysgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorK19BQ0VPRgorKzs7ICMoCisrICAgbm8pCisrICAgICAgOzsgIygKKysgICB1bml2ZXJzYWwpCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxCisrX0FDRU9GCisrCisrICAgICA7OyAjKAorKyAgICopCisrICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCisrIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCisrIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworKyBlc2FjCisgCisgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSBubzsgdGhlbgorIFVfSVNfQklHX0VORElBTj0wCitAQCAtMjcwMSw4NCArNjY5NSwxNTcgQEAKKyAKKyBVX0hBVkVfTkxfTEFOR0lORk9fQ09ERVNFVD0wCisgVV9OTF9MQU5HSU5GT19DT0RFU0VUPS0xCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjcwNjogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19ubF9sYW5naW5mbycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyNzExICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubF9sYW5naW5mbyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9mdW5jX25sX2xhbmdpbmZvK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIG5sX2xhbmdpbmZvIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgbmxfbGFuZ2luZm8uCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSBubF9sYW5naW5mbyBpbm5vY3VvdXNfbmxfbGFuZ2luZm8KKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCistICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbmxfbGFuZ2luZm8oKTsgYmVsb3cuICAqLworLSNpbmNsdWRlIDxhc3NlcnQuaD4KKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyIG5sX2xhbmdpbmZvKCk7CisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbmxfbGFuZ2luZm8gKCk7IGJlbG93LgorKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisrICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisgCistaW50IG1haW4oKSB7CisrI2lmZGVmIF9fU1REQ19fCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2VuZGlmCisgCisrI3VuZGVmIG5sX2xhbmdpbmZvCisrCisrLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisrICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisrICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisrI2VuZGlmCisrY2hhciBubF9sYW5naW5mbyAoKTsKKyAvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfbmxfbGFuZ2luZm8pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX25sX2xhbmdpbmZvKQorKyNpZiBkZWZpbmVkIF9fc3R1Yl9ubF9sYW5naW5mbyB8fCBkZWZpbmVkIF9fc3R1Yl9fX25sX2xhbmdpbmZvCisgY2hva2UgbWUKKy0jZWxzZQorLW5sX2xhbmdpbmZvKCk7CisgI2VuZGlmCisgCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjczNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX25sX2xhbmdpbmZvPXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX25sX2xhbmdpbmZvPW5vIgorLWZpCistcm0gLWYgY29uZnRlc3QqCistZmkKKy0KKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9mdW5jXydubF9sYW5naW5mb2BcIiA9IHllcyI7IHRoZW4KKy0gIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKytpbnQKKyttYWluICgpCisreworK3JldHVybiBubF9sYW5naW5mbyAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm89eWVzCisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9mdW5jX25sX2xhbmdpbmZvPW5vCisrZmkKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX25sX2xhbmdpbmZvIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19ubF9sYW5naW5mbyIgPSB4IiJ5ZXM7IHRoZW4KKyAgIFVfSEFWRV9OTF9MQU5HSU5GTz0xCisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistVV9IQVZFX05MX0xBTkdJTkZPPTAKKysgIFVfSEFWRV9OTF9MQU5HSU5GTz0wCisgZmkKKyAKKyAKKyBpZiB0ZXN0ICRVX0hBVkVfTkxfTEFOR0lORk8gLWVxIDE7IHRoZW4KKy0gIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbydzIGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgY29kZXNldCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjI3NTc6IGNoZWNraW5nIGZvciBubF9sYW5naW5mbydzIGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgY29kZXNldCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8ncyBhcmd1bWVudCB0byBvYnRhaW4gdGhlIGNvZGVzZXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbydzIGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgY29kZXNldC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCisgICBhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0PSJ1bmtub3duIgorICAgZm9yIGEgaW4gQ09ERVNFVCBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FOyBkbworLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI3NjQgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CistaW50IG1haW4oKSB7CisraW50CisrbWFpbiAoKQorK3sKKyBubF9sYW5naW5mbygkYSk7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjc3MTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0PSIkYSI7IGJyZWFrCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBkb25lCisgZmkKKy0KKy1lY2hvICIkYWNfdCIiJGFjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0IiA+JjY7IH0KKyAgIGlmIHRlc3QgeCRhY19jdl9ubF9sYW5naW5mb19jb2Rlc2V0ICE9IHh1bmtub3duCisgICB0aGVuCisgICAgICAgVV9IQVZFX05MX0xBTkdJTkZPX0NPREVTRVQ9MQorQEAgLTI3ODgsNDIgKzY4NTUsNzEgQEAKKyAKKyAKKyAKKy1hY19leHQ9QworLSMgQ1hYRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorK2FjX2V4dD1jcHAKKyBhY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCistYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKy1jcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY3h4X2Nyb3NzCistCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjgwMDogY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbmFtZXNwYWNlX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI4MDUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKythY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisrYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKythY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbmFtZXNwYWNlIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X25hbWVzcGFjZV9vaytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgICBuYW1lc3BhY2UgeF92ZXJzaW9uIHt2b2lkIGYoKXt9fTsKKyAgICAgbmFtZXNwYWNlIHggPSB4X3ZlcnNpb247CisgICAgIHVzaW5nIG5hbWVzcGFjZSB4X3ZlcnNpb247CistICAgIAorLWludCBtYWluKCkgeworKworK2ludAorK21haW4gKCkKKyt7CisgICAgIGYoKTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODE1OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3ZfbmFtZXNwYWNlX29rPXllcworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X25hbWVzcGFjZV9vaz1ubworKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl9uYW1lc3BhY2Vfb2s9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KiAKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfbmFtZXNwYWNlX29rIiAxPiY2CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X25hbWVzcGFjZV9vayIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9uYW1lc3BhY2Vfb2siID4mNjsgfQorIFVfSEFWRV9OQU1FU1BBQ0U9MQorIGlmIHRlc3QgJGFjX2N2X25hbWVzcGFjZV9vayA9IG5vCisgdGhlbgorQEAgLTI4MzEsMTYgKzY5MjcsMTkgQEAKKyBmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwcm9wZXJseSBvdmVycmlkaW5nIG5ldyBhbmQgZGVsZXRlIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjgzNjogY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUiID4mNQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHJvcGVybHkgb3ZlcnJpZGluZyBuZXcgYW5kIGRlbGV0ZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUuLi4gIiA+JjY7IH0KKyBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OPTAKKyBVX0hBVkVfUExBQ0VNRU5UX05FVz0wCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CisraWYgdGVzdCAiJHthY19jdl9vdmVycmlkZV9jeHhfYWxsb2NhdGlvbl9vaytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMjg0MyAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICBjbGFzcyBVT2JqZWN0IHsKKyAgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSB7cmV0dXJuIG1hbGxvYyhzaXplKTt9CitAQCAtMjg0OCwzNSArNjk0Nyw2NSBAQAorICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwKSB7ZnJlZShwKTt9CisgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcCkge2ZyZWUocCk7fQorICAgICB9OworLSAgICAKKy1pbnQgbWFpbigpIHsKKy0gICAgCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg1NzogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KiAKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siID4mNQorKyRhc19lY2hvICIkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rID0geWVzCisgdGhlbgorICAgICBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OPTEKKy0gICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHBsYWNlbWVudCBuZXcgYW5kIGRlbGV0ZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjI4NzQ6IGNoZWNraW5nIGZvciBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUiID4mNQorLSAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyODc5ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlLi4uICIgPiY2OyB9CisrICAgIGlmIHRlc3QgIiR7YWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaytzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgY2xhc3MgVU9iamVjdCB7CisgICAgICAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUpIHtyZXR1cm4gbWFsbG9jKHNpemUpO30KK0BAIC0yODg2LDI0ICs3MDE1LDUxIEBACisgICAgICAgICB2b2lkICogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcHRyKSB7IHJldHVybiBwdHI7IH0KKyAgICAgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgdm9pZCAqKSB7fQorICAgICAgICAgfTsKKy0gICAgICAgIAorLWludCBtYWluKCkgeworLSAgICAgICAgCistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg5NTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaz15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rPW5vCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2s9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KiAKKysKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorLSAgICBlY2hvICIkYWNfdCIiJGFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2siIDE+JjYKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2siID4mNQorKyRhc19lY2hvICIkYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vayIgPiY2OyB9CisgICAgIGlmIHRlc3QgJGFjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2sgPSB5ZXMKKyAgICAgdGhlbgorICAgICAgICAgVV9IQVZFX1BMQUNFTUVOVF9ORVc9MQorQEAgLTI5MTMsNTkgKzcwNjksOTYgQEAKKyAKKyAKKyBhY19leHQ9YworLSMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKyBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworLWFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKy1hY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCistY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCistCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHBvcGVuIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MjkyNDogY2hlY2tpbmcgZm9yIHBvcGVuIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19wb3Blbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAyOTI5ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisrYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorKworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcG9wZW4iID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwb3Blbi4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19wb3BlbitzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSBwb3BlbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHBvcGVuLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgcG9wZW4gaW5ub2N1b3VzX3BvcGVuCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHBvcGVuKCk7IGJlbG93LiAgKi8KKy0jaW5jbHVkZSA8YXNzZXJ0Lmg+CistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciBwb3BlbigpOworKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHBvcGVuICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorIAorLWludCBtYWluKCkgeworKyN1bmRlZiBwb3BlbgorIAorKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgcG9wZW4gKCk7CisgLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKy0jaWYgZGVmaW5lZCAoX19zdHViX3BvcGVuKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wb3BlbikKKysjaWYgZGVmaW5lZCBfX3N0dWJfcG9wZW4gfHwgZGVmaW5lZCBfX3N0dWJfX19wb3BlbgorIGNob2tlIG1lCistI2Vsc2UKKy1wb3BlbigpOworICNlbmRpZgorIAorLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5NTI6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfZnVuY19wb3Blbj15ZXMiCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfZnVuY19wb3Blbj1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLWZpCistCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18ncG9wZW5gXCIgPSB5ZXMiOyB0aGVuCistICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CistICA6CistZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gcG9wZW4gKCk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisrICBhY19jdl9mdW5jX3BvcGVuPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19wb3Blbj1ubworK2ZpCisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19wb3BlbiIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9mdW5jX3BvcGVuIiA+JjY7IH0KKyAKKyBpZiB0ZXN0IHgkYWNfY3ZfZnVuY19wb3BlbiA9IHh5ZXMKKyB0aGVuCitAQCAtMjk3NSwxMDUgKzcxNjgsMTgxIEBACisgZmkKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgdHpzZXQiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZToyOTgwOiBjaGVja2luZyBmb3IgdHpzZXQiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDI5ODUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6c2V0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdHpzZXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfdHpzZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgdHpzZXQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyB0enNldC4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIHR6c2V0IGlubm9jdW91c190enNldAorKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB0enNldCgpOyBiZWxvdy4gICovCistI2luY2x1ZGUgPGFzc2VydC5oPgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgdHpzZXQoKTsKKysgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB0enNldCAoKTsgYmVsb3cuCisrICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKyAKKy1pbnQgbWFpbigpIHsKKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKyAKKysjdW5kZWYgdHpzZXQKKysKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIHR6c2V0ICgpOworIC8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgKF9fc3R1Yl90enNldCkgfHwgZGVmaW5lZCAoX19zdHViX19fdHpzZXQpCisrI2lmIGRlZmluZWQgX19zdHViX3R6c2V0IHx8IGRlZmluZWQgX19zdHViX19fdHpzZXQKKyBjaG9rZSBtZQorLSNlbHNlCistdHpzZXQoKTsKKyAjZW5kaWYKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDA4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfdHpzZXQ9eWVzIgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfdHpzZXQ9bm8iCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKy1maQorLQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3R6c2V0YFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHR6c2V0ICgpOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorKyAgYWNfY3ZfZnVuY190enNldD15ZXMKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X2Z1bmNfdHpzZXQ9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfdHpzZXQiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfZnVuY190enNldCIgPiY2OyB9CisgCisgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfdHpzZXQgPSB4eWVzCisgdGhlbgorICAgICBVX1RaU0VUPXR6c2V0CisgZWxzZQorLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgX3R6c2V0IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzAzMjogY2hlY2tpbmcgZm9yIF90enNldCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMwMzcgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfdHpzZXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdHpzZXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfX3R6c2V0K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIF90enNldCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIF90enNldC4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIF90enNldCBpbm5vY3VvdXNfX3R6c2V0CisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF90enNldCgpOyBiZWxvdy4gICovCistI2luY2x1ZGUgPGFzc2VydC5oPgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgX3R6c2V0KCk7CisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX3R6c2V0ICgpOyBiZWxvdy4KKysgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworKyNpZmRlZiBfX1NURENfXworKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPGFzc2VydC5oPgorKyNlbmRpZgorIAorLWludCBtYWluKCkgeworKyN1bmRlZiBfdHpzZXQKKyAKKysvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKysgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKysjZW5kaWYKKytjaGFyIF90enNldCAoKTsKKyAvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfX3R6c2V0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19fdHpzZXQpCisrI2lmIGRlZmluZWQgX19zdHViX190enNldCB8fCBkZWZpbmVkIF9fc3R1Yl9fX190enNldAorIGNob2tlIG1lCistI2Vsc2UKKy1fdHpzZXQoKTsKKyAjZW5kaWYKKyAKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDYwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGV2YWwgImFjX2N2X2Z1bmNfX3R6c2V0PXllcyIKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9mdW5jX190enNldD1ubyIKKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLWZpCistCistaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nX3R6c2V0YFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorLWVsc2UKKy0gIGVjaG8gIiRhY190IiJubyIgMT4mNgorK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIF90enNldCAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X2Z1bmNfX3R6c2V0PXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfZnVuY19fdHpzZXQ9bm8KKytmaQorKworK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfX3R6c2V0IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X2Z1bmNfX3R6c2V0IiA+JjY7IH0KKyAKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfX3R6c2V0ID0geHllcworICAgICB0aGVuCitAQCAtMzA4MSwxNCArNzM1MCwxNyBAQAorICAgICBmaQorIGZpCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHR6bmFtZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjMwODY6IGNoZWNraW5nIGZvciB0em5hbWUiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfdHpuYW1lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMwOTEgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6bmFtZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHR6bmFtZS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdmFyX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZm5kZWYgX19VU0VfUE9TSVgKKyAjZGVmaW5lIF9fVVNFX1BPU0lYCisgI2VuZGlmCitAQCAtMzA5Niw2OCArNzM2OCwxMjYgQEAKKyAjaWZuZGVmIHR6bmFtZSAvKiBGb3IgU0dJLiAgKi8KKyBleHRlcm4gY2hhciAqdHpuYW1lW107IC8qIFJTNjAwMCBhbmQgb3RoZXJzIHJlamVjdCBjaGFyICoqdHpuYW1lLiAgKi8KKyAjZW5kaWYKKy1pbnQgbWFpbigpIHsKKytpbnQKKyttYWluICgpCisreworIGF0b2koKnR6bmFtZSk7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzEwNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl92YXJfdHpuYW1lPXllcworIGVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3Zhcl90em5hbWU9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl92YXJfdHpuYW1lPW5vCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3Zhcl90em5hbWUiIDE+JjYKKytybSAtcmYgY29uZnRlc3QuZFNZTQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl92YXJfdHpuYW1lIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Zhcl90em5hbWUiID4mNjsgfQorIGlmIHRlc3QgJGFjX2N2X3Zhcl90em5hbWUgPSB5ZXM7IHRoZW4KKyAgIFVfVFpOQU1FPXR6bmFtZQorIGVsc2UKKy0gIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBfdHpuYW1lIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzEyMTogY2hlY2tpbmcgZm9yIF90em5hbWUiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfX3R6bmFtZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzMTI2ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90em5hbWUiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdHpuYW1lLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl92YXJfX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgI2luY2x1ZGUgPHRpbWUuaD4KKyAgIGV4dGVybiBjaGFyICpfdHpuYW1lW107CistICAKKy1pbnQgbWFpbigpIHsKKysKKytpbnQKKyttYWluICgpCisreworICAgYXRvaSgqX3R6bmFtZSk7CistOyByZXR1cm4gMDsgfQorLUVPRgorLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzEzNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChhY190cnk9IiRhY19saW5rIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKysJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisrCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgICAgICB9OyB0aGVuCisgICBhY19jdl92YXJfX3R6bmFtZT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl92YXJfX3R6bmFtZT1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X3Zhcl9fdHpuYW1lPW5vCisgZmkKKyAKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3Zhcl9fdHpuYW1lIiAxPiY2Cisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX190em5hbWUiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdmFyX190em5hbWUiID4mNjsgfQorICAgICBpZiB0ZXN0ICRhY19jdl92YXJfX3R6bmFtZSA9IHllczsgdGhlbgorICAgICAgIFVfVFpOQU1FPV90em5hbWUKKyAgICAgZmkKKyBmaQorIAorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB0aW1lem9uZSIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjMxNTU6IGNoZWNraW5nIGZvciB0aW1lem9uZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl90aW1lem9uZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzMTYwICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0aW1lem9uZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRpbWV6b25lLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl92YXJfdGltZXpvbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZuZGVmIF9fVVNFX1BPU0lYCisgI2RlZmluZSBfX1VTRV9QT1NJWAorICNlbmRpZgorQEAgLTMxNjYsODYgKzc0OTYsMTcwIEBACisgI2VuZGlmCisgI2luY2x1ZGUgPHRpbWUuaD4KKyAKKy1pbnQgbWFpbigpIHsKKytpbnQKKyttYWluICgpCisreworIHRpbWV6b25lID0gMTsKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTc0OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKyAgIGFjX2N2X3Zhcl90aW1lem9uZT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl92YXJfdGltZXpvbmU9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl92YXJfdGltZXpvbmU9bm8KKyBmaQorIAorLWVjaG8gIiRhY190IiIkYWNfY3ZfdmFyX3RpbWV6b25lIiAxPiY2Cisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX3RpbWV6b25lIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Zhcl90aW1lem9uZSIgPiY2OyB9CisgVV9IQVZFX1RJTUVaT05FPTAKKyBpZiB0ZXN0ICRhY19jdl92YXJfdGltZXpvbmUgPSB5ZXM7IHRoZW4KKyAgIFVfVElNRVpPTkU9dGltZXpvbmUKKyAgIFVfSEFWRV9USU1FWk9ORT0xCisgZWxzZQorLSAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF9fdGltZXpvbmUiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozMTkzOiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl9fX3RpbWV6b25lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMxOTggImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKysgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fdGltZXpvbmUuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Zhcl9fX3RpbWV6b25lK3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisgICAjaW5jbHVkZSA8dGltZS5oPgorLSAgCistaW50IG1haW4oKSB7CisrCisraW50CisrbWFpbiAoKQorK3sKKyAgIF9fdGltZXpvbmUgPSAxOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyMDY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3ZfdmFyX19fdGltZXpvbmU9eWVzCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdmFyX19fdGltZXpvbmU9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl92YXJfX190aW1lem9uZT1ubworIGZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl92YXJfX190aW1lem9uZSIgMT4mNgorK3JtIC1yZiBjb25mdGVzdC5kU1lNCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Zhcl9fX3RpbWV6b25lIiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3Zhcl9fX3RpbWV6b25lIiA+JjY7IH0KKyAgIGlmIHRlc3QgJGFjX2N2X3Zhcl9fX3RpbWV6b25lID0geWVzOyB0aGVuCisgICAgIFVfVElNRVpPTkU9X190aW1lem9uZQorICAgICBVX0hBVkVfVElNRVpPTkU9MQorICAgZWxzZQorLSAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgX3RpbWV6b25lIiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzIyNDogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl9fdGltZXpvbmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzIyOSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF90aW1lem9uZS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdmFyX190aW1lem9uZStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICAgICAjaW5jbHVkZSA8dGltZS5oPgorLSAgICAKKy1pbnQgbWFpbigpIHsKKysKKytpbnQKKyttYWluICgpCisreworICAgICBfdGltZXpvbmUgPSAxOworLTsgcmV0dXJuIDA7IH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyMzc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisrCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKysgICAgICAgfTsgdGhlbgorICAgYWNfY3ZfdmFyX190aW1lem9uZT15ZXMKKyBlbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl92YXJfX3RpbWV6b25lPW5vCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfdmFyX190aW1lem9uZT1ubworIGZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl92YXJfX3RpbWV6b25lIiAxPiY2Cisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX190aW1lem9uZSIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl92YXJfX3RpbWV6b25lIiA+JjY7IH0KKyAgICAgaWYgdGVzdCAkYWNfY3ZfdmFyX190aW1lem9uZSA9IHllczsgdGhlbgorICAgICAgIFVfVElNRVpPTkU9X3RpbWV6b25lCisgICAgICAgVV9IQVZFX1RJTUVaT05FPTEKK0BAIC0zMjU1LDM3MSArNzY2OSw4MzUgQEAKKyAKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjMyNjA6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX3N0ZGMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzI2NSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkYXJnLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxmbG9hdC5oPgorLUVPRgorLWFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCisteyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMjczOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorLWFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKy1pZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQ4X3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQ4X3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50OF90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIGVjaG8gIiRhY19lcnIiID4mNQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKy1maQorLXJtIC1mIGNvbmZ0ZXN0KgorLQorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCistICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCistY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMyOTAgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhY19jdl90eXBlX2ludDhfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKGludDhfdCkpCisrICAgICAgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisraWYgKHNpemVvZiAoKGludDhfdCkpKQorKwkgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICAgOgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCistZmkKKy1ybSAtZiBjb25mdGVzdCoKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKysJYWNfY3ZfdHlwZV9pbnQ4X3Q9eWVzCisgZmkKKyAKKy1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorLSAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzMzA4ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLUVPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gIGVncmVwICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIDoKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl9oZWFkZXJfc3RkYz1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisgCisgZmkKKyAKKy1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorLSAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQ4X3QiID0geCIieWVzOyB0aGVuCisgICA6CisgZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMzMjkgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8Y3R5cGUuaD4KKy0jZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKy0jZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKy0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQorLWludCBtYWluICgpIHsgaW50IGk7IGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKy1pZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKSBleGl0KDIpOworLWV4aXQgKDApOyB9CisgCistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMzQwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCistdGhlbgorLSAgOgorLWVsc2UKKy0gIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CistICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKy0gIHJtIC1mciBjb25mdGVzdCoKKy0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCistZmkKKy1ybSAtZnIgY29uZnRlc3QqCistZmkKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKytfQUNFT0YKKyAKKyBmaQorLWZpCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfc3RkYyIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKy0jZGVmaW5lIFNURENfSEVBREVSUyAxCistRU9GCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50OF90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdWludDhfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50OF90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGFjX2N2X3R5cGVfdWludDhfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKHVpbnQ4X3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKCh1aW50OF90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorKwlhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCisgZmkKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50OF90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzM2NDogY2hlY2tpbmcgZm9yIGludDhfdCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfaW50OF90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDMzNjkgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmIFNURENfSEVBREVSUworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistI2VuZGlmCistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIihefFteYS16QS1aXzAtOV0paW50OF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDhfdD15ZXMKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDhfdD1ubworLWZpCistcm0gLWYgY29uZnRlc3QqCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCistZmkKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50OF90IiAxPiY2CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQ4X3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKy1FT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB1aW50OF90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzM5NzogY2hlY2tpbmcgZm9yIHVpbnQ4X3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQ4X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzQwMiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSl1aW50OF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCistZWxzZQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdHlwZV91aW50OF90PW5vCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50OF90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3R5cGVfdWludDhfdCIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ4X3QiID0geCIieWVzOyB0aGVuCisrICA6CisrZWxzZQorIAorLWZpCistZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3VpbnQ4X3QiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQ4X3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgdWludDhfdCB1bnNpZ25lZCBjaGFyCistRU9GCisrX0FDRU9GCisgCisgZmkKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50MTZfdCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjM0MzA6IGNoZWNraW5nIGZvciBpbnQxNl90IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9pbnQxNl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDM0MzUgImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmIFNURENfSEVBREVSUworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistI2VuZGlmCistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIihefFteYS16QS1aXzAtOV0paW50MTZfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdHlwZV9pbnQxNl90PXllcworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50MTZfdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludDE2X3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCisgICBhY19jdl90eXBlX2ludDE2X3Q9bm8KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mIChpbnQxNl90KSkKKysgICAgICAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICgoaW50MTZfdCkpKQorKwkgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgOgorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfdHlwZV9pbnQxNl90PXllcworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworIAorIGZpCistZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX2ludDE2X3QiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl90eXBlX2ludDE2X3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQxNl90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3R5cGVfaW50MTZfdCIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl90eXBlX2ludDE2X3QiID0geCIieWVzOyB0aGVuCisrICA6CisrZWxzZQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyAjZGVmaW5lIGludDE2X3Qgc2lnbmVkIHNob3J0CistRU9GCisrX0FDRU9GCisgCisgZmkKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDE2X3QiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozNDYzOiBjaGVja2luZyBmb3IgdWludDE2X3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQxNl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorLSNsaW5lIDM0NjggImNvbmZpZ3VyZSIKKy0jaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmIFNURENfSEVBREVSUworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistI2VuZGlmCistRU9GCistaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDE2X3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3R5cGVfdWludDE2X3Q9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MTZfdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpbnQxNl90Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnQxNl90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKyAgIGFjX2N2X3R5cGVfdWludDE2X3Q9bm8KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICh1aW50MTZfdCkpCisrICAgICAgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisraWYgKHNpemVvZiAoKHVpbnQxNl90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl90eXBlX3VpbnQxNl90PXllcworIGZpCistcm0gLWYgY29uZnRlc3QqCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworIAorIGZpCistZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3VpbnQxNl90IiAxPiY2CistaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50MTZfdCA9IG5vOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnQxNl90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3R5cGVfdWludDE2X3QiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50MTZfdCIgPSB4IiJ5ZXM7IHRoZW4KKysgIDoKKytlbHNlCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgdWludDE2X3QgdW5zaWduZWQgc2hvcnQKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbnQzMl90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzQ5NjogY2hlY2tpbmcgZm9yIGludDMyX3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX2ludDMyX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzUwMSAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlpbnQzMl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDMyX3Q9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQzMl90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50MzJfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKyAgIGFjX2N2X3R5cGVfaW50MzJfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKGludDMyX3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKChpbnQzMl90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl90eXBlX2ludDMyX3Q9eWVzCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisgCisgZmkKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50MzJfdCIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50MzJfdCA9IG5vOyB0aGVuCistICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDMyX3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9pbnQzMl90IiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50MzJfdCIgPSB4IiJ5ZXM7IHRoZW4KKysgIDoKKytlbHNlCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorICNkZWZpbmUgaW50MzJfdCBzaWduZWQgbG9uZworLUVPRgorK19BQ0VPRgorIAorIGZpCisgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHVpbnQzMl90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzUyOTogY2hlY2tpbmcgZm9yIHVpbnQzMl90IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV91aW50MzJfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzNTM0ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpZiBTVERDX0hFQURFUlMKKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0ZGRlZi5oPgorLSNlbmRpZgorLUVPRgorLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gIGVncmVwICIoXnxbXmEtekEtWl8wLTldKXVpbnQzMl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX3VpbnQzMl90PXllcworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDMyX3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50MzJfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50MzJfdCtzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyBlbHNlCistICBybSAtcmYgY29uZnRlc3QqCisgICBhY19jdl90eXBlX3VpbnQzMl90PW5vCisrY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorK2ludAorK21haW4gKCkKKyt7CisraWYgKHNpemVvZiAodWludDMyX3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKCh1aW50MzJfdCkpKQorKwkgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgOgorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfY3ZfdHlwZV91aW50MzJfdD15ZXMKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKyAKKyBmaQorLWVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV91aW50MzJfdCIgMT4mNgorLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDMyX3QgPSBubzsgdGhlbgorLSAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCisrCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50MzJfdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl90eXBlX3VpbnQzMl90IiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludDMyX3QiID0geCIieWVzOyB0aGVuCisrICA6CisrZWxzZQorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyAjZGVmaW5lIHVpbnQzMl90IHVuc2lnbmVkIGxvbmcKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbnQ2NF90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzU2MjogY2hlY2tpbmcgZm9yIGludDY0X3QiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX2ludDY0X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzU2NyAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlpbnQ2NF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBhY19jdl90eXBlX2ludDY0X3Q9eWVzCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQ2NF90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50NjRfdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQ2NF90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKy0gIHJtIC1yZiBjb25mdGVzdCoKKyAgIGFjX2N2X3R5cGVfaW50NjRfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKGludDY0X3QpKQorKyAgICAgICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKChpbnQ2NF90KSkpCisrCSAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICA6CisrZWxzZQorKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKwlhY19jdl90eXBlX2ludDY0X3Q9eWVzCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKyAKKy1maQorLWVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9pbnQ2NF90IiAxPiY2CistaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQ2NF90ID0gbm87IHRoZW4KKy0gIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKytmaQorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50NjRfdCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl90eXBlX2ludDY0X3QiID4mNjsgfQorK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQ2NF90IiA9IHgiInllczsgdGhlbgorKyAgOgorK2Vsc2UKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgI2RlZmluZSBpbnQ2NF90IHNpZ25lZCBsb25nIGxvbmcKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciB1aW50NjRfdCIiLi4uICRhY19jIiAxPiY2CistZWNobyAiY29uZmlndXJlOjM1OTU6IGNoZWNraW5nIGZvciB1aW50NjRfdCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfdWludDY0X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy1lbHNlCistICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzYwMCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaWYgU1REQ19IRUFERVJTCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy1FT0YKKy1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSl1aW50NjRfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgYWNfY3ZfdHlwZV91aW50NjRfdD15ZXMKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQ2NF90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgdWludDY0X3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDY0X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgYWNfY3ZfdHlwZV91aW50NjRfdD1ubworK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmIChzaXplb2YgKHVpbnQ2NF90KSkKKysgICAgICAgcmV0dXJuIDA7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoc2l6ZW9mICgodWludDY0X3QpKSkKKysJICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisrCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKysJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKysgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKysgIDoKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrCWFjX2N2X3R5cGVfdWludDY0X3Q9eWVzCisgZmkKKy1ybSAtZiBjb25mdGVzdCoKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytlbHNlCisrICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisgCisgZmkKKy1lY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfdWludDY0X3QiIDE+JjYKKy1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQ2NF90ID0gbm87IHRoZW4KKy0gIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorKworK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDY0X3QiID4mNQorKyRhc19lY2hvICIkYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY2OyB9CisraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ2NF90IiA9IHgiInllczsgdGhlbgorKyAgOgorK2Vsc2UKKysKKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgI2RlZmluZSB1aW50NjRfdCB1bnNpZ25lZCBsb25nIGxvbmcKKy1FT0YKKytfQUNFT0YKKyAKKyBmaQorIAorQEAgLTM2ODAsMTExICs4NTU4LDIzMiBAQAorIGZpCisgCisgCistYWNfc2FmZT1gZWNobyAid2NoYXIuaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCistZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHdjaGFyLmgiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozNjg2OiBjaGVja2luZyBmb3Igd2NoYXIuaCIgPiY1CistaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCistICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLWVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzNjkxICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2NoYXJfaCtzZXR9IiA9IHNldDsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2NoYXIuaC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3djaGFyX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNQorKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNjsgfQorK2Vsc2UKKysgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3Y2hhci5oIHVzYWJpbGl0eSIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2NoYXIuaCB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisgI2luY2x1ZGUgPHdjaGFyLmg+CistRU9GCistYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKy17IChldmFsIGVjaG8gY29uZmlndXJlOjM2OTY6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9CistYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorLWlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCistICBybSAtcmYgY29uZnRlc3QqCistICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorLWVsc2UKKy0gIGVjaG8gIiRhY19lcnIiID4mNQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLXJmIGNvbmZ0ZXN0KgorLSAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorLWZpCistcm0gLWYgY29uZnRlc3QqCistZmkKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorLSAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLSAgOgorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisrZmkKKysKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyskYXNfZWNobyAiJGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisrCisrIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdjaGFyLmggcHJlc2VuY2UiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdjaGFyLmggcHJlc2VuY2UuLi4gIiA+JjY7IH0KKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyNpbmNsdWRlIDx3Y2hhci5oPgorK19BQ0VPRgorK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorK2Nhc2UgIigoJGFjX3RyeSIgaW4KKysgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CisrZXNhYworK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKyskYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1CisrICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKysJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH07IHRoZW4KKysgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCisrZmkKKysKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CisrJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisrCisrIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisrICAgIDs7CisrICBubzp5ZXM6KiApCisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKysKKysgICAgOzsKKytlc2FjCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igd2NoYXIuaC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3djaGFyX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisgZWxzZQorLSAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisrICBhY19jdl9oZWFkZXJfd2NoYXJfaD0kYWNfaGVhZGVyX3ByZXByb2MKKyBmaQorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY2OyB9CisrCisrZmkKKysKKyAKKyBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID0gbm8KKyB0aGVuCisgICAgIFVfSEFWRV9XQ0hBUl9IPTAKKyAgICAgVV9IQVZFX1dDU0NQWT0wCisgZWxzZQorLSAgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKysgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyAjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCistRU9GCisrX0FDRU9GCisgCisgICAgIFVfSEFWRV9XQ0hBUl9IPTEKKy0gICAgICAgIAorLWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzcyOTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyB3Y3NjcHkiID4mNQorLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9zZWFyY2hfd2NzY3B5JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKy0gIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistZWxzZQorLSAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKy1hY19jdl9zZWFyY2hfd2NzY3B5PSJubyIKKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzczNiAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgd2NzY3B5KCk7CistCistaW50IG1haW4oKSB7Cistd2NzY3B5KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzQ3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3NlYXJjaF93Y3NjcHk9Im5vbmUgcmVxdWlyZWQiCistZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHdjc2NweS4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3djc2NweStzZXR9IiA9IHNldDsgdGhlbgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKytjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIgorKyNlbmRpZgorK2NoYXIgd2NzY3B5ICgpOworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIHdjc2NweSAoKTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytmb3IgYWNfbGliIGluICcnIHdjcyB3OyBkbworKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKysgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorKyAgZWxzZQorKyAgICBhY19yZXM9LWwkYWNfbGliCisrICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKysgIGZpCisrICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCisrY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisrCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisrICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKysJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisrICAgICAgIH07IHRoZW4KKysgIGFjX2N2X3NlYXJjaF93Y3NjcHk9JGFjX3JlcworK2Vsc2UKKysgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKysKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0KgorLXRlc3QgIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA9ICJubyIgJiYgZm9yIGkgaW4gd2NzIHc7IGRvCistTElCUz0iLWwkaSAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKy1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCistI2xpbmUgMzc1OCAiY29uZmlndXJlIgorLSNpbmNsdWRlICJjb25mZGVmcy5oIgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgd2NzY3B5KCk7CistCistaW50IG1haW4oKSB7Cistd2NzY3B5KCkKKy07IHJldHVybiAwOyB9CistRU9GCistaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzY5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKy0gIHJtIC1yZiBjb25mdGVzdCoKKy0gIGFjX2N2X3NlYXJjaF93Y3NjcHk9Ii1sJGkiCistYnJlYWsKKy1lbHNlCistICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorLSAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorKyAgaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfd2NzY3B5K3NldH0iID0gc2V0OyB0aGVuCisrICBicmVhaworIGZpCistcm0gLWYgY29uZnRlc3QqCisgZG9uZQorLUxJQlM9IiRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfd2NzY3B5K3NldH0iID0gc2V0OyB0aGVuCisrICA6CisrZWxzZQorKyAgYWNfY3Zfc2VhcmNoX3djc2NweT1ubworIGZpCisrcm0gY29uZnRlc3QuJGFjX2V4dAorK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF93Y3NjcHkiID4mNQorKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3djc2NweSIgPiY2OyB9CisrYWNfcmVzPSRhY19jdl9zZWFyY2hfd2NzY3B5CisraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4KKysgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisgCistZWNobyAiJGFjX3QiIiRhY19jdl9zZWFyY2hfd2NzY3B5IiAxPiY2CistaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF93Y3NjcHkiICE9ICJubyI7IHRoZW4KKy0gIHRlc3QgIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX3djc2NweSAkTElCUyIKKy0gIAorLWVsc2UgOgorLSAgCisgZmkKKysKKyAgICAgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF93Y3NjcHkiICE9IG5vOyB0aGVuCisgICAgICAgVV9IQVZFX1dDU0NQWT0xCisgICAgIGVsc2UKK0BAIC0zNzk1LDE3ICs4Nzk0LDIwIEBACisgCisgCisgYWNfZGVmYXVsdF9zaXplb2Zfd2NoYXJfdD00CistZWNobyAkYWNfbiAiY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90IiIuLi4gJGFjX2MiIDE+JjYKKy1lY2hvICJjb25maWd1cmU6MzgwMDogY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90IiA+JjUKKy1pZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfc2l6ZW9mX3djaGFyX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorLSAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHdjaGFyX3QuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl93Y2hhcl90K3NldH0iID0gc2V0OyB0aGVuCisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorIGVsc2UKKyAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICBhY19jdl9zaXplb2Zfd2NoYXJfdD0kYWNfZGVmYXVsdF9zaXplb2Zfd2NoYXJfdAorIGVsc2UKKy0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKy0jbGluZSAzODA4ICJjb25maWd1cmUiCistI2luY2x1ZGUgImNvbmZkZWZzLmgiCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZiBTVERDX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2VuZGlmCitAQCAtMzgyMSwzMCArODgyMyw1NyBAQAorICAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZih3Y2hhcl90KSk7CisgICBleGl0KDApOworIH0KKy1FT0YKKy1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM4MjY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKy10aGVuCisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CisraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKytjYXNlICIoKCRhY190cnkiIGluCisrICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKysgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworK2VzYWMKKytldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCisrJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisrICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKytlc2FjCisrZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKysgIChldmFsICIkYWNfdHJ5IikgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIGFjX2N2X3NpemVvZl93Y2hhcl90PWBjYXQgY29uZnRlc3R2YWxgCisgZWxzZQorLSAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy0gIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLSAgcm0gLWZyIGNvbmZ0ZXN0KgorLSAgYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9MAorKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworKyggZXhpdCAkYWNfc3RhdHVzICkKKythY19jdl9zaXplb2Zfd2NoYXJfdD0wCisgZmkKKy1ybSAtZnIgY29uZnRlc3QqCisrcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKytybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIAorKworIGZpCistZWNobyAiJGFjX3QiIiRhY19jdl9zaXplb2Zfd2NoYXJfdCIgMT4mNgorLWNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisreyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl93Y2hhcl90IiA+JjUKKyskYXNfZWNobyAiJGFjX2N2X3NpemVvZl93Y2hhcl90IiA+JjY7IH0KKytjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCAkYWNfY3Zfc2l6ZW9mX3djaGFyX3QKKy1FT0YKKytfQUNFT0YKKyAKKyAKKyBVX1NJWkVPRl9XQ0hBUl9UPSRhY19jdl9zaXplb2Zfd2NoYXJfdAorIGlmIHRlc3QgJFVfU0laRU9GX1dDSEFSX1QgPSAwOyB0aGVuCisgCWlmIHRlc3QgJFVfSEFWRV9XQ0hBUl9IPTE7IHRoZW4KKy0JICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBUaGVyZSBpcyB3Y2hhci5oIGJ1dCB0aGUgc2l6ZSBvZiB3Y2hhcl90IGlzIDAiIDE+JjI7IGV4aXQgMTsgfQorKwkgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVGhlcmUgaXMgd2NoYXIuaCBidXQgdGhlIHNpemUgb2Ygd2NoYXJfdCBpcyAwIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogVGhlcmUgaXMgd2NoYXIuaCBidXQgdGhlIHNpemUgb2Ygd2NoYXJfdCBpcyAwIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIAlmaQorIGZpCisgCitAQCAtMzg1NSwxMyArODg4NCwxNCBAQAorICNBQ19TVUJTVChFQ0hPX04pCisgI0FDX1NVQlNUKEVDSE9fQykKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0cmFzIG9yIC0tZGlzYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2V4dHJhcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX2V4dHJhcyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2V4dHJhczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkJeWVzKSBleHRyYXM9dHJ1ZSA7OworIAkJbm8pICBleHRyYXM9ZmFsc2UgOzsKKy0JCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmFzIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1leHRyYXMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1leHRyYXMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgCQllc2FjCisgZWxzZQorICAgZXh0cmFzPXRydWUKK0BAIC0zODczLDEzICs4OTAzLDE0IEBACisgZWxzZQorICAgRVhUUkFTX1RSVUU9JyMnCisgZmkKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0cmFzIG9yIC0tZGlzYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2V4dHJhcytzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX2V4dHJhcyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX2V4dHJhczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkJeWVzKSBpY3Vpbz10cnVlIDs7CisgCQlubykgIGljdWlvPWZhbHNlIDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWljdWlvIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1pY3VpbyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWljdWlvIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIGljdWlvPXRydWUKK0BAIC0zODkyLDEzICs4OTIzLDE0IEBACisgICBJQ1VJT19UUlVFPScjJworIGZpCisgCistIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxheW91dCBvciAtLWRpc2FibGUtbGF5b3V0IHdhcyBnaXZlbi4KKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGF5b3V0IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9sYXlvdXQrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9sYXlvdXQiCistICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICBlbmFibGV2YWw9JGVuYWJsZV9sYXlvdXQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAJCXllcykgbGF5b3V0PXRydWUgOzsKKyAJCW5vKSAgbGF5b3V0PWZhbHNlIDs7CistCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxheW91dCIgMT4mMjsgZXhpdCAxOyB9IDs7CisrCQkqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGF5b3V0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGF5b3V0IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworIAkJZXNhYworIGVsc2UKKyAgIGxheW91dD10cnVlCitAQCAtMzkxMSwxNiArODk0MywxOCBAQAorICAgTEFZT1VUX1RSVUU9JyMnCisgZmkKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRhdGEtcGFja2FnaW5nIG9yIC0td2l0aG91dC1kYXRhLXBhY2thZ2luZyB3YXMgZ2l2ZW4uCisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kYXRhLXBhY2thZ2luZyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX2RhdGFfcGFja2FnaW5nK3NldH0iID0gc2V0OyB0aGVuCistICB3aXRodmFsPSIkd2l0aF9kYXRhX3BhY2thZ2luZyIKKy0gIGNhc2UgIiR7d2l0aHZhbH0iIGluCisrICB3aXRodmFsPSR3aXRoX2RhdGFfcGFja2FnaW5nOyBjYXNlICIke3dpdGh2YWx9IiBpbgorICAgICAgICAgICAgICAgICBmaWxlc3xhcmNoaXZlfGxpYnJhcnkpIGRhdGFwYWNrYWdpbmc9JHdpdGh2YWwgOzsKKyAJCWF1dG8pIGRhdGFwYWNrYWdpbmc9JHdpdGh2YWwgOzsKKyAJCWNvbW1vbikgZGF0YXBhY2thZ2luZz1hcmNoaXZlIDs7CisgCQlkbGwpIGRhdGFwYWNrYWdpbmc9bGlicmFyeSA7OworIAkJc3RhdGljKSBkYXRhcGFja2FnaW5nPXN0YXRpYyA7OworLQkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kYXRhLXBhY2thZ2luZyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAJCWVzYWMKKyBlbHNlCisgICBkYXRhcGFja2FnaW5nPQorQEAgLTM5MzksMTMgKzg5NzMsMTQgQEAKKyAKKyAKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFwcGVkIG9yIC0tZGlzYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX21hcHBlZCtzZXR9IiA9IHNldDsgdGhlbgorLSAgZW5hYmxldmFsPSIkZW5hYmxlX21hcHBlZCIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX21hcHBlZDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgbWFwcGVkPWFyY2hpdmUgOzsKKyAgICAgICAgICAgICAgICBubykgIG1hcHBlZD1saWJyYXJ5IDs7CistICAgICAgICAgICAgICAgKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tYXBwZWQ7IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgbm93IiAxPiYyOyBleGl0IDE7IH0gOzsKKysgICAgICAgICAgICAgICAqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbWFwcGVkOyB1c2UgLS13aXRoLWRhdGEtcGFja2FnaW5nIG5vdyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW1hcHBlZDsgdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZyBub3ciID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgCWVzYWMKKyBlbHNlCisgICBtYXBwZWQ9CitAQCAtMzk1NSwxNCArODk5MCwxOCBAQAorIGlmIHRlc3QgeCIkbWFwcGVkIiAhPSB4OyB0aGVuCisgICAgIGNhc2UgJG1hcHBlZCBpbgorIAlhcmNoaXZlKQorLSAgICAJICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1hcmNoaXZlIGluc3RlYWQgb2YgLS1lbmFibGUtbWFwcGVkIiAxPiYyCisrICAgIAkgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9YXJjaGl2ZSBpbnN0ZWFkIG9mIC0tZW5hYmxlLW1hcHBlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1hcmNoaXZlIGluc3RlYWQgb2YgLS1lbmFibGUtbWFwcGVkIiA+JjI7fQorIAkgICAgOzsKKyAJbGlicmFyeSkKKy0gICAgCSAgICBlY2hvICJjb25maWd1cmU6IHdhcm5pbmc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9bGlicmFyeSBpbnN0ZWFkIG9mIC0tZGlzYWJsZS1tYXBwZWQiIDE+JjIKKysgICAgCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgPiYyO30KKyAJICAgIDs7CisgICAgIGVzYWMKKyAgICAgaWYgdGVzdCB4IiRkYXRhcGFja2FnaW5nIiAhPSB4IC1hIHgiJG1hcHBlZCIgIT0geCIkZGF0YXBhY2thZ2luZyI7IHRoZW4KKy0JeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjb25mbGljdGluZyB2YWx1ZXMgdXNlZCBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIGFuZCBkZXByZWNhdGVkIC0tZW5hYmxlLW1hcHBlZCIgMT4mMjsgZXhpdCAxOyB9CisrCXsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25mbGljdGluZyB2YWx1ZXMgdXNlZCBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIGFuZCBkZXByZWNhdGVkIC0tZW5hYmxlLW1hcHBlZCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICBmaQorICAgICBkYXRhcGFja2FnaW5nPSRtYXBwZWQKKyBmaQorQEAgLTM5ODgsMTIgKzkwMjcsMTIgQEAKKyAKKyAKKyAKKy1lY2hvICRhY19uICJjaGVja2luZyBmb3IgYSBsaWJyYXJ5IHN1ZmZpeCB0byB1c2UiIi4uLiAkYWNfYyIgMT4mNgorLWVjaG8gImNvbmZpZ3VyZTozOTkzOiBjaGVja2luZyBmb3IgYSBsaWJyYXJ5IHN1ZmZpeCB0byB1c2UiID4mNQorLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicmFyeS1zdWZmaXggb3IgLS13aXRob3V0LWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBsaWJyYXJ5IHN1ZmZpeCB0byB1c2UuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke3dpdGhfbGlicmFyeV9zdWZmaXgrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIHdpdGh2YWw9IiR3aXRoX2xpYnJhcnlfc3VmZml4IgorLSAgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorKyAgd2l0aHZhbD0kd2l0aF9saWJyYXJ5X3N1ZmZpeDsgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorIGVsc2UKKyAgIElDVUxJQlNVRkZJWD0KKyBmaQorQEAgLTQwMDIsNyArOTA0MSw4IEBACisgaWYgdGVzdCAiJG1zZyIgPSAiIjsgdGhlbgorICAgICBtc2c9bm9uZQorIGZpCistZWNobyAiJGFjX3QiIiRtc2ciIDE+JjYKKyt7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbXNnIiA+JjUKKyskYXNfZWNobyAiJG1zZyIgPiY2OyB9CisgCisgaWYgdGVzdCAiJElDVUxJQlNVRkZJWCIgIT0gIiIKKyB0aGVuCitAQCAtNDAxNCwxMyArOTA1NCwxNCBAQAorIAorIAorIAorLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyBvciAtLWRpc2FibGUtdGVzdHMgd2FzIGdpdmVuLgorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfdGVzdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV90ZXN0cyIKKy0gIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgIGVuYWJsZXZhbD0kZW5hYmxlX3Rlc3RzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgCQl5ZXMpIHRlc3RzPXRydWUgOzsKKyAJCW5vKSAgdGVzdHM9ZmFsc2UgOzsKKy0JCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGVzdHMiIDE+JjI7IGV4aXQgMTsgfSA7OworKwkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRlc3RzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGVzdHMiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgCQllc2FjCisgZWxzZQorICAgdGVzdHM9dHJ1ZQorQEAgLTQwMzMsMTMgKzkwNzQsMTQgQEAKKyAgIFRFU1RTX1RSVUU9JyMnCisgZmkKKyAKKy0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2FtcGxlcyBvciAtLWRpc2FibGUtc2FtcGxlcyB3YXMgZ2l2ZW4uCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNhbXBsZXMgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX3NhbXBsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKy0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zYW1wbGVzIgorLSAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgZW5hYmxldmFsPSRlbmFibGVfc2FtcGxlczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorIAkJeWVzKSBzYW1wbGVzPXRydWUgOzsKKyAJCW5vKSAgc2FtcGxlcz1mYWxzZSA7OworLQkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1zYW1wbGVzIiAxPiYyOyBleGl0IDE7IH0gOzsKKysJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1zYW1wbGVzIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc2FtcGxlcyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAJCWVzYWMKKyBlbHNlCisgICBzYW1wbGVzPXRydWUKK0BAIC00MDk2LDcgKzkxMzgsNyBAQAorIAorIAorIGNhc2UgIiR7aG9zdH0iIGluCistCSotKi1ocHV4KikgCQorKwkqLSotaHB1eCopCisgCQlpZiB0ZXN0ICIke2ljdV9jdl9ob3N0X2ZyYWd9IiA9ICJtaC1ocHV4LWNjIjsgdGhlbgorIAkJCWZvciBmaWxlIGluIHNhbXBsZXMvZGF0ZS9kYXRlIFwKKyAJCQkgIHNhbXBsZXMvY2FsL2NhbCB0ZXN0L2NpbnRsdHN0L2NpbnRsdHN0IFwKK0BAIC00MTQxLDUxNyArOTE4MywxMjk5IEBACisgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgXCQoVEhSRUFEU0NYWEZMQUdTKSIKKyBmaQorIAorLXRyYXAgJycgMSAyIDE1CistY2F0ID4gY29uZmNhY2hlIDw8XEVPRgorK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBpY3VkZWZzLm1rIE1ha2VmaWxlIGRhdGEvTWFrZWZpbGUgZGF0YS9pY3Vwa2cuaW5jIGNvbW1vbi9NYWtlZmlsZSBjb25maWcvTWFrZWZpbGUuaW5jIGkxOG4vTWFrZWZpbGUgbGF5b3V0L01ha2VmaWxlIGxheW91dGV4L01ha2VmaWxlIGlvL01ha2VmaWxlIGV4dHJhL01ha2VmaWxlIGV4dHJhL3Vjb252L01ha2VmaWxlIGV4dHJhL3NjcnB0cnVuL01ha2VmaWxlIHN0dWJkYXRhL01ha2VmaWxlIHRvb2xzL01ha2VmaWxlIHRvb2xzL2N0ZXN0ZncvTWFrZWZpbGUgdG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUgdG9vbHMvZ2VucmIvTWFrZWZpbGUgdG9vbHMvZ2VudWNhL01ha2VmaWxlIHRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIHRvb2xzL2dlbmNtbi9NYWtlZmlsZSB0b29scy9nZW5jbnZhbC9NYWtlZmlsZSB0b29scy9nZW5uYW1lcy9NYWtlZmlsZSB0b29scy9nZW50ZXN0L01ha2VmaWxlIHRvb2xzL2dlbm5vcm0vTWFrZWZpbGUgdG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUgdG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUgdG9vbHMvZ2VuYnJrL01ha2VmaWxlIHRvb2xzL2dlbnNwcmVwL01ha2VmaWxlIHRvb2xzL2ljdXN3YXAvTWFrZWZpbGUgdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSB0b29scy90b29sdXRpbC9NYWtlZmlsZSB0b29scy9kdW1wY2UvTWFrZWZpbGUgdGVzdC9NYWtlZmlsZSB0ZXN0L3Rlc3RkYXRhL01ha2VmaWxlIHRlc3QvaGRydHN0L01ha2VmaWxlIHRlc3QvaW50bHRlc3QvTWFrZWZpbGUgdGVzdC9jaW50bHRzdC9NYWtlZmlsZSB0ZXN0L2lvdGVzdC9NYWtlZmlsZSB0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIHRlc3QvdGVzdG1hcC9NYWtlZmlsZSB0ZXN0L2xldGVzdC9NYWtlZmlsZSB0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUgc2FtcGxlcy9NYWtlZmlsZSBzYW1wbGVzL2RhdGUvTWFrZWZpbGUgc2FtcGxlcy9jYWwvTWFrZWZpbGUgc2FtcGxlcy9sYXlvdXQvTWFrZWZpbGUgY29tbW9uL3VuaWNvZGUvcGxhdGZvcm0uaCIKKysKKytjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyAjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKy0jIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLiAgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLgorLSMgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisrIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorICMKKy0jIEJ5IGRlZmF1bHQsIGNvbmZpZ3VyZSB1c2VzIC4vY29uZmlnLmNhY2hlIGFzIHRoZSBjYWNoZSBmaWxlLAorLSMgY3JlYXRpbmcgaXQgaWYgaXQgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4gIFlvdSBjYW4gZ2l2ZSBjb25maWd1cmUKKy0jIHRoZSAtLWNhY2hlLWZpbGU9RklMRSBvcHRpb24gdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlIGZpbGU7IHRoYXQgaXMKKy0jIHdoYXQgY29uZmlndXJlIGRvZXMgd2hlbiBpdCBjYWxscyBjb25maWd1cmUgc2NyaXB0cyBpbgorLSMgc3ViZGlyZWN0b3JpZXMsIHNvIHRoZXkgc2hhcmUgdGhlIGNhY2hlLgorLSMgR2l2aW5nIC0tY2FjaGUtZmlsZT0vZGV2L251bGwgZGlzYWJsZXMgY2FjaGluZywgZm9yIGRlYnVnZ2luZyBjb25maWd1cmUuCistIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQgdGhlCistIyAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKysjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorICMKKy1FT0YKKysjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKysjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisrIyBmb2xsb3dpbmcgdmFsdWVzLgorKworK19BQ0VPRgorKworICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisgIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKy0jIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCisrIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyAjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyAjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorLShzZXQpIDI+JjEgfAorLSAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKy0gICphY19zcGFjZT1cICopCistICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUgc3Vic3RpdHV0aW9uCistICAgICMgdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCistICAgIHNlZCAtbiBcCistICAgICAgLWUgInMvJy8nXFxcXCcnL2ciIFwKKy0gICAgICAtZSAicy9eXFwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXFwpPVxcKC4qXFwpL1xcMT1cJHtcXDE9J1xcMid9L3AiCistICAgIDs7CistICAqKQorLSAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorLSAgICBzZWQgLW4gLWUgJ3MvXlwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXCk9XCguKlwpL1wxPSR7XDE9XDJ9L3AnCistICAgIDs7CistICBlc2FjID4+IGNvbmZjYWNoZQorLWlmIGNtcCAtcyAkY2FjaGVfZmlsZSBjb25mY2FjaGU7IHRoZW4KKy0gIDoKKy1lbHNlCistICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCistICAgIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorLSAgICBjYXQgY29uZmNhY2hlID4gJGNhY2hlX2ZpbGUKKysoCisrICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisrICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorKyAgICBjYXNlICRhY192YWwgaW4gIygKKysgICAgKiR7YXNfbmx9KikKKysgICAgICBjYXNlICRhY192YXIgaW4gIygKKysgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisrICAgICAgZXNhYworKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKysgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisrICAgICAgZXNhYyA7OworKyAgICBlc2FjCisrICBkb25lCisrCisrICAoc2V0KSAyPiYxIHwKKysgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisrICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorKyAgICAgIHNlZCAtbiBcCisrCSJzLycvJ1xcXFwnJy9nOworKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKysgICAgICA7OyAjKAorKyAgICAqKQorKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisrICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKysgICAgICA7OworKyAgICBlc2FjIHwKKysgICAgc29ydAorKykgfAorKyAgc2VkICcKKysgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorKyAgICAgdCBjbGVhcgorKyAgICAgOmNsZWFyCisrICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisrICAgICB0IGVuZAorKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisrICAgICA6ZW5kJyA+PmNvbmZjYWNoZQorK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKysgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisrICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgICBlbHNlCistICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgZmkKKyBmaQorIHJtIC1mIGNvbmZjYWNoZQorIAorLXRyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1CistCisgdGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorICMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgorIHRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKyAKKy0jIEFueSBhc3NpZ25tZW50IHRvIFZQQVRIIGNhdXNlcyBTdW4gbWFrZSB0byBvbmx5IGV4ZWN1dGUKKy0jIHRoZSBmaXJzdCBzZXQgb2YgZG91YmxlLWNvbG9uIHJ1bGVzLCBzbyByZW1vdmUgaXQgaWYgbm90IG5lZWRlZC4KKy0jIElmIHRoZXJlIGlzIGEgY29sb24gaW4gdGhlIHBhdGgsIHdlIG5lZWQgdG8ga2VlcCBpdC4KKy1pZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorLSAgYWNfdnBzdWI9Jy9eWyAJXSpWUEFUSFsgCV0qPVteOl0qJC9kJworLWZpCisrREVGUz0tREhBVkVfQ09ORklHX0gKKyAKKy10cmFwICdybSAtZiAkQ09ORklHX1NUQVRVUyBjb25mdGVzdCo7IGV4aXQgMScgMSAyIDE1CisrYWNfbGlib2Jqcz0KKythY19sdGxpYm9ianM9CisrZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisrICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisrICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKysgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorKyAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgorKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisrICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2lcJFUuJGFjX29iamV4dCIKKysgIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworK2RvbmUKKytMSUJPQkpTPSRhY19saWJvYmpzCisgCistREVGUz0tREhBVkVfQ09ORklHX0gKKytMVExJQk9CSlM9JGFjX2x0bGlib2JqcworIAorLSMgV2l0aG91dCB0aGUgIi4vIiwgc29tZSBzaGVsbHMgbG9vayBpbiBQQVRIIGZvciBjb25maWcuc3RhdHVzLgorLTogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KKyAKKy1lY2hvIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTCistcm0gLWYgJENPTkZJR19TVEFUVVMKKy1jYXQgPiAkQ09ORklHX1NUQVRVUyA8PEVPRgorLSMhIC9iaW4vc2gKKy0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4KKysKKysKKys6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CisrYWNfd3JpdGVfZmFpbD0wCisrYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKKythY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgorK3sgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9CisrY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKysjISAkU0hFTEwKKysjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisgIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCistIyBUaGlzIGRpcmVjdG9yeSB3YXMgY29uZmlndXJlZCBhcyBmb2xsb3dzLAorLSMgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CistIworLSMgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzCistIworICMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKy0jIGNvbmZpZ3VyZSwgaXMgaW4gLi9jb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKysjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisgCistYWNfY3NfdXNhZ2U9IlVzYWdlOiAkQ09ORklHX1NUQVRVUyBbLS1yZWNoZWNrXSBbLS12ZXJzaW9uXSBbLS1oZWxwXSIKKy1mb3IgYWNfb3B0aW9uCisrZGVidWc9ZmFsc2UKKythY19jc19yZWNoZWNrPWZhbHNlCisrYWNfY3Nfc2lsZW50PWZhbHNlCisrU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrCisrIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgZW11bGF0ZSBzaAorKyAgTlVMTENNRD06CisrICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKysgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisrICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKysgIHNldG9wdCBOT19HTE9CX1NVQlNUCisrZWxzZQorKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisrICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKytlc2FjCisrCisrZmkKKysKKysKKysKKysKKysjIFBBVEggbmVlZHMgQ1IKKysjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCisrYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisrYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisrYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCisrYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworKworK2FzX25sPScKKysnCisrZXhwb3J0IGFzX25sCisrIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KKythc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisraWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKysgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworKyAgYXNfZWNob19uPSdwcmludGYgJXMnCisrZWxzZQorKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisrICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisrICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKysgIGVsc2UKKysgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKysgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKysgICAgICBhcmc9JDE7CisrICAgICAgY2FzZSAkYXJnIGluCisrICAgICAgKiIkYXNfbmwiKikKKysJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisrCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisrICAgICAgZXNhYzsKKysgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisrICAgICcKKysgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisrICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisrICBmaQorKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworK2ZpCisrCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIFBBVEhfU0VQQVJBVE9SPToKKysgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKysgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKysgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIH0KKytmaQorKworKyMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgYXNfdW5zZXQ9dW5zZXQKKytlbHNlCisrICBhc191bnNldD1mYWxzZQorK2ZpCisrCisrCisrIyBJRlMKKysjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKKytJRlM9IiAiIgkkYXNfbmwiCisrCisrIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KKytjYXNlICQwIGluCisrICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisrICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorIGRvCistICBjYXNlICJcJGFjX29wdGlvbiIgaW4KKy0gIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorLSAgICBlY2hvICJydW5uaW5nIFwke0NPTkZJR19TSEVMTC0vYmluL3NofSAkMCAkYWNfY29uZmlndXJlX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iCistICAgIGV4ZWMgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7OworLSAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYpCistICAgIGVjaG8gIiRDT05GSUdfU1RBVFVTIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTMiCistICAgIGV4aXQgMCA7OworLSAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtLWgpCistICAgIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKKy0gICopIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBleGl0IDEgOzsKKy0gIGVzYWMKKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisgCistYWNfZ2l2ZW5fc3JjZGlyPSRzcmNkaXIKKy1hY19naXZlbl9JTlNUQUxMPSIkSU5TVEFMTCIKKysgICAgIDs7CisrZXNhYworKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKysjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKytpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisrICBhc19teXNlbGY9JDAKKytmaQorK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKysgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisrICB7IChleGl0IDEpOyBleGl0IDE7IH0KKytmaQorIAorLXRyYXAgJ3JtIC1mciBgZWNobyAiaWN1ZGVmcy5tayBcCistCQlNYWtlZmlsZSBcCistCQlkYXRhL01ha2VmaWxlIGRhdGEvaWN1cGtnLmluYyBcCistCQljb21tb24vTWFrZWZpbGUgY29uZmlnL01ha2VmaWxlLmluYyBpMThuL01ha2VmaWxlIFwKKy0JCWxheW91dC9NYWtlZmlsZSBcCistCQlsYXlvdXRleC9NYWtlZmlsZSBcCistCQlpby9NYWtlZmlsZSBcCistCQlleHRyYS9NYWtlZmlsZSBcCistCQlleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZQorLQkJc3R1YmRhdGEvTWFrZWZpbGUgXAorLQkJdG9vbHMvTWFrZWZpbGUgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSB0b29scy9tYWtlY29udi9NYWtlZmlsZSBcCistCQl0b29scy9nZW5yYi9NYWtlZmlsZSBcCistCQl0b29scy9nZW51Y2EvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY2NvZGUvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY21uL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbmNudmFsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbnRlc3QvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wcm9wcy9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wbmFtZS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5icmsvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vuc3ByZXAvTWFrZWZpbGUgXAorLQkJdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSBcCistCQl0b29scy9wa2dkYXRhL01ha2VmaWxlIFwKKy0JCXRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2R1bXBjZS9NYWtlZmlsZSBcCistCQl0ZXN0L01ha2VmaWxlIHRlc3QvdGVzdGRhdGEvTWFrZWZpbGUgXAorLQkJdGVzdC9oZHJ0c3QvTWFrZWZpbGUgXAorLQkJdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSBcCistCQl0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIFwKKy0JCXRlc3QvaW90ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgXAorLQkJdGVzdC90ZXN0bWFwL01ha2VmaWxlIFwKKy0JCXRlc3QvbGV0ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBcCistCQlzYW1wbGVzL01ha2VmaWxlIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSBcCistCQlzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBcCistCQljb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIGNvbW1vbi9pY3VjZmcuaCIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQorLUVPRgorLWNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorLQorLSMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluIGNvbmZpZy5zdGF0dXMuCistc2VkICdzLyVAL0BALzsgcy9AJS9AQC87IHMvJWdcJC9AZy87IC9AZ1wkL3MvW1xcXFwmJV0vXFxcXCYvZzsKKy0gcy9AQC8lQC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YKKy0kYWNfdnBzdWIKKy0kZXh0cmFzdWIKKy1zJUBTSEVMTEAlJFNIRUxMJWcKKy1zJUBDRkxBR1NAJSRDRkxBR1MlZworLXMlQENQUEZMQUdTQCUkQ1BQRkxBR1MlZworLXMlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZworLXMlQEZGTEFHU0AlJEZGTEFHUyVnCistcyVAREVGU0AlJERFRlMlZworLXMlQExERkxBR1NAJSRMREZMQUdTJWcKKy1zJUBMSUJTQCUkTElCUyVnCistcyVAZXhlY19wcmVmaXhAJSRleGVjX3ByZWZpeCVnCistcyVAcHJlZml4QCUkcHJlZml4JWcKKy1zJUBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQCUkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSVnCistcyVAYmluZGlyQCUkYmluZGlyJWcKKy1zJUBzYmluZGlyQCUkc2JpbmRpciVnCistcyVAbGliZXhlY2RpckAlJGxpYmV4ZWNkaXIlZworLXMlQGRhdGFkaXJAJSRkYXRhZGlyJWcKKy1zJUBzeXNjb25mZGlyQCUkc3lzY29uZmRpciVnCistcyVAc2hhcmVkc3RhdGVkaXJAJSRzaGFyZWRzdGF0ZWRpciVnCistcyVAbG9jYWxzdGF0ZWRpckAlJGxvY2Fsc3RhdGVkaXIlZworLXMlQGxpYmRpckAlJGxpYmRpciVnCistcyVAaW5jbHVkZWRpckAlJGluY2x1ZGVkaXIlZworLXMlQG9sZGluY2x1ZGVkaXJAJSRvbGRpbmNsdWRlZGlyJWcKKy1zJUBpbmZvZGlyQCUkaW5mb2RpciVnCistcyVAbWFuZGlyQCUkbWFuZGlyJWcKKy1zJUBQQUNLQUdFQCUkUEFDS0FHRSVnCistcyVAVkVSU0lPTkAlJFZFUlNJT04lZworLXMlQExJQl9WRVJTSU9OQCUkTElCX1ZFUlNJT04lZworLXMlQExJQl9WRVJTSU9OX01BSk9SQCUkTElCX1ZFUlNJT05fTUFKT1IlZworLXMlQFVOSUNPREVfVkVSU0lPTkAlJFVOSUNPREVfVkVSU0lPTiVnCistcyVAQ0NAJSRDQyVnCistcyVAQ1hYQCUkQ1hYJWcKKy1zJUBJTlNUQUxMX1BST0dSQU1AJSRJTlNUQUxMX1BST0dSQU0lZworLXMlQElOU1RBTExfU0NSSVBUQCUkSU5TVEFMTF9TQ1JJUFQlZworLXMlQElOU1RBTExfREFUQUAlJElOU1RBTExfREFUQSVnCistcyVAU1RSSVBAJSRTVFJJUCVnCistcyVAVV9NQUtFQCUkVV9NQUtFJWcKKy1zJUBET1hZR0VOQCUkRE9YWUdFTiVnCistcyVAaG9zdEAlJGhvc3QlZworLXMlQGhvc3RfYWxpYXNAJSRob3N0X2FsaWFzJWcKKy1zJUBob3N0X2NwdUAlJGhvc3RfY3B1JWcKKy1zJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9yJWcKKy1zJUBob3N0X29zQCUkaG9zdF9vcyVnCistcyVARVhFRVhUQCUkRVhFRVhUJWcKKy1zJUBBUkZMQUdTQCUkQVJGTEFHUyVnCistcyVAQ09NUElMRV9MSU5LX0VOVlZBUkAlJENPTVBJTEVfTElOS19FTlZWQVIlZworLXMlQExJQl9NQCUkTElCX00lZworLXMlQEVOQUJMRV9TSEFSRURAJSRFTkFCTEVfU0hBUkVEJWcKKy1zJUBFTkFCTEVfU1RBVElDQCUkRU5BQkxFX1NUQVRJQyVnCistcyVARU5BQkxFX0RFQlVHQCUkRU5BQkxFX0RFQlVHJWcKKy1zJUBFTkFCTEVfUkVMRUFTRUAlJEVOQUJMRV9SRUxFQVNFJWcKKy1zJUBSQU5MSUJAJSRSQU5MSUIlZworLXMlQEFSQCUkQVIlZworLXMlQFVfRElTQUJMRV9SRU5BTUlOR0AlJFVfRElTQUJMRV9SRU5BTUlORyVnCistcyVAVV9FTkFCTEVfVFJBQ0lOR0AlJFVfRU5BQkxFX1RSQUNJTkclZworLXMlQEVOQUJMRV9SUEFUSEAlJEVOQUJMRV9SUEFUSCVnCistcyVAVV9JTkxJTkVAJSRVX0lOTElORSVnCistcyVAVEhSRUFEU19UUlVFQCUkVEhSRUFEU19UUlVFJWcKKy1zJUBJQ1VfVVNFX1RIUkVBRFNAJSRJQ1VfVVNFX1RIUkVBRFMlZworLXMlQEhBVkVfTU1BUEAlJEhBVkVfTU1BUCVnCistcyVAR0VOQ0NPREVfQVNTRU1CTFlAJSRHRU5DQ09ERV9BU1NFTUJMWSVnCistcyVAQ1BQQCUkQ1BQJWcKKy1zJUBVX0hBVkVfSU5UVFlQRVNfSEAlJFVfSEFWRV9JTlRUWVBFU19IJWcKKy1zJUBDWFhDUFBAJSRDWFhDUFAlZworLXMlQFVfSU9TVFJFQU1fU09VUkNFQCUkVV9JT1NUUkVBTV9TT1VSQ0UlZworLXMlQFVfSVNfQklHX0VORElBTkAlJFVfSVNfQklHX0VORElBTiVnCistcyVAVV9IQVZFX05MX0xBTkdJTkZPQCUkVV9IQVZFX05MX0xBTkdJTkZPJWcKKy1zJUBVX0hBVkVfTkxfTEFOR0lORk9fQ09ERVNFVEAlJFVfSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUJWcKKy1zJUBVX05MX0xBTkdJTkZPX0NPREVTRVRAJSRVX05MX0xBTkdJTkZPX0NPREVTRVQlZworLXMlQFVfSEFWRV9OQU1FU1BBQ0VAJSRVX0hBVkVfTkFNRVNQQUNFJWcKKy1zJUBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OQCUkVV9PVkVSUklERV9DWFhfQUxMT0NBVElPTiVnCistcyVAVV9IQVZFX1BMQUNFTUVOVF9ORVdAJSRVX0hBVkVfUExBQ0VNRU5UX05FVyVnCistcyVAVV9IQVZFX1BPUEVOQCUkVV9IQVZFX1BPUEVOJWcKKy1zJUBVX1RaU0VUQCUkVV9UWlNFVCVnCistcyVAVV9UWk5BTUVAJSRVX1RaTkFNRSVnCistcyVAVV9IQVZFX1RJTUVaT05FQCUkVV9IQVZFX1RJTUVaT05FJWcKKy1zJUBVX1RJTUVaT05FQCUkVV9USU1FWk9ORSVnCistcyVASEFWRV9JTlQ4X1RAJSRIQVZFX0lOVDhfVCVnCistcyVASEFWRV9VSU5UOF9UQCUkSEFWRV9VSU5UOF9UJWcKKy1zJUBIQVZFX0lOVDE2X1RAJSRIQVZFX0lOVDE2X1QlZworLXMlQEhBVkVfVUlOVDE2X1RAJSRIQVZFX1VJTlQxNl9UJWcKKy1zJUBIQVZFX0lOVDMyX1RAJSRIQVZFX0lOVDMyX1QlZworLXMlQEhBVkVfVUlOVDMyX1RAJSRIQVZFX1VJTlQzMl9UJWcKKy1zJUBIQVZFX0lOVDY0X1RAJSRIQVZFX0lOVDY0X1QlZworLXMlQEhBVkVfVUlOVDY0X1RAJSRIQVZFX1VJTlQ2NF9UJWcKKy1zJUBVX0hBVkVfV0NIQVJfSEAlJFVfSEFWRV9XQ0hBUl9IJWcKKy1zJUBVX0hBVkVfV0NTQ1BZQCUkVV9IQVZFX1dDU0NQWSVnCistcyVAVV9TSVpFT0ZfV0NIQVJfVEAlJFVfU0laRU9GX1dDSEFSX1QlZworLXMlQEVYVFJBU19UUlVFQCUkRVhUUkFTX1RSVUUlZworLXMlQElDVUlPX1RSVUVAJSRJQ1VJT19UUlVFJWcKKy1zJUBMQVlPVVRfVFJVRUAlJExBWU9VVF9UUlVFJWcKKy1zJUB0aGVzeXNjb25mZGlyQCUkdGhlc3lzY29uZmRpciVnCistcyVAdGhlZGF0YWRpckAlJHRoZWRhdGFkaXIlZworLXMlQHRoZWxpYmRpckAlJHRoZWxpYmRpciVnCistcyVAcGtnaWN1ZGF0YWRpckAlJHBrZ2ljdWRhdGFkaXIlZworLXMlQHRoZXBrZ2ljdWRhdGFkaXJAJSR0aGVwa2dpY3VkYXRhZGlyJWcKKy1zJUBEQVRBX1BBQ0tBR0lOR19DUFBGTEFHU0AlJERBVEFfUEFDS0FHSU5HX0NQUEZMQUdTJWcKKy1zJUBEQVRBX1BBQ0tBR0lOR19NT0RFQCUkREFUQV9QQUNLQUdJTkdfTU9ERSVnCistcyVASUNVTElCU1VGRklYQCUkSUNVTElCU1VGRklYJWcKKy1zJUBVX0hBVkVfTElCX1NVRkZJWEAlJFVfSEFWRV9MSUJfU1VGRklYJWcKKy1zJUBJQ1VMSUJTVUZGSVhDTkFNRUAlJElDVUxJQlNVRkZJWENOQU1FJWcKKy1zJUBURVNUU19UUlVFQCUkVEVTVFNfVFJVRSVnCistcyVAU0FNUExFU19UUlVFQCUkU0FNUExFU19UUlVFJWcKKy1zJUBJQ1VEQVRBX0NIQVJAJSRJQ1VEQVRBX0NIQVIlZworLXMlQHBsYXRmb3JtQCUkcGxhdGZvcm0lZworLXMlQHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZUAlJHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZSVnCistcyVAcGxhdGZvcm1fbWFrZV9mcmFnbWVudEAlJHBsYXRmb3JtX21ha2VfZnJhZ21lbnQlZworLXMlQGxkX3JwYXRoX3N1ZkAlJGxkX3JwYXRoX3N1ZiVnCistcyVAQUlYX1NITElCQCUkQUlYX1NITElCJWcKKy0KKy1DRU9GCistRU9GCistCistY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRgorLQorLSMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCistIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCistYWNfbWF4X3NlZF9jbWRzPTkwICMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2VkIHNjcmlwdC4KKy1hY19maWxlPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgorLWFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorLWFjX2VuZD0kYWNfbWF4X3NlZF9jbWRzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKy1hY19tb3JlX2xpbmVzPToKKy1hY19zZWRfY21kcz0iIgorLXdoaWxlICRhY19tb3JlX2xpbmVzOyBkbworLSAgaWYgdGVzdCAkYWNfYmVnIC1ndCAxOyB0aGVuCistICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiBjb25mdGVzdC5zdWJzID4gY29uZnRlc3QucyRhY19maWxlCisrIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCisrZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorK2RvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisrZG9uZQorK1BTMT0nJCAnCisrUFMyPSc+ICcKKytQUzQ9JysgJworKworKyMgTkxTIG51aXNhbmNlcy4KKytMQ19BTEw9QworK2V4cG9ydCBMQ19BTEwKKytMQU5HVUFHRT1DCisrZXhwb3J0IExBTkdVQUdFCisrCisrIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCisraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKysgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorKyAgYXNfZXhwcj1leHByCisrZWxzZQorKyAgYXNfZXhwcj1mYWxzZQorK2ZpCisrCisraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKKytlbHNlCisrICBhc19iYXNlbmFtZT1mYWxzZQorK2ZpCisrCisrCisrIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWC8iJDAiIHwKKysgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXC9cKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwvXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKworKyMgQ0RQQVRILgorKyRhc191bnNldCBDRFBBVEgKKysKKysKKysKKysgIGFzX2xpbmVub18xPSRMSU5FTk8KKysgIGFzX2xpbmVub18yPSRMSU5FTk8KKysgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisrCisrICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisrICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKysgICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCisrICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisrICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCisrICAjIGNhc2UgYXQgbGluZSBlbmQuCisrICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKysgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorKyAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKysgIHNlZCAtbiAnCisrICAgIHAKKysgICAgL1skXUxJTkVOTy89CisrICAnIDwkYXNfbXlzZWxmIHwKKysgICAgc2VkICcKKysgICAgICBzL1skXUxJTkVOTy4qLyYtLworKyAgICAgIHQgbGluZW5vCisrICAgICAgYgorKyAgICAgIDpsaW5lbm8KKysgICAgICBOCisrICAgICAgOmxvb3AKKysgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKysgICAgICB0IGxvb3AKKysgICAgICBzLy1cbi4qLy8KKysgICAgJyA+JGFzX21lLmxpbmVubyAmJgorKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisrICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKysgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisrICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKysgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCisrICAuICIuLyRhc19tZS5saW5lbm8iCisrICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKysgIGV4aXQKKyt9CisrCisrCisraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc19kaXJuYW1lPWRpcm5hbWUKKytlbHNlCisrICBhc19kaXJuYW1lPWZhbHNlCisrZmkKKysKKytFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorK2Nhc2UgYGVjaG8gLW4geGAgaW4KKystbiopCisrICBjYXNlIGBlY2hvICd4XGMnYCBpbgorKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisrICAqKSAgIEVDSE9fQz0nXGMnOzsKKysgIGVzYWM7OworKyopCisrICBFQ0hPX049Jy1uJzs7CisrZXNhYworK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKysgIGFzX2V4cHI9ZXhwcgorK2Vsc2UKKysgIGFzX2V4cHI9ZmFsc2UKKytmaQorKworK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCisraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisrICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCisrZWxzZQorKyAgcm0gLWYgY29uZiQkLmRpcgorKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorK2ZpCisraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisrICAgIGFzX2xuX3M9J2xuIC1zJworKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKysgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKysgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorKyAgICAgIGFzX2xuX3M9J2NwIC1wJworKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKysgICAgYXNfbG5fcz1sbgorICAgZWxzZQorLSAgICBzZWQgIiR7YWNfZW5kfXEiIGNvbmZ0ZXN0LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUKKysgICAgYXNfbG5fcz0nY3AgLXAnCisgICBmaQorLSAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LnMkYWNfZmlsZTsgdGhlbgorLSAgICBhY19tb3JlX2xpbmVzPWZhbHNlCistICAgIHJtIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZQorLSAgZWxzZQorLSAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCistICAgICAgYWNfc2VkX2NtZHM9InNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCistICAgIGVsc2UKKy0gICAgICBhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZSIKKy0gICAgZmkKKy0gICAgYWNfZmlsZT1gZXhwciAkYWNfZmlsZSArIDFgCistICAgIGFjX2JlZz0kYWNfZW5kCistICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfY21kc2AKKy0gIGZpCistZG9uZQorLWlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKy0gIGFjX3NlZF9jbWRzPWNhdAorLWZpCistRU9GCistCistY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCistCistQ09ORklHX0ZJTEVTPVwke0NPTkZJR19GSUxFUy0iaWN1ZGVmcy5tayBcCistCQlNYWtlZmlsZSBcCistCQlkYXRhL01ha2VmaWxlIGRhdGEvaWN1cGtnLmluYyBcCistCQljb21tb24vTWFrZWZpbGUgY29uZmlnL01ha2VmaWxlLmluYyBpMThuL01ha2VmaWxlIFwKKy0JCWxheW91dC9NYWtlZmlsZSBcCistCQlsYXlvdXRleC9NYWtlZmlsZSBcCistCQlpby9NYWtlZmlsZSBcCistCQlleHRyYS9NYWtlZmlsZSBcCistCQlleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZQorLQkJc3R1YmRhdGEvTWFrZWZpbGUgXAorLQkJdG9vbHMvTWFrZWZpbGUgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSB0b29scy9tYWtlY29udi9NYWtlZmlsZSBcCistCQl0b29scy9nZW5yYi9NYWtlZmlsZSBcCistCQl0b29scy9nZW51Y2EvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY2NvZGUvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2VuY21uL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbmNudmFsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIFwKKy0JCXRvb2xzL2dlbnRlc3QvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wcm9wcy9NYWtlZmlsZSBcCistCQl0b29scy9nZW5wbmFtZS9NYWtlZmlsZSBcCistCQl0b29scy9nZW5icmsvTWFrZWZpbGUgXAorLQkJdG9vbHMvZ2Vuc3ByZXAvTWFrZWZpbGUgXAorLQkJdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSBcCistCQl0b29scy9wa2dkYXRhL01ha2VmaWxlIFwKKy0JCXRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIFwKKy0JCXRvb2xzL2R1bXBjZS9NYWtlZmlsZSBcCistCQl0ZXN0L01ha2VmaWxlIHRlc3QvdGVzdGRhdGEvTWFrZWZpbGUgXAorLQkJdGVzdC9oZHJ0c3QvTWFrZWZpbGUgXAorLQkJdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSBcCistCQl0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIFwKKy0JCXRlc3QvaW90ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgXAorLQkJdGVzdC90ZXN0bWFwL01ha2VmaWxlIFwKKy0JCXRlc3QvbGV0ZXN0L01ha2VmaWxlIFwKKy0JCXRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBcCistCQlzYW1wbGVzL01ha2VmaWxlIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSBcCistCQlzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBcCistCQljb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIn0KKy1FT0YKKy1jYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCistZm9yIGFjX2ZpbGUgaW4gLi4gJENPTkZJR19GSUxFUzsgZG8gaWYgdGVzdCAieCRhY19maWxlIiAhPSB4Li47IHRoZW4KKy0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKy0gIGNhc2UgIiRhY19maWxlIiBpbgorLSAgKjoqKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJVteOl0qOiUlJ2AKKy0gICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CistICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworLSAgZXNhYworK2Vsc2UKKysgIGFzX2xuX3M9J2NwIC1wJworK2ZpCisrcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKyAKKy0gICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLCB0b3Bfc3JjZGlyLCBhbmQgSU5TVEFMTCBmb3Igc3ViZGlyZWN0b3JpZXMuCisraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorKyAgYXNfbWtkaXJfcD06CisrZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKysgIGFzX21rZGlyX3A9ZmFsc2UKKytmaQorIAorLSAgIyBSZW1vdmUgbGFzdCBzbGFzaCBhbmQgYWxsIHRoYXQgZm9sbG93cyBpdC4gIE5vdCBhbGwgc3lzdGVtcyBoYXZlIGRpcm5hbWUuCistICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorLSAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCistICAgICMgVGhlIGZpbGUgaXMgaW4gYSBzdWJkaXJlY3RvcnkuCistICAgIHRlc3QgISAtZCAiJGFjX2RpciIgJiYgbWtkaXIgIiRhY19kaXIiCistICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAkYWNfZGlyfHNlZCAncyVeXC4vJSUnYCIKKy0gICAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKy0gICAgYWNfZG90cz1gZWNobyAkYWNfZGlyX3N1ZmZpeHxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKytpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhc190ZXN0X3g9J3Rlc3QgLXgnCisrZWxzZQorKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgIGVsc2UKKy0gICAgYWNfZGlyX3N1ZmZpeD0gYWNfZG90cz0KKysgICAgYXNfbHNfTF9vcHRpb249CisgICBmaQorKyAgYXNfdGVzdF94PScKKysgICAgZXZhbCBzaCAtYyAnXCcnCisrICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisrCXRlc3QgLWQgIiQxLy4iOworKyAgICAgIGVsc2UKKysJY2FzZSAkMSBpbgorKwktKilzZXQgIi4vJDEiOzsKKysJZXNhYzsKKysJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKysJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorKyAgICAnXCcnIHNoCisrICAnCisrZmkKKythc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorKworKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKythc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorKworKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisrCisrCisrZXhlYyA2PiYxCisrCisrIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKysjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKysjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorK2FjX2xvZz0iCisrVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworKworKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisrICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisrICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisrICAkICQwICRACisgCistICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorLSAgLikgIHNyY2Rpcj0uCistICAgICAgaWYgdGVzdCAteiAiJGFjX2RvdHMiOyB0aGVuIHRvcF9zcmNkaXI9LgorLSAgICAgIGVsc2UgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgOyBmaSA7OworLSAgLyopIHNyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciRhY19kaXJfc3VmZml4IjsgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKy0gICopICMgUmVsYXRpdmUgcGF0aC4KKy0gICAgc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIkYWNfZGlyX3N1ZmZpeCIKKy0gICAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworLSAgZXNhYworK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorKyIKKysKKytfQUNFT0YKKysKKytjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKysiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7CisrZXNhYworKworK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisrIiopIHNldCB4ICRhY19jb25maWdfaGVhZGVyczsgc2hpZnQ7IGFjX2NvbmZpZ19oZWFkZXJzPSQqOzsKKytlc2FjCisgCistICBjYXNlICIkYWNfZ2l2ZW5fSU5TVEFMTCIgaW4KKy0gIFsvJF0qKSBJTlNUQUxMPSIkYWNfZ2l2ZW5fSU5TVEFMTCIgOzsKKy0gICopIElOU1RBTEw9IiRhY19kb3RzJGFjX2dpdmVuX0lOU1RBTEwiIDs7CistICBlc2FjCisgCistICBlY2hvIGNyZWF0aW5nICIkYWNfZmlsZSIKKy0gIHJtIC1mICIkYWNfZmlsZSIKKy0gIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBgZWNobyAkYWNfZmlsZV9pbnxzZWQgJ3MlLiovJSUnYCBieSBjb25maWd1cmUuIgorLSAgY2FzZSAiJGFjX2ZpbGUiIGluCistICAqTWFrZWZpbGUqKSBhY19jb21zdWI9IjFpXFwKKy0jICRjb25maWd1cmVfaW5wdXQiIDs7CistICAqKSBhY19jb21zdWI9IDs7CisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorK2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyIKKytjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorKworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKythY19jc191c2FnZT0iXAorK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQorK2N1cnJlbnQgY29uZmlndXJhdGlvbi4KKysKKytVc2FnZTogJDAgW09QVElPTl0uLi4gW0ZJTEVdLi4uCisrCisrICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKysgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorKyAgICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKysgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKysgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisrICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisrICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisrCisrQ29uZmlndXJhdGlvbiBmaWxlczoKKyskY29uZmlnX2ZpbGVzCisrCisrQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorKyRjb25maWdfaGVhZGVycworKworK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorKworK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorK2FjX2NzX3ZlcnNpb249IlxcCisrY29uZmlnLnN0YXR1cworK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MywKKysgIHdpdGggb3B0aW9ucyBcXCJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorKworK0NvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorKworK2FjX3B3ZD0nJGFjX3B3ZCcKKytzcmNkaXI9JyRzcmNkaXInCisrSU5TVEFMTD0nJElOU1RBTEwnCisrdGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKKytfQUNFT0YKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgorK2FjX25lZWRfZGVmYXVsdHM9OgorK3doaWxlIHRlc3QgJCMgIT0gMAorK2RvCisrICBjYXNlICQxIGluCisrICAtLSo9KikKKysgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKysgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorKyAgICBhY19zaGlmdD06CisrICAgIDs7CisrICAqKQorKyAgICBhY19vcHRpb249JDEKKysgICAgYWNfb3B0YXJnPSQyCisrICAgIGFjX3NoaWZ0PXNoaWZ0CisrICAgIDs7CisgICBlc2FjCisgCistICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorLSAgc2VkIC1lICIkYWNfY29tc3ViCistcyVAY29uZmlndXJlX2lucHV0QCUkY29uZmlndXJlX2lucHV0JWcKKy1zJUBzcmNkaXJAJSRzcmNkaXIlZworLXMlQHRvcF9zcmNkaXJAJSR0b3Bfc3JjZGlyJWcKKy1zJUBJTlNUQUxMQCUkSU5TVEFMTCVnCistIiAkYWNfZmlsZV9pbnB1dHMgfCAoZXZhbCAiJGFjX3NlZF9jbWRzIikgPiAkYWNfZmlsZQorLWZpOyBkb25lCistcm0gLWYgY29uZnRlc3QucyoKKysgIGNhc2UgJGFjX29wdGlvbiBpbgorKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKysgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorKyAgICBhY19jc19yZWNoZWNrPTogOzsKKysgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKysgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKysgICAgZGVidWc9OiA7OworKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKysgICAgJGFjX3NoaWZ0CisrICAgIGNhc2UgJGFjX29wdGFyZyBpbgorKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworKyAgICBlc2FjCisrICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAnJGFjX29wdGFyZyciCisrICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorKyAgICAkYWNfc2hpZnQKKysgICAgY2FzZSAkYWNfb3B0YXJnIGluCisrICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisrICAgIGVzYWMKKysgICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAnJGFjX29wdGFyZyciCisrICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworKyAgLS1oZSB8IC0taCkKKysgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKysgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKKytUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIC0taGVscCB8IC0taGVsIHwgLWggKQorKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKysgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKysgICAgYWNfY3Nfc2lsZW50PTogOzsKKysKKysgICMgVGhpcyBpcyBhbiBlcnJvci4KKysgIC0qKSB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysKKysgICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiCisrICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisgCistIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKKy0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCistIworLSMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KKy1hY19kQT0ncyVeXChbIAldKlwpI1woWyAJXSpkZWZpbmVbIAldWyAJXSpcKScKKy1hY19kQj0nXChbIAldWyAJXSpcKVteIAldKiVcMSNcMicKKy1hY19kQz0nXDMnCistYWNfZEQ9JyVnJworLSMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGggdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCistYWNfdUE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCistYWNfdUI9J1woWyAJXVwpJVwxI1wyZGVmaW5lXDMnCistYWNfdUM9JyAnCistYWNfdUQ9J1w0JWcnCistIyBhY19lIHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KKy1hY19lQT0ncyVeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKKy1hY19lQj0nJCVcMSNcMmRlZmluZVwzJworLWFjX2VDPScgJworLWFjX2VEPSclZycKKy0KKy1pZiB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iICE9IHNldDsgdGhlbgorLUVPRgorLWNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorLSAgQ09ORklHX0hFQURFUlM9ImNvbW1vbi9pY3VjZmcuaCIKKy1FT0YKKy1jYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCistZmkKKy1mb3IgYWNfZmlsZSBpbiAuLiAkQ09ORklHX0hFQURFUlM7IGRvIGlmIHRlc3QgIngkYWNfZmlsZSIgIT0geC4uOyB0aGVuCistICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCistICBjYXNlICIkYWNfZmlsZSIgaW4KKy0gICo6KikgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyVbXjpdKjolJSdgCistICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworLSAgKikgYWNfZmlsZV9pbj0iJHthY19maWxlfS5pbiIgOzsKKyAgIGVzYWMKKysgIHNoaWZ0CisrZG9uZQorKworK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorIAorLSAgZWNobyBjcmVhdGluZyAkYWNfZmlsZQorK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKysgIGV4ZWMgNj4vZGV2L251bGwKKysgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCisrZmkKKysKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKysgIHNldCBYICckU0hFTEwnICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKysgIHNoaWZ0CisrICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCisrICBleHBvcnQgQ09ORklHX1NIRUxMCisrICBleGVjICJcJEAiCisrZmkKKyAKKy0gIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaW4gY29uZnRlc3Qub3V0CistICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorLSAgY2F0ICRhY19maWxlX2lucHV0cyA+IGNvbmZ0ZXN0LmluCistCistRU9GCistCistIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBjb25mdGVzdC52YWxzIHRoYXQgc3Vic3RpdHV0ZXMKKy0jIHRoZSBwcm9wZXIgdmFsdWVzIGludG8gY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIEFuZCBmaXJzdDoKKy0jIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorLSMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGluIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cy4KKy1ybSAtZiBjb25mdGVzdC52YWxzCistY2F0ID4gY29uZnRlc3QuaGRyIDw8XEVPRgorLXMvW1xcJiVdL1xcJi9nCistcyVbXFwkYF0lXFwmJWcKKy1zJSNkZWZpbmUgXChbQS1aYS16X11bQS1aYS16MC05X10qXCkgKlwoLipcKSUke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSVncAorLXMlYWNfZCVhY191JWdwCistcyVhY191JWFjX2UlZ3AKKy1FT0YKKy1zZWQgLW4gLWYgY29uZnRlc3QuaGRyIGNvbmZkZWZzLmggPiBjb25mdGVzdC52YWxzCistcm0gLWYgY29uZnRlc3QuaGRyCistCistIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgorLSMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKy0jIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKy1jYXQgPj4gY29uZnRlc3QudmFscyA8PFxFT0YKKy1zJV5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiUvKiAmICovJQorLUVPRgorK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytleGVjIDU+PmNvbmZpZy5sb2cKKyt7CisrICBlY2hvCisrICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworK19BU0JPWAorKyAgJGFzX2VjaG8gIiRhY19sb2ciCisrfSA+JjUKKysKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytfQUNFT0YKKyAKKy0jIEJyZWFrIHVwIGNvbmZ0ZXN0LnZhbHMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24KKy0jIHRoZSBzaXplIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vLgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAKKy1ybSAtZiBjb25mdGVzdC50YWlsCistd2hpbGUgOgorKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworIGRvCistICBhY19saW5lcz1gZ3JlcCAtYyAuIGNvbmZ0ZXN0LnZhbHNgCistICAjIGdyZXAgLWMgZ2l2ZXMgZW1wdHkgb3V0cHV0IGZvciBhbiBlbXB0eSBmaWxlIG9uIHNvbWUgQUlYIHN5c3RlbXMuCistICBpZiB0ZXN0IC16ICIkYWNfbGluZXMiIHx8IHRlc3QgIiRhY19saW5lcyIgLWVxIDA7IHRoZW4gYnJlYWs7IGZpCistICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gY29uZnRlc3QuZnJhZy4KKy0gIGVjaG8gJyAgY2F0ID4gY29uZnRlc3QuZnJhZyA8PENFT0YnID4+ICRDT05GSUdfU1RBVFVTCistICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnZhbHMgPj4gJENPTkZJR19TVEFUVVMKKy0gIGVjaG8gJ0NFT0YKKy0gIHNlZCAtZiBjb25mdGVzdC5mcmFnIGNvbmZ0ZXN0LmluID4gY29uZnRlc3Qub3V0CistICBybSAtZiBjb25mdGVzdC5pbgorLSAgbXYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0LmluCistJyA+PiAkQ09ORklHX1NUQVRVUworLSAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LnZhbHMgPiBjb25mdGVzdC50YWlsCistICBybSAtZiBjb25mdGVzdC52YWxzCistICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnZhbHMKKy1kb25lCistcm0gLWYgY29uZnRlc3QudmFscworLQorLWNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKKy0gIHJtIC1mIGNvbmZ0ZXN0LmZyYWcgY29uZnRlc3QuaAorLSAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuICAqLyIgPiBjb25mdGVzdC5oCistICBjYXQgY29uZnRlc3QuaW4gPj4gY29uZnRlc3QuaAorLSAgcm0gLWYgY29uZnRlc3QuaW4KKy0gIGlmIGNtcCAtcyAkYWNfZmlsZSBjb25mdGVzdC5oIDI+L2Rldi9udWxsOyB0aGVuCistICAgIGVjaG8gIiRhY19maWxlIGlzIHVuY2hhbmdlZCIKKy0gICAgcm0gLWYgY29uZnRlc3QuaAorKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorKyAgICAiY29tbW9uL2ljdWNmZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb21tb24vaWN1Y2ZnLmgiIDs7CisrICAgICJpY3VkZWZzLm1rIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGljdWRlZnMubWsiIDs7CisrICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKysgICAgImRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgImRhdGEvaWN1cGtnLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkYXRhL2ljdXBrZy5pbmMiIDs7CisrICAgICJjb21tb24vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY29tbW9uL01ha2VmaWxlIiA7OworKyAgICAiY29uZmlnL01ha2VmaWxlLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb25maWcvTWFrZWZpbGUuaW5jIiA7OworKyAgICAiaTE4bi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpMThuL01ha2VmaWxlIiA7OworKyAgICAibGF5b3V0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxheW91dC9NYWtlZmlsZSIgOzsKKysgICAgImxheW91dGV4L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxheW91dGV4L01ha2VmaWxlIiA7OworKyAgICAiaW8vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW8vTWFrZWZpbGUiIDs7CisrICAgICJleHRyYS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleHRyYS9NYWtlZmlsZSIgOzsKKysgICAgImV4dHJhL3Vjb252L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL3Vjb252L01ha2VmaWxlIiA7OworKyAgICAiZXh0cmEvc2NycHRydW4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0cmEvc2NycHRydW4vTWFrZWZpbGUiIDs7CisrICAgICJzdHViZGF0YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzdHViZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9jdGVzdGZ3L01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5yYi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5yYi9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbnVjYS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW51Y2EvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5jY29kZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jY29kZS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbmNtbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jbW4vTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5jbnZhbC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jbnZhbC9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbm5hbWVzL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZ2VudGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW50ZXN0L01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5ub3JtL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5wbmFtZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5wbmFtZS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2dlbmJyay9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5icmsvTWFrZWZpbGUiIDs7CisrICAgICJ0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL2ljdXN3YXAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL3BrZ2RhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgInRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIiA7OworKyAgICAidG9vbHMvZHVtcGNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2R1bXBjZS9NYWtlZmlsZSIgOzsKKysgICAgInRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9NYWtlZmlsZSIgOzsKKysgICAgInRlc3QvdGVzdGRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90ZXN0ZGF0YS9NYWtlZmlsZSIgOzsKKysgICAgInRlc3QvaGRydHN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvaGRydHN0L01ha2VmaWxlIiA7OworKyAgICAidGVzdC9pbnRsdGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2ludGx0ZXN0L01ha2VmaWxlIiA7OworKyAgICAidGVzdC9jaW50bHRzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIiA7OworKyAgICAidGVzdC9pb3Rlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9pb3Rlc3QvTWFrZWZpbGUiIDs7CisrICAgICJ0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGhhaXRlc3QvTWFrZWZpbGUiIDs7CisrICAgICJ0ZXN0L3Rlc3RtYXAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90ZXN0bWFwL01ha2VmaWxlIiA7OworKyAgICAidGVzdC9sZXRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9sZXRlc3QvTWFrZWZpbGUiIDs7CisrICAgICJ0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90aHJlYWR0ZXN0L01ha2VmaWxlIiA7OworKyAgICAic2FtcGxlcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzYW1wbGVzL01ha2VmaWxlIiA7OworKyAgICAic2FtcGxlcy9kYXRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSIgOzsKKysgICAgInNhbXBsZXMvY2FsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvY2FsL01ha2VmaWxlIiA7OworKyAgICAic2FtcGxlcy9sYXlvdXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc2FtcGxlcy9sYXlvdXQvTWFrZWZpbGUiIDs7CisrICAgICJjb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGNvbW1vbi91bmljb2RlL3BsYXRmb3JtLmgiIDs7CisrCisrICAqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworKyAgZXNhYworK2RvbmUKKysKKysKKysjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisrIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisrIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorKyMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCisraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKysgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisrICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworK2ZpCisrCisrIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisrIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKysjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisrIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorKyRkZWJ1ZyB8fAorK3sKKysgIHRtcD0KKysgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisrICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworKycgMAorKyAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyt9CisrIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisrCisreworKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisrICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorK30gIHx8CisreworKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKysgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorK30gfHwKKyt7CisrICAgJGFzX2VjaG8gIiRhc19tZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrfQorKworKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKysjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgorK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisrCisrCisrYWNfY3I9JworJworK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKKytpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorKyAgYWNfY3NfYXdrX2NyPSdcXHInCisrZWxzZQorKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorK2ZpCisrCisrZWNobyAnQkVHSU4geycgPiIkdG1wL3N1YnMxLmF3ayIgJiYKKytfQUNFT0YKKysKKysKKyt7CisrICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorKyAgZWNobyAiX0FDRU9GIgorK30gPmNvbmYkJHN1YnMuc2ggfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCisrYWNfZGVsaW09JyUhXyEjICcKKytmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKysgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisrICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKworKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKysgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisrICAgIGJyZWFrCisrICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysgIGVsc2UKKysgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKysgIGZpCisrZG9uZQorK3JtIC1mIGNvbmYkJHN1YnMuc2gKKysKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytjYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCisrX0FDRU9GCisrc2VkIC1uICcKKytoCisrcy9eL1NbIi87IHMvIS4qLyJdPS8KKytwCisrZworK3MvXlteIV0qIS8vCisrOnJlcGwKKyt0IHJlcGwKKytzLyciJGFjX2RlbGltIickLy8KKyt0IGRlbGltCisrOm5sCisraAorK3MvXCguXHsxNDhcfVwpLiovXDEvCisrdCBtb3JlMQorK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KKytwCisrbgorK2IgcmVwbAorKzptb3JlMQorK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KKytwCisrZworK3MvLlx7MTQ4XH0vLworK3QgbmwKKys6ZGVsaW0KKytoCisrcy9cKC5cezE0OFx9XCkuKi9cMS8KKyt0IG1vcmUyCisrcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KKytwCisrYgorKzptb3JlMgorK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KKytwCisrZworK3MvLlx7MTQ4XH0vLworK3QgZGVsaW0KKysnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisrL15bXiIiXS97CisrICBOCisrICBzL1xuLy8KKyt9CisrJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorK3JtIC1mIGNvbmYkJHN1YnMuYXdrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrX0FDQVdLCisrY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKysgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisrICBGUyA9ICIHIgorKworK30KKyt7CisrICBsaW5lID0gJCAwCisrICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKysgIHN1YnN0ZWQgPSAwCisrICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCisrICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisrICAgIGtleSA9IGZpZWxkW2ldCisrICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCisrICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisrICAgICAgdmFsdWUgPSBTW2tleV0KKysgICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCisrICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKysgICAgICBzdWJzdGVkID0gMQorKyAgICB9IGVsc2UKKysgICAgICBsZW4gKz0gMSArIGtleWxlbgorKyAgfQorKworKyAgcHJpbnQgbGluZQorK30KKysKKytfQUNBV0sKKytfQUNFT0YKKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorK2Vsc2UKKysgIGNhdAorK2ZpIDwgIiR0bXAvc3ViczEuYXdrIiA+ICIkdG1wL3N1YnMuYXdrIiBcCisrICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKytfQUNFT0YKKysKKysjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKysjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisrIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisrICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKKytzLzoqXCQoc3JjZGlyKToqLzovCisrcy86Klwke3NyY2Rpcn06Ki86LworK3MvOipAc3JjZGlyQDoqLzovCisrcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvCisrcy86KiQvLworK3MvXltePV0qPVsJIF0qJC8vCisrfScKKytmaQorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKytmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisrCisrIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisrIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgorKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgorK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KKytjYXQgPiIkdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKKytCRUdJTiB7CisrX0FDRU9GCisrCisrIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKysjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisrIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorKworKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKysjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCisrYWNfZGVsaW09JyUhXyEjICcKKytmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKysgIGFjX3Q9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorKyAgaWYgdGVzdCAteiAiJGFjX3QiOyB0aGVuCisrICAgIGJyZWFrCisrICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgZWxzZQorLSAgICAjIFJlbW92ZSBsYXN0IHNsYXNoIGFuZCBhbGwgdGhhdCBmb2xsb3dzIGl0LiAgTm90IGFsbCBzeXN0ZW1zIGhhdmUgZGlybmFtZS4KKy0gICAgICBhY19kaXI9YGVjaG8gJGFjX2ZpbGV8c2VkICdzJS9bXi9dW14vXSokJSUnYAorLSAgICAgIGlmIHRlc3QgIiRhY19kaXIiICE9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorLSAgICAgICMgVGhlIGZpbGUgaXMgaW4gYSBzdWJkaXJlY3RvcnkuCistICAgICAgdGVzdCAhIC1kICIkYWNfZGlyIiAmJiBta2RpciAiJGFjX2RpciIKKysgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKysgIGZpCisrZG9uZQorKworKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorKyMgbGlrZXdpc2UgUCBjb250YWlucyBtYWNybyBwYXJhbWV0ZXJzIGlmIGFueS4gIFByZXNlcnZlIGJhY2tzbGFzaAorKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisrCisrYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKKytzZWQgLW4gJworK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZworK3QgcnNldAorKzpyc2V0Cisrcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KKyt0IGRlZgorK2QKKys6ZGVmCisrcy9cXCQvLworK3QgYnNubAorK3MvWyJcXF0vXFwmL2cKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKKytEWyJcMSJdPSIgXDMiL3AKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorK2QKKys6YnNubAorK3MvWyJcXF0vXFwmL2cKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKKytEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKKyt0IGNvbnQKKytzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMlxcXFxcXG4iXFwvcAorK3QgY29udAorK2QKKys6Y29udAorK24KKytzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKKyt0IGNsZWFyCisrOmNsZWFyCisrcy9cXCQvLworK3QgYnNubGMKKytzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKKytkCisrOmJzbmxjCisrcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCisrYiBjb250CisrJyA8Y29uZmRlZnMuaCB8IHNlZCAnCisrcy8nIiRhY19kZWxpbSInLyJcXFwKKysiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisrCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorKyAgRlMgPSAiByIKKyt9CisrL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisrICBsaW5lID0gXCQgMAorKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisrICBpZiAoYXJnWzFdID09ICIjIikgeworKyAgICBkZWZ1bmRlZiA9IGFyZ1syXQorKyAgICBtYWMxID0gYXJnWzNdCisrICB9IGVsc2UgeworKyAgICBkZWZ1bmRlZiA9IHN1YnN0cihhcmdbMV0sIDIpCisrICAgIG1hYzEgPSBhcmdbMl0KKysgIH0KKysgIHNwbGl0KG1hYzEsIG1hYzIsICIoIikgIykKKysgIG1hY3JvID0gbWFjMlsxXQorKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisrICBpZiAoRF9pc19zZXRbbWFjcm9dKSB7CisrICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisrICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKysgICAgbmV4dAorKyAgfSBlbHNlIHsKKysgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorKyAgICAjIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisrICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworKyAgICAgIHByaW50ICIvKiIsIHByZWZpeCBkZWZ1bmRlZiwgbWFjcm8sICIqLyIKKysgICAgICBuZXh0CisrICAgIH0KKysgIH0KKyt9CisreyBwcmludCB9CisrX0FDQVdLCisrX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorKworKworK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgICIKKytzaGlmdAorK2ZvciBhY190YWcKKytkbworKyAgY2FzZSAkYWNfdGFnIGluCisrICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisrICA6W0ZITF0qOiopOzsKKysgIDpMKiB8IDpDKjoqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB0YWcgJGFjX3RhZyIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdGFnICRhY190YWciID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisrICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworKyAgZXNhYworKyAgYWNfc2F2ZV9JRlM9JElGUworKyAgSUZTPToKKysgIHNldCB4ICRhY190YWcKKysgIElGUz0kYWNfc2F2ZV9JRlMKKysgIHNoaWZ0CisrICBhY19maWxlPSQxCisrICBzaGlmdAorKworKyAgY2FzZSAkYWNfbW9kZSBpbgorKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisrICA6W0ZIXSkKKysgICAgYWNfZmlsZV9pbnB1dHM9CisrICAgIGZvciBhY19mCisrICAgIGRvCisrICAgICAgY2FzZSAkYWNfZiBpbgorKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKysgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisrCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisrCSAgIGNhc2UgJGFjX2YgaW4KKysJICAgW1xcLyRdKikgZmFsc2U7OworKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisrCSAgIGVzYWMgfHwKKysJICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRhY19mIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKysgICAgICBlc2FjCisrICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworKyAgICAgIGFjX2ZpbGVfaW5wdXRzPSIkYWNfZmlsZV9pbnB1dHMgJyRhY19mJyIKKysgICAgZG9uZQorKworKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorKyAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisrICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisrICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKysJICAkYXNfZWNobyAiJCoiIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZycKKysJYCcgYnkgY29uZmlndXJlLicKKysgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorKyAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisrICAgIGZpCisrICAgICMgTmV1dHJhbGl6ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW50ZXJwcmV0ZWQgYnkgc2VkIGluIHJlcGxhY2VtZW50IHN0cmluZ3MuCisrICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorKyAgICAgICBhY19zZWRfY29uZl9pbnB1dD1gJGFzX2VjaG8gIiRjb25maWd1cmVfaW5wdXQiIHwKKysgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisrICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworKyAgICBlc2FjCisrCisrICAgIGNhc2UgJGFjX3RhZyBpbgorKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJHRtcC9zdGRpbiIgXAorKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKysgICAgZXNhYworKyAgICA7OworKyAgZXNhYworKworKyAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8CisrJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICAvXlhcKFwvXC9cKSQveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cKS4qL3sKKysJICAgIHMvL1wxLworKwkgICAgcQorKwkgIH0KKysJICBzLy4qLy4vOyBxJ2AKKysgIHsgYXNfZGlyPSIkYWNfZGlyIgorKyAgY2FzZSAkYXNfZGlyIGluICMoCisrICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisrICBlc2FjCisrICB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7ICRhc19ta2Rpcl9wICYmIG1rZGlyIC1wICIkYXNfZGlyIjsgfSB8fCB7CisrICAgIGFzX2RpcnM9CisrICAgIHdoaWxlIDo7IGRvCisrICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisrICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisrICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKysgICAgICBlc2FjCisrICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKysgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisrJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisrICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wvXClbXi9dLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIC9eWFwoXC9cL1wpJC97CisrCSAgICBzLy9cMS8KKysJICAgIHEKKysJICB9CisrCSAgL15YXChcL1wpLioveworKwkgICAgcy8vXDEvCisrCSAgICBxCisrCSAgfQorKwkgIHMvLiovLi87IHEnYAorKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisrICAgIGRvbmUKKysgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisrICBhY19idWlsZGRpcj0uCisrCisrY2FzZSAiJGFjX2RpciIgaW4KKysuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKysqKQorKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKysgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKysgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisrICBlc2FjIDs7CisrZXNhYworK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKysjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorKworK2Nhc2UgJHNyY2RpciBpbgorKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorKyAgICBhY19zcmNkaXI9LgorKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKysgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKysgICopICMgUmVsYXRpdmUgbmFtZS4KKysgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisrICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisrICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworK2VzYWMKKythY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisrCisrCisrICBjYXNlICRhY19tb2RlIGluCisrICA6RikKKysgICMKKysgICMgQ09ORklHX0ZJTEUKKysgICMKKysKKysgIGNhc2UgJElOU1RBTEwgaW4KKysgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKysgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworKyAgZXNhYworK19BQ0VPRgorKworK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKysjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisrIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCisrYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CisrCisrYWNfc2VkX2RhdGFyb290PScKKysvZGF0YXJvb3RkaXIvIHsKKysgIHAKKysgIHEKKyt9CisrL0BkYXRhZGlyQC9wCisrL0Bkb2NkaXJAL3AKKysvQGluZm9kaXJAL3AKKysvQGxvY2FsZWRpckAvcAorKy9AbWFuZGlyQC9wCisrJworK2Nhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KKysqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisrKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisrICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CisrX0FDRU9GCisrY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisrICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKysgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKysgIHMmQGRvY2RpckAmJGRvY2RpciZnCisrICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisrICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKysgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKytlc2FjCisrX0FDRU9GCisrCisrIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgorKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKytjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKythY19zZWRfZXh0cmE9IiRhY192cHN1YgorKyRleHRyYXN1YgorK19BQ0VPRgorK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKys6dAorKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKKytzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CisrcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CisrcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAorK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CisrcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKKytzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKKytzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKKytzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKKytzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CisrJGFjX2RhdGFyb290ZGlyX2hhY2sKKysiCisrZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKysgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKyt0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKysgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mMjt9CisrCisrICBybSAtZiAiJHRtcC9zdGRpbiIKKysgIGNhc2UgJGFjX2ZpbGUgaW4KKysgIC0pIGNhdCAiJHRtcC9vdXQiICYmIHJtIC1mICIkdG1wL291dCI7OworKyAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJHRtcC9vdXQiICIkYWNfZmlsZSI7OworKyAgZXNhYyBcCisrICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisrIDs7CisrICA6SCkKKysgICMKKysgICMgQ09ORklHX0hFQURFUgorKyAgIworKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorKyAgICB7CisrICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisrICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCisrICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCisrICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiR0bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKysgICAgZWxzZQorKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKysgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisrCXx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgZmkKKy0gICAgcm0gLWYgJGFjX2ZpbGUKKy0gICAgbXYgY29uZnRlc3QuaCAkYWNfZmlsZQorKyAgZWxzZQorKyAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKysgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIC0iID4mNQorKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIC0iID4mMjt9CisrICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICBmaQorLWZpOyBkb25lCisrIDs7CisrCisgCistRU9GCistY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCisrICBlc2FjCisrCisrZG9uZSAjIGZvciBhY190YWcKKyAKKy1FT0YKKy1jYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCisgCistZXhpdCAwCistRU9GCisreyAoZXhpdCAwKTsgZXhpdCAwOyB9CisrX0FDRU9GCisgY2htb2QgK3ggJENPTkZJR19TVEFUVVMKKy1ybSAtZnIgY29uZmRlZnMqICRhY19jbGVhbl9maWxlcworLXRlc3QgIiRub19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVTIHx8IGV4aXQgMQorK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisrCisrdGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKKysgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogd3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiYyO30KKysgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKysKKysKKysjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisrIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisrIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKysjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKysjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKysjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKysjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgorK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorKyAgYWNfY3Nfc3VjY2Vzcz06CisrICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisrICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKysgIGV4ZWMgNT4vZGV2L251bGwKKysgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKysgIGV4ZWMgNT4+Y29uZmlnLmxvZworKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKysgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrZmkKKytpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CisrZmkKKyAKKyAKKyBpZiB0ZXN0ICRJQ1VfVVNFX1RIUkVBRFMgPSAwOyB0aGVuCitPbmx5IGluIDNfMC9pY3Uvc291cmNlL2V4dHJhL3NjcnB0cnVuOiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZTogbGliCitPbmx5IGluIDNfMC9pY3Uvc291cmNlL3NhbXBsZXMvbGF5b3V0OiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZS90ZXN0L2xldGVzdDogTWFrZWZpbGUKK09ubHkgaW4gM18wL2ljdS9zb3VyY2UvdGVzdC90ZXN0bWFwOiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZS90ZXN0L3RoYWl0ZXN0OiBNYWtlZmlsZQorT25seSBpbiAzXzAvaWN1L3NvdXJjZS90ZXN0L3RocmVhZHRlc3Q6IE1ha2VmaWxlCitPbmx5IGluIDNfMC9pY3Uvc291cmNlL3Rvb2xzL2R1bXBjZTogTWFrZWZpbGUKZGlmZiAtLWdpdCBhL211bHRpL2MvcGF0Y2gvM18yIGIvbXVsdGkvYy9wYXRjaC8zXzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyYjVmMwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2MvcGF0Y2gvM18yCkBAIC0wLDAgKzEsMTIzODQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0tLSAzXzIub3JpZy9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4gICAgICAgIDIwMDgtMTAtMjAgMTQ6NTc6NTIuMDAwMDAwMDAwIC0wNzAwCisrKysgM18yL2ljdS9zb3VyY2UvY29uZmlnL21oLWRhcndpbiAgICAgMjAwOC0xMC0yMCAxNTo1NzoyOC4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMyw4ICsxMyw4IEBACisgTERfRkxBR1MgKz0gLWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lcworIAorICMjIENvbW1hbmRzIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgZmlsZXMKKy1HRU5fREVQUy5jPQkkKENDKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCistR0VOX0RFUFMuY2M9CSQoQ1hYKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisrR0VOX0RFUFMuYz0JZWNobyAKKytHRU5fREVQUy5jYz0JZWNobyAKKyAKKyAjIyBDb21tYW5kcyB0byBjb21waWxlCisgQ09NUElMRS5jPQkkKENDKSAkKERFRlMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAtZm5vLWNvbW1vbiAtYworT25seSBpbiAzXzAub3JpZy9pY3Uvc291cmNlOiBjb25maWcuY2FjaGUKK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmlnLmxvZworZGlmZiAtcnUgM18wLm9yaWcvaWN1L3NvdXJjZS9jb25maWd1cmUgM18wL2ljdS9zb3VyY2UvY29uZmlndXJlCistLS0gM18yLm9yaWcvaWN1L3NvdXJjZS9jb25maWd1cmUKKysrKyAzXzIvaWN1L3NvdXJjZS9jb25maWd1cmUKKzJkMQorPCAKKzQsNWMzCis8ICMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgYXV0b2NvbmYgdmVyc2lvbiAyLjEzIAorPCAjIENvcHlyaWdodCAoQykgMTk5MiwgOTMsIDk0LCA5NSwgOTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistLS0KKz4gIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjMuCis2YTUsNgorPiAjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKz4gIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOGE5LDU3MQorPiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCis+ICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworPiAKKz4gIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCis+IERVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKz4gaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis+ICAgZW11bGF0ZSBzaAorPiAgIE5VTExDTUQ9OgorPiAgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorPiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCis+ICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCis+ICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKz4gZWxzZQorPiAgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorPiAgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworPiBlc2FjCis+IAorPiBmaQorPiAKKz4gCis+IAorPiAKKz4gIyBQQVRIIG5lZWRzIENSCis+ICMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KKz4gYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCis+IGFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworPiBhc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKKz4gYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworPiBhc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKz4gCis+IGFzX25sPScKKz4gJworPiBleHBvcnQgYXNfbmwKKz4gIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KKz4gYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKz4gYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCis+IGFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCis+IGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCis+ICAgYXNfZWNobz0ncHJpbnRmICVzXG4nCis+ICAgYXNfZWNob19uPSdwcmludGYgJXMnCis+IGVsc2UKKz4gICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKz4gICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCis+ICAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCis+ICAgZWxzZQorPiAgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKz4gICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCis+ICAgICAgIGFyZz0kMTsKKz4gICAgICAgY2FzZSAkYXJnIGluCis+ICAgICAgICoiJGFzX25sIiopCis+IAlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKz4gCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7Cis+ICAgICAgIGVzYWM7Cis+ICAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKz4gICAgICcKKz4gICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorPiAgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKz4gICBmaQorPiAgIGV4cG9ydCBhc19lY2hvX2JvZHkKKz4gICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCis+IGZpCis+IAorPiAjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKz4gaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKz4gICBQQVRIX1NFUEFSQVRPUj06Cis+ICAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworPiAgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKz4gICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCis+ICAgfQorPiBmaQorPiAKKz4gIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCis+IGlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGFzX3Vuc2V0PXVuc2V0Cis+IGVsc2UKKz4gICBhc191bnNldD1mYWxzZQorPiBmaQorPiAKKz4gCis+ICMgSUZTCis+ICMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCis+ICMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorPiAjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKz4gIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorPiBJRlM9IiAiIgkkYXNfbmwiCis+IAorPiAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorPiBjYXNlICQwIGluCis+ICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworPiAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKz4gICAgICA7OworPiBlc2FjCis+ICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKz4gIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCis+IGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKz4gICBhc19teXNlbGY9JDAKKz4gZmkKKz4gaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorPiAgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCis+ICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IGZpCis+IAorPiAjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKz4gZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorPiBkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorPiBkb25lCis+IFBTMT0nJCAnCis+IFBTMj0nPiAnCis+IFBTND0nKyAnCis+IAorPiAjIE5MUyBudWlzYW5jZXMuCis+IExDX0FMTD1DCis+IGV4cG9ydCBMQ19BTEwKKz4gTEFOR1VBR0U9QworPiBleHBvcnQgTEFOR1VBR0UKKz4gCis+ICMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorPiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorPiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorPiAgIGFzX2V4cHI9ZXhwcgorPiBlbHNlCis+ICAgYXNfZXhwcj1mYWxzZQorPiBmaQorPiAKKz4gaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorPiAgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCis+IGVsc2UKKz4gICBhc19iYXNlbmFtZT1mYWxzZQorPiBmaQorPiAKKz4gCis+ICMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKz4gYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Cis+ICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCis+IAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKz4gJGFzX2VjaG8gWC8iJDAiIHwKKz4gICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcL1woXC9cL1wpJC97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIC9eWFwvXChcL1wpLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICBzLy4qLy4vOyBxJ2AKKz4gCis+ICMgQ0RQQVRILgorPiAkYXNfdW5zZXQgQ0RQQVRICis+IAorPiAKKz4gaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorPiAgIGlmIChldmFsICI6IikgMj4vZGV2L251bGw7IHRoZW4KKz4gICBhc19oYXZlX3JlcXVpcmVkPXllcworPiBlbHNlCis+ICAgYXNfaGF2ZV9yZXF1aXJlZD1ubworPiBmaQorPiAKKz4gICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0geWVzICYmCSAoZXZhbCAiOgorPiAoYXNfZnVuY19yZXR1cm4gKCkgeworPiAgIChleGl0IFwkMSkKKz4gfQorPiBhc19mdW5jX3N1Y2Nlc3MgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDAKKz4gfQorPiBhc19mdW5jX2ZhaWx1cmUgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDEKKz4gfQorPiBhc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKz4gICByZXR1cm4gMAorPiB9Cis+IGFzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworPiAgIHJldHVybiAxCis+IH0KKz4gCis+IGV4aXRjb2RlPTAKKz4gaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorPiAgIGV4aXRjb2RlPTEKKz4gICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorPiBmaQorPiAKKz4gdGVzdCBcJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IAorPiAoCis+ICAgYXNfbGluZW5vXzE9XCRMSU5FTk8KKz4gICBhc19saW5lbm9fMj1cJExJTkVOTworPiAgIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgorPiAgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzJcIikgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+ICIpIDI+IC9kZXYvbnVsbDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgIGFzX2NhbmRpZGF0ZV9zaGVsbHM9Cis+ICAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBjYXNlICRhc19kaXIgaW4KKz4gCSAvKikKKz4gCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKz4gCSAgICAgYXNfY2FuZGlkYXRlX3NoZWxscz0iJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJGFzX2Rpci8kYXNfYmFzZSIKKz4gCSAgIGRvbmU7OworPiAgICAgICAgZXNhYworPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IAorPiAgICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworPiAJICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKz4gCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKz4gCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorPiBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBlbXVsYXRlIHNoCis+ICAgTlVMTENNRD06Cis+ICAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCis+ICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKz4gICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKz4gICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorPiBlbHNlCis+ICAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCis+ICAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Cis+IGVzYWMKKz4gCis+IGZpCis+IAorPiAKKz4gOgorPiBfQVNFT0YKKz4gfTsgdGhlbgorPiAgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKKz4gCSAgICAgICBhc19oYXZlX3JlcXVpcmVkPXllcworPiAJICAgICAgIGlmIHsgIiRhc19zaGVsbCIgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgorPiBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBlbXVsYXRlIHNoCis+ICAgTlVMTENNRD06Cis+ICAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCis+ICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKz4gICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKz4gICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorPiBlbHNlCis+ICAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCis+ICAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Cis+IGVzYWMKKz4gCis+IGZpCis+IAorPiAKKz4gOgorPiAoYXNfZnVuY19yZXR1cm4gKCkgeworPiAgIChleGl0ICQxKQorPiB9Cis+IGFzX2Z1bmNfc3VjY2VzcyAoKSB7Cis+ICAgYXNfZnVuY19yZXR1cm4gMAorPiB9Cis+IGFzX2Z1bmNfZmFpbHVyZSAoKSB7Cis+ICAgYXNfZnVuY19yZXR1cm4gMQorPiB9Cis+IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgeworPiAgIHJldHVybiAwCis+IH0KKz4gYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7Cis+ICAgcmV0dXJuIDEKKz4gfQorPiAKKz4gZXhpdGNvZGU9MAorPiBpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgorPiBmaQorPiAKKz4gaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KKz4gZmkKKz4gCis+IGlmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiJDEiICk7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBleGl0Y29kZT0xCis+ICAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCis+IGZpCis+IAorPiB0ZXN0ICRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorPiAKKz4gKAorPiAgIGFzX2xpbmVub18xPSRMSU5FTk8KKz4gICBhc19saW5lbm9fMj0kTElORU5PCis+ICAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCis+ICAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIikgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IAorPiBfQVNFT0YKKz4gfTsgdGhlbgorPiAgIGJyZWFrCis+IGZpCis+IAorPiBmaQorPiAKKz4gICAgICAgZG9uZQorPiAKKz4gICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKz4gICBmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOVgorPiAJZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKz4gCWRvbmUKKz4gCWV4cG9ydCBDT05GSUdfU0hFTEwKKz4gCWV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KKz4gZmkKKz4gCis+IAorPiAgICAgaWYgdGVzdCAkYXNfaGF2ZV9yZXF1aXJlZCA9IG5vOyB0aGVuCis+ICAgZWNobyBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIHRoZQorPiAgICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCis+ICAgICAgIGVjaG8gbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEKKz4gICAgICAgZWNobyBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuCis+ICAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorPiBmaQorPiAKKz4gCis+IGZpCis+IAorPiBmaQorPiAKKz4gCis+IAorPiAoZXZhbCAiYXNfZnVuY19yZXR1cm4gKCkgeworPiAgIChleGl0IFwkMSkKKz4gfQorPiBhc19mdW5jX3N1Y2Nlc3MgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDAKKz4gfQorPiBhc19mdW5jX2ZhaWx1cmUgKCkgeworPiAgIGFzX2Z1bmNfcmV0dXJuIDEKKz4gfQorPiBhc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKz4gICByZXR1cm4gMAorPiB9Cis+IGFzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworPiAgIHJldHVybiAxCis+IH0KKz4gCis+IGV4aXRjb2RlPTAKKz4gaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KKz4gZmkKKz4gCis+IGlmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorPiAgIGV4aXRjb2RlPTEKKz4gICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCis+IGZpCis+IAorPiBpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCis+IGZpCis+IAorPiBpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgZXhpdGNvZGU9MQorPiAgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorPiBmaQorPiAKKz4gdGVzdCBcJGV4aXRjb2RlID0gMCIpIHx8IHsKKz4gICBlY2hvIE5vIHNoZWxsIGZvdW5kIHRoYXQgc3VwcG9ydHMgc2hlbGwgZnVuY3Rpb25zLgorPiAgIGVjaG8gUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCis+ICAgZWNobyBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLgorPiAgIGVjaG8gVGhpcyBjYW4gaGVscCB1cyBpbXByb3ZlIGZ1dHVyZSBhdXRvY29uZiB2ZXJzaW9ucy4KKz4gICBlY2hvIENvbmZpZ3VyYXRpb24gd2lsbCBub3cgcHJvY2VlZCB3aXRob3V0IHNoZWxsIGZ1bmN0aW9ucy4KKz4gfQorPiAKKz4gCis+IAorPiAgIGFzX2xpbmVub18xPSRMSU5FTk8KKz4gICBhc19saW5lbm9fMj0kTElORU5PCis+ICAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCis+ICAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7Cis+IAorPiAgICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KKz4gICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCis+ICAgIyBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCis+ICAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKKz4gICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCis+ICAgIyB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAorPiAgICMgY2FzZSBhdCBsaW5lIGVuZC4KKz4gICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKz4gICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKKz4gICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorPiAgIHNlZCAtbiAnCis+ICAgICBwCis+ICAgICAvWyRdTElORU5PLz0KKz4gICAnIDwkYXNfbXlzZWxmIHwKKz4gICAgIHNlZCAnCis+ICAgICAgIHMvWyRdTElORU5PLiovJi0vCis+ICAgICAgIHQgbGluZW5vCis+ICAgICAgIGIKKz4gICAgICAgOmxpbmVubworPiAgICAgICBOCis+ICAgICAgIDpsb29wCis+ICAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworPiAgICAgICB0IGxvb3AKKz4gICAgICAgcy8tXG4uKi8vCis+ICAgICAnID4kYXNfbWUubGluZW5vICYmCis+ICAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4gICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworPiAgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorPiAgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCis+ICAgLiAiLi8kYXNfbWUubGluZW5vIgorPiAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorPiAgIGV4aXQKKz4gfQorPiAKKz4gCis+IGlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGFzX2Rpcm5hbWU9ZGlybmFtZQorPiBlbHNlCis+ICAgYXNfZGlybmFtZT1mYWxzZQorPiBmaQorPiAKKz4gRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KKz4gY2FzZSBgZWNobyAtbiB4YCBpbgorPiAtbiopCis+ICAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKz4gICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKz4gICAqKSAgIEVDSE9fQz0nXGMnOzsKKz4gICBlc2FjOzsKKz4gKikKKz4gICBFQ0hPX049Jy1uJzs7Cis+IGVzYWMKKz4gaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKz4gICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKz4gICBhc19leHByPWV4cHIKKz4gZWxzZQorPiAgIGFzX2V4cHI9ZmFsc2UKKz4gZmkKKz4gCis+IHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCis+IGlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorPiAgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKKz4gZWxzZQorPiAgIHJtIC1mIGNvbmYkJC5kaXIKKz4gICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCis+IGZpCis+IGlmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKz4gICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKz4gICAgIGFzX2xuX3M9J2xuIC1zJworPiAgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKz4gICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCis+ICAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKz4gICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCis+ICAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8Cis+ICAgICAgIGFzX2xuX3M9J2NwIC1wJworPiAgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCis+ICAgICBhc19sbl9zPWxuCis+ICAgZWxzZQorPiAgICAgYXNfbG5fcz0nY3AgLXAnCis+ICAgZmkKKz4gZWxzZQorPiAgIGFzX2xuX3M9J2NwIC1wJworPiBmaQorPiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCis+IHJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKz4gCis+IGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKz4gICBhc19ta2Rpcl9wPToKKz4gZWxzZQorPiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCis+ICAgYXNfbWtkaXJfcD1mYWxzZQorPiBmaQorPiAKKz4gaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGFzX3Rlc3RfeD0ndGVzdCAteCcKKz4gZWxzZQorPiAgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgICAgYXNfbHNfTF9vcHRpb249TAorPiAgIGVsc2UKKz4gICAgIGFzX2xzX0xfb3B0aW9uPQorPiAgIGZpCis+ICAgYXNfdGVzdF94PScKKz4gICAgIGV2YWwgc2ggLWMgJ1wnJworPiAgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKz4gCXRlc3QgLWQgIiQxLy4iOworPiAgICAgICBlbHNlCis+IAljYXNlICQxIGluCis+IAktKilzZXQgIi4vJDEiOzsKKz4gCWVzYWM7Cis+IAljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbgorPiAJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorPiAgICAgJ1wnJyBzaAorPiAgICcKKz4gZmkKKz4gYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKz4gCis+ICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKz4gYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKz4gCis+ICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorPiBhc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorPiAKKzEwLDExYzU3Myw1ODMKKzwgIyBEZWZhdWx0czoKKzwgYWNfaGVscD0KKy0tLQorPiAKKz4gZXhlYyA3PCYwIDwvZGV2L251bGwgNj4mMQorPiAKKz4gIyBOYW1lIG9mIHRoZSBob3N0LgorPiAjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorPiAjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KKz4gYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCis+IAorPiAjCis+ICMgSW5pdGlhbGl6YXRpb25zLgorPiAjCisxMyw1MmM1ODUsODEwCis8ICMgQW55IGFkZGl0aW9ucyBmcm9tIGNvbmZpZ3VyZS5pbjoKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1zdHJpY3QgICAgICAgICBjb21waWxlIHdpdGggc3RyaWN0IGNvbXBpbGVyIG9wdGlvbnMgW2RlZmF1bHQ9bm9dIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLTY0Yml0LWxpYnMgICAgIGJ1aWxkIDY0LWJpdCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1zaGFyZWQgICAgICAgICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICAgLS1lbmFibGUtc3RhdGljICAgICAgICAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD1ub10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICAgLS1lbmFibGUtZGVidWcgICAgICAgICAgYnVpbGQgZGVidWcgbGlicmFyaWVzIFtkZWZhdWx0PW5vXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1yZWxlYXNlICAgICAgICBidWlsZCByZWxlYXNlIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXJlbmFtaW5nICAgICAgIGFkZCBhIHZlcnNpb24gc3VmZml4IHRvIHN5bWJvbHMgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS10cmFjaW5nICAgICAgICBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyBbZGVmYXVsdD15ZXNdIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXJwYXRoICAgICAgICAgIHVzZSBycGF0aCB3aGVuIGxpbmtpbmcgW2RlZmF1bHQgaXMgb25seSBpZiBuZWNlc3NhcnldIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXRocmVhZHMgICAgICAgIGJ1aWxkIElDVSB3aXRoIHRocmVhZCBzYWZldHkgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLXdpdGgtaW9zdHJlYW09dmVyc2lvbiBzcGVjaWZ5IHRoZSB2ZXJzaW9uIG9mIGlvc3RyZWFtIHRvIHVzZSAobm9uZSwgb2xkLCBzdGQsIGF1dG8pIFtkZWZhdWx0PWF1dG9dIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLWV4dHJhcyAgICAgICAgIGJ1aWxkIElDVSBleHRyYXMgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLWVuYWJsZS1pY3VpbyAgICAgICAgICBidWlsZCBJQ1UncyBpY3VpbyBsaWJyYXJ5IFtkZWZhdWx0PXllc10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICAgLS1lbmFibGUtbGF5b3V0ICAgICAgICAgYnVpbGQgSUNVJ3MgbGF5b3V0IGxpYnJhcnkgW2RlZmF1bHQ9eWVzXSIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9dHlwZSBzcGVjaWZ5IGhvdyB0byBwYWNrYWdlIElDVSBkYXRhIChmaWxlcywgYXJjaGl2ZSwgbGlicmFyeSwgYXV0bykgW2RlZmF1bHQ9YXV0b10iCis8IGFjX2hlbHA9IiRhY19oZWxwCis8ICIKKzwgYWNfaGVscD0iJGFjX2hlbHAKKzwgICAtLXdpdGgtbGlicmFyeS1zdWZmaXg9c3VmZml4ICAgIHRhZyBhIHN1ZmZpeCB0byB0aGUgbGlicmFyeSBuYW1lcyBbZGVmYXVsdD1dIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXRlc3RzICAgICAgICAgIGJ1aWxkIElDVSB0ZXN0cyBbZGVmYXVsdD15ZXNdIgorPCBhY19oZWxwPSIkYWNfaGVscAorPCAgIC0tZW5hYmxlLXNhbXBsZXMgICAgICAgIGJ1aWxkIElDVSBzYW1wbGVzIFtkZWZhdWx0PXllc10gIAorPCBBZGRpdGlvbmFsbHksIHRoZSB2YXJpYWJsZSBGT1JDRV9MSUJTIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgY29uZmlndXJlLiBJZiBzZXQsIGl0IHdpbGwgUkVQTEFDRSBhbnkgYXV0b21hdGljIGxpc3Qgb2YgbGlicmFyaWVzLiIKKy0tLQorPiBhY19jbGVhbl9maWxlcz0KKz4gYWNfY29uZmlnX2xpYm9ial9kaXI9LgorPiBMSUJPQkpTPQorPiBjcm9zc19jb21waWxpbmc9bm8KKz4gc3ViZGlycz0KKz4gTUZMQUdTPQorPiBNQUtFRkxBR1M9Cis+IFNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Cis+IAorPiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KKz4gUEFDS0FHRV9OQU1FPQorPiBQQUNLQUdFX1RBUk5BTUU9Cis+IFBBQ0tBR0VfVkVSU0lPTj0KKz4gUEFDS0FHRV9TVFJJTkc9Cis+IFBBQ0tBR0VfQlVHUkVQT1JUPQorPiAKKz4gYWNfdW5pcXVlX2ZpbGU9ImNvbW1vbi91bmljb2RlL3V0eXBlcy5oIgorPiAjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCis+IGFjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKz4gI2luY2x1ZGUgPHN0ZGlvLmg+Cis+ICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICis+ICMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis+ICNlbmRpZgorPiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICis+ICMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBTVERDX0hFQURFUlMKKz4gIyBpbmNsdWRlIDxzdGRsaWIuaD4KKz4gIyBpbmNsdWRlIDxzdGRkZWYuaD4KKz4gI2Vsc2UKKz4gIyBpZmRlZiBIQVZFX1NURExJQl9ICis+ICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorPiAjIGVuZGlmCis+ICNlbmRpZgorPiAjaWZkZWYgSEFWRV9TVFJJTkdfSAorPiAjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKKz4gIyAgaW5jbHVkZSA8bWVtb3J5Lmg+Cis+ICMgZW5kaWYKKz4gIyBpbmNsdWRlIDxzdHJpbmcuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBIQVZFX1NUUklOR1NfSAorPiAjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKz4gIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorPiAjZW5kaWYKKz4gI2lmZGVmIEhBVkVfU1RESU5UX0gKKz4gIyBpbmNsdWRlIDxzdGRpbnQuaD4KKz4gI2VuZGlmCis+ICNpZmRlZiBIQVZFX1VOSVNURF9ICis+ICMgaW5jbHVkZSA8dW5pc3RkLmg+Cis+ICNlbmRpZiIKKz4gCis+IGFjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworPiBMSUJPQkpTCis+IEFJWF9TSExJQgorPiBsZF9ycGF0aF9zdWYKKz4gcGxhdGZvcm1fbWFrZV9mcmFnbWVudAorPiBwbGF0Zm9ybV9tYWtlX2ZyYWdtZW50X25hbWUKKz4gcGxhdGZvcm0KKz4gSUNVREFUQV9DSEFSCis+IFNBTVBMRVNfVFJVRQorPiBURVNUU19UUlVFCis+IElDVUxJQlNVRkZJWENOQU1FCis+IFVfSEFWRV9MSUJfU1VGRklYCis+IElDVUxJQlNVRkZJWAorPiBEQVRBX1BBQ0tBR0lOR19NT0RFCis+IERBVEFfUEFDS0FHSU5HX0NQUEZMQUdTCis+IHRoZXBrZ2ljdWRhdGFkaXIKKz4gcGtnaWN1ZGF0YWRpcgorPiB0aGVsaWJkaXIKKz4gdGhlZGF0YWRpcgorPiB0aGVzeXNjb25mZGlyCis+IExBWU9VVF9UUlVFCis+IElDVUlPX1RSVUUKKz4gRVhUUkFTX1RSVUUKKz4gVV9TSVpFT0ZfV0NIQVJfVAorPiBVX0hBVkVfV0NTQ1BZCis+IFVfSEFWRV9XQ0hBUl9ICis+IEhBVkVfVUlOVDY0X1QKKz4gSEFWRV9JTlQ2NF9UCis+IEhBVkVfVUlOVDMyX1QKKz4gSEFWRV9JTlQzMl9UCis+IEhBVkVfVUlOVDE2X1QKKz4gSEFWRV9JTlQxNl9UCis+IEhBVkVfVUlOVDhfVAorPiBIQVZFX0lOVDhfVAorPiBVX1RJTUVaT05FCis+IFVfSEFWRV9USU1FWk9ORQorPiBVX1RaTkFNRQorPiBVX0hBVkVfVFpOQU1FCis+IFVfVFpTRVQKKz4gVV9IQVZFX1RaU0VUCis+IFVfSEFWRV9QT1BFTgorPiBVX0hBVkVfUExBQ0VNRU5UX05FVworPiBVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OCis+IFVfSEFWRV9OQU1FU1BBQ0UKKz4gVV9OTF9MQU5HSU5GT19DT0RFU0VUCis+IFVfSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUCis+IFVfSEFWRV9OTF9MQU5HSU5GTworPiBVX0lTX0JJR19FTkRJQU4KKz4gVV9JT1NUUkVBTV9TT1VSQ0UKKz4gQ1hYQ1BQCis+IFVfSEFWRV9JTlRUWVBFU19ICis+IEVHUkVQCis+IEdSRVAKKz4gQ1BQCis+IEdFTkNDT0RFX0FTU0VNQkxZCis+IEhBVkVfTU1BUAorPiBJQ1VfVVNFX1RIUkVBRFMKKz4gVEhSRUFEU19UUlVFCis+IFVfSU5MSU5FCis+IEVOQUJMRV9SUEFUSAorPiBVX0VOQUJMRV9UUkFDSU5HCis+IFVfRElTQUJMRV9SRU5BTUlORworPiBBUgorPiBSQU5MSUIKKz4gRU5BQkxFX1JFTEVBU0UKKz4gRU5BQkxFX0RFQlVHCis+IEVOQUJMRV9TVEFUSUMKKz4gRU5BQkxFX1NIQVJFRAorPiBMSUJfTQorPiBDT01QSUxFX0xJTktfRU5WVkFSCis+IEFSRkxBR1MKKz4gaG9zdF9vcworPiBob3N0X3ZlbmRvcgorPiBob3N0X2NwdQorPiBob3N0Cis+IGJ1aWxkX29zCis+IGJ1aWxkX3ZlbmRvcgorPiBidWlsZF9jcHUKKz4gYnVpbGQKKz4gRE9YWUdFTgorPiBVX01BS0UKKz4gU1RSSVAKKz4gSU5TVEFMTF9EQVRBCis+IElOU1RBTExfU0NSSVBUCis+IElOU1RBTExfUFJPR1JBTQorPiBhY19jdF9DWFgKKz4gQ1hYRkxBR1MKKz4gQ1hYCis+IE9CSkVYVAorPiBFWEVFWFQKKz4gYWNfY3RfQ0MKKz4gTERGTEFHUworPiBDRkxBR1MKKz4gQ0MKKz4gQ1BQRkxBR1MKKz4gVU5JQ09ERV9WRVJTSU9OCis+IExJQl9WRVJTSU9OX01BSk9SCis+IExJQl9WRVJTSU9OCis+IFZFUlNJT04KKz4gUEFDS0FHRQorPiB0YXJnZXRfYWxpYXMKKz4gaG9zdF9hbGlhcworPiBidWlsZF9hbGlhcworPiBMSUJTCis+IEVDSE9fVAorPiBFQ0hPX04KKz4gRUNIT19DCis+IERFRlMKKz4gbWFuZGlyCis+IGxvY2FsZWRpcgorPiBsaWJkaXIKKz4gcHNkaXIKKz4gcGRmZGlyCis+IGR2aWRpcgorPiBodG1sZGlyCis+IGluZm9kaXIKKz4gZG9jZGlyCis+IG9sZGluY2x1ZGVkaXIKKz4gaW5jbHVkZWRpcgorPiBsb2NhbHN0YXRlZGlyCis+IHNoYXJlZHN0YXRlZGlyCis+IHN5c2NvbmZkaXIKKz4gZGF0YWRpcgorPiBkYXRhcm9vdGRpcgorPiBsaWJleGVjZGlyCis+IHNiaW5kaXIKKz4gYmluZGlyCis+IHByb2dyYW1fdHJhbnNmb3JtX25hbWUKKz4gcHJlZml4Cis+IGV4ZWNfcHJlZml4Cis+IFBBQ0tBR0VfQlVHUkVQT1JUCis+IFBBQ0tBR0VfU1RSSU5HCis+IFBBQ0tBR0VfVkVSU0lPTgorPiBQQUNLQUdFX1RBUk5BTUUKKz4gUEFDS0FHRV9OQU1FCis+IFBBVEhfU0VQQVJBVE9SCis+IFNIRUxMJworPiBhY19zdWJzdF9maWxlcz0nJworPiBhY191c2VyX29wdHM9JworPiBlbmFibGVfb3B0aW9uX2NoZWNraW5nCis+IGVuYWJsZV9zdHJpY3QKKz4gZW5hYmxlXzY0Yml0X2xpYnMKKz4gZW5hYmxlX3NoYXJlZAorPiBlbmFibGVfc3RhdGljCis+IGVuYWJsZV9kZWJ1ZworPiBlbmFibGVfcmVsZWFzZQorPiBlbmFibGVfcmVuYW1pbmcKKz4gZW5hYmxlX3RyYWNpbmcKKz4gZW5hYmxlX3JwYXRoCis+IGVuYWJsZV90aHJlYWRzCis+IHdpdGhfaW9zdHJlYW0KKz4gZW5hYmxlX2V4dHJhcworPiBlbmFibGVfbGF5b3V0Cis+IHdpdGhfZGF0YV9wYWNrYWdpbmcKKz4gZW5hYmxlX21hcHBlZAorPiB3aXRoX2xpYnJhcnlfc3VmZml4Cis+IGVuYWJsZV90ZXN0cworPiBlbmFibGVfc2FtcGxlcworPiAnCis+ICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCis+IGhvc3RfYWxpYXMKKz4gdGFyZ2V0X2FsaWFzCis+IENDCis+IENGTEFHUworPiBMREZMQUdTCis+IExJQlMKKz4gQ1BQRkxBR1MKKz4gQ1hYCis+IENYWEZMQUdTCis+IENDQworPiBDUFAKKz4gQ1hYQ1BQJworPiAKKzU0YTgxMyw4MTYKKz4gYWNfaW5pdF9oZWxwPQorPiBhY19pbml0X3ZlcnNpb249ZmFsc2UKKz4gYWNfdW5yZWNvZ25pemVkX29wdHM9Cis+IGFjX3VucmVjb2duaXplZF9zZXA9Cis1Nyw1OGM4MTkKKzwgYnVpbGQ9Tk9ORQorPCBjYWNoZV9maWxlPS4vY29uZmlnLmNhY2hlCistLS0KKz4gY2FjaGVfZmlsZT0vZGV2L251bGwKKzYwZDgyMAorPCBob3N0PU5PTkUKKzYyZDgyMQorPCBub25vcHQ9Tk9ORQorNzFkODI5Cis8IHRhcmdldD1OT05FCis3NGE4MzMsODM5Cis+IAorPiAjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKz4gIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCis+ICMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4Cis+ICMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKz4gIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKz4gIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorNzhjODQzLDg0NAorPCBkYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCistLS0KKz4gZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKKz4gZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCis4MmQ4NDcKKzwgbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCis4NSw5M2M4NTAsODU4Cis8IGluZm9kaXI9JyR7cHJlZml4fS9pbmZvJworPCBtYW5kaXI9JyR7cHJlZml4fS9tYW4nCis8IAorPCAjIEluaXRpYWxpemUgc29tZSBvdGhlciB2YXJpYWJsZXMuCis8IHN1YmRpcnM9Cis8IE1GTEFHUz0gTUFLRUZMQUdTPQorPCBTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorPCAjIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNoZWxsIGhlcmUgZG9jdW1lbnQuCis8IGFjX21heF9oZXJlX2xpbmVzPTEyCistLS0KKz4gZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFfScKKz4gaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKKz4gaHRtbGRpcj0nJHtkb2NkaXJ9JworPiBkdmlkaXI9JyR7ZG9jZGlyfScKKz4gcGRmZGlyPScke2RvY2Rpcn0nCis+IHBzZGlyPScke2RvY2Rpcn0nCis+IGxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworPiBsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKKz4gbWFuZGlyPScke2RhdGFyb290ZGlyfS9tYW4nCis5NWE4NjEKKz4gYWNfZGFzaGRhc2g9Cis5OGQ4NjMKKzwgCisxMDFjODY2Cis8ICAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKy0tLQorPiAgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorMTA2LDEwOGM4NzEsODczCis8ICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKzwgICAtKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRpb24iIHwgc2VkICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKzwgICAqKSBhY19vcHRhcmc9IDs7CistLS0KKz4gICBjYXNlICRhY19vcHRpb24gaW4KKz4gICAqPSopCWFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7Cis+ICAgKikJYWNfb3B0YXJnPXllcyA7OworMTEzYzg3OCw4ODAKKzwgICBjYXNlICIkYWNfb3B0aW9uIiBpbgorLS0tCis+ICAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCis+ICAgLS0pCis+ICAgICBhY19kYXNoZGFzaD15ZXMgOzsKKzExOGM4ODUKKzwgICAgIGJpbmRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKzEyMWM4ODgKKzwgICAgIGFjX3ByZXY9YnVpbGQgOzsKKy0tLQorPiAgICAgYWNfcHJldj1idWlsZF9hbGlhcyA7OworMTIzYzg5MAorPCAgICAgYnVpbGQ9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKzEzMGM4OTcsOTAwCis8ICAgICBjYWNoZV9maWxlPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLS1jb25maWctY2FjaGUgfCAtQykKKz4gICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisxMzJjOTAyCis8ICAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQgfCAtLWRhdGEgfCAtLWRhdCB8IC0tZGEpCistLS0KKz4gICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKzEzNCwxMzZjOTA0LDkxMgorPCAgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSogfCAtLWRhdGE9KiB8IC0tZGF0PSogXAorPCAgIHwgLS1kYT0qKQorPCAgICAgZGF0YWRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCis+ICAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCis+ICAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCis+ICAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7Cis+ICAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorPiAgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorPiAgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworMTM5YzkxNQorPCAgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfb3B0aW9ufHNlZCAtZSAncy8tKmRpc2FibGUtLy8nYAorLS0tCis+ICAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorMTQxLDE0NWM5MTcsOTM5Cis8ICAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfZmVhdHVyZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKzwgICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfZmVhdHVyZTogaW52YWxpZCBmZWF0dXJlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorPCAgICAgZmkKKzwgICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy8tL18vZydgCis8ICAgICBldmFsICJlbmFibGVfJHthY19mZWF0dXJlfT1ubyIgOzsKKy0tLQorPiAgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+ICAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKz4gICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKz4gICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorPiAgICAgICAqIgorPiAiZW5hYmxlXyRhY191c2Vyb3B0IgorPiAiKikgOzsKKz4gICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1kaXNhYmxlLSRhY191c2Vyb3B0X29yaWciCis+IAkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKz4gICAgIGVzYWMKKz4gICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PW5vIDs7Cis+IAorPiAgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCis+ICAgICBhY19wcmV2PWRvY2RpciA7OworPiAgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorPiAgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKz4gICAgIGFjX3ByZXY9ZHZpZGlyIDs7Cis+ICAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKz4gICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisxNDhjOTQyCis8ICAgICBhY19mZWF0dXJlPWBlY2hvICRhY19vcHRpb258c2VkIC1lICdzLy0qZW5hYmxlLS8vJyAtZSAncy89LiovLydgCistLS0KKz4gICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKzE1MCwxNTZjOTQ0LDk1NAorPCAgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX2ZlYXR1cmV8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCis8ICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX2ZlYXR1cmU6IGludmFsaWQgZmVhdHVyZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKzwgICAgIGZpCis8ICAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlfCBzZWQgJ3MvLS9fL2cnYAorPCAgICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKzwgICAgICAgKj0qKSA7OworPCAgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CistLS0KKz4gICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Cis+ICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCis+ICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKz4gICAgICAgKiIKKz4gImVuYWJsZV8kYWNfdXNlcm9wdCIKKz4gIiopIDs7Cis+ICAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCis+IAkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKzE1OGM5NTYKKzwgICAgIGV2YWwgImVuYWJsZV8ke2FjX2ZlYXR1cmV9PSckYWNfb3B0YXJnJyIgOzsKKy0tLQorPiAgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKzE2N2M5NjUKKzwgICAgIGV4ZWNfcHJlZml4PSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisxNzMsMjI2Yzk3MSw5NzYKKzwgICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSkKKzwgICAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorPCAgICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorPCAgICAgY2F0IDw8IEVPRgorPCBVc2FnZTogY29uZmlndXJlIFtvcHRpb25zXSBbaG9zdF0KKzwgT3B0aW9uczogW2RlZmF1bHRzIGluIGJyYWNrZXRzIGFmdGVyIGRlc2NyaXB0aW9uc10KKzwgQ29uZmlndXJhdGlvbjoKKzwgICAtLWNhY2hlLWZpbGU9RklMRSAgICAgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRQorPCAgIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZQorPCAgIC0tbm8tY3JlYXRlICAgICAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCis8ICAgLS1xdWlldCwgLS1zaWxlbnQgICAgICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCis8ICAgLS12ZXJzaW9uICAgICAgICAgICAgICAgcHJpbnQgdGhlIHZlcnNpb24gb2YgYXV0b2NvbmYgdGhhdCBjcmVhdGVkIGNvbmZpZ3VyZQorPCBEaXJlY3RvcnkgYW5kIGZpbGUgbmFtZXM6Cis8ICAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCis8ICAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKzwgICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorPCAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzYW1lIGFzIHByZWZpeF0KKzwgICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9iaW5dCis8ICAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIGluIERJUiBbRVBSRUZJWC9zYmluXQorPCAgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgaW4gRElSIFtFUFJFRklYL2xpYmV4ZWNdCis8ICAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIGluIERJUgorPCAgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVgvc2hhcmVdCis8ICAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgaW4gRElSIFtQUkVGSVgvZXRjXQorPCAgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgaW4gRElSCis8ICAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWC9jb21dCis8ICAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIGluIERJUiBbUFJFRklYL3Zhcl0KKzwgICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgaW4gRElSIFtFUFJFRklYL2xpYl0KKzwgICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBpbiBESVIgW1BSRUZJWC9pbmNsdWRlXQorPCAgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIGluIERJUiBbL3Vzci9pbmNsdWRlXQorPCAgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBpbiBESVIgW1BSRUZJWC9pbmZvXQorPCAgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIGluIERJUiBbUFJFRklYL21hbl0KKzwgICAtLXNyY2Rpcj1ESVIgICAgICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciAuLl0KKzwgICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworPCAgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKzwgICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTQorPCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworPCBFT0YKKzwgICAgIGNhdCA8PCBFT0YKKzwgSG9zdCB0eXBlOgorPCAgIC0tYnVpbGQ9QlVJTEQgICAgICAgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW0JVSUxEPUhPU1RdCis8ICAgLS1ob3N0PUhPU1QgICAgICAgICAgICAgY29uZmlndXJlIGZvciBIT1NUIFtndWVzc2VkXQorPCAgIC0tdGFyZ2V0PVRBUkdFVCAgICAgICAgIGNvbmZpZ3VyZSBmb3IgVEFSR0VUIFtUQVJHRVQ9SE9TVF0KKzwgRmVhdHVyZXMgYW5kIHBhY2thZ2VzOgorPCAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKzwgICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCis8ICAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCis8ICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorPCAgIC0teC1pbmNsdWRlcz1ESVIgICAgICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSCis8ICAgLS14LWxpYnJhcmllcz1ESVIgICAgICAgWCBsaWJyYXJ5IGZpbGVzIGFyZSBpbiBESVIKKzwgRU9GCis8ICAgICBpZiB0ZXN0IC1uICIkYWNfaGVscCI7IHRoZW4KKzwgICAgICAgZWNobyAiLS1lbmFibGUgYW5kIC0td2l0aCBvcHRpb25zIHJlY29nbml6ZWQ6JGFjX2hlbHAiCis8ICAgICBmaQorPCAgICAgZXhpdCAwIDs7CistLS0KKz4gICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorPiAgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKz4gICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCis+ICAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7Cis+ICAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorPiAgICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7CisyMjljOTc5Cis8ICAgICBhY19wcmV2PWhvc3QgOzsKKy0tLQorPiAgICAgYWNfcHJldj1ob3N0X2FsaWFzIDs7CisyMzFjOTgxLDk4NworPCAgICAgaG9zdD0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7Cis+IAorPiAgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorPiAgICAgYWNfcHJldj1odG1sZGlyIDs7Cis+ICAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCis+ICAgfCAtLWh0PSopCis+ICAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKzIzOGM5OTQKKzwgICAgIGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworMjQzYzk5OQorPCAgICAgaW5mb2Rpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisyNDhjMTAwNAorPCAgICAgbGliZGlyPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworMjU1YzEwMTEsMTAxNgorPCAgICAgbGliZXhlY2Rpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7Cis+IAorPiAgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKz4gICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7Cis+ICAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKz4gICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisyNTgsMjU5YzEwMTkKKzwgICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCis8ICAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCistLS0KKz4gICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorMjYyLDI2NGMxMDIyLDEwMjMKKzwgICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKzwgICB8IC0tbG9jYWxzPSogfCAtLWxvY2FsPSogfCAtLWxvY2E9KiB8IC0tbG9jPSogfCAtLWxvPSopCis8ICAgICBsb2NhbHN0YXRlZGlyPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCis+ICAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKzI2OWMxMDI4Cis8ICAgICBtYW5kaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisyNzZjMTAzNQorPCAgIHwgLS1uby1jciB8IC0tbm8tYykKKy0tLQorPiAgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorMjkwYzEwNDkKKzwgICAgIG9sZGluY2x1ZGVkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworMjk1YzEwNTQKKzwgICAgIHByZWZpeD0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKzMwMmMxMDYxCis8ICAgICBwcm9ncmFtX3ByZWZpeD0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworMzA5YzEwNjgKKzwgICAgIHByb2dyYW1fc3VmZml4PSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CiszMjZjMTA4NSwxMDk1Cis8ICAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKKz4gCis+ICAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKz4gICAgIGFjX3ByZXY9cGRmZGlyIDs7Cis+ICAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKz4gICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7Cis+IAorPiAgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCis+ICAgICBhY19wcmV2PXBzZGlyIDs7Cis+ICAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCis+ICAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CiszMzZjMTEwNQorPCAgICAgc2JpbmRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CiszNDdjMTExNgorPCAgICAgc2hhcmVkc3RhdGVkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKzM1MmMxMTIxCis8ICAgICBzaXRlPSIkYWNfb3B0YXJnIiA7OworLS0tCis+ICAgICBzaXRlPSRhY19vcHRhcmcgOzsKKzM1N2MxMTI2Cis8ICAgICBzcmNkaXI9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CiszNjRjMTEzMworPCAgICAgc3lzY29uZmRpcj0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CiszNjdjMTEzNgorPCAgICAgYWNfcHJldj10YXJnZXQgOzsKKy0tLQorPiAgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKzM2OWMxMTM4Cis8ICAgICB0YXJnZXQ9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CiszNzQsMzc2YzExNDMsMTE0NAorPCAgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzKQorPCAgICAgZWNobyAiY29uZmlndXJlIGdlbmVyYXRlZCBieSBhdXRvY29uZiB2ZXJzaW9uIDIuMTMiCis8ICAgICBleGl0IDAgOzsKKy0tLQorPiAgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCis+ICAgICBhY19pbml0X3ZlcnNpb249OiA7OworMzc5YzExNDcKKzwgICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRoLS8vJyAtZSAncy89LiovLydgCistLS0KKz4gICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCiszODEsMzg3YzExNDksMTE1OQorPCAgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy9bLV9hLXpBLVowLTldLy9nJ2AiOyB0aGVuCis8ICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogJGFjX3BhY2thZ2U6IGludmFsaWQgcGFja2FnZSBuYW1lIiAxPiYyOyBleGl0IDE7IH0KKzwgICAgIGZpCis8ICAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAorPCAgICAgY2FzZSAiJGFjX29wdGlvbiIgaW4KKzwgICAgICAgKj0qKSA7OworPCAgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CistLS0KKz4gICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Cis+ICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCis+ICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKz4gICAgICAgKiIKKz4gIndpdGhfJGFjX3VzZXJvcHQiCis+ICIqKSA7OworPiAgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKz4gCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworMzg5YzExNjEKKzwgICAgIGV2YWwgIndpdGhfJHthY19wYWNrYWdlfT0nJGFjX29wdGFyZyciIDs7CistLS0KKz4gICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworMzkyYzExNjQKKzwgICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX29wdGlvbnxzZWQgLWUgJ3MvLSp3aXRob3V0LS8vJ2AKKy0tLQorPiAgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKzM5NCwzOThjMTE2NiwxMTc4Cis8ICAgICBpZiB0ZXN0IC1uICJgZWNobyAkYWNfcGFja2FnZXwgc2VkICdzL1stYS16QS1aMC05X10vL2cnYCI7IHRoZW4KKzwgICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfcGFja2FnZTogaW52YWxpZCBwYWNrYWdlIG5hbWUiIDE+JjI7IGV4aXQgMTsgfQorPCAgICAgZmkKKzwgICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCis8ICAgICBldmFsICJ3aXRoXyR7YWNfcGFja2FnZX09bm8iIDs7CistLS0KKz4gICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Cis+ICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCis+ICAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKz4gICAgICAgKiIKKz4gIndpdGhfJGFjX3VzZXJvcHQiCis+ICIqKSA7OworPiAgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKz4gCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworPiAgICAgZXNhYworPiAgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7Cis0MDljMTE4OQorPCAgICAgeF9pbmNsdWRlcz0iJGFjX29wdGFyZyIgOzsKKy0tLQorPiAgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7Cis0MTZjMTE5NgorPCAgICAgeF9saWJyYXJpZXM9IiRhY19vcHRhcmciIDs7CistLS0KKz4gICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKzQxOGMxMTk4LDEyMDAKKzwgICAtKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAkYWNfb3B0aW9uOiBpbnZhbGlkIG9wdGlvbjsgdXNlIC0taGVscCB0byBzaG93IHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAgIC0qKSB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkYWNfb3B0aW9uCis+IFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis0MjBhMTIwMywxMjExCis+ICAgKj0qKQorPiAgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorPiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorPiAgICAgZXhwciAieCRhY19lbnZ2YXIiIDogIi4qW15fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorPiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhcmlhYmxlIG5hbWU6ICRhY19lbnZ2YXIiID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworPiAgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKz4gCis0MjIsNDI4YzEyMTMsMTIxNworPCAgICAgaWYgdGVzdCAtbiAiYGVjaG8gJGFjX29wdGlvbnwgc2VkICdzL1stYS16MC05Ll0vL2cnYCI7IHRoZW4KKzwgICAgICAgZWNobyAiY29uZmlndXJlOiB3YXJuaW5nOiAkYWNfb3B0aW9uOiBpbnZhbGlkIGhvc3QgdHlwZSIgMT4mMgorPCAgICAgZmkKKzwgICAgIGlmIHRlc3QgIngkbm9ub3B0IiAhPSB4Tk9ORTsgdGhlbgorPCAgICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBvbmx5IGNvbmZpZ3VyZSBmb3Igb25lIGhvc3QgYW5kIG9uZSB0YXJnZXQgYXQgYSB0aW1lIiAxPiYyOyBleGl0IDE7IH0KKzwgICAgIGZpCis8ICAgICBub25vcHQ9IiRhY19vcHRpb24iCistLS0KKz4gICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKz4gICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorPiAgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCis+ICAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKz4gICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KKzQzNWMxMjI0LDEyMjYKKzwgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gLS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQzOCw0NTFjMTIyOSwxMjM1Cis8IHRyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1Cis8IAorPCAjIEZpbGUgZGVzY3JpcHRvciB1c2FnZToKKzwgIyAwIHN0YW5kYXJkIGlucHV0Cis8ICMgMSBmaWxlIGNyZWF0aW9uCis8ICMgMiBlcnJvcnMgYW5kIHdhcm5pbmdzCis8ICMgMyBzb21lIHN5c3RlbXMgbWF5IG9wZW4gaXQgdG8gL2Rldi90dHkKKzwgIyA0IHVzZWQgb24gdGhlIEt1Ym90YSBUaXRhbgorPCAjIDYgY2hlY2tpbmcgZm9yLi4uIG1lc3NhZ2VzIGFuZCByZXN1bHRzCis8ICMgNSBjb21waWxlciBtZXNzYWdlcyBzYXZlZCBpbiBjb25maWcubG9nCis8IGlmIHRlc3QgIiRzaWxlbnQiID0geWVzOyB0aGVuCis8ICAgZXhlYyA2Pi9kZXYvbnVsbAorPCBlbHNlCis8ICAgZXhlYyA2PiYxCistLS0KKz4gaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorPiAgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKz4gICAgIG5vKSA7OworPiAgICAgZmF0YWwpIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKz4gICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKz4gICBlc2FjCis0NTMsNDU4ZDEyMzYKKzwgZXhlYyA1Pi4vY29uZmlnLmxvZworPCAKKzwgZWNobyAiXAorPCBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorPCBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorPCAiIDE+JjUKKzQ2MCw0NjNjMTIzOCwxMjQyCis8ICMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorPCAjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKzwgYWNfY29uZmlndXJlX2FyZ3M9Cis8IGZvciBhY19hcmcKKy0tLQorPiAjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KKz4gZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCis+IAkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCis+IAkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorPiAJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCis0NjUsNDcyYzEyNDQsMTI1NAorPCAgIGNhc2UgIiRhY19hcmciIGluCis8ICAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKzwgICB8IC0tbm8tY3IgfCAtLW5vLWMpIDs7Cis8ICAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCis8ICAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpIDs7Cis8ICAgKiIgIip8KiIJIip8KltcW1xdXH5cI1wkXF5cJlwqXChcKVx7XH1cXFx8XDtcPFw+XD9dKikKKzwgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKzwgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICRhY19hcmciIDs7CistLS0KKz4gICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKz4gICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorPiAgIGNhc2UgJGFjX3ZhbCBpbgorPiAgICAgKi8gKQorPiAgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKz4gICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKz4gICBlc2FjCis+ICAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorPiAgIGNhc2UgJGFjX3ZhbCBpbgorPiAgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKz4gICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKzQ3M2ExMjU2LDEyNTcKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis0NzYsNDg0YzEyNjAsMTI5MQorPCAjIE5MUyBudWlzYW5jZXMuCis8ICMgT25seSBzZXQgdGhlc2UgdG8gQyBpZiBhbHJlYWR5IHNldC4gIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkKKzwgIyBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCis8ICMgRml4aW5nIExDX01FU1NBR0VTIHByZXZlbnRzIFNvbGFyaXMgc2ggZnJvbSB0cmFuc2xhdGluZyB2YXIgdmFsdWVzIGluIGBzZXQnIQorPCAjIE5vbi1DIExDX0NUWVBFIHZhbHVlcyBicmVhayB0aGUgY3R5cGUgY2hlY2suCis8IGlmIHRlc3QgIiR7TEFORytzZXR9IiAgID0gc2V0OyB0aGVuIExBTkc9QzsgICBleHBvcnQgTEFORzsgICBmaQorPCBpZiB0ZXN0ICIke0xDX0FMTCtzZXR9IiA9IHNldDsgdGhlbiBMQ19BTEw9QzsgZXhwb3J0IExDX0FMTDsgZmkKKzwgaWYgdGVzdCAiJHtMQ19NRVNTQUdFUytzZXR9IiA9IHNldDsgdGhlbiBMQ19NRVNTQUdFUz1DOyBleHBvcnQgTENfTUVTU0FHRVM7IGZpCis8IGlmIHRlc3QgIiR7TENfQ1RZUEUrc2V0fSIgICAgPSBzZXQ7IHRoZW4gTENfQ1RZUEU9QzsgICAgZXhwb3J0IExDX0NUWVBFOyAgICBmaQorLS0tCis+ICMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKz4gIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCis+ICMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KKz4gYnVpbGQ9JGJ1aWxkX2FsaWFzCis+IGhvc3Q9JGhvc3RfYWxpYXMKKz4gdGFyZ2V0PSR0YXJnZXRfYWxpYXMKKz4gCis+ICMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KKz4gaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCis+ICAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCis+ICAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKz4gICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IElmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCis+ICAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorPiAgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKz4gICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKz4gICBmaQorPiBmaQorPiAKKz4gYWNfdG9vbF9wcmVmaXg9Cis+IHRlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKz4gCis+IHRlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKz4gCis+IAorPiBhY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKKz4gYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorPiBhY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiB3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiB0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQ4Niw0OTNkMTI5MgorPCAjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorPCBybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzLmgKKzwgIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCis8IGVjaG8gPiBjb25mZGVmcy5oCis8IAorPCAjIEEgZmlsZW5hbWUgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSwgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0Cis8ICMgY29uZmlndXJlIGlzIGluLCB3aGljaCB3ZSBjYW4gbG9vayBmb3IgdG8gZmluZCBvdXQgaWYgc3JjZGlyIGlzIGNvcnJlY3QuCis8IGFjX3VuaXF1ZV9maWxlPWNvbW1vbi91bmljb2RlL3V0eXBlcy5oCis0OTgsNTAxYzEyOTcsMTMyMAorPCAgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorPCAgIGFjX3Byb2c9JDAKKzwgICBhY19jb25mZGlyPWBlY2hvICRhY19wcm9nfHNlZCAncyUvW14vXVteL10qJCUlJ2AKKzwgICB0ZXN0ICJ4JGFjX2NvbmZkaXIiID0gIngkYWNfcHJvZyIgJiYgYWNfY29uZmRpcj0uCistLS0KKz4gICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCis+ICAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8Cis+ICRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKz4gCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCis+IAkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorPiAJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Cis+ICRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorPiAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wvXClbXi9dLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXC9cKSQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXCkuKi97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIHMvLiovLi87IHEnYAorNTAzYzEzMjIKKzwgICBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKy0tLQorPiAgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCis1MDksNTMwYzEzMjgsMTM1MgorPCBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKzwgICBpZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4KKzwgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJGFjX2NvbmZkaXIgb3IgLi4iIDE+JjI7IGV4aXQgMTsgfQorPCAgIGVsc2UKKzwgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIHNvdXJjZXMgaW4gJHNyY2RpciIgMT4mMjsgZXhpdCAxOyB9Cis8ICAgZmkKKzwgZmkKKzwgc3JjZGlyPWBlY2hvICIke3NyY2Rpcn0iIHwgc2VkICdzJVwoW14vXVwpLyokJVwxJSdgCis8IAorPCAjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorPCBpZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCis8ICAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCis8ICAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKzwgICBlbHNlCis8ICAgICBDT05GSUdfU0lURT0iJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCis8ICAgZmkKKzwgZmkKKzwgZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCis8ICAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKzwgICAgIGVjaG8gImxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIKKzwgICAgIC4gIiRhY19zaXRlX2ZpbGUiCis8ICAgZmkKKy0tLQorPiBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorPiAgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiBmaQorPiBhY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCis+IGFjX2Fic19jb25mZGlyPWAoCis+IAljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICRhY19tc2ciID4mMgorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gCXB3ZClgCis+ICMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCis+IGlmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKz4gICBzcmNkaXI9LgorPiBmaQorPiAjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorPiAjIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KKz4gIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCis+IGNhc2UgJHNyY2RpciBpbgorPiAqLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKKz4gZXNhYworPiBmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworPiAgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKz4gICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKz4gICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9Cis+ICAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Cis1MzMsNTM5YzEzNTUsMTM2MgorPCBpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KKzwgICBlY2hvICJsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIgorPCAgIC4gJGNhY2hlX2ZpbGUKKzwgZWxzZQorPCAgIGVjaG8gImNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorPCAgID4gJGNhY2hlX2ZpbGUKKzwgZmkKKy0tLQorPiAjCis+ICMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKz4gIworPiBpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorPiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorPiAgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKz4gICBjYXQgPDxfQUNFT0YKKz4gXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgdGhpcyBwYWNrYWdlIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKzU0MSw1NTZjMTM2NCwxODE5Cis8IGFjX2V4dD1jCis8ICMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworPCBhY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworPCAKKzwgYWNfZXhlZXh0PQorPCBhY19vYmpleHQ9bworPCBpZiAoZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsMykgfCBncmVwIGMgPi9kZXYvbnVsbDsgdGhlbgorPCAgICMgU3RhcmRlbnQgVmlzdHJhIFNWUjQgZ3JlcCBsYWNrcyAtZSwgc2F5cyBnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1LgorPCAgIGlmIChlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDMpIHwgc2VkIHMvLW4veG4vIHwgZ3JlcCB4biA+L2Rldi9udWxsOyB0aGVuCis8ICAgICBhY19uPSBhY19jPScKKzwgJyBhY190PScJJworPCAgIGVsc2UKKzwgICAgIGFjX249LW4gYWNfYz0gYWNfdD0KKy0tLQorPiBVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKz4gCis+IFRvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKKz4gVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKz4gCis+IERlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgorPiAKKz4gQ29uZmlndXJhdGlvbjoKKz4gICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorPiAgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKz4gICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKz4gICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKz4gICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKz4gICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCis+ICAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKz4gICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworPiAgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorPiAKKz4gSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgorPiAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorPiAgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCis+ICAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKz4gICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQorPiAKKz4gQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCis+IFxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5Cis+IGFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCis+IGZvciBpbnN0YW5jZSBcYC0tcHJlZml4PVwkSE9NRScuCis+IAorPiBGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKz4gCis+IEZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6Cis+ICAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCis+ICAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCis+ICAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorPiAgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorPiAgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCis+ICAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorPiAgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCis+ICAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorPiAgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCis+ICAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorPiAgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCis+ICAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorPiAgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorPiAgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCis+ICAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvUEFDS0FHRV0KKz4gICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKz4gICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorPiAgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCis+ICAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorPiBfQUNFT0YKKz4gCis+ICAgY2F0IDw8XF9BQ0VPRgorPiAKKz4gU3lzdGVtIHR5cGVzOgorPiAgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCis+ICAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCis+IF9BQ0VPRgorPiBmaQorPiAKKz4gaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKz4gCis+ICAgY2F0IDw8XF9BQ0VPRgorPiAKKz4gT3B0aW9uYWwgRmVhdHVyZXM6Cis+ICAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucworPiAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKz4gICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCis+ICAgLS1lbmFibGUtc3RyaWN0ICAgICAgICAgY29tcGlsZSB3aXRoIHN0cmljdCBjb21waWxlciBvcHRpb25zIGRlZmF1bHQ9bm8KKz4gICAtLWVuYWJsZS02NGJpdC1saWJzICAgICBidWlsZCA2NC1iaXQgbGlicmFyaWVzIGRlZmF1bHQ9eWVzCis+ICAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBkZWZhdWx0PXllcworPiAgIC0tZW5hYmxlLXN0YXRpYyAgICAgICAgIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgZGVmYXVsdD1ubworPiAgIC0tZW5hYmxlLWRlYnVnICAgICAgICAgIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyBkZWZhdWx0PW5vCis+ICAgLS1lbmFibGUtcmVsZWFzZSAgICAgICAgYnVpbGQgcmVsZWFzZSBsaWJyYXJpZXMgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1yZW5hbWluZyAgICAgICBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCB0byBzeW1ib2xzIGRlZmF1bHQ9eWVzCis+ICAgLS1lbmFibGUtdHJhY2luZyAgICAgICAgZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1ycGF0aCAgICAgICAgICB1c2UgcnBhdGggd2hlbiBsaW5raW5nIGRlZmF1bHQgaXMgb25seSBpZiBuZWNlc3NhcnkKKz4gICAtLWVuYWJsZS10aHJlYWRzICAgICAgICBidWlsZCBJQ1Ugd2l0aCB0aHJlYWQgc2FmZXR5IGRlZmF1bHQ9eWVzCis+ICAgLS1lbmFibGUtZXh0cmFzICAgICAgICAgYnVpbGQgSUNVIGV4dHJhcyBkZWZhdWx0PXllcworPiAgIC0tZW5hYmxlLWljdWlvICAgICAgICAgIGJ1aWxkIElDVSdzIGljdWlvIGxpYnJhcnkgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1sYXlvdXQgICAgICAgICBidWlsZCBJQ1UncyBsYXlvdXQgbGlicmFyeSBkZWZhdWx0PXllcworPiAKKz4gICAtLWVuYWJsZS10ZXN0cyAgICAgICAgICBidWlsZCBJQ1UgdGVzdHMgZGVmYXVsdD15ZXMKKz4gICAtLWVuYWJsZS1zYW1wbGVzICAgICAgICBidWlsZCBJQ1Ugc2FtcGxlcyBkZWZhdWx0PXllcworPiBBZGRpdGlvbmFsbHksIHRoZSB2YXJpYWJsZSBGT1JDRV9MSUJTIG1heSBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgY29uZmlndXJlLiBJZiBzZXQsIGl0IHdpbGwgUkVQTEFDRSBhbnkgYXV0b21hdGljIGxpc3Qgb2YgbGlicmFyaWVzLgorPiAKKz4gT3B0aW9uYWwgUGFja2FnZXM6Cis+ICAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCis+ICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorPiAgIC0td2l0aC1pb3N0cmVhbT12ZXJzaW9uIHNwZWNpZnkgdGhlIHZlcnNpb24gb2YgaW9zdHJlYW0gdG8gdXNlIChub25lLCBvbGQsIHN0ZCwgYXV0bykgZGVmYXVsdD1hdXRvCis+ICAgLS13aXRoLWRhdGEtcGFja2FnaW5nPXR5cGUgc3BlY2lmeSBob3cgdG8gcGFja2FnZSBJQ1UgZGF0YSAoZmlsZXMsIGFyY2hpdmUsIGxpYnJhcnksIGF1dG8pIGRlZmF1bHQ9YXV0bworPiAgIC0td2l0aC1saWJyYXJ5LXN1ZmZpeD1zdWZmaXggICAgdGFnIGEgc3VmZml4IHRvIHRoZSBsaWJyYXJ5IG5hbWVzIGRlZmF1bHQ9Cis+IAorPiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKz4gICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKKz4gICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCis+ICAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCis+ICAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgorPiAgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KKz4gICBDUFBGTEFHUyAgICBDL0MrKy9PYmplY3RpdmUgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCis+ICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+Cis+ICAgQ1hYICAgICAgICAgQysrIGNvbXBpbGVyIGNvbW1hbmQKKz4gICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKz4gICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorPiAgIENYWENQUCAgICAgIEMrKyBwcmVwcm9jZXNzb3IKKz4gCis+IFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCis+IGl0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKz4gCis+IF9BQ0VPRgorPiBhY19zdGF0dXM9JD8KKz4gZmkKKz4gCis+IGlmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKz4gICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorPiAgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCis+ICAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorPiAgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKz4gICAgICAgY29udGludWUKKz4gICAgIGFjX2J1aWxkZGlyPS4KKz4gCis+IGNhc2UgIiRhY19kaXIiIGluCis+IC4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworPiAqKQorPiAgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCis+ICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorPiAgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorPiAgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKz4gICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Cis+ICAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7Cis+ICAgZXNhYyA7OworPiBlc2FjCis+IGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorPiBhY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4Cis+ICMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6Cis+IGFjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorPiAKKz4gY2FzZSAkc3JjZGlyIGluCis+ICAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorPiAgICAgYWNfc3JjZGlyPS4KKz4gICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKz4gICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKz4gICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCis+ICAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworPiAgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCis+ICAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Cis+ICAgKikgIyBSZWxhdGl2ZSBuYW1lLgorPiAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4Cis+ICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorPiAgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Cis+IGVzYWMKKz4gYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorPiAKKz4gICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKz4gICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorPiAgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorPiAgICAgICBlY2hvICYmCis+ICAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCis+ICAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorPiAgICAgICBlY2hvICYmCis+ICAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKKz4gICAgIGVsc2UKKz4gICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKz4gICAgIGZpIHx8IGFjX3N0YXR1cz0kPworPiAgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorPiAgIGRvbmUKKz4gZmkKKz4gCis+IHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworPiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCis+ICAgY2F0IDw8XF9BQ0VPRgorPiBjb25maWd1cmUKKz4gZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYzCis+IAorPiBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCis+IDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis+IFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCis+IGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKz4gX0FDRU9GCis+ICAgZXhpdAorPiBmaQorPiBjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKKz4gVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKKz4gcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKz4gCis+IEl0IHdhcyBjcmVhdGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCis+IGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworPiAKKz4gICAkICQwICRACis+IAorPiBfQUNFT0YKKz4gZXhlYyA1Pj5jb25maWcubG9nCis+IHsKKz4gY2F0IDw8X0FTVU5BTUUKKz4gIyMgLS0tLS0tLS0tICMjCis+ICMjIFBsYXRmb3JtLiAjIworPiAjIyAtLS0tLS0tLS0gIyMKKz4gCis+IGhvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCis+IHVuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorPiB1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKz4gdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCis+IHVuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorPiAKKz4gL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCis+IC9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorPiAKKz4gL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorPiAvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCis+IC91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKz4gL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorPiAvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCis+IC91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKz4gL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorPiAKKz4gX0FTVU5BTUUKKz4gCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IH0gPiY1Cis+IAorPiBjYXQgPiY1IDw8X0FDRU9GCis+IAorPiAKKz4gIyMgLS0tLS0tLS0tLS0gIyMKKz4gIyMgQ29yZSB0ZXN0cy4gIyMKKz4gIyMgLS0tLS0tLS0tLS0gIyMKKz4gCis+IF9BQ0VPRgorPiAKKz4gCis+ICMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCis+ICMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorPiAjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKz4gIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorPiAjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KKz4gYWNfY29uZmlndXJlX2FyZ3M9Cis+IGFjX2NvbmZpZ3VyZV9hcmdzMD0KKz4gYWNfY29uZmlndXJlX2FyZ3MxPQorPiBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorPiBmb3IgYWNfcGFzcyBpbiAxIDIKKz4gZG8KKz4gICBmb3IgYWNfYXJnCis+ICAgZG8KKz4gICAgIGNhc2UgJGFjX2FyZyBpbgorPiAgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworPiAgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKz4gICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorPiAgICAgICBjb250aW51ZSA7OworPiAgICAgKlwnKikKKz4gICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKz4gICAgIGVzYWMKKz4gICAgIGNhc2UgJGFjX3Bhc3MgaW4KKz4gICAgIDEpIGFjX2NvbmZpZ3VyZV9hcmdzMD0iJGFjX2NvbmZpZ3VyZV9hcmdzMCAnJGFjX2FyZyciIDs7Cis+ICAgICAyKQorPiAgICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorPiAgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKz4gCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKz4gICAgICAgZWxzZQorPiAJY2FzZSAkYWNfYXJnIGluCis+IAkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorPiAJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCis+IAkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKz4gCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCis+IAkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCis+IAkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworPiAJICAgIGVzYWMKKz4gCSAgICA7OworPiAJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKz4gCWVzYWMKKz4gICAgICAgZmkKKz4gICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciCis+ICAgICAgIDs7Cis+ICAgICBlc2FjCis+ICAgZG9uZQorPiBkb25lCis+ICRhc191bnNldCBhY19jb25maWd1cmVfYXJnczAgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczArc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MwPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMDsgfQorPiAkYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MxK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczE7IH0KKz4gCis+ICMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKz4gIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKz4gIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCis+ICMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorPiAjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCis+IHRyYXAgJ2V4aXRfc3RhdHVzPSQ/Cis+ICAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCis+ICAgeworPiAgICAgZWNobworPiAKKz4gICAgIGNhdCA8PFxfQVNCT1gKKz4gIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworPiAjIyBDYWNoZSB2YXJpYWJsZXMuICMjCis+ICMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gX0FTQk9YCis+ICAgICBlY2hvCis+ICAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorPiAoCis+ICAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworPiAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCis+ICAgICBjYXNlICRhY192YWwgaW4gIygKKz4gICAgICoke2FzX25sfSopCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworPiAgICAgICBlc2FjCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCis+ICAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCis+ICAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7Cis+ICAgICAgIGVzYWMgOzsKKz4gICAgIGVzYWMKKz4gICBkb25lCis+ICAgKHNldCkgMj4mMSB8Cis+ICAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCis+ICAgICAqJHthc19ubH1hY19zcGFjZT1cICopCis+ICAgICAgIHNlZCAtbiBcCis+IAkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKz4gCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorPiAgICAgICA7OyAjKAorPiAgICAgKikKKz4gICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKz4gICAgICAgOzsKKz4gICAgIGVzYWMgfAorPiAgICAgc29ydAorPiApCis+ICAgICBlY2hvCis+IAorPiAgICAgY2F0IDw8XF9BU0JPWAorPiAjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworPiAjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworPiAjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworPiBfQVNCT1gKKz4gICAgIGVjaG8KKz4gICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKz4gICAgIGRvCis+ICAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorPiAgICAgICBjYXNlICRhY192YWwgaW4KKz4gICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworPiAgICAgICBlc2FjCis+ICAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKz4gICAgIGRvbmUgfCBzb3J0Cis+ICAgICBlY2hvCis+IAorPiAgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorPiAgICAgICBjYXQgPDxcX0FTQk9YCis+ICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworPiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCis+IF9BU0JPWAorPiAgICAgICBlY2hvCis+ICAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCis+ICAgICAgIGRvCis+IAlldmFsIGFjX3ZhbD1cJCRhY192YXIKKz4gCWNhc2UgJGFjX3ZhbCBpbgorPiAJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworPiAJZXNhYworPiAJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorPiAgICAgICBkb25lIHwgc29ydAorPiAgICAgICBlY2hvCis+ICAgICBmaQorPiAKKz4gICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorPiAgICAgICBjYXQgPDxcX0FTQk9YCis+ICMjIC0tLS0tLS0tLS0tICMjCis+ICMjIGNvbmZkZWZzLmguICMjCis+ICMjIC0tLS0tLS0tLS0tICMjCis+IF9BU0JPWAorPiAgICAgICBlY2hvCis+ICAgICAgIGNhdCBjb25mZGVmcy5oCis+ICAgICAgIGVjaG8KKz4gICAgIGZpCis+ICAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCis+ICAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorPiAgIH0gPiY1Cis+ICAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCis+ICAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCis+ICAgICBleGl0ICRleGl0X3N0YXR1cworPiAnIDAKKz4gZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCis+ICAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCis+IGRvbmUKKz4gYWNfc2lnbmFsPTAKKz4gCis+ICMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCis+IHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCis+IAorPiAjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCis+IF9BQ0VPRgorPiAKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCis+IF9BQ0VPRgorPiAKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCis+IF9BQ0VPRgorPiAKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgorPiBfQUNFT0YKKz4gCis+IAorPiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKKz4gX0FDRU9GCis+IAorPiAKKz4gIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCis+ICMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCis+IGFjX3NpdGVfZmlsZTE9Tk9ORQorPiBhY19zaXRlX2ZpbGUyPU5PTkUKKz4gaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorPiAgIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCis+IGVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCis+ICAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCis+ICAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorPiBlbHNlCis+ICAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKz4gICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKKz4gZmkKKz4gZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKKz4gZG8KKz4gICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQorPiAgIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorPiAgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1Cis+ICAgICAuICIkYWNfc2l0ZV9maWxlIgorPiAgIGZpCis+IGRvbmUKKz4gCis+IGlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorPiAgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsCis+ICAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCis+ICAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Cis+ICAgICBjYXNlICRjYWNoZV9maWxlIGluCis+ICAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKz4gICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworPiAgICAgZXNhYworNTU5YzE4MjIsMTg4NAorPCAgIGFjX249IGFjX2M9J1xjJyBhY190PQorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Cis+ICAgPiRjYWNoZV9maWxlCis+IGZpCis+IAorPiAjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCis+ICMgdmFsdWUuCis+IGFjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorPiBmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworPiAgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0Cis+ICAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKz4gICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCis+ICAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorPiAgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KKz4gICAgIHNldCwpCis+ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9Cis+ICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7Cis+ICAgICAsc2V0KQorPiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9Cis+ICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7Cis+ICAgICAsKTs7Cis+ICAgICAqKQorPiAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCis+IAkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKz4gCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorPiAJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCis+IAlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKz4gCSAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Cis+IAkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06Cis+IAllbHNlCis+IAkgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorPiAJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCis+IAlmaQorPiAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorPiAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQorPiAgICAgICBmaTs7Cis+ICAgZXNhYworPiAgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKz4gICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKz4gICAgIGNhc2UgJGFjX25ld192YWwgaW4KKz4gICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWAkYXNfZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7Cis+ICAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworPiAgICAgZXNhYworPiAgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCis+ICAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorPiAgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKz4gICAgIGVzYWMKKz4gICBmaQorPiBkb25lCis+IGlmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzU2NGExODkwLDE5MTIKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IGFjX2V4dD1jCis+IGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorPiAKKz4gCis+IAorPiBhY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGNvbW1vbi9pY3VjZmcuaCIKKz4gCis1NjgsNTY5YzE5MTYsMTkxNworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo1NzA6IGNoZWNraW5nIGZvciBJQ1UgdmVyc2lvbiBudW1iZXJzIiA+JjUKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIElDVSB2ZXJzaW9uIG51bWJlcnMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSUNVIHZlcnNpb24gbnVtYmVycy4uLiAiID4mNjsgfQorNTc4YzE5MjYsMTkyOAorPCAgICAgICAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogQ2Fubm90IGRldGVybWluZSBJQ1UgdmVyc2lvbiBudW1iZXIgZnJvbSBoZWFkZXIgZmlsZXMiIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+ICAgICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgSUNVIHZlcnNpb24gbnVtYmVyIGZyb20gaGVhZGVyIGZpbGVzIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBkZXRlcm1pbmUgSUNVIHZlcnNpb24gbnVtYmVyIGZyb20gaGVhZGVyIGZpbGVzIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzU4NmMxOTM2LDE5MzcKKzwgZWNobyAiJGFjX3QiInJlbGVhc2UgJFZFUlNJT04sIGxpYnJhcnkgJExJQl9WRVJTSU9OIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogcmVsZWFzZSAkVkVSU0lPTiwgbGlicmFyeSAkTElCX1ZFUlNJT04iID4mNQorPiAkYXNfZWNobyAicmVsZWFzZSAkVkVSU0lPTiwgbGlicmFyeSAkTElCX1ZFUlNJT04iID4mNjsgfQorNTk0YzE5NDUsMTk5MQorPCAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistLS0KKz4gYWNfZXh0PWMKKz4gYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKz4gYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworPiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworPiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cis+IGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKz4gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKz4gc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKz4gICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorPiBlbHNlCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKz4gZmkKKz4gZmkKKz4gQ0M9JGFjX2N2X3Byb2dfQ0MKKz4gaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Cis+ICRhc19lY2hvICIkQ0MiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorPiAKKz4gCis+IGZpCis+IGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorPiAgIGFjX2N0X0NDPSRDQworPiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKzU5Niw1OTljMTk5MywyMDQ5Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo1OTg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NDJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorPiBlbHNlCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IGZpCis+IGZpCis+IGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCis+IGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorPiAkYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KKz4gZWxzZQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKz4gZmkKKz4gCis+ICAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCis+ICAgICBDQz0iIgorPiAgIGVsc2UKKz4gICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKz4geWVzOikKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKz4gYWNfdG9vbF93YXJuZWQ9eWVzIDs7Cis+IGVzYWMKKz4gICAgIENDPSRhY19jdF9DQworPiAgIGZpCis+IGVsc2UKKz4gICBDQz0iJGFjX2N2X3Byb2dfQ0MiCis+IGZpCis+IAorPiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCis+ICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCis+ICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis2MDQsNjEzYzIwNTQsMjA2OAorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworPCAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKzwgICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorPCAgICAgICBhY19jdl9wcm9nX0NDPSJnY2MiCis8ICAgICAgIGJyZWFrCis8ICAgICBmaQorPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX2lmcyIKKy0tLQorPiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCis+ICAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzYxNmMyMDcxCis8IENDPSIkYWNfY3ZfcHJvZ19DQyIKKy0tLQorPiBDQz0kYWNfY3ZfcHJvZ19DQworNjE4YzIwNzMsMjA3NAorPCAgIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Cis+ICRhc19lY2hvICIkQ0MiID4mNjsgfQorNjIwYzIwNzYsMjA3NworPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorNjIyYTIwODAsMjA4MgorPiAKKz4gICBmaQorPiBmaQorNjI2LDYyOWMyMDg2LDIwODkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjYyODogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorNjM0ZDIwOTMKKzwgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorNjM2LDY0OGMyMDk1LDIxMTMKKzwgICBhY19kdW1teT0iJFBBVEgiCis8ICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCis8ICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorPCAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCis8ICAgICAgIGlmIHRlc3QgIiRhY19kaXIvJGFjX3dvcmQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorPCAgICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCis8IAljb250aW51ZQorPCAgICAgICBmaQorPCAgICAgICBhY19jdl9wcm9nX0NDPSJjYyIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorLS0tCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorPiAgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKz4gICAgICAgIGNvbnRpbnVlCis+ICAgICAgZmkKKz4gICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzY1M2MyMTE4Cis8ICAgaWYgdGVzdCAkIyAtZ3QgMDsgdGhlbgorLS0tCis+ICAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCis2NTgsNjYwYzIxMjMKKzwgICAgIHNldCBkdW1teSAiJGFjX2Rpci8kYWNfd29yZCIgIiRAIgorPCAgICAgc2hpZnQKKzwgICAgIGFjX2N2X3Byb2dfQ0M9IiRAIgorLS0tCis+ICAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKzY2NWMyMTI4Cis8IENDPSIkYWNfY3ZfcHJvZ19DQyIKKy0tLQorPiBDQz0kYWNfY3ZfcHJvZ19DQworNjY3YzIxMzAsMjEzMQorPCAgIGVjaG8gIiRhY190IiIkQ0MiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Cis+ICRhc19lY2hvICIkQ0MiID4mNjsgfQorNjY5YzIxMzMsMjEzNAorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorNjcyLDY4MGMyMTM3LDIxNDgKKzwgICBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCis8ICAgICBjYXNlICJgdW5hbWUgLXNgIiBpbgorPCAgICAgKndpbjMyKiB8ICpXSU4zMiopCis8ICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPCBzZXQgZHVtbXkgY2w7IGFjX3dvcmQ9JDIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjY3OTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ0MnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gCis+IGZpCis+IGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKz4gICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCis+ICAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCis+ICAgZG8KKz4gICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorNjg1LDY5NGMyMTUzLDIxNjcKKzwgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorPCAgIGFjX2R1bW15PSIkUEFUSCIKKzwgICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcHJvZ19DQz0iY2wiCis8ICAgICAgIGJyZWFrCis8ICAgICBmaQorPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX2lmcyIKKy0tLQorPiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCis+ICAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis2OTdjMjE3MAorPCBDQz0iJGFjX2N2X3Byb2dfQ0MiCistLS0KKz4gQ0M9JGFjX2N2X3Byb2dfQ0MKKzY5OWMyMTcyLDIxNzMKKzwgICBlY2hvICIkYWNfdCIiJENDIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorPiAkYXNfZWNobyAiJENDIiA+JjY7IH0KKzcwMWMyMTc1LDIxNzYKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzcwMyw3MDRjMjE3OCwyMjA2Cis8ICA7OworPCAgICAgZXNhYworLS0tCis+IAorPiAKKz4gICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKz4gICBkb25lCis+IGZpCis+IGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KKz4gICBhY19jdF9DQz0kQ0MKKz4gICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKz4gZG8KKz4gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKz4gc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorPiBlbHNlCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKzcwNmMyMjA4LDIyMjAKKzwgICB0ZXN0IC16ICIkQ0MiICYmIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBjYyBmb3VuZCBpbiBcJFBBVEgiIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+IGRvbmUKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorPiBmaQorPiBmaQorPiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworPiBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9Cis+IGVsc2UKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Cis+ICRhc19lY2hvICJubyIgPiY2OyB9Cis3MDksNzEwZDIyMjIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjcxMTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIHdvcmtzIiA+JjUKKzcxMiw3MzBjMjIyNCwyMjI4Cis8IGFjX2V4dD1jCis8ICMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworPCBhY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworPCAKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBFT0YKKzwgCis8ICNsaW5lIDcyMiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgCis8IG1haW4oKXtyZXR1cm4oMCk7fQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTo3Mjc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIGFjX2N2X3Byb2dfY2Nfd29ya3M9eWVzCis8ICAgIyBJZiB3ZSBjYW4ndCBydW4gYSB0cml2aWFsIHByb2dyYW0sIHdlIGFyZSBwcm9iYWJseSB1c2luZyBhIGNyb3NzIGNvbXBpbGVyLgorPCAgIGlmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbgorPCAgICAgYWNfY3ZfcHJvZ19jY19jcm9zcz1ubworLS0tCis+ICAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworPiBkb25lCis+IAorPiAgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorPiAgICAgQ0M9IiIKKzczMmMyMjMwLDIyMzYKKzwgICAgIGFjX2N2X3Byb2dfY2NfY3Jvc3M9eWVzCistLS0KKz4gICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKz4geWVzOikKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKz4gYWNfdG9vbF93YXJuZWQ9eWVzIDs7Cis+IGVzYWMKKz4gICAgIENDPSRhY19jdF9DQworNzM0LDczN2QyMjM3Cis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIGFjX2N2X3Byb2dfY2Nfd29ya3M9bm8KKzczOSw3NDVkMjIzOAorPCBybSAtZnIgY29uZnRlc3QqCis8IGFjX2V4dD1jCis8ICMgQ0ZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDQy1jY30gLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCAxPiY1JworPCBhY19saW5rPScke0NDLWNjfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jY19jcm9zcworNzQ3LDc0OWQyMjM5Cis8IGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY193b3JrcyIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX3dvcmtzID0gbm87IHRoZW4KKzwgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQorNzUxLDc1NGQyMjQwCis8IGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjc1MzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoJENDICRDRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiID4mNQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfY2NfY3Jvc3MiIDE+JjYKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCis3NTYsNzY3YzIyNDIsMjM2OAorPCBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo3NTg6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfZ2NjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorPCAjaWZkZWYgX19HTlVDX18KKzwgICB5ZXM7Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgeyBhY190cnk9JyR7Q0MtY2N9IC1FIGNvbmZ0ZXN0LmMnOyB7IChldmFsIGVjaG8gY29uZmlndXJlOjc2NzogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH07IH0gfCBlZ3JlcCB5ZXMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis8ICAgYWNfY3ZfcHJvZ19nY2M9eWVzCistLS0KKz4gCis+IHRlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorPiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICis+IFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKz4gCis+ICMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKz4gJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKKz4gc2V0IFggJGFjX2NvbXBpbGUKKz4gYWNfY29tcGlsZXI9JDIKKz4geyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9Cis+IHsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKz4geyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorPiAKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCis+IGFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKz4gIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorPiAjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCis+ICMgb2YgZXhlZXh0LgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cis+IGFjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCis+IAorPiAjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6Cis+IGFjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCis+IAorPiBhY19ybWZpbGVzPQorPiBmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKKz4gZG8KKz4gICBjYXNlICRhY19maWxlIGluCis+ICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7Cis+ICAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKz4gICBlc2FjCis+IGRvbmUKKz4gcm0gLWYgJGFjX3JtZmlsZXMKKz4gCis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKz4gICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKz4gIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKz4gIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKz4gIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKz4gIyBBdXRvY29uZi4KKz4gZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCis+IGRvCis+ICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCis+ICAgY2FzZSAkYWNfZmlsZSBpbgorPiAgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQorPiAJOzsKKz4gICAgIFthYl0ub3V0ICkKKz4gCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0Cis+IAkjIGNlcnRhaW5seSByaWdodC4KKz4gCWJyZWFrOzsKKz4gICAgICouKiApCis+ICAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87Cis+IAl0aGVuIDo7IGVsc2UKKz4gCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorPiAJZmkKKz4gCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorPiAJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCis+IAkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKz4gCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorPiAJIyBhY3R1YWxseSB3b3JraW5nLgorPiAJYnJlYWs7OworPiAgICAgKiApCis+IAlicmVhazs7Cis+ICAgZXNhYworPiBkb25lCis+IHRlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorPiAKKzc2OWMyMzcwCis8ICAgYWNfY3ZfcHJvZ19nY2M9bm8KKy0tLQorPiAgIGFjX2ZpbGU9JycKKzc3MGEyMzcyLDI0MjMKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KKz4gaWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKz4geyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Cis+ICAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9OyB9Cis+IGZpCis+IAorPiBhY19leGVleHQ9JGFjX2N2X2V4ZWV4dAorPiAKKz4gIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKz4gIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KKz4gIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAorPiAjIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgorPiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKz4gICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKKz4gICB7IChjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY190cnkiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorPiAgICAgY3Jvc3NfY29tcGlsaW5nPW5vCis+ICAgZWxzZQorPiAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorPiAJY3Jvc3NfY29tcGlsaW5nPXllcworPiAgICAgZWxzZQorPiAJeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorPiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorPiBJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorPiBJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorPiAgICAgZmkKKz4gICBmaQorNzcxYTI0MjUsMjQyNgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorPiAkYXNfZWNobyAieWVzIiA+JjY7IH0KKzc3M2MyNDI4LDI1NDkKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2djYyIgMT4mNgorLS0tCis+IHJtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0Cis+IGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCis+ICMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCis+ICMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKz4gJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorPiAgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorPiAjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKz4gIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKKz4gIyBgcm0nLgorPiBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKz4gICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKz4gICBjYXNlICRhY19maWxlIGluCis+ICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7Cis+ICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKz4gCSAgYnJlYWs7OworPiAgICAgKiApIGJyZWFrOzsKKz4gICBlc2FjCis+IGRvbmUKKz4gZWxzZQorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKz4geyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Cis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKz4gRVhFRVhUPSRhY19jdl9leGVleHQKKz4gYWNfZXhlZXh0PSRFWEVFWFQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorPiAgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCis+ICAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworPiAgIGNhc2UgJGFjX2ZpbGUgaW4KKz4gICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7Cis+ICAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKz4gICAgICAgIGJyZWFrOzsKKz4gICBlc2FjCis+IGRvbmUKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Cis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KKz4gT0JKRVhUPSRhY19jdl9vYmpleHQKKz4gYWNfb2JqZXh0PSRPQkpFWFQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzc3NWMyNTUxLDI1OTQKKzwgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2MgPSB5ZXM7IHRoZW4KKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+ICNpZm5kZWYgX19HTlVDX18KKz4gICAgICAgIGNob2tlIG1lCis+ICNlbmRpZgorPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgYWNfY29tcGlsZXJfZ251PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jb21waWxlcl9nbnU9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBhY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Cis+IAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KKz4gaWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCis3NzlhMjU5OSwyNjU4Cis+IGFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KKz4gYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCis+ICAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCis+ICAgIGFjX2N2X3Byb2dfY2NfZz1ubworPiAgICBDRkxBR1M9Ii1nIgorPiAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9wcm9nX2NjX2c9eWVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCUNGTEFHUz0iIgorPiAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis3ODEsNzg3YzI2NjAsMjY4MgorPCBhY190ZXN0X0NGTEFHUz0iJHtDRkxBR1Mrc2V0fSIKKzwgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCis8IENGTEFHUz0KKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjc4NjogY2hlY2tpbmcgd2hldGhlciAke0NDLWNjfSBhY2NlcHRzIC1nIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfY2NfZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis3ODksNzkwYzI2ODQsMjcyMQorPCAgIGVjaG8gJ3ZvaWQgZigpe30nID4gY29uZnRlc3QuYworPCBpZiB0ZXN0IC16ICJgJHtDQy1jY30gLWcgLWMgY29uZnRlc3QuYyAyPiYxYCI7IHRoZW4KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCis+IAkgQ0ZMQUdTPSItZyIKKz4gCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKzc5M2MyNzI0LDI3MjcKKzwgICBhY19jdl9wcm9nX2NjX2c9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAKKzc5NWQyNzI4Cis8IHJtIC1mIGNvbmZ0ZXN0KgorNzk2YTI3MzAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis3OTljMjczMywyNzQwCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfcHJvZ19jY19nIiAxPiY2CistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Cis4MDFjMjc0MgorPCAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorLS0tCis+ICAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworODE0YTI3NTYsMjc5MAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCis+IGFjX3NhdmVfQ0M9JENDCis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPHN0ZGFyZy5oPgorPiAjaW5jbHVkZSA8c3RkaW8uaD4KKz4gI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorPiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKz4gLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworPiBzdHJ1Y3QgYnVmIHsgaW50IHg7IH07Cis+IEZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Cis+IHN0YXRpYyBjaGFyICplIChwLCBpKQorPiAgICAgIGNoYXIgKipwOworPiAgICAgIGludCBpOworPiB7Cis+ICAgcmV0dXJuIHBbaV07Cis+IH0KKz4gc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQorPiB7Cis+ICAgY2hhciAqczsKKz4gICB2YV9saXN0IHY7Cis+ICAgdmFfc3RhcnQgKHYscCk7Cis+ICAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKz4gICB2YV9lbmQgKHYpOworPiAgIHJldHVybiBzOworPiB9Cis4MTZjMjc5MiwyODIxCis8IGZvciBhY19wcm9nIGluICRDQ0MgYysrIGcrKyBnY2MgQ0MgY3h4IGNjKysgY2wKKy0tLQorPiAvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworPiAgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCis+ICAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorPiAgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0Cis+ICAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKz4gICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCis+ICAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KKz4gaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKz4gCis+IC8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworPiAgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCis+ICNkZWZpbmUgRk9PKHgpICd4JworPiBpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKz4gCis+IGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworPiBzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKKz4gc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Cis+IGludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworPiBpbnQgYXJnYzsKKz4gY2hhciAqKmFyZ3Y7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorPiAJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKKzgxOCw4MjNjMjgyMywyODk1Cis8ICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPCBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjgyMjogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ1hYJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+ICAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCis+ICAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Cis+ICAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKKz4gZG9uZQorPiBybSAtZiBjb25mdGVzdC4kYWNfZXh0Cis+IENDPSRhY19zYXZlX0NDCis+IAorPiBmaQorPiAjIEFDX0NBQ0hFX1ZBTAorPiBjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorPiAgIHgpCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Cis+ICRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7Cis+ICAgeG5vKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorPiAkYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworPiAgICopCis+ICAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworPiBlc2FjCis+IAorPiAKKz4gYWNfZXh0PWMKKz4gYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKz4gYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworPiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworPiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cis+IAorPiBhY19leHQ9Y3BwCis+IGFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cis+IGlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCis+ICAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKz4gICAgIENYWD0kQ0NDCis+ICAgZWxzZQorPiAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorPiAgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCis+ICAgZG8KKz4gICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzgyOCw4MzdjMjkwMCwyOTE0Cis8ICAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKzwgICBhY19kdW1teT0iJFBBVEgiCis8ICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCis8ICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorPCAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCis8ICAgICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfcHJvZyIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorLS0tCis+IGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis4NDBjMjkxNworPCBDWFg9IiRhY19jdl9wcm9nX0NYWCIKKy0tLQorPiBDWFg9JGFjX2N2X3Byb2dfQ1hYCis4NDJjMjkxOSwyOTIwCis8ICAgZWNobyAiJGFjX3QiIiRDWFgiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQorPiAkYXNfZWNobyAiJENYWCIgPiY2OyB9Cis4NDRjMjkyMiwyOTIzCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Cis+ICRhc19lY2hvICJubyIgPiY2OyB9Cis4NDdjMjkyNiwyOTU1Cis8IHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCistLS0KKz4gCis+ICAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworPiAgIGRvbmUKKz4gZmkKKz4gaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKz4gICBhY19jdF9DWFg9JENYWAorPiAgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCis+IGRvCis+ICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCis+IHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCis+IGVsc2UKKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis4NDljMjk1NywyOTY4Cis8IHRlc3QgLW4gIiRDWFgiIHx8IENYWD0iZ2NjIgorLS0tCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IGZpCis+IGZpCis+IGFjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKKz4gaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdF9DWFgiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorODUyLDg1M2MyOTcxLDI5NzIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyICgkQ1hYICRDWFhGTEFHUyAkTERGTEFHUykgd29ya3MiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6ODU0OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKCRDWFggJENYWEZMQUdTICRMREZMQUdTKSB3b3JrcyIgPiY1CistLS0KKz4gICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworPiBkb25lCis4NTUsODczYzI5NzQsMjk3NQorPCBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworPCAKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBFT0YKKzwgCis8ICNsaW5lIDg2NSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgCis8IGludCBtYWluKCl7cmV0dXJuKDApO30KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6ODcwOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBhY19jdl9wcm9nX2N4eF93b3Jrcz15ZXMKKzwgICAjIElmIHdlIGNhbid0IHJ1biBhIHRyaXZpYWwgcHJvZ3JhbSwgd2UgYXJlIHByb2JhYmx5IHVzaW5nIGEgY3Jvc3MgY29tcGlsZXIuCis8ICAgaWYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuCis8ICAgICBhY19jdl9wcm9nX2N4eF9jcm9zcz1ubworLS0tCis+ICAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorPiAgICAgQ1hYPSJnKysiCis4NzVjMjk3NywyOTgzCis8ICAgICBhY19jdl9wcm9nX2N4eF9jcm9zcz15ZXMKKy0tLQorPiAgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorPiB5ZXM6KQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorPiBhY190b29sX3dhcm5lZD15ZXMgOzsKKz4gZXNhYworPiAgICAgQ1hYPSRhY19jdF9DWFgKKzg3Nyw4ODBkMjk4NAorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBhY19jdl9wcm9nX2N4eF93b3Jrcz1ubworODgyLDg4OGQyOTg1Cis8IHJtIC1mciBjb25mdGVzdCoKKzwgYWNfZXh0PWMKKzwgIyBDRkxBR1MgaXMgbm90IGluIGFjX2NwcCBiZWNhdXNlIC1nLCAtTywgZXRjLiBhcmUgbm90IHZhbGlkIGNwcCBvcHRpb25zLgorPCBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworPCBhY19jb21waWxlPScke0NDLWNjfSAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCis8IGFjX2xpbms9JyR7Q0MtY2N9IC1vIGNvbmZ0ZXN0JHthY19leGVleHR9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2NjX2Nyb3NzCis4OTAsODkyYzI5ODcKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF93b3JrcyIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF93b3JrcyA9IG5vOyB0aGVuCis8ICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBDKysgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcy4iIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+ICAgZmkKKzg5NCw4OTdjMjk4OSwzMDM3Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciAoJENYWCAkQ1hYRkxBR1MgJExERkxBR1MpIGlzIGEgY3Jvc3MtY29tcGlsZXIiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6ODk2OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKCRDWFggJENYWEZMQUdTICRMREZMQUdTKSBpcyBhIGNyb3NzLWNvbXBpbGVyIiA+JjUKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF9jcm9zcyIgMT4mNgorPCBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY3h4X2Nyb3NzCistLS0KKz4gIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorPiAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1Cis+IHNldCBYICRhY19jb21waWxlCis+IGFjX2NvbXBpbGVyPSQyCis+IHsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorPiB7IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9Cis+IHsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis4OTksOTA2YzMwMzksMzA0MworPCBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQysrIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjkwMTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgR05VIEMrKyIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX2d4eCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LkMgPDxFT0YKKzwgI2lmZGVmIF9fR05VQ19fCis8ICAgeWVzOworLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKz4gI2lmbmRlZiBfX0dOVUNfXworPiAgICAgICAgY2hva2UgbWUKKzkwOCw5MTZkMzA0NAorPCBFT0YKKzwgaWYgeyBhY190cnk9JyR7Q1hYLWcrK30gLUUgY29uZnRlc3QuQyc7IHsgKGV2YWwgZWNobyBjb25maWd1cmU6OTEwOiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfTsgfSB8IGVncmVwIHllcyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBhY19jdl9wcm9nX2d4eD15ZXMKKzwgZWxzZQorPCAgIGFjX2N2X3Byb2dfZ3h4PW5vCis8IGZpCis8IGZpCis8IAorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3Byb2dfZ3h4IiAxPiY2Cis5MThjMzA0NiwzMDgyCis8IGlmIHRlc3QgJGFjX2N2X3Byb2dfZ3h4ID0geWVzOyB0aGVuCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jb21waWxlcl9nbnU9eWVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2NvbXBpbGVyX2dudT1ubworPiBmaQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGFjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorPiAKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQorPiBpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKzkyMmEzMDg3LDMxMDcKKz4gYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKz4gYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKKz4gICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworPiAgICBhY19jdl9wcm9nX2N4eF9nPW5vCis+ICAgIENYWEZMQUdTPSItZyIKKz4gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworOTI0LDkzMGMzMTA5LDMxMzEKKzwgYWNfdGVzdF9DWFhGTEFHUz0iJHtDWFhGTEFHUytzZXR9IgorPCBhY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCis8IENYWEZMQUdTPQorPCBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7Q1hYLWcrK30gYWNjZXB0cyAtZyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTo5Mjk6IGNoZWNraW5nIHdoZXRoZXIgJHtDWFgtZysrfSBhY2NlcHRzIC1nIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfY3h4X2cnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9wcm9nX2N4eF9nPXllcworOTMyLDkzM2MzMTMzLDMyMDkKKzwgICBlY2hvICd2b2lkIGYoKXt9JyA+IGNvbmZ0ZXN0LmNjCis8IGlmIHRlc3QgLXogImAke0NYWC1nKyt9IC1nIC1jIGNvbmZ0ZXN0LmNjIDI+JjFgIjsgdGhlbgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlDWFhGTEFHUz0iIgorPiAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworPiAJIENYWEZMQUdTPSItZyIKKz4gCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorOTM2YzMyMTIsMzIxOAorPCAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAKKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorOTM4ZDMyMTkKKzwgcm0gLWYgY29uZnRlc3QqCis5MzlhMzIyMQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzk0MmMzMjI0LDMyMjgKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9wcm9nX2N4eF9nIiAxPiY2CistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+ICAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQorOTQ0YzMyMzAKKzwgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCistLS0KKz4gICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworOTU3YTMyNDQsMzI0OAorPiBhY19leHQ9YworPiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworPiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKzk2MCw5NjFjMzI1MSwzMjUyCis8IGZvciBhY19kaXIgaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi47IGRvCis8ICAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KKy0tLQorPiBmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworPiAgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKzk2NWMzMjU2Cis8ICAgZWxpZiB0ZXN0IC1mICRhY19kaXIvaW5zdGFsbC5zaDsgdGhlbgorLS0tCis+ICAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCis5NjhhMzI2MCwzMjYzCis+ICAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKz4gICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorPiAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCis+ICAgICBicmVhaworOTcyYzMyNjcsMzI2OQorPCAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgMT4mMjsgZXhpdCAxOyB9CistLS0KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis5NzQsOTc2YzMyNzEsMzI3OQorPCBhY19jb25maWdfZ3Vlc3M9JGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzCis8IGFjX2NvbmZpZ19zdWI9JGFjX2F1eF9kaXIvY29uZmlnLnN1YgorPCBhY19jb25maWd1cmU9JGFjX2F1eF9kaXIvY29uZmlndXJlICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KKy0tLQorPiAKKz4gIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCis+ICMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKz4gIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5Cis+ICMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KKz4gYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorPiBhY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKz4gYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorPiAKKzk4NGEzMjg4Cis+ICMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworOTg3YTMyOTIKKz4gIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCis5ODksOTkwYzMyOTQsMzI5NgorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgYSBCU0QgY29tcGF0aWJsZSBpbnN0YWxsIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjk5MTogY2hlY2tpbmcgZm9yIGEgQlNEIGNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CistLS0KKz4gIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KKzk5Miw5OTNjMzI5OCwzMjk5Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX2luc3RhbGwnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorOTk1LDEwMDVjMzMwMSwzMzE4Cis8ICAgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSI6IgorPCAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCis8ICAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKzwgICAgIGNhc2UgIiRhY19kaXIvIiBpbgorPCAgICAgL3wuL3wuLy98L2V0Yy8qfC91c3Ivc2Jpbi8qfC91c3IvZXRjLyp8L3NiaW4vKnwvdXNyL2Fmc3dzL2Jpbi8qfC91c3IvdWNiLyopIDs7Cis8ICAgICAqKQorPCAgICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorPCAgICAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKzwgICAgICAgIyBieSBkZWZhdWx0LgorPCAgICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCis8ICAgICAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY19wcm9nOyB0aGVuCistLS0KKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KKz4gY2FzZSAkYXNfZGlyLyBpbgorPiAgIC4vIHwgLi8vIHwgL2NDLyogfCBcCis+ICAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCis+ICAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCis+ICAgL3Vzci91Y2IvKiApIDs7Cis+ICAgKikKKz4gICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCis+ICAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKz4gICAgICMgYnkgZGVmYXVsdC4KKz4gICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKz4gICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+IAlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisxMDA3YzMzMjAKKzwgICAgICAgICAgICAgZ3JlcCBkc3Btc2cgJGFjX2Rpci8kYWNfcHJvZyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0tLQorPiAJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzEwMDlhMzMyMywzMzI2Cis+IAkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKz4gCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis+IAkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCis+IAkgICAgOgorMTAxMSwxMDEyYzMzMjgsMzMzOQorPCAJICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFjX2Rpci8kYWNfcHJvZyAtYyIKKzwgCSAgICBicmVhayAyCistLS0KKz4gCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKz4gCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorPiAJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCis+IAkgICAgbWtkaXIgY29uZnRlc3QuZGlyCis+IAkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKz4gCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCis+IAkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKz4gCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworPiAJICAgIHRoZW4KKz4gCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKz4gCSAgICAgIGJyZWFrIDMKKz4gCSAgICBmaQorMTAxNiwxMDE5YzMzNDMsMzM1MAorPCAgICAgICA7OworPCAgICAgZXNhYworPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX0lGUyIKKy0tLQorPiAgICAgZG9uZQorPiAgICAgOzsKKz4gZXNhYworPiAKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorPiBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKzEwMjNjMzM1NAorPCAgICAgSU5TVEFMTD0iJGFjX2N2X3BhdGhfaW5zdGFsbCIKKy0tLQorPiAgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisxMDI1LDEwMjZjMzM1NiwzMzU3Cis8ICAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCis8ICAgICAjIHBhdGggZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKy0tLQorPiAgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorPiAgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorMTAyOCwxMDI5YzMzNTksMzM2MAorPCAgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgcGF0aCBpcyByZWxhdGl2ZS4KKzwgICAgIElOU1RBTEw9IiRhY19pbnN0YWxsX3NoIgorLS0tCis+ICAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCis+ICAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisxMDMyYzMzNjMsMzM2NAorPCBlY2hvICIkYWNfdCIiJElOU1RBTEwiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1Cis+ICRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CisxMDM4YzMzNzAKKzwgdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMX1BST0dSQU19JworLS0tCis+IHRlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisxMDU0LDEwNTdjMzM4NiwzMzg5Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMDU2OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19TVFJJUCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisxMDYyLDEwNzFjMzM5NCwzNDA4Cis8ICAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iOiIKKzwgICBhY19kdW1teT0iJFBBVEgiCis8ICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCis8ICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorPCAgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCis8ICAgICAgIGFjX2N2X3Byb2dfU1RSSVA9InN0cmlwIgorPCAgICAgICBicmVhaworPCAgICAgZmkKKzwgICBkb25lCis8ICAgSUZTPSIkYWNfc2F2ZV9pZnMiCistLS0KKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19TVFJJUD0ic3RyaXAiCis+ICAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorPiAgICAgYnJlYWsgMgorPiAgIGZpCis+IGRvbmUKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorMTA3NWMzNDEyCis8IFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKKy0tLQorPiBTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAorMTA3N2MzNDE0LDM0MTUKKzwgICBlY2hvICIkYWNfdCIiJFNUUklQIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQorPiAkYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KKzEwNzljMzQxNywzNDE4Cis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Cis+ICRhc19lY2hvICJubyIgPiY2OyB9CisxMDgyYTM0MjIKKz4gCisxMDg1YzM0MjUKKzwgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistLS0KKz4gICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKzEwODcsMTA5MGMzNDI3LDM0MzAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjEwODk6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX1VfTUFLRScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9VX01BS0Urc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMTA5MiwxMDkzYzM0MzIsMzQzMworPCAgIGNhc2UgIiRVX01BS0UiIGluCis8ICAgLyopCistLS0KKz4gICBjYXNlICRVX01BS0UgaW4KKz4gICBbXFwvXSogfCA/OltcXC9dKikKKzEwOTYsMTA5OGQzNDM1Cis8ICAgPzovKikJCQkgCis8ICAgYWNfY3ZfcGF0aF9VX01BS0U9IiRVX01BS0UiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKzwgICA7OworMTEwMCwxMTA5YzM0MzcsMzQ1MQorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcGF0aF9VX01BS0U9IiRhY19kaXIvJGFjX3dvcmQiCis8ICAgICAgIGJyZWFrCis8ICAgICBmaQorPCAgIGRvbmUKKzwgICBJRlM9IiRhY19zYXZlX2lmcyIKKy0tLQorPiAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKz4gZm9yIGFzX2RpciBpbiAkUEFUSAorPiBkbworPiAgIElGUz0kYXNfc2F2ZV9JRlMKKz4gICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorPiAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKz4gICAgIGFjX2N2X3BhdGhfVV9NQUtFPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzExMTNjMzQ1NQorPCBVX01BS0U9IiRhY19jdl9wYXRoX1VfTUFLRSIKKy0tLQorPiBVX01BS0U9JGFjX2N2X3BhdGhfVV9NQUtFCisxMTE1YzM0NTcsMzQ1OAorPCAgIGVjaG8gIiRhY190IiIkVV9NQUtFIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkVV9NQUtFIiA+JjUKKz4gJGFzX2VjaG8gIiRVX01BS0UiID4mNjsgfQorMTExN2MzNDYwLDM0NjEKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzExMjBjMzQ2NCwzNDY1Cis8IHRlc3QgLW4gIiRVX01BS0UiICYmIGJyZWFrCistLS0KKz4gCis+ICAgdGVzdCAtbiAiJFVfTUFLRSIgJiYgYnJlYWsKKzExMjgsMTEzMWMzNDczLDM0NzYKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjExMzA6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX0RPWFlHRU4nK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRE9YWUdFTitzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisxMTMzLDExMzRjMzQ3OCwzNDc5Cis8ICAgY2FzZSAiJERPWFlHRU4iIGluCis8ICAgLyopCistLS0KKz4gICBjYXNlICRET1hZR0VOIGluCis+ICAgW1xcL10qIHwgPzpbXFwvXSopCisxMTM3LDExMzlkMzQ4MQorPCAgID86LyopCQkJIAorPCAgIGFjX2N2X3BhdGhfRE9YWUdFTj0iJERPWFlHRU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKzwgICA7OworMTE0MSwxMTUwYzM0ODMsMzQ5OAorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIOi91c3IvbG9jYWwvYmluOi91c3IvYmluIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcGF0aF9ET1hZR0VOPSIkYWNfZGlyLyRhY193b3JkIgorPCAgICAgICBicmVhaworPCAgICAgZmkKKzwgICBkb25lCis8ICAgSUZTPSIkYWNfc2F2ZV9pZnMiCistLS0KKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGFzX2R1bW15PSIkUEFUSDovdXNyL2xvY2FsL2JpbjovdXNyL2JpbiIKKz4gZm9yIGFzX2RpciBpbiAkYXNfZHVtbXkKKz4gZG8KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCis+ICAgICBhY19jdl9wYXRoX0RPWFlHRU49IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCis+ICAgICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorPiAgICAgYnJlYWsgMgorPiAgIGZpCis+IGRvbmUKKz4gZG9uZQorPiBJRlM9JGFzX3NhdmVfSUZTCis+IAorMTE1NGMzNTAyCis8IERPWFlHRU49IiRhY19jdl9wYXRoX0RPWFlHRU4iCistLS0KKz4gRE9YWUdFTj0kYWNfY3ZfcGF0aF9ET1hZR0VOCisxMTU2YzM1MDQsMzUwNQorPCAgIGVjaG8gIiRhY190IiIkRE9YWUdFTiIgMT4mNgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJERPWFlHRU4iID4mNQorPiAkYXNfZWNobyAiJERPWFlHRU4iID4mNjsgfQorMTE1OGMzNTA3LDM1MDgKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzExNjQsMTE4MGMzNTE0LDM1NDMKKzwgaWYgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorPCBlbHNlIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogY2FuIG5vdCBydW4gJGFjX2NvbmZpZ19zdWIiIDE+JjI7IGV4aXQgMTsgfQorPCBmaQorPCAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMTcwOiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKzwgCis8IGhvc3RfYWxpYXM9JGhvc3QKKzwgY2FzZSAiJGhvc3RfYWxpYXMiIGluCis8IE5PTkUpCis8ICAgY2FzZSAkbm9ub3B0IGluCis8ICAgTk9ORSkKKzwgICAgIGlmIGhvc3RfYWxpYXM9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRhY19jb25maWdfZ3Vlc3NgOyB0aGVuIDoKKzwgICAgIGVsc2UgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBjYW4gbm90IGd1ZXNzIGhvc3QgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiIDE+JjI7IGV4aXQgMTsgfQorPCAgICAgZmkgOzsKKzwgICAqKSBob3N0X2FsaWFzPSRub25vcHQgOzsKKzwgICBlc2FjIDs7CistLS0KKz4gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKKz4gdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCis+ICAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKKz4gdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCis+ICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiBhY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8Cis+ICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+IAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KKz4gY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKz4gKi0qLSopIDs7Cis+ICopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKzExODIsMTIxNmMzNTQ1LDM1NzAKKzwgCis8IGhvc3Q9YCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRhY19jb25maWdfc3ViICRob3N0X2FsaWFzYAorPCBob3N0X2NwdT1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCis8IGhvc3RfdmVuZG9yPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKKzwgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCis8IGVjaG8gIiRhY190IiIkaG9zdCIgMT4mNgorPCAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEN5Z3dpbiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMTkxOiBjaGVja2luZyBmb3IgQ3lnd2luIGVudmlyb25tZW50IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2N5Z3dpbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTE5NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgCis8IGludCBtYWluKCkgeworPCAKKzwgI2lmbmRlZiBfX0NZR1dJTl9fCis8ICNkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KKzwgI2VuZGlmCis8IHJldHVybiBfX0NZR1dJTl9fOworPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyMDc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfY3lnd2luPXllcworPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfY3lnd2luPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiBidWlsZD0kYWNfY3ZfYnVpbGQKKz4gYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworPiBzZXQgeCAkYWNfY3ZfYnVpbGQKKz4gc2hpZnQKKz4gYnVpbGRfY3B1PSQxCis+IGJ1aWxkX3ZlbmRvcj0kMgorPiBzaGlmdDsgc2hpZnQKKz4gIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCis+ICMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKKz4gYnVpbGRfb3M9JCoKKz4gSUZTPSRhY19zYXZlX0lGUworPiBjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKz4gICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAorPiBlbHNlCis+ICAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKz4gICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzEyMTksMTI0NWQzNTcyCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfY3lnd2luIiAxPiY2Cis8IENZR1dJTj0KKzwgdGVzdCAiJGFjX2N2X2N5Z3dpbiIgPSB5ZXMgJiYgQ1lHV0lOPXllcworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMjI0OiBjaGVja2luZyBmb3IgbWluZ3czMiBlbnZpcm9ubWVudCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9taW5ndzMyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAxMjI5ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAKKzwgaW50IG1haW4oKSB7Cis8IHJldHVybiBfX01JTkdXMzJfXzsKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxMjM2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X21pbmd3MzI9eWVzCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl9taW5ndzMyPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBybSAtZiBjb25mdGVzdCoKKzEyNDZhMzU3NCwzNTkzCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KKz4gY2FzZSAkYWNfY3ZfaG9zdCBpbgorPiAqLSotKikgOzsKKz4gKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gZXNhYworPiBob3N0PSRhY19jdl9ob3N0Cis+IGFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKKz4gc2V0IHggJGFjX2N2X2hvc3QKKz4gc2hpZnQKKz4gaG9zdF9jcHU9JDEKKz4gaG9zdF92ZW5kb3I9JDIKKz4gc2hpZnQ7IHNoaWZ0Cis+ICMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorPiAjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Cis+IGhvc3Rfb3M9JCoKKz4gSUZTPSRhY19zYXZlX0lGUworPiBjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworMTI0OCwxMjc3ZDM1OTQKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9taW5ndzMyIiAxPiY2Cis8IE1JTkdXMzI9Cis8IHRlc3QgIiRhY19jdl9taW5ndzMyIiA9IHllcyAmJiBNSU5HVzMyPXllcworPCAKKzwgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBleGVjdXRhYmxlIHN1ZmZpeCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMjU1OiBjaGVja2luZyBmb3IgZXhlY3V0YWJsZSBzdWZmaXgiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZXhlZXh0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgaWYgdGVzdCAiJENZR1dJTiIgPSB5ZXMgfHwgdGVzdCAiJE1JTkdXMzIiID0geWVzOyB0aGVuCis8ICAgYWNfY3ZfZXhlZXh0PS5leGUKKzwgZWxzZQorPCAgIHJtIC1mIGNvbmZ0ZXN0KgorPCAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuJGFjX2V4dAorPCAgIGFjX2N2X2V4ZWV4dD0KKzwgICBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjEyNjU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH07IHRoZW4KKzwgICAgIGZvciBmaWxlIGluIGNvbmZ0ZXN0Lio7IGRvCis8ICAgICAgIGNhc2UgJGZpbGUgaW4KKzwgICAgICAgKi5jIHwgKi5vIHwgKi5vYmopIDs7Cis8ICAgICAgICopIGFjX2N2X2V4ZWV4dD1gZWNobyAkZmlsZSB8IHNlZCAtZSBzL2NvbmZ0ZXN0Ly9gIDs7Cis8ICAgICAgIGVzYWMKKzwgICAgIGRvbmUKKzwgICBlbHNlCis8ICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGluc3RhbGxhdGlvbiBvciBjb25maWd1cmF0aW9uIHByb2JsZW06IGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMuIiAxPiYyOyBleGl0IDE7IH0KKzwgICBmaQorPCAgIHJtIC1mIGNvbmZ0ZXN0KgorPCAgIHRlc3QgeCIke2FjX2N2X2V4ZWV4dH0iID0geCAmJiBhY19jdl9leGVleHQ9bm8KKzwgZmkKKzwgZmkKKzEyNzksMTI4MmQzNTk1Cis8IEVYRUVYVD0iIgorPCB0ZXN0IHgiJHthY19jdl9leGVleHR9IiAhPSB4bm8gJiYgRVhFRVhUPSR7YWNfY3ZfZXhlZXh0fQorPCBlY2hvICIkYWNfdCIiJHthY19jdl9leGVleHR9IiAxPiY2Cis8IGFjX2V4ZWV4dD0kRVhFRVhUCisxMjg2LDEyODhjMzU5OSwzNjAxCis8ICAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24iIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTI4ODogY2hlY2tpbmcgd2hldGhlciBzdHJpY3QgY29tcGlsaW5nIGlzIG9uIiA+JjUKKzwgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJpY3Qgb3IgLS1kaXNhYmxlLXN0cmljdCB3YXMgZ2l2ZW4uCistLS0KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmljdCBjb21waWxpbmcgaXMgb24uLi4gIiA+JjY7IH0KKz4gICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJpY3Qgd2FzIGdpdmVuLgorMTI5MCwxMjkxYzM2MDMKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfc3RyaWN0IgorPCAgIAorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfc3RyaWN0OworMTI5OGMzNjEwCis8ICAgICAgIAorLS0tCis+IAorMTMwM2MzNjE1LDM2MTYKKzwgICAgIGVjaG8gIiRhY190IiIkYWNfdXNlX3N0cmljdF9vcHRpb25zIiAxPiY2CistLS0KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY191c2Vfc3RyaWN0X29wdGlvbnMiID4mNQorPiAkYXNfZWNobyAiJGFjX3VzZV9zdHJpY3Rfb3B0aW9ucyIgPiY2OyB9CisxMzQzYzM2NTYsMzY1NworPCAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLTY0Yml0LWxpYnMgb3IgLS1kaXNhYmxlLTY0Yml0LWxpYnMgd2FzIGdpdmVuLgorLS0tCis+IAorPiAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLTY0Yml0LWxpYnMgd2FzIGdpdmVuLgorMTM0NSwxMzQ2YzM2NTkKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfNjRiaXRfbGlicyIKKzwgICBFTkFCTEVfNjRCSVRfTElCUz0ke2VuYWJsZXZhbH0KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlXzY0Yml0X2xpYnM7IEVOQUJMRV82NEJJVF9MSUJTPSR7ZW5hYmxldmFsfQorMTM0OWMzNjYyCis8ICAgICAKKy0tLQorPiAKKzEzNTIsMTM1M2MzNjY1LDM2NjYKKzwgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxMzU0OiBjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydCIgPiY1CistLS0KKz4gICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIDY0LWJpdCBleGVjdXRhYmxlIHN1cHBvcnQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgNjQtYml0IGV4ZWN1dGFibGUgc3VwcG9ydC4uLiAiID4mNjsgfQorMTQwOGMzNzIxCis8ICAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorLS0tCis+ICAgICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPSBubzsgdGhlbgorMTQyMCwxNDIyYzM3MzMsMzczOAorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTQyMiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzE0MjQsMTQyNmMzNzQwLDM3NjIKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQyNjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisxNDI5LDE0MzJjMzc2NSwzNzcwCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBFTkFCTEVfNjRCSVRfTElCUz1ubworMTQzNGMzNzcyLDM3NzMKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTQzNmEzNzc2Cis+IAorMTQ1MGMzNzkwCis8ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tCis+IAorMTQ1OCwxNDYwYzM3OTgsMzgwMworPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTQ2MCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzE0NjIsMTQ2NGMzODA1LDM4MjcKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQ2NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisxNDY3LDE0NzBjMzgzMCwzODM1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBFTkFCTEVfNjRCSVRfTElCUz1ubworMTQ3MmMzODM3LDM4MzgKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTQ3NGEzODQxCis+IAorMTQ4MywxNDg1YzM4NTAsMzg1NQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTQ4NSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzE0ODcsMTQ4OWMzODU3LDM4NzkKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTQ4OTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisxNDkyLDE0OTVjMzg4MiwzODg3Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgRU5BQkxFXzY0QklUX0xJQlM9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBFTkFCTEVfNjRCSVRfTElCUz1ubworMTQ5N2MzODg5LDM4OTAKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTQ5OWEzODkzCis+IAorMTUxMWMzOTA1LDM5MDYKKzwgICAgICAgICBlY2hvICIkYWNfdCIiJEVOQUJMRV82NEJJVF9MSUJTIiAxPiY2CistLS0KKz4gICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRU5BQkxFXzY0QklUX0xJQlMiID4mNQorPiAkYXNfZWNobyAiJEVOQUJMRV82NEJJVF9MSUJTIiA+JjY7IH0KKzE1MTcsMTUyMGMzOTEyLDM5MTUKKzwgCWVjaG8gJGFjX24gImNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxNTE5OiBjaGVja2luZyB3aGljaCBNYWtlZmlsZSBmcmFnbWVudCB0byB1c2UiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snaWN1X2N2X2hvc3RfZnJhZycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIE1ha2VmaWxlIGZyYWdtZW50IHRvIHVzZS4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2ljdV9jdl9ob3N0X2ZyYWcrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMTUyMmMzOTE3Cis8ICAgCistLS0KKz4gCisxNTI1LDE1MjZjMzkyMCwzOTIxCis8IAlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgkKKzwgCQlpY3VfY3ZfaG9zdF9mcmFnPW1oLXNvbGFyaXMtZ2NjIAorLS0tCis+IAlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorPiAJCWljdV9jdl9ob3N0X2ZyYWc9bWgtc29sYXJpcy1nY2MKKzE1MzNjMzkyOAorPCAJZWxzZSAgCistLS0KKz4gCWVsc2UKKzE1ODcsMTU4OWQzOTgxCis8IAkJCis8IAkKKzwgZmkKKzE1OTFjMzk4MywzOTg2Cis8IGVjaG8gIiRhY190IiIkaWN1X2N2X2hvc3RfZnJhZyIgMT4mNgorLS0tCis+IAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaWN1X2N2X2hvc3RfZnJhZyIgPiY1Cis+ICRhc19lY2hvICIkaWN1X2N2X2hvc3RfZnJhZyIgPiY2OyB9CisxNTk1LDE1OTljMzk5MCwzOTkzCis8IAkqLSotaHB1eCopIAllY2hvICRhY19uICJjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE1OTc6IGNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iID4mNQorPCBhY19saWJfdmFyPWBlY2hvIG0nXydmbG9vciB8IHNlZCAneSUuLystJV9fcF8lJ2AKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAJKi0qLWhwdXgqKSAJeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxvb3IgaW4gLWxtLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfbGliX21fZmxvb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMTYwMWMzOTk1Cis8ICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKy0tLQorPiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKzE2MDMsMTYyOWMzOTk3LDQwNTUKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAxNjA1ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIGZsb29yKCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgZmxvb3IoKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2MTY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgTElCUz0iJGFjX3NhdmVfTElCUyIKKzwgCis8IGZpCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nJGFjX2xpYl92YXJgXCIgPSB5ZXMiOyB0aGVuCis8ICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorLS0tCis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gCis+IC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorPiAgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKz4gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKz4gI2lmZGVmIF9fY3BsdXNwbHVzCis+IGV4dGVybiAiQyIKKz4gI2VuZGlmCis+IGNoYXIgZmxvb3IgKCk7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIGZsb29yICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9saWJfbV9mbG9vcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfbGliX21fZmxvb3I9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9saWJfbV9mbG9vciIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfbGliX21fZmxvb3IiID0geCIieWVzOyB0aGVuCisxNjMxLDE2MzJkNDA1NgorPCBlbHNlCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisxNjM1LDE2NjZkNDA1OAorPCAJCis8IAkqKSAJCWVjaG8gJGFjX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0iIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTYzODogY2hlY2tpbmcgZm9yIGZsb29yIGluIC1sbSIgPiY1Cis8IGFjX2xpYl92YXI9YGVjaG8gbSdfJ2Zsb29yIHwgc2VkICd5JS4vKy0lX19wXyUnYAorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKzwgTElCUz0iLWxtICAkTElCUyIKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAxNjQ2ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIGZsb29yKCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgZmxvb3IoKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjE2NTc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9saWJfJGFjX2xpYl92YXI9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgTElCUz0iJGFjX3NhdmVfTElCUyIKKzE2NjgsMTY3NWM0MDYwLDQxMjkKKzwgZmkKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXyckYWNfbGliX3ZhcmBcIiA9IHllcyI7IHRoZW4KKzwgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Cis8ICAgICBhY190cl9saWI9SEFWRV9MSUJgZWNobyBtIHwgc2VkIC1lICdzL1teYS16QS1aMC05X10vXy9nJyBcCis8ICAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCis8ICNkZWZpbmUgJGFjX3RyX2xpYiAxCis8IEVPRgorLS0tCis+IAkqKQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZsb29yIGluIC1sbSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBmbG9vciBpbiAtbG0uLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9saWJfbV9mbG9vcitzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCis+IExJQlM9Ii1sbSAgJExJQlMiCis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gCis+IC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorPiAgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKz4gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKz4gI2lmZGVmIF9fY3BsdXNwbHVzCis+IGV4dGVybiAiQyIKKz4gI2VuZGlmCis+IGNoYXIgZmxvb3IgKCk7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIGZsb29yICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9saWJfbV9mbG9vcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfbGliX21fZmxvb3I9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX2Zsb29yIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9saWJfbV9mbG9vciIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfbGliX21fZmxvb3IiID0geCIieWVzOyB0aGVuCis+ICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorPiAjZGVmaW5lIEhBVkVfTElCTSAxCis+IF9BQ0VPRgorMTY3OSwxNjgwZDQxMzIKKzwgZWxzZQorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorMTY4MmM0MTM0Cis8ICAKKy0tLQorPiAKKzE2ODcsMTY4OGM0MTM5LDQxNDAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE2ODk6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorMTY5MGM0MTQyCis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgb3IgLS1kaXNhYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCisxNjkyLDE2OTNjNDE0NAorPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV9zaGFyZWQiCis8ICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3MDNjNDE1NCw0MTU1Cis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3MDYsMTcwN2M0MTU4LDQxNTkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE3MDg6IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorMTcwOWM0MTYxCis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgb3IgLS1kaXNhYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCisxNzExLDE3MTJjNDE2MworPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV9zdGF0aWMiCis8ICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3MTljNDE3MCw0MTcxCis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3MjIsMTcyM2M0MTc0LDQxNzUKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTcyNDogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBkZWJ1ZyBsaWJyYXJpZXMiID4mNQorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGRlYnVnIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgZGVidWcgbGlicmFyaWVzLi4uICIgPiY2OyB9CisxNzI2YzQxNzgKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIG9yIC0tZGlzYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KKzE3MjgsMTcyOWM0MTgwCis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX2RlYnVnIgorPCAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1ZzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3MzVjNDE4Niw0MTg3Cis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3MzgsMTczOWM0MTkwLDQxOTEKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCByZWxlYXNlIGxpYnJhcmllcyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxNzQwOiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHJlbGVhc2UgbGlicmFyaWVzIiA+JjUKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCByZWxlYXNlIGxpYnJhcmllcyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgcmVsZWFzZSBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKzE3NDJjNDE5NAorPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVsZWFzZSBvciAtLWRpc2FibGUtcmVsZWFzZSB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbGVhc2Ugd2FzIGdpdmVuLgorMTc0NCwxNzQ1YzQxOTYKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfcmVsZWFzZSIKKzwgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfcmVsZWFzZTsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE3NTFjNDIwMiw0MjAzCis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE3NTQsMTc1OWM0MjA2LDQyMTIKKzwgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPCBzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAkYWNfd29yZCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxNzU4OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfcHJvZ19SQU5MSUInK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorPiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorPiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE3NjQsMTc3NGM0MjE3LDQyMzEKKzwgICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSI6IgorPCAgIGFjX2R1bW15PSIkUEFUSCIKKzwgICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9InJhbmxpYiIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorPCAgIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19SQU5MSUI9IjoiCistLS0KKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorPiAgICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKz4gICAgIGJyZWFrIDIKKz4gICBmaQorPiBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAKKzE3NzdjNDIzNAorPCBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKKy0tLQorPiBSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCisxNzc5YzQyMzYsNDI5MworPCAgIGVjaG8gIiRhY190IiIkUkFOTElCIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKKz4gJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorPiAKKz4gCis+IGZpCis+IGlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKz4gICBhY19jdF9SQU5MSUI9JFJBTkxJQgorPiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKz4gc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKz4gICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCis+IGVsc2UKKz4gYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBmb3IgYXNfZGlyIGluICRQQVRICis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCis+IGZpCis+IGZpCis+IGFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKKz4gaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorPiBlbHNlCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorPiAkYXNfZWNobyAibm8iID4mNjsgfQorPiBmaQorPiAKKz4gICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCis+ICAgICBSQU5MSUI9IjoiCis+ICAgZWxzZQorPiAgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorPiB5ZXM6KQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorPiBhY190b29sX3dhcm5lZD15ZXMgOzsKKz4gZXNhYworPiAgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKz4gICBmaQorMTc4MWM0Mjk1Cis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKKzE3ODYsMTc4OWM0MzAwLDQzMDMKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE3ODg6IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wYXRoX0FSJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wYXRoX0FSK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE3OTEsMTc5MmM0MzA1LDQzMDYKKzwgICBjYXNlICIkQVIiIGluCis8ICAgLyopCistLS0KKz4gICBjYXNlICRBUiBpbgorPiAgIFtcXC9dKiB8ID86W1xcL10qKQorMTc5NSwxNzk3ZDQzMDgKKzwgICA/Oi8qKQkJCSAKKzwgICBhY19jdl9wYXRoX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBkb3MgcGF0aC4KKzwgICA7OworMTc5OSwxODA4YzQzMTAsNDMyNQorPCAgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IjoiCis8ICAgYWNfZHVtbXk9IiRQQVRIOi9iaW46L3Vzci9iaW46L3Vzci9jY3MvYmluIgorPCAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbyAKKzwgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCis8ICAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKzwgICAgICAgYWNfY3ZfcGF0aF9BUj0iJGFjX2Rpci8kYWNfd29yZCIKKzwgICAgICAgYnJlYWsKKzwgICAgIGZpCis8ICAgZG9uZQorPCAgIElGUz0iJGFjX3NhdmVfaWZzIgorLS0tCis+ICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorPiBhc19kdW1teT0iJFBBVEg6L2JpbjovdXNyL2JpbjovdXNyL2Njcy9iaW4iCis+IGZvciBhc19kaXIgaW4gJGFzX2R1bW15Cis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCis+ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorPiAgICAgYWNfY3ZfcGF0aF9BUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKz4gICAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cis+ICAgICBicmVhayAyCis+ICAgZmkKKz4gZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gCisxODEzYzQzMzAKKzwgQVI9IiRhY19jdl9wYXRoX0FSIgorLS0tCis+IEFSPSRhY19jdl9wYXRoX0FSCisxODE1YzQzMzIsNDMzMworPCAgIGVjaG8gIiRhY190IiIkQVIiIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1Cis+ICRhc19lY2hvICIkQVIiID4mNjsgfQorMTgxN2M0MzM1LDQzMzYKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKKz4gJGFzX2VjaG8gIm5vIiA+JjY7IH0KKzE4MjEsMTgyMmM0MzQwLDQzNDIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgcmVuYW1pbmcgb2Ygc3ltYm9scyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxODIzOiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSByZW5hbWluZyBvZiBzeW1ib2xzIiA+JjUKKy0tLQorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIHJlbmFtaW5nIG9mIHN5bWJvbHMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSByZW5hbWluZyBvZiBzeW1ib2xzLi4uICIgPiY2OyB9CisxODI1YzQzNDUKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbmFtaW5nIG9yIC0tZGlzYWJsZS1yZW5hbWluZyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlbmFtaW5nIHdhcyBnaXZlbi4KKzE4MjcsMTgyOGM0MzQ3Cis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX3JlbmFtaW5nIgorPCAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV9yZW5hbWluZzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE4MzVjNDM1NCw0MzU1Cis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE4MzgsMTgzOWM0MzU4LDQzNTkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxODQwOiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBmdW5jdGlvbiBhbmQgZGF0YSB0cmFjaW5nIiA+JjUKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgZnVuY3Rpb24gYW5kIGRhdGEgdHJhY2luZyIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGZ1bmN0aW9uIGFuZCBkYXRhIHRyYWNpbmcuLi4gIiA+JjY7IH0KKzE4NDJjNDM2MgorPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdHJhY2luZyBvciAtLWRpc2FibGUtdHJhY2luZyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRyYWNpbmcgd2FzIGdpdmVuLgorMTg0NCwxODQ1YzQzNjQKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfdHJhY2luZyIKKzwgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfdHJhY2luZzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzE4NTJjNDM3MSw0MzcyCis8IGVjaG8gIiRhY190IiIkZW5hYmxlZCIgMT4mNgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRlbmFibGVkIiA+JjY7IH0KKzE4NTVjNDM3NQorPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggb3IgLS1kaXNhYmxlLXJwYXRoIHdhcyBnaXZlbi4KKy0tLQorPiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggd2FzIGdpdmVuLgorMTg1NywxODU4YzQzNzcKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfcnBhdGgiCis8ICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMTg3MSwxODc0YzQzOTAsNDM5MworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToxODczOiBjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQyIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2lubGluZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRlZmluaXRpb24gb2YgVV9JTkxJTkUgZm9yIEMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZGVmaW5pdGlvbiBvZiBVX0lOTElORSBmb3IgQy4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE4NzgsMTg4MGM0Mzk3LDQ0MDIKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDE4ODAgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisxODgyYzQ0MDQsNDQwNgorPCBpbnQgbWFpbigpIHsKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7CisxODg0LDE4ODdjNDQwOCw0NDI5Cis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MTg4NzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKzE4OTAsMTg5MWM0NDMyLDQ0MzUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMTg5M2M0NDM3LDQ0MzgKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMTg5NSwxODk2ZDQ0MzkKKzwgICAKKzwgZmkKKzE4OThjNDQ0MSw0NDQzCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfY19pbmxpbmUiIDE+JjYKKy0tLQorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2NfaW5saW5lIiA+JjY7IH0KKzE5MDhjNDQ1MworPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGhyZWFkcyBvciAtLWRpc2FibGUtdGhyZWFkcyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRocmVhZHMgd2FzIGdpdmVuLgorMTkxMCwxOTExYzQ0NTUKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfdGhyZWFkcyIKKzwgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV90aHJlYWRzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisxOTE0YzQ0NTgsNDQ2MAorPCAJCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGhyZWFkcyIgMT4mMjsgZXhpdCAxOyB9IDs7CistLS0KKz4gCQkqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdGhyZWFkcyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10aHJlYWRzIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzE5MzAsMTkzNWM0NDc2LDQ0ODEKKzwgICAgICAgICAgICAKKzwgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcHRocmVhZF9hdHRyX2luaXQgaW4gLWxwdGhyZWFkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjE5MzM6IGNoZWNraW5nIGZvciBwdGhyZWFkX2F0dHJfaW5pdCBpbiAtbHB0aHJlYWQiID4mNQorPCBhY19saWJfdmFyPWBlY2hvIHB0aHJlYWQnXydwdGhyZWFkX2F0dHJfaW5pdCB8IHNlZCAneSUuLystJV9fcF8lJ2AKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl8kYWNfbGliX3Zhcicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHRocmVhZF9hdHRyX2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfYXR0cl9pbml0IGluIC1scHRocmVhZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzE5MzdjNDQ4MworPCAgIGFjX3NhdmVfTElCUz0iJExJQlMiCistLS0KKz4gICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCisxOTM5LDE5NzBjNDQ4NSw0NTQ2Cis8IGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTk0MSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKzwgLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorPCAgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKzwgY2hhciBwdGhyZWFkX2F0dHJfaW5pdCgpOworPCAKKzwgaW50IG1haW4oKSB7Cis8IHB0aHJlYWRfYXR0cl9pbml0KCkKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToxOTUyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCis8IExJQlM9IiRhY19zYXZlX0xJQlMiCis8IAorPCBmaQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKzwgICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKzwgI2RlZmluZSAkYWNfdHJfbGliIDEKKzwgRU9GCistLS0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBwdGhyZWFkX2F0dHJfaW5pdCAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9hdHRyX2luaXQgKCk7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorPiAgIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdD1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9hdHRyX2luaXQiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfYXR0cl9pbml0IiA+JjY7IH0KKz4gaWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2F0dHJfaW5pdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgSEFWRV9MSUJQVEhSRUFEIDEKKz4gX0FDRU9GCisxOTc0LDE5NzVkNDU0OQorPCBlbHNlCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisxOTgxLDE5ODZjNDU1NSw0NTYwCis8ICAgICAgICAgICAgICAgIAorPCAgICAKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MTk4NTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX211dGV4X2Rlc3Ryb3kiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcHRocmVhZF9tdXRleF9kZXN0cm95Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveStzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisxOTkyLDIwMDVjNDU2Niw0NjA4Cis8IGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMTk5NCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKzwgLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorPCAgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKzwgY2hhciBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKTsKKzwgCis8IGludCBtYWluKCkgeworPCBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIwMDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9tdXRleF9kZXN0cm95ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzIwMDksMjAxMGM0NjEyLDQ2MTUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjAxMmM0NjE3LDQ2MjAKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyMDE1LDIwMjhjNDYyMyw0NjY1Cis8IGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjAxNyAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKzwgLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorPCAgICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKzwgY2hhciBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKTsKKzwgCis8IGludCBtYWluKCkgeworPCBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjIwMjg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9tdXRleF9kZXN0cm95ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzIwMzEsMjAzMmM0NjY4LDQ2NzEKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjAzNGM0NjczLDQ2NzYKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyMDM4LDIwMzljNDY4MCw0NjgxCis8IAorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3NlYXJjaF9wdGhyZWFkX211dGV4X2Rlc3Ryb3kiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIgPiY2OyB9CisyMDQyYzQ2ODQKKzwgICAKKy0tLQorPiAKKzIwNDRjNDY4NgorPCAgIAorLS0tCis+IAorMjA1MCwyMDU0YzQ2OTIsNDY5NgorPCAgICAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2luaXQgaW4gLWxwdGhyZWFkIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjIwNTI6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2luaXQgaW4gLWxwdGhyZWFkIiA+JjUKKzwgYWNfbGliX3Zhcj1gZWNobyBwdGhyZWFkJ18ncHRocmVhZF9tdXRleF9pbml0IHwgc2VkICd5JS4vKy0lX19wXyUnYAorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliXyRhY19saWJfdmFyJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+IAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHB0aHJlYWRfbXV0ZXhfaW5pdCBpbiAtbHB0aHJlYWQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9pbml0IGluIC1scHRocmVhZC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisyMDU2YzQ2OTgKKzwgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorLS0tCis+ICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworMjA1OCwyMDg5YzQ3MDAsNDc2MQorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIwNjAgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgcHRocmVhZF9tdXRleF9pbml0KCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgcHRocmVhZF9tdXRleF9pbml0KCkKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMDcxOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfbGliXyRhY19saWJfdmFyPXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2xpYl8kYWNfbGliX3Zhcj1ubyIKKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCis8IExJQlM9IiRhY19zYXZlX0xJQlMiCis8IAorPCBmaQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJyRhY19saWJfdmFyYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICAgIGFjX3RyX2xpYj1IQVZFX0xJQmBlY2hvIHB0aHJlYWQgfCBzZWQgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnIFwKKzwgICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKzwgI2RlZmluZSAkYWNfdHJfbGliIDEKKzwgRU9GCistLS0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBwdGhyZWFkX211dGV4X2luaXQgKCk7Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIHB0aHJlYWRfbXV0ZXhfaW5pdCAoKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQ9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfbXV0ZXhfaW5pdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9tdXRleF9pbml0IiA+JjY7IH0KKz4gaWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX211dGV4X2luaXQiID0geCIieWVzOyB0aGVuCis+ICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorPiAjZGVmaW5lIEhBVkVfTElCUFRIUkVBRCAxCis+IF9BQ0VPRgorMjA5MywyMDk0ZDQ3NjQKKzwgZWxzZQorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorMjEwMiwyMTA5YzQ3NzIsNDc4NgorPCAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9sb2NrIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjIxMDQ6IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2snK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIxMDkgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwdGhyZWFkX211dGV4X2xvY2siID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9tdXRleF9sb2NrLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAvKiBEZWZpbmUgcHRocmVhZF9tdXRleF9sb2NrIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgcHRocmVhZF9tdXRleF9sb2NrLgorPiAgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKz4gI2RlZmluZSBwdGhyZWFkX211dGV4X2xvY2sgaW5ub2N1b3VzX3B0aHJlYWRfbXV0ZXhfbG9jaworPiAKKzIxMTEsMjExNmM0Nzg4LDQ3OTYKKzwgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcHRocmVhZF9tdXRleF9sb2NrKCk7IGJlbG93LiAgKi8KKzwgI2luY2x1ZGUgPGFzc2VydC5oPgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jaygpOworLS0tCis+ICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHB0aHJlYWRfbXV0ZXhfbG9jayAoKTsgYmVsb3cuCis+ICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworPiAKKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorMjExOGM0Nzk4Cis8IGludCBtYWluKCkgeworLS0tCis+ICN1bmRlZiBwdGhyZWFkX211dGV4X2xvY2sKKzIxMTlhNDgwMCw0ODA2Cis+IC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorPiAgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKz4gICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKz4gI2lmZGVmIF9fY3BsdXNwbHVzCis+IGV4dGVybiAiQyIKKz4gI2VuZGlmCis+IGNoYXIgcHRocmVhZF9tdXRleF9sb2NrICgpOworMjEyM2M0ODEwCis8ICNpZiBkZWZpbmVkIChfX3N0dWJfcHRocmVhZF9tdXRleF9sb2NrKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wdGhyZWFkX211dGV4X2xvY2spCistLS0KKz4gI2lmIGRlZmluZWQgX19zdHViX3B0aHJlYWRfbXV0ZXhfbG9jayB8fCBkZWZpbmVkIF9fc3R1Yl9fX3B0aHJlYWRfbXV0ZXhfbG9jaworMjEyNSwyMTI2ZDQ4MTEKKzwgI2Vsc2UKKzwgcHRocmVhZF9tdXRleF9sb2NrKCk7CisyMTI5LDIxNDdjNDgxNCw0ODUzCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjEzMjogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3B0aHJlYWRfbXV0ZXhfbG9ja2BcIiA9IHllcyI7IHRoZW4KKzwgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Cis8ICAgOgorPCBlbHNlCis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9mdW5jX3B0aHJlYWRfbXV0ZXhfbG9jaz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2s9bm8KKz4gZmkKKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyMTQ4YTQ4NTUsNDg1NgorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19wdGhyZWFkX211dGV4X2xvY2siID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2Z1bmNfcHRocmVhZF9tdXRleF9sb2NrIiA+JjY7IH0KKzIxNTZjNDg2NAorPCAgICAgIGlmIHRlc3QgIiRhY19jdl9wcm9nX2djYyIgPSBubzsgdGhlbgorLS0tCis+ICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA9IG5vOyB0aGVuCisyMTgwLDIxODhjNDg4OCw0ODk5Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBtbWFwIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjIxODI6IGNoZWNraW5nIGZvciBtbWFwIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfbW1hcF9vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjE4NyAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgICAgIAorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbW1hcCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBtbWFwLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX29rK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gCisyMTkzLDIxOTRjNDkwNCw0OTA3Cis8ICAgICAKKzwgaW50IG1haW4oKSB7CistLS0KKz4gCis+IGludAorPiBtYWluICgpCis+IHsKKzIxOTYsMjE5OWM0OTA5LDQ5MzMKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMTk5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyMjAyLDIyMDVjNDkzNiw0OTM5Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfZnVuY19tbWFwX29rPW5vCistLS0KKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2N2X2Z1bmNfbW1hcF9vaz1ubworMjIwN2M0OTQxLDQ5NDQKKzwgcm0gLWYgY29uZnRlc3QqIAorLS0tCis+IAorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorMjIxMGM0OTQ3LDQ5NDgKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9mdW5jX21tYXBfb2siIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX29rIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfb2siID4mNjsgfQorMjIyNywyMjI4YzQ5NjUsNDk3MQorPCBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyMjI5OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CistLS0KKz4gYWNfZXh0PWMKKz4gYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKz4gYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworPiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworPiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisyMjM0LDIyMzVjNDk3Nyw1MDg0Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX0NQUCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorPiAgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKz4gICAgIGRvCis+ICAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKKz4gZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCis+IGRvCis+ICAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworPiAgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorPiAgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorPiAgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorPiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCis+ICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaWZkZWYgX19TVERDX18KKz4gIyBpbmNsdWRlIDxsaW1pdHMuaD4KKz4gI2Vsc2UKKz4gIyBpbmNsdWRlIDxhc3NlcnQuaD4KKz4gI2VuZGlmCis+IAkJICAgICBTeW50YXggZXJyb3IKKz4gX0FDRU9GCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorPiBjb250aW51ZQorPiBmaQorPiAKKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gCis+ICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKz4gICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Cis+IF9BQ0VPRgorPiBpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfTsgdGhlbgorPiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCis+IGNvbnRpbnVlCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gICAjIFBhc3NlcyBib3RoIHRlc3RzLgorPiBhY19wcmVwcm9jX29rPToKKz4gYnJlYWsKKz4gZmkKKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiBkb25lCis+ICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiBpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorPiAgIGJyZWFrCis+IGZpCis+IAorPiAgICAgZG9uZQorPiAgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorPiAKKz4gZmkKKz4gICBDUFA9JGFjX2N2X3Byb2dfQ1BQCisyMjM3LDIyMzljNTA4Niw1MDk2Cis8ICAgICAjIFRoaXMgbXVzdCBiZSBpbiBkb3VibGUgcXVvdGVzLCBub3Qgc2luZ2xlIHF1b3RlcywgYmVjYXVzZSBDUFAgbWF5IGdldAorPCAgICMgc3Vic3RpdHV0ZWQgaW50byB0aGUgTWFrZWZpbGUgYW5kICIke0NDLWNjfSIgd2lsbCBjb25mdXNlIG1ha2UuCis8ICAgQ1BQPSIke0NDLWNjfSAtRSIKKy0tLQorPiAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1Cis+ICRhc19lY2hvICIkQ1BQIiA+JjY7IH0KKz4gYWNfcHJlcHJvY19vaz1mYWxzZQorPiBmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKz4gZG8KKz4gICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCis+ICAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCis+ICAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisyMjQxLDIyNTFjNTA5OCw1MTI4Cis8ICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4KKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIyNDQgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxhc3NlcnQuaD4KKzwgU3ludGF4IEVycm9yCis8IEVPRgorPCBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorPCB7IChldmFsIGVjaG8gY29uZmlndXJlOjIyNTA6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cis8IGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKzwgaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0tLQorPiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorPiAJCSAgICAgU3ludGF4IGVycm9yCis+IF9BQ0VPRgorPiBpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfTsgdGhlbgorMjI1NCwyMjY4YzUxMzEsNTE4MworPCAgIGVjaG8gIiRhY19lcnIiID4mNQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIENQUD0iJHtDQy1jY30gLUUgLXRyYWRpdGlvbmFsLWNwcCIKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDIyNjEgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxhc3NlcnQuaD4KKzwgU3ludGF4IEVycm9yCis8IEVPRgorPCBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorPCB7IChldmFsIGVjaG8gY29uZmlndXJlOjIyNjc6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cis8IGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKzwgaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KKz4gY29udGludWUKKz4gZmkKKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCis+ICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH07IHRoZW4KKz4gICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorPiBjb250aW51ZQorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKz4gYWNfcHJlcHJvY19vaz06Cis+IGJyZWFrCis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiAKKz4gZG9uZQorPiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKzIyNzEsMjI4NWM1MTg2LDU0MDAKKzwgICBlY2hvICIkYWNfZXJyIiA+JjUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBDUFA9IiR7Q0MtY2N9IC1ub2xvZ28gLUUiCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyMjc4ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IFN5bnRheCBFcnJvcgorPCBFT0YKKzwgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKzwgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyMjg0OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorPCBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCis8IGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCistLS0KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKKz4gU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCis+IFNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKz4gZmkKKz4gCis+IGFjX2V4dD1jCis+IGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorPiAKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCis+ICAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCis+ICAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKz4gICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworPiAgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCis+ICAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKKz4gIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorPiAgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCis+IGNhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKz4gKkdOVSopCis+ICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7Cis+ICopCis+ICAgYWNfY291bnQ9MAorPiAgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorPiAgIHdoaWxlIDoKKz4gICBkbworPiAgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKz4gICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKz4gICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorPiAgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKz4gICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCis+ICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCis+ICAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorPiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorPiAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKz4gICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorPiAgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorPiAgICAgZmkKKz4gICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKz4gICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworPiAgIGRvbmUKKz4gICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKKz4gZXNhYworPiAKKz4gICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCis+ICAgICBkb25lCis+ICAgZG9uZQorPiBkb25lCis+IElGUz0kYXNfc2F2ZV9JRlMKKz4gICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorPiAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+ICAgZmkKKz4gZWxzZQorPiAgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorPiBmaQorPiAKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKz4gIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCis+IAorPiAKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKz4gICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKKz4gICAgZWxzZQorPiAgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKz4gICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCis+ICAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKz4gICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCis+IGRvCis+ICAgSUZTPSRhc19zYXZlX0lGUworPiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCis+ICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCis+ICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKz4gICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKz4gICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCis+ICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCis+ICAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCis+IGNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCis+ICpHTlUqKQorPiAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworPiAqKQorPiAgIGFjX2NvdW50PTAKKz4gICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKz4gICB3aGlsZSA6Cis+ICAgZG8KKz4gICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCis+ICAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCis+ICAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKz4gICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorPiAgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCis+ICAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCis+ICAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorPiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKz4gICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCis+ICAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorPiAgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKz4gICAgIGZpCis+ICAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCis+ICAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKz4gICBkb25lCis+ICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Cis+IGVzYWMKKz4gCis+ICAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKz4gICAgIGRvbmUKKz4gICBkb25lCis+IGRvbmUKKz4gSUZTPSRhc19zYXZlX0lGUworPiAgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorPiAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gICBmaQorPiBlbHNlCis+ICAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKKz4gZmkKKz4gCis+ICAgIGZpCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKz4gIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKz4gCis+IAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPHN0ZGxpYi5oPgorPiAjaW5jbHVkZSA8c3RkYXJnLmg+Cis+ICNpbmNsdWRlIDxzdHJpbmcuaD4KKz4gI2luY2x1ZGUgPGZsb2F0Lmg+Cis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IAorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiAKKz4gaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKz4gICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8c3RyaW5nLmg+Cis+IAorPiBfQUNFT0YKKz4gaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPiAgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzIyODgsMjI5MmM1NDAzCis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgQ1BQPS9saWIvY3BwCistLS0KKz4gICBhY19jdl9oZWFkZXJfc3RkYz1ubworMjI5NGE1NDA2LDU0MjQKKz4gCis+IGZpCis+IAorPiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPiAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDxzdGRsaWIuaD4KKz4gCis+IF9BQ0VPRgorPiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis+ICAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICBhY19jdl9oZWFkZXJfc3RkYz1ubworMjI5NmE1NDI3LDU1MDEKKz4gCis+IGZpCis+IAorPiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPiAgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKz4gICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGN0eXBlLmg+Cis+ICNpbmNsdWRlIDxzdGRsaWIuaD4KKz4gI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorPiAjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCis+ICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKz4gI2Vsc2UKKz4gIyBkZWZpbmUgSVNMT1dFUihjKSBcCis+IAkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKz4gCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKz4gCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorPiAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorPiAjZW5kaWYKKz4gCis+ICNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCis+IGludAorPiBtYWluICgpCis+IHsKKz4gICBpbnQgaTsKKz4gICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCis+ICAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCis+IAl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKz4gICAgICAgcmV0dXJuIDI7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAoIGV4aXQgJGFjX3N0YXR1cyApCis+IGFjX2N2X2hlYWRlcl9zdGRjPW5vCis+IGZpCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiAKKz4gCisyMjk4LDIyOTlkNTUwMgorPCBybSAtZiBjb25mdGVzdCoKKzwgICBhY19jdl9wcm9nX0NQUD0iJENQUCIKKzIzMDEsMjMwM2M1NTA0LDU1MTEKKzwgICBDUFA9IiRhY19jdl9wcm9nX0NQUCIKKzwgZWxzZQorPCAgIGFjX2N2X3Byb2dfQ1BQPSIkQ1BQIgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQorPiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPiAKKz4gY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKz4gI2RlZmluZSBTVERDX0hFQURFUlMgMQorPiBfQUNFT0YKKz4gCisyMzA1ZDU1MTIKKzwgZWNobyAiJGFjX3QiIiRDUFAiIDE+JjYKKzIzMDdjNTUxNCw1NTI1Cis8IGZvciBhY19oZHIgaW4gaW50dHlwZXMuaAorLS0tCis+ICMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IAorPiAKKz4gCis+IGZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorPiAJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorMjMwOSwyMzMzYzU1MjcsNTU4MQorPCBhY19zYWZlPWBlY2hvICIkYWNfaGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjMxMjogY2hlY2tpbmcgZm9yICRhY19oZHIiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyMzE3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8JGFjX2hkcj4KKzwgRU9GCis8IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCis8IHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjMyMjogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKzwgYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorPCBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICIgPiY2OyB9Cis+IGlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiAKKz4gI2luY2x1ZGUgPCRhY19oZWFkZXI+Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorPiBmaQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IGFjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorPiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Cis+IGFzX3ZhbD1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorPiBfQUNFT0YKKz4gCisyMzM1LDIzNDNjNTU4Myw1NzI4Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2hlYWRlcl8nJGFjX3NhZmVgXCIgPSB5ZXMiOyB0aGVuCis8ICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorPCAgICAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJGFjX2hkciB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8RU9GCis8ICNkZWZpbmUgJGFjX3RyX2hkciAxCis8IEVPRgorPCAgCis8IGVsc2UKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiAKKz4gZG9uZQorPiAKKz4gCis+IAorPiBmb3IgYWNfaGVhZGVyIGluIGludHR5cGVzLmgKKz4gZG8KKz4gYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorPiBpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gIiA+JjY7IH0KKz4gaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGZpCis+IGFjX3Jlcz1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorPiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Cis+IGVsc2UKKz4gICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiAjaW5jbHVkZSA8JGFjX2hlYWRlcj4KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19oZWFkZXJfY29tcGlsZXI9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorPiAKKz4gIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAiID4mNjsgfQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDwkYWNfaGVhZGVyPgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorPiAkYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKz4gCis+ICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworPiBjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCis+ICAgeWVzOm5vOiApCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Cis+ICAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKz4gICAgIDs7Cis+ICAgbm86eWVzOiogKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Cis+IAorPiAgICAgOzsKKz4gZXNhYworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAiID4mNjsgfQorPiBpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKz4gZmkKKz4gYWNfcmVzPWBldmFsICdhc192YWw9JHsnJGFzX2FjX0hlYWRlcid9Cis+IAkJICRhc19lY2hvICIkYXNfdmFsIidgCis+IAkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Cis+ICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKz4gCis+IGZpCis+IGFzX3ZhbD1gZXZhbCAnYXNfdmFsPSR7JyRhc19hY19IZWFkZXInfQorPiAJCSAkYXNfZWNobyAiJGFzX3ZhbCInYAorPiAgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCis+ICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorPiBfQUNFT0YKKz4gCisyMzQ0YTU3MzAKKz4gCisyMzUzYzU3MzksNTc0MAorPCAgZWNobyAiJGFjX3QiIiJDIGNvbXBpbGVyIHNldCB0byBDQ0MgJHtDQ30iICIgMT4mNgorLS0tCis+ICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIkMgY29tcGlsZXIgc2V0IHRvIENDQyAke0NDfVwiICIgPiY1Cis+ICRhc19lY2hvICJcIkMgY29tcGlsZXIgc2V0IHRvIENDQyAke0NDfVwiICIgPiY2OyB9CisyMzYxYzU3NDgsNTc0OQorPCAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWlvc3RyZWFtIG9yIC0td2l0aG91dC1pb3N0cmVhbSB3YXMgZ2l2ZW4uCistLS0KKz4gCis+ICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW9zdHJlYW0gd2FzIGdpdmVuLgorMjM2MywyMzY0YzU3NTEKKzwgICB3aXRodmFsPSIkd2l0aF9pb3N0cmVhbSIKKzwgICBjYXNlICIke3dpdGh2YWx9IiBpbgorLS0tCis+ICAgd2l0aHZhbD0kd2l0aF9pb3N0cmVhbTsgY2FzZSAiJHt3aXRodmFsfSIgaW4KKzIzNjljNTc1Niw1NzU4Cis8IAkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWlvc3RyZWFtIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWlvc3RyZWFtIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtaW9zdHJlYW0iID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworMjM3OSwyMzgxYzU3NjgsNTc2OQorPCAgICAgCis8ICAgICBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKy0tLQorPiAKKz4gICAgIGFjX2V4dD1jcHAKKzIzODMsMjM4NWM1NzcxLDU3NzMKKzwgYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworLS0tCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisyMzkzLDIzOTdjNTc4MSw1Nzg5Cis8ICAgICBlY2hvICRhY19uICJjaGVja2luZyBpb3N0cmVhbSB1c2FiaWxpdHkiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjM5NTogY2hlY2tpbmcgaW9zdHJlYW0gdXNhYmlsaXR5IiA+JjUKKzwgICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjM5NyAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlvc3RyZWFtIHVzYWJpbGl0eSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGlvc3RyZWFtIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorPiAKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjM5OWM1NzkxLDU3OTMKKzwgaW50IG1haW4oKSB7CistLS0KKz4gaW50Cis+IG1haW4gKCkKKz4geworMjQwMSwyNDA0YzU3OTUsNTgxNgorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI0MDQ6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKzI0MDcsMjQxMGM1ODE5LDU4MjIKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl9oZWFkZXJfaW9zdHJlYW09bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfaGVhZGVyX2lvc3RyZWFtPW5vCisyNDEyYzU4MjQsNTgyNQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisyNDE3YzU4MzAsNTgzMQorPCAgICAgZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfaW9zdHJlYW0iIDE+JjYKKy0tLQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX2lvc3RyZWFtIiA+JjY7IH0KKzI0MjMsMjQyNGM1ODM3LDU4NDMKKzwgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjI0MjU6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IiID4mNQorLS0tCis+ICAgICAgICAgYWNfZXh0PWNwcAorPiBhY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworPiBhY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKzI0MjYsMjQyN2M1ODQ1LDU4NDYKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Byb2dfQ1hYQ1BQJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorLS0tCis+ICAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWENQUCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisyNDI5LDI0NDRjNTg0OCw1ODg5Cis8ICAgYWNfZXh0PUMKKzwgIyBDWFhGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCis8IGFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCis8IGFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCis8IGFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKzwgICBDWFhDUFA9IiR7Q1hYLWcrK30gLUUiCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNDM4ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8IEVPRgorPCBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0IgorPCB7IChldmFsIGVjaG8gY29uZmlndXJlOjI0NDM6IFwiJGFjX3RyeVwiKSAxPiY1OyAoZXZhbCAkYWNfdHJ5KSAyPiY1OyB9Cis8IGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAiXmNvbmZ0ZXN0LiR7YWNfZXh0fVwkImAKKzwgaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KKy0tLQorPiAgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKz4gICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKz4gICAgIGRvCis+ICAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKKz4gZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKz4gZG8KKz4gICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCis+ICAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCis+ICAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCis+ICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKz4gICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpZmRlZiBfX1NURENfXworPiAjIGluY2x1ZGUgPGxpbWl0cy5oPgorPiAjZWxzZQorPiAjIGluY2x1ZGUgPGFzc2VydC5oPgorPiAjZW5kaWYKKz4gCQkgICAgIFN5bnRheCBlcnJvcgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCisyNDQ3LDI0NTFjNTg5Miw1ODk2Cis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgQ1hYQ1BQPS9saWIvY3BwCistLS0KKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCis+IGNvbnRpbnVlCisyNDUzLDI0ODhjNTg5OCw1OTM2Cis8IHJtIC1mIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSIkQ1hYQ1BQIgorPCBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKzwgYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKKzwgYWNfY29tcGlsZT0nJHtDWFgtZysrfSAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDWFgtZysrfSAtbyBjb25mdGVzdCR7YWNfZXhlZXh0fSAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgMT4mNScKKzwgY3Jvc3NfY29tcGlsaW5nPSRhY19jdl9wcm9nX2N4eF9jcm9zcworPCBmaQorPCBmaQorPCBDWFhDUFA9IiRhY19jdl9wcm9nX0NYWENQUCIKKzwgZWNobyAiJGFjX3QiIiRDWFhDUFAiIDE+JjYKKzwgCis8IGFjX3NhZmU9YGVjaG8gImlvc3RyZWFtLmgiIHwgc2VkICd5JS4vKy0lX19wXyUnYAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyNDY5OiBjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfJGFjX3NhZmUnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI0NzQgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxpb3N0cmVhbS5oPgorPCBFT0YKKzwgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKKzwgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNDc5OiBcIiRhY190cnlcIikgMT4mNTsgKGV2YWwgJGFjX3RyeSkgMj4mNTsgfQorPCBhY19lcnI9YGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgIl5jb25mdGVzdC4ke2FjX2V4dH1cJCJgCis8IGlmIHRlc3QgLXogIiRhY19lcnIiOyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2hlYWRlcl8kYWNfc2FmZT15ZXMiCis8IGVsc2UKKzwgICBlY2hvICIkYWNfZXJyIiA+JjUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9bm8iCistLS0KKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCis+ICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KKz4gY29udGludWUKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCis+IGFjX3ByZXByb2Nfb2s9OgorPiBicmVhaworMjQ5MGM1OTM4LDYwMDMKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IAorPiBkb25lCis+ICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiBpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorPiAgIGJyZWFrCis+IGZpCis+IAorPiAgICAgZG9uZQorPiAgICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorPiAKKz4gZmkKKz4gICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCis+IGVsc2UKKz4gICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQorPiAkYXNfZWNobyAiJENYWENQUCIgPiY2OyB9Cis+IGFjX3ByZXByb2Nfb2s9ZmFsc2UKKz4gZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKKz4gZG8KKz4gICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCis+ICAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCis+ICAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCis+ICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKz4gICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICNpZmRlZiBfX1NURENfXworPiAjIGluY2x1ZGUgPGxpbWl0cy5oPgorPiAjZWxzZQorPiAjIGluY2x1ZGUgPGFzc2VydC5oPgorPiAjZW5kaWYKKz4gCQkgICAgIFN5bnRheCBlcnJvcgorPiBfQUNFT0YKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorPiBjb250aW51ZQorMjQ5MiwyNDkzYzYwMDUsNjA1MQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9oZWFkZXJfJyRhY19zYWZlYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKy0tLQorPiAKKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gCis+ICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKz4gICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Cis+IF9BQ0VPRgorPiBpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH07IHRoZW4KKz4gICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorPiBjb250aW51ZQorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KKz4gYWNfcHJlcHJvY19vaz06Cis+IGJyZWFrCis+IGZpCis+IAorPiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorPiAKKz4gZG9uZQorPiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4gaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKzI0OTZjNjA1NCw2MTk1Cis8ICAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CistLS0KKz4gICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cis+IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworPiBTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9Cis+IGZpCis+IAorPiBhY19leHQ9Y3BwCis+IGFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cis+IAorPiAKKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfaW9zdHJlYW1faCtzZXR9IiA9IHNldDsgdGhlbgorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW9zdHJlYW0uaCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBpb3N0cmVhbS5oLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2lvc3RyZWFtX2grc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX2lvc3RyZWFtX2giID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjY7IH0KKz4gZWxzZQorPiAgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCB1c2FiaWxpdHkiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBpb3N0cmVhbS5oIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+ICNpbmNsdWRlIDxpb3N0cmVhbS5oPgorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Cis+ICRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKz4gCis+ICMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaW9zdHJlYW0uaCBwcmVzZW5jZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGlvc3RyZWFtLmggcHJlc2VuY2UuLi4gIiA+JjY7IH0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8aW9zdHJlYW0uaD4KKz4gX0FDRU9GCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfTsgdGhlbgorPiAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+ICAgYWNfaGVhZGVyX3ByZXByb2M9bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Cis+ICRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorPiAKKz4gIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Cis+IGNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbgorPiAgIHllczpubzogKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorPiAgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCis+ICAgICA7OworPiAgIG5vOnllczoqICkKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGlvc3RyZWFtLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpb3N0cmVhbS5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IGlvc3RyZWFtLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogaW9zdHJlYW0uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW9zdHJlYW0uaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorPiAKKz4gICAgIDs7Cis+IGVzYWMKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpb3N0cmVhbS5oIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlvc3RyZWFtLmguLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfaW9zdHJlYW1faCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBhY19jdl9oZWFkZXJfaW9zdHJlYW1faD0kYWNfaGVhZGVyX3ByZXByb2MKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9pb3N0cmVhbV9oIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfaW9zdHJlYW1faCIgPiY2OyB9Cis+IAorMjQ5OGE2MTk4Cis+IAorMjUwMCwyNTA3YzYyMDAsNjIxMAorPCAgICAgICAgICAgICBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjUwMjogY2hlY2tpbmcgd2hldGhlciBvc3RyZWFtIGlzIHJlYWxseSBkZWZpbmVkIiA+JjUKKzwgICAgICAgICAgICAgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2lvc3RyZWFtX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNTA3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG9zdHJlYW0gaXMgcmVhbGx5IGRlZmluZWQuLi4gIiA+JjY7IH0KKz4gICAgICAgICAgICAgaWYgdGVzdCAiJHthY19jdl9pb3N0cmVhbV9vaytzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisyNTA5YzYyMTIsNjIxNAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7CisyNTExLDI1MTRjNjIxNiw2MjQwCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjUxNDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorLS0tCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyNTE3LDI1MjBjNjI0Myw2MjQ2Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfaW9zdHJlYW1fb2s9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfaW9zdHJlYW1fb2s9bm8KKzI1MjJjNjI0OCw2MjUxCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorMjUyNWM2MjU0LDYyNTUKKzwgICAgICAgICAgICAgZWNobyAiJGFjX3QiIiRhY19jdl9pb3N0cmVhbV9vayIgMT4mNgorLS0tCis+ICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9pb3N0cmVhbV9vayIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaW9zdHJlYW1fb2siID4mNjsgfQorMjU0NWM2Mjc1LDYyNzcKKzwgICAgICAgICAgICAgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiAke3dpdGh2YWx9IGlvc3RyZWFtIGlzIG5vdCBhdmFpbGFibGUiIDE+JjI7IGV4aXQgMTsgfQorLS0tCis+ICAgICAgICAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAke3dpdGh2YWx9IGlvc3RyZWFtIGlzIG5vdCBhdmFpbGFibGUiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJHt3aXRodmFsfSBpb3N0cmVhbSBpcyBub3QgYXZhaWxhYmxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzI1NTFkNjI4MgorPCAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCisyNTUzLDI1NTVjNjI4NCw2Mjg3Cis8IGFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworPCBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKy0tLQorPiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKz4gCisyNTU4LDI1NjFjNjI5MCw2MjkzCis8IGVjaG8gJGFjX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjU2MDogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9jX2JpZ2VuZGlhbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMjU2NCwyNTY3YzYyOTYsNjM0OQorPCAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI1NjcgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KKz4gICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2lmbmRlZiBfX0FQUExFX0NDX18KKz4gCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorPiAJICAgICAjZW5kaWYKKz4gCSAgICAgdHlwZWRlZiBpbnQgZHVtbXk7Cis+IAorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gCis+IAkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcworPiAJIyB0aGVyZSBhcmUgc29tZSAtYXJjaCBmbGFncy4gIE5vdGUgdGhhdCAqcHBjKiBhbHNvIG1hdGNoZXMKKz4gCSMgcHBjNjQuICBUaGlzIGNoZWNrIGlzIGFsc28gcmF0aGVyIGxlc3MgdGhhbiBpZGVhbC4KKz4gCWNhc2UgIiR7Q0N9ICR7Q0ZMQUdTfSAke0NQUEZMQUdTfSAke0xERkxBR1N9IiBpbiAgIygKKz4gCSAgKi1hcmNoKnBwYyp8Ki1hcmNoKmkzODYqfCotYXJjaCp4ODZfNjQqKSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWw7OworPiAJZXNhYworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorPiBmaQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+ICAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKz4gICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KKz4gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjU2OSwyNTcwYzYzNTEKKzwgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisyNTcyLDI1NzhjNjM1Myw2MzgzCis8ICNpZiAhQllURV9PUkRFUiB8fCAhQklHX0VORElBTiB8fCAhTElUVExFX0VORElBTgorPCAgYm9ndXMgZW5kaWFuIG1hY3JvcworPCAjZW5kaWYKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNTc4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKz4gI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorPiAJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCis+IAkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQorPiAJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworPiAJICAgICAjZW5kaWYKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorMjU4MCwyNTgyYzYzODUsNjM5MAorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI1ODIgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisyNTg0LDI1ODVjNjM5MgorPCAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cis8IGludCBtYWluKCkgeworLS0tCis+IAkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorMjU4NmE2Mzk0LDYzOTYKKz4gaW50Cis+IG1haW4gKCkKKz4geworMjU4OCwyNTkzYzYzOTgsNjQyMgorPCAgbm90IGJpZyBlbmRpYW4KKzwgI2VuZGlmCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MjU5MzogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAJCSBub3QgYmlnIGVuZGlhbgorPiAJCSNlbmRpZgorPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisyNTk2LDI1OTljNjQyNSw2NDI4Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfY19iaWdlbmRpYW49bm8KKzI2MDFjNjQzMCw2NDMxCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI2MDMsMjYwNGM2NDMzLDY0MzYKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjYwNiwyNjIyYzY0MzgsNjQ1OQorPCBybSAtZiBjb25mdGVzdCoKKzwgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCis8IGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCis8ICAgICB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNhbiBub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmciIDE+JjI7IGV4aXQgMTsgfQorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNjEzICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCBtYWluICgpIHsKKzwgICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCis8ICAgdW5pb24KKzwgICB7Cis8ICAgICBsb25nIGw7Cis8ICAgICBjaGFyIGNbc2l6ZW9mIChsb25nKV07Cis8ICAgfSB1OworPCAgIHUubCA9IDE7Cis8ICAgZXhpdCAodS5jW3NpemVvZiAobG9uZykgLSAxXSA9PSAxKTsKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+ICAgICBmaQorPiAgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCis+ICAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCis+ICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gI2luY2x1ZGUgPGxpbWl0cy5oPgorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAjaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFOKQorPiAJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworPiAJICAgICAjZW5kaWYKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworMjYyNCwyNjMxYzY0NjEsNjUxNworPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjI2OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCis8IHRoZW4KKzwgICBhY19jdl9jX2JpZ2VuZGlhbj1ubworPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCistLS0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElBTiBvciBub3QuCis+IAkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8bGltaXRzLmg+Cis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+ICNpZm5kZWYgX0JJR19FTkRJQU4KKz4gCQkgbm90IGJpZyBlbmRpYW4KKz4gCQkjZW5kaWYKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorMjYzMmE2NTE5LDY1MzEKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfY19iaWdlbmRpYW49bm8KKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjYzNGM2NTMzLDY2MDMKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gICAgIGZpCis+ICAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKz4gICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLgorPiAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorPiAgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorPiAJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gc2hvcnQgaW50IGFzY2lpX21tW10gPQorPiAJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07Cis+IAkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorPiAJCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07Cis+IAkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKz4gCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworPiAJCX0KKz4gCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorPiAJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07Cis+IAkJc2hvcnQgaW50IGViY2RpY19tbVtdID0KKz4gCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworPiAJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworPiAJCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsKKz4gCQl9Cis+IAkJZXh0ZXJuIGludCBmb287Cis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCis+IAkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKz4gCSAgICBmaQorPiAJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KKz4gCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCis+IAkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKz4gCSAgICAgIGVsc2UKKz4gCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KKz4gCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCis+IAkgICAgICBmaQorPiAJICAgIGZpCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCisyNjM2YTY2MDYsNjY2MQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiAKKz4gCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworPiAJICAgICB1bmlvbgorPiAJICAgICB7Cis+IAkgICAgICAgbG9uZyBpbnQgbDsKKz4gCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworPiAJICAgICB9IHU7Cis+IAkgICAgIHUubCA9IDE7Cis+IAkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworPiAKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorPiAgIGFjX3N0YXR1cz0kPworPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworPiAgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCis+ICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKzI2MzdhNjY2Myw2NjY0Cis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMjY0MCwyNjQ0ZDY2NjYKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9jX2JpZ2VuZGlhbiIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHllczsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorPCAjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCis8IEVPRgorMjY0NWE2NjY4Cis+ICAgICBmaQorMjY0NmE2NjcwLDY2OTMKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9Cis+ICBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorPiAgICB5ZXMpCis+ICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKz4gI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorPiBfQUNFT0YKKz4gOzsgIygKKz4gICAgbm8pCis+ICAgICAgIDs7ICMoCis+ICAgIHVuaXZlcnNhbCkKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCis+ICNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEKKz4gX0FDRU9GCis+IAorPiAgICAgIDs7ICMoCis+ICAgICopCis+ICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVua25vd24gZW5kaWFubmVzcworPiAgcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCis+ICBwcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis+ICBlc2FjCisyNjU5LDI2NjZjNjcwNiw2NzIwCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbyIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyNjYxOiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8iID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19ubF9sYW5naW5mbycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjY2NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfZnVuY19ubF9sYW5naW5mbytzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IC8qIERlZmluZSBubF9sYW5naW5mbyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIG5sX2xhbmdpbmZvLgorPiAgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKz4gI2RlZmluZSBubF9sYW5naW5mbyBpbm5vY3VvdXNfbmxfbGFuZ2luZm8KKz4gCisyNjY4LDI2NzNjNjcyMiw2NzI0Cis8ICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIG5sX2xhbmdpbmZvKCk7IGJlbG93LiAgKi8KKzwgI2luY2x1ZGUgPGFzc2VydC5oPgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIG5sX2xhbmdpbmZvKCk7CistLS0KKz4gICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgbmxfbGFuZ2luZm8gKCk7IGJlbG93LgorPiAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorPiAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKzI2NzVjNjcyNiw2NzMwCis8IGludCBtYWluKCkgeworLS0tCis+ICNpZmRlZiBfX1NURENfXworPiAjIGluY2x1ZGUgPGxpbWl0cy5oPgorPiAjZWxzZQorPiAjIGluY2x1ZGUgPGFzc2VydC5oPgorPiAjZW5kaWYKKzI2NzZhNjczMiw2NzQwCis+ICN1bmRlZiBubF9sYW5naW5mbworPiAKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBubF9sYW5naW5mbyAoKTsKKzI2ODBjNjc0NAorPCAjaWYgZGVmaW5lZCAoX19zdHViX25sX2xhbmdpbmZvKSB8fCBkZWZpbmVkIChfX3N0dWJfX19ubF9sYW5naW5mbykKKy0tLQorPiAjaWYgZGVmaW5lZCBfX3N0dWJfbmxfbGFuZ2luZm8gfHwgZGVmaW5lZCBfX3N0dWJfX19ubF9sYW5naW5mbworMjY4MiwyNjgzZDY3NDUKKzwgI2Vsc2UKKzwgbmxfbGFuZ2luZm8oKTsKKzI2ODYsMjcwMWM2NzQ4LDY3OTEKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjg5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19ubF9sYW5naW5mbz15ZXMiCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9mdW5jX25sX2xhbmdpbmZvPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ25sX2xhbmdpbmZvYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiBubF9sYW5naW5mbyAoKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3ZfZnVuY19ubF9sYW5naW5mbz15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfZnVuY19ubF9sYW5naW5mbz1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8iID0geCIieWVzOyB0aGVuCisyNzA0LDI3MDVjNjc5NAorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorPCBVX0hBVkVfTkxfTEFOR0lORk89MAorLS0tCis+ICAgVV9IQVZFX05MX0xBTkdJTkZPPTAKKzI3MTAsMjcxM2M2Nzk5LDY4MDIKKzwgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8ncyBhcmd1bWVudCB0byBvYnRhaW4gdGhlIGNvZGVzZXQiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjcxMjogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvJ3MgYXJndW1lbnQgdG8gb2J0YWluIHRoZSBjb2Rlc2V0IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvJ3MgYXJndW1lbnQgdG8gb2J0YWluIHRoZSBjb2Rlc2V0IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvJ3MgYXJndW1lbnQgdG8gb2J0YWluIHRoZSBjb2Rlc2V0Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisyNzE3LDI3MTljNjgwNiw2ODExCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNzE5ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjcyMWM2ODEzLDY4MTUKKzwgaW50IG1haW4oKSB7CistLS0KKz4gaW50Cis+IG1haW4gKCkKKz4geworMjcyMywyNzI2YzY4MTcsNjg0MQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3MjY6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzI3MjksMjczMGM2ODQ0LDY4NDcKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMjczMmM2ODQ5LDY4NTIKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyNzM1LDI3MzZjNjg1NSw2ODU2Cis8IAorPCBlY2hvICIkYWNfdCIiJGFjX2N2X25sX2xhbmdpbmZvX2NvZGVzZXQiIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfbmxfbGFuZ2luZm9fY29kZXNldCIgPiY2OyB9CisyNzQ2LDI3NDdjNjg2NgorPCBhY19leHQ9QworPCAjIENYWEZMQUdTIGlzIG5vdCBpbiBhY19jcHAgYmVjYXVzZSAtZywgLU8sIGV0Yy4gYXJlIG5vdCB2YWxpZCBjcHAgb3B0aW9ucy4KKy0tLQorPiBhY19leHQ9Y3BwCisyNzQ5LDI3NjBjNjg2OCw2ODgyCis8IGFjX2NvbXBpbGU9JyR7Q1hYLWcrK30gLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0IDE+JjUnCis8IGFjX2xpbms9JyR7Q1hYLWcrK30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTIDE+JjUnCis8IGNyb3NzX2NvbXBpbGluZz0kYWNfY3ZfcHJvZ19jeHhfY3Jvc3MKKzwgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBuYW1lc3BhY2Ugc3VwcG9ydCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyNzU1OiBjaGVja2luZyBmb3IgbmFtZXNwYWNlIHN1cHBvcnQiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbmFtZXNwYWNlX29rJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyNzYwICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+IGFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKz4gYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKz4gYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cis+IAorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5hbWVzcGFjZSBzdXBwb3J0Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfbmFtZXNwYWNlX29rK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzI3NjQsMjc2NWM2ODg2LDY4ODkKKzwgICAgIAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworMjc2NywyNzcwYzY4OTEsNjkxNQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3NzA6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorMjc3MywyNzc2YzY5MTgsNjkyMQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X25hbWVzcGFjZV9vaz1ubworLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9uYW1lc3BhY2Vfb2s9bm8KKzI3NzhjNjkyMyw2OTI2Cis8IHJtIC1mIGNvbmZ0ZXN0KiAKKy0tLQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI3ODFjNjkyOSw2OTMwCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfbmFtZXNwYWNlX29rIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X25hbWVzcGFjZV9vayIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfbmFtZXNwYWNlX29rIiA+JjY7IH0KKzI3ODksMjc5MGM2OTM4LDY5MzkKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6Mjc5MTogY2hlY2tpbmcgZm9yIHByb3Blcmx5IG92ZXJyaWRpbmcgbmV3IGFuZCBkZWxldGUiID4mNQorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHJvcGVybHkgb3ZlcnJpZGluZyBuZXcgYW5kIGRlbGV0ZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBwcm9wZXJseSBvdmVycmlkaW5nIG5ldyBhbmQgZGVsZXRlLi4uICIgPiY2OyB9CisyNzkzLDI3OTRjNjk0Miw2OTQzCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9vdmVycmlkZV9jeHhfYWxsb2NhdGlvbl9vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKy0tLQorPiBpZiB0ZXN0ICIke2FjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzI3OTYsMjc5OGM2OTQ1LDY5NTAKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDI3OTggImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisyODA3LDI4MTNjNjk1OSw2OTg4Cis8ICAgICAKKzwgaW50IG1haW4oKSB7Cis8ICAgICAKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODEzOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gCis+IGludAorPiBtYWluICgpCis+IHsKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyODE2LDI4MTljNjk5MSw2OTk0Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2s9bm8KKzI4MjFjNjk5Niw2OTk5Cis8IHJtIC1mIGNvbmZ0ZXN0KiAKKy0tLQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI4MjRjNzAwMiw3MDAzCis8IGVjaG8gIiRhY190IiIkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb3ZlcnJpZGVfY3h4X2FsbG9jYXRpb25fb2siID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X292ZXJyaWRlX2N4eF9hbGxvY2F0aW9uX29rIiA+JjY7IH0KKzI4MjgsMjgzNWM3MDA3LDcwMTcKKzwgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MjgzMDogY2hlY2tpbmcgZm9yIHBsYWNlbWVudCBuZXcgYW5kIGRlbGV0ZSIgPiY1Cis8ICAgICBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjgzNSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlLi4uICIgPiY2OyB9Cis+ICAgICBpZiB0ZXN0ICIke2FjX2N2X292ZXJyaWRlX3BsYWNlbWVudF9uZXdfb2src2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMjg0NiwyODUyYzcwMjgsNzA1NworPCAgICAgICAgIAorPCBpbnQgbWFpbigpIHsKKzwgICAgICAgICAKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyODUyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gCis+IGludAorPiBtYWluICgpCis+IHsKKz4gCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCisyODU1LDI4NThjNzA2MCw3MDYzCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3Zfb3ZlcnJpZGVfcGxhY2VtZW50X25ld19vaz1ubworLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rPW5vCisyODYwYzcwNjUsNzA2OAorPCBybSAtZiBjb25mdGVzdCogCistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisyODYzYzcwNzEsNzA3MgorPCAgICAgZWNobyAiJGFjX3QiIiRhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rIiAxPiY2CistLS0KKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9vdmVycmlkZV9wbGFjZW1lbnRfbmV3X29rIiA+JjY7IH0KKzI4NzNkNzA4MQorPCAjIENGTEFHUyBpcyBub3QgaW4gYWNfY3BwIGJlY2F1c2UgLWcsIC1PLCBldGMuIGFyZSBub3QgdmFsaWQgY3BwIG9wdGlvbnMuCisyODc1LDI4ODZjNzA4Myw3MTAxCis8IGFjX2NvbXBpbGU9JyR7Q0MtY2N9IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgMT4mNScKKzwgYWNfbGluaz0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyAxPiY1JworPCBjcm9zc19jb21waWxpbmc9JGFjX2N2X3Byb2dfY2NfY3Jvc3MKKzwgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBwb3BlbiIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyODgxOiBjaGVja2luZyBmb3IgcG9wZW4iID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY19wb3Blbicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMjg4NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCis+IGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCis+IGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKz4gCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcG9wZW4iID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcG9wZW4uLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9mdW5jX3BvcGVuK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gLyogRGVmaW5lIHBvcGVuIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgcG9wZW4uCis+ICAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworPiAjZGVmaW5lIHBvcGVuIGlubm9jdW91c19wb3BlbgorPiAKKzI4ODgsMjg5M2M3MTAzLDcxMTEKKzwgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgcG9wZW4oKTsgYmVsb3cuICAqLworPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgcG9wZW4oKTsKKy0tLQorPiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBwb3BlbiAoKTsgYmVsb3cuCis+ICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworPiAKKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorMjg5NWM3MTEzCis8IGludCBtYWluKCkgeworLS0tCis+ICN1bmRlZiBwb3BlbgorMjg5NmE3MTE1LDcxMjEKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBwb3BlbiAoKTsKKzI5MDBjNzEyNQorPCAjaWYgZGVmaW5lZCAoX19zdHViX3BvcGVuKSB8fCBkZWZpbmVkIChfX3N0dWJfX19wb3BlbikKKy0tLQorPiAjaWYgZGVmaW5lZCBfX3N0dWJfcG9wZW4gfHwgZGVmaW5lZCBfX3N0dWJfX19wb3BlbgorMjkwMiwyOTAzZDcxMjYKKzwgI2Vsc2UKKzwgcG9wZW4oKTsKKzI5MDYsMjkyNGM3MTI5LDcxNjgKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyOTA5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19wb3Blbj15ZXMiCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9mdW5jX3BvcGVuPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgCis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2Z1bmNfJ3BvcGVuYFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICA6Cis8IGVsc2UKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiBwb3BlbiAoKTsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3ZfZnVuY19wb3Blbj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfZnVuY19wb3Blbj1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzI5MjVhNzE3MCw3MTcxCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3BvcGVuIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9mdW5jX3BvcGVuIiA+JjY7IH0KKzI5MzUsMjk0MmM3MTgxLDcxOTUKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHR6c2V0IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjI5Mzc6IGNoZWNraW5nIGZvciB0enNldCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9mdW5jX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyOTQyICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdHpzZXQiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdHpzZXQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9mdW5jX3R6c2V0K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gLyogRGVmaW5lIHR6c2V0IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgdHpzZXQuCis+ICAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworPiAjZGVmaW5lIHR6c2V0IGlubm9jdW91c190enNldAorPiAKKzI5NDQsMjk0OWM3MTk3LDcxOTkKKzwgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgdHpzZXQoKTsgYmVsb3cuICAqLworPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgdHpzZXQoKTsKKy0tLQorPiAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciB0enNldCAoKTsgYmVsb3cuCis+ICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCis+ICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworMjk1MWM3MjAxLDcyMDUKKzwgaW50IG1haW4oKSB7CistLS0KKz4gI2lmZGVmIF9fU1REQ19fCis+ICMgaW5jbHVkZSA8bGltaXRzLmg+Cis+ICNlbHNlCis+ICMgaW5jbHVkZSA8YXNzZXJ0Lmg+Cis+ICNlbmRpZgorMjk1MmE3MjA3LDcyMTUKKz4gI3VuZGVmIHR6c2V0Cis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHR6c2V0ICgpOworMjk1NmM3MjE5Cis8ICNpZiBkZWZpbmVkIChfX3N0dWJfdHpzZXQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3R6c2V0KQorLS0tCis+ICNpZiBkZWZpbmVkIF9fc3R1Yl90enNldCB8fCBkZWZpbmVkIF9fc3R1Yl9fX3R6c2V0CisyOTU4LDI5NTlkNzIyMAorPCAjZWxzZQorPCB0enNldCgpOworMjk2MiwyOTgwYzcyMjMsNzI2MgorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5NjU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9mdW5jX3R6c2V0PXllcyIKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGV2YWwgImFjX2N2X2Z1bmNfdHpzZXQ9bm8iCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBmaQorPCAKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18ndHpzZXRgXCIgPSB5ZXMiOyB0aGVuCis8ICAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorPCAgIDoKKzwgZWxzZQorPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKz4gcmV0dXJuIHR6c2V0ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKz4gICBhY19jdl9mdW5jX3R6c2V0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9mdW5jX3R6c2V0PW5vCis+IGZpCis+IAorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorMjk4MWE3MjY0LDcyNjUKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfdHpzZXQiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X2Z1bmNfdHpzZXQiID4mNjsgfQorMjk4OSwyOTk2YzcyNzMsNzI4NworPCAgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIF90enNldCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZToyOTkxOiBjaGVja2luZyBmb3IgX3R6c2V0IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2Z1bmNfX3R6c2V0JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAyOTk2ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90enNldCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdHpzZXQuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9mdW5jX190enNldCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IC8qIERlZmluZSBfdHpzZXQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBfdHpzZXQuCis+ICAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworPiAjZGVmaW5lIF90enNldCBpbm5vY3VvdXNfX3R6c2V0Cis+IAorMjk5OCwzMDAzYzcyODksNzI5NworPCAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBfdHpzZXQoKTsgYmVsb3cuICAqLworPCAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgX3R6c2V0KCk7CistLS0KKz4gICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX3R6c2V0ICgpOyBiZWxvdy4KKz4gICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKz4gICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCis+IAorPiAjaWZkZWYgX19TVERDX18KKz4gIyBpbmNsdWRlIDxsaW1pdHMuaD4KKz4gI2Vsc2UKKz4gIyBpbmNsdWRlIDxhc3NlcnQuaD4KKz4gI2VuZGlmCiszMDA1YzcyOTkKKzwgaW50IG1haW4oKSB7CistLS0KKz4gI3VuZGVmIF90enNldAorMzAwNmE3MzAxLDczMDcKKz4gLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCis+ICAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworPiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPiAjaWZkZWYgX19jcGx1c3BsdXMKKz4gZXh0ZXJuICJDIgorPiAjZW5kaWYKKz4gY2hhciBfdHpzZXQgKCk7CiszMDEwYzczMTEKKzwgI2lmIGRlZmluZWQgKF9fc3R1Yl9fdHpzZXQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX190enNldCkKKy0tLQorPiAjaWYgZGVmaW5lZCBfX3N0dWJfX3R6c2V0IHx8IGRlZmluZWQgX19zdHViX19fX3R6c2V0CiszMDEyLDMwMTNkNzMxMgorPCAjZWxzZQorPCBfdHpzZXQoKTsKKzMwMTYsMzAzNGM3MzE1LDczNTQKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDE5OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19fdHpzZXQ9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfZnVuY19fdHpzZXQ9bm8iCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorPCBmaQorPCAKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfZnVuY18nX3R6c2V0YFwiID0geWVzIjsgdGhlbgorPCAgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKzwgICA6Cis8IGVsc2UKKzwgICBlY2hvICIkYWNfdCIibm8iIDE+JjYKKy0tLQorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IHJldHVybiBfdHpzZXQgKCk7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorPiAgIGFjX2N2X2Z1bmNfX3R6c2V0PXllcworPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl9mdW5jX190enNldD1ubworPiBmaQorPiAKKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzMwMzVhNzM1Niw3MzU3Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX190enNldCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfZnVuY19fdHpzZXQiID4mNjsgfQorMzA0NywzMDU0YzczNjksNzM3OQorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdHpuYW1lIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMwNDk6IGNoZWNraW5nIGZvciB0em5hbWUiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdmFyX3R6bmFtZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzA1NCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR6bmFtZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0em5hbWUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl92YXJfdHpuYW1lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzMwNjNjNzM4OCw3MzkwCis8IGludCBtYWluKCkgeworLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKzMwNjUsMzA2OGM3MzkyLDc0MTYKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDY4OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCiszMDcxLDMwNzZjNzQxOSw3NDIyCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdmFyX3R6bmFtZT1ubworPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdmFyX3R6bmFtZT1ubworMzA3OWM3NDI1LDc0MzAKKzwgZWNobyAiJGFjX3QiIiRhY19jdl92YXJfdHpuYW1lIiAxPiY2CistLS0KKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Zhcl90em5hbWUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Zhcl90em5hbWUiID4mNjsgfQorMzA4NCwzMDkxYzc0MzUsNzQ0NQorPCAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBfdHpuYW1lIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMwODY6IGNoZWNraW5nIGZvciBfdHpuYW1lIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl9fdHpuYW1lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMDkxICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfdHpuYW1lIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF90em5hbWUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl92YXJfX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGVsc2UKKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiszMDk1LDMwOTZjNzQ0OSw3NDUyCis8ICAgCis8IGludCBtYWluKCkgeworLS0tCis+IAorPiBpbnQKKz4gbWFpbiAoKQorPiB7CiszMDk4LDMxMDFjNzQ1NCw3NDc4Cis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzEwMTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorLS0tCis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiBpZiB7IChhY190cnk9IiRhY19saW5rIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Cis+IAkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKz4gCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgICAgICAgfTsgdGhlbgorMzEwNCwzMTA5Yzc0ODEsNzQ4NAorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3Zhcl9fdHpuYW1lPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl92YXJfX3R6bmFtZT1ubworMzExMmM3NDg3LDc0OTIKKzwgZWNobyAiJGFjX3QiIiRhY19jdl92YXJfX3R6bmFtZSIgMT4mNgorLS0tCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl92YXJfX3R6bmFtZSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdmFyX190em5hbWUiID4mNjsgfQorMzEyMSwzMTI4Yzc1MDEsNzUxMQorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdGltZXpvbmUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzEyMzogY2hlY2tpbmcgZm9yIHRpbWV6b25lIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3Zhcl90aW1lem9uZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzEyOCAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHRpbWV6b25lIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRpbWV6b25lLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdmFyX3RpbWV6b25lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzMxMzdjNzUyMCw3NTIyCis8IGludCBtYWluKCkgeworLS0tCis+IGludAorPiBtYWluICgpCis+IHsKKzMxMzksMzE0MmM3NTI0LDc1NDgKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMTQyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCistLS0KKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCiszMTQ1LDMxNTBjNzU1MSw3NTU0Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdmFyX3RpbWV6b25lPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl92YXJfdGltZXpvbmU9bm8KKzMxNTNjNzU1Nyw3NTYyCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdmFyX3RpbWV6b25lIiAxPiY2CistLS0KKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKz4gICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Zhcl90aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdmFyX3RpbWV6b25lIiA+JjY7IH0KKzMxNTksMzE2NmM3NTY4LDc1NzgKKzwgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgX190aW1lem9uZSIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozMTYxOiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfX190aW1lem9uZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzE2NiAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX190aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX3RpbWV6b25lLi4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdmFyX19fdGltZXpvbmUrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorPiBlbHNlCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworMzE2OCwzMTY5Yzc1ODAsNzU4MworPCAgIAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworMzE3MSwzMTc0Yzc1ODUsNzYwOQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxNzQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzMxNzcsMzE4MmM3NjEyLDc2MTUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl92YXJfX190aW1lem9uZT1ubworPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdmFyX19fdGltZXpvbmU9bm8KKzMxODVjNzYxOCw3NjIzCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdmFyX19fdGltZXpvbmUiIDE+JjYKKy0tLQorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX19fdGltZXpvbmUiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3Zhcl9fX3RpbWV6b25lIiA+JjY7IH0KKzMxOTAsMzE5N2M3NjI4LDc2MzgKKzwgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBfdGltZXpvbmUiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzE5MjogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl92YXJfX3RpbWV6b25lJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMTk3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorLS0tCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF90aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfdGltZXpvbmUuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl92YXJfX3RpbWV6b25lK3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKzMxOTksMzIwMGM3NjQwLDc2NDMKKzwgICAgIAorPCBpbnQgbWFpbigpIHsKKy0tLQorPiAKKz4gaW50Cis+IG1haW4gKCkKKz4geworMzIwMiwzMjA1Yzc2NDUsNzY2OQorPCA7IHJldHVybiAwOyB9Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMyMDU6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKy0tLQorPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworPiAJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Cis+IAkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKz4gICAgICAgIH07IHRoZW4KKzMyMDgsMzIxM2M3NjcyLDc2NzUKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl92YXJfX3RpbWV6b25lPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl92YXJfX3RpbWV6b25lPW5vCiszMjE2Yzc2NzgsNzY4MworPCBlY2hvICIkYWNfdCIiJGFjX2N2X3Zhcl9fdGltZXpvbmUiIDE+JjYKKy0tLQorPiBybSAtcmYgY29uZnRlc3QuZFNZTQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorPiAgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdmFyX190aW1lem9uZSIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdmFyX190aW1lem9uZSIgPiY2OyB9CiszMjI2LDMyNDRjNzY5Myw3Njk2Cis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMyMjg6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl9zdGRjJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMjMzICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRhcmcuaD4KKzwgI2luY2x1ZGUgPHN0cmluZy5oPgorPCAjaW5jbHVkZSA8ZmxvYXQuaD4KKzwgRU9GCis8IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCis8IHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzI0MTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKzwgYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorPCBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDhfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQ4X3QuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDhfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszMjQ2LDMyNjJjNzY5OCw3NzY2Cis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCis8IAorPCBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPCAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMjU4ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RyaW5nLmg+Cis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistLS0KKz4gICBhY19jdl90eXBlX2ludDhfdD1ubworPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoaW50OF90KSkKKz4gICAgICAgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoKGludDhfdCkpKQorPiAJICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCiszMjY1LDMyNjhjNzc2OSw3NzcwCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCis8IGZpCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzMyNjlhNzc3MgorPiAJYWNfY3ZfdHlwZV9pbnQ4X3Q9eWVzCiszMjcyLDMyODFjNzc3NQorPCBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPCAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMjc2ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIDoKKy0tLQorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKzMyODMsMzI4NmM3Nzc3LDc3NzkKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKzwgZmkKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKzMyOTAsMzI5MmM3NzgzLDc3ODcKKzwgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKzwgICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCis8IGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDhfdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50OF90IiA9IHgiInllczsgdGhlbgorMzI5NSwzMzA0ZDc3ODkKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDMyOTcgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxjdHlwZS5oPgorPCAjZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKzwgI2RlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCis8ICNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCis8IGludCBtYWluICgpIHsgaW50IGk7IGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKzwgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKSB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkgZXhpdCgyKTsKKzwgZXhpdCAoMCk7IH0KKzMzMDYsMzMxN2M3NzkxLDc3OTMKKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzMwODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAorPCB0aGVuCis8ICAgOgorPCBlbHNlCis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtZnIgY29uZnRlc3QqCis8ICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKzwgZmkKKzwgcm0gLWZyIGNvbmZ0ZXN0KgorPCBmaQorLS0tCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKz4gI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKz4gX0FDRU9GCiszMzIwZDc3OTUKKzwgZmkKKzMzMjIsMzMyNmM3Nzk3LDc4NzQKKzwgZWNobyAiJGFjX3QiIiRhY19jdl9oZWFkZXJfc3RkYyIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorPCAjZGVmaW5lIFNURENfSEVBREVSUyAxCis8IEVPRgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWludDhfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50OF90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50OF90K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX2N2X3R5cGVfdWludDhfdD1ubworPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAodWludDhfdCkpCis+ICAgICAgICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKCh1aW50OF90KSkpCis+IAkgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorMzMyN2E3ODc2Cis+IAlhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCiszMzMwLDMzMzNjNzg3OQorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50OF90IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjMzMzI6IGNoZWNraW5nIGZvciBpbnQ4X3QiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9pbnQ4X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiszMzM1LDMzNTJjNzg4MSw3ODgyCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzMzM3ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis8ICNpZiBTVERDX0hFQURFUlMKKzwgI2luY2x1ZGUgPHN0ZGxpYi5oPgorPCAjaW5jbHVkZSA8c3RkZGVmLmg+Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPCAgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKWludDhfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX2ludDhfdD15ZXMKKzwgZWxzZQorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX2ludDhfdD1ubworPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiszMzU0LDMzNTlkNzg4MworPCBmaQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50OF90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfaW50OF90ID0gbm87IHRoZW4KKzwgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKzwgI2RlZmluZSBpbnQ4X3Qgc2lnbmVkIGNoYXIKKzwgRU9GCiszMzYzLDMzODNjNzg4NworPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDhfdCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozMzY1OiBjaGVja2luZyBmb3IgdWludDhfdCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQ4X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDMzNzAgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDhfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX3VpbnQ4X3Q9eWVzCis8IGVsc2UKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV91aW50OF90PW5vCistLS0KKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiszMzg1Yzc4ODksNzg5MworPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50OF90IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl90eXBlX3VpbnQ4X3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludDhfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKzMzODcsMzM5MGM3ODk1Cis8IGZpCis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV91aW50OF90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDhfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzM5MmM3ODk3Cis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzM5NiwzNDEzYzc5MDEsNzkwNAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgaW50MTZfdCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozMzk4OiBjaGVja2luZyBmb3IgaW50MTZfdCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX2ludDE2X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM0MDMgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0paW50MTZfdFteYS16QS1aXzAtOV0iID4vZGV2L251bGwgMj4mMTsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBhY19jdl90eXBlX2ludDE2X3Q9eWVzCistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQxNl90IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludDE2X3QuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDE2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMzQxNWQ3OTA1Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorMzQxNmE3OTA3LDc5ODAKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKGludDE2X3QpKQorPiAgICAgICAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mICgoaW50MTZfdCkpKQorPiAJICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgOgorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAlhY19jdl90eXBlX2ludDE2X3Q9eWVzCiszNDE4Yzc5ODIsNzk4NworPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKzM0MjEsMzQyM2M3OTkwLDc5OTkKKzwgZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX2ludDE2X3QiIDE+JjYKKzwgaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbnQxNl90ID0gbm87IHRoZW4KKzwgICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDE2X3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3R5cGVfaW50MTZfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQxNl90IiA9IHgiInllczsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAKKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzQyNWM4MDAxCis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzQyOSwzNDQ2YzgwMDUsODAwOAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDE2X3QiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzQzMTogY2hlY2tpbmcgZm9yIHVpbnQxNl90IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfdWludDE2X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM0MzYgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDE2X3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV91aW50MTZfdD15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQxNl90IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpbnQxNl90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNDQ4ZDgwMDkKKzwgICBybSAtcmYgY29uZnRlc3QqCiszNDQ5YTgwMTEsODA4NAorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAodWludDE2X3QpKQorPiAgICAgICAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mICgodWludDE2X3QpKSkKKz4gCSAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdHlwZV91aW50MTZfdD15ZXMKKzM0NTFjODA4Niw4MDkxCis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorMzQ1NCwzNDU2YzgwOTQsODEwMworPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfdWludDE2X3QiIDE+JjYKKzwgaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50MTZfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50MTZfdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdHlwZV91aW50MTZfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50MTZfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKzM0NThjODEwNQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKzM0NjIsMzQ3OWM4MTA5LDgxMTIKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGludDMyX3QiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzQ2NDogY2hlY2tpbmcgZm9yIGludDMyX3QiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9pbnQzMl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzNDY5ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis8ICNpZiBTVERDX0hFQURFUlMKKzwgI2luY2x1ZGUgPHN0ZGxpYi5oPgorPCAjaW5jbHVkZSA8c3RkZGVmLmg+Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPCAgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKWludDMyX3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV9pbnQzMl90PXllcworLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50MzJfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQzMl90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzM0ODFkODExMworPCAgIHJtIC1yZiBjb25mdGVzdCoKKzM0ODJhODExNSw4MTg4Cis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mIChpbnQzMl90KSkKKz4gICAgICAgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoKGludDMyX3QpKSkKKz4gCSAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdHlwZV9pbnQzMl90PXllcworMzQ4NGM4MTkwLDgxOTUKKzwgcm0gLWYgY29uZnRlc3QqCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCiszNDg3LDM0ODljODE5OCw4MjA3Cis8IGVjaG8gIiRhY190IiIkYWNfY3ZfdHlwZV9pbnQzMl90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfaW50MzJfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQzMl90IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl90eXBlX2ludDMyX3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50MzJfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKzM0OTFjODIwOQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKzM0OTUsMzUxMmM4MjEzLDgyMTYKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHVpbnQzMl90IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM0OTc6IGNoZWNraW5nIGZvciB1aW50MzJfdCIgPiY1Cis8IGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl90eXBlX3VpbnQzMl90JytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKzwgICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorPCBlbHNlCis8ICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzNTAyICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cis8ICNpZiBTVERDX0hFQURFUlMKKzwgI2luY2x1ZGUgPHN0ZGxpYi5oPgorPCAjaW5jbHVkZSA8c3RkZGVmLmg+Cis8ICNlbmRpZgorPCBFT0YKKzwgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorPCAgIGVncmVwICIoXnxbXmEtekEtWl8wLTldKXVpbnQzMl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3R5cGVfdWludDMyX3Q9eWVzCistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MzJfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50MzJfdC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludDMyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKz4gICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorMzUxNGQ4MjE3Cis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorMzUxNWE4MjE5LDgyOTIKKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKHVpbnQzMl90KSkKKz4gICAgICAgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoKHVpbnQzMl90KSkpCis+IAkgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2N2X3R5cGVfdWludDMyX3Q9eWVzCiszNTE3YzgyOTQsODI5OQorPCBybSAtZiBjb25mdGVzdCoKKy0tLQorPiAKKz4gcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKzM1MjAsMzUyMmM4MzAyLDgzMTEKKzwgZWNobyAiJGFjX3QiIiRhY19jdl90eXBlX3VpbnQzMl90IiAxPiY2Cis8IGlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDMyX3QgPSBubzsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZmkKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDMyX3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3R5cGVfdWludDMyX3QiID4mNjsgfQorPiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludDMyX3QiID0geCIieWVzOyB0aGVuCis+ICAgOgorPiBlbHNlCis+IAorPiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiszNTI0YzgzMTMKKzwgRU9GCistLS0KKz4gX0FDRU9GCiszNTI4LDM1NDVjODMxNyw4MzIwCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBpbnQ2NF90IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM1MzA6IGNoZWNraW5nIGZvciBpbnQ2NF90IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfaW50NjRfdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzUzNSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKzwgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorPCAjaWYgU1REQ19IRUFERVJTCis8ICNpbmNsdWRlIDxzdGRsaWIuaD4KKzwgI2luY2x1ZGUgPHN0ZGRlZi5oPgorPCAjZW5kaWYKKzwgRU9GCis8IGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKzwgICBlZ3JlcCAiKF58W15hLXpBLVpfMC05XSlpbnQ2NF90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3R5cGVfaW50NjRfdD15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDY0X3QiID4mNQorPiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50NjRfdC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50NjRfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNTQ3ZDgzMjEKKzwgICBybSAtcmYgY29uZnRlc3QqCiszNTQ4YTgzMjMsODQwNAorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAoaW50NjRfdCkpCis+ICAgICAgICByZXR1cm4gMDsKKz4gICA7Cis+ICAgcmV0dXJuIDA7Cis+IH0KKz4gX0FDRU9GCis+IHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworPiAJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorPiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKz4gICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCis+ICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAkYWNfaW5jbHVkZXNfZGVmYXVsdAorPiBpbnQKKz4gbWFpbiAoKQorPiB7Cis+IGlmIChzaXplb2YgKChpbnQ2NF90KSkpCis+IAkgIHJldHVybiAwOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorPiBpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKz4gICBhY19zdGF0dXM9JD8KKz4gICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorPiAgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorPiAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Cis+IAkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorPiAgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCWFjX2N2X3R5cGVfaW50NjRfdD15ZXMKKz4gZmkKKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBlbHNlCis+ICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis+IHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKz4gCis+IAorMzU1MGQ4NDA1Cis8IHJtIC1mIGNvbmZ0ZXN0KgorMzU1MWE4NDA3Cis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorMzU1MywzNTU1Yzg0MDksODQxNQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfaW50NjRfdCIgMT4mNgorPCBpZiB0ZXN0ICRhY19jdl90eXBlX2ludDY0X3QgPSBubzsgdGhlbgorPCAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorLS0tCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDY0X3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3R5cGVfaW50NjRfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnQ2NF90IiA9IHgiInllczsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAKKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzU1N2M4NDE3Cis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzU2MSwzNTc4Yzg0MjEsODQyNAorPCBlY2hvICRhY19uICJjaGVja2luZyBmb3IgdWludDY0X3QiIi4uLiAkYWNfYyIgMT4mNgorPCBlY2hvICJjb25maWd1cmU6MzU2MzogY2hlY2tpbmcgZm9yIHVpbnQ2NF90IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3R5cGVfdWludDY0X3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM1NjggImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKzwgI2lmIFNURENfSEVBREVSUworPCAjaW5jbHVkZSA8c3RkbGliLmg+Cis8ICNpbmNsdWRlIDxzdGRkZWYuaD4KKzwgI2VuZGlmCis8IEVPRgorPCBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Cis8ICAgZWdyZXAgIihefFteYS16QS1aXzAtOV0pdWludDY0X3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3ZfdHlwZV91aW50NjRfdD15ZXMKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQ2NF90IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpbnQ2NF90Li4uICIgPiY2OyB9Cis+IGlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50NjRfdCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNTgwZDg0MjUKKzwgICBybSAtcmYgY29uZnRlc3QqCiszNTgxYTg0MjcsODUwMAorPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+ICRhY19pbmNsdWRlc19kZWZhdWx0Cis+IGludAorPiBtYWluICgpCis+IHsKKz4gaWYgKHNpemVvZiAodWludDY0X3QpKQorPiAgICAgICAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiBpZiAoc2l6ZW9mICgodWludDY0X3QpKSkKKz4gCSAgcmV0dXJuIDA7Cis+ICAgOworPiAgIHJldHVybiAwOworPiB9Cis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfY3ZfdHlwZV91aW50NjRfdD15ZXMKKzM1ODNjODUwMiw4NTA3Cis8IHJtIC1mIGNvbmZ0ZXN0KgorLS0tCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorMzU4NiwzNTg4Yzg1MTAsODUxOQorPCBlY2hvICIkYWNfdCIiJGFjX2N2X3R5cGVfdWludDY0X3QiIDE+JjYKKzwgaWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50NjRfdCA9IG5vOyB0aGVuCis8ICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorPiBmaQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY2OyB9Cis+IGlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50NjRfdCIgPSB4IiJ5ZXM7IHRoZW4KKz4gICA6Cis+IGVsc2UKKz4gCis+IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKzM1OTBjODUyMQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKzM2NTEsMzY1OWM4NTgyLDg2MDAKKzwgYWNfc2FmZT1gZWNobyAid2NoYXIuaCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciB3Y2hhci5oIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM2NTQ6IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2hlYWRlcl8kYWNfc2FmZScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCis8ICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKKzwgZWxzZQorPCAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKzwgI2xpbmUgMzY1OSAiY29uZmlndXJlIgorPCAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKy0tLQorPiBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl93Y2hhcl9oK3NldH0iID0gc2V0OyB0aGVuCis+ICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdjaGFyLmguLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2NoYXJfaCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Cis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNjsgfQorPiBlbHNlCis+ICAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3Y2hhci5oIHVzYWJpbGl0eSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdjaGFyLmggdXNhYmlsaXR5Li4uICIgPiY2OyB9Cis+IGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBjb25mZGVmcy5oLiAgKi8KKz4gX0FDRU9GCis+IGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorPiBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKz4gJGFjX2luY2x1ZGVzX2RlZmF1bHQKKzM2NjEsMzY3OWM4NjAyLDg3MDEKKzwgRU9GCis8IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0ID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQiCis8IHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzY2NDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KKzwgYWNfZXJyPWBncmVwIC12ICdeICorJyBjb25mdGVzdC5vdXQgfCBncmVwIC12ICJeY29uZnRlc3QuJHthY19leHR9XCQiYAorPCBpZiB0ZXN0IC16ICIkYWNfZXJyIjsgdGhlbgorPCAgIHJtIC1yZiBjb25mdGVzdCoKKzwgICBldmFsICJhY19jdl9oZWFkZXJfJGFjX3NhZmU9eWVzIgorPCBlbHNlCis8ICAgZWNobyAiJGFjX2VyciIgPiY1Cis8ICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKzwgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgZXZhbCAiYWNfY3ZfaGVhZGVyXyRhY19zYWZlPW5vIgorPCBmaQorPCBybSAtZiBjb25mdGVzdCoKKzwgZmkKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfaGVhZGVyXyckYWNfc2FmZWBcIiA9IHllcyI7IHRoZW4KKzwgICBlY2hvICIkYWNfdCIieWVzIiAxPiY2Cis8ICAgOgorLS0tCis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorPiAgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKKz4gZWxzZQorPiAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis+IAorPiAJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCis+IGZpCis+IAorPiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Cis+ICRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKz4gCis+ICMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2NoYXIuaCBwcmVzZW5jZSIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHdjaGFyLmggcHJlc2VuY2UuLi4gIiA+JjY7IH0KKz4gY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCis+IC8qIGNvbmZkZWZzLmguICAqLworPiBfQUNFT0YKKz4gY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Cis+IGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogZW5kIGNvbmZkZWZzLmguICAqLworPiAjaW5jbHVkZSA8d2NoYXIuaD4KKz4gX0FDRU9GCis+IGlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorPiBjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKz4gICBybSAtZiBjb25mdGVzdC5lcjEKKz4gICBjYXQgY29uZnRlc3QuZXJyID4mNQorPiAgICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Cis+ICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Cis+IAkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gICBhY19oZWFkZXJfcHJlcHJvYz1ubworPiBmaQorPiAKKz4gcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKz4gJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9Cis+IAorPiAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKz4gY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorPiAgIHllczpubzogKQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorPiAgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCis+ICAgICA7OworPiAgIG5vOnllczoqICkKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB3Y2hhci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB3Y2hhci5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorPiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHdjaGFyLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Cis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogd2NoYXIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogd2NoYXIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorPiAKKz4gICAgIDs7Cis+IGVzYWMKKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB3Y2hhci5oIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdjaGFyLmguLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfd2NoYXJfaCtzZXR9IiA9IHNldDsgdGhlbgorPiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiszNjgxYzg3MDMsODcwNworPCAgIGVjaG8gIiRhY190IiJubyIgMT4mNgorLS0tCis+ICAgYWNfY3ZfaGVhZGVyX3djaGFyX2g9JGFjX2hlYWRlcl9wcmVwcm9jCis+IGZpCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPiY1Cis+ICRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3djaGFyX2giID4mNjsgfQorPiAKKzM2ODNhODcxMAorPiAKKzM2ODljODcxNgorPCAgICAgY2F0ID4+IGNvbmZkZWZzLmggPDxcRU9GCistLS0KKz4gICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCiszNjkxYzg3MTgKKzwgRU9GCistLS0KKz4gX0FDRU9GCiszNjk0LDM3MTljODcyMSw4NzgyCis8ICAgICAgICAgCis8IGVjaG8gJGFjX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM2OTc6IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiA+JjUKKzwgaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X3NlYXJjaF93Y3NjcHknK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2Cis8IGVsc2UKKzwgICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorPCBhY19jdl9zZWFyY2hfd2NzY3B5PSJubyIKKzwgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorPCAjbGluZSAzNzA0ICJjb25maWd1cmUiCis8ICNpbmNsdWRlICJjb25mZGVmcy5oIgorPCAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworPCAvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCis8ICAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworPCBjaGFyIHdjc2NweSgpOworPCAKKzwgaW50IG1haW4oKSB7Cis8IHdjc2NweSgpCis8IDsgcmV0dXJuIDA7IH0KKzwgRU9GCis8IGlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzcxNTogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCis8ICAgcm0gLXJmIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3NlYXJjaF93Y3NjcHk9Im5vbmUgcmVxdWlyZWQiCis8IGVsc2UKKzwgICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorPCAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorLS0tCis+ICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgd2NzY3B5IiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyB3Y3NjcHkuLi4gIiA+JjY7IH0KKz4gaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfd2NzY3B5K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKz4gZWxzZQorPiAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworPiBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCis+IAorPiAvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKz4gICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCis+ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis+ICNpZmRlZiBfX2NwbHVzcGx1cworPiBleHRlcm4gIkMiCis+ICNlbmRpZgorPiBjaGFyIHdjc2NweSAoKTsKKz4gaW50Cis+IG1haW4gKCkKKz4geworPiByZXR1cm4gd2NzY3B5ICgpOworPiAgIDsKKz4gICByZXR1cm4gMDsKKz4gfQorPiBfQUNFT0YKKz4gZm9yIGFjX2xpYiBpbiAnJyB3Y3MgdzsgZG8KKz4gICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorPiAgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorPiAgIGVsc2UKKz4gICAgIGFjX3Jlcz0tbCRhY19saWIKKz4gICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKz4gICBmaQorPiAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Cis+IGlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCis+IGNhc2UgIigoJGFjX3RyeSIgaW4KKz4gICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKz4gICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKKz4gZXNhYworPiBldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiCis+ICRhc19lY2hvICIkYWNfdHJ5X2VjaG8iKSA+JjUKKz4gICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorPiAgIGFjX3N0YXR1cz0kPworPiAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCis+ICAgcm0gLWYgY29uZnRlc3QuZXIxCis+ICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKz4gCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKz4gCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCis+ICAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKz4gCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorPiAJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Cis+ICAgICAgICB9OyB0aGVuCis+ICAgYWNfY3Zfc2VhcmNoX3djc2NweT0kYWNfcmVzCis+IGVsc2UKKz4gICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gCiszNzIxLDM3NDJjODc4NCw4Nzg5Cis8IHJtIC1mIGNvbmZ0ZXN0KgorPCB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3djc2NweSIgPSAibm8iICYmIGZvciBpIGluIHdjcyB3OyBkbworPCBMSUJTPSItbCRpICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorPCBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM3MjYgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCis8IC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCis8IC8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKzwgICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCis8IGNoYXIgd2NzY3B5KCk7Cis8IAorPCBpbnQgbWFpbigpIHsKKzwgd2NzY3B5KCkKKzwgOyByZXR1cm4gMDsgfQorPCBFT0YKKzwgaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozNzM3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKzwgICBybSAtcmYgY29uZnRlc3QqCis8ICAgYWNfY3Zfc2VhcmNoX3djc2NweT0iLWwkaSIKKzwgYnJlYWsKKzwgZWxzZQorPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CistLS0KKz4gCis+IHJtIC1yZiBjb25mdGVzdC5kU1lNCis+IHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCis+ICAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorPiAgIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3djc2NweStzZXR9IiA9IHNldDsgdGhlbgorPiAgIGJyZWFrCiszNzQ0ZDg3OTAKKzwgcm0gLWYgY29uZnRlc3QqCiszNzQ2Yzg3OTIsODc5OAorPCBMSUJTPSIkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorLS0tCis+IGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX3djc2NweStzZXR9IiA9IHNldDsgdGhlbgorPiAgIDoKKz4gZWxzZQorPiAgIGFjX2N2X3NlYXJjaF93Y3NjcHk9bm8KKz4gZmkKKz4gcm0gY29uZnRlc3QuJGFjX2V4dAorPiBMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKKzM3NDdhODgwMCw4ODA0Cis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfd2NzY3B5IiA+JjUKKz4gJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA+JjY7IH0KKz4gYWNfcmVzPSRhY19jdl9zZWFyY2hfd2NzY3B5Cis+IGlmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuCis+ICAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKzM3NDksMzc1NGQ4ODA1Cis8IGVjaG8gIiRhY190IiIkYWNfY3Zfc2VhcmNoX3djc2NweSIgMT4mNgorPCBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3djc2NweSIgIT0gIm5vIjsgdGhlbgorPCAgIHRlc3QgIiRhY19jdl9zZWFyY2hfd2NzY3B5IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX3djc2NweSAkTElCUyIKKzwgICAKKzwgZWxzZSA6Cis8ICAgCiszNzU1YTg4MDcKKz4gCiszNzY2LDM3NjljODgxOCw4ODIxCis8IGVjaG8gJGFjX24gImNoZWNraW5nIHNpemUgb2Ygd2NoYXJfdCIiLi4uICRhY19jIiAxPiY2Cis8IGVjaG8gImNvbmZpZ3VyZTozNzY4OiBjaGVja2luZyBzaXplIG9mIHdjaGFyX3QiID4mNQorPCBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3Zfc2l6ZW9mX3djaGFyX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorPCAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CistLS0KKz4geyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2Ygd2NoYXJfdCIgPiY1Cis+ICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygd2NoYXJfdC4uLiAiID4mNjsgfQorPiBpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl93Y2hhcl90K3NldH0iID0gc2V0OyB0aGVuCis+ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKzM3NzQsMzc3NmM4ODI2LDg4MzEKKzwgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCis8ICNsaW5lIDM3NzYgImNvbmZpZ3VyZSIKKzwgI2luY2x1ZGUgImNvbmZkZWZzLmgiCistLS0KKz4gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKz4gLyogY29uZmRlZnMuaC4gICovCis+IF9BQ0VPRgorPiBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKz4gY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorPiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiszNzkyLDM3OTRjODg0Nyw4ODY5Cis8IEVPRgorPCBpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjM3OTQ6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKKzwgdGhlbgorLS0tCis+IF9BQ0VPRgorPiBybSAtZiBjb25mdGVzdCRhY19leGVleHQKKz4gaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKKz4gY2FzZSAiKCgkYWNfdHJ5IiBpbgorPiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworPiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworPiBlc2FjCis+IGV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIKKz4gJGFzX2VjaG8gIiRhY190cnlfZWNobyIpID4mNQorPiAgIChldmFsICIkYWNfbGluayIpIDI+JjUKKz4gICBhY19zdGF0dXM9JD8KKz4gICAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorPiAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKz4gICB7IChjYXNlICIoKCRhY190cnkiIGluCis+ICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Cis+ICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Cis+IGVzYWMKKz4gZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIgorPiAkYXNfZWNobyAiJGFjX3RyeV9lY2hvIikgPiY1Cis+ICAgKGV2YWwgIiRhY190cnkiKSAyPiY1Cis+ICAgYWNfc3RhdHVzPSQ/Cis+ICAgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKz4gICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorMzc5NywzODAwYzg4NzIsODg3NworPCAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cis8ICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Cis8ICAgcm0gLWZyIGNvbmZ0ZXN0KgorPCAgIGFjX2N2X3NpemVvZl93Y2hhcl90PTAKKy0tLQorPiAgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKz4gc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorPiAKKz4gKCBleGl0ICRhY19zdGF0dXMgKQorPiBhY19jdl9zaXplb2Zfd2NoYXJfdD0wCiszODAyYzg4NzksODg4MAorPCBybSAtZnIgY29uZnRlc3QqCistLS0KKz4gcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKz4gcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiszODA0YTg4ODMKKz4gCiszODA2LDM4MDdjODg4NSw4ODg3Cis8IGVjaG8gIiRhY190IiIkYWNfY3Zfc2l6ZW9mX3djaGFyX3QiIDE+JjYKKzwgY2F0ID4+IGNvbmZkZWZzLmggPDxFT0YKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3djaGFyX3QiID4mNQorPiAkYXNfZWNobyAiJGFjX2N2X3NpemVvZl93Y2hhcl90IiA+JjY7IH0KKz4gY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorMzgwOWM4ODg5Cis8IEVPRgorLS0tCis+IF9BQ0VPRgorMzgxNWM4ODk1LDg4OTcKKzwgCSAgIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogVGhlcmUgaXMgd2NoYXIuaCBidXQgdGhlIHNpemUgb2Ygd2NoYXJfdCBpcyAwIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAJICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFRoZXJlIGlzIHdjaGFyLmggYnV0IHRoZSBzaXplIG9mIHdjaGFyX3QgaXMgMCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBUaGVyZSBpcyB3Y2hhci5oIGJ1dCB0aGUgc2l6ZSBvZiB3Y2hhcl90IGlzIDAiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorMzgyNmM4OTA4Cis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgb3IgLS1kaXNhYmxlLWV4dHJhcyB3YXMgZ2l2ZW4uCistLS0KKz4gIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4dHJhcyB3YXMgZ2l2ZW4uCiszODI4LDM4MjljODkxMAorPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV9leHRyYXMiCis8ICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfZXh0cmFzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCiszODMyYzg5MTMsODkxNQorPCAJCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmFzIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1leHRyYXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmFzIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzM4NDRjODkyNworPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0cmFzIG9yIC0tZGlzYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYXMgd2FzIGdpdmVuLgorMzg0NiwzODQ3Yzg5MjkKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfZXh0cmFzIgorPCAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX2V4dHJhczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMzg1MGM4OTMyLDg5MzQKKzwgCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWljdWlvIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1pY3VpbyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1pY3VpbyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CiszODYzYzg5NDcKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxheW91dCBvciAtLWRpc2FibGUtbGF5b3V0IHdhcyBnaXZlbi4KKy0tLQorPiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGF5b3V0IHdhcyBnaXZlbi4KKzM4NjUsMzg2NmM4OTQ5Cis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX2xheW91dCIKKzwgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV9sYXlvdXQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKzM4NjljODk1Miw4OTU0Cis8IAkJKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1sYXlvdXQiIDE+JjI7IGV4aXQgMTsgfSA7OworLS0tCis+IAkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxheW91dCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1sYXlvdXQiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworMzg4MmM4OTY3LDg5NjgKKzwgIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kYXRhLXBhY2thZ2luZyBvciAtLXdpdGhvdXQtZGF0YS1wYWNrYWdpbmcgd2FzIGdpdmVuLgorLS0tCis+IAorPiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRhdGEtcGFja2FnaW5nIHdhcyBnaXZlbi4KKzM4ODQsMzg4NWM4OTcwCis8ICAgd2l0aHZhbD0iJHdpdGhfZGF0YV9wYWNrYWdpbmciCis8ICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKy0tLQorPiAgIHdpdGh2YWw9JHdpdGhfZGF0YV9wYWNrYWdpbmc7IGNhc2UgIiR7d2l0aHZhbH0iIGluCiszODkxYzg5NzYsODk3OAorPCAJCSopIHsgZWNobyAiY29uZmlndXJlOiBlcnJvcjogYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kYXRhLXBhY2thZ2luZyIgMT4mMjsgZXhpdCAxOyB9IDs7CistLS0KKz4gCQkqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kYXRhLXBhY2thZ2luZyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRhdGEtcGFja2FnaW5nIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzM5MTBjODk5NworPCAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFwcGVkIG9yIC0tZGlzYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYXBwZWQgd2FzIGdpdmVuLgorMzkxMiwzOTEzYzg5OTkKKzwgICBlbmFibGV2YWw9IiRlbmFibGVfbWFwcGVkIgorPCAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKy0tLQorPiAgIGVuYWJsZXZhbD0kZW5hYmxlX21hcHBlZDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMzkxNmM5MDAyLDkwMDQKKzwgICAgICAgICAgICAgICAgKikgeyBlY2hvICJjb25maWd1cmU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tYXBwZWQ7IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgbm93IiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAgICAgICAgICAgICAgICAqKSB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbWFwcGVkOyB1c2UgLS13aXRoLWRhdGEtcGFja2FnaW5nIG5vdyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tYXBwZWQ7IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgbm93IiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKzM5MjZjOTAxNCw5MDE1Cis8ICAgICAJICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1hcmNoaXZlIGluc3RlYWQgb2YgLS1lbmFibGUtbWFwcGVkIiAxPiYyCistLS0KKz4gICAgIAkgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9YXJjaGl2ZSBpbnN0ZWFkIG9mIC0tZW5hYmxlLW1hcHBlZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzZSAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9YXJjaGl2ZSBpbnN0ZWFkIG9mIC0tZW5hYmxlLW1hcHBlZCIgPiYyO30KKzM5MjljOTAxOCw5MDE5Cis8ICAgICAJICAgIGVjaG8gImNvbmZpZ3VyZTogd2FybmluZzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgMT4mMgorLS0tCis+ICAgICAJICAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1c2UgLS13aXRoLWRhdGEtcGFja2FnaW5nPWxpYnJhcnkgaW5zdGVhZCBvZiAtLWRpc2FibGUtbWFwcGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlIC0td2l0aC1kYXRhLXBhY2thZ2luZz1saWJyYXJ5IGluc3RlYWQgb2YgLS1kaXNhYmxlLW1hcHBlZCIgPiYyO30KKzM5MzNjOTAyMyw5MDI1Cis8IAl7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiAxPiYyOyBleGl0IDE7IH0KKy0tLQorPiAJeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvbmZsaWN0aW5nIHZhbHVlcyB1c2VkIGZvciAtLXdpdGgtZGF0YS1wYWNrYWdpbmcgYW5kIGRlcHJlY2F0ZWQgLS1lbmFibGUtbWFwcGVkIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzM5NTksMzk2MWM5MDUxLDkwNTQKKzwgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlIiIuLi4gJGFjX2MiIDE+JjYKKzwgZWNobyAiY29uZmlndXJlOjM5NjE6IGNoZWNraW5nIGZvciBhIGxpYnJhcnkgc3VmZml4IHRvIHVzZSIgPiY1Cis8ICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicmFyeS1zdWZmaXggb3IgLS13aXRob3V0LWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlIiA+JjUKKz4gJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgbGlicmFyeSBzdWZmaXggdG8gdXNlLi4uICIgPiY2OyB9Cis+IAorPiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnJhcnktc3VmZml4IHdhcyBnaXZlbi4KKzM5NjMsMzk2NGM5MDU2Cis8ICAgd2l0aHZhbD0iJHdpdGhfbGlicmFyeV9zdWZmaXgiCis8ICAgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorLS0tCis+ICAgd2l0aHZhbD0kd2l0aF9saWJyYXJ5X3N1ZmZpeDsgSUNVTElCU1VGRklYPSIke3dpdGh2YWx9IgorMzk3M2M5MDY1LDkwNjYKKzwgZWNobyAiJGFjX3QiIiRtc2ciIDE+JjYKKy0tLQorPiB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbXNnIiA+JjUKKz4gJGFzX2VjaG8gIiRtc2ciID4mNjsgfQorMzk4NWM5MDc4Cis8ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyBvciAtLWRpc2FibGUtdGVzdHMgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0cyB3YXMgZ2l2ZW4uCiszOTg3LDM5ODhjOTA4MAorPCAgIGVuYWJsZXZhbD0iJGVuYWJsZV90ZXN0cyIKKzwgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCistLS0KKz4gICBlbmFibGV2YWw9JGVuYWJsZV90ZXN0czsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorMzk5MWM5MDgzLDkwODUKKzwgCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRlc3RzIiAxPiYyOyBleGl0IDE7IH0gOzsKKy0tLQorPiAJCSopIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10ZXN0cyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10ZXN0cyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis0MDA0YzkwOTgKKzwgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNhbXBsZXMgb3IgLS1kaXNhYmxlLXNhbXBsZXMgd2FzIGdpdmVuLgorLS0tCis+ICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zYW1wbGVzIHdhcyBnaXZlbi4KKzQwMDYsNDAwN2M5MTAwCis8ICAgZW5hYmxldmFsPSIkZW5hYmxlX3NhbXBsZXMiCis8ICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorLS0tCis+ICAgZW5hYmxldmFsPSRlbmFibGVfc2FtcGxlczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorNDAxMGM5MTAzLDkxMDUKKzwgCQkqKSB7IGVjaG8gImNvbmZpZ3VyZTogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXNhbXBsZXMiIDE+JjI7IGV4aXQgMTsgfSA7OworLS0tCis+IAkJKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXNhbXBsZXMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc2FtcGxlcyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis0MDY3YzkxNjIKKzwgCSotKi1ocHV4KikgCQorLS0tCis+IAkqLSotaHB1eCopCis0MTEzLDQxMTRjOTIwOCw5MjEwCis8IHRyYXAgJycgMSAyIDE1Cis8IGNhdCA+IGNvbmZjYWNoZSA8PFxFT0YKKy0tLQorPiBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaWN1ZGVmcy5tayBNYWtlZmlsZSBkYXRhL2ljdXBrZy5pbmMgY29uZmlnL01ha2VmaWxlLmluYyBkYXRhL01ha2VmaWxlIHN0dWJkYXRhL01ha2VmaWxlIGNvbW1vbi9NYWtlZmlsZSBpMThuL01ha2VmaWxlIGxheW91dC9NYWtlZmlsZSBsYXlvdXRleC9NYWtlZmlsZSBpby9NYWtlZmlsZSBleHRyYS9NYWtlZmlsZSBleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZSB0b29scy9NYWtlZmlsZSB0b29scy9jdGVzdGZ3L01ha2VmaWxlIHRvb2xzL21ha2Vjb252L01ha2VmaWxlIHRvb2xzL2dlbnJiL01ha2VmaWxlIHRvb2xzL2dlbnVjYS9NYWtlZmlsZSB0b29scy9nZW5jY29kZS9NYWtlZmlsZSB0b29scy9nZW5jbW4vTWFrZWZpbGUgdG9vbHMvZ2VuY252YWwvTWFrZWZpbGUgdG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUgdG9vbHMvZ2VudGVzdC9NYWtlZmlsZSB0b29scy9nZW5ub3JtL01ha2VmaWxlIHRvb2xzL2dlbnByb3BzL01ha2VmaWxlIHRvb2xzL2dlbmNhc2UvTWFrZWZpbGUgdG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUgdG9vbHMvZ2VuYnJrL01ha2VmaWxlIHRvb2xzL2dlbnNwcmVwL01ha2VmaWxlIHRvb2xzL2ljdXN3YXAvTWFrZWZpbGUgdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSB0b29scy90b29sdXRpbC9NYWtlZmlsZSB0b29scy9kdW1wY2UvTWFrZWZpbGUgdGVzdC9NYWtlZmlsZSB0ZXN0L3Rlc3RkYXRhL01ha2VmaWxlIHRlc3QvdGVzdGRhdGEvcGtnZGF0YS5pbmMgdGVzdC9oZHJ0c3QvTWFrZWZpbGUgdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSB0ZXN0L2NpbnRsdHN0L01ha2VmaWxlIHRlc3QvaW90ZXN0L01ha2VmaWxlIHRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgdGVzdC90ZXN0bWFwL01ha2VmaWxlIHRlc3QvbGV0ZXN0L01ha2VmaWxlIHRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBzYW1wbGVzL01ha2VmaWxlIHNhbXBsZXMvZGF0ZS9NYWtlZmlsZSBzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBjb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIgorPiAKKz4gY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCis0MTE3LDQxMThjOTIxMyw5MjE1Cis8ICMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMuICBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuCis8ICMgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorLS0tCis+ICMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCis+ICMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKz4gIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCis0MTIwLDQxMjdjOTIxNyw5MjE4Cis8ICMgQnkgZGVmYXVsdCwgY29uZmlndXJlIHVzZXMgLi9jb25maWcuY2FjaGUgYXMgdGhlIGNhY2hlIGZpbGUsCis8ICMgY3JlYXRpbmcgaXQgaWYgaXQgZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4gIFlvdSBjYW4gZ2l2ZSBjb25maWd1cmUKKzwgIyB0aGUgLS1jYWNoZS1maWxlPUZJTEUgb3B0aW9uIHRvIHVzZSBhIGRpZmZlcmVudCBjYWNoZSBmaWxlOyB0aGF0IGlzCis8ICMgd2hhdCBjb25maWd1cmUgZG9lcyB3aGVuIGl0IGNhbGxzIGNvbmZpZ3VyZSBzY3JpcHRzIGluCis8ICMgc3ViZGlyZWN0b3JpZXMsIHNvIHRoZXkgc2hhcmUgdGhlIGNhY2hlLgorPCAjIEdpdmluZyAtLWNhY2hlLWZpbGU9L2Rldi9udWxsIGRpc2FibGVzIGNhY2hpbmcsIGZvciBkZWJ1Z2dpbmcgY29uZmlndXJlLgorPCAjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdCB0aGUKKzwgIyAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKy0tLQorPiAjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorPiAjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKzQxMjljOTIyMCw5MjI1Cis8IEVPRgorLS0tCis+ICMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorPiAjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCis+ICMgZm9sbG93aW5nIHZhbHVlcy4KKz4gCis+IF9BQ0VPRgorPiAKKzQxMzJjOTIyOAorPCAjIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCistLS0KKz4gIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKzQxMzUsNDE1NGM5MjMxLDkyNzcKKzwgKHNldCkgMj4mMSB8Cis8ICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKzwgICAqYWNfc3BhY2U9XCAqKQorPCAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZSBzdWJzdGl0dXRpb24KKzwgICAgICMgdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCis8ICAgICBzZWQgLW4gXAorPCAgICAgICAtZSAicy8nLydcXFxcJycvZyIgXAorPCAgICAgICAtZSAicy9eXFwoW2EtekEtWjAtOV9dKl9jdl9bYS16QS1aMC05X10qXFwpPVxcKC4qXFwpL1xcMT1cJHtcXDE9J1xcMid9L3AiCis8ICAgICA7OworPCAgICopCis8ICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorPCAgICAgc2VkIC1uIC1lICdzL15cKFthLXpBLVowLTlfXSpfY3ZfW2EtekEtWjAtOV9dKlwpPVwoLipcKS9cMT0ke1wxPVwyfS9wJworPCAgICAgOzsKKzwgICBlc2FjID4+IGNvbmZjYWNoZQorPCBpZiBjbXAgLXMgJGNhY2hlX2ZpbGUgY29uZmNhY2hlOyB0aGVuCis8ICAgOgorPCBlbHNlCis8ICAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorPCAgICAgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCis8ICAgICBjYXQgY29uZmNhY2hlID4gJGNhY2hlX2ZpbGUKKy0tLQorPiAoCis+ICAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworPiAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCis+ICAgICBjYXNlICRhY192YWwgaW4gIygKKz4gICAgICoke2FzX25sfSopCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworPiAgICAgICBlc2FjCis+ICAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorPiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCis+ICAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCis+ICAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7Cis+ICAgICAgIGVzYWMgOzsKKz4gICAgIGVzYWMKKz4gICBkb25lCis+IAorPiAgIChzZXQpIDI+JjEgfAorPiAgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorPiAgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorPiAgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCis+ICAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorPiAgICAgICBzZWQgLW4gXAorPiAJInMvJy8nXFxcXCcnL2c7Cis+IAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKz4gICAgICAgOzsgIygKKz4gICAgICopCis+ICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCis+ICAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCis+ICAgICAgIDs7Cis+ICAgICBlc2FjIHwKKz4gICAgIHNvcnQKKz4gKSB8Cis+ICAgc2VkICcKKz4gICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKz4gICAgICB0IGNsZWFyCis+ICAgICAgOmNsZWFyCis+ICAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworPiAgICAgIHQgZW5kCis+ICAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCis+ICAgICAgOmVuZCcgPj5jb25mY2FjaGUKKz4gaWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorPiAgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorPiAgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Cis+ICAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorNDE1NmM5Mjc5LDkyODAKKzwgICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorLS0tCis+ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKzQxNjEsNDE2MmQ5Mjg0Cis8IHRyYXAgJ3JtIC1mciBjb25mdGVzdCogY29uZmRlZnMqIGNvcmUgY29yZS4qICouY29yZSAkYWNfY2xlYW5fZmlsZXM7IGV4aXQgMScgMSAyIDE1Cis8IAorNDE2Nyw0MTcyYzkyODkKKzwgIyBBbnkgYXNzaWdubWVudCB0byBWUEFUSCBjYXVzZXMgU3VuIG1ha2UgdG8gb25seSBleGVjdXRlCis8ICMgdGhlIGZpcnN0IHNldCBvZiBkb3VibGUtY29sb24gcnVsZXMsIHNvIHJlbW92ZSBpdCBpZiBub3QgbmVlZGVkLgorPCAjIElmIHRoZXJlIGlzIGEgY29sb24gaW4gdGhlIHBhdGgsIHdlIG5lZWQgdG8ga2VlcCBpdC4KKzwgaWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKzwgICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9W146XSokL2QnCis8IGZpCistLS0KKz4gREVGUz0tREhBVkVfQ09ORklHX0gKKzQxNzRjOTI5MSw5MzAyCis8IHRyYXAgJ3JtIC1mICRDT05GSUdfU1RBVFVTIGNvbmZ0ZXN0KjsgZXhpdCAxJyAxIDIgMTUKKy0tLQorPiBhY19saWJvYmpzPQorPiBhY19sdGxpYm9ianM9Cis+IGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorPiAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKz4gICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKz4gICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKz4gICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCis+ICAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCis+ICAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCis+ICAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCis+IGRvbmUKKz4gTElCT0JKUz0kYWNfbGlib2JqcworNDE3NmM5MzA0Cis8IERFRlM9LURIQVZFX0NPTkZJR19ICistLS0KKz4gTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKzQxNzgsNDE3OWQ5MzA1Cis8ICMgV2l0aG91dCB0aGUgIi4vIiwgc29tZSBzaGVsbHMgbG9vayBpbiBQQVRIIGZvciBjb25maWcuc3RhdHVzLgorPCA6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9Cis0MTgxLDQxODVjOTMwNyw5MzE3Cis8IGVjaG8gY3JlYXRpbmcgJENPTkZJR19TVEFUVVMKKzwgcm0gLWYgJENPTkZJR19TVEFUVVMKKzwgY2F0ID4gJENPTkZJR19TVEFUVVMgPDxFT0YKKzwgIyEgL2Jpbi9zaAorPCAjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZS4KKy0tLQorPiAKKz4gCis+IDogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KKz4gYWNfd3JpdGVfZmFpbD0wCis+IGFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCis+IGFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCis+IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorPiBjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiAjISAkU0hFTEwKKz4gIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorNDE4Nyw0MTkxZDkzMTgKKzwgIyBUaGlzIGRpcmVjdG9yeSB3YXMgY29uZmlndXJlZCBhcyBmb2xsb3dzLAorPCAjIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorPCAjCis8ICMgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzCis8ICMKKzQxOTNjOTMyMAorPCAjIGNvbmZpZ3VyZSwgaXMgaW4gLi9jb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKy0tLQorPiAjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCis0MTk1LDQxOTZjOTMyMiw5NDIwCis8IGFjX2NzX3VzYWdlPSJVc2FnZTogJENPTkZJR19TVEFUVVMgWy0tcmVjaGVja10gWy0tdmVyc2lvbl0gWy0taGVscF0iCis8IGZvciBhY19vcHRpb24KKy0tLQorPiBkZWJ1Zz1mYWxzZQorPiBhY19jc19yZWNoZWNrPWZhbHNlCis+IGFjX2NzX3NpbGVudD1mYWxzZQorPiBTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorPiBfQUNFT0YKKz4gCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCis+ICMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworPiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKz4gCis+ICMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorPiBEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCis+IGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorPiAgIGVtdWxhdGUgc2gKKz4gICBOVUxMQ01EPToKKz4gICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKz4gICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorPiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworPiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCis+IGVsc2UKKz4gICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKz4gICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKz4gZXNhYworPiAKKz4gZmkKKz4gCis+IAorPiAKKz4gCis+ICMgUEFUSCBuZWVkcyBDUgorPiAjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCis+IGFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworPiBhc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKKz4gYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCis+IGFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKKz4gYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCis+IAorPiBhc19ubD0nCis+ICcKKz4gZXhwb3J0IGFzX25sCis+ICMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCis+IGFzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCis+IGFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworPiBhc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworPiBpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorPiAgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworPiAgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworPiBlbHNlCis+ICAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCis+ICAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworPiAgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworPiAgIGVsc2UKKz4gICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCis+ICAgICBhc19lY2hvX25fYm9keT0nZXZhbAorPiAgICAgICBhcmc9JDE7Cis+ICAgICAgIGNhc2UgJGFyZyBpbgorPiAgICAgICAqIiRhc19ubCIqKQorPiAJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7Cis+IAlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworPiAgICAgICBlc2FjOworPiAgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCis+ICAgICAnCis+ICAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKz4gICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCis+ICAgZmkKKz4gICBleHBvcnQgYXNfZWNob19ib2R5Cis+ICAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworPiBmaQorPiAKKz4gIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCis+IGlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCis+ICAgUEFUSF9TRVBBUkFUT1I9OgorPiAgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKz4gICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8Cis+ICAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworPiAgIH0KKz4gZmkKKz4gCis+ICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorPiBpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBhc191bnNldD11bnNldAorPiBlbHNlCis+ICAgYXNfdW5zZXQ9ZmFsc2UKKz4gZmkKKz4gCis+IAorPiAjIElGUworPiAjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworPiAjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKz4gIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCis+ICMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKKz4gSUZTPSIgIiIJJGFzX25sIgorPiAKKz4gIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KKz4gY2FzZSAkMCBpbgorPiAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKz4gICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCis+IGZvciBhc19kaXIgaW4gJFBBVEgKKzQxOTgsNDIwOGM5NDIyLDk0MjQKKzwgICBjYXNlICJcJGFjX29wdGlvbiIgaW4KKzwgICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKzwgICAgIGVjaG8gInJ1bm5pbmcgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIKKzwgICAgIGV4ZWMgXCR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICQwICRhY19jb25maWd1cmVfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiA7OworPCAgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12KQorPCAgICAgZWNobyAiJENPTkZJR19TVEFUVVMgZ2VuZXJhdGVkIGJ5IGF1dG9jb25mIHZlcnNpb24gMi4xMyIKKzwgICAgIGV4aXQgMCA7OworPCAgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLS1oKQorPCAgICAgZWNobyAiXCRhY19jc191c2FnZSI7IGV4aXQgMCA7OworPCAgICopIGVjaG8gIlwkYWNfY3NfdXNhZ2UiOyBleGl0IDEgOzsKKzwgICBlc2FjCistLS0KKz4gICBJRlM9JGFzX3NhdmVfSUZTCis+ICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKz4gICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworNDIwOWE5NDI2Cis+IElGUz0kYXNfc2F2ZV9JRlMKKzQyMTEsNDIxMmM5NDI4LDk0MzgKKzwgYWNfZ2l2ZW5fc3JjZGlyPSRzcmNkaXIKKzwgYWNfZ2l2ZW5fSU5TVEFMTD0iJElOU1RBTEwiCistLS0KKz4gICAgICA7OworPiBlc2FjCis+ICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKz4gIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCis+IGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKz4gICBhc19teXNlbGY9JDAKKz4gZmkKKz4gaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorPiAgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCis+ICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cis+IGZpCis0MjE0LDQzOTNjOTQ0MCw5NTc3Cis8IHRyYXAgJ3JtIC1mciBgZWNobyAiaWN1ZGVmcy5tayBcCis8IAkJTWFrZWZpbGUgXAorPCAJCWRhdGEvaWN1cGtnLmluYyBcCis8IAkJY29uZmlnL01ha2VmaWxlLmluYyBcCis8IAkJZGF0YS9NYWtlZmlsZSBcCis8IAkJc3R1YmRhdGEvTWFrZWZpbGUgXAorPCAJCWNvbW1vbi9NYWtlZmlsZSBcCis8IAkJaTE4bi9NYWtlZmlsZSBcCis8IAkJbGF5b3V0L01ha2VmaWxlIFwKKzwgCQlsYXlvdXRleC9NYWtlZmlsZSBcCis8IAkJaW8vTWFrZWZpbGUgXAorPCAJCWV4dHJhL01ha2VmaWxlIFwKKzwgCQlleHRyYS91Y29udi9NYWtlZmlsZSBleHRyYS9zY3JwdHJ1bi9NYWtlZmlsZSBcCis8IAkJdG9vbHMvTWFrZWZpbGUgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSBcCis8IAkJdG9vbHMvbWFrZWNvbnYvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnJiL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW51Y2EvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jbW4vTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbmNudmFsL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5uYW1lcy9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VudGVzdC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VucHJvcHMvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbmNhc2UvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnBuYW1lL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5icmsvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnNwcmVwL01ha2VmaWxlIFwKKzwgCQl0b29scy9pY3Vzd2FwL01ha2VmaWxlIFwKKzwgCQl0b29scy9wa2dkYXRhL01ha2VmaWxlIFwKKzwgCQl0b29scy90b29sdXRpbC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZHVtcGNlL01ha2VmaWxlIFwKKzwgCQl0ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3Rlc3RkYXRhL01ha2VmaWxlIFwKKzwgCQl0ZXN0L3Rlc3RkYXRhL3BrZ2RhdGEuaW5jIFwKKzwgCQl0ZXN0L2hkcnRzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC9pbnRsdGVzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC9jaW50bHRzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC9pb3Rlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvdGhhaXRlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvdGVzdG1hcC9NYWtlZmlsZSBcCis8IAkJdGVzdC9sZXRlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvdGhyZWFkdGVzdC9NYWtlZmlsZSBcCis8IAkJc2FtcGxlcy9NYWtlZmlsZSBzYW1wbGVzL2RhdGUvTWFrZWZpbGUgXAorPCAJCXNhbXBsZXMvY2FsL01ha2VmaWxlIHNhbXBsZXMvbGF5b3V0L01ha2VmaWxlIFwKKzwgCQljb21tb24vdW5pY29kZS9wbGF0Zm9ybS5oIGNvbW1vbi9pY3VjZmcuaCIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQorPCBFT0YKKzwgY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8RU9GCis8IAorPCAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorPCBzZWQgJ3MvJUAvQEAvOyBzL0AlL0BALzsgcy8lZ1wkL0BnLzsgL0BnXCQvcy9bXFxcXCYlXS9cXFxcJi9nOworPCAgcy9AQC8lQC87IHMvQEAvQCUvOyBzL0BnXCQvJWcvJyA+IGNvbmZ0ZXN0LnN1YnMgPDxcXENFT0YKKzwgJGFjX3Zwc3ViCis8ICRleHRyYXN1YgorPCBzJUBTSEVMTEAlJFNIRUxMJWcKKzwgcyVAQ0ZMQUdTQCUkQ0ZMQUdTJWcKKzwgcyVAQ1BQRkxBR1NAJSRDUFBGTEFHUyVnCis8IHMlQENYWEZMQUdTQCUkQ1hYRkxBR1MlZworPCBzJUBGRkxBR1NAJSRGRkxBR1MlZworPCBzJUBERUZTQCUkREVGUyVnCis8IHMlQExERkxBR1NAJSRMREZMQUdTJWcKKzwgcyVATElCU0AlJExJQlMlZworPCBzJUBleGVjX3ByZWZpeEAlJGV4ZWNfcHJlZml4JWcKKzwgcyVAcHJlZml4QCUkcHJlZml4JWcKKzwgcyVAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAlJHByb2dyYW1fdHJhbnNmb3JtX25hbWUlZworPCBzJUBiaW5kaXJAJSRiaW5kaXIlZworPCBzJUBzYmluZGlyQCUkc2JpbmRpciVnCis8IHMlQGxpYmV4ZWNkaXJAJSRsaWJleGVjZGlyJWcKKzwgcyVAZGF0YWRpckAlJGRhdGFkaXIlZworPCBzJUBzeXNjb25mZGlyQCUkc3lzY29uZmRpciVnCis8IHMlQHNoYXJlZHN0YXRlZGlyQCUkc2hhcmVkc3RhdGVkaXIlZworPCBzJUBsb2NhbHN0YXRlZGlyQCUkbG9jYWxzdGF0ZWRpciVnCis8IHMlQGxpYmRpckAlJGxpYmRpciVnCis8IHMlQGluY2x1ZGVkaXJAJSRpbmNsdWRlZGlyJWcKKzwgcyVAb2xkaW5jbHVkZWRpckAlJG9sZGluY2x1ZGVkaXIlZworPCBzJUBpbmZvZGlyQCUkaW5mb2RpciVnCis8IHMlQG1hbmRpckAlJG1hbmRpciVnCis8IHMlQFBBQ0tBR0VAJSRQQUNLQUdFJWcKKzwgcyVAVkVSU0lPTkAlJFZFUlNJT04lZworPCBzJUBMSUJfVkVSU0lPTkAlJExJQl9WRVJTSU9OJWcKKzwgcyVATElCX1ZFUlNJT05fTUFKT1JAJSRMSUJfVkVSU0lPTl9NQUpPUiVnCis8IHMlQFVOSUNPREVfVkVSU0lPTkAlJFVOSUNPREVfVkVSU0lPTiVnCis8IHMlQENDQCUkQ0MlZworPCBzJUBDWFhAJSRDWFglZworPCBzJUBJTlNUQUxMX1BST0dSQU1AJSRJTlNUQUxMX1BST0dSQU0lZworPCBzJUBJTlNUQUxMX1NDUklQVEAlJElOU1RBTExfU0NSSVBUJWcKKzwgcyVASU5TVEFMTF9EQVRBQCUkSU5TVEFMTF9EQVRBJWcKKzwgcyVAU1RSSVBAJSRTVFJJUCVnCis8IHMlQFVfTUFLRUAlJFVfTUFLRSVnCis8IHMlQERPWFlHRU5AJSRET1hZR0VOJWcKKzwgcyVAaG9zdEAlJGhvc3QlZworPCBzJUBob3N0X2FsaWFzQCUkaG9zdF9hbGlhcyVnCis8IHMlQGhvc3RfY3B1QCUkaG9zdF9jcHUlZworPCBzJUBob3N0X3ZlbmRvckAlJGhvc3RfdmVuZG9yJWcKKzwgcyVAaG9zdF9vc0AlJGhvc3Rfb3MlZworPCBzJUBFWEVFWFRAJSRFWEVFWFQlZworPCBzJUBBUkZMQUdTQCUkQVJGTEFHUyVnCis8IHMlQENPTVBJTEVfTElOS19FTlZWQVJAJSRDT01QSUxFX0xJTktfRU5WVkFSJWcKKzwgcyVATElCX01AJSRMSUJfTSVnCis8IHMlQEVOQUJMRV9TSEFSRURAJSRFTkFCTEVfU0hBUkVEJWcKKzwgcyVARU5BQkxFX1NUQVRJQ0AlJEVOQUJMRV9TVEFUSUMlZworPCBzJUBFTkFCTEVfREVCVUdAJSRFTkFCTEVfREVCVUclZworPCBzJUBFTkFCTEVfUkVMRUFTRUAlJEVOQUJMRV9SRUxFQVNFJWcKKzwgcyVAUkFOTElCQCUkUkFOTElCJWcKKzwgcyVAQVJAJSRBUiVnCis8IHMlQFVfRElTQUJMRV9SRU5BTUlOR0AlJFVfRElTQUJMRV9SRU5BTUlORyVnCis8IHMlQFVfRU5BQkxFX1RSQUNJTkdAJSRVX0VOQUJMRV9UUkFDSU5HJWcKKzwgcyVARU5BQkxFX1JQQVRIQCUkRU5BQkxFX1JQQVRIJWcKKzwgcyVAVV9JTkxJTkVAJSRVX0lOTElORSVnCis8IHMlQFRIUkVBRFNfVFJVRUAlJFRIUkVBRFNfVFJVRSVnCis8IHMlQElDVV9VU0VfVEhSRUFEU0AlJElDVV9VU0VfVEhSRUFEUyVnCis8IHMlQEhBVkVfTU1BUEAlJEhBVkVfTU1BUCVnCis8IHMlQEdFTkNDT0RFX0FTU0VNQkxZQCUkR0VOQ0NPREVfQVNTRU1CTFklZworPCBzJUBDUFBAJSRDUFAlZworPCBzJUBVX0hBVkVfSU5UVFlQRVNfSEAlJFVfSEFWRV9JTlRUWVBFU19IJWcKKzwgcyVAQ1hYQ1BQQCUkQ1hYQ1BQJWcKKzwgcyVAVV9JT1NUUkVBTV9TT1VSQ0VAJSRVX0lPU1RSRUFNX1NPVVJDRSVnCis8IHMlQFVfSVNfQklHX0VORElBTkAlJFVfSVNfQklHX0VORElBTiVnCis8IHMlQFVfSEFWRV9OTF9MQU5HSU5GT0AlJFVfSEFWRV9OTF9MQU5HSU5GTyVnCis8IHMlQFVfSEFWRV9OTF9MQU5HSU5GT19DT0RFU0VUQCUkVV9IQVZFX05MX0xBTkdJTkZPX0NPREVTRVQlZworPCBzJUBVX05MX0xBTkdJTkZPX0NPREVTRVRAJSRVX05MX0xBTkdJTkZPX0NPREVTRVQlZworPCBzJUBVX0hBVkVfTkFNRVNQQUNFQCUkVV9IQVZFX05BTUVTUEFDRSVnCis8IHMlQFVfT1ZFUlJJREVfQ1hYX0FMTE9DQVRJT05AJSRVX09WRVJSSURFX0NYWF9BTExPQ0FUSU9OJWcKKzwgcyVAVV9IQVZFX1BMQUNFTUVOVF9ORVdAJSRVX0hBVkVfUExBQ0VNRU5UX05FVyVnCis8IHMlQFVfSEFWRV9QT1BFTkAlJFVfSEFWRV9QT1BFTiVnCis8IHMlQFVfSEFWRV9UWlNFVEAlJFVfSEFWRV9UWlNFVCVnCis8IHMlQFVfVFpTRVRAJSRVX1RaU0VUJWcKKzwgcyVAVV9IQVZFX1RaTkFNRUAlJFVfSEFWRV9UWk5BTUUlZworPCBzJUBVX1RaTkFNRUAlJFVfVFpOQU1FJWcKKzwgcyVAVV9IQVZFX1RJTUVaT05FQCUkVV9IQVZFX1RJTUVaT05FJWcKKzwgcyVAVV9USU1FWk9ORUAlJFVfVElNRVpPTkUlZworPCBzJUBIQVZFX0lOVDhfVEAlJEhBVkVfSU5UOF9UJWcKKzwgcyVASEFWRV9VSU5UOF9UQCUkSEFWRV9VSU5UOF9UJWcKKzwgcyVASEFWRV9JTlQxNl9UQCUkSEFWRV9JTlQxNl9UJWcKKzwgcyVASEFWRV9VSU5UMTZfVEAlJEhBVkVfVUlOVDE2X1QlZworPCBzJUBIQVZFX0lOVDMyX1RAJSRIQVZFX0lOVDMyX1QlZworPCBzJUBIQVZFX1VJTlQzMl9UQCUkSEFWRV9VSU5UMzJfVCVnCis8IHMlQEhBVkVfSU5UNjRfVEAlJEhBVkVfSU5UNjRfVCVnCis8IHMlQEhBVkVfVUlOVDY0X1RAJSRIQVZFX1VJTlQ2NF9UJWcKKzwgcyVAVV9IQVZFX1dDSEFSX0hAJSRVX0hBVkVfV0NIQVJfSCVnCis8IHMlQFVfSEFWRV9XQ1NDUFlAJSRVX0hBVkVfV0NTQ1BZJWcKKzwgcyVAVV9TSVpFT0ZfV0NIQVJfVEAlJFVfU0laRU9GX1dDSEFSX1QlZworPCBzJUBFWFRSQVNfVFJVRUAlJEVYVFJBU19UUlVFJWcKKzwgcyVASUNVSU9fVFJVRUAlJElDVUlPX1RSVUUlZworPCBzJUBMQVlPVVRfVFJVRUAlJExBWU9VVF9UUlVFJWcKKzwgcyVAdGhlc3lzY29uZmRpckAlJHRoZXN5c2NvbmZkaXIlZworPCBzJUB0aGVkYXRhZGlyQCUkdGhlZGF0YWRpciVnCis8IHMlQHRoZWxpYmRpckAlJHRoZWxpYmRpciVnCis8IHMlQHBrZ2ljdWRhdGFkaXJAJSRwa2dpY3VkYXRhZGlyJWcKKzwgcyVAdGhlcGtnaWN1ZGF0YWRpckAlJHRoZXBrZ2ljdWRhdGFkaXIlZworPCBzJUBEQVRBX1BBQ0tBR0lOR19DUFBGTEFHU0AlJERBVEFfUEFDS0FHSU5HX0NQUEZMQUdTJWcKKzwgcyVAREFUQV9QQUNLQUdJTkdfTU9ERUAlJERBVEFfUEFDS0FHSU5HX01PREUlZworPCBzJUBJQ1VMSUJTVUZGSVhAJSRJQ1VMSUJTVUZGSVglZworPCBzJUBVX0hBVkVfTElCX1NVRkZJWEAlJFVfSEFWRV9MSUJfU1VGRklYJWcKKzwgcyVASUNVTElCU1VGRklYQ05BTUVAJSRJQ1VMSUJTVUZGSVhDTkFNRSVnCis8IHMlQFRFU1RTX1RSVUVAJSRURVNUU19UUlVFJWcKKzwgcyVAU0FNUExFU19UUlVFQCUkU0FNUExFU19UUlVFJWcKKzwgcyVASUNVREFUQV9DSEFSQCUkSUNVREFUQV9DSEFSJWcKKzwgcyVAcGxhdGZvcm1AJSRwbGF0Zm9ybSVnCis8IHMlQHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZUAlJHBsYXRmb3JtX21ha2VfZnJhZ21lbnRfbmFtZSVnCis8IHMlQHBsYXRmb3JtX21ha2VfZnJhZ21lbnRAJSRwbGF0Zm9ybV9tYWtlX2ZyYWdtZW50JWcKKzwgcyVAbGRfcnBhdGhfc3VmQCUkbGRfcnBhdGhfc3VmJWcKKzwgcyVAQUlYX1NITElCQCUkQUlYX1NITElCJWcKKzwgCis8IENFT0YKKzwgRU9GCis8IAorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8IAorPCAjIFNwbGl0IHRoZSBzdWJzdGl0dXRpb25zIGludG8gYml0ZS1zaXplZCBwaWVjZXMgZm9yIHNlZHMgd2l0aAorPCAjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KKzwgYWNfbWF4X3NlZF9jbWRzPTkwICMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2VkIHNjcmlwdC4KKzwgYWNfZmlsZT0xICMgTnVtYmVyIG9mIGN1cnJlbnQgZmlsZS4KKzwgYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCis8IGFjX2VuZD0kYWNfbWF4X3NlZF9jbWRzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKzwgYWNfbW9yZV9saW5lcz06Cis8IGFjX3NlZF9jbWRzPSIiCis8IHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbworPCAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgorPCAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiIGNvbmZ0ZXN0LnN1YnMgPiBjb25mdGVzdC5zJGFjX2ZpbGUKKy0tLQorPiAjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKz4gZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorPiBkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorPiBkb25lCis+IFBTMT0nJCAnCis+IFBTMj0nPiAnCis+IFBTND0nKyAnCis+IAorPiAjIE5MUyBudWlzYW5jZXMuCis+IExDX0FMTD1DCis+IGV4cG9ydCBMQ19BTEwKKz4gTEFOR1VBR0U9QworPiBleHBvcnQgTEFOR1VBR0UKKz4gCis+ICMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorPiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorPiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorPiAgIGFzX2V4cHI9ZXhwcgorPiBlbHNlCis+ICAgYXNfZXhwcj1mYWxzZQorPiBmaQorPiAKKz4gaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorPiAgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCis+IGVsc2UKKz4gICBhc19iYXNlbmFtZT1mYWxzZQorPiBmaQorPiAKKz4gCis+ICMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KKz4gYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Cis+ICRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCis+IAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKz4gJGFzX2VjaG8gWC8iJDAiIHwKKz4gICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcL1woXC9cL1wpJC97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIC9eWFwvXChcL1wpLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICBzLy4qLy4vOyBxJ2AKKz4gCis+ICMgQ0RQQVRILgorPiAkYXNfdW5zZXQgQ0RQQVRICis+IAorPiAKKz4gCis+ICAgYXNfbGluZW5vXzE9JExJTkVOTworPiAgIGFzX2xpbmVub18yPSRMSU5FTk8KKz4gICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKz4gICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiIHx8IHsKKz4gCis+ICAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworPiAgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKz4gICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKKz4gICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAorPiAgICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKKz4gICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCis+ICAgIyBjYXNlIGF0IGxpbmUgZW5kLgorPiAgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorPiAgICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQorPiAgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCis+ICAgc2VkIC1uICcKKz4gICAgIHAKKz4gICAgIC9bJF1MSU5FTk8vPQorPiAgICcgPCRhc19teXNlbGYgfAorPiAgICAgc2VkICcKKz4gICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKz4gICAgICAgdCBsaW5lbm8KKz4gICAgICAgYgorPiAgICAgICA6bGluZW5vCis+ICAgICAgIE4KKz4gICAgICAgOmxvb3AKKz4gICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCis+ICAgICAgIHQgbG9vcAorPiAgICAgICBzLy1cbi4qLy8KKz4gICAgICcgPiRhc19tZS5saW5lbm8gJiYKKz4gICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+IAorPiAgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCis+ICAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCis+ICAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKz4gICAuICIuLyRhc19tZS5saW5lbm8iCis+ICAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCis+ICAgZXhpdAorPiB9Cis+IAorPiAKKz4gaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCis+ICAgYXNfZGlybmFtZT1kaXJuYW1lCis+IGVsc2UKKz4gICBhc19kaXJuYW1lPWZhbHNlCis+IGZpCis+IAorPiBFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorPiBjYXNlIGBlY2hvIC1uIHhgIGluCis+IC1uKikKKz4gICBjYXNlIGBlY2hvICd4XGMnYCBpbgorPiAgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorPiAgICopICAgRUNIT19DPSdcYyc7OworPiAgIGVzYWM7OworPiAqKQorPiAgIEVDSE9fTj0nLW4nOzsKKz4gZXNhYworPiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorPiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorPiAgIGFzX2V4cHI9ZXhwcgorPiBlbHNlCis+ICAgYXNfZXhwcj1mYWxzZQorPiBmaQorPiAKKz4gcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKz4gaWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCis+ICAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorPiBlbHNlCis+ICAgcm0gLWYgY29uZiQkLmRpcgorPiAgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKz4gZmkKKz4gaWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorPiAgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorPiAgICAgYXNfbG5fcz0nbG4gLXMnCis+ICAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorPiAgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKz4gICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorPiAgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKz4gICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKz4gICAgICAgYXNfbG5fcz0nY3AgLXAnCis+ICAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKz4gICAgIGFzX2xuX3M9bG4KKzQzOTVjOTU3OQorPCAgICAgc2VkICIke2FjX2VuZH1xIiBjb25mdGVzdC5zdWJzID4gY29uZnRlc3QucyRhY19maWxlCistLS0KKz4gICAgIGFzX2xuX3M9J2NwIC1wJworNDM5Nyw0NDcyYzk1ODEsOTU4NQorPCAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5zJGFjX2ZpbGU7IHRoZW4KKzwgICAgIGFjX21vcmVfbGluZXM9ZmFsc2UKKzwgICAgIHJtIC1mIGNvbmZ0ZXN0LnMkYWNfZmlsZQorPCAgIGVsc2UKKzwgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKzwgICAgICAgYWNfc2VkX2NtZHM9InNlZCAtZiBjb25mdGVzdC5zJGFjX2ZpbGUiCis8ICAgICBlbHNlCis8ICAgICAgIGFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgY29uZnRlc3QucyRhY19maWxlIgorPCAgICAgZmkKKzwgICAgIGFjX2ZpbGU9YGV4cHIgJGFjX2ZpbGUgKyAxYAorPCAgICAgYWNfYmVnPSRhY19lbmQKKzwgICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfY21kc2AKKzwgICBmaQorPCBkb25lCis8IGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKzwgICBhY19zZWRfY21kcz1jYXQKKzwgZmkKKzwgRU9GCis8IAorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKzwgCis8IENPTkZJR19GSUxFUz1cJHtDT05GSUdfRklMRVMtImljdWRlZnMubWsgXAorPCAJCU1ha2VmaWxlIFwKKzwgCQlkYXRhL2ljdXBrZy5pbmMgXAorPCAJCWNvbmZpZy9NYWtlZmlsZS5pbmMgXAorPCAJCWRhdGEvTWFrZWZpbGUgXAorPCAJCXN0dWJkYXRhL01ha2VmaWxlIFwKKzwgCQljb21tb24vTWFrZWZpbGUgXAorPCAJCWkxOG4vTWFrZWZpbGUgXAorPCAJCWxheW91dC9NYWtlZmlsZSBcCis8IAkJbGF5b3V0ZXgvTWFrZWZpbGUgXAorPCAJCWlvL01ha2VmaWxlIFwKKzwgCQlleHRyYS9NYWtlZmlsZSBcCis8IAkJZXh0cmEvdWNvbnYvTWFrZWZpbGUgZXh0cmEvc2NycHRydW4vTWFrZWZpbGUgXAorPCAJCXRvb2xzL01ha2VmaWxlIHRvb2xzL2N0ZXN0ZncvTWFrZWZpbGUgXAorPCAJCXRvb2xzL21ha2Vjb252L01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5yYi9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VudWNhL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jY29kZS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VuY21uL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jbnZhbC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnRlc3QvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbm5vcm0vTWFrZWZpbGUgXAorPCAJCXRvb2xzL2dlbnByb3BzL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5jYXNlL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5wbmFtZS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvZ2VuYnJrL01ha2VmaWxlIFwKKzwgCQl0b29scy9nZW5zcHJlcC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvaWN1c3dhcC9NYWtlZmlsZSBcCis8IAkJdG9vbHMvcGtnZGF0YS9NYWtlZmlsZSBcCis8IAkJdG9vbHMvdG9vbHV0aWwvTWFrZWZpbGUgXAorPCAJCXRvb2xzL2R1bXBjZS9NYWtlZmlsZSBcCis8IAkJdGVzdC9NYWtlZmlsZSBcCis8IAkJdGVzdC90ZXN0ZGF0YS9NYWtlZmlsZSBcCis8IAkJdGVzdC90ZXN0ZGF0YS9wa2dkYXRhLmluYyBcCis8IAkJdGVzdC9oZHJ0c3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvaW50bHRlc3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvY2ludGx0c3QvTWFrZWZpbGUgXAorPCAJCXRlc3QvaW90ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3Rlc3RtYXAvTWFrZWZpbGUgXAorPCAJCXRlc3QvbGV0ZXN0L01ha2VmaWxlIFwKKzwgCQl0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUgXAorPCAJCXNhbXBsZXMvTWFrZWZpbGUgc2FtcGxlcy9kYXRlL01ha2VmaWxlIFwKKzwgCQlzYW1wbGVzL2NhbC9NYWtlZmlsZSBzYW1wbGVzL2xheW91dC9NYWtlZmlsZSBcCis8IAkJY29tbW9uL3VuaWNvZGUvcGxhdGZvcm0uaCJ9Cis8IEVPRgorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8IGZvciBhY19maWxlIGluIC4uICRDT05GSUdfRklMRVM7IGRvIGlmIHRlc3QgIngkYWNfZmlsZSIgIT0geC4uOyB0aGVuCis8ICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorPCAgIGNhc2UgIiRhY19maWxlIiBpbgorPCAgICo6KikgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyVbXjpdKjolJSdgCis8ICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKzwgICAqKSBhY19maWxlX2luPSIke2FjX2ZpbGV9LmluIiA7OworPCAgIGVzYWMKKy0tLQorPiBlbHNlCis+ICAgYXNfbG5fcz0nY3AgLXAnCis+IGZpCis+IHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKKz4gcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorNDQ3NGM5NTg3LDk1OTIKKzwgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2RpciwgdG9wX3NyY2RpciwgYW5kIElOU1RBTEwgZm9yIHN1YmRpcmVjdG9yaWVzLgorLS0tCis+IGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKz4gICBhc19ta2Rpcl9wPToKKz4gZWxzZQorPiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCis+ICAgYXNfbWtkaXJfcD1mYWxzZQorPiBmaQorNDQ3Niw0NDgzYzk1OTQsOTU5OAorPCAgICMgUmVtb3ZlIGxhc3Qgc2xhc2ggYW5kIGFsbCB0aGF0IGZvbGxvd3MgaXQuICBOb3QgYWxsIHN5c3RlbXMgaGF2ZSBkaXJuYW1lLgorPCAgIGFjX2Rpcj1gZWNobyAkYWNfZmlsZXxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCis8ICAgaWYgdGVzdCAiJGFjX2RpciIgIT0gIiRhY19maWxlIiAmJiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCis8ICAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorPCAgICAgdGVzdCAhIC1kICIkYWNfZGlyIiAmJiBta2RpciAiJGFjX2RpciIKKzwgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAkYWNfZGlyfHNlZCAncyVeXC4vJSUnYCIKKzwgICAgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCis8ICAgICBhY19kb3RzPWBlY2hvICRhY19kaXJfc3VmZml4fHNlZCAncyUvW14vXSolLi4vJWcnYAorLS0tCis+IGlmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBhc190ZXN0X3g9J3Rlc3QgLXgnCis+IGVsc2UKKz4gICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICAgIGFzX2xzX0xfb3B0aW9uPUwKKzQ0ODVjOTYwMAorPCAgICAgYWNfZGlyX3N1ZmZpeD0gYWNfZG90cz0KKy0tLQorPiAgICAgYXNfbHNfTF9vcHRpb249Cis0NDg2YTk2MDIsOTYzNworPiAgIGFzX3Rlc3RfeD0nCis+ICAgICBldmFsIHNoIC1jICdcJycKKz4gICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCis+IAl0ZXN0IC1kICIkMS8uIjsKKz4gICAgICAgZWxzZQorPiAJY2FzZSAkMSBpbgorPiAJLSopc2V0ICIuLyQxIjs7Cis+IAllc2FjOworPiAJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKz4gCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKz4gICAgICdcJycgc2gKKz4gICAnCis+IGZpCis+IGFzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94Cis+IAorPiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCis+IGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCis+IAorPiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKz4gYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKz4gCis+IAorPiBleGVjIDY+JjEKKz4gCis+ICMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCis+ICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorPiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorPiBhY19sb2c9IgorPiBUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCis+IGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42My4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworPiAKKz4gICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCis+ICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCis+ICAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworPiAgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKz4gICAkICQwICRACis0NDg4LDQ0OTZjOTYzOSw5NjUwCis8ICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKzwgICAuKSAgc3JjZGlyPS4KKzwgICAgICAgaWYgdGVzdCAteiAiJGFjX2RvdHMiOyB0aGVuIHRvcF9zcmNkaXI9LgorPCAgICAgICBlbHNlIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYDsgZmkgOzsKKzwgICAvKikgc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyJGFjX2Rpcl9zdWZmaXgiOyB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworPCAgICopICMgUmVsYXRpdmUgcGF0aC4KKzwgICAgIHNyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyJGFjX2Rpcl9zdWZmaXgiCis8ICAgICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7Cis8ICAgZXNhYworLS0tCis+IG9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorPiAiCis+IAorPiBfQUNFT0YKKz4gCis+IGNhc2UgJGFjX2NvbmZpZ19maWxlcyBpbiAqIgorPiAiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Cis+IGVzYWMKKz4gCis+IGNhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCis+ICIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Cis+IGVzYWMKKzQ0OTgsNDUwMWQ5NjUxCis8ICAgY2FzZSAiJGFjX2dpdmVuX0lOU1RBTEwiIGluCis8ICAgWy8kXSopIElOU1RBTEw9IiRhY19naXZlbl9JTlNUQUxMIiA7OworPCAgICopIElOU1RBTEw9IiRhY19kb3RzJGFjX2dpdmVuX0lOU1RBTEwiIDs7Cis8ICAgZXNhYworNDUwMyw0NTA5Yzk2NTMsOTcxOAorPCAgIGVjaG8gY3JlYXRpbmcgIiRhY19maWxlIgorPCAgIHJtIC1mICIkYWNfZmlsZSIKKzwgICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gYGVjaG8gJGFjX2ZpbGVfaW58c2VkICdzJS4qLyUlJ2AgYnkgY29uZmlndXJlLiIKKzwgICBjYXNlICIkYWNfZmlsZSIgaW4KKzwgICAqTWFrZWZpbGUqKSBhY19jb21zdWI9IjFpXFwKKzwgIyAkY29uZmlndXJlX2lucHV0IiA7OworPCAgICopIGFjX2NvbXN1Yj0gOzsKKy0tLQorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorPiBjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCis+IGNvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMiCis+IAorPiBfQUNFT0YKKz4gCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gYWNfY3NfdXNhZ2U9IlwKKz4gXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlCis+IGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKz4gCis+IFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbRklMRV0uLi4KKz4gCis+ICAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorPiAgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorPiAgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorPiAgICAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCis+ICAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCis+ICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworPiAgICAgICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCis+ICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKz4gICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCis+ICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorPiAKKz4gQ29uZmlndXJhdGlvbiBmaWxlczoKKz4gJGNvbmZpZ19maWxlcworPiAKKz4gQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorPiAkY29uZmlnX2hlYWRlcnMKKz4gCis+IFJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorPiAKKz4gX0FDRU9GCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBhY19jc192ZXJzaW9uPSJcXAorPiBjb25maWcuc3RhdHVzCis+IGNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MywKKz4gICB3aXRoIG9wdGlvbnMgXFwiYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKz4gCis+IENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKz4gVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCis+IGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCis+IAorPiBhY19wd2Q9JyRhY19wd2QnCis+IHNyY2Rpcj0nJHNyY2RpcicKKz4gSU5TVEFMTD0nJElOU1RBTEwnCis+IHRlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCis+IF9BQ0VPRgorPiAKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiAjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCis+IGFjX25lZWRfZGVmYXVsdHM9OgorPiB3aGlsZSB0ZXN0ICQjICE9IDAKKz4gZG8KKz4gICBjYXNlICQxIGluCis+ICAgLS0qPSopCis+ICAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorPiAgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorPiAgICAgYWNfc2hpZnQ9OgorPiAgICAgOzsKKz4gICAqKQorPiAgICAgYWNfb3B0aW9uPSQxCis+ICAgICBhY19vcHRhcmc9JDIKKz4gICAgIGFjX3NoaWZ0PXNoaWZ0Cis+ICAgICA7OworNDUxMiw0NTIwYzk3MjEsOTc2MAorPCAgIGFjX2ZpbGVfaW5wdXRzPWBlY2hvICRhY19maWxlX2lufHNlZCAtZSAicyVeJSRhY19naXZlbl9zcmNkaXIvJSIgLWUgInMlOiUgJGFjX2dpdmVuX3NyY2Rpci8lZyJgCis8ICAgc2VkIC1lICIkYWNfY29tc3ViCis8IHMlQGNvbmZpZ3VyZV9pbnB1dEAlJGNvbmZpZ3VyZV9pbnB1dCVnCis8IHMlQHNyY2RpckAlJHNyY2RpciVnCis8IHMlQHRvcF9zcmNkaXJAJSR0b3Bfc3JjZGlyJWcKKzwgcyVASU5TVEFMTEAlJElOU1RBTEwlZworPCAiICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+ICRhY19maWxlCis8IGZpOyBkb25lCis8IHJtIC1mIGNvbmZ0ZXN0LnMqCistLS0KKz4gICBjYXNlICRhY19vcHRpb24gaW4KKz4gICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorPiAgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorPiAgICAgYWNfY3NfcmVjaGVjaz06IDs7Cis+ICAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorPiAgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworPiAgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCis+ICAgICBkZWJ1Zz06IDs7Cis+ICAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKz4gICAgICRhY19zaGlmdAorPiAgICAgY2FzZSAkYWNfb3B0YXJnIGluCis+ICAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworPiAgICAgZXNhYworPiAgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICckYWNfb3B0YXJnJyIKKz4gICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworPiAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKz4gICAgICRhY19zaGlmdAorPiAgICAgY2FzZSAkYWNfb3B0YXJnIGluCis+ICAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworPiAgICAgZXNhYworPiAgICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAnJGFjX29wdGFyZyciCis+ICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKz4gICAtLWhlIHwgLS1oKQorPiAgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKz4gICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCis+IFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKz4gICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7Cis+ICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKz4gICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCis+ICAgICBhY19jc19zaWxlbnQ9OiA7OworPiAKKz4gICAjIFRoaXMgaXMgYW4gZXJyb3IuCis+ICAgLSopIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCis+IFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Cis+IAorPiAgICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiCis+ICAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworNDUyMiw0NTUzZDk3NjEKKzwgIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKKzwgIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorPCAjCis8ICMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KKzwgYWNfZEE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qZGVmaW5lWyAJXVsgCV0qXCknCis8IGFjX2RCPSdcKFsgCV1bIAldKlwpW14gCV0qJVwxI1wyJworPCBhY19kQz0nXDMnCis8IGFjX2REPSclZycKKzwgIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KKzwgYWNfdUE9J3MlXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCis8IGFjX3VCPSdcKFsgCV1cKSVcMSNcMmRlZmluZVwzJworPCBhY191Qz0nICcKKzwgYWNfdUQ9J1w0JWcnCis8ICMgYWNfZSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCis8IGFjX2VBPSdzJV5cKFsgCV0qXCkjXChbIAldKlwpdW5kZWZcKFsgCV1bIAldKlwpJworPCBhY19lQj0nJCVcMSNcMmRlZmluZVwzJworPCBhY19lQz0nICcKKzwgYWNfZUQ9JyVnJworPCAKKzwgaWYgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiAhPSBzZXQ7IHRoZW4KKzwgRU9GCis8IGNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PEVPRgorPCAgIENPTkZJR19IRUFERVJTPSJjb21tb24vaWN1Y2ZnLmgiCis8IEVPRgorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8IGZpCis8IGZvciBhY19maWxlIGluIC4uICRDT05GSUdfSEVBREVSUzsgZG8gaWYgdGVzdCAieCRhY19maWxlIiAhPSB4Li47IHRoZW4KKzwgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCis8ICAgY2FzZSAiJGFjX2ZpbGUiIGluCis8ICAgKjoqKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJVteOl0qOiUlJ2AKKzwgICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworPCAgICopIGFjX2ZpbGVfaW49IiR7YWNfZmlsZX0uaW4iIDs7Cis0NTU0YTk3NjMsOTc2NgorPiAgIHNoaWZ0Cis+IGRvbmUKKz4gCis+IGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorNDU1NmM5NzY4LDk3ODIKKzwgICBlY2hvIGNyZWF0aW5nICRhY19maWxlCistLS0KKz4gaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorPiAgIGV4ZWMgNj4vZGV2L251bGwKKz4gICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorPiBmaQorPiAKKz4gX0FDRU9GCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKz4gICBzZXQgWCAnJFNIRUxMJyAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCis+ICAgc2hpZnQKKz4gICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorPiAgIENPTkZJR19TSEVMTD0nJFNIRUxMJworPiAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKz4gICBleGVjICJcJEAiCis+IGZpCis0NTU4LDQ1ODRjOTc4NCw5Nzk3Cis8ICAgcm0gLWYgY29uZnRlc3QuZnJhZyBjb25mdGVzdC5pbiBjb25mdGVzdC5vdXQKKzwgICBhY19maWxlX2lucHV0cz1gZWNobyAkYWNfZmlsZV9pbnxzZWQgLWUgInMlXiUkYWNfZ2l2ZW5fc3JjZGlyLyUiIC1lICJzJTolICRhY19naXZlbl9zcmNkaXIvJWciYAorPCAgIGNhdCAkYWNfZmlsZV9pbnB1dHMgPiBjb25mdGVzdC5pbgorPCAKKzwgRU9GCis8IAorPCAjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYSBzZWQgc2NyaXB0IGNvbmZ0ZXN0LnZhbHMgdGhhdCBzdWJzdGl0dXRlcworPCAjIHRoZSBwcm9wZXIgdmFsdWVzIGludG8gY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIEFuZCBmaXJzdDoKKzwgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KKzwgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgaW4gYW4gdW5xdW90ZWQgaGVyZSBkb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLgorPCBybSAtZiBjb25mdGVzdC52YWxzCis8IGNhdCA+IGNvbmZ0ZXN0LmhkciA8PFxFT0YKKzwgcy9bXFwmJV0vXFwmL2cKKzwgcyVbXFwkYF0lXFwmJWcKKzwgcyUjZGVmaW5lIFwoW0EtWmEtel9dW0EtWmEtejAtOV9dKlwpICpcKC4qXCklJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0lZ3AKKzwgcyVhY19kJWFjX3UlZ3AKKzwgcyVhY191JWFjX2UlZ3AKKzwgRU9GCis8IHNlZCAtbiAtZiBjb25mdGVzdC5oZHIgY29uZmRlZnMuaCA+IGNvbmZ0ZXN0LnZhbHMKKzwgcm0gLWYgY29uZnRlc3QuaGRyCis8IAorPCAjIFRoaXMgc2VkIGNvbW1hbmQgcmVwbGFjZXMgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yCis8ICMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKzwgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCis8IGNhdCA+PiBjb25mdGVzdC52YWxzIDw8XEVPRgorPCBzJV5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiUvKiAmICovJQorPCBFT0YKKy0tLQorPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBleGVjIDU+PmNvbmZpZy5sb2cKKz4geworPiAgIGVjaG8KKz4gICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorPiAjIyBSdW5uaW5nICRhc19tZS4gIyMKKz4gX0FTQk9YCis+ICAgJGFzX2VjaG8gIiRhY19sb2ciCis+IH0gPiY1Cis+IAorPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis+IF9BQ0VPRgorNDU4Niw0NTg3Yzk3OTkKKzwgIyBCcmVhayB1cCBjb25mdGVzdC52YWxzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uCis8ICMgdGhlIHNpemUgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28uCistLS0KKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorNDU4OSw0NTkwYzk4MDEsOTgwMgorPCBybSAtZiBjb25mdGVzdC50YWlsCis8IHdoaWxlIDoKKy0tLQorPiAjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KKz4gZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCis0NTkyLDQ2MTZjOTgwNCwxMDA3NgorPCAgIGFjX2xpbmVzPWBncmVwIC1jIC4gY29uZnRlc3QudmFsc2AKKzwgICAjIGdyZXAgLWMgZ2l2ZXMgZW1wdHkgb3V0cHV0IGZvciBhbiBlbXB0eSBmaWxlIG9uIHNvbWUgQUlYIHN5c3RlbXMuCis8ICAgaWYgdGVzdCAteiAiJGFjX2xpbmVzIiB8fCB0ZXN0ICIkYWNfbGluZXMiIC1lcSAwOyB0aGVuIGJyZWFrOyBmaQorPCAgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byBjb25mdGVzdC5mcmFnLgorPCAgIGVjaG8gJyAgY2F0ID4gY29uZnRlc3QuZnJhZyA8PENFT0YnID4+ICRDT05GSUdfU1RBVFVTCis8ICAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC52YWxzID4+ICRDT05GSUdfU1RBVFVTCis8ICAgZWNobyAnQ0VPRgorPCAgIHNlZCAtZiBjb25mdGVzdC5mcmFnIGNvbmZ0ZXN0LmluID4gY29uZnRlc3Qub3V0Cis8ICAgcm0gLWYgY29uZnRlc3QuaW4KKzwgICBtdiBjb25mdGVzdC5vdXQgY29uZnRlc3QuaW4KKzwgJyA+PiAkQ09ORklHX1NUQVRVUworPCAgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC52YWxzID4gY29uZnRlc3QudGFpbAorPCAgIHJtIC1mIGNvbmZ0ZXN0LnZhbHMKKzwgICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnZhbHMKKzwgZG9uZQorPCBybSAtZiBjb25mdGVzdC52YWxzCis8IAorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxcRU9GCis8ICAgcm0gLWYgY29uZnRlc3QuZnJhZyBjb25mdGVzdC5oCis8ICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuICAqLyIgPiBjb25mdGVzdC5oCis8ICAgY2F0IGNvbmZ0ZXN0LmluID4+IGNvbmZ0ZXN0LmgKKzwgICBybSAtZiBjb25mdGVzdC5pbgorPCAgIGlmIGNtcCAtcyAkYWNfZmlsZSBjb25mdGVzdC5oIDI+L2Rldi9udWxsOyB0aGVuCis8ICAgICBlY2hvICIkYWNfZmlsZSBpcyB1bmNoYW5nZWQiCis8ICAgICBybSAtZiBjb25mdGVzdC5oCistLS0KKz4gICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCis+ICAgICAiY29tbW9uL2ljdWNmZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb21tb24vaWN1Y2ZnLmgiIDs7Cis+ICAgICAiaWN1ZGVmcy5tayIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpY3VkZWZzLm1rIiA7OworPiAgICAgIk1ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworPiAgICAgImRhdGEvaWN1cGtnLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkYXRhL2ljdXBrZy5pbmMiIDs7Cis+ICAgICAiY29uZmlnL01ha2VmaWxlLmluYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb25maWcvTWFrZWZpbGUuaW5jIiA7OworPiAgICAgImRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGF0YS9NYWtlZmlsZSIgOzsKKz4gICAgICJzdHViZGF0YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzdHViZGF0YS9NYWtlZmlsZSIgOzsKKz4gICAgICJjb21tb24vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY29tbW9uL01ha2VmaWxlIiA7OworPiAgICAgImkxOG4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaTE4bi9NYWtlZmlsZSIgOzsKKz4gICAgICJsYXlvdXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGF5b3V0L01ha2VmaWxlIiA7OworPiAgICAgImxheW91dGV4L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxheW91dGV4L01ha2VmaWxlIiA7OworPiAgICAgImlvL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGlvL01ha2VmaWxlIiA7OworPiAgICAgImV4dHJhL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL01ha2VmaWxlIiA7OworPiAgICAgImV4dHJhL3Vjb252L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL3Vjb252L01ha2VmaWxlIiA7OworPiAgICAgImV4dHJhL3NjcnB0cnVuL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dHJhL3NjcnB0cnVuL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2N0ZXN0ZncvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvY3Rlc3Rmdy9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9tYWtlY29udi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9tYWtlY29udi9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5yYi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5yYi9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW51Y2EvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VudWNhL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbmNjb2RlL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2dlbmNtbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5jbW4vTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VuY252YWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VuY252YWwvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VubmFtZXMvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VudGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW50ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2dlbm5vcm0vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2Vubm9ybS9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5wcm9wcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5wcm9wcy9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5jYXNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbmNhc2UvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvZ2VucG5hbWUvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvZ2VuYnJrL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2dlbmJyay9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9nZW5zcHJlcC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0b29scy9pY3Vzd2FwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL2ljdXN3YXAvTWFrZWZpbGUiIDs7Cis+ICAgICAidG9vbHMvcGtnZGF0YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9wa2dkYXRhL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRvb2xzL3Rvb2x1dGlsL01ha2VmaWxlIiA7OworPiAgICAgInRvb2xzL2R1bXBjZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9kdW1wY2UvTWFrZWZpbGUiIDs7Cis+ICAgICAidGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInRlc3QvdGVzdGRhdGEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90ZXN0ZGF0YS9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L3Rlc3RkYXRhL3BrZ2RhdGEuaW5jIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGVzdGRhdGEvcGtnZGF0YS5pbmMiIDs7Cis+ICAgICAidGVzdC9oZHJ0c3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9oZHJ0c3QvTWFrZWZpbGUiIDs7Cis+ICAgICAidGVzdC9pbnRsdGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2ludGx0ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInRlc3QvY2ludGx0c3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC9jaW50bHRzdC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L2lvdGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2lvdGVzdC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L3RoYWl0ZXN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGhhaXRlc3QvTWFrZWZpbGUiIDs7Cis+ICAgICAidGVzdC90ZXN0bWFwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3QvdGVzdG1hcC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L2xldGVzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0L2xldGVzdC9NYWtlZmlsZSIgOzsKKz4gICAgICJ0ZXN0L3RocmVhZHRlc3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdC90aHJlYWR0ZXN0L01ha2VmaWxlIiA7OworPiAgICAgInNhbXBsZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc2FtcGxlcy9NYWtlZmlsZSIgOzsKKz4gICAgICJzYW1wbGVzL2RhdGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc2FtcGxlcy9kYXRlL01ha2VmaWxlIiA7OworPiAgICAgInNhbXBsZXMvY2FsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvY2FsL01ha2VmaWxlIiA7OworPiAgICAgInNhbXBsZXMvbGF5b3V0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNhbXBsZXMvbGF5b3V0L01ha2VmaWxlIiA7OworPiAgICAgImNvbW1vbi91bmljb2RlL3BsYXRmb3JtLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY29tbW9uL3VuaWNvZGUvcGxhdGZvcm0uaCIgOzsKKz4gCis+ICAgKikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworPiAgIGVzYWMKKz4gZG9uZQorPiAKKz4gCis+ICMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKz4gIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCis+ICMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKz4gIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KKz4gaWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKz4gICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworPiAgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCis+IGZpCis+IAorPiAjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKz4gIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorPiAjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCis+ICMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKz4gIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorPiAjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KKz4gJGRlYnVnIHx8Cis+IHsKKz4gICB0bXA9Cis+ICAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKz4gICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworPiAnIDAKKz4gICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorPiB9Cis+ICMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorPiAKKz4geworPiAgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorPiAgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCis+IH0gIHx8Cis+IHsKKz4gICB0bXA9Li9jb25mJCQtJFJBTkRPTQorPiAgICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQorPiB9IHx8Cis+IHsKKz4gICAgJGFzX2VjaG8gIiRhc19tZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorPiB9Cis+IAorPiAjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCis+ICMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCis+ICMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgorPiBpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorPiAKKz4gCis+IGFjX2NyPScKKycKKz4gYWNfY3NfYXdrX2NyPWAkQVdLICdCRUdJTiB7IHByaW50ICJhXHJiIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAorPiBpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorPiAgIGFjX2NzX2F3a19jcj0nXFxyJworPiBlbHNlCis+ICAgYWNfY3NfYXdrX2NyPSRhY19jcgorPiBmaQorPiAKKz4gZWNobyAnQkVHSU4geycgPiIkdG1wL3N1YnMxLmF3ayIgJiYKKz4gX0FDRU9GCis+IAorPiAKKz4geworPiAgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCis+ICAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorPiAgIGVjaG8gIl9BQ0VPRiIKKz4gfSA+Y29uZiQkc3Vicy5zaCB8fAorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis+IGFjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCis+IGFjX2RlbGltPSclIV8hIyAnCis+IGZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworPiAgIC4gLi9jb25mJCRzdWJzLnNoIHx8Cis+ICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4gICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorPiAgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCis+ICAgICBicmVhaworPiAgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCis+ICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgIGVsc2UKKz4gICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCis+ICAgZmkKKz4gZG9uZQorPiBybSAtZiBjb25mJCRzdWJzLnNoCis+IAorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorPiBfQUNFT0YKKz4gc2VkIC1uICcKKz4gaAorPiBzL14vU1siLzsgcy8hLiovIl09LworPiBwCis+IGcKKz4gcy9eW14hXSohLy8KKz4gOnJlcGwKKz4gdCByZXBsCis+IHMvJyIkYWNfZGVsaW0iJyQvLworPiB0IGRlbGltCis+IDpubAorPiBoCis+IHMvXCguXHsxNDhcfVwpLiovXDEvCis+IHQgbW9yZTEKKz4gcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworPiBwCis+IG4KKz4gYiByZXBsCis+IDptb3JlMQorPiBzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCis+IHAKKz4gZworPiBzLy5cezE0OFx9Ly8KKz4gdCBubAorPiA6ZGVsaW0KKz4gaAorPiBzL1woLlx7MTQ4XH1cKS4qL1wxLworPiB0IG1vcmUyCis+IHMvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCis+IHAKKz4gYgorPiA6bW9yZTIKKz4gcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworPiBwCis+IGcKKz4gcy8uXHsxNDhcfS8vCis+IHQgZGVsaW0KKz4gJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworPiAvXlteIiJdL3sKKz4gICBOCis+ICAgcy9cbi8vCis+IH0KKz4gJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBybSAtZiBjb25mJCRzdWJzLmF3aworPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gX0FDQVdLCis+IGNhdCA+PiJcJHRtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCis+ICAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKz4gICBGUyA9ICIHIgorPiAKKz4gfQorPiB7Cis+ICAgbGluZSA9ICQgMAorPiAgIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQorPiAgIHN1YnN0ZWQgPSAwCis+ICAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorPiAgIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKKz4gICAgIGtleSA9IGZpZWxkW2ldCis+ICAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorPiAgICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKKz4gICAgICAgdmFsdWUgPSBTW2tleV0KKz4gICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorPiAgICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQorPiAgICAgICBzdWJzdGVkID0gMQorPiAgICAgfSBlbHNlCis+ICAgICAgIGxlbiArPSAxICsga2V5bGVuCis+ICAgfQorPiAKKz4gICBwcmludCBsaW5lCis+IH0KKz4gCis+IF9BQ0FXSworPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiBpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorPiBlbHNlCis+ICAgY2F0Cis+IGZpIDwgIiR0bXAvc3ViczEuYXdrIiA+ICIkdG1wL3N1YnMuYXdrIiBcCis+ICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gX0FDRU9GCis+IAorPiAjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKz4gIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKz4gIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKz4gIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorPiBpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorPiAgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworPiBzLzoqXCQoc3JjZGlyKToqLzovCis+IHMvOipcJHtzcmNkaXJ9OiovOi8KKz4gcy86KkBzcmNkaXJAOiovOi8KKz4gcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvCis+IHMvOiokLy8KKz4gcy9eW149XSo9WwkgXSokLy8KKz4gfScKKz4gZmkKKz4gCis+IGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorPiAKKz4gIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCis+ICMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKz4gIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCis+IGlmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KKz4gY2F0ID4iJHRtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8Cis+IEJFR0lOIHsKKz4gX0FDRU9GCis+IAorPiAjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworPiAjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCis+ICMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKz4gCis+ICMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKz4gIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorPiBhY19kZWxpbT0nJSFfISMgJworPiBmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKz4gICBhY190PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKz4gICBpZiB0ZXN0IC16ICIkYWNfdCI7IHRoZW4KKz4gICAgIGJyZWFrCis+ICAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKz4gICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlMiID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQ2MTgsNDYyMmMxMDA3OCwxMDQ1MQorPCAgICAgIyBSZW1vdmUgbGFzdCBzbGFzaCBhbmQgYWxsIHRoYXQgZm9sbG93cyBpdC4gIE5vdCBhbGwgc3lzdGVtcyBoYXZlIGRpcm5hbWUuCis8ICAgICAgIGFjX2Rpcj1gZWNobyAkYWNfZmlsZXxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCis8ICAgICAgIGlmIHRlc3QgIiRhY19kaXIiICE9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorPCAgICAgICAjIFRoZSBmaWxlIGlzIGluIGEgc3ViZGlyZWN0b3J5LgorPCAgICAgICB0ZXN0ICEgLWQgIiRhY19kaXIiICYmIG1rZGlyICIkYWNfZGlyIgorLS0tCis+ICAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorPiAgIGZpCis+IGRvbmUKKz4gCis+ICMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorPiAjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKz4gIyBuZXdsaW5lIHNlcXVlbmNlcy4KKz4gCis+IGFjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCis+IHNlZCAtbiAnCis+IHMvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZworPiB0IHJzZXQKKz4gOnJzZXQKKz4gcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KKz4gdCBkZWYKKz4gZAorPiA6ZGVmCis+IHMvXFwkLy8KKz4gdCBic25sCis+IHMvWyJcXF0vXFwmL2cKKz4gcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCis+IERbIlwxIl09IiBcMyIvcAorPiBzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorPiBkCis+IDpic25sCis+IHMvWyJcXF0vXFwmL2cKKz4gcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCis+IERbIlwxIl09IiBcM1xcXFxcXG4iXFwvcAorPiB0IGNvbnQKKz4gcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKKz4gdCBjb250Cis+IGQKKz4gOmNvbnQKKz4gbgorPiBzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKKz4gdCBjbGVhcgorPiA6Y2xlYXIKKz4gcy9cXCQvLworPiB0IGJzbmxjCis+IHMvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvcAorPiBkCis+IDpic25sYworPiBzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXFxcXFxuIlxcL3AKKz4gYiBjb250Cis+ICcgPGNvbmZkZWZzLmggfCBzZWQgJworPiBzLyciJGFjX2RlbGltIicvIlxcXAorPiAiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCis+IAorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorPiAgIEZTID0gIgciCis+IH0KKz4gL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7Cis+ICAgbGluZSA9IFwkIDAKKz4gICBzcGxpdChsaW5lLCBhcmcsICIgIikKKz4gICBpZiAoYXJnWzFdID09ICIjIikgeworPiAgICAgZGVmdW5kZWYgPSBhcmdbMl0KKz4gICAgIG1hYzEgPSBhcmdbM10KKz4gICB9IGVsc2UgeworPiAgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorPiAgICAgbWFjMSA9IGFyZ1syXQorPiAgIH0KKz4gICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCis+ICAgbWFjcm8gPSBtYWMyWzFdCis+ICAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCis+ICAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworPiAgICAgIyBQcmVzZXJ2ZSB0aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KKz4gICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKz4gICAgIG5leHQKKz4gICB9IGVsc2UgeworPiAgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorPiAgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorPiAgICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCis+ICAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworPiAgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCis+ICAgICAgIG5leHQKKz4gICAgIH0KKz4gICB9Cis+IH0KKz4geyBwcmludCB9Cis+IF9BQ0FXSworPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiBmaSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKKz4gCis+IAorPiBldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgICAiCis+IHNoaWZ0Cis+IGZvciBhY190YWcKKz4gZG8KKz4gICBjYXNlICRhY190YWcgaW4KKz4gICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKKz4gICBlc2FjCis+ICAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKz4gICA6W0ZITF0qOiopOzsKKz4gICA6TCogfCA6Qyo6KikgeyB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdGFnICRhY190YWciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB0YWcgJGFjX3RhZyIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gICA6W0ZIXS0pIGFjX3RhZz0tOi07OworPiAgIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7Cis+ICAgZXNhYworPiAgIGFjX3NhdmVfSUZTPSRJRlMKKz4gICBJRlM9OgorPiAgIHNldCB4ICRhY190YWcKKz4gICBJRlM9JGFjX3NhdmVfSUZTCis+ICAgc2hpZnQKKz4gICBhY19maWxlPSQxCis+ICAgc2hpZnQKKz4gCis+ICAgY2FzZSAkYWNfbW9kZSBpbgorPiAgIDpMKSBhY19zb3VyY2U9JDE7OworPiAgIDpbRkhdKQorPiAgICAgYWNfZmlsZV9pbnB1dHM9Cis+ICAgICBmb3IgYWNfZgorPiAgICAgZG8KKz4gICAgICAgY2FzZSAkYWNfZiBpbgorPiAgICAgICAtKSBhY19mPSIkdG1wL3N0ZGluIjs7Cis+ICAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCis+IAkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCis+IAkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKz4gCSB0ZXN0IC1mICIkYWNfZiIgfHwKKz4gCSAgIGNhc2UgJGFjX2YgaW4KKz4gCSAgIFtcXC8kXSopIGZhbHNlOzsKKz4gCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKz4gCSAgIGVzYWMgfHwKKz4gCSAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkYWNfZiIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKz4gICAgICAgZXNhYworPiAgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCis+ICAgICAgIGFjX2ZpbGVfaW5wdXRzPSIkYWNfZmlsZV9pbnB1dHMgJyRhY19mJyIKKz4gICAgIGRvbmUKKz4gCis+ICAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorPiAgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorPiAgICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KKz4gICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKz4gCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCis+IAlgJyBieSBjb25maWd1cmUuJworPiAgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorPiAgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Cis+ICAgICBmaQorPiAgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKz4gICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorPiAgICAgKlwmKiB8ICpcfCogfCAqXFwqICkKKz4gICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorPiAgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCis+ICAgICAqKSBhY19zZWRfY29uZl9pbnB1dD0kY29uZmlndXJlX2lucHV0OzsKKz4gICAgIGVzYWMKKz4gCis+ICAgICBjYXNlICRhY190YWcgaW4KKz4gICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIiBcCis+ICAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworPiAgICAgZXNhYworPiAgICAgOzsKKz4gICBlc2FjCis+IAorPiAgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorPiAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorPiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCis+IAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKz4gJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorPiAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wvXClbXi9dLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXC9cKSQveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICAvXlhcKFwvXCkuKi97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIHMvLiovLi87IHEnYAorPiAgIHsgYXNfZGlyPSIkYWNfZGlyIgorPiAgIGNhc2UgJGFzX2RpciBpbiAjKAorPiAgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKz4gICBlc2FjCis+ICAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworPiAgICAgYXNfZGlycz0KKz4gICAgIHdoaWxlIDo7IGRvCis+ICAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorPiAgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKz4gICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKz4gICAgICAgZXNhYworPiAgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorPiAgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorPiAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCis+IAkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorPiAJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKz4gCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorPiAkYXNfZWNobyBYIiRhc19kaXIiIHwKKz4gICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Cis+IAkgICAgcy8vXDEvCis+IAkgICAgcQorPiAJICB9Cis+IAkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wvXCkkL3sKKz4gCSAgICBzLy9cMS8KKz4gCSAgICBxCis+IAkgIH0KKz4gCSAgL15YXChcL1wpLioveworPiAJICAgIHMvL1wxLworPiAJICAgIHEKKz4gCSAgfQorPiAJICBzLy4qLy4vOyBxJ2AKKz4gICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKz4gICAgIGRvbmUKKz4gICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKz4gICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorPiAgIGFjX2J1aWxkZGlyPS4KKz4gCis+IGNhc2UgIiRhY19kaXIiIGluCis+IC4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworPiAqKQorPiAgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCis+ICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorPiAgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorPiAgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKz4gICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Cis+ICAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7Cis+ICAgZXNhYyA7OworPiBlc2FjCis+IGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorPiBhY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4Cis+ICMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6Cis+IGFjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorPiAKKz4gY2FzZSAkc3JjZGlyIGluCis+ICAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorPiAgICAgYWNfc3JjZGlyPS4KKz4gICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKz4gICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKz4gICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCis+ICAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworPiAgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCis+ICAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Cis+ICAgKikgIyBSZWxhdGl2ZSBuYW1lLgorPiAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4Cis+ICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorPiAgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Cis+IGVzYWMKKz4gYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorPiAKKz4gCis+ICAgY2FzZSAkYWNfbW9kZSBpbgorPiAgIDpGKQorPiAgICMKKz4gICAjIENPTkZJR19GSUxFCis+ICAgIworPiAKKz4gICBjYXNlICRJTlNUQUxMIGluCis+ICAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworPiAgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OworPiAgIGVzYWMKKz4gX0FDRU9GCis+IAorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis+ICMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKz4gIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCis+IGFjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorPiAKKz4gYWNfc2VkX2RhdGFyb290PScKKz4gL2RhdGFyb290ZGlyLyB7Cis+ICAgcAorPiAgIHEKKz4gfQorPiAvQGRhdGFkaXJAL3AKKz4gL0Bkb2NkaXJAL3AKKz4gL0BpbmZvZGlyQC9wCis+IC9AbG9jYWxlZGlyQC9wCis+IC9AbWFuZGlyQC9wCis+ICcKKz4gY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorPiAqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7Cis+ICpAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQorPiAgIHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9Cis+IF9BQ0VPRgorPiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKz4gICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKz4gICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCis+ICAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKKz4gICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCis+ICAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKz4gICBzJkBtYW5kaXJAJiRtYW5kaXImZworPiAgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKKz4gZXNhYworPiBfQUNFT0YKKz4gCis+ICMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKz4gIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCis+ICMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis+IGFjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCis+ICRleHRyYXN1YgorPiBfQUNFT0YKKz4gY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorPiA6dAorPiAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCis+IHN8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKKz4gcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0Cis+IHMmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKKz4gcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKKz4gcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorPiBzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0Cis+IHMmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorPiBzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKKz4gcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKKz4gcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorPiBzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0Cis+ICRhY19kYXRhcm9vdGRpcl9oYWNrCis+ICIKKz4gZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKz4gICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gCis+IHRlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCis+ICAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKz4gICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCis+IHdoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mNQorPiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKKz4gd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiYyO30KKz4gCis+ICAgcm0gLWYgIiR0bXAvc3RkaW4iCis+ICAgY2FzZSAkYWNfZmlsZSBpbgorPiAgIC0pIGNhdCAiJHRtcC9vdXQiICYmIHJtIC1mICIkdG1wL291dCI7OworPiAgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiR0bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKz4gICBlc2FjIFwKKz4gICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKz4gIDs7Cis+ICAgOkgpCis+ICAgIworPiAgICMgQ09ORklHX0hFQURFUgorPiAgICMKKz4gICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCis+ICAgICB7Cis+ICAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorPiAgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKz4gICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCis+ICAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKz4gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKz4gICAgIGVsc2UKKz4gICAgICAgcm0gLWYgIiRhY19maWxlIgorPiAgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCis+IAl8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiA+JjI7fQorPiAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKzQ2MjQsNDYyNWMxMDQ1MywxMDQ1OAorPCAgICAgcm0gLWYgJGFjX2ZpbGUKKzwgICAgIG12IGNvbmZ0ZXN0LmggJGFjX2ZpbGUKKy0tLQorPiAgIGVsc2UKKz4gICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorPiAgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorPiAgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IGNyZWF0ZSAtIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgLSIgPiYyO30KKz4gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cis0NjI3YzEwNDYwLDEwNDYxCis8IGZpOyBkb25lCistLS0KKz4gIDs7Cis+IAorNDYyOSw0NjMwYzEwNDYzLDEwNDY1Cis8IEVPRgorPCBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKKy0tLQorPiAgIGVzYWMKKz4gCis+IGRvbmUgIyBmb3IgYWNfdGFnCis0NjMyLDQ2MzNkMTA0NjYKKzwgRU9GCis8IGNhdCA+PiAkQ09ORklHX1NUQVRVUyA8PFxFT0YKKzQ2MzUsNDYzNmMxMDQ2OCwxMDQ2OQorPCBleGl0IDAKKzwgRU9GCistLS0KKz4geyAoZXhpdCAwKTsgZXhpdCAwOyB9Cis+IF9BQ0VPRgorNDYzOCw0NjM5YzEwNDcxLDEwNTAyCis8IHJtIC1mciBjb25mZGVmcyogJGFjX2NsZWFuX2ZpbGVzCis8IHRlc3QgIiRub19jcmVhdGUiID0geWVzIHx8ICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICRDT05GSUdfU1RBVFVTIHx8IGV4aXQgMQorLS0tCis+IGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCis+IAorPiB0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorPiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKz4gJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IHdyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mMjt9Cis+ICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorPiAKKz4gCis+ICMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKz4gIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCis+ICMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCis+ICMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworPiAjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorPiAjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCis+ICMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorPiAjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgorPiBpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKz4gICBhY19jc19zdWNjZXNzPToKKz4gICBhY19jb25maWdfc3RhdHVzX2FyZ3M9Cis+ICAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKz4gICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorPiAgIGV4ZWMgNT4vZGV2L251bGwKKz4gICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCis+ICAgZXhlYyA1Pj5jb25maWcubG9nCis+ICAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKz4gICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKz4gICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKz4gZmkKKz4gaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKz4gICB7ICRhc19lY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1Cis+ICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9Cis+IGZpCmRpZmYgLS1naXQgYS9tdWx0aS9jL3BhdGNoLzNfNF8xIGIvbXVsdGkvYy9wYXRjaC8zXzRfMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzZlZDJiCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvYy9wYXRjaC8zXzRfMQpAQCAtMCwwICsxLDE3IEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCitPbmx5IGluIDNfMC9pY3Uvc291cmNlOiBiaW4KK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmRlZnMuaAorZGlmZiAtcnUgM18wLm9yaWcvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luIDNfMC9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4KKy0tLSAzXzAub3JpZy9pY3Uvc291cmNlL2NvbmZpZy9taC1kYXJ3aW4JMjAwOC0xMC0yMCAxNDo1Nzo1Mi4wMDAwMDAwMDAgLTA3MDAKKysrKyAzXzAvaWN1L3NvdXJjZS9jb25maWcvbWgtZGFyd2luCTIwMDgtMTAtMjAgMTU6NTc6MjguMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNiArMTUsOCBAQAorICMjIENvbW1hbmRzIHRvIGdlbmVyYXRlIGRlcGVuZGVuY3kgZmlsZXMKKyBHRU5fREVQUy5jPQkkKENDKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisgR0VOX0RFUFMuY2M9CSQoQ1hYKSAtRSAtTU1EICAkKERFRlMpICQoQ1BQRkxBR1MpCisrR0VOX0RFUFMuYz0JZWNobworK0dFTl9ERVBTLmNjPQllY2hvCisgCisgIyMgQ29tbWFuZHMgdG8gY29tcGlsZQorIENPTVBJTEUuYz0JJChDQykgJChERUZTKSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWZuby1jb21tb24gLWMKK09ubHkgaW4gM18wLm9yaWcvaWN1L3NvdXJjZTogY29uZmlnLmNhY2hlCitPbmx5IGluIDNfMC5vcmlnL2ljdS9zb3VyY2U6IGNvbmZpZy5sb2cKZGlmZiAtLWdpdCBhL211bHRpL2MvcGF0Y2gvcmVhZG1lLnR4dCBiL211bHRpL2MvcGF0Y2gvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTkyMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvYy9wYXRjaC9yZWFkbWUudHh0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL2NhdAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKworQ29udGFpbnMgSUNVNEMgcGF0Y2hlcyB0byBtYWtlIG9sZCB2ZXJzaW9ucyBidWlsZC4KZGlmZiAtLWdpdCBhL211bHRpL2Mvc3VwZXJjb25mLnNoIGIvbXVsdGkvYy9zdXBlcmNvbmYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmM5NGIzMAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2Mvc3VwZXJjb25mLnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgU2FtcGxlICJzdXBlciBjb25maWd1cmUiIAorIyB0aGlzIHNjcmlwdCBpcyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgSUNVLgorCisjIGlucHV0IHZhcmlhYmxlczsKKyMgJElDVV9WRVIgIC0gdGhlIElDVSB2ZXJzaW9uIGluIHVuZGVyc2NvcmUgZm9ybWF0ICg0XzJfMF8xKQorCitJQ1VfU1JDPSIkMSIKK0lDVV9WRVI9IiQyIgorCitVX0hPU1Q9YGhvc3RuYW1lYAorVV9TWVM9YHVuYW1lIHx8IGVjaG8gdW5rbm93bmAKKyNlY2hvICRIT1NUCisKK2V4cG9ydCByY3M9bm9uZQorCitjYXNlICRVX1NZUyBpbgorCUFJWCkKKwkJIyB0aGUgcHJlZmVycmVkICdBSVgnIHR5cGUgdG8gdXNlCisJCUFJWD1BSVgKKwkJY2FzZSAkSUNVX1ZFUiBpbiAKKwkJNCopCisJCQkjQUlYPUFJWDQuM1ZBCisJCQlBSVg9QUlYCisJCQk7OworCQkqKQorCQkJQUlYPUFJWDQuM1ZBCisJCQk7OworCSAgICAgICAgMSp8Mip8M18wKnwzXzEqKQorCQkJQUlYPUFJWDQuM3hsQworCQkJUEFUSD0vdXNyL3ZhY3BwL2Jpbi86JFBBVEgKKwkJCTs7CisJCWVzYWMKKwkJcmNzPSR7QUlYfQorCQk7OworCSopCisJCXJjcz1ub25lCisJCTs7Citlc2FjCisKKworCitjYXNlICRIT1NUIGluCisgICAgICAgIHN5czk4KikKKyAgICAgICAgICAgICAgICByY3M9JEFJWAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGhwKikKKyAgICAgICAgICAgICAgICByY3M9J0hQLVVYL0FDQycKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBtZXJpbGwqfHJlZGhhdCp8c3VubGlnaHQqKQorICAgICAgICAgICAgICAgIHJjcz0nTGludXhSZWRIYXQnCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKwkJZWNobyBzaCAke0lDVV9TUkN9L2NvbmZpZ3VyZQorICAgICAgICAgICAgICAgICNlY2hvIFVua25vd24gaG9zdCAkSE9TVCwgZWRpdCAkMAorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgIDs7Citlc2FjCisKK2VjaG8gc2ggJHtJQ1VfU1JDfS9ydW5Db25maWd1cmVJQ1UgIiR7cmNzfSIKKworCisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvY29tbW9uL01ha2VmaWxlLW11bHRpLmluYyBiL211bHRpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzYzE2NQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKQEAgLTAsMCArMSwyMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBJQk0gQ29ycC4gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitDX1JPT1Q9JChNVUxUSUNVX1JPT1QpL2MKK0pfUk9PVD0kKE1VTFRJQ1VfUk9PVCkvagorTV9UTVA9JChNVUxUSUNVX1JPT1QpL3RtcAorQ19JTlM9JChNX1RNUCkvaW5zCitDX0JMRD0kKE1fVE1QKS9idWlsZAorQ19TUkM9JChNX1RNUCkvc3JjCisKKyMgQyBkZWZzCitTX0lOUz1pbmNsdWRlL3VuaWNvZGUvdXR5cGVzLmgKK1NfU1JDRElSPWljdS9zb3VyY2UKK1NfQkxEPSQoU19TUkNESVIpL2NvbmZpZy5zdGF0dXMKK1NfU1JDPSQoU19TUkNESVIpL2NvbmZpZ3VyZQorCistaW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvY29tbW9uL01ha2VmaWxlLWxvY2FsLmluYworCitJQ1VTPSQoTVVMVElDVV9ST09UKS9wYWNrYWdlcworCitUT1A9JChzaGVsbCBwd2QpCisKKyMgSiBkZWZzCmRpZmYgLS1naXQgYS9tdWx0aS9qL01ha2VmaWxlLWouaW5jIGIvbXVsdGkvai9NYWtlZmlsZS1qLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA3YTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvai9NYWtlZmlsZS1qLmluYwpAQCAtMCwwICsxLDggQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworaW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvTWFrZWZpbGUtbXVsdGkuaW5jCitJQ1VTPSQoTVVMVElDVV9ST09UKS9pY3VzCitKX0dPT0Q6PSQoc2hlbGwgWyAtZCAkKElDVVMpIF0gJiYgKGNkICQoSUNVUykgOyAgbHMgLWQgaWN1NGotKi5qYXIgfCBjdXQgLWQtIC1mMiB8IGN1dCAtZC4gLWYxKSkKKyNKX0dPT0Q9JChJQ1U0SlZFUlM6JT0kKElDVVMpL2ljdTRqLSUuamFyKQorCisKZGlmZiAtLWdpdCBhL211bHRpL2ovb2xkLWljdTRqLnR4dCBiL211bHRpL2ovb2xkLWljdTRqLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY3ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvai9vbGQtaWN1NGoudHh0CkBAIC0wLDAgKzEsMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnAuIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgYSBsaXN0IG9mIElDVTRDcyB0b28gb2xkIHRvIGJ1aWxkIHdpdGggdGhlIGN1cnJlbnQgcGF0Y2hzZXQuCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2NoZWxsby9NYWtlZmlsZSBiL211bHRpL3Byb2ovY2hlbGxvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDU0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2NoZWxsby9NYWtlZmlsZQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisjIE1ha2VmaWxlIGZvciBtdWx0aWN1L3NhbXBsZS9jaGVsbG8KKyMgQy9DKysgaGVsbG8KKworIyMgTmFtZSBvZiB0aGUgYXBwCitUQVJHRVQ9Y2hlbGxvCisKKyMjIFNvdXJjZXMgbGlzdCAoQyBhbmQgQysrIGp1c3QgdG8gYmUgZGlmZmljdWx0KQorQ19TT1VSQ0VTPWRhdGUuYworQ1hYX1NPVVJDRVM9dXByaW50LmNwcAorU1JDUz0kKENfU09VUkNFUykgJChDWFhfU09VUkNFUykKK0hFQURFUlM9dXByaW50LmgKKworYWxsOgorCUBlY2hvIFRvIGJ1aWxkIGFuZCBsaXN0ICInIiAkKE9VVEZJTEVTKSAiJyIgIGluICInIiAkKENfR09PRCkgIiciIHVzZSAiJChNQUtFKSBjaGVjayIKKworIyMgU2V0dXAgbXVsdGljdQorTVVMVElDVV9ST09UPS4uLy4uLworaW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvYy9NYWtlZmlsZS1jLmluYworCitPVVQ9b3V0CisKKyQoT1VUKToKKwlta2RpciAkKE9VVCkKKworIyMgVGhlIG91dHB1dCBmaWxlcy4gIFdpbGwgcmVzdWx0IGluOiAgIG91dC8zXzgudHh0ICBvdXQvNF8wLnR4dCAgZXRjLgorT1VURklMRVM9JChDX0dPT0Q6JT0kKE9VVCkvJS50eHQpCisKKy5QUkVDSU9VUzogJChDX0NMRUFOX1RBUkdFVCkKKworIyMgR2VuZXJhdGUgYSBmaWxlCiskKE9VVCkvJS50eHQ6ICQoT1VUKSAkKENfSU5TKS8lL2Jpbi8kKFRBUkdFVCkKKwkkKHNoZWxsICQoQ19JTlMpLyQqL2Jpbi9pY3UtY29uZmlnIC0taW52b2tlKSAkKENfSU5TKS8kKi9iaW4vJChUQVJHRVQpICA+ICRACisKKyMjIGNsZWFuCitjbGVhbjoKKwktcm0gLWYgJChDX0NMRUFOX1RBUkdFVCkKKwktcm0gLWYgLi8kKE9VVCkvKgorCS1ybWRpciAkKE9VVCkKKworIyMgSnVzdCBnZW5lcmF0ZQorb3V0ZmlsZXM6ICQoT1VURklMRVMpCisKKyMjIFRlc3Q6IGdlbmVyYXRlIG91dCBmaWxlcywgYW5kIHByaW50IHRoZW0uCitjaGVjazogJChPVVRGSUxFUykKKwlAZm9yIGZpbGUgaW4gJChPVVRGSUxFUyk7IFwKKwlkbyBcCisJCWVjaG87IFwKKwkJc2VkIC1lICJzJV4lJCRmaWxlOiAlZyIgPCAkJGZpbGU7IFwKKwlkb25lCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovY2hlbGxvL2RhdGUuYyBiL211bHRpL3Byb2ovY2hlbGxvL2RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI0YTJhCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9jaGVsbG8vZGF0ZS5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMTk5OC0yMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgZGF0ZS5jCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDYvMTEvOTkgICAgc3RlcGhlbiAgICAgQ3JlYXRpb24uCisqICAgMDYvMTYvOTkgICAgc3RlcGhlbiAgICAgTW9kaWZpZWQgdG8gdXNlIHVwcmludC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzdHJpbmcuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjbGVhbi5oIgorCisjaW5jbHVkZSAidW5pY29kZS91Y252LmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGF0LmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2FsLmgiCisKKyNpbmNsdWRlICJ1cHJpbnQuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworI2lmIFVDT05GSUdfTk9fRk9STUFUVElORworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHByaW50ZigiJXM6IFNvcnJ5LCBVQ09ORklHX05PX0ZPUk1BVFRJTkcgd2FzIHR1cm5lZCBvbiAoc2VlIHVjb25maWcuaCkuIE5vIGZvcm1hdHRpbmcgY2FuIGJlIGRvbmUuIFxuIiwgYXJndlswXSk7CisgIHJldHVybiAwOworfQorI2Vsc2UKKworCisvKiBQcm90b3MgKi8KK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOworc3RhdGljIHZvaWQgdmVyc2lvbih2b2lkKTsKK3N0YXRpYyB2b2lkIGRhdGUoY29uc3QgVUNoYXIgKnR6LCBVRGF0ZUZvcm1hdFN0eWxlIHN0eWxlLCBjaGFyICpmb3JtYXQsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyogVGhlIHZlcnNpb24gb2YgZGF0ZSAqLworI2RlZmluZSBEQVRFX1ZFUlNJT04gIjEuMCIKKworLyogIkdNVCIgKi8KK3N0YXRpYyBjb25zdCBVQ2hhciBHTVRfSUQgW10gPSB7IDB4MDA0NywgMHgwMDRkLCAweDAwNTQsIDB4MDAwMCB9OworCisKK2ludAorbWFpbihpbnQgYXJnYywKKyAgICAgY2hhciAqKmFyZ3YpCit7CisgIGludCBwcmludFVzYWdlID0gMDsKKyAgaW50IHByaW50VmVyc2lvbiA9IDA7CisgIGludCBvcHRpbmQgPSAxOworICBjaGFyICphcmc7CisgIGNvbnN0IFVDaGFyICp0eiA9IDA7CisgIFVEYXRlRm9ybWF0U3R5bGUgc3R5bGUgPSBVREFUX0RFRkFVTFQ7CisgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICBjaGFyICpmb3JtYXQgPSBOVUxMOworCisKKyAgLyogcGFyc2UgdGhlIG9wdGlvbnMgKi8KKyAgZm9yKG9wdGluZCA9IDE7IG9wdGluZCA8IGFyZ2M7ICsrb3B0aW5kKSB7CisgICAgYXJnID0gYXJndltvcHRpbmRdOworICAgIAorICAgIC8qIHZlcnNpb24gaW5mbyAqLworICAgIGlmKHN0cmNtcChhcmcsICItdiIpID09IDAgfHwgc3RyY21wKGFyZywgIi0tdmVyc2lvbiIpID09IDApIHsKKyAgICAgIHByaW50VmVyc2lvbiA9IDE7CisgICAgfQorICAgIC8qIHVzYWdlIGluZm8gKi8KKyAgICBlbHNlIGlmKHN0cmNtcChhcmcsICItaCIpID09IDAgfHwgc3RyY21wKGFyZywgIi0taGVscCIpID09IDApIHsKKyAgICAgIHByaW50VXNhZ2UgPSAxOworICAgIH0KKyAgICAvKiBkaXNwbGF5IGRhdGUgaW4gZ210ICovCisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLXUiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWdtdCIpID09IDApIHsKKyAgICAgIHR6ID0gR01UX0lEOworICAgIH0KKyAgICAvKiBkaXNwbGF5IGRhdGUgaW4gZ210ICovCisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLWYiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWZ1bGwiKSA9PSAwKSB7CisgICAgICBzdHlsZSA9IFVEQVRfRlVMTDsKKyAgICB9CisgICAgLyogZGlzcGxheSBkYXRlIGluIGxvbmcgZm9ybWF0ICovCisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLWwiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWxvbmciKSA9PSAwKSB7CisgICAgICBzdHlsZSA9IFVEQVRfTE9ORzsKKyAgICB9CisgICAgLyogZGlzcGxheSBkYXRlIGluIG1lZGl1bSBmb3JtYXQgKi8KKyAgICBlbHNlIGlmKHN0cmNtcChhcmcsICItbSIpID09IDAgfHwgc3RyY21wKGFyZywgIi0tbWVkaXVtIikgPT0gMCkgeworICAgICAgc3R5bGUgPSBVREFUX01FRElVTTsKKyAgICB9CisgICAgLyogZGlzcGxheSBkYXRlIGluIHNob3J0IGZvcm1hdCAqLworICAgIGVsc2UgaWYoc3RyY21wKGFyZywgIi1zIikgPT0gMCB8fCBzdHJjbXAoYXJnLCAiLS1zaG9ydCIpID09IDApIHsKKyAgICAgIHN0eWxlID0gVURBVF9TSE9SVDsKKyAgICB9CisgICAgZWxzZSBpZihzdHJjbXAoYXJnLCAiLUYiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItLWZvcm1hdCIpID09IDApIHsKKyAgICAgIGlmICggb3B0aW5kICsgMSA8IGFyZ2MgKSB7IAorICAgICAgICAgb3B0aW5kKys7CisgICAgICAgICBmb3JtYXQgPSBhcmd2W29wdGluZF07CisgICAgICB9CisgICAgfQorICAgIC8qIFBPU0lYLjEgc2F5cyBhbGwgYXJndW1lbnRzIGFmdGVyIC0tIGFyZSBub3Qgb3B0aW9ucyAqLworICAgIGVsc2UgaWYoc3RyY21wKGFyZywgIi0tIikgPT0gMCkgeworICAgICAgLyogc2tpcCB0aGUgLS0gKi8KKyAgICAgICsrb3B0aW5kOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIHVucmVjb2duaXplZCBvcHRpb24gKi8KKyAgICBlbHNlIGlmKHN0cm5jbXAoYXJnLCAiLSIsIHN0cmxlbigiLSIpKSA9PSAwKSB7CisgICAgICBwcmludGYoImljdWRhdGU6IGludmFsaWQgb3B0aW9uIC0tICVzXG4iLCBhcmcrMSk7CisgICAgICBwcmludFVzYWdlID0gMTsKKyAgICB9CisgICAgLyogZG9uZSB3aXRoIG9wdGlvbnMsIGRpc3BsYXkgZGF0ZSAqLworICAgIGVsc2UgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogcHJpbnQgdXNhZ2UgaW5mbyAqLworICBpZihwcmludFVzYWdlKSB7CisgICAgdXNhZ2UoKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIHByaW50IHZlcnNpb24gaW5mbyAqLworICBpZihwcmludFZlcnNpb24pIHsKKyAgICB2ZXJzaW9uKCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBwcmludCB0aGUgZGF0ZSAqLworICBkYXRlKHR6LCBzdHlsZSwgZm9ybWF0LCAmc3RhdHVzKTsKKworICB1X2NsZWFudXAoKTsKKyAgcmV0dXJuIChVX0ZBSUxVUkUoc3RhdHVzKSA/IDEgOiAwKTsKK30KKworLyogVXNhZ2UgaW5mb3JtYXRpb24gKi8KK3N0YXRpYyB2b2lkCit1c2FnZSgpCit7ICAKKyAgcHV0cygiVXNhZ2U6IGljdWRhdGUgW09QVElPTlNdIik7CisgIHB1dHMoIk9wdGlvbnM6Iik7CisgIHB1dHMoIiAgLWgsIC0taGVscCAgICAgICAgUHJpbnQgdGhpcyBtZXNzYWdlIGFuZCBleGl0LiIpOworICBwdXRzKCIgIC12LCAtLXZlcnNpb24gICAgIFByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBkYXRlIGFuZCBleGl0LiIpOworICBwdXRzKCIgIC11LCAtLWdtdCAgICAgICAgIERpc3BsYXkgdGhlIGRhdGUgaW4gR3JlZW53aWNoIE1lYW4gVGltZS4iKTsKKyAgcHV0cygiICAtZiwgLS1mdWxsICAgICAgICBVc2UgZnVsbCBkaXNwbGF5IGZvcm1hdC4iKTsKKyAgcHV0cygiICAtbCwgLS1sb25nICAgICAgICBVc2UgbG9uZyBkaXNwbGF5IGZvcm1hdC4iKTsKKyAgcHV0cygiICAtbSwgLS1tZWRpdW0gICAgICBVc2UgbWVkaXVtIGRpc3BsYXkgZm9ybWF0LiIpOworICBwdXRzKCIgIC1zLCAtLXNob3J0ICAgICAgIFVzZSBzaG9ydCBkaXNwbGF5IGZvcm1hdC4iKTsKK30KKworLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLworc3RhdGljIHZvaWQKK3ZlcnNpb24oKQoreworICBwcmludGYoImljdWRhdGUgdmVyc2lvbiAlcyAoSUNVIHZlcnNpb24gJXMpLCBjcmVhdGVkIGJ5IFN0ZXBoZW4gRi4gQm9vdGguXG4iLCAKKwkgREFURV9WRVJTSU9OLCBVX0lDVV9WRVJTSU9OKTsKKyAgcHV0cyhVX0NPUFlSSUdIVF9TVFJJTkcpOworfQorCisvKiBGb3JtYXQgdGhlIGRhdGUgKi8KK3N0YXRpYyB2b2lkCitkYXRlKGNvbnN0IFVDaGFyICp0eiwKKyAgICAgVURhdGVGb3JtYXRTdHlsZSBzdHlsZSwKKyAgICAgY2hhciAqZm9ybWF0LAorICAgICBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgIFVDaGFyICpzID0gMDsKKyAgaW50MzJfdCBsZW4gPSAwOworICBVRGF0ZUZvcm1hdCAqZm10OworICBVQ2hhciB1Rm9ybWF0WzEwMF07CisKKyAgZm10ID0gdWRhdF9vcGVuKHN0eWxlLCBzdHlsZSwgMCwgdHosIC0xLE5VTEwsMCwgc3RhdHVzKTsKKyAgaWYgKCBmb3JtYXQgIT0gTlVMTCApIHsKKyAgICAgdV9jaGFyc1RvVUNoYXJzKGZvcm1hdCx1Rm9ybWF0LHN0cmxlbihmb3JtYXQpKSwKKyAgICAgdWRhdF9hcHBseVBhdHRlcm4oZm10LEZBTFNFLHVGb3JtYXQsc3RybGVuKGZvcm1hdCkpOworICB9CisgIGxlbiA9IHVkYXRfZm9ybWF0KGZtdCwgdWNhbF9nZXROb3coKSwgMCwgbGVuLCAwLCBzdGF0dXMpOworICBpZigqc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKSB7CisgICAgKnN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBzID0gKFVDaGFyKikgbWFsbG9jKHNpemVvZihVQ2hhcikgKiAobGVuKzEpKTsKKyAgICBpZihzID09IDApIGdvdG8gZmluaXNoOworICAgIHVkYXRfZm9ybWF0KGZtdCwgdWNhbF9nZXROb3coKSwgcywgbGVuICsgMSwgMCwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIGdvdG8gZmluaXNoOworICB9CisKKyAgLyogcHJpbnQgdGhlIGRhdGUgc3RyaW5nICovCisgIHVwcmludChzLCBzdGRvdXQsIHN0YXR1cyk7CisKKyAgLyogcHJpbnQgYSB0cmFpbGluZyBuZXdsaW5lICovCisgIHByaW50ZigiIEAgSUNVICIgVV9JQ1VfVkVSU0lPTiAiXG4iKTsKKworIGZpbmlzaDoKKyAgdWRhdF9jbG9zZShmbXQpOworICBmcmVlKHMpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2NoZWxsby91cHJpbnQuY3BwIGIvbXVsdGkvcHJvai9jaGVsbG8vdXByaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdkZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9jaGVsbG8vdXByaW50LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorKiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSB1cHJpbnQuY3BwCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKglEYXRlCQlOYW1lCQlEZXNjcmlwdGlvbgorKgkwNi8xNC85OQlzdGVwaGVuIAlDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlICJ1cHJpbnQuaCIKKworI2luY2x1ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorCisjZGVmaW5lIEJVRl9TSVpFIDEyOAorCisvKiBQcmludCBhIHVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBGSUxFKiBpbiB0aGUgZGVmYXVsdCBjb2RlcGFnZSAqLworVV9DQVBJIHZvaWQKK3VwcmludChjb25zdCBVQ2hhciAqcywKKwkgICBGSUxFICpmLAorCSAgIFVFcnJvckNvZGUgKnN0YXR1cykKK3sKKyAgLyogY29udmVydGVyICovCisgIFVDb252ZXJ0ZXIgKmNvbnZlcnRlcjsKKyAgY2hhciBidWYgW0JVRl9TSVpFXTsKKyAgaW50MzJfdCBzb3VyY2VMZW47CisgIGNvbnN0IFVDaGFyICpteVNvdXJjZTsKKyAgY29uc3QgVUNoYXIgKm15U291cmNlRW5kOworICBjaGFyICpteVRhcmdldDsKKyAgaW50MzJfdCBhcnJheVNpemU7CisKKyAgaWYocyA9PSAwKSByZXR1cm47CisKKyAgLyogc2V0IHVwIHRoZSBjb252ZXJzaW9uIHBhcmFtZXRlcnMgKi8KKyAgc291cmNlTGVuICAgID0gdV9zdHJsZW4ocyk7CisgIG15U291cmNlCSAgID0gczsKKyAgbXlTb3VyY2VFbmQgID0gbXlTb3VyY2UgKyBzb3VyY2VMZW47CisgIG15VGFyZ2V0CSAgID0gYnVmOworICBhcnJheVNpemUgICAgPSBCVUZfU0laRTsKKworICAvKiBvcGVuIGEgZGVmYXVsdCBjb252ZXJ0ZXIgKi8KKyAgY29udmVydGVyID0gdWNudl9vcGVuKDAsIHN0YXR1cyk7CisgIAorICAvKiBpZiB3ZSBmYWlsZWQsIGNsZWFuIHVwIGFuZCBleGl0ICovCisgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgZ290byBmaW5pc2g7CisgIAorICAvKiBwZXJmb3JtIHRoZSBjb252ZXJzaW9uICovCisgIGRvIHsKKwkvKiByZXNldCB0aGUgZXJyb3IgY29kZSAqLworCSpzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisKKwkvKiBwZXJmb3JtIHRoZSBjb252ZXJzaW9uICovCisJdWNudl9mcm9tVW5pY29kZShjb252ZXJ0ZXIsICZteVRhcmdldCwJbXlUYXJnZXQgKyBhcnJheVNpemUsCisJCQkgJm15U291cmNlLCBteVNvdXJjZUVuZCwgTlVMTCwKKwkJCSBUUlVFLCBzdGF0dXMpOworCisJLyogV3JpdGUgdGhlIGNvbnZlcnRlZCBkYXRhIHRvIHRoZSBGSUxFKiAqLworCWZ3cml0ZShidWYsIHNpemVvZihjaGFyKSwgbXlUYXJnZXQgLSBidWYsIGYpOworCisJLyogdXBkYXRlIHRoZSBjb252ZXJzaW9uIHBhcmFtZXRlcnMqLworCW15VGFyZ2V0CSA9IGJ1ZjsKKwlhcnJheVNpemUJID0gQlVGX1NJWkU7CisgIH0KKyAgd2hpbGUoKnN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7IAorCisgZmluaXNoOgorICAKKyAgLyogY2xvc2UgdGhlIGNvbnZlcnRlciAqLworICB1Y252X2Nsb3NlKGNvbnZlcnRlcik7Cit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2NoZWxsby91cHJpbnQuaCBiL211bHRpL3Byb2ovY2hlbGxvL3VwcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTNlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2NoZWxsby91cHJpbnQuaApAQCAtMCwwICsxLDI2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorKiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogRmlsZSB1cHJpbnQuaAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA2LzE0Lzk5ICAgIHN0ZXBoZW4gICAgIENyZWF0aW9uLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBVUFJJTlRfSAorI2RlZmluZSBVUFJJTlRfSCAxCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworLyogUHJpbnQgYSB1c3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgRklMRSogaW4gdGhlIGRlZmF1bHQgY29kZXBhZ2UgKi8KK1VfQ0ZVTkMgdm9pZCB1cHJpbnQoY29uc3QgVUNoYXIgKnMsIEZJTEUgKmYsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKyNlbmRpZiAvKiAhIFVQUklOVF9IICovCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZSBiL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2JiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZQpAQCAtMCwwICsxLDEyNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK01VTFRJQ1VfUk9PVD0uLi8uLi8KK2luY2x1ZGUgJChNVUxUSUNVX1JPT1QpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKKworWE1MPS4veG1sCitKWE1MPS4vanhtbAorSlZNWE1MPS4vanZteG1sCisKK0NPT0tFRD1jb29rZWQKK0lOUFVUPWlucHV0CitJTlRST1hNTFM9JCh3aWxkY2FyZCAkKElOUFVUKS8qLWludHJvZHVjdGlvbi54bWwpCitGRUFUWE1MUz0kKElOVFJPWE1MUzokKElOUFVUKS8lLWludHJvZHVjdGlvbi54bWw9JChDT09LRUQpLyUtY29va2VkLnhtbCkgJChDT09LRUQpL2NoYXJhY3RlcnMueG1sCitBTExDT09LRUQ9Y29va2VkL2ZlYXR1cmVzLnhtbAorCisjIGphdmEgc3R1ZmYKK01lcmdlck5hbWU9TWVyZ2VyCitQcm9wYWdhdGVOYW1lPVByb3BhZ2F0ZUZlYXR1cmVzCitQcm9wYWdhdGVDaGFyc05hbWU9UHJvcGFnYXRlQ2hhcmFjdGVycworTWVyZ2VyUGFja2FnZT1jb20uaWJtLmljdS5kZXYubWV0YQorTWVyZ2VyUGFja2FnZVNsYXNoPSQoc3Vic3QgLiwvLCQoTWVyZ2VyUGFja2FnZSkpCisjIyBJQ1VNRVRBPS94c3JsL0UvZGF0YS9tZXRhICAoaW4gTWFrZWZpbGUubG9jYWwpCitNZXJnZXJMaWI9JChJQ1VNRVRBKS9saWIKK01lcmdlckphcj0kKElDVU1FVEEpL2ljdW1ldGEuamFyCisjd2FzOiAkKElDVU1FVEEpL2NsYXNzZXMKK01lcmdlckNsYXNzUGF0aD0kKHNoZWxsIGxzICQoTWVyZ2VyTGliKS8qLmphciB8IHRyICdcbicgJzonKSQoTWVyZ2VySmFyKTokKE9USEVSSkFSUykKK2luY2x1ZGUgTWFrZWZpbGUubG9jYWwKK01lcmdlckJ1aWxkPSQoSUNVTUVUQSkvYnVpbGQueG1sCisjTWVyZ2VyQ2xhc3M9JChJQ1VNRVRBKS9jbGFzc2VzLyQoTWVyZ2VyUGFja2FnZVNsYXNoKS8kKE1lcmdlck5hbWUpLmNsYXNzCisjTWVyZ2VySmF2YT0kKElDVU1FVEEpL3NyYy8kKE1lcmdlclBhY2thZ2VTbGFzaCkvJChNZXJnZXJOYW1lKS5qYXZhCisjQkFTRVhNTFM9JChJQ1VNRVRBKS94bWwvaWN1bWV0YS54bWwKK0JBU0VYTUxTPSQoSUNVTUVUQSkvaW5wdXQvdmVyc2lvbnMueG1sCisKKworQVBSRUNJT1VTPSQoSUNVVkVSUzolPSQoQkxEKS8lLyQoU19TUkMpKSAkKElDVVZFUlM6JT0kKEJMRCkvJS8kKFNfQkxEKSkgJChJQ1VWRVJTOiU9JChJTlMpLyUvJChTX0lOUykpCisKK2FsbDogaWN1Y2Fwcy54bWwKKworLlBSRUNJT1VTOiAkKEFQUkVDSU9VUykKKwordGVocHJlY2lvdXM6CisJZWNobyAkKEFQUkVDSU9VUykKKworJChNZXJnZXJKYXIpOgorCSggY2QgJChJQ1VNRVRBKSAgOyBhbnQgamFyICkKKworJChCTEQpOgorCS1ta2RpciAkKEJMRCkKKworJChYTUwpOgorCS1ta2RpciAkKFhNTCkKKworJChKWE1MKToKKwktbWtkaXIgJChKWE1MKQorCiskKEpWTVhNTCk6CisJLW1rZGlyICQoSlhNTCkKKworaWZlcSAoJChKVk1TSCksKQorSlZNU0hfV0FSTj13YXJuLWp2bXNoCit3YXJuLWp2bXNoOgorCUBlY2hvICJOb3RlOiBObyAkKEpWTSkvKiQoSlZNX0NGRykgZmlsZXMgZm91bmQsIHNlZSAkKEpWTSkvcmVhZG1lLnR4dCIKK2VuZGlmCisKKworRFREQ0FDSEU9JChzaGVsbCBwd2QpL2R0ZGNhY2hlCitEVERUTVA9JChzaGVsbCBwd2QpL2R0ZHRtcAorRFRET1ZSPSQoSUNVTUVUQSkvZHRkCitKQVZBREVCVUc9LURDTERSX0RURF9DQUNIRV9ERUJVRz1uIC1EQ0xEUl9EVERfQ0FDSEVfQURFQlVHPW4gCitKQVZBUFJPUFM9IC1EQ0xEUl9EVERfQ0FDSEU9JChEVERDQUNIRSkgLURDTERSX0RURF9PVkVSUklERT0kKERURE9WUikgLURJQ1VfRFREX0NBQ0hFPSQoRFREQ0FDSEUpIC1ESUNVX0RURF9PVkVSUklERT0kRFRET1ZSIAorCisjLy8kKERURCkvTWFrZWZpbGU6ICQoSUNVTUVUQSkvZHRkL01ha2ZpbGUKKyMvLwlsbiAtcyAkXiAkQAorIy8vCisjLy9kdGQvaWN1Y2Fwcy5kdGQ6ICQoRFREKS9NYWtlZmlsZSBkdGQvaWN1Y2Fwcy5ybmMKKyMvLwltYWtlIC1DICQoRFREKQorCitJQ1VNRVRBX1hNTD0kKElDVU1FVEEpL3htbC9pY3VtZXRhLnhtbAorQkFTRV9WRVJTSU9OPSQoQ09PS0VEKS9hbGx2ZXJzaW9ucy54bWwKK0JBU0VfU09VUkNFPSQoQkFTRVhNTFMpICQoSU5QVVQpL2phdmEueG1sCisKKworIyQoSUNVTUVUQSkveG1sL2ljdW1ldGEueG1sOiAkKE1lcmdlckJ1aWxkKQorIwkoIGNkICQoSUNVTUVUQSkgOyBhbnQgeG1sICkJCisKK0FMTFhNTFM9JCh3aWxkY2FyZCAkKFhNTCkvKi54bWwgJChKWE1MKS8qLnhtbCAkKEpWTVhNTCkvKi54bWwpCisKK2FsbHhtbHM6ICQoWE1MKSAkKEpYTUwpICQoSlZNWE1MKQorCSQoTUFLRSkgLWYgTWFrZWZpbGVfYyBvdXRmaWxlcworCSQoTUFLRSkgLWYgTWFrZWZpbGVfaiBvdXRmaWxlcworCisKK2ZlYXR4bWxzOiAkKEZFQVRYTUxTKQorCithbGxjb29rZWQ6ICQoQUxMQ09PS0VEKQorCiskKENPT0tFRCk6CisJLW1rZGlyICQoQ09PS0VEKQorCiskKEJBU0VfVkVSU0lPTik6ICQoQkFTRV9TT1VSQ0UpICQoTWVyZ2VySmFyKSB8ICQoQ09PS0VEKQorCS1ybSAtcmYgLi9kdGRjYWNoZQorCW1rZGlyIGR0ZGNhY2hlCisJamF2YSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKE1lcmdlck5hbWUpIC12ICAtbzokQCAkKEJBU0VfU09VUkNFKQorCiskKEFMTENPT0tFRCk6ICQoRkVBVFhNTFMpICQoTWVyZ2VySmFyKQorCS1ybSAtcmYgLi9kdGRjYWNoZQorCW1rZGlyIGR0ZGNhY2hlCisJamF2YSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKE1lcmdlck5hbWUpIC12ICAtbzokQCAkKEZFQVRYTUxTKQorCiskKENPT0tFRCkvJS1jb29rZWQueG1sOiAkKEJBU0VfVkVSU0lPTikgJChJTlBVVCkvJS1pbnRyb2R1Y3Rpb24ueG1sICQoTWVyZ2VySmFyKSB8ICQoQ09PS0VEKQorCS1ybSAtcmYgLi9kdGRjYWNoZQorCW1rZGlyIGR0ZGNhY2hlCisJamF2YSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKFByb3BhZ2F0ZU5hbWUpICQoQkFTRV9WRVJTSU9OKSAkKElOUFVUKS8kKi1pbnRyb2R1Y3Rpb24ueG1sID4gJChDT09LRUQpLyQqLWNvb2tlZC54bWwKKworJChDT09LRUQpL2NoYXJhY3RlcnMueG1sOiAkKEFMTFhNTFMpICQoQ09PS0VEKS9qdW5pY29kZS1jb29rZWQueG1sICQoTWVyZ2VySmFyKQorCWphdmEgJChKQVZBUFJPUFMpIC1jbGFzc3BhdGggJChNZXJnZXJDbGFzc1BhdGgpICQoTWVyZ2VyUGFja2FnZSkuJChQcm9wYWdhdGVDaGFyc05hbWUpID4gJEAgJChBTExYTUxTKSAgJChDT09LRUQpL2p1bmljb2RlLWNvb2tlZC54bWwgIHx8IChybSAuLyRAIDsgZmFsc2UpCisKKyAKK2ljdWNhcHMueG1sOiBhbGx4bWxzICQoQkFTRV9WRVJTSU9OKSAgJChBTExYTUxTKSAkKE1lcmdlckphcikgJChBTExDT09LRUQpCisJLXJtIC1yZiAuL2R0ZGNhY2hlCisJbWtkaXIgZHRkY2FjaGUKKyMJLXJtIC1yZiAuL2R0ZHRtcAorIwlta2RpciBkdGR0bXAKKyMJbG4gLXMgJChJQ1VNRVRBKS9kdGQvKi5kdGQgLi9kdGR0bXAvCisjCWxuIC1zIC4vZHRkLyouZHRkIC4vZHRkdG1wLworCWphdmEgJChKQVZBUFJPUFMpIC1jbGFzc3BhdGggJChNZXJnZXJDbGFzc1BhdGgpICQoTWVyZ2VyUGFja2FnZSkuJChNZXJnZXJOYW1lKSAtdiAgLW86JEAgJChCQVNFX1ZFUlNJT04pICAkKEFMTFhNTFMpICQoQUxMSlhNTFMpICQoQUxMQ09PS0VEKQorCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZS5sb2NhbC5zYW1wbGUgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZS5sb2NhbC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjYjEzNwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlLmxvY2FsLnNhbXBsZQpAQCAtMCwwICsxLDIzIEBACisjIC0qLSBtYWtlZmlsZSAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKworCisjIyAtLS0gaW1wb3J0YW50IC0tLQorIyBQYXRoIHRvICBodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvZGF0YS90cnVuay9tZXRhCitJQ1VNRVRBPS94c3JsL0UvZGF0YS9tZXRhCisKKworCisKKworIyMgLS0tIGFsbCBvdGhlcnMgYXJlIG9wdGlvbmFsIC0tLQorCisjIGlmIG5lZWRlZCAtIGFkZGl0aW9uYWwgamFycyBvbiB0aGUgQ0xBU1NQQVRICisjT1RIRVJKQVJTPXNvbWVqYXIuamFyOnNvbWUvb3RoZXIvamFyLmphcgorCisjIGlmIG5lZWRlZCAtIGZvcmNlIHBhdGggdG8gSUNVSkFSCisjSUNVSkFSPS4uLi9pY3UuamFyCisKKyNTcGVjaWFsIG1ha2Ugb3B0aW9ucworI01BS0VfT1BUUz0tajIKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2MgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZV9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNGFmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZV9jCkBAIC0wLDAgKzEsNDYgQEAKKyMgLSotIG1ha2VmaWxlIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NQUEZMQUdTKz0tRFVfRElTQUJMRV9SRU5BTUlORz0xIC1JLiAtSS94c3JsL0lJRS9pbmNsdWRlIC1JL3hzcmwvRS9pY3Uvc291cmNlL3Rvb2xzL3Rvb2x1dGlsCitPQkpFQ1RTPXRlc3R4bWwubyB4bWxvdXQubworQ1hYX1NPVVJDRVM6PSQoT0JKRUNUUzolLm89JS5jcHApCitDX1NPVVJDRVM9CitIRUFERVJTPXhtbG91dC5oCitUQVJHRVQ9dGVzdHhtbAorCithbGw6CisJQGVjaG8gVG8gYnVpbGQgYW5kIGxpc3QgIiciICQoT1VURklMRVMpICInIiAgaW4gIiciICQoQ19HT09EKSAiJyIgdXNlICIkKE1BS0UpIGNoZWNrIgorCitNVUxUSUNVX1JPT1Q9Li4vLi4vCitpbmNsdWRlICQoTVVMVElDVV9ST09UKS9jL01ha2VmaWxlLWMuaW5jCisKK09VVD0uL3htbAorJChPVVQpOgorCW1rZGlyICQoT1VUKQorCitPVVRGSUxFUz0kKENfR09PRDolPSQoT1VUKS8lLnhtbCkKKworCisuUFJFQ0lPVVM6ICQoQ19DTEVBTl9UQVJHRVQpCisKKyMjIEdlbmVyYXRlIGEgZmlsZQorJChPVVQpLyUueG1sOiAkKE9VVCkgJChDX0lOUykvJS9iaW4vJChUQVJHRVQpCisJJChzaGVsbCAkKENfSU5TKS8kKi9iaW4vaWN1LWNvbmZpZyAtLWludm9rZSkgJChDX0lOUykvJCovYmluLyQoVEFSR0VUKSAgPiAkQAorCisjIyBjbGVhbgorY2xlYW46CisJLXJtIC1mICQoQ19DTEVBTl9UQVJHRVQpCisJLXJtIC1mIC4vJChPVVQpLyoKKwktcm1kaXIgJChPVVQpCisKKyMjIEp1c3QgZ2VuZXJhdGUKK291dGZpbGVzOiAkKE9VVEZJTEVTKQorCisjIyBUZXN0OiBnZW5lcmF0ZSBvdXQgZmlsZXMsIGFuZCBwcmludCB0aGVtLgorY2hlY2s6ICQoT1VURklMRVMpCisJQGZvciBmaWxlIGluICQoT1VURklMRVMpOyBcCisJZG8gXAorCQllY2hvOyBcCisJCXNlZCAtZSAicyVeJSQkZmlsZTogJWciIDwgJCRmaWxlOyBcCisJZG9uZQorCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL01ha2VmaWxlX2ogYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZV9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWIwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9NYWtlZmlsZV9qCkBAIC0wLDAgKzEsMjIzIEBACisjIC0qLSBtYWtlZmlsZSAtKi0KKyMgQ29weXJpZ2h0IChDKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMgTmFtZSBvZiB0aGUgYXBwCisKK1RBUkdFVD1pY3U0anNjYW4KKworYWxsOgorCUBlY2hvIFRvIGJ1aWxkIGFuZCBsaXN0ICInIiAkKE9VVEZJTEVTKSAiJyIgIGluICInIiAkKEpfR09PRCkgIiciIHVzZSAiJChNQUtFKSBjaGVjayIKKworIyMgU2V0dXAgbXVsdGljdQorTVVMVElDVV9ST09UPS4uLy4uLworaW5jbHVkZSAkKE1VTFRJQ1VfUk9PVCkvai9NYWtlZmlsZS1qLmluYworCisKKyMjIFRoZSBvdXRwdXQgZmlsZXMuICBXaWxsIHJlc3VsdCBpbjogICBvdXQvM184LnR4dCAgb3V0LzRfMC50eHQgIGV0Yy4KK09VVD1qeG1sCitPVVRGSUxFUz0kKEpfR09PRDolPSQoT1VUKS8lLnR4dCkKKworLlBSRUNJT1VTOiAkKENfQ0xFQU5fVEFSR0VUKQorCisjIyBHZW5lcmF0ZSBhIGZpbGUKKyQoT1VUKS8lLnR4dDogJChPVVQpICQoQ19JTlMpLyUvYmluLyQoVEFSR0VUKQorCSQoc2hlbGwgJChDX0lOUykvJCovYmluL2ljdS1jb25maWcgLS1pbnZva2UpICQoQ19JTlMpLyQqL2Jpbi8kKFRBUkdFVCkgID4gJEAKKworIyMgY2xlYW4KK2NsZWFuOgorCS1ybSAtZiAkKENfQ0xFQU5fVEFSR0VUKQorCS1ybSAtZiAuLyQoT1VUKS8qCisJLXJtZGlyICQoT1VUKQorCisKKyMjIFRlc3Q6IGdlbmVyYXRlIG91dCBmaWxlcywgYW5kIHByaW50IHRoZW0uCitjaGVjazogJChPVVRGSUxFUykKKwlAZm9yIGZpbGUgaW4gJChPVVRGSUxFUyk7IFwKKwlkbyBcCisJCWVjaG87IFwKKwkJc2VkIC1lICJzJV4lJCRmaWxlOiAlZyIgPCAkJGZpbGU7IFwKKwlkb25lCisKK01VTFRJQ1VfUk9PVD0uLi8uLi8KK2luY2x1ZGUgJChNVUxUSUNVX1JPT1QpL2NvbW1vbi9NYWtlZmlsZS1tdWx0aS5pbmMKKworWE1MPS4veG1sCisKK0pWTVhNTD0uL2p2bXhtbAorSlZNPSQoTVVMVElDVV9ST09UKS9qL2p2bQorSlZNX0NGRz0uc2gKK0pWTVNIOj0kKHdpbGRjYXJkICQoSlZNKS9bMC05XSokKEpWTV9DRkcpKQorCitBTExJQ1VTPSQoSUNVVkVSUzolPSQoQkxEKS8lLyQoU19CTEQpKQorSUlDVVM9JChJQ1VWRVJTOiU9JChJTlMpLyUvJChTX0lOUykpCitBTExBUFBTPSQoSUNVVkVSUzolPSQoSU5TKS8lL2Jpbi8kKFRBUkdFVCkpCitBTExYTUxTPSQoSUNVVkVSUzolPSQoWE1MKS8lLnhtbCkKK0NPT0tFRD1jb29rZWQKK0lOUFVUPWlucHV0CitJTlRST1hNTFM9JCh3aWxkY2FyZCAkKElOUFVUKS8qLWludHJvZHVjdGlvbi54bWwpCitGRUFUWE1MUz0kKElOVFJPWE1MUzokKElOUFVUKS8lLWludHJvZHVjdGlvbi54bWw9JChDT09LRUQpLyUtY29va2VkLnhtbCkgJChDT09LRUQpL2NoYXJhY3RlcnMueG1sCitBTExDT09LRUQ9Y29va2VkL2ZlYXR1cmVzLnhtbAorCitKWE1MPS4vanhtbAorI0lDVTRKVkVSUworQUxMSUNVNEpTPSQoSUNVNEpWRVJTOiU9JChJQ1VTKS9pY3U0ai0lLmphcikKK0FMTEpYTUxTPSQoSl9HT09EOiU9JChKWE1MKS8lLnhtbCkKK0pTQ0FOPVNjYW5JQ1UKK2FsbGp4bWxzOiAkKEpYTUwpICQoQUxMSlhNTFMpCitKU0NBTkRJUj0uLi9pY3U0anNjYW4KK0pDTEFTU0ZJTEU9JChKU0NBTkRJUikvYmluL2NvbS9pYm0vaWN1L2Rldi9zY2FuLyQoSlNDQU4pLmNsYXNzCitKU2NhblBhY2thZ2U9Y29tLmlibS5pY3UuZGV2LnNjYW4KK0FMTEpWTT0kKEpWTVNIOiQoSlZNKS8lJChKVk1fQ0ZHKT0lKQorQUxMSlZNWE1MUz0kKEFMTEpWTTolPSQoSlZNWE1MKS8lLnhtbCkKK0pWTVNDQU49U2NhbkphdmEKK2FsbGp2bXhtbHM6ICQoSlZNWE1MKSAkKEFMTEpWTVhNTFMpCitKVk1DTEFTU0ZJTEU9JChKU0NBTkRJUikvYmluL2NvbS9pYm0vaWN1L2Rldi9zY2FuLyQoSlZNU0NBTikuY2xhc3MKKworCisjIGphdmEgc3R1ZmYKK0pBVkE9amF2YQorTWVyZ2VyTmFtZT1NZXJnZXIKK1Byb3BhZ2F0ZU5hbWU9UHJvcGFnYXRlRmVhdHVyZXMKK1Byb3BhZ2F0ZUNoYXJzTmFtZT1Qcm9wYWdhdGVDaGFyYWN0ZXJzCitNZXJnZXJQYWNrYWdlPWNvbS5pYm0uaWN1LmRldi5tZXRhCitNZXJnZXJQYWNrYWdlU2xhc2g9JChzdWJzdCAuLC8sJChNZXJnZXJQYWNrYWdlKSkKKyMjIElDVU1FVEE9L3hzcmwvRS9kYXRhL21ldGEgIChpbiBNYWtlZmlsZS5sb2NhbCkKK01lcmdlckxpYj0kKElDVU1FVEEpL2xpYgorTWVyZ2VySmFyPSQoSUNVTUVUQSkvaWN1bWV0YS5qYXIKKyN3YXM6ICQoSUNVTUVUQSkvY2xhc3NlcworTWVyZ2VyQ2xhc3NQYXRoPSQoc2hlbGwgbHMgJChNZXJnZXJMaWIpLyouamFyIHwgdHIgJ1xuJyAnOicpJChNZXJnZXJKYXIpOiQoT1RIRVJKQVJTKQoraW5jbHVkZSBNYWtlZmlsZS5sb2NhbAorTWVyZ2VyQnVpbGQ9JChJQ1VNRVRBKS9idWlsZC54bWwKKyNNZXJnZXJDbGFzcz0kKElDVU1FVEEpL2NsYXNzZXMvJChNZXJnZXJQYWNrYWdlU2xhc2gpLyQoTWVyZ2VyTmFtZSkuY2xhc3MKKyNNZXJnZXJKYXZhPSQoSUNVTUVUQSkvc3JjLyQoTWVyZ2VyUGFja2FnZVNsYXNoKS8kKE1lcmdlck5hbWUpLmphdmEKKyNCQVNFWE1MUz0kKElDVU1FVEEpL3htbC9pY3VtZXRhLnhtbAorQkFTRVhNTFM9JChJQ1VNRVRBKS9pbnB1dC92ZXJzaW9ucy54bWwKKworCitBUFJFQ0lPVVM9JChJQ1VWRVJTOiU9JChCTEQpLyUvJChTX1NSQykpICQoSUNVVkVSUzolPSQoQkxEKS8lLyQoU19CTEQpKSAkKElDVVZFUlM6JT0kKElOUykvJS8kKFNfSU5TKSkKKworLlBSRUNJT1VTOiAkKEFQUkVDSU9VUykKKwordGVocHJlY2lvdXM6CisJZWNobyAkKEFQUkVDSU9VUykKKworJChNZXJnZXJKYXIpOgorCSggY2QgJChJQ1VNRVRBKSAgOyBhbnQgamFyICkKKworJChCTEQpOgorCS1ta2RpciAkKEJMRCkKKworJChJTlMpLyUvJChTX0lOUyk6ICQoQkxEKS8lLyQoU19CTEQpCisJQGlmIFsgLWYgJChCTEQpLyQqL2J1aWxkLmVyciBdOyB0aGVuIGVjaG8gRXJyb3IgZm9yICQqIHN0b3JlZCBpbiAkKEJMRCkvJCovYnVpbGQuZXJyOyBmYWxzZTsgIGZpCisJKCBtYWtlICQoTUFLRV9PUFRTKSAtQyAkKEJMRCkvJCovaWN1L3NvdXJjZSAyPiYxIGFsbCBpbnN0YWxsIHwgdGVlICQoQkxEKS8kKi9idWlsZC5sb2cgKSB8fCAoIG12ICQoQkxEKS8kKi9idWlsZC5sb2cgJChCTEQpLyQqL2J1aWxkLmVyciA7IGZhbHNlICkKKwl0b3VjaCAtYyAkQAorCiskKEJMRCkvJS8kKFNfU1JDKTogJChJQ1VTKS9pY3U0Yy0lLXNyYy50Z3oKKwktbXYgJChCTEQpLyQqICQoQkxEKS8kKi5vbGQKKwktKCBybSAtcmYgLi8kKEJMRCkvJCoub2xkJiApCisJbWtkaXIgLXAgJChCTEQpLyQqCisJKCBjZCAkKEJMRCkvJCogOyB0YXIgeGZweiAkKERPVCkvJF4gKQorCShbIC1mIHBhdGNoLyQqIF0gJiYgcGF0Y2ggLWQgJChCTEQpLyQqIC1wMSA8ICQoRE9UKS9wYXRjaC8kKikgfHwgdHJ1ZQorCXRvdWNoIC1jICRACisKKyQoQkxEKS8lLyQoU19CTEQpOiAkKEJMRCkvJS8kKFNfU1JDKQorCS1ta2RpciAtcCAkKElOUykKKwkoIGNkICQoQkxEKS8kKi9pY3Uvc291cmNlIDsgLi9jb25maWd1cmUgLS1kaXNhYmxlLXJlbmFtaW5nIC0tZW5hYmxlLXNoYXJlZCAtLWRpc2FibGUtc3RhdGljIC0tZW5hYmxlLXJlbGVhc2UgLS1kaXNhYmxlLWRlYnVnIC0tcHJlZml4PSQoRE9UKS8kKElOUykvJCogKQorCXRvdWNoIC1jICRACisKKyQoSU5TKS8lL2Jpbi8kKFRBUkdFVCk6ICQoSU5TKS8lLyQoU19JTlMpICQoU1JDUykKKwktcm0gLXJmIC4vJChCTEQpLyQqL3RtcAorCW1rZGlyIC4vJChCTEQpLyQqL3RtcAorCUBmb3IgZmlsZSBpbiAkKE9CSkVDVFMpOyBcCisJZG8gXAorCQl3aGF0PWBiYXNlbmFtZSAkJGZpbGUgLm9gIDsgXAorCQllY2hvIGNvbXBpbGluZyAkKi8kJHdoYXQgOyBcCisJCSQoQ1hYKSAtYyAtbyAuLyQoQkxEKS8kKi90bXAvJCR3aGF0Lm8gJCR3aGF0LmNwcCAtSSAkKElOUykvJCovaW5jbHVkZSAtSSAkKEJMRCkvJCovaWN1L3NvdXJjZS90b29scy90b29sdXRpbCA7IFwKKwlkb25lCisJJChDWFgpIC1vICRAICQoT0JKRUNUUzolLm89Li8kKEJMRCkvJCovdG1wLyUubykgIC1saWN1ZGF0YSAtbGljdXVjIC1saWN1dHUgLWxpY3VpMThuIC1MJChJTlMpLyQqL2xpYiAKKworJChYTUwpOgorCW1rZGlyICQoWE1MKQorCiskKEpYTUwpOgorCW1rZGlyICQoSlhNTCkKKworaWZlcSAoJChKVk1TSCksKQorSlZNU0hfV0FSTj13YXJuLWp2bXNoCit3YXJuLWp2bXNoOgorCUBlY2hvICJOb3RlOiBObyAkKEpWTSkvKiQoSlZNX0NGRykgZmlsZXMgZm91bmQsIHNlZSAkKEpWTSkvcmVhZG1lLnR4dCIKK2VuZGlmCisKKworJChKVk1YTUwpOgorCW1rZGlyICQoSlZNWE1MKQorCiskKFhNTCkvJS54bWw6ICQoSU5TKS8lL2Jpbi8kKFRBUkdFVCkgJChYTUwpCisJJChzaGVsbCAkKElOUykvJCovYmluL2ljdS1jb25maWcgLS1pbnZva2UpICQoSU5TKS8kKi9iaW4vJChUQVJHRVQpICA+ICRACisKK2FsbHhtbHM6ICQoQUxMWE1MUykgfCAkKE9VVCkKKworYWxsanZteG1sczogICQoQUxMSlZNWE1MUykgJChKVk1TSF9XQVJOKSAgfCAkKEpWTVhNTCkKKworYWxsYXBwczogJChCTEQpICQoQUxMQVBQUykKKworYWxsaWN1czogJChCTEQpICQoQUxMSUNVUykKKworY2xlYW4tYWxsYXBwczoKKwktcm0gLWYgJChBTExBUFBTKQorCitpaWN1czogJChCTEQpICQoSUlDVVMpCisKK0RURENBQ0hFPSQoc2hlbGwgcHdkKS9kdGRjYWNoZQorRFREVE1QPSQoc2hlbGwgcHdkKS9kdGR0bXAKK0RURE9WUj0kKElDVU1FVEEpL2R0ZAorSkFWQURFQlVHPS1EQ0xEUl9EVERfQ0FDSEVfREVCVUc9biAtRENMRFJfRFREX0NBQ0hFX0FERUJVRz1uIAorSkFWQVBST1BTPSAtRENMRFJfRFREX0NBQ0hFPSQoRFREQ0FDSEUpIC1EQ0xEUl9EVERfT1ZFUlJJREU9JChEVERPVlIpIC1ESUNVX0RURF9DQUNIRT0kKERURENBQ0hFKSAtRElDVV9EVERfT1ZFUlJJREU9JERURE9WUiAKKworIy8vJChEVEQpL01ha2VmaWxlOiAkKElDVU1FVEEpL2R0ZC9NYWtmaWxlCisjLy8JbG4gLXMgJF4gJEAKKyMvLworIy8vZHRkL2ljdWNhcHMuZHRkOiAkKERURCkvTWFrZWZpbGUgZHRkL2ljdWNhcHMucm5jCisjLy8JbWFrZSAtQyAkKERURCkKKworSUNVTUVUQV9YTUw9JChJQ1VNRVRBKS94bWwvaWN1bWV0YS54bWwKKworIyQoSUNVTUVUQSkveG1sL2ljdW1ldGEueG1sOiAkKE1lcmdlckJ1aWxkKQorIwkoIGNkICQoSUNVTUVUQSkgOyBhbnQgeG1sICkJCisKK2ZlYXR4bWxzOiAkKEZFQVRYTUxTKQorCithbGxjb29rZWQ6ICQoQUxMQ09PS0VEKQorCiskKEFMTENPT0tFRCk6ICQoRkVBVFhNTFMpICQoTWVyZ2VySmFyKQorCS1ybSAtcmYgLi9kdGRjYWNoZQorCW1rZGlyIGR0ZGNhY2hlCisJJChKQVZBKSAkKEpBVkFQUk9QUykgLWNsYXNzcGF0aCAkKE1lcmdlckNsYXNzUGF0aCkgJChNZXJnZXJQYWNrYWdlKS4kKE1lcmdlck5hbWUpIC12ICAtbzokQCAkKEZFQVRYTUxTKQorCiskKENPT0tFRCkvJS1jb29rZWQueG1sOiAkKElDVU1FVEFfWE1MKSAkKElOUFVUKS8lLWludHJvZHVjdGlvbi54bWwgJChNZXJnZXJKYXIpCisJLXJtIC1yZiAuL2R0ZGNhY2hlCisJbWtkaXIgZHRkY2FjaGUKKwkkKEpBVkEpICQoSkFWQVBST1BTKSAtY2xhc3NwYXRoICQoTWVyZ2VyQ2xhc3NQYXRoKSAkKE1lcmdlclBhY2thZ2UpLiQoUHJvcGFnYXRlTmFtZSkgJChJQ1VNRVRBX1hNTCkgJChJTlBVVCkvJCotaW50cm9kdWN0aW9uLnhtbCA+ICQoQ09PS0VEKS8kKi1jb29rZWQueG1sCisKKyQoQ09PS0VEKS9jaGFyYWN0ZXJzLnhtbDogJChBTExKWE1MUykgJChBTExYTUxTKSAkKE1lcmdlckphcikKKwkkKEpBVkEpICQoSkFWQVBST1BTKSAtY2xhc3NwYXRoICQoTWVyZ2VyQ2xhc3NQYXRoKSAkKE1lcmdlclBhY2thZ2UpLiQoUHJvcGFnYXRlQ2hhcnNOYW1lKSA+ICRAICQoQUxMSlhNTFMpICQoQUxMWE1MUykgfHwgKHJtIC4vJEAgOyBmYWxzZSkKKworCitpY3VjYXBzLnhtbDogJChCQVNFWE1MUykgJChBTExKWE1MUykgJChBTExYTUxTKSAkKE1lcmdlckphcikgJChBTExDT09LRUQpCisJLXJtIC1yZiAuL2R0ZGNhY2hlCisJbWtkaXIgZHRkY2FjaGUKKyMJLXJtIC1yZiAuL2R0ZHRtcAorIwlta2RpciBkdGR0bXAKKyMJbG4gLXMgJChJQ1VNRVRBKS9kdGQvKi5kdGQgLi9kdGR0bXAvCisjCWxuIC1zIC4vZHRkLyouZHRkIC4vZHRkdG1wLworCSQoSkFWQSkgJChKQVZBUFJPUFMpIC1jbGFzc3BhdGggJChNZXJnZXJDbGFzc1BhdGgpICQoTWVyZ2VyUGFja2FnZSkuJChNZXJnZXJOYW1lKSAtdiAgLW86JEAgJChCQVNFWE1MUykgICQoQUxMWE1MUykgJChBTExKWE1MUykgJChBTExDT09LRUQpCisKKyMgLS0tIEogCisKKyQoSlhNTCkvJS54bWw6ICQoSkNMQVNTRklMRSkgJChJQ1VTKS9pY3U0ai0lLmphciB8ICQoSlhNTCkKKwkkKEpBVkEpIC1jbGFzc3BhdGggJChKU0NBTkRJUikvYmluOiQoSUNVUykvaWN1NGotJCouamFyOiQoSlNDQU5ESVIpL2xpYi9pY3VtZXRhLmphcjokKEpTQ0FORElSKS9saWIveGFsYW4uamFyOiQoSlNDQU5ESVIpL2xpYi9jbGRyLmphcjokKEpTQ0FORElSKS9saWIvdXRpbGl0aWVzLmphcjokKE1lcmdlckphcik6JChNZXJnZXJMaWIpL3V0aWxpdGllcy5qYXI6JChNZXJnZXJMaWIpL2NsZHIuamFyOiQoSlNDQU5ESVIpL2xpYi94ZXJjZXMuamFyOiQoT1RIRVJKQVJTKSAkKEpTY2FuUGFja2FnZSkuJChKU0NBTikgPiAkQCB8fCAocm0gLWYgLi8kQCA7IGZhbHNlKQorCiskKEpWTVhNTCkvJS54bWw6ICQoSlZNQ0xBU1NGSUxFKSAkKEpWTSkvJSQoSlZNX0NGRykgfCAkKEpWTVhNTCkKKwkkKEpWTSkvaW52b2tlLnNoICQoSlZNKS8kKiQoSlZNX0NGRykgJChKU0NBTkRJUikvYmluOiQoSUNVUykvaWN1NGotJCouamFyOiQoSlNDQU5ESVIpL2xpYi9pY3VtZXRhLmphcjokKEpTQ0FORElSKS9saWIveGFsYW4uamFyOiQoSlNDQU5ESVIpL2xpYi9jbGRyLmphcjokKE1lcmdlckphcik6JChNZXJnZXJKYXIpOiQoTWVyZ2VyTGliKS91dGlsaXRpZXMuamFyOiQoTWVyZ2VyTGliKS9jbGRyLmphcjokKEpTQ0FORElSKS9saWIvdXRpbGl0aWVzLmphcjokKEpTQ0FORElSKS9saWIveGVyY2VzLmphcjokKE9USEVSSkFSUykgJChKU2NhblBhY2thZ2UpLiQoSlZNU0NBTikgPiAkQCB8fCAocm0gLi8kQCA7IGZhbHNlKQorCisjIyBKdXN0IGdlbmVyYXRlCitvdXRmaWxlczogJChYTUwpICQoSlhNTCkgJChBTExKWE1MUykgJChBTExKVk1YTUxTKQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vZHRkL2ljdWNhcHMuZHRkIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vZHRkL2ljdWNhcHMuZHRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTE5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9kdGQvaWN1Y2Fwcy5kdGQKQEAgLTAsMCArMSwxMiBAQAorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKK2VsZW1lbnQgY2FwYWJpbGl0aWVzCit7CisgICAgZWxlbWVudCBmZWF0dXJlCisgICAgeworICAgICAgICBhdHRyaWJ1dGUgdHlwZSB7dGV4dCB9LAorICAgICAgICBhdHRyaWJ1dGUgdG90YWwge3RleHR9PywKKyAgICAgICAgYXR0cmlidXRlIHZlcnNpb24ge3RleHR9LAorICAgICAgICB0ZXh0CisgICAgfSoKK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2ljdWNhcHMueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaWN1Y2Fwcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4ZjUzNQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2ljdWNhcHMueG1sCkBAIC0wLDAgKzEsODE3MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhLS0gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZnJvbTogIGNvb2tlZC9hbGx2ZXJzaW9ucy54bWwgLi94bWwvMl8yLnhtbCAuL3htbC8zXzAueG1sIC4veG1sLzNfMi54bWwgLi94bWwvM180XzEueG1sIC4veG1sLzNfNC54bWwgLi94bWwvM182LnhtbCAuL3htbC8zXzhfMS54bWwgLi94bWwvM184LnhtbCAuL3htbC80XzBfMS54bWwgLi94bWwvNF8wLnhtbCAuL3htbC80XzFfMS54bWwgLi94bWwvNF8yXzBfMS54bWwgLi94bWwvNF8yLnhtbCAuL3htbC9yNTBfMS54bWwgLi9qeG1sLzJfMi54bWwgLi9qeG1sLzJfNC54bWwgLi9qeG1sLzJfNl8xLnhtbCAuL2p4bWwvMl82LnhtbCAuL2p4bWwvMl84LnhtbCAuL2p4bWwvM18wLnhtbCAuL2p4bWwvM18yLnhtbCAuL2p4bWwvM180XzEueG1sIC4vanhtbC8zXzRfMi54bWwgLi9qeG1sLzNfNF8zLnhtbCAuL2p4bWwvM180XzQueG1sIC4vanhtbC8zXzRfNS54bWwgLi9qeG1sLzNfNC54bWwgLi9qeG1sLzNfNi54bWwgLi9qeG1sLzNfOF8xLnhtbCAuL2p4bWwvM184LnhtbCAuL2p4bWwvNF8wXzEueG1sIC4vanhtbC80XzAueG1sIC4vanhtbC80XzFfMS54bWwgLi9qeG1sLzRfMi54bWwgLi9qdm14bWwvMV80XzIueG1sIC4vanZteG1sLzFfNV8wLnhtbCAuL2p2bXhtbC8xXzZfMF8yNi54bWwgLi9qdm14bWwvMV82XzAueG1sIC4vanZteG1sLzFfN18wLnhtbCBjb29rZWQvZmVhdHVyZXMueG1sIC0tPgorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8IS0tIENvcHlyaWdodCAoYykgMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+Cis8IS0tIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZyb206ICAveHNybC9FL2RhdGEvbWV0YS9pbnB1dC92ZXJzaW9ucy54bWwgaW5wdXQvamF2YS54bWwgLS0+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQvY3NzIiBocmVmPSJpY3VtZXRhLmNzcyI/PgorCis8IS0tIENvcHlyaWdodCAoQykgMjAwOC0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIC0tPgorPGljdUluZm8+IAorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorICAgICAgICAgICAgPG5hbWVzPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9ImZ1bGwiPkludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgQy9DKys8L25hbWU+CisgICAgICAgICAgICAgICAgPG5hbWUgdHlwZT0ic2hvcnQiPklDVTRDPC9uYW1lPgorICAgICAgICAgICAgPC9uYW1lcz4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNTAuMSI+CisgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMi0xMS0wNSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNi4yIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjYuMiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMTJoIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIyMi4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iNTkzIiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFncSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWdxX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWtfR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyXzAwMSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9QUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9URCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNhX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliYXNfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZW1fWk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJleiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmV6X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibV9NTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlib19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlicnggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJyeF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9BRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNnZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2dnX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNocl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE0MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGF2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYXZfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkamUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRqZV9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHVhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkdWFfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWR5byA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHlvX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkeiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHpfQlQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVidSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMxMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWJ1X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzEzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWVfR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVlX1RHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fMTUwIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0RNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9GSiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fRk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0tJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9LTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fS1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0xDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9MUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTFMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVEMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fV1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfNDE5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV3byA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXdvX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmZfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaWxfUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9HRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfR04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9HUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfSFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0tNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01VIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9OQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1BGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9SRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfUlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1REIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9URyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1ZVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9ZVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3V6X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX0dIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZ19ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWlfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9TTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamdvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqZ29fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1MTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWptYyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJam1jX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FiX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2RlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDM5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrZGVfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0Mzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtlYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2VhX0NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlraHEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtocV9NTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtpX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybF9LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsbl9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NfQXJhYl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc2JfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtzZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NmX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxhZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbGFnX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbGdfVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbl9BTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG5fQ0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuX0NGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbl9DRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxvX0xBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdV9DRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdW9fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1eSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHV5X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1hcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWFzX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltYXNfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1lciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWVyX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1mZV9NVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1nX01HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltZ2ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1naF9NWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWdvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzQ0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZ29fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW11YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXVhX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlteSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXlfTU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5hcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmFxX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5kIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZF9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9OUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0FXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQ1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9TUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfU1ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5tZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm1nX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW51cyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbnVzX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlueW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW55bl9VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9BTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9HVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X01aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfU1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1RMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm1fQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlybl9CSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9mIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb2ZfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfS0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9NRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcndfUlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ3ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcndrX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzYXEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNhcV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2JwIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzYnBfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNlaCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2VoX01aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNlc19NTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNnX0NGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaGlfTGF0bl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2hpX1RmbmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaV9UZm5nX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc25fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9BWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3djIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzM5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd2NfQ0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVvX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTM0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0b19UTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHdxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0d3FfTkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXR6bSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHptX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXR6bV9MYXRuX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmFpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWlfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmFpX0xhdG5fTFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZhaV9WYWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWlfVmFpaV9MUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2dW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZ1bl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeG9nIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl4b2dfVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXlhdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeWF2X0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl5byA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeW9fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6dV9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iNDAxIiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfTkEgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfMDAxIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RKIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0VIIAorCQkJCQkJCWFyX0VSIAorCQkJCQkJCWFyX0lMIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tNIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX01SIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1BTIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NPIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1REIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWF6IAorCQkJCQkJCWF6X0xhdG4gCisJCQkJCQkJYXpfTGF0bl9BWiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9CRCAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQlicyAKKwkJCQkJCQlic19DeXJsIAorCQkJCQkJCWJzX0N5cmxfQkEgCisJCQkJCQkJYnNfTGF0biAKKwkJCQkJCQlic19MYXRuX0JBIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0FEIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNociAKKwkJCQkJCQljaHJfVVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJY3lfR0IgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTEkgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZHogCisJCQkJCQkJZWUgCisJCQkJCQkJZWVfR0ggCisJCQkJCQkJZWVfVEcgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfQ1kgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fMTUwIAorCQkJCQkJCWVuX0FHIAorCQkJCQkJCWVuX0FTIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JCIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JNIAorCQkJCQkJCWVuX0JTIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0JaIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0NNIAorCQkJCQkJCWVuX0RNIAorCQkJCQkJCWVuX0ZKIAorCQkJCQkJCWVuX0ZNIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0dEIAorCQkJCQkJCWVuX0dHIAorCQkJCQkJCWVuX0dIIAorCQkJCQkJCWVuX0dJIAorCQkJCQkJCWVuX0dNIAorCQkJCQkJCWVuX0dVIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lNIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX0pFIAorCQkJCQkJCWVuX0pNIAorCQkJCQkJCWVuX0tFIAorCQkJCQkJCWVuX0tJIAorCQkJCQkJCWVuX0tOIAorCQkJCQkJCWVuX0tZIAorCQkJCQkJCWVuX0xDIAorCQkJCQkJCWVuX0xSIAorCQkJCQkJCWVuX0xTIAorCQkJCQkJCWVuX01HIAorCQkJCQkJCWVuX01IIAorCQkJCQkJCWVuX01QIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX01VIAorCQkJCQkJCWVuX01XIAorCQkJCQkJCWVuX05BIAorCQkJCQkJCWVuX05HIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BHIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1BSIAorCQkJCQkJCWVuX1BXIAorCQkJCQkJCWVuX1NCIAorCQkJCQkJCWVuX1NDIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1NMIAorCQkJCQkJCWVuX1NTIAorCQkJCQkJCWVuX1RDIAorCQkJCQkJCWVuX1RPIAorCQkJCQkJCWVuX1RUIAorCQkJCQkJCWVuX1RaIAorCQkJCQkJCWVuX1VHIAorCQkJCQkJCWVuX1VNIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZDIAorCQkJCQkJCWVuX1ZHIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1ZVIAorCQkJCQkJCWVuX1dTIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pNIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzXzQxOSAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19DVSAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQSAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HUSAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19JQyAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QSCAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmaWwgCisJCQkJCQkJZmlsX1BIIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0JGIAorCQkJCQkJCWZyX0JJIAorCQkJCQkJCWZyX0JKIAorCQkJCQkJCWZyX0JMIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NEIAorCQkJCQkJCWZyX0NGIAorCQkJCQkJCWZyX0NHIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0NJIAorCQkJCQkJCWZyX0NNIAorCQkJCQkJCWZyX0RKIAorCQkJCQkJCWZyX0RaIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0dBIAorCQkJCQkJCWZyX0dOIAorCQkJCQkJCWZyX0dQIAorCQkJCQkJCWZyX0dRIAorCQkJCQkJCWZyX0hUIAorCQkJCQkJCWZyX0tNIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWZyX01BIAorCQkJCQkJCWZyX01DIAorCQkJCQkJCWZyX01GIAorCQkJCQkJCWZyX01HIAorCQkJCQkJCWZyX01MIAorCQkJCQkJCWZyX01RIAorCQkJCQkJCWZyX01SIAorCQkJCQkJCWZyX01VIAorCQkJCQkJCWZyX05DIAorCQkJCQkJCWZyX05FIAorCQkJCQkJCWZyX1BGIAorCQkJCQkJCWZyX1JFIAorCQkJCQkJCWZyX1JXIAorCQkJCQkJCWZyX1NDIAorCQkJCQkJCWZyX1NOIAorCQkJCQkJCWZyX1NZIAorCQkJCQkJCWZyX1REIAorCQkJCQkJCWZyX1RHIAorCQkJCQkJCWZyX1ROIAorCQkJCQkJCWZyX1ZVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhIAorCQkJCQkJCWhhX0xhdG4gCisJCQkJCQkJaGFfTGF0bl9HSCAKKwkJCQkJCQloYV9MYXRuX05FIAorCQkJCQkJCWhhX0xhdG5fTkcgCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0JBIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlnIAorCQkJCQkJCWlnX05HIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWl0X1NNIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWthIAorCQkJCQkJCWthX0dFIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWttX0tIIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tQIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlrb2tfSU4gCisJCQkJCQkJbG4gCisJCQkJCQkJbG5fQU8gCisJCQkJCQkJbG5fQ0QgCisJCQkJCQkJbG5fQ0YgCisJCQkJCQkJbG5fQ0cgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbWxfSU4gCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXNfU0cgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbXkgCisJCQkJCQkJbXlfTU0gCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQVcgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfQ1cgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbmxfU1IgCisJCQkJCQkJbmxfU1ggCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJb3JfSU4gCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9BTyAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9DViAKKwkJCQkJCQlwdF9HVyAKKwkJCQkJCQlwdF9NTyAKKwkJCQkJCQlwdF9NWiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlwdF9TVCAKKwkJCQkJCQlwdF9UTCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19NRCAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9CWSAKKwkJCQkJCQlydV9LRyAKKwkJCQkJCQlydV9LWiAKKwkJCQkJCQlydV9NRCAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaSAKKwkJCQkJCQlzaV9MSyAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzcV9NSyAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfQVggCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJc3dfVUcgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGFfTEsgCisJCQkJCQkJdGFfTVkgCisJCQkJCQkJdGFfU0cgCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdG8gCisJCQkJCQkJdG9fVE8gCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfQ1kgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJeW8gCisJCQkJCQkJeW9fTkcgCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCQl6dSAKKwkJCQkJCQl6dV9aQSAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQ5LjEuMiI+CisgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMi0wNi0wNiIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDMuNiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQ5LjEuMSI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTItMDQtMDYiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNDkuMSI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTItMDMtMjEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC44LjEiPgorICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDExLTA3LTIwIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDMuNiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuOCI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTEtMDUtMjUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC42LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDExLTAzLTExIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC42Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMC0xMi0wMiIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDMuNiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNC4yIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMC0xMC0wMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDMuNiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMC0wNC0yOCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDMuNiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTAtMDMtMTciIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAzLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjIuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDktMDctMDEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAzLjYpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjIuMC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwOS0wNi0wMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDlnIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIxLjciLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyOTIiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlib19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3dfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6dV9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjE5IiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfTkEgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaSAKKwkJCQkJCQlzaV9MSyAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4yIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwOS0wNS0wOCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDlnIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIxLjciLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyOTIiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlib19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3dfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6dV9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjE5IiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfTkEgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaSAKKwkJCQkJCQlzaV9MSyAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPCEtLSA8cmVsZWFzZSB2ZXJzaW9uPSI0LjEuMiIgdHlwZT0iZGV2ZWxvcG1lbnQiIGRyYWZ0PSJwcm9wb3NlZCI+IC0tPgorICAgICAgICAgICAgICAgIDwhLS0gICAgIDxkYXRlcz4gLS0+CisgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgIDxkYXRlIHR5cGU9ImdhIiBkYXRlPSIyMDA5LTAxLTIwIi8+IC0tPgorICAgICAgICAgICAgICAgIDwhLS0gICAgIDwvZGF0ZXM+IC0tPgorICAgICAgICAgICAgICAgIDwhLS0gPC9yZWxlYXNlPiAtLT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjAuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDktMDEtMTUiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4aSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY2xkciIgdmVyc2lvbj0iMS42Ii8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjgyIiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjExIiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjAiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA4LTA3LTAyIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGMiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjEuNiIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI4MiIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaV9DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthX0dFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX05QIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIxMSIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy44LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA3LTEyLTEzIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwN2oiLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyNjYiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMDQiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjgiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA3LTA5LTE0IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwN2ciLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyNjYiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMDQiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTA5LTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjQ1IiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI0NSIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWF6IAorCQkJCQkJCWF6X0N5cmwgCisJCQkJCQkJYXpfQ3lybF9BWiAKKwkJCQkJCQlhel9MYXRuIAorCQkJCQkJCWF6X0xhdG5fQVogCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJY3lfR0IgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fUEsgCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJaGF3IAorCQkJCQkJCWhhd19VUyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQloeSAKKwkJCQkJCQloeV9BTSAKKwkJCQkJCQloeV9BTV9SRVZJU0VEIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlrb2tfSU4gCisJCQkJCQkJa3cgCisJCQkJCQkJa3dfR0IgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbWxfSU4gCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJb3JfSU4gCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc28gCisJCQkJCQkJc29fREogCisJCQkJCQkJc29fRVQgCisJCQkJCQkJc29fS0UgCisJCQkJCQkJc29fU08gCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0NTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9DUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl1eiAKKwkJCQkJCQl1el9DeXJsIAorCQkJCQkJCXV6X0N5cmxfVVogCisJCQkJCQkJdXpfTGF0biAKKwkJCQkJCQl1el9MYXRuX1VaIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNi0wMi0yOCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMSIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI0MiIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhbSAKKwkJCQkJCQlhbV9FVCAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQlheiAKKwkJCQkJCQlhel9DeXJsIAorCQkJCQkJCWF6X0N5cmxfQVogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWN5X0dCIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQ1MgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0NTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXV6IAorCQkJCQkJCXV6X0N5cmwgCisJCQkJCQkJdXpfQ3lybF9VWiAKKwkJCQkJCQl1el9MYXRuIAorCQkJCQkJCXV6X0xhdG5fVVogCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNS0wOC0wMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMSIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjI0MiIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImNvbGxhdGlvbiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhbSAKKwkJCQkJCQlhbV9FVCAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQlheiAKKwkJCQkJCQlhel9DeXJsIAorCQkJCQkJCWF6X0N5cmxfQVogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWN5X0dCIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQ1MgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0NTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXV6IAorCQkJCQkJCXV6X0N5cmwgCisJCQkJCQkJdXpfQ3lybF9VWiAKKwkJCQkJCQl1el9MYXRuIAorCQkJCQkJCXV6X0xhdG5fVVogCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4yLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTAyLTI4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMy4wKS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuMiI+IAorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA0LTExLTIzIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMzAiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfWVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fWVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX1lVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIzMCIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lOIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWN5X0dCIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfWVUgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX1lVIAorCQkJCQkJCXNyX1lVIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWk8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4wIj4gCisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDQtMDYtMTkiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMCIvPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIxOSIgdHlwZT0iZm9ybWF0dGluZyIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaF9ZVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfWVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIxOSIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lOIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaCAKKwkJCQkJCQlzaF9ZVSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9ZVSAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9DTiAKKwkJCQkJCQl6aF9ISyAKKwkJCQkJCQl6aF9NTyAKKwkJCQkJCQl6aF9TRyAKKwkJCQkJCQl6aF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjgiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAzLTExLTIyIiB0eXBlPSJnYSIvPiA8IS0tIGd1ZXNzIC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMi42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA0LTAyLTI2IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMi42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAzLTExLTA1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMi42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi42Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMy0wNi0xNCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSgyLjIrMi42KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMi0xMi0yMCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDIuMiktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDItMDgtMTkiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI/Pz8iLz4KKwkJCQkJCTxmZWF0dXJlIHRvdGFsPSIyMzUiIHR5cGU9ImZvcm1hdHRpbmciIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY2FfRVNfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9fUEhPTkVCT09LIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0FUX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfREVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9MVV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVsX0dSX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQkVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9HQl9FVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0lFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfX1RSQURJVElPTkFMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0VTX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZXVfRVNfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmYV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmaV9GSV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0JFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfRlJfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9MVV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdhX0lFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ2xfRVNfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloaV9fRElSRUNUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaXRfSVRfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sX0JFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbmxfTkxfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlwdF9QVF9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNoIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNoX1lVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXNyX1lVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX19QSU5ZSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfQ04gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfSEsgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfTU8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfU0cgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfVFcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJemhfVFdfU1RST0tFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdG90YWw9IjIzNSIgdHlwZT0iY29sbGF0aW9uIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0lOIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNhX0VTX1BSRUVVUk8gCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfX1BIT05FQk9PSyAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9BVF9QUkVFVVJPIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0RFX1BSRUVVUk8gCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZGVfTFVfUFJFRVVSTyAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbF9HUl9QUkVFVVJPIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JFX1BSRUVVUk8gCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fR0JfRVVSTyAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JRV9QUkVFVVJPIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX19UUkFESVRJT05BTCAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19FU19QUkVFVVJPIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWV1X0VTX1BSRUVVUk8gCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfSU4gCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZmlfRklfUFJFRVVSTyAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9CRV9QUkVFVVJPIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0ZSX1BSRUVVUk8gCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZnJfTFVfUFJFRVVSTyAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlnYV9JRV9QUkVFVVJPIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWdsX0VTX1BSRUVVUk8gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaGlfX0RJUkVDVCAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQloeSAKKwkJCQkJCQloeV9BTSAKKwkJCQkJCQloeV9BTV9SRVZJU0VEIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWl0X0lUX1BSRUVVUk8gCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9CRV9QUkVFVVJPIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5sX05MX1BSRUVVUk8gCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcHRfUFRfUFJFRVVSTyAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaCAKKwkJCQkJCQlzaF9ZVSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9ZVSAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9fUElOWUlOIAorCQkJCQkJCXpoX0NOIAorCQkJCQkJCXpoX0hLIAorCQkJCQkJCXpoX01PIAorCQkJCQkJCXpoX1NHIAorCQkJCQkJCXpoX1RXIAorCQkJCQkJCXpoX1RXX1NUUk9LRSAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0UgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDItMDQtMTciIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0oZnJvbSAxLjcpLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi4wLjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAyLTA0LTAzIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMS43KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuMC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMi0wMi0yOCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDEuNyktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHU8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjAiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAxLTEyLTA1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMS43KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuOC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMS0wNi0xMyIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPCEtLShmcm9tIDEuNyktLT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHU8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjgiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAxLTAzLTE2IiB0eXBlPSJnYSIvPiA8IS0tIGFwcHJveCBodHRwOi8vaWN1LXByb2plY3Qub3JnL21lZXRpbmdzL25vdGVzMjAwMTAxMTAudHh0IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tKGZyb20gMS43KS0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNyI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDAtMTAtMjUiIHR5cGU9ImdhIi8+IDwhLS0gYXBwcm94IGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAwMTAyNS50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHU8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAwLTA3LTMxIiB0eXBlPSJnYSIvPiA8IS0tIGFwcHJveCBodHRwOi8vaWN1LXByb2plY3Qub3JnL21lZXRpbmdzL25vdGVzMjAwMDA2MTMudHh0IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjUiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAwLTA2LTEzIiB0eXBlPSJnYSIvPiA8IS0tICBodHRwOi8vaWN1LXByb2plY3Qub3JnL21lZXRpbmdzL25vdGVzMjAwMDA2MTMudHh0IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjQuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDAtMDQtMTEiIHR5cGU9ImdhIi8+IDwhLS0gIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvbWVldGluZ3Mvbm90ZXMyMDAwMDQxMS50eHQgLS0+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNC4xLjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAwLTA1LTA5IiB0eXBlPSJnYSIvPiA8IS0tICBodHRwOi8vaWN1LXByb2plY3Qub3JnL21lZXRpbmdzL25vdGVzMjAwMDA0MjUudHh0IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjQuMS4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMC0wNC0yNSIgdHlwZT0iZ2EiLz4gPCEtLSAgaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9tZWV0aW5ncy9ub3RlczIwMDAwNDI1LnR4dCAtLT4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS40LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAwLTAzLTIxIiB0eXBlPSJnYSIvPiA8IS0tICBodHRwOi8vaWN1LXByb2plY3Qub3JnL21lZXRpbmdzL25vdGVzMjAwMDAzMjEudHh0IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjQiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAwLTAyLTI5IiB0eXBlPSJnYSIvPiA8IS0tICBodHRwOi8vaWN1LXByb2plY3Qub3JnL21lZXRpbmdzL25vdGVzMjAwMDAyMjkudHh0IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMS4xIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4ZiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY2xkciIgdmVyc2lvbj0iMS42Ii8+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjgyIiB0eXBlPSJmb3JtYXR0aW5nIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0b3RhbD0iMjExIiB0eXBlPSJjb2xsYXRpb24iIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9BcmFiIAorCQkJCQkJCXBhX0FyYWJfUEsgCisJCQkJCQkJcGFfR3VydSAKKwkJCQkJCQlwYV9HdXJ1X0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9JTiAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorCQkJCTwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPG5hbWVzPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9ImZ1bGwiPkludGVybmF0aW9uYWwgQ29tcG9uZW50cyBmb3IgSmF2YTwvbmFtZT4KKyAgICAgICAgICAgICAgICA8bmFtZSB0eXBlPSJzaG9ydCI+SUNVNEo8L25hbWU+CisgICAgICAgICAgICA8L25hbWVzPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjUwLjEiPgorICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEyLTExLTA1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNDkuMSI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTItMDMtMjEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjguMSI+CisgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTEtMDctMjAiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjgiPgorICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDExLTA1LTI1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC42LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDExLTAzLTExIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjYiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEwLTEyLTAyIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjQuMiI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMTAtMTAtMDEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuNC4yLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDExLTA3LTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjQuMS4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAxMC0wNi0yMyIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC40LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEwLTA0LTI4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjQiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDEwLTAzLTE3IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjIuMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDktMDctMDEiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMi4wLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA5LTA2LTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA5LTA1LTA4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOWciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyOTIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZnJfU04gZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBuZSBuZV9JTiBuZV9OUCBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX01EIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMjAiIHR5cGU9ImNvbGxhdGlvbiI+YWYgYWZfTkEgYWZfWkEgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgamdvIGpnb19DTSBqbWMgam1jX1RaIGthIGthX0dFIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzIGtzX0FyYWIga3NfQXJhYl9JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG15IG15X01NIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGkgc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2hpX1Rmbmcgc2hpX1RmbmdfTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZhaV9WYWlpIHZhaV9WYWlpX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4wLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgIAk8ZGF0ZSBkYXRlPSIyMDA5LTAxLTE1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGkiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyODIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fQkQgYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZnJfU04gZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBuZSBuZV9JTiBuZV9OUCBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjAiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA4LTA3LTAyIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGMiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyODIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fQkQgYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZnJfU04gZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrYSBrYV9HRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBuZSBuZV9JTiBuZV9OUCBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGttIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFtIGFtX0VUIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm4gYm5fQkQgYm5fSU4gYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqZ28gamdvX0NNIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbXkgbXlfTU0gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWkgdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmFpX1ZhaWkgdmFpX1ZhaWlfTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjguMSI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDctMTItMTMiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA3aiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI2NiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjA0IiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuOCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDctMDktMTQiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA3ZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI2NiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjA0IiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNi4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNy0wNC0zMCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy42Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNi0xMC0wMiIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI0NSIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDUiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNoIHNoX0JBIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX1lVIHNyX1lVIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoIHpoX0NOIHpoX0hLIHpoX0hhbnQgemhfTU8gemhfU0cgemhfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNC41Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNi0wOS0wMSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI0MiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0NTIHNyX0xhdG4gc3JfTGF0bl9DUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9QSyB1eiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjAxIiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lOIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhlIGhlX0lMIGhpIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGtuIGtuX0lOIGtvIGtvX0tSIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNoIHNoX0JBIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX1lVIHNyX1lVIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoIHpoX0NOIHpoX0hLIHpoX0hhbnQgemhfTU8gemhfU0cgemhfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2Ega2FfR0Uga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3Mga3NfQXJhYiBrc19BcmFiX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaSBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaGlfVGZuZyBzaGlfVGZuZ19NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNC40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNi0wMy0yOCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40LjMiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTAyLTI4IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40LjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA2LTAyLTE1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxOTciIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA1LTEwLTA1IiB0eXBlPSJnYSIvPiA8IS0tIGFwcHJveGltYXRlIC0tPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA1LTA4LTAxIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxOTciIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhbSBhbV9FVCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4yIj4gCisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDQtMTEtMjMiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIzMCIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9ZVSBzcl9MYXRuIHNyX0xhdG5fWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSI2MiIgdHlwZT0iY29sbGF0aW9uIj5hciBiZSBiZyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9CRSBlbyBlcyBldCBmYSBmYV9BRiBmaSBmbyBmciBndSBoZSBoaSBociBodSBpcyBpdCBqYSBrayBrbCBrbiBrbyBsdCBsdiBtayBtbCBtciBtdCBuYiBubiBvbSBvciBwYSBwbCBwcyBybyBydSBzaCBzayBzbCBzcSBzciBzdiB0YSB0ZSB0aCB0ciB1ayB2aSB6aCB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4wIj4gCisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDQtMDYtMTkiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIxOSIgdHlwZT0iZm9ybWF0dGluZyI+CisgICAgICAgICAgICAgICAgICAgICAgICBhZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRQorCQkJCQkJCWFyX0JIIGFyX0RaIGFyX0VHIGFyX0lOIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NCisJCQkJCQkJYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EKKwkJCQkJCQljYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUgorCQkJCQkJCWVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aCisJCQkJCQkJZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8KKwkJCQkJCQllc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQQorCQkJCQkJCWVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhCisJCQkJCQkJZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EKKwkJCQkJCQlnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodQorCQkJCQkJCWh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEKKwkJCQkJCQlqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0CisJCQkJCQkJbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8KKwkJCQkJCQlubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRgorCQkJCQkJCXB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNoIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJCisJCQkJCQkJc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfWVUgc3Ygc3ZfRkkgc3ZfU0Ugc3cKKwkJCQkJCQlzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1aworCQkJCQkJCXVrX1VBIHZpIHZpX1ZOIHpoIHpoX0NOIHpoX0hLIHpoX01PIHpoX1NHIHpoX1RXCisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSI1OSIgdHlwZT0iY29sbGF0aW9uIj5hciBiZSBiZyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9CRSBlbyBlcyBldCBmYSBmYV9BRiBmaSBmbyBmciBndSBoZSBoaSBociBodSBpcyBpdCBqYSBrayBrbCBrbiBrbyBsdCBsdiBtayBtciBtdCBuYiBubiBwYSBwbCBwcyBybyBydSBzaCBzayBzbCBzcSBzciBzdiB0YSB0ZSB0aCB0ciB1ayB2aSB6aCB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi42LjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAzLTExLTA1IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi42Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMy0wNi0xNCIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iLz4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDItMTItMjAiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGptYyBqbWNfVFoga2FiIGthYl9EWiBrYW0ga2FtX0tFIGtkZSBrZGVfVFoga2VhIGtlYV9DViBraHEga2hxX01MIGtpIGtpX0tFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbG4ga2xuX0tFIGttIGttX0tIIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpX0xhdG4gc2hpX0xhdG5fTUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc24gc25fWlcgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3FfTUsgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0FYIHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHN3X1VHIHN3YyBzd2NfQ0QgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGVvIHRlb19LRSB0ZW9fVUcgdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdHdxIHR3cV9ORSB0em0gdHptX0xhdG4gdHptX0xhdG5fTUEgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmFpX0xhdG4gdmFpX0xhdG5fTFIgdmkgdmlfVk4gdnVuIHZ1bl9UWiB4b2cgeG9nX1VHIHlhdiB5YXZfQ00geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIyLjIiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAyLTA4LTE5IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSIzLjIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi4wIj4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwMS0xMi0wNSIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPCEtLSBhdCBzb21lIHBvaW50LCBpY3U0aiBhbmQgaWN1NGMgdmVyc2lvbiBudW1iZXJzIHdlcmUgYnJvdWdodCBpbnRvIHN5bmMgLS0+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS4zLjEiPgorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDAxLTA2LTEzIiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuOCI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iLz4KKyAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjQuMS4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4ZiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI4MiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBmcl9TTiBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGthIGthX0dFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5lIG5lX0lOIG5lX05QIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIxMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoYXcgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga20ga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGpnbyBqZ29fQ00gam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBteSBteV9NTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaSB2YWlfTGF0biB2YWlfTGF0bl9MUiB2YWlfVmFpaSB2YWlfVmFpaV9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0am5pIj4KKyAgICAgICAgICAgIDxuYW1lcz4KKyAgICAgICAgICAgICAgICA8bmFtZSB0eXBlPSJmdWxsIj5JbnRlcm5hdGlvbmFsIENvbXBvbmVudHMgZm9yIEpOSTwvbmFtZT4KKyAgICAgICAgICAgICAgICA8bmFtZSB0eXBlPSJzaG9ydCI+SUNVNEpOSTwvbmFtZT4KKyAgICAgICAgICAgIDwvbmFtZXM+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy42Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRhdGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRhdGUgZGF0ZT0iMjAwNi0xMC0wMiIgdHlwZT0iZ2EiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy4yIj4gCisgICAgICAgICAgICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkYXRlIGRhdGU9IjIwMDQtMTEtMjMiIHR5cGU9ImdhIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGF0ZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuMCI+IAorICAgICAgICAgICAgICAgICAgICA8ZGF0ZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGF0ZSBkYXRlPSIyMDA0LTA2LTE5IiB0eXBlPSJnYSIvPgorICAgICAgICAgICAgICAgICAgICA8L2RhdGVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8aWN1UHJvZHVjdCB0eXBlPSJqYXZhIj4KKyAgICAgICAgICAgIDxuYW1lcz4KKyAgICAgICAgICAgICAgICA8bmFtZSB0eXBlPSJmdWxsIj5KYXZhPC9uYW1lPgorICAgICAgICAgICAgICAgIDxuYW1lIHR5cGU9InNob3J0Ij5KYXZhPC9uYW1lPgorICAgICAgICAgICAgPC9uYW1lcz4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjMuMSIvPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNC4yIj4KKyAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgIDxmZWF0dXJlIHRvdGFsPSIxMzQiIHR5cGU9ImZvcm1hdHRpbmciPgorICAgICAgIDwhLS0gTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLiAtLT4KKyAgICAgICBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBoaV9JTiBpdyBpd19JTCBqYSBqYV9KUCBrbyBrb19LUiB0aCB0aF9USCB0aF9USF9USCB6aCB6aF9DTiB6aF9ISyB6aF9UVyBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9JRSBlbl9JTiBlbl9OWiBlbl9aQSBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VWSBlc19WRSBldCBldF9FRSBmaSBmaV9GSSBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBociBocl9IUiBodSBodV9IVSBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBubCBubF9CRSBubF9OTCBubyBub19OTyBub19OT19OWSBwbCBwbF9QTCBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBzaCBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9ZVSBzdiBzdl9TRSB0ciB0cl9UUiB1ayB1a19VQSBlbiBlbl9VUworICAgICAgPC9mZWF0dXJlPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjEzNCIgdHlwZT0iY29sbGF0aW9uIj4KKyAgICAgICA8IS0tIE5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4gLS0+CisgICAgICAgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgaGlfSU4gaXcgaXdfSUwgamEgamFfSlAga28ga29fS1IgdGggdGhfVEggdGhfVEhfVEggemggemhfQ04gemhfSEsgemhfVFcgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fSUUgZW5fSU4gZW5fTlogZW5fWkEgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmkgZmlfRkkgZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgaHIgaHJfSFIgaHUgaHVfSFUgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gbm9fTk9fTlkgcGwgcGxfUEwgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgc2ggc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfWVUgc3Ygc3ZfU0UgdHIgdHJfVFIgdWsgdWtfVUEgZW4gZW5fVVMKKyAgICAgIDwvZmVhdHVyZT4KKyAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjMuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0UgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNS4wIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxMzUiIHR5cGU9ImxvY2FsZXMiPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGhpX0lOIGl3IGl3X0lMIGphIGphX0pQIGtvIGtvX0tSIHRoIHRoX1RIIHRoX1RIX1RIIHZpIHZpX1ZOIHpoIHpoX0NOIHpoX0hLIHpoX1RXIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuX0FVIGVuX0NBIGVuX0dCIGVuX0lFIGVuX0lOIGVuX05aIGVuX1pBIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZpIGZpX0ZJIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGhyIGhyX0hSIGh1IGh1X0hVIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIG5vX05PX05ZIHBsIHBsX1BMIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0NTIHN2IHN2X1NFIHRyIHRyX1RSIHVrIHVrX1VBIGVuX1VTIGVuPCEtLU5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4tLT48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTM1IiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGhpX0lOIGl3IGl3X0lMIGphIGphX0pQIGtvIGtvX0tSIHRoIHRoX1RIIHRoX1RIX1RIIHZpIHZpX1ZOIHpoIHpoX0NOIHpoX0hLIHpoX1RXIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuX0FVIGVuX0NBIGVuX0dCIGVuX0lFIGVuX0lOIGVuX05aIGVuX1pBIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZpIGZpX0ZJIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGhyIGhyX0hSIGh1IGh1X0hVIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIG5vX05PX05ZIHBsIHBsX1BMIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0NTIHN2IHN2X1NFIHRyIHRyX1RSIHVrIHVrX1VBIGVuX1VTIGVuPCEtLU5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4tLT48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkgS2htciBIYW5nIFNpbmggVGlidDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY2hhcmFjdGVycyI+YWYgYWZfTkEgYWZfWkEgYWdxIGFncV9DTSBhayBha19HSCBhciBhcl8wMDEgYXJfQUUgYXJfQkggYXJfREogYXJfRFogYXJfRUcgYXJfRUggYXJfRVIgYXJfSUwgYXJfSVEgYXJfSk8gYXJfS00gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfTVIgYXJfT00gYXJfUFMgYXJfUUEgYXJfU0EgYXJfU0QgYXJfU08gYXJfU1kgYXJfVEQgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXNhIGFzYV9UWiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJhcyBiYXNfQ00gYmUgYmVfQlkgYmVtIGJlbV9aTSBiZXogYmV6X1RaIGJnIGJnX0JHIGJtIGJtX01MIGJvIGJvX0NOIGJvX0lOIGJyIGJyX0ZSIGJyeCBicnhfSU4gYnMgYnNfQ3lybCBic19DeXJsX0JBIGJzX0xhdG4gYnNfTGF0bl9CQSBjYSBjYV9BRCBjYV9FUyBjZ2cgY2dnX1VHIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGF2IGRhdl9LRSBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBkamUgZGplX05FIGR1YSBkdWFfQ00gZHlvIGR5b19TTiBkeiBkel9CVCBlYnUgZWJ1X0tFIGVlIGVlX0dIIGVlX1RHIGVsIGVsX0NZIGVsX0dSIGVuIGVuXzE1MCBlbl9BRyBlbl9BUyBlbl9BVSBlbl9CQiBlbl9CRSBlbl9CTSBlbl9CUyBlbl9CVyBlbl9CWiBlbl9DQSBlbl9DTSBlbl9ETSBlbl9GSiBlbl9GTSBlbl9HQiBlbl9HRCBlbl9HRyBlbl9HSCBlbl9HSSBlbl9HTSBlbl9HVSBlbl9HWSBlbl9ISyBlbl9JRSBlbl9JTSBlbl9JTiBlbl9KRSBlbl9KTSBlbl9LRSBlbl9LSSBlbl9LTiBlbl9LWSBlbl9MQyBlbl9MUiBlbl9MUyBlbl9NRyBlbl9NSCBlbl9NUCBlbl9NVCBlbl9NVSBlbl9NVyBlbl9OQSBlbl9ORyBlbl9OWiBlbl9QRyBlbl9QSCBlbl9QSyBlbl9QUiBlbl9QVyBlbl9TQiBlbl9TQyBlbl9TRyBlbl9TTCBlbl9TUyBlbl9TWiBlbl9UQyBlbl9UTyBlbl9UVCBlbl9UWiBlbl9VRyBlbl9VTSBlbl9VUyBlbl9VU19QT1NJWCBlbl9WQyBlbl9WRyBlbl9WSSBlbl9WVSBlbl9XUyBlbl9aQSBlbl9aTSBlbl9aVyBlbyBlcyBlc180MTkgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfQ1UgZXNfRE8gZXNfRUEgZXNfRUMgZXNfRVMgZXNfR1EgZXNfR1QgZXNfSE4gZXNfSUMgZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUEggZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZXdvIGV3b19DTSBmYSBmYV9BRiBmYV9JUiBmZiBmZl9TTiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dGIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGZyX1lUIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3V6IGd1el9LRSBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fR0ggaGFfTGF0bl9ORSBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfQkEgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaWQgaWRfSUQgaWcgaWdfTkcgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgaXRfU00gamEgamFfSlAgam1jIGptY19UWiBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrc2Iga3NiX1RaIGtzZiBrc2ZfQ00ga3cga3dfR0IgbGFnIGxhZ19UWiBsZyBsZ19VRyBsbiBsbl9BTyBsbl9DRCBsbl9DRiBsbl9DRyBsbyBsb19MQSBsdCBsdF9MVCBsdSBsdV9DRCBsdW8gbHVvX0tFIGx1eSBsdXlfS0UgbHYgbHZfTFYgbWFzIG1hc19LRSBtYXNfVFogbWVyIG1lcl9LRSBtZmUgbWZlX01VIG1nIG1nX01HIG1naCBtZ2hfTVogbWdvIG1nb19DTSBtayBta19NSyBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtc19TRyBtdCBtdF9NVCBtdWEgbXVhX0NNIG5hcSBuYXFfTkEgbmIgbmJfTk8gbmQgbmRfWlcgbmUgbmVfSU4gbmVfTlAgbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm1nIG5tZ19DTSBubiBubl9OTyBudXMgbnVzX1NEIG55biBueW5fVUcgb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybSBybV9DSCBybiBybl9CSSBybyByb19NRCByb19STyByb2Ygcm9mX1RaIHJ1IHJ1X0JZIHJ1X0tHIHJ1X0taIHJ1X01EIHJ1X1JVIHJ1X1VBIHJ3IHJ3X1JXIHJ3ayByd2tfVFogc2FxIHNhcV9LRSBzYnAgc2JwX1RaIHNlaCBzZWhfTVogc2VzIHNlc19NTCBzZyBzZ19DRiBzaGlfTGF0biBzaGlfTGF0bl9NQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbiBzbl9aVyBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgc3djIHN3Y19DRCB0YSB0YV9JTiB0YV9MSyB0YV9NWSB0YV9TRyB0ZSB0ZV9JTiB0ZW8gdGVvX0tFIHRlb19VRyB0aCB0aF9USCB0byB0b19UTyB0ciB0cl9DWSB0cl9UUiB0d3EgdHdxX05FIHR6bSB0em1fTGF0biB0em1fTGF0bl9NQSB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2YWlfTGF0biB2YWlfTGF0bl9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNi4wIj4KKyAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTUiIHR5cGU9ImZvcm1hdHRpbmciPnpoIHRoIGtvIGl3IHVrIHRyIHNxIHNrIHB0IHBsIG5sIG1zIG1rIGx2IGx0IGtrIGlzIGhyIGd1IGdhIGZyIGVzIGNzIGNhIGVzX1BSIGVuX0hLIHB0X1BUIGVzX1BZIGFyX1lFIGh1X0hVIGluX0lEIGVuX0lFIGhpX0lOIHRlX0lOIHRhX0lOIHBhX0lOIG9yX0lOIG1yX0lOIG1sX0lOIGtuX0lOIGVuX0lOIGphX0pQX0pQIGVuX1pBIGFyX0lRIHNxX0FMIGl0X0lUIGVzX0FSIGRlX0FUX1BSRUVVUk8gc3JfUlNfQ3lybCBubF9CRSBmcl9CRSBlbl9CRV9QUkVFVVJPIGFyX0pPIGphX0pQIGVzX0JPIHB0X0JSIHN2X1NFX1BSRUVVUk8gemhfU0cgc2xfU0lfUFJFRVVSTyBza19TSyBmcl9DQSBlc19TViBmcl9DSCBlc19DTCB6aF9DTiBhcl9LVyBlc19DTyBlc19DUiBub19OT19OWSB0aF9USCBhcl9MQiBlbF9DWV9QUkVFVVJPIG10X01UX0VVUk8gY3NfQ1ogdHJfVFIgZGVfREVfUFJFRVVSTyB6aF9UVyBza19TS19FVVJPIGx0X0xUX1BSRUVVUk8gZnJfTFVfUFJFRVVSTyBkZV9MVSBsdl9MVl9QUkVFVVJPIGVzX0RPIHVrX1VBIGFyX0xZIGFyX01BIHNyX01FIGVzX1VTIGVzX0VDIGV0X0VFX1BSRUVVUk8gZXNfVVkgbXRfTVQgZW5fTVQgY3NfQ1pfRVVSTyBlc19FUyBjYV9FUyBlc19WRSBubF9OTF9QUkVFVVJPIG5vX05PIGZpX0ZJX1BSRUVVUk8gZnJfRlIgZW5fTlogaHVfSFVfRVVSTyBhcl9PTSBlbF9HUl9QUkVFVVJPIGVzX0dUIGVuX1BIIHBsX1BMX1BSRUVVUk8gdmkgamEgYXIgdGUgdGEgc3Ygc3Igc2wgc2ggcnUgcm8gcGEgbm8gbXQgbXIga24gaXQgaW4gaHUgZmkgZXQgZW4gZWwgZGUgZGEgYmcgYmUgemhfSEsgcHRfUFRfUFJFRVVSTyBlc19ITiBocl9IUiBlbl9HQl9FVVJPIGh1X0hVX1BSRUVVUk8gYXJfUUEgZ2FfSUUgZW5fSUVfUFJFRVVSTyBpd19JTCBhcl9BRSBndV9JTiBibl9JTiBpc19JUyBpdF9JVF9QUkVFVVJPIHBsX1BMX0VVUk8gZGVfQVQgdGhfVEhfVEggZW5fQVUgcm9fUk8gc3JfQkEgc3JfUlMgcnVfUlUgbmxfQkVfUFJFRVVSTyBmcl9CRV9QUkVFVVJPIGVuX0JFIGJnX0JHIGFyX0JIIGFyX1NBIGFyX1NEIHN2X1NFIGVuX1NHIHNsX1NJIGRhX0RLX0VVUk8gYmVfQlkgc2tfU0tfUFJFRVVSTyBsdF9MVF9FVVJPIGx2X0xWX0VVUk8gZW5fQ0EgaXRfQ0ggZGVfQ0ggYXJfU1kga29fS1Iga2tfS1ogc3JfQ1Mgc2hfQ1MgZXRfRUVfRVVSTyBlbF9DWSBjc19DWl9QUkVFVVJPIGFyX1ROIGRlX0RFIHN2X1NFX0VVUk8gZGFfREsgbHRfTFQgZnJfTFUgZGVfTFVfUFJFRVVSTyBsdl9MViBhcl9EWiBta19NSyBlbl9VUyBldF9FRSBhcl9FRyBlbF9DWV9FVVJPIG10X01UX1BSRUVVUk8gZXNfTVggbXNfTVkgZXNfRVNfUFJFRVVSTyBjYV9FU19QUkVFVVJPIHNyX1JTX0xhdG4gdmlfVk4gZXNfTkkgbmxfTkwgbmJfTk8gZmlfRkkgZnJfRlJfUFJFRVVSTyBlbl9HQiBlbF9HUiBlc19QQSBlc19QRSBwbF9QTDwhLS1Ob3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuLS0+PC9mZWF0dXJlPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjIxNSIgdHlwZT0iY29sbGF0aW9uIj56aCB0aCBrbyBpdyB1ayB0ciBzcSBzayBwdCBwbCBubCBtcyBtayBsdiBsdCBrayBpcyBociBndSBnYSBmciBlcyBjcyBjYSBlc19QUiBlbl9ISyBwdF9QVCBlc19QWSBhcl9ZRSBodV9IVSBpbl9JRCBlbl9JRSBoaV9JTiB0ZV9JTiB0YV9JTiBwYV9JTiBvcl9JTiBtcl9JTiBtbF9JTiBrbl9JTiBlbl9JTiBqYV9KUF9KUCBlbl9aQSBhcl9JUSBzcV9BTCBpdF9JVCBlc19BUiBkZV9BVF9QUkVFVVJPIHNyX1JTX0N5cmwgbmxfQkUgZnJfQkUgZW5fQkVfUFJFRVVSTyBhcl9KTyBqYV9KUCBlc19CTyBwdF9CUiBzdl9TRV9QUkVFVVJPIHpoX1NHIHNsX1NJX1BSRUVVUk8gc2tfU0sgZnJfQ0EgZXNfU1YgZnJfQ0ggZXNfQ0wgemhfQ04gYXJfS1cgZXNfQ08gZXNfQ1Igbm9fTk9fTlkgdGhfVEggYXJfTEIgZWxfQ1lfUFJFRVVSTyBtdF9NVF9FVVJPIGNzX0NaIHRyX1RSIGRlX0RFX1BSRUVVUk8gemhfVFcgc2tfU0tfRVVSTyBsdF9MVF9QUkVFVVJPIGZyX0xVX1BSRUVVUk8gZGVfTFUgbHZfTFZfUFJFRVVSTyBlc19ETyB1a19VQSBhcl9MWSBhcl9NQSBzcl9NRSBlc19VUyBlc19FQyBldF9FRV9QUkVFVVJPIGVzX1VZIG10X01UIGVuX01UIGNzX0NaX0VVUk8gZXNfRVMgY2FfRVMgZXNfVkUgbmxfTkxfUFJFRVVSTyBub19OTyBmaV9GSV9QUkVFVVJPIGZyX0ZSIGVuX05aIGh1X0hVX0VVUk8gYXJfT00gZWxfR1JfUFJFRVVSTyBlc19HVCBlbl9QSCBwbF9QTF9QUkVFVVJPIHZpIGphIGFyIHRlIHRhIHN2IHNyIHNsIHNoIHJ1IHJvIHBhIG5vIG10IG1yIGtuIGl0IGluIGh1IGZpIGV0IGVuIGVsIGRlIGRhIGJnIGJlIHpoX0hLIHB0X1BUX1BSRUVVUk8gZXNfSE4gaHJfSFIgZW5fR0JfRVVSTyBodV9IVV9QUkVFVVJPIGFyX1FBIGdhX0lFIGVuX0lFX1BSRUVVUk8gaXdfSUwgYXJfQUUgZ3VfSU4gYm5fSU4gaXNfSVMgaXRfSVRfUFJFRVVSTyBwbF9QTF9FVVJPIGRlX0FUIHRoX1RIX1RIIGVuX0FVIHJvX1JPIHNyX0JBIHNyX1JTIHJ1X1JVIG5sX0JFX1BSRUVVUk8gZnJfQkVfUFJFRVVSTyBlbl9CRSBiZ19CRyBhcl9CSCBhcl9TQSBhcl9TRCBzdl9TRSBlbl9TRyBzbF9TSSBkYV9ES19FVVJPIGJlX0JZIHNrX1NLX1BSRUVVUk8gbHRfTFRfRVVSTyBsdl9MVl9FVVJPIGVuX0NBIGl0X0NIIGRlX0NIIGFyX1NZIGtvX0tSIGtrX0taIHNyX0NTIHNoX0NTIGV0X0VFX0VVUk8gZWxfQ1kgY3NfQ1pfUFJFRVVSTyBhcl9UTiBkZV9ERSBzdl9TRV9FVVJPIGRhX0RLIGx0X0xUIGZyX0xVIGRlX0xVX1BSRUVVUk8gbHZfTFYgYXJfRFogbWtfTUsgZW5fVVMgZXRfRUUgYXJfRUcgZWxfQ1lfRVVSTyBtdF9NVF9QUkVFVVJPIGVzX01YIG1zX01ZIGVzX0VTX1BSRUVVUk8gY2FfRVNfUFJFRVVSTyBzcl9SU19MYXRuIHZpX1ZOIGVzX05JIG5sX05MIG5iX05PIGZpX0ZJIGZyX0ZSX1BSRUVVUk8gZW5fR0IgZWxfR1IgZXNfUEEgZXNfUEUgcGxfUEw8IS0tTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLi0tPjwvZmVhdHVyZT4KKyAgICAgPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij5BcmFiIEhlYnIgVGhhaSBCZW5nIERldmEgR3VqciBLbmRhIE1seW0gT3J5YSBQdW5qIFRhbWwgVGVsdSBVcmR1IEhhbnMgSGFudCBKcGFuIExhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaSBLaG1yIEhhbmcgU2luaCBUaWJ0PC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJjaGFyYWN0ZXJzIj5hZiBhZl9OQSBhZl9aQSBhZ3EgYWdxX0NNIGFrIGFrX0dIIGFyIGFyXzAwMSBhcl9BRSBhcl9CSCBhcl9ESiBhcl9EWiBhcl9FRyBhcl9FSCBhcl9FUiBhcl9JTCBhcl9JUSBhcl9KTyBhcl9LTSBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9NUiBhcl9PTSBhcl9QUyBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TTyBhcl9TWSBhcl9URCBhcl9UTiBhcl9ZRSBhcyBhc19JTiBhc2EgYXNhX1RaIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmFzIGJhc19DTSBiZSBiZV9CWSBiZW0gYmVtX1pNIGJleiBiZXpfVFogYmcgYmdfQkcgYm0gYm1fTUwgYm8gYm9fQ04gYm9fSU4gYnIgYnJfRlIgYnJ4IGJyeF9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNnZyBjZ2dfVUcgY2hyIGNocl9VUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkYXYgZGF2X0tFIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGRqZSBkamVfTkUgZHVhIGR1YV9DTSBkeW8gZHlvX1NOIGR6IGR6X0JUIGVidSBlYnVfS0UgZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0dZIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1NaIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBld28gZXdvX0NNIGZhIGZhX0FGIGZhX0lSIGZmIGZmX1NOIGZpIGZpX0ZJIGZpbCBmaWxfUEggZm8gZm9fRk8gZnIgZnJfQkUgZnJfQkYgZnJfQkkgZnJfQkogZnJfQkwgZnJfQ0EgZnJfQ0QgZnJfQ0YgZnJfQ0cgZnJfQ0ggZnJfQ0kgZnJfQ00gZnJfREogZnJfRFogZnJfRlIgZnJfR0EgZnJfR0YgZnJfR04gZnJfR1AgZnJfR1EgZnJfSFQgZnJfS00gZnJfTFUgZnJfTUEgZnJfTUMgZnJfTUYgZnJfTUcgZnJfTUwgZnJfTVEgZnJfTVIgZnJfTVUgZnJfTkMgZnJfTkUgZnJfUEYgZnJfUkUgZnJfUlcgZnJfU0MgZnJfU04gZnJfU1kgZnJfVEQgZnJfVEcgZnJfVE4gZnJfVlUgZnJfWVQgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3N3IGdzd19DSCBndSBndV9JTiBndXogZ3V6X0tFIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9CQSBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBpZCBpZF9JRCBpZyBpZ19ORyBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBpdF9TTSBqYSBqYV9KUCBqbWMgam1jX1RaIGthYiBrYWJfRFoga2FtIGthbV9LRSBrZGUga2RlX1RaIGtlYSBrZWFfQ1Yga2hxIGtocV9NTCBraSBraV9LRSBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga2xuIGtsbl9LRSBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUCBrb19LUiBrb2sga29rX0lOIGtzYiBrc2JfVFoga3NmIGtzZl9DTSBrdyBrd19HQiBsYWcgbGFnX1RaIGxnIGxnX1VHIGxuIGxuX0FPIGxuX0NEIGxuX0NGIGxuX0NHIGxvIGxvX0xBIGx0IGx0X0xUIGx1IGx1X0NEIGx1byBsdW9fS0UgbHV5IGx1eV9LRSBsdiBsdl9MViBtYXMgbWFzX0tFIG1hc19UWiBtZXIgbWVyX0tFIG1mZSBtZmVfTVUgbWcgbWdfTUcgbWdoIG1naF9NWiBtZ28gbWdvX0NNIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG1zX1NHIG10IG10X01UIG11YSBtdWFfQ00gbmFxIG5hcV9OQSBuYiBuYl9OTyBuZCBuZF9aVyBuZSBuZV9JTiBuZV9OUCBubCBubF9BVyBubF9CRSBubF9DVyBubF9OTCBubF9TUiBubF9TWCBubWcgbm1nX0NNIG5uIG5uX05PIG51cyBudXNfU0QgbnluIG55bl9VRyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0FPIHB0X0JSIHB0X0NWIHB0X0dXIHB0X01PIHB0X01aIHB0X1BUIHB0X1NUIHB0X1RMIHJtIHJtX0NIIHJuIHJuX0JJIHJvIHJvX01EIHJvX1JPIHJvZiByb2ZfVFogcnUgcnVfQlkgcnVfS0cgcnVfS1ogcnVfTUQgcnVfUlUgcnVfVUEgcncgcndfUlcgcndrIHJ3a19UWiBzYXEgc2FxX0tFIHNicCBzYnBfVFogc2VoIHNlaF9NWiBzZXMgc2VzX01MIHNnIHNnX0NGIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaV9MYXRuIHZhaV9MYXRuX0xSIHZpIHZpX1ZOIHZ1biB2dW5fVFogeG9nIHhvZ19VRyB5YXYgeWF2X0NNIHlvIHlvX05HIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXIHp1IHp1X1pBPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS43LjAiPgorICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjE1NiIgdHlwZT0iZm9ybWF0dGluZyI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIG1zX01ZIGFyX1FBIGlzX0lTIGZpX0ZJIHBsIGVuX01UIGl0X0NIIG5sX0JFIGFyX1NBIGFyX0lRIGVzX1BSIGVzX0NMIGZpIGRlX0FUIGRhIGVuX0dCIGVzX1BBIHNyIGFyX1lFIG1rX01LIG1rIGVuX0NBIHZpX1ZOIG5sX05MIGVzX1VTIHpoX0NOIGVzX0hOIGVuX1VTIGZyIHRoIGFyIGFyX01BIGx2IGRlIGluX0lEIGhyIGVuX1pBIGtvX0tSIGFyX1ROIGluIGphIHNyX1JTIGJlX0JZIHpoX1RXIGFyX1NEIHB0IGlzIGphX0pQX0pQXyN1LWNhLWphcGFuZXNlIGVzX0JPIGFyX0RaIG1zIGVzX0FSIGFyX0FFIGZyX0NBIHNsIGVzIGx0X0xUIHNyX01FXyNMYXRuIGFyX1NZIHJ1X1JVIGZyX0JFIGVzX0VTIGJnIGl3X0lMIHN2IGVuIGl3IGRhX0RLIGVzX0NSIHpoX0hLIHpoIGNhX0VTIHRoX1RIIHVrX1VBIGVzX0RPIGVzX1ZFIHBsX1BMIGFyX0xZIGFyX0pPIGl0IHVrIGh1X0hVIGdhIGVzX0dUIGVzX1BZIGJnX0JHIGhyX0hSIHNyX0JBXyNMYXRuIHJvX1JPIGZyX0xVIG5vIGx0IGVuX1NHIGVzX0VDIHNyX0JBIGVzX05JIHNrIHJ1IG10IGVzX1NWIG5sIGhpX0lOIGV0IGVsX0dSIHNsX1NJIGl0X0lUIGphX0pQIGRlX0xVIGZyX0NIIG10X01UIGFyX0JIIHNxIHZpIHNyX01FIHB0X0JSIG5vX05PIGVsIGRlX0NIIHpoX1NHIGFyX0tXIGFyX0VHIGdhX0lFIGVzX1BFIGNzX0NaIHRyX1RSIGNzIGVzX1VZIGVuX0lFIGVuX0lOIGFyX09NIHNyX0NTIGNhIGJlIHNyX18jTGF0biBrbyBzcV9BTCBwdF9QVCBsdl9MViBzcl9SU18jTGF0biBza19TSyBlc19NWCBlbl9BVSBub19OT19OWSBlbl9OWiBzdl9TRSBybyBhcl9MQiBkZV9ERSB0aF9USF9USF8jdS1udS10aGFpIHRyIGVzX0NPIGVuX1BIIGV0X0VFIGVsX0NZIGh1IGZyX0ZSCisgICAgICA8L2ZlYXR1cmU+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTU2IiB0eXBlPSJjb2xsYXRpb24iPgorICAgICAgIDwhLS0gTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLiAtLT4KKyAgICAgICBtc19NWSBhcl9RQSBpc19JUyBmaV9GSSBwbCBlbl9NVCBpdF9DSCBubF9CRSBhcl9TQSBhcl9JUSBlc19QUiBlc19DTCBmaSBkZV9BVCBkYSBlbl9HQiBlc19QQSBzciBhcl9ZRSBta19NSyBtayBlbl9DQSB2aV9WTiBubF9OTCBlc19VUyB6aF9DTiBlc19ITiBlbl9VUyBmciB0aCBhciBhcl9NQSBsdiBkZSBpbl9JRCBociBlbl9aQSBrb19LUiBhcl9UTiBpbiBqYSBzcl9SUyBiZV9CWSB6aF9UVyBhcl9TRCBwdCBpcyBqYV9KUF9KUF8jdS1jYS1qYXBhbmVzZSBlc19CTyBhcl9EWiBtcyBlc19BUiBhcl9BRSBmcl9DQSBzbCBlcyBsdF9MVCBzcl9NRV8jTGF0biBhcl9TWSBydV9SVSBmcl9CRSBlc19FUyBiZyBpd19JTCBzdiBlbiBpdyBkYV9ESyBlc19DUiB6aF9ISyB6aCBjYV9FUyB0aF9USCB1a19VQSBlc19ETyBlc19WRSBwbF9QTCBhcl9MWSBhcl9KTyBpdCB1ayBodV9IVSBnYSBlc19HVCBlc19QWSBiZ19CRyBocl9IUiBzcl9CQV8jTGF0biByb19STyBmcl9MVSBubyBsdCBlbl9TRyBlc19FQyBzcl9CQSBlc19OSSBzayBydSBtdCBlc19TViBubCBoaV9JTiBldCBlbF9HUiBzbF9TSSBpdF9JVCBqYV9KUCBkZV9MVSBmcl9DSCBtdF9NVCBhcl9CSCBzcSB2aSBzcl9NRSBwdF9CUiBub19OTyBlbCBkZV9DSCB6aF9TRyBhcl9LVyBhcl9FRyBnYV9JRSBlc19QRSBjc19DWiB0cl9UUiBjcyBlc19VWSBlbl9JRSBlbl9JTiBhcl9PTSBzcl9DUyBjYSBiZSBzcl9fI0xhdG4ga28gc3FfQUwgcHRfUFQgbHZfTFYgc3JfUlNfI0xhdG4gc2tfU0sgZXNfTVggZW5fQVUgbm9fTk9fTlkgZW5fTlogc3ZfU0Ugcm8gYXJfTEIgZGVfREUgdGhfVEhfVEhfI3UtbnUtdGhhaSB0ciBlc19DTyBlbl9QSCBldF9FRSBlbF9DWSBodSBmcl9GUgorICAgICAgPC9mZWF0dXJlPgorICAgICA8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPkFyYWIgSGViciBUaGFpIEJlbmcgRGV2YSBHdWpyIEtuZGEgTWx5bSBPcnlhIFB1bmogVGFtbCBUZWx1IFVyZHUgSGFucyBIYW50IEpwYW4gTGF0biBDeXJsIEdyZWsgQXJtbiBHZW9yIFJ1bnIgT2dhbSBUaGFpIEtobXIgSGFuZyBTaW5oIFRpYnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI2LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGpnbyBqZ29fQ00gam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBteSBteV9NTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaSB2YWlfTGF0biB2YWlfTGF0bl9MUiB2YWlfVmFpaSB2YWlfVmFpaV9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKwk8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2phdmEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvamF2YS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5ZTVmNQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2phdmEueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+Cis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iamF2YSI+CisgICAgICAgICAgICA8bmFtZXM+CisgICAgICAgICAgICAgICAgPG5hbWUgdHlwZT0iZnVsbCI+SmF2YTwvbmFtZT4KKyAgICAgICAgICAgICAgICA8bmFtZSB0eXBlPSJzaG9ydCI+SmF2YTwvbmFtZT4KKyAgICAgICAgICAgIDwvbmFtZXM+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS4zLjEiLz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjQuMiIvPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNS4wIi8+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS42LjAiLz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjcuMCIvPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKwk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2psYXlvdXQtaW50cm9kdWN0aW9uLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2psYXlvdXQtaW50cm9kdWN0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2EzMzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvamxheW91dC1pbnRyb2R1Y3Rpb24ueG1sCkBAIC0wLDAgKzEsMjUgQEAKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJqYXZhIj4KKyAgICAgICAgICAgICA8cmVsZWFzZXM+CisJCTxyZWxlYXNlIHZlcnNpb249IjEuNC4yIj4KKwkJCTxjYXBhYmlsaXRpZXM+CisJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij4KKwkJCQkJQXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWkKKwkJCQk8L2ZlYXR1cmU+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCQk8cmVsZWFzZSB2ZXJzaW9uPSIxLjUuMCI+CisJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+CisJCQkJICAgICtLaG1yIEhhbmcgU2luaCBUaWJ0CisJCQkJPC9mZWF0dXJlPgorCQkJPC9jYXBhYmlsaXRpZXM+CisJCTwvcmVsZWFzZT4KKwkgICA8L3JlbGVhc2VzPgorCTwvaWN1UHJvZHVjdD4gIAorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvanVuaWNvZGUtaW50cm9kdWN0aW9uLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2p1bmljb2RlLWludHJvZHVjdGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwNzA3NwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2p1bmljb2RlLWludHJvZHVjdGlvbi54bWwKQEAgLTAsMCArMSwzNiBAQAorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImphdmEiPgorICAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMS40LjIiPgorCQkJPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iMy4wIi8+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCisJCTxyZWxlYXNlIHZlcnNpb249IjEuNS4wIj4KKwkJCTxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorCQkJPC9jYXBhYmlsaXRpZXM+CisJCTwvcmVsZWFzZT4KKworCQk8cmVsZWFzZSB2ZXJzaW9uPSIxLjYuMCI+CisJCQk8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAiLz4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMS43LjAiPgorCQkJPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNi4wIi8+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCisJICAgPC9yZWxlYXNlcz4KKwk8L2ljdVByb2R1Y3Q+ICAKKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgorCisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2xheW91dC1pbnRyb2R1Y3Rpb24ueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vaW5wdXQvbGF5b3V0LWludHJvZHVjdGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcxZGU2NwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2lucHV0L2xheW91dC1pbnRyb2R1Y3Rpb24ueG1sCkBAIC0wLDAgKzEsNjEgQEAKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorICAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMS43Ij4KKwkJCTxjYXBhYmlsaXRpZXM+CisJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij4KKwkJCQkJQXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUKKwkJCQk8L2ZlYXR1cmU+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCisJCTxyZWxlYXNlIHZlcnNpb249IjIuMiI+CisJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+CisJCQkJCStVcmR1CisJCQkJPC9mZWF0dXJlPgorCQkJPC9jYXBhYmlsaXRpZXM+CisJCTwvcmVsZWFzZT4KKworCQk8cmVsZWFzZSB2ZXJzaW9uPSIyLjYiPgorCQkJPGNhcGFiaWxpdGllcz4KKwkJCQk8ZmVhdHVyZSB0eXBlPSJsYXlvdXQiPgorCQkJCSAgICArSGFucyBIYW50IEpwYW4KKwkJCQkgICAgPCEtLSBDSksgTGFuZ3VhZ2UgVmFyaWFudHM/IC0tPgorCQkJCTwvZmVhdHVyZT4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMy4wIj4KKwkJCTxjYXBhYmlsaXRpZXM+CisJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij4KKwkJCQkgICAgK0xhdG4gQ3lybCBHcmVrIEFybW4gR2VvciBSdW5yIE9nYW0gVGhhaQorCQkJCTwvZmVhdHVyZT4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkJPHJlbGVhc2UgdmVyc2lvbj0iMy40Ij4KKwkJCTxjYXBhYmlsaXRpZXM+CisJCQkJPGZlYXR1cmUgdHlwZT0ibGF5b3V0Ij4KKwkJCQkgICAgK0tobXIKKwkJCQk8L2ZlYXR1cmU+CisJCQk8L2NhcGFiaWxpdGllcz4KKwkJPC9yZWxlYXNlPgorCisJCTxyZWxlYXNlIHZlcnNpb249IjMuNiI+CisJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCTxmZWF0dXJlIHR5cGU9ImxheW91dCI+CisJCQkJICAgICtIYW5nIFNpbmggVGlidAorCQkJCTwvZmVhdHVyZT4KKwkJCTwvY2FwYWJpbGl0aWVzPgorCQk8L3JlbGVhc2U+CisKKwkgICA8L3JlbGVhc2VzPgorCTwvaWN1UHJvZHVjdD4gIAorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CisKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNF8yLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzRfMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxODg2OQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzRfMi54bWwKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJqYXZhIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjQuMiI+CisgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTM0IiB0eXBlPSJmb3JtYXR0aW5nIj4KKyAgICAgICA8IS0tIE5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4gLS0+CisgICAgICAgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgaGlfSU4gaXcgaXdfSUwgamEgamFfSlAga28ga29fS1IgdGggdGhfVEggdGhfVEhfVEggemggemhfQ04gemhfSEsgemhfVFcgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fSUUgZW5fSU4gZW5fTlogZW5fWkEgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmkgZmlfRkkgZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgaHIgaHJfSFIgaHUgaHVfSFUgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbmwgbmxfQkUgbmxfTkwgbm8gbm9fTk8gbm9fTk9fTlkgcGwgcGxfUEwgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgc2ggc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfWVUgc3Ygc3ZfU0UgdHIgdHJfVFIgdWsgdWtfVUEgZW4gZW5fVVMKKyAgICAgIDwvZmVhdHVyZT4KKyAgICAgIDxmZWF0dXJlIHRvdGFsPSIxMzQiIHR5cGU9ImNvbGxhdGlvbiI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGhpX0lOIGl3IGl3X0lMIGphIGphX0pQIGtvIGtvX0tSIHRoIHRoX1RIIHRoX1RIX1RIIHpoIHpoX0NOIHpoX0hLIHpoX1RXIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuX0FVIGVuX0NBIGVuX0dCIGVuX0lFIGVuX0lOIGVuX05aIGVuX1pBIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZpIGZpX0ZJIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGhyIGhyX0hSIGh1IGh1X0hVIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIG5vX05PX05ZIHBsIHBsX1BMIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHNoIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX1lVIHN2IHN2X1NFIHRyIHRyX1RSIHVrIHVrX1VBIGVuIGVuX1VTCisgICAgICA8L2ZlYXR1cmU+CisgICAgIDxmZWF0dXJlIHR5cGU9ImxheW91dCI+QXJhYiBIZWJyIFRoYWkgQmVuZyBEZXZhIEd1anIgS25kYSBNbHltIE9yeWEgUHVuaiBUYW1sIFRlbHUgVXJkdSBIYW5zIEhhbnQgSnBhbiBMYXRuIEN5cmwgR3JlayBBcm1uIEdlb3IgUnVuciBPZ2FtIFRoYWk8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSIzLjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNoYXJhY3RlcnMiPmFmIGFmX05BIGFmX1pBIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZnJfU04gZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX05HIGhhdyBoYXdfVVMgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpaSBpaV9DTiBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19DeXJsIGtrX0N5cmxfS1oga2wga2xfR0wga20ga21fS0gga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBuZSBuZV9JTiBuZV9OUCBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBwYSBwYV9BcmFiIHBhX0FyYWJfUEsgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV81XzAueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNV8wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjE5YWJiCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNV8wLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImphdmEiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjEuNS4wIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxMzUiIHR5cGU9ImxvY2FsZXMiPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGhpX0lOIGl3IGl3X0lMIGphIGphX0pQIGtvIGtvX0tSIHRoIHRoX1RIIHRoX1RIX1RIIHZpIHZpX1ZOIHpoIHpoX0NOIHpoX0hLIHpoX1RXIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuX0FVIGVuX0NBIGVuX0dCIGVuX0lFIGVuX0lOIGVuX05aIGVuX1pBIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZpIGZpX0ZJIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGhyIGhyX0hSIGh1IGh1X0hVIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIG5vX05PX05ZIHBsIHBsX1BMIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0NTIHN2IHN2X1NFIHRyIHRyX1RSIHVrIHVrX1VBIGVuX1VTIGVuPCEtLU5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4tLT48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTM1IiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGhpX0lOIGl3IGl3X0lMIGphIGphX0pQIGtvIGtvX0tSIHRoIHRoX1RIIHRoX1RIX1RIIHZpIHZpX1ZOIHpoIHpoX0NOIHpoX0hLIHpoX1RXIGJlIGJlX0JZIGJnIGJnX0JHIGNhIGNhX0VTIGNzIGNzX0NaIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuX0FVIGVuX0NBIGVuX0dCIGVuX0lFIGVuX0lOIGVuX05aIGVuX1pBIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZpIGZpX0ZJIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGhyIGhyX0hSIGh1IGh1X0hVIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIG5vX05PX05ZIHBsIHBsX1BMIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0NTIHN2IHN2X1NFIHRyIHRyX1RSIHVrIHVrX1VBIGVuX1VTIGVuPCEtLU5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4tLT48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanZteG1sLzFfNl8wLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzZfMC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkOTAxYwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzZfMC54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJqYXZhIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIxLjYuMCI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjE1IiB0eXBlPSJmb3JtYXR0aW5nIj56aCB0aCBrbyBpdyB1ayB0ciBzcSBzayBwdCBwbCBubCBtcyBtayBsdiBsdCBrayBpcyBociBndSBnYSBmciBlcyBjcyBjYSBlc19QUiBlbl9ISyBwdF9QVCBlc19QWSBhcl9ZRSBodV9IVSBpbl9JRCBlbl9JRSBoaV9JTiB0ZV9JTiB0YV9JTiBwYV9JTiBvcl9JTiBtcl9JTiBtbF9JTiBrbl9JTiBlbl9JTiBqYV9KUF9KUCBlbl9aQSBhcl9JUSBzcV9BTCBpdF9JVCBlc19BUiBkZV9BVF9QUkVFVVJPIHNyX1JTX0N5cmwgbmxfQkUgZnJfQkUgZW5fQkVfUFJFRVVSTyBhcl9KTyBqYV9KUCBlc19CTyBwdF9CUiBzdl9TRV9QUkVFVVJPIHpoX1NHIHNsX1NJX1BSRUVVUk8gc2tfU0sgZnJfQ0EgZXNfU1YgZnJfQ0ggZXNfQ0wgemhfQ04gYXJfS1cgZXNfQ08gZXNfQ1Igbm9fTk9fTlkgdGhfVEggYXJfTEIgZWxfQ1lfUFJFRVVSTyBtdF9NVF9FVVJPIGNzX0NaIHRyX1RSIGRlX0RFX1BSRUVVUk8gemhfVFcgc2tfU0tfRVVSTyBsdF9MVF9QUkVFVVJPIGZyX0xVX1BSRUVVUk8gZGVfTFUgbHZfTFZfUFJFRVVSTyBlc19ETyB1a19VQSBhcl9MWSBhcl9NQSBzcl9NRSBlc19VUyBlc19FQyBldF9FRV9QUkVFVVJPIGVzX1VZIG10X01UIGVuX01UIGNzX0NaX0VVUk8gZXNfRVMgY2FfRVMgZXNfVkUgbmxfTkxfUFJFRVVSTyBub19OTyBmaV9GSV9QUkVFVVJPIGZyX0ZSIGVuX05aIGh1X0hVX0VVUk8gYXJfT00gZWxfR1JfUFJFRVVSTyBlc19HVCBlbl9QSCBwbF9QTF9QUkVFVVJPIHZpIGphIGFyIHRlIHRhIHN2IHNyIHNsIHNoIHJ1IHJvIHBhIG5vIG10IG1yIGtuIGl0IGluIGh1IGZpIGV0IGVuIGVsIGRlIGRhIGJnIGJlIHpoX0hLIHB0X1BUX1BSRUVVUk8gZXNfSE4gaHJfSFIgZW5fR0JfRVVSTyBodV9IVV9QUkVFVVJPIGFyX1FBIGdhX0lFIGVuX0lFX1BSRUVVUk8gaXdfSUwgYXJfQUUgZ3VfSU4gYm5fSU4gaXNfSVMgaXRfSVRfUFJFRVVSTyBwbF9QTF9FVVJPIGRlX0FUIHRoX1RIX1RIIGVuX0FVIHJvX1JPIHNyX0JBIHNyX1JTIHJ1X1JVIG5sX0JFX1BSRUVVUk8gZnJfQkVfUFJFRVVSTyBlbl9CRSBiZ19CRyBhcl9CSCBhcl9TQSBhcl9TRCBzdl9TRSBlbl9TRyBzbF9TSSBkYV9ES19FVVJPIGJlX0JZIHNrX1NLX1BSRUVVUk8gbHRfTFRfRVVSTyBsdl9MVl9FVVJPIGVuX0NBIGl0X0NIIGRlX0NIIGFyX1NZIGtvX0tSIGtrX0taIHNyX0NTIHNoX0NTIGV0X0VFX0VVUk8gZWxfQ1kgY3NfQ1pfUFJFRVVSTyBhcl9UTiBkZV9ERSBzdl9TRV9FVVJPIGRhX0RLIGx0X0xUIGZyX0xVIGRlX0xVX1BSRUVVUk8gbHZfTFYgYXJfRFogbWtfTUsgZW5fVVMgZXRfRUUgYXJfRUcgZWxfQ1lfRVVSTyBtdF9NVF9QUkVFVVJPIGVzX01YIG1zX01ZIGVzX0VTX1BSRUVVUk8gY2FfRVNfUFJFRVVSTyBzcl9SU19MYXRuIHZpX1ZOIGVzX05JIG5sX05MIG5iX05PIGZpX0ZJIGZyX0ZSX1BSRUVVUk8gZW5fR0IgZWxfR1IgZXNfUEEgZXNfUEUgcGxfUEw8IS0tTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLi0tPjwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTUiIHR5cGU9ImNvbGxhdGlvbiI+emggdGgga28gaXcgdWsgdHIgc3Egc2sgcHQgcGwgbmwgbXMgbWsgbHYgbHQga2sgaXMgaHIgZ3UgZ2EgZnIgZXMgY3MgY2EgZXNfUFIgZW5fSEsgcHRfUFQgZXNfUFkgYXJfWUUgaHVfSFUgaW5fSUQgZW5fSUUgaGlfSU4gdGVfSU4gdGFfSU4gcGFfSU4gb3JfSU4gbXJfSU4gbWxfSU4ga25fSU4gZW5fSU4gamFfSlBfSlAgZW5fWkEgYXJfSVEgc3FfQUwgaXRfSVQgZXNfQVIgZGVfQVRfUFJFRVVSTyBzcl9SU19DeXJsIG5sX0JFIGZyX0JFIGVuX0JFX1BSRUVVUk8gYXJfSk8gamFfSlAgZXNfQk8gcHRfQlIgc3ZfU0VfUFJFRVVSTyB6aF9TRyBzbF9TSV9QUkVFVVJPIHNrX1NLIGZyX0NBIGVzX1NWIGZyX0NIIGVzX0NMIHpoX0NOIGFyX0tXIGVzX0NPIGVzX0NSIG5vX05PX05ZIHRoX1RIIGFyX0xCIGVsX0NZX1BSRUVVUk8gbXRfTVRfRVVSTyBjc19DWiB0cl9UUiBkZV9ERV9QUkVFVVJPIHpoX1RXIHNrX1NLX0VVUk8gbHRfTFRfUFJFRVVSTyBmcl9MVV9QUkVFVVJPIGRlX0xVIGx2X0xWX1BSRUVVUk8gZXNfRE8gdWtfVUEgYXJfTFkgYXJfTUEgc3JfTUUgZXNfVVMgZXNfRUMgZXRfRUVfUFJFRVVSTyBlc19VWSBtdF9NVCBlbl9NVCBjc19DWl9FVVJPIGVzX0VTIGNhX0VTIGVzX1ZFIG5sX05MX1BSRUVVUk8gbm9fTk8gZmlfRklfUFJFRVVSTyBmcl9GUiBlbl9OWiBodV9IVV9FVVJPIGFyX09NIGVsX0dSX1BSRUVVUk8gZXNfR1QgZW5fUEggcGxfUExfUFJFRVVSTyB2aSBqYSBhciB0ZSB0YSBzdiBzciBzbCBzaCBydSBybyBwYSBubyBtdCBtciBrbiBpdCBpbiBodSBmaSBldCBlbiBlbCBkZSBkYSBiZyBiZSB6aF9ISyBwdF9QVF9QUkVFVVJPIGVzX0hOIGhyX0hSIGVuX0dCX0VVUk8gaHVfSFVfUFJFRVVSTyBhcl9RQSBnYV9JRSBlbl9JRV9QUkVFVVJPIGl3X0lMIGFyX0FFIGd1X0lOIGJuX0lOIGlzX0lTIGl0X0lUX1BSRUVVUk8gcGxfUExfRVVSTyBkZV9BVCB0aF9USF9USCBlbl9BVSByb19STyBzcl9CQSBzcl9SUyBydV9SVSBubF9CRV9QUkVFVVJPIGZyX0JFX1BSRUVVUk8gZW5fQkUgYmdfQkcgYXJfQkggYXJfU0EgYXJfU0Qgc3ZfU0UgZW5fU0cgc2xfU0kgZGFfREtfRVVSTyBiZV9CWSBza19TS19QUkVFVVJPIGx0X0xUX0VVUk8gbHZfTFZfRVVSTyBlbl9DQSBpdF9DSCBkZV9DSCBhcl9TWSBrb19LUiBra19LWiBzcl9DUyBzaF9DUyBldF9FRV9FVVJPIGVsX0NZIGNzX0NaX1BSRUVVUk8gYXJfVE4gZGVfREUgc3ZfU0VfRVVSTyBkYV9ESyBsdF9MVCBmcl9MVSBkZV9MVV9QUkVFVVJPIGx2X0xWIGFyX0RaIG1rX01LIGVuX1VTIGV0X0VFIGFyX0VHIGVsX0NZX0VVUk8gbXRfTVRfUFJFRVVSTyBlc19NWCBtc19NWSBlc19FU19QUkVFVVJPIGNhX0VTX1BSRUVVUk8gc3JfUlNfTGF0biB2aV9WTiBlc19OSSBubF9OTCBuYl9OTyBmaV9GSSBmcl9GUl9QUkVFVVJPIGVuX0dCIGVsX0dSIGVzX1BBIGVzX1BFIHBsX1BMPCEtLU5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4tLT48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzZfMF8yNi54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV82XzBfMjYueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZDliOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV82XzBfMjYueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhLS0gQ29weXJpZ2h0IChjKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+CisKKzxpY3VJbmZvPgorIDxpY3VQcm9kdWN0cz4KKyAgPGljdVByb2R1Y3QgdHlwZT0iamF2YSI+CisgICA8cmVsZWFzZXM+CisgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS42LjAiPgorICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjE1MiIgdHlwZT0iZm9ybWF0dGluZyI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIGphX0pQIGVzX1BFIGVuIGphX0pQX0pQIGVzX1BBIHNyX0JBIG1rIGVzX0dUIGFyX0FFIG5vX05PIHNxX0FMIGJnIGFyX0lRIGFyX1lFIGh1IHB0X1BUIGVsX0NZIGFyX1FBIG1rX01LIHN2IGRlX0NIIGVuX1VTIGZpX0ZJIGlzIGNzIGVuX01UIHNsX1NJIHNrX1NLIGl0IHRyX1RSIHpoIHRoIGFyX1NBIG5vIGVuX0dCIHNyX0NTIGx0IHJvIGVuX05aIG5vX05PX05ZIGx0X0xUIGVzX05JIG5sIGdhX0lFIGZyX0JFIGVzX0VTIGFyX0xCIGtvIGZyX0NBIGV0X0VFIGFyX0tXIHNyX1JTIGVzX1VTIGVzX01YIGFyX1NEIGluX0lEIHJ1IGx2IGVzX1VZIGx2X0xWIGl3IHB0X0JSIGFyX1NZIGhyIGV0IGVzX0RPIGZyX0NIIGhpX0lOIGVzX1ZFIGFyX0JIIGVuX1BIIGFyX1ROIGZpIGRlX0FUIGVzIG5sX05MIGVzX0VDIHpoX1RXIGFyX0pPIGJlIGlzX0lTIGVzX0NPIGVzX0NSIGVzX0NMIGFyX0VHIGVuX1pBIHRoX1RIIGVsX0dSIGl0X0lUIGNhIGh1X0hVIGZyIGVuX0lFIHVrX1VBIHBsX1BMIGZyX0xVIG5sX0JFIGVuX0lOIGNhX0VTIGFyX01BIGVzX0JPIGVuX0FVIHNyIHpoX1NHIHB0IHVrIGVzX1NWIHJ1X1JVIGtvX0tSIHZpIGFyX0RaIHZpX1ZOIHNyX01FIHNxIGFyX0xZIGFyIHpoX0NOIGJlX0JZIHpoX0hLIGphIGl3X0lMIGJnX0JHIGluIG10X01UIGVzX1BZIHNsIGZyX0ZSIGNzX0NaIGl0X0NIIHJvX1JPIGVzX1BSIGVuX0NBIGRlX0RFIGdhIGRlX0xVIGRlIGVzX0FSIHNrIG1zX01ZIGhyX0hSIGVuX1NHIGRhIG10IHBsIGFyX09NIHRyIHRoX1RIX1RIIGVsIG1zIHN2X1NFIGRhX0RLIGVzX0hOCisgICAgICA8L2ZlYXR1cmU+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTUyIiB0eXBlPSJjb2xsYXRpb24iPgorICAgICAgIDwhLS0gTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLiAtLT4KKyAgICAgICBqYV9KUCBlc19QRSBlbiBqYV9KUF9KUCBlc19QQSBzcl9CQSBtayBlc19HVCBhcl9BRSBub19OTyBzcV9BTCBiZyBhcl9JUSBhcl9ZRSBodSBwdF9QVCBlbF9DWSBhcl9RQSBta19NSyBzdiBkZV9DSCBlbl9VUyBmaV9GSSBpcyBjcyBlbl9NVCBzbF9TSSBza19TSyBpdCB0cl9UUiB6aCB0aCBhcl9TQSBubyBlbl9HQiBzcl9DUyBsdCBybyBlbl9OWiBub19OT19OWSBsdF9MVCBlc19OSSBubCBnYV9JRSBmcl9CRSBlc19FUyBhcl9MQiBrbyBmcl9DQSBldF9FRSBhcl9LVyBzcl9SUyBlc19VUyBlc19NWCBhcl9TRCBpbl9JRCBydSBsdiBlc19VWSBsdl9MViBpdyBwdF9CUiBhcl9TWSBociBldCBlc19ETyBmcl9DSCBoaV9JTiBlc19WRSBhcl9CSCBlbl9QSCBhcl9UTiBmaSBkZV9BVCBlcyBubF9OTCBlc19FQyB6aF9UVyBhcl9KTyBiZSBpc19JUyBlc19DTyBlc19DUiBlc19DTCBhcl9FRyBlbl9aQSB0aF9USCBlbF9HUiBpdF9JVCBjYSBodV9IVSBmciBlbl9JRSB1a19VQSBwbF9QTCBmcl9MVSBubF9CRSBlbl9JTiBjYV9FUyBhcl9NQSBlc19CTyBlbl9BVSBzciB6aF9TRyBwdCB1ayBlc19TViBydV9SVSBrb19LUiB2aSBhcl9EWiB2aV9WTiBzcl9NRSBzcSBhcl9MWSBhciB6aF9DTiBiZV9CWSB6aF9ISyBqYSBpd19JTCBiZ19CRyBpbiBtdF9NVCBlc19QWSBzbCBmcl9GUiBjc19DWiBpdF9DSCByb19STyBlc19QUiBlbl9DQSBkZV9ERSBnYSBkZV9MVSBkZSBlc19BUiBzayBtc19NWSBocl9IUiBlbl9TRyBkYSBtdCBwbCBhcl9PTSB0ciB0aF9USF9USCBlbCBtcyBzdl9TRSBkYV9ESyBlc19ITgorICAgICAgPC9mZWF0dXJlPgorICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICA8L3JlbGVhc2U+CisgICA8L3JlbGVhc2VzPgorICA8L2ljdVByb2R1Y3Q+CisgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p2bXhtbC8xXzdfMC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV83XzAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZmZkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qdm14bWwvMV83XzAueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhLS0gQ29weXJpZ2h0IChjKSAyMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+CisKKzxpY3VJbmZvPgorIDxpY3VQcm9kdWN0cz4KKyAgPGljdVByb2R1Y3QgdHlwZT0iamF2YSI+CisgICA8cmVsZWFzZXM+CisgICAgPHJlbGVhc2UgdmVyc2lvbj0iMS43LjAiPgorICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgPGZlYXR1cmUgdG90YWw9IjE1NiIgdHlwZT0iZm9ybWF0dGluZyI+CisgICAgICAgPCEtLSBOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIC0tPgorICAgICAgIG1zX01ZIGFyX1FBIGlzX0lTIGZpX0ZJIHBsIGVuX01UIGl0X0NIIG5sX0JFIGFyX1NBIGFyX0lRIGVzX1BSIGVzX0NMIGZpIGRlX0FUIGRhIGVuX0dCIGVzX1BBIHNyIGFyX1lFIG1rX01LIG1rIGVuX0NBIHZpX1ZOIG5sX05MIGVzX1VTIHpoX0NOIGVzX0hOIGVuX1VTIGZyIHRoIGFyIGFyX01BIGx2IGRlIGluX0lEIGhyIGVuX1pBIGtvX0tSIGFyX1ROIGluIGphIHNyX1JTIGJlX0JZIHpoX1RXIGFyX1NEIHB0IGlzIGphX0pQX0pQXyN1LWNhLWphcGFuZXNlIGVzX0JPIGFyX0RaIG1zIGVzX0FSIGFyX0FFIGZyX0NBIHNsIGVzIGx0X0xUIHNyX01FXyNMYXRuIGFyX1NZIHJ1X1JVIGZyX0JFIGVzX0VTIGJnIGl3X0lMIHN2IGVuIGl3IGRhX0RLIGVzX0NSIHpoX0hLIHpoIGNhX0VTIHRoX1RIIHVrX1VBIGVzX0RPIGVzX1ZFIHBsX1BMIGFyX0xZIGFyX0pPIGl0IHVrIGh1X0hVIGdhIGVzX0dUIGVzX1BZIGJnX0JHIGhyX0hSIHNyX0JBXyNMYXRuIHJvX1JPIGZyX0xVIG5vIGx0IGVuX1NHIGVzX0VDIHNyX0JBIGVzX05JIHNrIHJ1IG10IGVzX1NWIG5sIGhpX0lOIGV0IGVsX0dSIHNsX1NJIGl0X0lUIGphX0pQIGRlX0xVIGZyX0NIIG10X01UIGFyX0JIIHNxIHZpIHNyX01FIHB0X0JSIG5vX05PIGVsIGRlX0NIIHpoX1NHIGFyX0tXIGFyX0VHIGdhX0lFIGVzX1BFIGNzX0NaIHRyX1RSIGNzIGVzX1VZIGVuX0lFIGVuX0lOIGFyX09NIHNyX0NTIGNhIGJlIHNyX18jTGF0biBrbyBzcV9BTCBwdF9QVCBsdl9MViBzcl9SU18jTGF0biBza19TSyBlc19NWCBlbl9BVSBub19OT19OWSBlbl9OWiBzdl9TRSBybyBhcl9MQiBkZV9ERSB0aF9USF9USF8jdS1udS10aGFpIHRyIGVzX0NPIGVuX1BIIGV0X0VFIGVsX0NZIGh1IGZyX0ZSCisgICAgICA8L2ZlYXR1cmU+CisgICAgICA8ZmVhdHVyZSB0b3RhbD0iMTU2IiB0eXBlPSJjb2xsYXRpb24iPgorICAgICAgIDwhLS0gTm90ZTogSmF2YSBsb2NhbGVzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYW4gSUNVLiAtLT4KKyAgICAgICBtc19NWSBhcl9RQSBpc19JUyBmaV9GSSBwbCBlbl9NVCBpdF9DSCBubF9CRSBhcl9TQSBhcl9JUSBlc19QUiBlc19DTCBmaSBkZV9BVCBkYSBlbl9HQiBlc19QQSBzciBhcl9ZRSBta19NSyBtayBlbl9DQSB2aV9WTiBubF9OTCBlc19VUyB6aF9DTiBlc19ITiBlbl9VUyBmciB0aCBhciBhcl9NQSBsdiBkZSBpbl9JRCBociBlbl9aQSBrb19LUiBhcl9UTiBpbiBqYSBzcl9SUyBiZV9CWSB6aF9UVyBhcl9TRCBwdCBpcyBqYV9KUF9KUF8jdS1jYS1qYXBhbmVzZSBlc19CTyBhcl9EWiBtcyBlc19BUiBhcl9BRSBmcl9DQSBzbCBlcyBsdF9MVCBzcl9NRV8jTGF0biBhcl9TWSBydV9SVSBmcl9CRSBlc19FUyBiZyBpd19JTCBzdiBlbiBpdyBkYV9ESyBlc19DUiB6aF9ISyB6aCBjYV9FUyB0aF9USCB1a19VQSBlc19ETyBlc19WRSBwbF9QTCBhcl9MWSBhcl9KTyBpdCB1ayBodV9IVSBnYSBlc19HVCBlc19QWSBiZ19CRyBocl9IUiBzcl9CQV8jTGF0biByb19STyBmcl9MVSBubyBsdCBlbl9TRyBlc19FQyBzcl9CQSBlc19OSSBzayBydSBtdCBlc19TViBubCBoaV9JTiBldCBlbF9HUiBzbF9TSSBpdF9JVCBqYV9KUCBkZV9MVSBmcl9DSCBtdF9NVCBhcl9CSCBzcSB2aSBzcl9NRSBwdF9CUiBub19OTyBlbCBkZV9DSCB6aF9TRyBhcl9LVyBhcl9FRyBnYV9JRSBlc19QRSBjc19DWiB0cl9UUiBjcyBlc19VWSBlbl9JRSBlbl9JTiBhcl9PTSBzcl9DUyBjYSBiZSBzcl9fI0xhdG4ga28gc3FfQUwgcHRfUFQgbHZfTFYgc3JfUlNfI0xhdG4gc2tfU0sgZXNfTVggZW5fQVUgbm9fTk9fTlkgZW5fTlogc3ZfU0Ugcm8gYXJfTEIgZGVfREUgdGhfVEhfVEhfI3UtbnUtdGhhaSB0ciBlc19DTyBlbl9QSCBldF9FRSBlbF9DWSBodSBmcl9GUgorICAgICAgPC9mZWF0dXJlPgorICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICA8L3JlbGVhc2U+CisgICA8L3JlbGVhc2VzPgorICA8L2ljdVByb2R1Y3Q+CisgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl8yLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl8yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDEwMTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzIueG1sCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuMiI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSIzLjIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl80LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl80LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JhMjIyCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzQueG1sCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuNCI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSIzLjIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl82LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl82LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM4N2FiCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzYueG1sCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuNiI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl82XzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzZfMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1YWNjZgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvMl82XzEueG1sCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjIuNi4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIi8+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzgueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8yXzgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjVlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzJfOC54bWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMi44Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIvPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM18wLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM18wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQ2MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzAueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuMCI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjAuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMTkiIHR5cGU9ImZvcm1hdHRpbmciPgorICAgICAgICAgICAgICAgICAgICAgICAgYWYgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUKKwkJCQkJCQlhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTQorCQkJCQkJCWFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhCisJCQkJCQkJY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IKKwkJCQkJCQllbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWgorCQkJCQkJCWVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPCisJCQkJCQkJZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEKKwkJCQkJCQllc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYQorCQkJCQkJCWZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhCisJCQkJCQkJZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUKKwkJCQkJCQlodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphCisJCQkJCQkJamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdAorCQkJCQkJCWx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PCisJCQkJCQkJbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0UgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYKKwkJCQkJCQlwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9ZVSBzayBza19TSyBzbCBzbF9TSQorCQkJCQkJCXNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX1lVIHN2IHN2X0ZJIHN2X1NFIHN3CisJCQkJCQkJc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsKKwkJCQkJCQl1a19VQSB2aSB2aV9WTiB6aCB6aF9DTiB6aF9ISyB6aF9NTyB6aF9TRyB6aF9UVworICAgICAgICAgICAgICAgICAgICAgICAgPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iNTkiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYmUgYmcgY2EgY3MgZGEgZGUgZWwgZW4gZW5fQkUgZW8gZXMgZXQgZmEgZmFfQUYgZmkgZm8gZnIgZ3UgaGUgaGkgaHIgaHUgaXMgaXQgamEga2sga2wga24ga28gbHQgbHYgbWsgbXIgbXQgbmIgbm4gcGEgcGwgcHMgcm8gcnUgc2ggc2sgc2wgc3Egc3Igc3YgdGEgdGUgdGggdHIgdWsgdmkgemggemhfSEsgemhfSGFudCB6aF9NTyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfMi54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxMmE1OQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM18yLnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjIiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wLjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjMwIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGtrIGtrX0taIGtsIGtsX0dMIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX1lVIHNyX0xhdG4gc3JfTGF0bl9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjYyIiB0eXBlPSJjb2xsYXRpb24iPmFyIGJlIGJnIGNhIGNzIGRhIGRlIGVsIGVuIGVuX0JFIGVvIGVzIGV0IGZhIGZhX0FGIGZpIGZvIGZyIGd1IGhlIGhpIGhyIGh1IGlzIGl0IGphIGtrIGtsIGtuIGtvIGx0IGx2IG1rIG1sIG1yIG10IG5iIG5uIG9tIG9yIHBhIHBsIHBzIHJvIHJ1IHNoIHNrIHNsIHNxIHNyIHN2IHRhIHRlIHRoIHRyIHVrIHZpIHpoIHpoX0hLIHpoX0hhbnQgemhfTU8gemhfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzQueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MmQ5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNC54bWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iMy40Ij4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNDIiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaHkgaHlfQU0gaHlfQU1fUkVWSVNFRCBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9DUyBzcl9MYXRuIHNyX0xhdG5fQ1Mgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfUEsgdXogdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjE5NyIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JTiBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBiZSBiZV9CWSBiZyBiZ19CRyBjYSBjYV9FUyBjcyBjc19DWiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbiBrbl9JTiBrbyBrb19LUiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaCBzaF9CQSBzaF9ZVSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9CQSBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9ZVSBzcl9ZVSBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9DTiB6aF9ISyB6aF9IYW50IHpoX01PIHpoX1NHIHpoX1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzRfMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyZDk3NwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzEueG1sCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuNCI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxOTciIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF8yLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OGM4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF8yLnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQuMiI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIxOTciIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF8zLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDcxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF8zLnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQuMyI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF80LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDcxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF80LnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQuMyI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF81LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM180XzUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MGYxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNF81LnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjQuNSI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjQyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDEiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYmUgYmVfQlkgYmcgYmdfQkcgY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2ggc2hfQkEgc2hfWVUgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQkEgc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfWVUgc3JfWVUgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdmkgdmlfVk4gemggemggemhfQ04gemhfSEsgemhfSGFudCB6aF9NTyB6aF9TRyB6aF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNi54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzNfNi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjNDUzMAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM182LnhtbApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSIzLjYiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI0NSIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQ1Mgc3JfTGF0biBzcl9MYXRuX0NTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyMDUiIHR5cGU9ImNvbGxhdGlvbiI+YXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSU4gYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYmUgYmVfQlkgYmcgYmdfQkcgYm4gY2EgY2FfRVMgY3MgY3NfQ1ogZGEgZGFfREsgZGUgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTFUgZWwgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fTVQgZW5fTlogZW5fUEggZW5fU0cgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZ2EgZ2FfSUUgZ3UgZ3VfSU4gaGUgaGVfSUwgaGkgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNoIHNoX0JBIHNoX1lVIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0JBIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX1lVIHNyX1lVIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoIHpoX0NOIHpoX0hLIHpoX0hhbnQgemhfTU8gemhfU0cgemhfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM184LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM184LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDcyZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzgueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuOCI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwN2ciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSIyNjYiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFtIGFtX0VUIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0N5cmwgYXpfQ3lybF9BWiBhel9MYXRuIGF6X0xhdG5fQVogYmUgYmVfQlkgYmcgYmdfQkcgYm4gYm5fQkQgYm5fSU4gY2EgY2FfRVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fQVUgZW5fQkUgZW5fQlcgZW5fQlogZW5fQ0EgZW5fR0IgZW5fSEsgZW5fSUUgZW5fSU4gZW5fSk0gZW5fTUggZW5fTVQgZW5fTkEgZW5fTlogZW5fUEggZW5fUEsgZW5fU0cgZW5fVFQgZW5fVVMgZW5fVVNfUE9TSVggZW5fVkkgZW5fWkEgZW5fWlcgZW8gZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfQ1IgZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgZXNfSE4gZXNfTVggZXNfTkkgZXNfUEEgZXNfUEUgZXNfUFIgZXNfUFkgZXNfU1YgZXNfVVMgZXNfVVkgZXNfVkUgZXQgZXRfRUUgZXUgZXVfRVMgZmEgZmFfQUYgZmFfSVIgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgZnJfTFUgZnJfTUMgZ2EgZ2FfSUUgZ2wgZ2xfRVMgZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGthIGthX0dFIGtrIGtrX0taIGtsIGtsX0dMIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfR3VydSBwYV9HdXJ1X0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0aSB0aV9FUiB0aV9FVCB0ciB0cl9UUiB1ayB1a19VQSB1ciB1cl9JTiB1cl9QSyB1eiB1el9BcmFiIHV6X0FyYWJfQUYgdXpfQ3lybCB1el9DeXJsX1VaIHV6X0xhdG4gdXpfTGF0bl9VWiB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIwNCIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBiZSBiZV9CWSBiZyBiZ19CRyBibiBjYSBjYV9FUyBjcyBjc19DWiBjeSBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoYXcgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga20ga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0lOIHBsIHBsX1BMIHBzIHBzX0FGIHB0IHB0X0JSIHB0X1BUIHJvIHJvX1JPIHJ1IHJ1X1JVIHJ1X1VBIHNrIHNrX1NLIHNsIHNsX1NJIHNxIHNxX0FMIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9GSSBzdl9TRSB0YSB0YV9JTiB0ZSB0ZV9JTiB0aCB0aF9USCB0ciB0cl9UUiB1ayB1a19VQSB2aSB2aV9WTiB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L2NhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICA8L3JlbGVhc2U+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICA8L2ljdVByb2R1Y3Q+CisgICAgPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM184XzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC8zXzhfMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjYWZlNAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvM184XzEueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLSBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIC0tPgorCis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorICAgIDxpY3VQcm9kdWN0cz4KKyAgICAgICAgPGljdVByb2R1Y3QgdHlwZT0iaWN1NGoiPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxyZWxlYXNlIHZlcnNpb249IjMuOC4xIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA3aiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI2NiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfS1oga2wga2xfR0wga20ga21fS0gga24ga25fSU4ga28ga29fS1Iga29rIGtva19JTiBrdyBrd19HQiBsdCBsdF9MVCBsdiBsdl9MViBtayBta19NSyBtbCBtbF9JTiBtciBtcl9JTiBtcyBtc19CTiBtc19NWSBtdCBtdF9NVCBuYiBuYl9OTyBubCBubF9CRSBubF9OTCBubiBubl9OTyBvbSBvbV9FVCBvbV9LRSBvciBvcl9JTiBwYSBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjA0IiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC80XzAueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC80XzAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjJlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMC54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4wIj4KKyAgICAgICAgICAgICAgICAgICAgPGNhcGFiaWxpdGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA4YyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjI4MiIgdHlwZT0iZm9ybWF0dGluZyI+YWYgYWZfTkEgYWZfWkEgYW0gYW1fRVQgYXIgYXJfQUUgYXJfQkggYXJfRFogYXJfRUcgYXJfSVEgYXJfSk8gYXJfS1cgYXJfTEIgYXJfTFkgYXJfTUEgYXJfT00gYXJfUUEgYXJfU0EgYXJfU0QgYXJfU1kgYXJfVE4gYXJfWUUgYXMgYXNfSU4gYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBjeV9HQiBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MSSBkZV9MVSBlbCBlbF9DWSBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9CWiBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9KTSBlbl9NSCBlbl9NVCBlbl9OQSBlbl9OWiBlbl9QSCBlbl9QSyBlbl9TRyBlbl9UVCBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBldSBldV9FUyBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBmcl9NQyBmcl9TTiBnYSBnYV9JRSBnbCBnbF9FUyBndSBndV9JTiBndiBndl9HQiBoYSBoYV9MYXRuIGhhX0xhdG5fTkcgaGF3IGhhd19VUyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBoeSBoeV9BTSBoeV9BTV9SRVZJU0VEIGlkIGlkX0lEIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGphIGphX0pQIGthIGthX0dFIGtrIGtrX0N5cmwga2tfQ3lybF9LWiBrbCBrbF9HTCBrbSBrbV9LSCBrbiBrbl9JTiBrbyBrb19LUiBrb2sga29rX0lOIGt3IGt3X0dCIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1sX0lOIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5lIG5lX0lOIG5lX05QIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc28gc29fREogc29fRVQgc29fS0Ugc29fU08gc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHN3IHN3X0tFIHN3X1RaIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX0hLIHpoX0hhbnNfTU8gemhfSGFuc19TRyB6aF9IYW50IHpoX0hhbnRfSEsgemhfSGFudF9NTyB6aF9IYW50X1RXPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdG90YWw9IjIxMSIgdHlwZT0iY29sbGF0aW9uIj5hciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoYXcgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga20ga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC80XzBfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzFiN2UwCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC80XzBfMS54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4wLjEiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDhpIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjgyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGZyX1NOIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmUgbmVfSU4gbmVfTlAgbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjExIiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC80XzFfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMV8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzVmZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC80XzFfMS54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNC4xLjEiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDhmIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjgyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGZyX1NOIGdhIGdhX0lFIGdsIGdsX0VTIGd1IGd1X0lOIGd2IGd2X0dCIGhhIGhhX0xhdG4gaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmUgbmVfSU4gbmVfTlAgbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjExIiB0eXBlPSJjb2xsYXRpb24iPmFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIGVsIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX01UIGVuX05aIGVuX1BIIGVuX1NHIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGdhIGdhX0lFIGd1IGd1X0lOIGhhdyBoZSBoZV9JTCBoaSBoaV9JTiBociBocl9IUiBodSBodV9IVSBpZCBpZF9JRCBpcyBpc19JUyBpdCBpdF9DSCBpdF9JVCBqYSBqYV9KUCBrayBra19LWiBrbCBrbF9HTCBrbSBrbiBrbl9JTiBrbyBrb19LUiBrb2sgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3IgcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19STyBydSBydV9SVSBydV9VQSBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0UgdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMi54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9qeG1sLzRfMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1MTQ3NwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNF8yLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0gQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKworPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKyAgICA8aWN1UHJvZHVjdHM+CisgICAgICAgIDxpY3VQcm9kdWN0IHR5cGU9ImljdTRqIj4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI0LjIiPgorICAgICAgICAgICAgICAgICAgICA8Y2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDlnIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjkyIiB0eXBlPSJmb3JtYXR0aW5nIj5hZiBhZl9OQSBhZl9aQSBhbSBhbV9FVCBhciBhcl9BRSBhcl9CSCBhcl9EWiBhcl9FRyBhcl9JUSBhcl9KTyBhcl9LVyBhcl9MQiBhcl9MWSBhcl9NQSBhcl9PTSBhcl9RQSBhcl9TQSBhcl9TRCBhcl9TWSBhcl9UTiBhcl9ZRSBhcyBhc19JTiBheiBhel9DeXJsIGF6X0N5cmxfQVogYXpfTGF0biBhel9MYXRuX0FaIGJlIGJlX0JZIGJnIGJnX0JHIGJuIGJuX0JEIGJuX0lOIGJvIGJvX0NOIGJvX0lOIGNhIGNhX0VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xJIGRlX0xVIGVsIGVsX0NZIGVsX0dSIGVuIGVuX0FVIGVuX0JFIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0dCIGVuX0hLIGVuX0lFIGVuX0lOIGVuX0pNIGVuX01IIGVuX01UIGVuX05BIGVuX05aIGVuX1BIIGVuX1BLIGVuX1NHIGVuX1RUIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZJIGVuX1pBIGVuX1pXIGVvIGVzIGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0RPIGVzX0VDIGVzX0VTIGVzX0dUIGVzX0hOIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGZhIGZhX0FGIGZhX0lSIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGZyX0xVIGZyX01DIGZyX1NOIGdhIGdhX0lFIGdsIGdsX0VTIGdzdyBnc3dfQ0ggZ3UgZ3VfSU4gZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGh5X0FNX1JFVklTRUQgaWQgaWRfSUQgaWkgaWlfQ04gaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2Ega2FfR0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tSIGtvayBrb2tfSU4ga3cga3dfR0IgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXQgbXRfTVQgbmIgbmJfTk8gbmUgbmVfSU4gbmVfTlAgbmwgbmxfQkUgbmxfTkwgbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9CUiBwdF9QVCBybyByb19NRCByb19STyBydSBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzbyBzb19ESiBzb19FVCBzb19LRSBzb19TTyBzcSBzcV9BTCBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogdGEgdGFfSU4gdGUgdGVfSU4gdGggdGhfVEggdGkgdGlfRVIgdGlfRVQgdHIgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdXogdXpfQXJhYiB1el9BcmFiX0FGIHV6X0N5cmwgdXpfQ3lybF9VWiB1el9MYXRuIHV6X0xhdG5fVVogdmkgdmlfVk4gemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfSEsgemhfSGFuc19NTyB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFcgenUgenVfWkE8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0b3RhbD0iMjIwIiB0eXBlPSJjb2xsYXRpb24iPmFmIGFmX05BIGFmX1pBIGFyIGFyX0FFIGFyX0JIIGFyX0RaIGFyX0VHIGFyX0lRIGFyX0pPIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX09NIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NZIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9JTiBjYSBjYV9FUyBjcyBjc19DWiBjeSBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBlbCBlbF9HUiBlbiBlbl9BVSBlbl9CRSBlbl9CVyBlbl9DQSBlbl9HQiBlbl9ISyBlbl9JRSBlbl9JTiBlbl9NVCBlbl9OWiBlbl9QSCBlbl9TRyBlbl9VUyBlbl9VU19QT1NJWCBlbl9WSSBlbl9aQSBlbl9aVyBlbyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19ETyBlc19FQyBlc19FUyBlc19HVCBlc19ITiBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmbyBmb19GTyBmciBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBmcl9MVSBnYSBnYV9JRSBndSBndV9JTiBoYXcgaGUgaGVfSUwgaGkgaGlfSU4gaHIgaHJfSFIgaHUgaHVfSFUgaWQgaWRfSUQgaXMgaXNfSVMgaXQgaXRfQ0ggaXRfSVQgamEgamFfSlAga2sga2tfS1oga2wga2xfR0wga20ga24ga25fSU4ga28ga29fS1Iga29rIGx0IGx0X0xUIGx2IGx2X0xWIG1rIG1rX01LIG1sIG1yIG1yX0lOIG1zIG1zX0JOIG1zX01ZIG10IG10X01UIG5iIG5iX05PIG5sIG5sX0JFIG5sX05MIG5uIG5uX05PIG9tIG9tX0VUIG9tX0tFIG9yIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGFfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQlIgcHRfUFQgcm8gcm9fUk8gcnUgcnVfUlUgcnVfVUEgc2kgc2lfTEsgc2sgc2tfU0sgc2wgc2xfU0kgc3Egc3FfQUwgc3Igc3JfQ3lybCBzcl9DeXJsX0JBIHNyX0N5cmxfTUUgc3JfQ3lybF9SUyBzcl9MYXRuIHNyX0xhdG5fQkEgc3JfTGF0bl9NRSBzcl9MYXRuX1JTIHN2IHN2X0ZJIHN2X1NFIHRhIHRhX0lOIHRlIHRlX0lOIHRoIHRoX1RIIHRyIHRyX1RSIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHZpIHZpX1ZOIHpoIHpoX0hhbnMgemhfSGFuc19DTiB6aF9IYW5zX1NHIHpoX0hhbnQgemhfSGFudF9ISyB6aF9IYW50X01PIHpoX0hhbnRfVFc8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvY2FwYWJpbGl0aWVzPgorICAgICAgICAgICAgICAgIDwvcmVsZWFzZT4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgIDwvaWN1UHJvZHVjdD4KKyAgICA8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vanhtbC81MF8xLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNTBfMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwZmM5ZgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL2p4bWwvNTBfMS54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Cis8IS0tIENvcHlyaWdodCAoYykgMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+CisKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisgICAgPGljdVByb2R1Y3RzPgorICAgICAgICA8aWN1UHJvZHVjdCB0eXBlPSJpY3U0aiI+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPHJlbGVhc2UgdmVyc2lvbj0iNTAuMSI+CisgICAgICAgICAgICAgICAgICAgIDxjYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI2LjIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNi4yIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAxMmgiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSI1OTMiIHR5cGU9ImZvcm1hdHRpbmciPmFmIGFmX05BIGFmX1pBIGFncSBhZ3FfQ00gYWsgYWtfR0ggYW0gYW1fRVQgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGFzYSBhc2FfVFogYXogYXpfQ3lybCBhel9DeXJsX0FaIGF6X0xhdG4gYXpfTGF0bl9BWiBiYXMgYmFzX0NNIGJlIGJlX0JZIGJlbSBiZW1fWk0gYmV6IGJlel9UWiBiZyBiZ19CRyBibSBibV9NTCBibiBibl9CRCBibl9JTiBibyBib19DTiBib19JTiBiciBicl9GUiBicnggYnJ4X0lOIGJzIGJzX0N5cmwgYnNfQ3lybF9CQSBic19MYXRuIGJzX0xhdG5fQkEgY2EgY2FfQUQgY2FfRVMgY2dnIGNnZ19VRyBjaHIgY2hyX1VTIGNzIGNzX0NaIGN5IGN5X0dCIGRhIGRhX0RLIGRhdiBkYXZfS0UgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZGplIGRqZV9ORSBkdWEgZHVhX0NNIGR5byBkeW9fU04gZHogZHpfQlQgZWJ1IGVidV9LRSBlZSBlZV9HSCBlZV9URyBlbCBlbF9DWSBlbF9HUiBlbiBlbl8xNTAgZW5fQUcgZW5fQVMgZW5fQVUgZW5fQkIgZW5fQkUgZW5fQk0gZW5fQlMgZW5fQlcgZW5fQlogZW5fQ0EgZW5fQ00gZW5fRE0gZW5fRkogZW5fRk0gZW5fR0IgZW5fR0QgZW5fR0cgZW5fR0ggZW5fR0kgZW5fR00gZW5fR1UgZW5fR1kgZW5fSEsgZW5fSUUgZW5fSU0gZW5fSU4gZW5fSkUgZW5fSk0gZW5fS0UgZW5fS0kgZW5fS04gZW5fS1kgZW5fTEMgZW5fTFIgZW5fTFMgZW5fTUcgZW5fTUggZW5fTVAgZW5fTVQgZW5fTVUgZW5fTVcgZW5fTkEgZW5fTkcgZW5fTlogZW5fUEcgZW5fUEggZW5fUEsgZW5fUFIgZW5fUFcgZW5fU0IgZW5fU0MgZW5fU0cgZW5fU0wgZW5fU1MgZW5fU1ogZW5fVEMgZW5fVE8gZW5fVFQgZW5fVFogZW5fVUcgZW5fVU0gZW5fVVMgZW5fVVNfUE9TSVggZW5fVkMgZW5fVkcgZW5fVkkgZW5fVlUgZW5fV1MgZW5fWkEgZW5fWk0gZW5fWlcgZW8gZXMgZXNfNDE5IGVzX0FSIGVzX0JPIGVzX0NMIGVzX0NPIGVzX0NSIGVzX0NVIGVzX0RPIGVzX0VBIGVzX0VDIGVzX0VTIGVzX0dRIGVzX0dUIGVzX0hOIGVzX0lDIGVzX01YIGVzX05JIGVzX1BBIGVzX1BFIGVzX1BIIGVzX1BSIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IGV0X0VFIGV1IGV1X0VTIGV3byBld29fQ00gZmEgZmFfQUYgZmFfSVIgZmYgZmZfU04gZmkgZmlfRkkgZmlsIGZpbF9QSCBmbyBmb19GTyBmciBmcl9CRSBmcl9CRiBmcl9CSSBmcl9CSiBmcl9CTCBmcl9DQSBmcl9DRCBmcl9DRiBmcl9DRyBmcl9DSCBmcl9DSSBmcl9DTSBmcl9ESiBmcl9EWiBmcl9GUiBmcl9HQSBmcl9HRiBmcl9HTiBmcl9HUCBmcl9HUSBmcl9IVCBmcl9LTSBmcl9MVSBmcl9NQSBmcl9NQyBmcl9NRiBmcl9NRyBmcl9NTCBmcl9NUSBmcl9NUiBmcl9NVSBmcl9OQyBmcl9ORSBmcl9QRiBmcl9SRSBmcl9SVyBmcl9TQyBmcl9TTiBmcl9TWSBmcl9URCBmcl9URyBmcl9UTiBmcl9WVSBmcl9ZVCBnYSBnYV9JRSBnbCBnbF9FUyBnc3cgZ3N3X0NIIGd1IGd1X0lOIGd1eiBndXpfS0UgZ3YgZ3ZfR0IgaGEgaGFfTGF0biBoYV9MYXRuX0dIIGhhX0xhdG5fTkUgaGFfTGF0bl9ORyBoYXcgaGF3X1VTIGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlpIGlpX0NOIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGpnbyBqZ29fQ00gam1jIGptY19UWiBrYSBrYV9HRSBrYWIga2FiX0RaIGthbSBrYW1fS0Uga2RlIGtkZV9UWiBrZWEga2VhX0NWIGtocSBraHFfTUwga2kga2lfS0Uga2sga2tfQ3lybCBra19DeXJsX0taIGtsIGtsX0dMIGtsbiBrbG5fS0Uga20ga21fS0gga24ga25fSU4ga28ga29fS1Aga29fS1Iga29rIGtva19JTiBrcyBrc19BcmFiIGtzX0FyYWJfSU4ga3NiIGtzYl9UWiBrc2Yga3NmX0NNIGt3IGt3X0dCIGxhZyBsYWdfVFogbGcgbGdfVUcgbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbG8gbG9fTEEgbHQgbHRfTFQgbHUgbHVfQ0QgbHVvIGx1b19LRSBsdXkgbHV5X0tFIGx2IGx2X0xWIG1hcyBtYXNfS0UgbWFzX1RaIG1lciBtZXJfS0UgbWZlIG1mZV9NVSBtZyBtZ19NRyBtZ2ggbWdoX01aIG1nbyBtZ29fQ00gbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXVhIG11YV9DTSBteSBteV9NTSBuYXEgbmFxX05BIG5iIG5iX05PIG5kIG5kX1pXIG5lIG5lX0lOIG5lX05QIG5sIG5sX0FXIG5sX0JFIG5sX0NXIG5sX05MIG5sX1NSIG5sX1NYIG5tZyBubWdfQ00gbm4gbm5fTk8gbnVzIG51c19TRCBueW4gbnluX1VHIG9tIG9tX0VUIG9tX0tFIG9yIG9yX0lOIHBhIHBhX0FyYWIgcGFfQXJhYl9QSyBwYV9HdXJ1IHBhX0d1cnVfSU4gcGwgcGxfUEwgcHMgcHNfQUYgcHQgcHRfQU8gcHRfQlIgcHRfQ1YgcHRfR1cgcHRfTU8gcHRfTVogcHRfUFQgcHRfU1QgcHRfVEwgcm0gcm1fQ0ggcm4gcm5fQkkgcm8gcm9fTUQgcm9fUk8gcm9mIHJvZl9UWiBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBydyByd19SVyByd2sgcndrX1RaIHNhcSBzYXFfS0Ugc2JwIHNicF9UWiBzZWggc2VoX01aIHNlcyBzZXNfTUwgc2cgc2dfQ0Ygc2hpIHNoaV9MYXRuIHNoaV9MYXRuX01BIHNoaV9UZm5nIHNoaV9UZm5nX01BIHNpIHNpX0xLIHNrIHNrX1NLIHNsIHNsX1NJIHNuIHNuX1pXIHNvIHNvX0RKIHNvX0VUIHNvX0tFIHNvX1NPIHNxIHNxX0FMIHNxX01LIHNyIHNyX0N5cmwgc3JfQ3lybF9CQSBzcl9DeXJsX01FIHNyX0N5cmxfUlMgc3JfTGF0biBzcl9MYXRuX0JBIHNyX0xhdG5fTUUgc3JfTGF0bl9SUyBzdiBzdl9BWCBzdl9GSSBzdl9TRSBzdyBzd19LRSBzd19UWiBzd19VRyBzd2Mgc3djX0NEIHRhIHRhX0lOIHRhX0xLIHRhX01ZIHRhX1NHIHRlIHRlX0lOIHRlbyB0ZW9fS0UgdGVvX1VHIHRoIHRoX1RIIHRpIHRpX0VSIHRpX0VUIHRvIHRvX1RPIHRyIHRyX0NZIHRyX1RSIHR3cSB0d3FfTkUgdHptIHR6bV9MYXRuIHR6bV9MYXRuX01BIHVrIHVrX1VBIHVyIHVyX0lOIHVyX1BLIHV6IHV6X0FyYWIgdXpfQXJhYl9BRiB1el9DeXJsIHV6X0N5cmxfVVogdXpfTGF0biB1el9MYXRuX1VaIHZhaSB2YWlfTGF0biB2YWlfTGF0bl9MUiB2YWlfVmFpaSB2YWlfVmFpaV9MUiB2aSB2aV9WTiB2dW4gdnVuX1RaIHhvZyB4b2dfVUcgeWF2IHlhdl9DTSB5byB5b19ORyB6aCB6aF9IYW5zIHpoX0hhbnNfQ04gemhfSGFuc19ISyB6aF9IYW5zX01PIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlIHRvdGFsPSI0MDEiIHR5cGU9ImNvbGxhdGlvbiI+YWYgYWZfTkEgYWZfWkEgYXIgYXJfMDAxIGFyX0FFIGFyX0JIIGFyX0RKIGFyX0RaIGFyX0VHIGFyX0VIIGFyX0VSIGFyX0lMIGFyX0lRIGFyX0pPIGFyX0tNIGFyX0tXIGFyX0xCIGFyX0xZIGFyX01BIGFyX01SIGFyX09NIGFyX1BTIGFyX1FBIGFyX1NBIGFyX1NEIGFyX1NPIGFyX1NZIGFyX1REIGFyX1ROIGFyX1lFIGFzIGFzX0lOIGF6IGF6X0xhdG4gYXpfTGF0bl9BWiBiZSBiZV9CWSBiZyBiZ19CRyBibiBibl9CRCBibl9JTiBicyBic19DeXJsIGJzX0N5cmxfQkEgYnNfTGF0biBic19MYXRuX0JBIGNhIGNhX0FEIGNhX0VTIGNociBjaHJfVVMgY3MgY3NfQ1ogY3kgY3lfR0IgZGEgZGFfREsgZGUgZGVfQVQgZGVfQkUgZGVfQ0ggZGVfREUgZGVfTEkgZGVfTFUgZHogZWUgZWVfR0ggZWVfVEcgZWwgZWxfQ1kgZWxfR1IgZW4gZW5fMTUwIGVuX0FHIGVuX0FTIGVuX0FVIGVuX0JCIGVuX0JFIGVuX0JNIGVuX0JTIGVuX0JXIGVuX0JaIGVuX0NBIGVuX0NNIGVuX0RNIGVuX0ZKIGVuX0ZNIGVuX0dCIGVuX0dEIGVuX0dHIGVuX0dIIGVuX0dJIGVuX0dNIGVuX0dVIGVuX0hLIGVuX0lFIGVuX0lNIGVuX0lOIGVuX0pFIGVuX0pNIGVuX0tFIGVuX0tJIGVuX0tOIGVuX0tZIGVuX0xDIGVuX0xSIGVuX0xTIGVuX01HIGVuX01IIGVuX01QIGVuX01UIGVuX01VIGVuX01XIGVuX05BIGVuX05HIGVuX05aIGVuX1BHIGVuX1BIIGVuX1BLIGVuX1BSIGVuX1BXIGVuX1NCIGVuX1NDIGVuX1NHIGVuX1NMIGVuX1NTIGVuX1RDIGVuX1RPIGVuX1RUIGVuX1RaIGVuX1VHIGVuX1VNIGVuX1VTIGVuX1VTX1BPU0lYIGVuX1ZDIGVuX1ZHIGVuX1ZJIGVuX1ZVIGVuX1dTIGVuX1pBIGVuX1pNIGVuX1pXIGVvIGVzIGVzXzQxOSBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19DUiBlc19DVSBlc19ETyBlc19FQSBlc19FQyBlc19FUyBlc19HUSBlc19HVCBlc19ITiBlc19JQyBlc19NWCBlc19OSSBlc19QQSBlc19QRSBlc19QSCBlc19QUiBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBldF9FRSBmYSBmYV9BRiBmYV9JUiBmaSBmaV9GSSBmaWwgZmlsX1BIIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0JGIGZyX0JJIGZyX0JKIGZyX0JMIGZyX0NBIGZyX0NEIGZyX0NGIGZyX0NHIGZyX0NIIGZyX0NJIGZyX0NNIGZyX0RKIGZyX0RaIGZyX0ZSIGZyX0dBIGZyX0dOIGZyX0dQIGZyX0dRIGZyX0hUIGZyX0tNIGZyX0xVIGZyX01BIGZyX01DIGZyX01GIGZyX01HIGZyX01MIGZyX01RIGZyX01SIGZyX01VIGZyX05DIGZyX05FIGZyX1BGIGZyX1JFIGZyX1JXIGZyX1NDIGZyX1NOIGZyX1NZIGZyX1REIGZyX1RHIGZyX1ROIGZyX1ZVIGdhIGdhX0lFIGd1IGd1X0lOIGhhIGhhX0xhdG4gaGFfTGF0bl9HSCBoYV9MYXRuX05FIGhhX0xhdG5fTkcgaGF3IGhlIGhlX0lMIGhpIGhpX0lOIGhyIGhyX0JBIGhyX0hSIGh1IGh1X0hVIGh5IGh5X0FNIGlkIGlkX0lEIGlnIGlnX05HIGlzIGlzX0lTIGl0IGl0X0NIIGl0X0lUIGl0X1NNIGphIGphX0pQIGthIGthX0dFIGtrIGtrX0taIGtsIGtsX0dMIGttIGttX0tIIGtuIGtuX0lOIGtvIGtvX0tQIGtvX0tSIGtvayBrb2tfSU4gbG4gbG5fQU8gbG5fQ0QgbG5fQ0YgbG5fQ0cgbHQgbHRfTFQgbHYgbHZfTFYgbWsgbWtfTUsgbWwgbWxfSU4gbXIgbXJfSU4gbXMgbXNfQk4gbXNfTVkgbXNfU0cgbXQgbXRfTVQgbXkgbXlfTU0gbmIgbmJfTk8gbmwgbmxfQVcgbmxfQkUgbmxfQ1cgbmxfTkwgbmxfU1IgbmxfU1ggbm4gbm5fTk8gb20gb21fRVQgb21fS0Ugb3Igb3JfSU4gcGEgcGFfQXJhYiBwYV9BcmFiX1BLIHBhX0d1cnUgcGFfR3VydV9JTiBwbCBwbF9QTCBwcyBwc19BRiBwdCBwdF9BTyBwdF9CUiBwdF9DViBwdF9HVyBwdF9NTyBwdF9NWiBwdF9QVCBwdF9TVCBwdF9UTCBybyByb19NRCByb19STyBydSBydV9CWSBydV9LRyBydV9LWiBydV9NRCBydV9SVSBydV9VQSBzaSBzaV9MSyBzayBza19TSyBzbCBzbF9TSSBzcSBzcV9BTCBzcV9NSyBzciBzcl9DeXJsIHNyX0N5cmxfQkEgc3JfQ3lybF9NRSBzcl9DeXJsX1JTIHNyX0xhdG4gc3JfTGF0bl9CQSBzcl9MYXRuX01FIHNyX0xhdG5fUlMgc3Ygc3ZfQVggc3ZfRkkgc3ZfU0Ugc3cgc3dfS0Ugc3dfVFogc3dfVUcgdGEgdGFfSU4gdGFfTEsgdGFfTVkgdGFfU0cgdGUgdGVfSU4gdGggdGhfVEggdG8gdG9fVE8gdHIgdHJfQ1kgdHJfVFIgdWsgdWtfVUEgdXIgdXJfSU4gdXJfUEsgdmkgdmlfVk4geW8geW9fTkcgemggemhfSGFucyB6aF9IYW5zX0NOIHpoX0hhbnNfU0cgemhfSGFudCB6aF9IYW50X0hLIHpoX0hhbnRfTU8gemhfSGFudF9UVyB6dSB6dV9aQTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9jYXBhYmlsaXRpZXM+CisgICAgICAgICAgICAgICAgPC9yZWxlYXNlPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgPC9pY3VQcm9kdWN0PgorICAgIDwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9vbGQteG1scy50YXIuYnoyIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vb2xkLXhtbHMudGFyLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNjZDkzCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vb2xkLXhtbHMudGFyLmJ6MgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjoyMTVlOWNjNjZiNzk2MmY1M2EwOGRiNTY0NTU4NTUzMzY2ZjA2ZjY0ZWI2ZDg1MDhhM2ZmMmRhYzQ3YzkwY2I2CitzaXplIDk3MTMKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3JlYWRtZS50eHQgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZWU1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK05vdGU6IHRoaXMgaXMgYSBiaXQgb2YgYSBtZXNzIHJpZ2h0IG5vdy4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3Rlc3R4bWwuY3BwIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vdGVzdHhtbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4ZmZkYwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3Rlc3R4bWwuY3BwCkBAIC0wLDAgKzEsNTQ2IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlICJ4bWxvdXQuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAidW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3B1dGlsLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y29sLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2FsLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2hhci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXJlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWRhdC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+IDIpIHx8ICgoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+MSkmJihVX0lDVV9WRVJTSU9OX01JTk9SX05VTT41KSkKKyNpbmNsdWRlICJ1bmljb2RlL3VjbGVhbi5oIgorI2VuZGlmCisKKworc3RhdGljIGNoYXIgKnByb2dOYW1lOworc3RhdGljIFVPcHRpb24gb3B0aW9uc1tdPXsKKyAgICBVT1BUSU9OX0hFTFBfSCwgICAgICAgICAgICAgLyogMCAqLworICAgIFVPUFRJT05fSEVMUF9RVUVTVElPTl9NQVJLLCAvKiAxICovCisgICAgVU9QVElPTl9WRVJCT1NFLCAgICAgICAgICAgIC8qIDIgKi8KKyAgICBVT1BUSU9OX0lDVURBVEFESVIsICAgICAgICAgLyogMyAqLworICAgIFVPUFRJT05fREVTVERJUiwgICAgICAgICAgICAvKiA0ICovCisgICAgVU9QVElPTl9DT1BZUklHSFQsICAgICAgICAgIC8qIDUgKi8KK307CisKK2NvbnN0IGNoYXIgKnVfZXJyb3JOYW1lU2hvcnQoVUVycm9yQ29kZSBjb2RlKSB7CisgICAgc3dpdGNoKGNvZGUpIHsKKyAgICAgICAgY2FzZSBVX1pFUk9fRVJST1I6IHJldHVybiAib2siOworICAgICAgICBjYXNlIFVfTUlTU0lOR19SRVNPVVJDRV9FUlJPUjogcmV0dXJuICJtaXNzaW5nIjsKKyAgICAgICAgZGVmYXVsdDogICByZXR1cm4gdV9lcnJvck5hbWUoY29kZSk7CisgICAgfQorfQorCit2b2lkIHVzYWdlQW5kRGllKGludCByZXRDb2RlKSB7CisgICAgICAgIHByaW50ZigiVXNhZ2U6ICVzIFstdl0gWy1vcHRpb25zXSAtbyBvdXRwdXQtZmlsZSBkaWN0aW9uYXJ5LWZpbGVcbiIsIHByb2dOYW1lKTsKKyAgICAgICAgcHJpbnRmKCJcdFJlYWQgaW4gd29yZCBsaXN0IGFuZCB3cml0ZSBvdXQgY29tcGFjdCB0cmllIGRpY3Rpb25hcnlcbiIKKyAgICAgICAgICAgICJvcHRpb25zOlxuIgorICAgICAgICAgICAgIlx0LWggb3IgLT8gb3IgLS1oZWxwICB0aGlzIHVzYWdlIHRleHRcbiIKKyAgICAgICAgICAgICJcdC1WIG9yIC0tdmVyc2lvbiAgICAgc2hvdyBhIHZlcnNpb24gbWVzc2FnZVxuIgorICAgICAgICAgICAgIlx0LWMgb3IgLS1jb3B5cmlnaHQgICBpbmNsdWRlIGEgY29weXJpZ2h0IG5vdGljZVxuIgorICAgICAgICAgICAgIlx0LXYgb3IgLS12ZXJib3NlICAgICB0dXJuIG9uIHZlcmJvc2Ugb3V0cHV0XG4iCisgICAgICAgICAgICAiXHQtaSBvciAtLWljdWRhdGFkaXIgIGRpcmVjdG9yeSBmb3IgbG9jYXRpbmcgYW55IG5lZWRlZCBpbnRlcm1lZGlhdGUgZGF0YSBmaWxlcyxcbiIKKyAgICAgICAgICAgICJcdCAgICAgICAgICAgICAgICAgICAgZm9sbG93ZWQgYnkgcGF0aCwgZGVmYXVsdHMgdG8gJXNcbiIKKyAgICAgICAgICAgICJcdC1kIG9yIC0tZGVzdGRpciAgICAgZGVzdGluYXRpb24gZGlyZWN0b3J5LCBmb2xsb3dlZCBieSB0aGUgcGF0aFxuIiwKKyAgICAgICAgICAgIHVfZ2V0RGF0YURpcmVjdG9yeSgpKTsKKyAgICAgICAgZXhpdCAocmV0Q29kZSk7Cit9CisKKy8qVV9DQVBJIHZvaWQgVV9FWFBPUlQyKi8KK3N0YXRpYyB2b2lkIF92ZXJzaW9uRnJvbVVTdHJpbmcoVVZlcnNpb25JbmZvIHZlcnNpb25BcnJheSwgY29uc3QgVUNoYXIgKnZlcnNpb25TdHJpbmcpIHsKKyAgICBpZih2ZXJzaW9uQXJyYXk9PU5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKHZlcnNpb25TdHJpbmchPU5VTEwpIHsKKyAgICAgICAgY2hhciB2ZXJjaGFyc1tVX01BWF9WRVJTSU9OX0xFTkdUSCsxXTsKKyAgICAgICAgdV9VQ2hhcnNUb0NoYXJzKHZlcnNpb25TdHJpbmcsIHZlcmNoYXJzLCBVX01BWF9WRVJTSU9OX0xFTkdUSCk7CisgICAgICAgIHVfdmVyc2lvbkZyb21TdHJpbmcodmVyc2lvbkFycmF5LCB2ZXJjaGFycyk7CisgICAgfQorfQorCisvKlVfQ0FQSSB2b2lkIFVfRVhQT1JUMiovCitzdGF0aWMgdm9pZCBfZ2V0Q0xEUlZlcnNpb25EaXJlY3QoVVZlcnNpb25JbmZvIHZlcnNpb25BcnJheSwgVUVycm9yQ29kZSAqc3RhdHVzKSB7CisgICAgVVJlc291cmNlQnVuZGxlICpyZXNpbmR4OworICAgIHJlc2luZHggPSB1cmVzX29wZW5EaXJlY3QoTlVMTCwgInN1cHBsZW1lbnRhbERhdGEiLCBzdGF0dXMpOworICAgIGlmKCFVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKy8vICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycjogY291bGQgbm90IG9wZW4gcmVzX2luZGV4LCAlc1xuIiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisvLyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisvLyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBVQ2hhciAqY2xkcnZlcjsKKyAgICAgICAgaW50MzJfdCBsZW47CisgICAgICAgIGNsZHJ2ZXIgPSB1cmVzX2dldFN0cmluZ0J5S2V5KHJlc2luZHgsICJjbGRyVmVyc2lvbiIsICZsZW4sIHN0YXR1cyk7CisgICAgICAgIGlmKCFVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKy8vICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlI6IGNvdWxkIG5vdCBsb2FkIENMRFJWZXJzaW9uIGtleTogJXNcbiIsIHVfZXJyb3JOYW1lKCpzdGF0dXMpKTsKKy8vICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisvLyAgICAgICAgfSBlbHNlIHsKKy8vICAgICAgICAgICAgVVZlcnNpb25JbmZvIGNsZHJWZXJzaW9uOworICAgICAgICAgICAgX3ZlcnNpb25Gcm9tVVN0cmluZyh2ZXJzaW9uQXJyYXksIGNsZHJ2ZXIpOworLy8gICAgICAgICAgICBzdHJjcHkodG1wLCAidHlwZT1cImNsZHJcIiB2ZXJzaW9uPVwiIik7CisvLyAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKGNsZHJWZXJzaW9uLCB0bXArc3RybGVuKHRtcCkpOworLy8gICAgICAgICAgICBzdHJjYXQodG1wLCAiXCIiKTsKKy8vICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VEYXRhKHhmLCAiZmVhdHVyZSIsIHRtcCwgVFJVRSk7CisgICAgICAgIH0KKyAgICAgICAgdXJlc19jbG9zZShyZXNpbmR4KTsKKyAgICB9Cit9CisKKy8qVV9DQVBJIHZvaWQgVV9FWFBPUlQyKi8KK3N0YXRpYyB2b2lkIF9nZXRDTERSVmVyc2lvbk9sZChVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5LCBVRXJyb3JDb2RlICpzdGF0dXMpIHsKKyAgICBVUmVzb3VyY2VCdW5kbGUgKnJlc2luZHg7CisgICAgcmVzaW5keCA9IHVyZXNfb3BlbkRpcmVjdChOVUxMLCAicmVzX2luZGV4Iiwgc3RhdHVzKTsKKyAgICBpZighVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisvLyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnI6IGNvdWxkIG5vdCBvcGVuIHJlc19pbmRleCwgJXNcbiIsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworLy8gICAgICAgIGZmbHVzaChzdGRlcnIpOworLy8gICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgVUNoYXIgKmNsZHJ2ZXI7CisgICAgICAgIGludDMyX3QgbGVuOworICAgICAgICBjbGRydmVyID0gdXJlc19nZXRTdHJpbmdCeUtleShyZXNpbmR4LCAiQ0xEUlZlcnNpb24iLCAmbGVuLCBzdGF0dXMpOworICAgICAgICBpZighVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisvLyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJSOiBjb3VsZCBub3QgbG9hZCBDTERSVmVyc2lvbiBrZXk6ICVzXG4iLCB1X2Vycm9yTmFtZSgqc3RhdHVzKSk7CisvLyAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOworLy8gICAgICAgIH0gZWxzZSB7CisvLyAgICAgICAgICAgIFVWZXJzaW9uSW5mbyBjbGRyVmVyc2lvbjsKKyAgICAgICAgICAgIF92ZXJzaW9uRnJvbVVTdHJpbmcodmVyc2lvbkFycmF5LCBjbGRydmVyKTsKKy8vICAgICAgICAgICAgc3RyY3B5KHRtcCwgInR5cGU9XCJjbGRyXCIgdmVyc2lvbj1cIiIpOworLy8gICAgICAgICAgICB1X3ZlcnNpb25Ub1N0cmluZyhjbGRyVmVyc2lvbiwgdG1wK3N0cmxlbih0bXApKTsKKy8vICAgICAgICAgICAgc3RyY2F0KHRtcCwgIlwiIik7CisvLyAgICAgICAgICAgIFhNTEVsZW1lbnQgaWN1RGF0YSh4ZiwgImZlYXR1cmUiLCB0bXAsIFRSVUUpOworICAgICAgICB9CisgICAgICAgIHVyZXNfY2xvc2UocmVzaW5keCk7CisgICAgfQorfQorCitpbnQgY291bGRfb3Blbihjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKmNvbW1lbnRzKSB7CisgICAgY2hhciB0bXBbMjAwXTsKKyAgICBVUmVzb3VyY2VCdW5kbGUgKnJiID0gTlVMTDsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICByYiA9IHVyZXNfb3BlbihOVUxMLCBsb2NhbGUsICZzdGF0dXMpOworICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgIHNwcmludGYodG1wLCAiIG9wZW46JXMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKTsKKyAgICAgICAgc3RyY2F0KGNvbW1lbnRzLCB0bXApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB1cmVzX2Nsb3NlKHJiKTsKKyAgICAgICAgc3ByaW50Zih0bXAsICIgb3BlbjolcyIsIHVfZXJyb3JOYW1lU2hvcnQoc3RhdHVzKSk7CisgICAgICAgIHN0cmNhdChjb21tZW50cywgdG1wKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQoraW50IGNvbF9jb3VsZF9vcGVuKGNvbnN0IGNoYXIgKmxvY2FsZSwgY2hhciAqY29tbWVudHMpIHsKKyAgICBjaGFyIHRtcFsyMDBdOworICAgIFVDb2xsYXRvciAqcmIgPSBOVUxMOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHJiID0gdWNvbF9vcGVuKGxvY2FsZSwgJnN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgc3ByaW50Zih0bXAsICIgb3BlbjolcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworICAgICAgICAvKnN0cmNhdChjb21tZW50cywgdG1wKTsgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdWNvbF9jbG9zZShyYik7CisgICAgICAgIHNwcmludGYodG1wLCAiIG9wZW46JXMiLCB1X2Vycm9yTmFtZVNob3J0KHN0YXR1cykpOworICAgICAgICAvKiBzdHJjYXQoY29tbWVudHMsIHRtcCk7ICovCisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworY29uc3QgY2hhciAqVURhdGVGb3JtYXRTeW1ib2xUeXBlX25hbWUoVURhdGVGb3JtYXRTeW1ib2xUeXBlIGkpIHsKK3N3aXRjaChpKSB7CisgICAgY2FzZSBVREFUX0VSQVM6IHJldHVybiAiVURBVF9FUkFTIjsgYnJlYWs7CisgICAgLyoqIFRoZSBtb250aCBuYW1lcywgZm9yIGV4YW1wbGUgRmVicnVhcnkgKi8KKyAgICBjYXNlIFVEQVRfTU9OVEhTOiByZXR1cm4gIlVEQVRfTU9OVEhTIjsgYnJlYWs7CisgICAgLyoqIFRoZSBzaG9ydCBtb250aCBuYW1lcywgZm9yIGV4YW1wbGUgRmViLiAqLworICAgIGNhc2UgVURBVF9TSE9SVF9NT05USFM6IHJldHVybiAiVURBVF9TSE9SVF9NT05USFMiOyBicmVhazsKKyAgICAvKiogVGhlIHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbmRheSAqLworICAgIGNhc2UgVURBVF9XRUVLREFZUzogcmV0dXJuICJVREFUX1dFRUtEQVlTIjsgYnJlYWs7CisgICAgLyoqIFRoZSBzaG9ydCB3ZWVrZGF5IG5hbWVzLCBmb3IgZXhhbXBsZSBNb24uICovCisgICAgY2FzZSBVREFUX1NIT1JUX1dFRUtEQVlTOiByZXR1cm4gIlVEQVRfU0hPUlRfV0VFS0RBWVMiOyBicmVhazsKKyAgICAvKiogVGhlIEFNL1BNIG5hbWVzLCBmb3IgZXhhbXBsZSBBTSAqLworICAgIGNhc2UgVURBVF9BTV9QTVM6IHJldHVybiAiVURBVF9BTV9QTVMiOyBicmVhazsKKyAgICAvKiogVGhlIGxvY2FsaXplZCBjaGFyYWN0ZXJzICovCisgICAgY2FzZSBVREFUX0xPQ0FMSVpFRF9DSEFSUzogcmV0dXJuICJVREFUX0xPQ0FMSVpFRF9DSEFSUyI7IGJyZWFrOworICAgIC8qKiBUaGUgbG9uZyBlcmEgbmFtZXMsIGZvciBleGFtcGxlIEFubm8gRG9taW5pICovCisjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+MyB8fCBVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4zCisgICAgY2FzZSBVREFUX0VSQV9OQU1FUzogcmV0dXJuICJVREFUX0VSQV9OQU1FUyI7IGJyZWFrOworI2VuZGlmCisjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+MyB8fCBVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4zCisgICAgLyoqIFRoZSBuYXJyb3cgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEYgKi8KKyAgICBjYXNlIFVEQVRfTkFSUk9XX01PTlRIUzogcmV0dXJuICJVREFUX05BUlJPV19NT05USFMiOyBicmVhazsKKyAgICAvKiogVGhlIG5hcnJvdyB3ZWVrZGF5IG5hbWVzLCBmb3IgZXhhbXBsZSBOICovCisgICAgY2FzZSBVREFUX05BUlJPV19XRUVLREFZUzogcmV0dXJuICJVREFUX05BUlJPV19XRUVLREFZUyI7IGJyZWFrOworICAgIC8qKiBTdGFuZGFsb25lIGNvbnRleHQgdmVyc2lvbnMgb2YgbW9udGhzICovCisgICAgY2FzZSBVREFUX1NUQU5EQUxPTkVfTU9OVEhTOiByZXR1cm4gIlVEQVRfU1RBTkRBTE9ORV9NT05USFMiOyBicmVhazsKKyAgICBjYXNlIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9NT05USFM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUyI7IGJyZWFrOworICAgIGNhc2UgVURBVF9TVEFOREFMT05FX05BUlJPV19NT05USFM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX05BUlJPV19NT05USFMiOyBicmVhazsKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHdlZWtkYXlzICovCisgICAgY2FzZSBVREFUX1NUQU5EQUxPTkVfV0VFS0RBWVM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX1dFRUtEQVlTIjsgYnJlYWs7CisgICAgY2FzZSBVREFUX1NUQU5EQUxPTkVfU0hPUlRfV0VFS0RBWVM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX1NIT1JUX1dFRUtEQVlTIjsgYnJlYWs7CisgICAgY2FzZSBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX1dFRUtEQVlTOiByZXR1cm4gIlVEQVRfU1RBTkRBTE9ORV9OQVJST1dfV0VFS0RBWVMiOyBicmVhazsKKyNlbmRpZgorI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPjMgfHwgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+NAorICAgIC8qKiBUaGUgcXVhcnRlcnMsIGZvciBleGFtcGxlIDFzdCBRdWFydGVyICovCisgICAgY2FzZSBVREFUX1FVQVJURVJTOiByZXR1cm4gIlVEQVRfUVVBUlRFUlMiOyBicmVhazsKKyAgICAvKiogVGhlIHNob3J0IHF1YXJ0ZXIgbmFtZXMsIGZvciBleGFtcGxlIFExICovCisgICAgY2FzZSBVREFUX1NIT1JUX1FVQVJURVJTOiByZXR1cm4gIlVEQVRfU0hPUlRfUVVBUlRFUlMiOyBicmVhazsKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHF1YXJ0ZXJzICovCisgICAgY2FzZSBVREFUX1NUQU5EQUxPTkVfUVVBUlRFUlM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX1FVQVJURVJTIjsgYnJlYWs7CisgICAgY2FzZSBVREFUX1NUQU5EQUxPTkVfU0hPUlRfUVVBUlRFUlM6IHJldHVybiAiVURBVF9TVEFOREFMT05FX1NIT1JUX1FVQVJURVJTIjsgYnJlYWs7CisjZW5kaWYKK30KKyAgICByZXR1cm4gIjxVbmtub3duPiI7Cit9CisKKworVURhdGVGb3JtYXRTeW1ib2xUeXBlIHNjYW5BcnJheVtdID0geworICAgIFVEQVRfRVJBUywKKyAgICAvKiogVGhlIG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGZWJydWFyeSAqLworICAgIFVEQVRfTU9OVEhTLAorICAgIC8qKiBUaGUgc2hvcnQgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEZlYi4gKi8KKyAgICBVREFUX1NIT1JUX01PTlRIUywKKyAgICAvKiogVGhlIHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbmRheSAqLworICAgIFVEQVRfV0VFS0RBWVMsCisgICAgLyoqIFRoZSBzaG9ydCB3ZWVrZGF5IG5hbWVzLCBmb3IgZXhhbXBsZSBNb24uICovCisgICAgVURBVF9TSE9SVF9XRUVLREFZUywKKyAgICAvKiogVGhlIEFNL1BNIG5hbWVzLCBmb3IgZXhhbXBsZSBBTSAqLworLy8gICAgVURBVF9BTV9QTVMsCisgICAgLyoqIFRoZSBsb2NhbGl6ZWQgY2hhcmFjdGVycyAqLworLy8gICAgVURBVF9MT0NBTElaRURfQ0hBUlMsCisgICAgLyoqIFRoZSBsb25nIGVyYSBuYW1lcywgZm9yIGV4YW1wbGUgQW5ubyBEb21pbmkgKi8KKy8vICAgIFVEQVRfRVJBX05BTUVTLAorICAgIC8qKiBUaGUgbmFycm93IG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGICovCisvLyAgICBVREFUX05BUlJPV19NT05USFMsCit9OworCitpbnQgKnN0YXJ0cyA9IE5VTEw7CisKK1VDaGFyICoqKnJvb3RkYXRhID0gTlVMTDsKKwordm9pZCBpbml0cm9vdChVRXJyb3JDb2RlICpzdGF0dXMpIHsKKyAgVURhdGVGb3JtYXQgKmZtdDsKKyAgZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZBVUxULCAicm9vdCIsIE5VTEwsIC0xLE5VTEwsMCwgc3RhdHVzKTsKKyAgcm9vdGRhdGEgPSAoVUNoYXIqKiopbWFsbG9jKChzaXplb2Yoc2NhbkFycmF5KS9zaXplb2Yoc2NhbkFycmF5WzBdKSkqc2l6ZW9mKHJvb3RkYXRhWzBdKSk7CisgIHN0YXJ0cyA9IChpbnQqKW1hbGxvYygoc2l6ZW9mKHNjYW5BcnJheSkvc2l6ZW9mKHNjYW5BcnJheVswXSkpKnNpemVvZihzdGFydHNbMF0pKTsKKyAgZm9yKGludCBpPTA7VV9TVUNDRVNTKCpzdGF0dXMpJiZpPHNpemVvZihzY2FuQXJyYXkpL3NpemVvZihzY2FuQXJyYXlbMF0pO2krKykgeworICAgIGludCB0aGlzQ291bnQgPSB1ZGF0X2NvdW50U3ltYm9scyhmbXQsIHNjYW5BcnJheVtpXSk7CisgICAgcm9vdGRhdGFbaV09MDsKKyAgICByb290ZGF0YVtpXT0oVUNoYXIqKiltYWxsb2ModGhpc0NvdW50KnNpemVvZihyb290ZGF0YVtpXVswXSkpOworICAgIHN3aXRjaChzY2FuQXJyYXlbaV0pIHsKKyAgICAgICAgY2FzZSBVREFUX1dFRUtEQVlTOgorICAgICAgICBjYXNlIFVEQVRfU0hPUlRfV0VFS0RBWVM6CisgICAgICAgICAgICBzdGFydHNbaV09MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgIHN0YXJ0c1tpXT0wOworICAgIH0KKyAgICBmb3IoaW50IGo9c3RhcnRzW2ldO1VfU1VDQ0VTUygqc3RhdHVzKSYmajx0aGlzQ291bnQ7aisrKSB7CisgICAgICAgIHJvb3RkYXRhW2ldW2pdPShVQ2hhciopbWFsbG9jKDEwMjQpOworICAgICAgICBpbnQgc3ogPSAgCisgICAgICAgIHVkYXRfZ2V0U3ltYm9scyhmbXQsCisgICAgICAgICAgICBzY2FuQXJyYXlbaV0sCisgICAgICAgICAgICBqLAorICAgICAgICAgICAgcm9vdGRhdGFbaV1bal0sCisgICAgICAgICAgICAxMDI0LAorICAgICAgICAgICAgc3RhdHVzKTsKKyAgICB9CisgIH0KK30KKworLyogRm9ybWF0IHRoZSBkYXRlICovCitzdGF0aWMgdm9pZAorZGF0ZShjb25zdCBVQ2hhciAqdHosCisgICAgIFVEYXRlRm9ybWF0U3R5bGUgc3R5bGUsCisgICAgIGNoYXIgKmZvcm1hdCwKKyAgICAgY29uc3QgY2hhciAqbG9jYWxlLCBjaGFyICpjb21tZW50cywKKyAgICAgVUVycm9yQ29kZSAqc3RhdHVzKQoreworICBVQ2hhciAqcyA9IDA7CisgIGludDMyX3QgbGVuID0gMDsKKyAgVURhdGVGb3JtYXQgKmZtdDsKKyAgVUNoYXIgdUZvcm1hdFsxMDBdOworICBjaGFyIHRtcFsyMDBdOworICAKKyAgaW50IHRjPTA7IC8vIHRvdGFsIGNvdW50CisgIGludCB0Zj0wOyAvLyB0b3RhbCBmb3VuZAorICBpbnQgdGwgPSAwOworCisgIGZtdCA9IHVkYXRfb3BlbihzdHlsZSwgc3R5bGUsIGxvY2FsZSwgdHosIC0xLE5VTEwsMCwgc3RhdHVzKTsKKyAgaWYgKCBmb3JtYXQgIT0gTlVMTCApIHsKKyAgICAgdV9jaGFyc1RvVUNoYXJzKGZvcm1hdCx1Rm9ybWF0LHN0cmxlbihmb3JtYXQpKSwKKyAgICAgdWRhdF9hcHBseVBhdHRlcm4oZm10LEZBTFNFLHVGb3JtYXQsc3RybGVuKGZvcm1hdCkpOworICB9CisgIGxlbiA9IHVkYXRfZm9ybWF0KGZtdCwgdWNhbF9nZXROb3coKSwgMCwgbGVuLCAwLCBzdGF0dXMpOworICBpZigqc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKSB7CisgICAgKnN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBzID0gKFVDaGFyKikgbWFsbG9jKHNpemVvZihVQ2hhcikgKiAobGVuKzEpKTsKKyAgICBpZihzID09IDApIGdvdG8gZmluaXNoOworICAgIHVkYXRfZm9ybWF0KGZtdCwgdWNhbF9nZXROb3coKSwgcywgbGVuICsgMSwgMCwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIGdvdG8gZmluaXNoOworICB9CisKKyAgLyogcHJpbnQgdGhlIGRhdGUgc3RyaW5nICovCisgIC8vdXByaW50KHMsIHN0ZG91dCwgc3RhdHVzKTsKKworICAvKiBwcmludCBhIHRyYWlsaW5nIG5ld2xpbmUgKi8KKyAgLy9wcmludGYoIlxuIik7CisgIC8qIGNvdW50IGJpdHMgKi8KKyAgVUNoYXIgb3V0YnVmWzEwMjRdOworICBmb3IoaW50IGk9MDtVX1NVQ0NFU1MoKnN0YXR1cykmJmk8c2l6ZW9mKHNjYW5BcnJheSkvc2l6ZW9mKHNjYW5BcnJheVswXSk7aSsrKSB7CisgICAgaW50IHRoaXNDb3VudCA9IHVkYXRfY291bnRTeW1ib2xzKGZtdCwgc2NhbkFycmF5W2ldKTsKKyAgICB0YyArPSB0aGlzQ291bnQ7CisgICAgZm9yKGludCBqPXN0YXJ0c1tpXTtVX1NVQ0NFU1MoKnN0YXR1cykmJmo8dGhpc0NvdW50O2orKykgeworCSpzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgIGludCBzeiA9ICAKKyAgICAgICAgdWRhdF9nZXRTeW1ib2xzKGZtdCwKKyAgICAgICAgICAgIHNjYW5BcnJheVtpXSwKKyAgICAgICAgICAgIGosCisgICAgICAgICAgICBvdXRidWYsCisgICAgICAgICAgICAxMDI0LAorICAgICAgICAgICAgc3RhdHVzKTsKKyAgICAgICAgICAgIGlmKFVfU1VDQ0VTUygqc3RhdHVzKSkgeyB0ZisrOyB0bCArPSB1X3N0cmxlbihvdXRidWYpOyB9CisgICAgICAgIC8vaWYoIXVfc3RyY21wKG91dGJ1Zixyb290ZGF0YVtpXVtqXSkpIHsKKyAgICAgICAgaWYoKnN0YXR1cyAhPSBVX1pFUk9fRVJST1IpIHsKKyNpZiAgMAorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI8IS0tICVzOiBlcnI6IGRhdGEgJXM6JWQ6JWQgaXMgbWlzc2luZzogJVguLi4gLS0+XG4iLCBsb2NhbGUsIFVEYXRlRm9ybWF0U3ltYm9sVHlwZV9uYW1lKHNjYW5BcnJheVtpXSksIGksIGosIG91dGJ1ZlswXSk7CisjZW5kaWYKKyAgICAgICAgICAgIHNwcmludGYodG1wLCAiIG1pc3Npbmc6ICVzIyVkLSVzICIsIFVEYXRlRm9ybWF0U3ltYm9sVHlwZV9uYW1lKHNjYW5BcnJheVtpXSksIGosIHVfZXJyb3JOYW1lU2hvcnQoKnN0YXR1cykpOworICAgICAgICAgICAgKnN0YXR1cyA9IFVfTUlTU0lOR19SRVNPVVJDRV9FUlJPUjsKKyAgICAgICAgICAgIHN0cmNhdChjb21tZW50cywgdG1wKTsKKyAgICAgICAgfQorICAgIH0KKyAgfQorICAKKyBmaW5pc2g6CisgIHNwcmludGYodG1wLCAiIHN5bXM6JWQvJWQjJWQ6JXMiLCB0ZiwgdGMsIHRsLCB1X2Vycm9yTmFtZVNob3J0KCpzdGF0dXMpKTsKKyAgc3RyY2F0KGNvbW1lbnRzLHRtcCk7CisKKyAgdWRhdF9jbG9zZShmbXQpOworICBmcmVlKHMpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZU9rQ29tbWVudHMoWE1MRmlsZSAmeGYsIGludCBvaywgY29uc3QgY2hhciAqY29tbWVudHMsIGNvbnN0IGNoYXIgKmxvY2FsZSkgeyAKKyAgICBjaGFyIHRtcFsyMDAwXTsKKyAgICB0bXBbMF09MDsKKyAgICBpZihvaykgeworICAgICAgICBpZighY29tbWVudHN8fCEqY29tbWVudHMpIHsKKyAgICAgICAgICAgIHN0cmNweSh0bXAsbG9jYWxlKTsKKyAgICAgICAgICAgIHN0cmNhdCh0bXAsICIgIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcHJpbnRmKHRtcCwgIiVzIDwhLS0gICVzIC0tPiIsIGxvY2FsZSwgY29tbWVudHMpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmKGNvbW1lbnRzJiYqY29tbWVudHMpIHsKKyAgICAgICAgc3ByaW50Zih0bXAsICI8IS0tICEhICVzOiAlcyAtLT4iLCBsb2NhbGUsIGNvbW1lbnRzKTsKKyAgICB9CisgICAgaWYodG1wJiYqdG1wKSB7CisgICAgICAgIHhmLndyaXRlbG4odG1wKTsKKyAgICB9Cit9CisKKworaW50IGNvdWxkX2ZtdF9kb3coY29uc3QgY2hhciAqbG9jYWxlLCBjaGFyICpjb21tZW50cykgeworICAgIGNoYXIgdG1wWzIwMF07CisvLyAgICBVUmVzb3VyY2VCdW5kbGUgKnJiID0gTlVMTDsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgCisgICAgZGF0ZShOVUxMLAorICAgICAgICAgVURBVF9MT05HLAorICAgICBOVUxMLAorICAgICBsb2NhbGUsIGNvbW1lbnRzLAorICAgICAmc3RhdHVzKTsKKworICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpIHx8IHN0YXR1cyAhPSBVX1pFUk9fRVJST1IpIHsKKyAgICAgICAgCisgICAgICAgIHNwcmludGYodG1wLCAiIGZtdDolcyIsIHVfZXJyb3JOYW1lU2hvcnQoc3RhdHVzKSk7CisgICAgICAgIHN0cmNhdChjb21tZW50cywgdG1wKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ByaW50Zih0bXAsICIgZm10OiVzIiwgdV9lcnJvck5hbWVTaG9ydChzdGF0dXMpKTsKKyAgICAgICAgc3RyY2F0KGNvbW1lbnRzLCB0bXApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CisKK3ZvaWQgcHJvYmVDYXBhYmlsaXR5KFhNTEZpbGUmIHhmLCBjb25zdCBjaGFyICpsb2NhbGUpIHsKKyAgICBjaGFyIGNvbW1lbnRzWzEwMDBdOworICAgIGludCBvaz0xOworICAgIGludCByYyA9MDsKKyAgICAKKyAgICAvL2ZwcmludGYoc3RkZXJyLCAiUFJPQkU6ICVzXG4iLCBsb2NhbGUpOworICAgIAorICAgIGNvbW1lbnRzWzBdPTA7CisgICAgCisgICAgaWYoIWNvdWxkX29wZW4obG9jYWxlLCBjb21tZW50cykpIHsKKyAgICAgICAgb2sgPSAwOworICAgIH0KKyAgICAKKyNpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPiAyKSB8fCAoKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPjEpJiYoVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0+MikpCisgICAgaWYoIWNvdWxkX2ZtdF9kb3cobG9jYWxlLCBjb21tZW50cykpIHsKKyAgICAgICAgb2sgPSAwOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIHdyaXRlT2tDb21tZW50cyh4ZixvaywgY29tbWVudHMsbG9jYWxlKTsKK30KKwordm9pZCBwcm9iZUNvbENhcGFiaWxpdHkoWE1MRmlsZSYgeGYsIGNvbnN0IGNoYXIgKmxvY2FsZSkgeworICAgIGNoYXIgY29tbWVudHNbMTAwMF07CisgICAgaW50IG9rPTE7CisgICAgaW50IHJjID0wOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIAorICAgIC8vZnByaW50ZihzdGRlcnIsICJQUk9CRTogJXNcbiIsIGxvY2FsZSk7CisgICAgCisgICAgY29tbWVudHNbMF09MDsKKyAgICAKKyAgICBpZighY29sX2NvdWxkX29wZW4obG9jYWxlLCBjb21tZW50cykpIHsKKyAgICAgICAgb2sgPSAwOworICAgIH0KKyAgICAKKyAgICAvKgorICAgIGlmKCFjb2xfY291bGRfZm10X2Rvdyhsb2NhbGUsIGNvbW1lbnRzKSkgeworICAgICAgICBvayA9IDA7CisgICAgfQorICAgICovCisgICAgd3JpdGVPa0NvbW1lbnRzKHhmLG9rLCBjb21tZW50cyxsb2NhbGUpOworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiogIGFyZ3YpIHsKKyAgICBVX01BSU5fSU5JVF9BUkdTKGFyZ2MsIGFyZ3YpOworICAgIHByb2dOYW1lID0gYXJndlswXTsKKyAgICBhcmdjPXVfcGFyc2VBcmdzKGFyZ2MsIGFyZ3YsIHNpemVvZihvcHRpb25zKS9zaXplb2Yob3B0aW9uc1swXSksIG9wdGlvbnMpOworLy8gICAgY29uc3QgY2hhciAqbG9jOworICAgIAorCXsKKwkJVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID4gMikgfHwgKChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4xKSYmKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNPjUpKQorCQl1X2luaXQoJnN0YXR1cyk7CisjZWxzZQorCQl1cmVzX29wZW4oTlVMTCwgImVuX1VTIiwgJnN0YXR1cyk7CisjZW5kaWYKKwkJZnByaW50ZihzdGRlcnIsICIgSW5pdDogJXNcbiIsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworCisJfQorCisgICAgeworICAgICAgICBVRXJyb3JDb2RlIGlzID0gVV9aRVJPX0VSUk9SOworI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+IDIpIHx8ICgoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+MSkmJihVX0lDVV9WRVJTSU9OX01JTk9SX05VTT4yKSkKKyAgICAgICAgaW5pdHJvb3QoJmlzKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbml0OiAlc1xuIiwgdV9lcnJvck5hbWVTaG9ydChpcykpOworI2VuZGlmCisgICAgfQorCisgICAgaWYoYXJnYzwwKSB7CisgICAgICAgIC8vIFVucmVjb2duaXplZCBvcHRpb24KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBpbiBjb21tYW5kIGxpbmUgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2Wy1hcmdjXSk7CisgICAgICAgIHVzYWdlQW5kRGllKFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUik7CisgICAgfQorCisgICAgaWYob3B0aW9uc1swXS5kb2VzT2NjdXIgfHwgb3B0aW9uc1sxXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgLy8gIC0/IG9yIC1oIGZvciBoZWxwLgorICAgICAgICB1c2FnZUFuZERpZSgwKTsKKyAgICB9CisKKyAgICAKKworICAgIHsKKyAgICAgICAgY2hhciB0bXBbMjAwXTsKKyAgICAgICAgWE1MRmlsZSB4ZihzdGRvdXQpOworICAgICAgICB7CisgICAgICAgICAgICB4Zi53cml0ZWxuKCI8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gXCJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZFwiPiIpOworICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VJbmZvKHhmLCAiaWN1SW5mbyIpOworICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VQcm9kdWN0cyh4ZiwgImljdVByb2R1Y3RzIik7CisgICAgICAgICAgICBYTUxFbGVtZW50IGljdVByb2R1Y3QoeGYsICJpY3VQcm9kdWN0IiwgInR5cGU9XCJpY3U0Y1wiIik7CisgICAgICAgICAgICBYTUxFbGVtZW50IHJlbGVhc2VzKHhmLCAicmVsZWFzZXMiKTsKKyAgICAgICAgICAgIHNwcmludGYodG1wLCAidmVyc2lvbj1cIiVzXCIiLCBVX0lDVV9WRVJTSU9OKTsKKyAgICAgICAgICAgIFhNTEVsZW1lbnQgcmVsZWFzZSh4ZiwgInJlbGVhc2UiLCB0bXApOworICAgICAgICAgICAgCisgICAgICAgICAgICBYTUxFbGVtZW50IGNhcGFiaWxpdGllcyh4ZiwgImNhcGFiaWxpdGllcyIpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNwcmludGYodG1wLCAidHlwZT1cInVuaWNvZGVcIiB2ZXJzaW9uPVwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgIFVfVU5JQ09ERV9WRVJTSU9OKTsKKyAgICAgICAgICAgICAgICBYTUxFbGVtZW50IGljdURhdGEoeGYsICJmZWF0dXJlIiwgdG1wLCBUUlVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVQ29sbGF0b3IgKmNvbDsKKyAgICAgICAgICAgICAgICBjaGFyIHVjYXZlcnNbMjAwXTsKKyAgICAgICAgICAgICAgICBVVmVyc2lvbkluZm8gdmVyczsKKyAgICAgICAgICAgICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgICAgICBjb2wgPSB1Y29sX29wZW4oInJvb3QiLCAmc3RhdHVzKTsKKyNpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0+MikgfHwgKChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4xKSYmKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNPjcpKQorICAgICAgICAgICAgICAgIHVjb2xfZ2V0VUNBVmVyc2lvbihjb2wsIHZlcnMpOworICAgICAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKHZlcnMsIHVjYXZlcnMpOworI2Vsc2UKKwkJc3RyY3B5KHVjYXZlcnMsICI/Pz8iKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHNwcmludGYodG1wLCAidHlwZT1cInVjYVwiIHZlcnNpb249XCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgdWNhdmVycyk7CisgICAgICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VEYXRhKHhmLCAiZmVhdHVyZSIsIHRtcCwgVFJVRSk7CisgICAgICAgICAgICAgICAgdWNvbF9jbG9zZShjb2wpOworICAgICAgICAgICAgfQorI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT4zKSB8fCAoKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID4gMikgJiYgKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNID43KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0enZlcnM7CisgICAgICAgICAgICAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAgdHp2ZXJzID0gdWNhbF9nZXRUWkRhdGFWZXJzaW9uKCZzdGF0dXMpOworICAgICAgICAgICAgICAgIHNwcmludGYodG1wLCAidHlwZT1cInR6XCIgdmVyc2lvbj1cIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICB0enZlcnMpOworICAgICAgICAgICAgICAgIFhNTEVsZW1lbnQgaWN1RGF0YSh4ZiwgImZlYXR1cmUiLCB0bXAsIFRSVUUpOworICAgICAgICAgICAgfQorI2VuZGlmICAgICAgICAgICAgCisgICAgICAgICAgICB7IAorICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAgICAgIFVWZXJzaW9uSW5mbyBjbGRyVmVyc2lvbjsKKyAgICAgICAgICAgICAgICBfZ2V0Q0xEUlZlcnNpb25EaXJlY3QoY2xkclZlcnNpb24sICZzdGF0dXMpOworCQlpZihVX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJVUVycm9yQ29kZSBzdWJTdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAgCV9nZXRDTERSVmVyc2lvbk9sZChjbGRyVmVyc2lvbiwgJnN1YlN0YXR1cyk7CisJCQlpZihVX1NVQ0NFU1Moc3ViU3RhdHVzKSkgeworCQkJCXN0YXR1cyA9IHN1YlN0YXR1czsKKwkJCX0KKwkJfQorICAgICAgICAgICAgICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyOiBjb3VsZCBub3QgZ2V0IENMRFIgVmVyc2lvbiwgJXNcbiIsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHJjcHkodG1wLCAidHlwZT1cImNsZHJcIiB2ZXJzaW9uPVwiIik7CisgICAgICAgICAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKGNsZHJWZXJzaW9uLCB0bXArc3RybGVuKHRtcCkpOworICAgICAgICAgICAgICAgICAgICBzdHJjYXQodG1wLCAiXCIiKTsKKyAgICAgICAgICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VEYXRhKHhmLCAiZmVhdHVyZSIsIHRtcCwgVFJVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoMSkgeworICAgICAgICAgICAgICAgIGludCBuID0gdWxvY19jb3VudEF2YWlsYWJsZSgpOworICAgICAgICAgICAgICAgIHNwcmludGYodG1wLCAidHlwZT1cImZvcm1hdHRpbmdcIiB0b3RhbD1cIiVkXCIgdmVyc2lvbj1cIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICBuLAorICAgICAgICAgICAgICAgICAgICAiPz8/Iik7CisgICAgICAgICAgICAgICAgWE1MRWxlbWVudCBpY3VEYXRhKHhmLCAiZmVhdHVyZSIsIHRtcCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAvLyBwcm9iZUNhcGFiaWxpdHkoeGYsICJyb290Iik7CisgICAgICAgICAgICAgICAgZm9yKGludCBqPTA7ajxuO2orKykgeworICAgICAgICAgICAgICAgICAgICBwcm9iZUNhcGFiaWxpdHkoeGYsIHVsb2NfZ2V0QXZhaWxhYmxlKGopKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZigxKSB7CisgICAgICAgICAgICAgICAgaW50IG4gPSB1Y29sX2NvdW50QXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXAsICJ0eXBlPVwiY29sbGF0aW9uXCIgdG90YWw9XCIlZFwiIHZlcnNpb249XCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgbiwKKyAgICAgICAgICAgICAgICAgICAgIj8/PyIpOworICAgICAgICAgICAgICAgIFhNTEVsZW1lbnQgaWN1RGF0YSh4ZiwgImZlYXR1cmUiLCB0bXApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgLy8gcHJvYmVDYXBhYmlsaXR5KHhmLCAicm9vdCIpOworICAgICAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8bjtqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvYmVDb2xDYXBhYmlsaXR5KHhmLCB1Y29sX2dldEF2YWlsYWJsZShqKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8yXzIueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzJfMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3ZWY4MwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8yXzIueG1sCkBAIC0wLDAgKzEsNDg5IEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjIuMiI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSIzLjIiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iPz8/Ii8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjM1IiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWNhX0VTX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfX1BIT05FQk9PSyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlkZV9BVF9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWRlX0RFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZGVfTFVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbF9HUl9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0JFX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZW5fR0JfRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllbl9JRV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX19UUkFESVRJT05BTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQllc19FU19QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWV1X0VTX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZmFfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZmlfRklfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlmcl9CRV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWZyX0ZSX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZnJfTFVfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlnYV9JRV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWdsX0VTX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJaGlfX0RJUkVDVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWl0X0lUX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlubF9CRV9QUkVFVVJPIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCW5sX05MX1BSRUVVUk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgLS0+CisJCQkJCQkJcHRfUFRfUFJFRVVSTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzaCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzaF9ZVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzcl9ZVSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCQl6aF9fUElOWUlOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX0NOIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX0hLIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX01PIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX1NHIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX1RXIDwhLS0gICBvcGVuOm9rIC0tPgorCQkJCQkJCXpoX1RXX1NUUk9LRSA8IS0tICAgb3BlbjpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjIzNSIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhbSAKKwkJCQkJCQlhbV9FVCAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9JTiAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljYV9FU19QUkVFVVJPIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX19QSE9ORUJPT0sgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQVRfUFJFRVVSTyAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9ERV9QUkVFVVJPIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWRlX0xVX1BSRUVVUk8gCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZWxfR1JfUFJFRVVSTyAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CRV9QUkVFVVJPIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0dCX0VVUk8gCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSUVfUFJFRVVSTyAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19fVFJBRElUSU9OQUwgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfRVNfUFJFRVVSTyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlldSAKKwkJCQkJCQlldV9FUyAKKwkJCQkJCQlldV9FU19QUkVFVVJPIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0lOIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZpX0ZJX1BSRUVVUk8gCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQkVfUFJFRVVSTyAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9GUl9QUkVFVVJPIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWZyX0xVX1BSRUVVUk8gCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2FfSUVfUFJFRVVSTyAKKwkJCQkJCQlnbCAKKwkJCQkJCQlnbF9FUyAKKwkJCQkJCQlnbF9FU19QUkVFVVJPIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhpX19ESVJFQ1QgCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlpdF9JVF9QUkVFVVJPIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlrb2tfSU4gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa3cgCisJCQkJCQkJa3dfR0IgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfQkVfUFJFRVVSTyAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubF9OTF9QUkVFVVJPIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXB0X1BUX1BSRUVVUk8gCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2ggCisJCQkJCQkJc2hfWVUgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc28gCisJCQkJCQkJc29fREogCisJCQkJCQkJc29fRVQgCisJCQkJCQkJc29fS0UgCisJCQkJCQkJc29fU08gCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfWVUgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdGkgCisJCQkJCQkJdGlfRVQgCisJCQkJCQkJdGlfRVIgCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfX1BJTllJTiAKKwkJCQkJCQl6aF9DTiAKKwkJCQkJCQl6aF9ISyAKKwkJCQkJCQl6aF9NTyAKKwkJCQkJCQl6aF9TRyAKKwkJCQkJCQl6aF9UVyAKKwkJCQkJCQl6aF9UV19TVFJPS0UgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTwvY2FwYWJpbGl0aWVzPgorCQkJCTwvcmVsZWFzZT4KKwkJCTwvcmVsZWFzZXM+CisJCTwvaWN1UHJvZHVjdD4KKwk8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfMC54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM18wLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTE2MjkwCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfMC54bWwKQEAgLTAsMCArMSw0NTcgQEAKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisJPGljdVByb2R1Y3RzPgorCQk8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisJCQk8cmVsZWFzZXM+CisJCQkJPHJlbGVhc2UgdmVyc2lvbj0iMy4wIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjQuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjIxOSIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaF9ZVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfWVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjE5IiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lOIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWV1IAorCQkJCQkJCWV1X0VTIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWdsIAorCQkJCQkJCWdsX0VTIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWd2IAorCQkJCQkJCWd2X0dCIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaCAKKwkJCQkJCQlzaF9ZVSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9ZVSAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9DTiAKKwkJCQkJCQl6aF9ISyAKKwkJCQkJCQl6aF9NTyAKKwkJCQkJCQl6aF9TRyAKKwkJCQkJCQl6aF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM18yLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZThkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM18yLnhtbApAQCAtMCwwICsxLDQ3OSBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSIzLjIiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNC4wLjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjMwIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1lVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1lVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9ZVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjIzMCIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiAKKwkJCQkJCQlhZl9aQSAKKwkJCQkJCQlhbSAKKwkJCQkJCQlhbV9FVCAKKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JTiAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQljeV9HQiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9QSyAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlldSAKKwkJCQkJCQlldV9FUyAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlnbCAKKwkJCQkJCQlnbF9FUyAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQlndiAKKwkJCQkJCQlndl9HQiAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQloeSAKKwkJCQkJCQloeV9BTSAKKwkJCQkJCQloeV9BTV9SRVZJU0VEIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlrb2tfSU4gCisJCQkJCQkJa3cgCisJCQkJCQkJa3dfR0IgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbWxfSU4gCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJb3JfSU4gCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc28gCisJCQkJCQkJc29fREogCisJCQkJCQkJc29fRVQgCisJCQkJCQkJc29fS0UgCisJCQkJCQkJc29fU08gCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX1lVIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9ZVSAKKwkJCQkJCQlzcl9ZVSAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzQueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfNC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNTQxMwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzQueG1sCkBAIC0wLDAgKzEsNTAzIEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjMuNCI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI0LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNC4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjQyIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQ1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjQyIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFtIAorCQkJCQkJCWFtX0VUIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWF6IAorCQkJCQkJCWF6X0N5cmwgCisJCQkJCQkJYXpfQ3lybF9BWiAKKwkJCQkJCQlhel9MYXRuIAorCQkJCQkJCWF6X0xhdG5fQVogCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJYm5fSU4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJY3lfR0IgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fUEsgCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZXUgCisJCQkJCQkJZXVfRVMgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ2wgCisJCQkJCQkJZ2xfRVMgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJZ3YgCisJCQkJCQkJZ3ZfR0IgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaHkgCisJCQkJCQkJaHlfQU0gCisJCQkJCQkJaHlfQU1fUkVWSVNFRCAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJa29rX0lOIAorCQkJCQkJCWt3IAorCQkJCQkJCWt3X0dCIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1sX0lOIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCW9yX0lOIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNvIAorCQkJCQkJCXNvX0RKIAorCQkJCQkJCXNvX0VUIAorCQkJCQkJCXNvX0tFIAorCQkJCQkJCXNvX1NPIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9DUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQ1MgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdGkgCisJCQkJCQkJdGlfRVIgCisJCQkJCQkJdGlfRVQgCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdXogCisJCQkJCQkJdXpfQ3lybCAKKwkJCQkJCQl1el9DeXJsX1VaIAorCQkJCQkJCXV6X0xhdG4gCisJCQkJCQkJdXpfTGF0bl9VWiAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzRfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM180XzEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YmYzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM180XzEueG1sCkBAIC0wLDAgKzEsNTAzIEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjMuNC4xIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjQuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI0LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyNDIiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTU4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyNDIiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfQ3lybCAKKwkJCQkJCQlhel9DeXJsX0FaIAorCQkJCQkJCWF6X0xhdG4gCisJCQkJCQkJYXpfTGF0bl9BWiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQljeV9HQiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9QSyAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlldSAKKwkJCQkJCQlldV9FUyAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlnbCAKKwkJCQkJCQlnbF9FUyAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQlndiAKKwkJCQkJCQlndl9HQiAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQloeSAKKwkJCQkJCQloeV9BTSAKKwkJCQkJCQloeV9BTV9SRVZJU0VEIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlrb2tfSU4gCisJCQkJCQkJa3cgCisJCQkJCQkJa3dfR0IgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbWxfSU4gCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJb3JfSU4gCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc28gCisJCQkJCQkJc29fREogCisJCQkJCQkJc29fRVQgCisJCQkJCQkJc29fS0UgCisJCQkJCQkJc29fU08gCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0NTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9DUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQlzdyAKKwkJCQkJCQlzd19LRSAKKwkJCQkJCQlzd19UWiAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0aSAKKwkJCQkJCQl0aV9FUiAKKwkJCQkJCQl0aV9FVCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl1ciAKKwkJCQkJCQl1cl9QSyAKKwkJCQkJCQl1eiAKKwkJCQkJCQl1el9DeXJsIAorCQkJCQkJCXV6X0N5cmxfVVogCisJCQkJCQkJdXpfTGF0biAKKwkJCQkJCQl1el9MYXRuX1VaIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTwvY2FwYWJpbGl0aWVzPgorCQkJCTwvcmVsZWFzZT4KKwkJCTwvcmVsZWFzZXM+CisJCTwvaWN1UHJvZHVjdD4KKwk8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfNi54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM182LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODk1M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfNi54bWwKQEAgLTAsMCArMSw1MDkgQEAKKzwhRE9DVFlQRSBpY3VJbmZvIFNZU1RFTSAiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGQiPgorPGljdUluZm8+CisJPGljdVByb2R1Y3RzPgorCQk8aWN1UHJvZHVjdCB0eXBlPSJpY3U0YyI+CisJCQk8cmVsZWFzZXM+CisJCQkJPHJlbGVhc2UgdmVyc2lvbj0iMy42Ij4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyNDUiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjUxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9DUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyNDUiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYW0gCisJCQkJCQkJYW1fRVQgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfQ3lybCAKKwkJCQkJCQlhel9DeXJsX0FaIAorCQkJCQkJCWF6X0xhdG4gCisJCQkJCQkJYXpfTGF0bl9BWiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQljeV9HQiAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9QSyAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlldSAKKwkJCQkJCQlldV9FUyAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlnbCAKKwkJCQkJCQlnbF9FUyAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQlndiAKKwkJCQkJCQlndl9HQiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGF3X1VTIAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWh5X0FNX1JFVklTRUQgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWtva19JTiAKKwkJCQkJCQlrdyAKKwkJCQkJCQlrd19HQiAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltbF9JTiAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlvcl9JTiAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzbyAKKwkJCQkJCQlzb19ESiAKKwkJCQkJCQlzb19FVCAKKwkJCQkJCQlzb19LRSAKKwkJCQkJCQlzb19TTyAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQ1MgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0NTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXN3IAorCQkJCQkJCXN3X0tFIAorCQkJCQkJCXN3X1RaIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRpIAorCQkJCQkJCXRpX0VSIAorCQkJCQkJCXRpX0VUIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX0lOIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXV6IAorCQkJCQkJCXV6X0N5cmwgCisJCQkJCQkJdXpfQ3lybF9VWiAKKwkJCQkJCQl1el9MYXRuIAorCQkJCQkJCXV6X0xhdG5fVVogCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM184LnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC8zXzgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDFlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM184LnhtbApAQCAtMCwwICsxLDQ5MCBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSIzLjgiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMCIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDdnIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjY2IiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9IUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1X0hVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNX1JFVklTRUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZF9JRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthX0dFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa21fS0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29fS1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2tfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrd19HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0X0xUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdF9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX1JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfVFcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyMDQiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYmUgCisJCQkJCQkJYmVfQlkgCisJCQkJCQkJYmcgCisJCQkJCQkJYmdfQkcgCisJCQkJCQkJYm4gCisJCQkJCQkJY2EgCisJCQkJCQkJY2FfRVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fQVUgCisJCQkJCQkJZW5fQkUgCisJCQkJCQkJZW5fQlcgCisJCQkJCQkJZW5fQ0EgCisJCQkJCQkJZW5fR0IgCisJCQkJCQkJZW5fSEsgCisJCQkJCQkJZW5fSUUgCisJCQkJCQkJZW5fSU4gCisJCQkJCQkJZW5fTVQgCisJCQkJCQkJZW5fTlogCisJCQkJCQkJZW5fUEggCisJCQkJCQkJZW5fU0cgCisJCQkJCQkJZW5fVVMgCisJCQkJCQkJZW5fVVNfUE9TSVggCisJCQkJCQkJZW5fVkkgCisJCQkJCQkJZW5fWkEgCisJCQkJCQkJZW5fWlcgCisJCQkJCQkJZW8gCisJCQkJCQkJZXMgCisJCQkJCQkJZXNfQVIgCisJCQkJCQkJZXNfQk8gCisJCQkJCQkJZXNfQ0wgCisJCQkJCQkJZXNfQ08gCisJCQkJCQkJZXNfQ1IgCisJCQkJCQkJZXNfRE8gCisJCQkJCQkJZXNfRUMgCisJCQkJCQkJZXNfRVMgCisJCQkJCQkJZXNfR1QgCisJCQkJCQkJZXNfSE4gCisJCQkJCQkJZXNfTVggCisJCQkJCQkJZXNfTkkgCisJCQkJCQkJZXNfUEEgCisJCQkJCQkJZXNfUEUgCisJCQkJCQkJZXNfUFIgCisJCQkJCQkJZXNfUFkgCisJCQkJCQkJZXNfU1YgCisJCQkJCQkJZXNfVVMgCisJCQkJCQkJZXNfVVkgCisJCQkJCQkJZXNfVkUgCisJCQkJCQkJZXQgCisJCQkJCQkJZXRfRUUgCisJCQkJCQkJZmEgCisJCQkJCQkJZmFfQUYgCisJCQkJCQkJZmFfSVIgCisJCQkJCQkJZmkgCisJCQkJCQkJZmlfRkkgCisJCQkJCQkJZm8gCisJCQkJCQkJZm9fRk8gCisJCQkJCQkJZnIgCisJCQkJCQkJZnJfQkUgCisJCQkJCQkJZnJfQ0EgCisJCQkJCQkJZnJfQ0ggCisJCQkJCQkJZnJfRlIgCisJCQkJCQkJZnJfTFUgCisJCQkJCQkJZ2EgCisJCQkJCQkJZ2FfSUUgCisJCQkJCQkJZ3UgCisJCQkJCQkJZ3VfSU4gCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlsdCAKKwkJCQkJCQlsdF9MVCAKKwkJCQkJCQlsdiAKKwkJCQkJCQlsdl9MViAKKwkJCQkJCQltayAKKwkJCQkJCQlta19NSyAKKwkJCQkJCQltbCAKKwkJCQkJCQltciAKKwkJCQkJCQltcl9JTiAKKwkJCQkJCQltcyAKKwkJCQkJCQltc19CTiAKKwkJCQkJCQltc19NWSAKKwkJCQkJCQltdCAKKwkJCQkJCQltdF9NVCAKKwkJCQkJCQluYiAKKwkJCQkJCQluYl9OTyAKKwkJCQkJCQlubCAKKwkJCQkJCQlubF9CRSAKKwkJCQkJCQlubF9OTCAKKwkJCQkJCQlubiAKKwkJCQkJCQlubl9OTyAKKwkJCQkJCQlvbSAKKwkJCQkJCQlvbV9FVCAKKwkJCQkJCQlvbV9LRSAKKwkJCQkJCQlvciAKKwkJCQkJCQlwYSAKKwkJCQkJCQlwYV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvM184XzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfOF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWMyYzFlCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzNfOF8xLnhtbApAQCAtMCwwICsxLDQ5MCBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSIzLjguMSI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjAiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4wIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwN2oiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyNjYiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlqYV9KUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzExMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhX0d1cnVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbF9QTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1BUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fREogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9BTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfU0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrX1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0xhdG5fVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aV9WTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFucyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNvbGxhdGlvbiIgdG90YWw9IjIwNCIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhciAKKwkJCQkJCQlhcl9BRSAKKwkJCQkJCQlhcl9CSCAKKwkJCQkJCQlhcl9EWiAKKwkJCQkJCQlhcl9FRyAKKwkJCQkJCQlhcl9JUSAKKwkJCQkJCQlhcl9KTyAKKwkJCQkJCQlhcl9LVyAKKwkJCQkJCQlhcl9MQiAKKwkJCQkJCQlhcl9MWSAKKwkJCQkJCQlhcl9NQSAKKwkJCQkJCQlhcl9PTSAKKwkJCQkJCQlhcl9RQSAKKwkJCQkJCQlhcl9TQSAKKwkJCQkJCQlhcl9TRCAKKwkJCQkJCQlhcl9TWSAKKwkJCQkJCQlhcl9UTiAKKwkJCQkJCQlhcl9ZRSAKKwkJCQkJCQlhcyAKKwkJCQkJCQlhc19JTiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0lOIAorCQkJCQkJCXBsIAorCQkJCQkJCXBsX1BMIAorCQkJCQkJCXBzIAorCQkJCQkJCXBzX0FGIAorCQkJCQkJCXB0IAorCQkJCQkJCXB0X0JSIAorCQkJCQkJCXB0X1BUIAorCQkJCQkJCXJvIAorCQkJCQkJCXJvX1JPIAorCQkJCQkJCXJ1IAorCQkJCQkJCXJ1X1JVIAorCQkJCQkJCXJ1X1VBIAorCQkJCQkJCXNrIAorCQkJCQkJCXNrX1NLIAorCQkJCQkJCXNsIAorCQkJCQkJCXNsX1NJIAorCQkJCQkJCXNxIAorCQkJCQkJCXNxX0FMIAorCQkJCQkJCXNyIAorCQkJCQkJCXNyX0N5cmwgCisJCQkJCQkJc3JfQ3lybF9CQSAKKwkJCQkJCQlzcl9DeXJsX01FIAorCQkJCQkJCXNyX0N5cmxfUlMgCisJCQkJCQkJc3JfTGF0biAKKwkJCQkJCQlzcl9MYXRuX0JBIAorCQkJCQkJCXNyX0xhdG5fTUUgCisJCQkJCQkJc3JfTGF0bl9SUyAKKwkJCQkJCQlzdiAKKwkJCQkJCQlzdl9GSSAKKwkJCQkJCQlzdl9TRSAKKwkJCQkJCQl0YSAKKwkJCQkJCQl0YV9JTiAKKwkJCQkJCQl0ZSAKKwkJCQkJCQl0ZV9JTiAKKwkJCQkJCQl0aCAKKwkJCQkJCQl0aF9USCAKKwkJCQkJCQl0ciAKKwkJCQkJCQl0cl9UUiAKKwkJCQkJCQl1ayAKKwkJCQkJCQl1a19VQSAKKwkJCQkJCQl2aSAKKwkJCQkJCQl2aV9WTiAKKwkJCQkJCQl6aCAKKwkJCQkJCQl6aF9IYW5zIAorCQkJCQkJCXpoX0hhbnNfQ04gCisJCQkJCQkJemhfSGFuc19TRyAKKwkJCQkJCQl6aF9IYW50IAorCQkJCQkJCXpoX0hhbnRfSEsgCisJCQkJCQkJemhfSGFudF9NTyAKKwkJCQkJCQl6aF9IYW50X1RXIAorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQk8L2NhcGFiaWxpdGllcz4KKwkJCQk8L3JlbGVhc2U+CisJCQk8L3JlbGVhc2VzPgorCQk8L2ljdVByb2R1Y3Q+CisJPC9pY3VQcm9kdWN0cz4KKzwvaWN1SW5mbz4KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzAueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyZDdkYwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzAueG1sCkBAIC0wLDAgKzEsNTE0IEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjQuMCI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGMiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjEuNiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjI4MiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaV9DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthX0dFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX05QIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjExIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8wXzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMF8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzBkOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMF8xLnhtbApAQCAtMCwwICsxLDUxNCBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSI0LjAuMSI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGkiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjEuNiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjI4MiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaV9DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthX0dFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX05QIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjExIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8xXzEueG1sIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMV8xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTEyOGFmCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sLzRfMV8xLnhtbApAQCAtMCwwICsxLDUxNCBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSI0LjEuMSI+CisJCQkJCTxjYXBhYmlsaXRpZXM+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1bmljb2RlIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVjYSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ0eiIgdmVyc2lvbj0iMjAwOGYiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImNsZHIiIHZlcnNpb249IjEuNiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iZm9ybWF0dGluZyIgdG90YWw9IjI4MiIgdmVyc2lvbj0iPz8/Ij4KKwkJCQkJCQlhZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW1fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9BRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQkggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSVEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0pPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfT00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1FBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9UTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfWUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhc19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0N5cmxfQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6X0xhdG5fQVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnX0JHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fQkQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljc19DWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGFfREsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01IIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0FSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19CTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRE8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0hOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19NWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfSVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvX0ZPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYV9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaV9DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthX0dFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX05QIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjExIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8yLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmNjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8yLnhtbApAQCAtMCwwICsxLDUzMiBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSI0LjIiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNS4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMDlnIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIxLjciLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9ImZvcm1hdHRpbmciIHRvdGFsPSIyOTIiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFmX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lRIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9KTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfS1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9RQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWF6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9DeXJsX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhel9MYXRuX0FaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVfQlkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZ19CRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlib19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3NfQ1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWN5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeV9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhX0RLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfREUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9HUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VU19QT1NJWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfTVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX05JIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfU1YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldF9FRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1X0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2FfSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbF9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlnc3dfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9HSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGFfTGF0bl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXdfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZV9JTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlociA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTV9SRVZJU0VEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlpX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpc19JUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9JVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrX0N5cmxfS1ogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbF9HTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdF9MVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2X0xWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWtfTUsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltbF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfQk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5iIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmVfTlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9OTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uX05PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb21fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3JfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9BcmFiX1BLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYV9HdXJ1X0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGxfUEwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwc19BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0JSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1JVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpX0xLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2tfU0sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbF9TSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc28gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX1NPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3FfQUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9DeXJsX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX0JBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX01FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcl9MYXRuX1JTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoX1RIIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHJfVFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1a19VQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9MYXRuX1VaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTQxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl2aSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmlfVk4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6dV9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSIyMTkiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfTkEgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfQUUgCisJCQkJCQkJYXJfQkggCisJCQkJCQkJYXJfRFogCisJCQkJCQkJYXJfRUcgCisJCQkJCQkJYXJfSVEgCisJCQkJCQkJYXJfSk8gCisJCQkJCQkJYXJfS1cgCisJCQkJCQkJYXJfTEIgCisJCQkJCQkJYXJfTFkgCisJCQkJCQkJYXJfTUEgCisJCQkJCQkJYXJfT00gCisJCQkJCQkJYXJfUUEgCisJCQkJCQkJYXJfU0EgCisJCQkJCQkJYXJfU0QgCisJCQkJCQkJYXJfU1kgCisJCQkJCQkJYXJfVE4gCisJCQkJCQkJYXJfWUUgCisJCQkJCQkJYXMgCisJCQkJCQkJYXNfSU4gCisJCQkJCQkJYXogCisJCQkJCQkJYXpfTGF0biAKKwkJCQkJCQlhel9MYXRuX0FaIAorCQkJCQkJCWJlIAorCQkJCQkJCWJlX0JZIAorCQkJCQkJCWJnIAorCQkJCQkJCWJnX0JHIAorCQkJCQkJCWJuIAorCQkJCQkJCWJuX0lOIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNzIAorCQkJCQkJCWNzX0NaIAorCQkJCQkJCWN5IAorCQkJCQkJCWRhIAorCQkJCQkJCWRhX0RLIAorCQkJCQkJCWRlIAorCQkJCQkJCWRlX0FUIAorCQkJCQkJCWRlX0JFIAorCQkJCQkJCWRlX0NIIAorCQkJCQkJCWRlX0RFIAorCQkJCQkJCWRlX0xVIAorCQkJCQkJCWVsIAorCQkJCQkJCWVsX0dSIAorCQkJCQkJCWVuIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzX0FSIAorCQkJCQkJCWVzX0JPIAorCQkJCQkJCWVzX0NMIAorCQkJCQkJCWVzX0NPIAorCQkJCQkJCWVzX0NSIAorCQkJCQkJCWVzX0RPIAorCQkJCQkJCWVzX0VDIAorCQkJCQkJCWVzX0VTIAorCQkJCQkJCWVzX0dUIAorCQkJCQkJCWVzX0hOIAorCQkJCQkJCWVzX01YIAorCQkJCQkJCWVzX05JIAorCQkJCQkJCWVzX1BBIAorCQkJCQkJCWVzX1BFIAorCQkJCQkJCWVzX1BSIAorCQkJCQkJCWVzX1BZIAorCQkJCQkJCWVzX1NWIAorCQkJCQkJCWVzX1VTIAorCQkJCQkJCWVzX1VZIAorCQkJCQkJCWVzX1ZFIAorCQkJCQkJCWV0IAorCQkJCQkJCWV0X0VFIAorCQkJCQkJCWZhIAorCQkJCQkJCWZhX0FGIAorCQkJCQkJCWZhX0lSIAorCQkJCQkJCWZpIAorCQkJCQkJCWZpX0ZJIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhdyAKKwkJCQkJCQloZSAKKwkJCQkJCQloZV9JTCAKKwkJCQkJCQloaSAKKwkJCQkJCQloaV9JTiAKKwkJCQkJCQlociAKKwkJCQkJCQlocl9IUiAKKwkJCQkJCQlodSAKKwkJCQkJCQlodV9IVSAKKwkJCQkJCQlpZCAKKwkJCQkJCQlpZF9JRCAKKwkJCQkJCQlpcyAKKwkJCQkJCQlpc19JUyAKKwkJCQkJCQlpdCAKKwkJCQkJCQlpdF9DSCAKKwkJCQkJCQlpdF9JVCAKKwkJCQkJCQlqYSAKKwkJCQkJCQlqYV9KUCAKKwkJCQkJCQlrayAKKwkJCQkJCQlra19LWiAKKwkJCQkJCQlrbCAKKwkJCQkJCQlrbF9HTCAKKwkJCQkJCQlrbSAKKwkJCQkJCQlrbiAKKwkJCQkJCQlrbl9JTiAKKwkJCQkJCQlrbyAKKwkJCQkJCQlrb19LUiAKKwkJCQkJCQlrb2sgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaSAKKwkJCQkJCQlzaV9MSyAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8yXzBfMS54bWwgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWwvNF8yXzBfMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxOWQ0MgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC80XzJfMF8xLnhtbApAQCAtMCwwICsxLDUzMiBAQAorPCFET0NUWVBFIGljdUluZm8gU1lTVEVNICJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZCI+Cis8aWN1SW5mbz4KKwk8aWN1UHJvZHVjdHM+CisJCTxpY3VQcm9kdWN0IHR5cGU9ImljdTRjIj4KKwkJCTxyZWxlYXNlcz4KKwkJCQk8cmVsZWFzZSB2ZXJzaW9uPSI0LjIuMC4xIj4KKwkJCQkJPGNhcGFiaWxpdGllcz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InVuaWNvZGUiIHZlcnNpb249IjUuMSIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idWNhIiB2ZXJzaW9uPSI1LjEiLz4KKwkJCQkJCTxmZWF0dXJlIHR5cGU9InR6IiB2ZXJzaW9uPSIyMDA5ZyIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY2xkciIgdmVyc2lvbj0iMS43Ii8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iMjkyIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0FFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9CSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9MQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9PTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1ROIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ZRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlX0JZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9CRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlib19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm9fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0FUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0RFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9MSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbF9DWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfR1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTUggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVNfUE9TSVggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0JPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19HVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1ZFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXRfRUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlldV9FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0FGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYV9JUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpX0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZm9fRk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9GUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlndl9HQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhX0xhdG5fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGF3X1VTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGVfSUwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyX0hSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlodSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHVfSFUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloeV9BTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHlfQU1fUkVWSVNFRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlkX0lEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpaV9DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXNfSVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9DSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfSVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWphX0pQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthX0dFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlra19DeXJsX0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2xfR0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbV9LSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa24gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtuX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb19LUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrb2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtva19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWt3X0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdl9MViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rX01LIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWxfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1yIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltcl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX0JOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19NWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW10X01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX05QIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfTkwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5uIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubl9OTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9CUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfUFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19NRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9fUk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9SVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaV9MSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2sgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrX1NLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2xfU0kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfQ3lybF9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9NRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3JfTGF0bl9SUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3YgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X0ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9TRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRoIDwhLS0gICBvcGVuOm9rIHN5bXM6MzkvNDEjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aF9USCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpX0VSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX1RSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQXJhYl9BRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzQ5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9DeXJsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0N5cmxfVVogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE0MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE0MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19ISyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX01PIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfU0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9UVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6dSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJenVfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJPC9mZWF0dXJlPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0iY29sbGF0aW9uIiB0b3RhbD0iMjE5IiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIAorCQkJCQkJCWFmX05BIAorCQkJCQkJCWFmX1pBIAorCQkJCQkJCWFyIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWF6IAorCQkJCQkJCWF6X0xhdG4gCisJCQkJCQkJYXpfTGF0bl9BWiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQljYSAKKwkJCQkJCQljYV9FUyAKKwkJCQkJCQljcyAKKwkJCQkJCQljc19DWiAKKwkJCQkJCQljeSAKKwkJCQkJCQlkYSAKKwkJCQkJCQlkYV9ESyAKKwkJCQkJCQlkZSAKKwkJCQkJCQlkZV9BVCAKKwkJCQkJCQlkZV9CRSAKKwkJCQkJCQlkZV9DSCAKKwkJCQkJCQlkZV9ERSAKKwkJCQkJCQlkZV9MVSAKKwkJCQkJCQllbCAKKwkJCQkJCQllbF9HUiAKKwkJCQkJCQllbiAKKwkJCQkJCQllbl9BVSAKKwkJCQkJCQllbl9CRSAKKwkJCQkJCQllbl9CVyAKKwkJCQkJCQllbl9DQSAKKwkJCQkJCQllbl9HQiAKKwkJCQkJCQllbl9ISyAKKwkJCQkJCQllbl9JRSAKKwkJCQkJCQllbl9JTiAKKwkJCQkJCQllbl9NVCAKKwkJCQkJCQllbl9OWiAKKwkJCQkJCQllbl9QSCAKKwkJCQkJCQllbl9TRyAKKwkJCQkJCQllbl9VUyAKKwkJCQkJCQllbl9VU19QT1NJWCAKKwkJCQkJCQllbl9WSSAKKwkJCQkJCQllbl9aQSAKKwkJCQkJCQllbl9aVyAKKwkJCQkJCQllbyAKKwkJCQkJCQllcyAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmbyAKKwkJCQkJCQlmb19GTyAKKwkJCQkJCQlmciAKKwkJCQkJCQlmcl9CRSAKKwkJCQkJCQlmcl9DQSAKKwkJCQkJCQlmcl9DSCAKKwkJCQkJCQlmcl9GUiAKKwkJCQkJCQlmcl9MVSAKKwkJCQkJCQlnYSAKKwkJCQkJCQlnYV9JRSAKKwkJCQkJCQlndSAKKwkJCQkJCQlndV9JTiAKKwkJCQkJCQloYXcgCisJCQkJCQkJaGUgCisJCQkJCQkJaGVfSUwgCisJCQkJCQkJaGkgCisJCQkJCQkJaGlfSU4gCisJCQkJCQkJaHIgCisJCQkJCQkJaHJfSFIgCisJCQkJCQkJaHUgCisJCQkJCQkJaHVfSFUgCisJCQkJCQkJaWQgCisJCQkJCQkJaWRfSUQgCisJCQkJCQkJaXMgCisJCQkJCQkJaXNfSVMgCisJCQkJCQkJaXQgCisJCQkJCQkJaXRfQ0ggCisJCQkJCQkJaXRfSVQgCisJCQkJCQkJamEgCisJCQkJCQkJamFfSlAgCisJCQkJCQkJa2sgCisJCQkJCQkJa2tfS1ogCisJCQkJCQkJa2wgCisJCQkJCQkJa2xfR0wgCisJCQkJCQkJa20gCisJCQkJCQkJa24gCisJCQkJCQkJa25fSU4gCisJCQkJCQkJa28gCisJCQkJCQkJa29fS1IgCisJCQkJCQkJa29rIAorCQkJCQkJCWx0IAorCQkJCQkJCWx0X0xUIAorCQkJCQkJCWx2IAorCQkJCQkJCWx2X0xWIAorCQkJCQkJCW1rIAorCQkJCQkJCW1rX01LIAorCQkJCQkJCW1sIAorCQkJCQkJCW1yIAorCQkJCQkJCW1yX0lOIAorCQkJCQkJCW1zIAorCQkJCQkJCW1zX0JOIAorCQkJCQkJCW1zX01ZIAorCQkJCQkJCW10IAorCQkJCQkJCW10X01UIAorCQkJCQkJCW5iIAorCQkJCQkJCW5iX05PIAorCQkJCQkJCW5sIAorCQkJCQkJCW5sX0JFIAorCQkJCQkJCW5sX05MIAorCQkJCQkJCW5uIAorCQkJCQkJCW5uX05PIAorCQkJCQkJCW9tIAorCQkJCQkJCW9tX0VUIAorCQkJCQkJCW9tX0tFIAorCQkJCQkJCW9yIAorCQkJCQkJCXBhIAorCQkJCQkJCXBhX0FyYWIgCisJCQkJCQkJcGFfQXJhYl9QSyAKKwkJCQkJCQlwYV9HdXJ1IAorCQkJCQkJCXBhX0d1cnVfSU4gCisJCQkJCQkJcGwgCisJCQkJCQkJcGxfUEwgCisJCQkJCQkJcHMgCisJCQkJCQkJcHNfQUYgCisJCQkJCQkJcHQgCisJCQkJCQkJcHRfQlIgCisJCQkJCQkJcHRfUFQgCisJCQkJCQkJcm8gCisJCQkJCQkJcm9fUk8gCisJCQkJCQkJcnUgCisJCQkJCQkJcnVfUlUgCisJCQkJCQkJcnVfVUEgCisJCQkJCQkJc2kgCisJCQkJCQkJc2lfTEsgCisJCQkJCQkJc2sgCisJCQkJCQkJc2tfU0sgCisJCQkJCQkJc2wgCisJCQkJCQkJc2xfU0kgCisJCQkJCQkJc3EgCisJCQkJCQkJc3FfQUwgCisJCQkJCQkJc3IgCisJCQkJCQkJc3JfQ3lybCAKKwkJCQkJCQlzcl9DeXJsX0JBIAorCQkJCQkJCXNyX0N5cmxfTUUgCisJCQkJCQkJc3JfQ3lybF9SUyAKKwkJCQkJCQlzcl9MYXRuIAorCQkJCQkJCXNyX0xhdG5fQkEgCisJCQkJCQkJc3JfTGF0bl9NRSAKKwkJCQkJCQlzcl9MYXRuX1JTIAorCQkJCQkJCXN2IAorCQkJCQkJCXN2X0ZJIAorCQkJCQkJCXN2X1NFIAorCQkJCQkJCXRhIAorCQkJCQkJCXRhX0lOIAorCQkJCQkJCXRlIAorCQkJCQkJCXRlX0lOIAorCQkJCQkJCXRoIAorCQkJCQkJCXRoX1RIIAorCQkJCQkJCXRyIAorCQkJCQkJCXRyX1RSIAorCQkJCQkJCXVrIAorCQkJCQkJCXVrX1VBIAorCQkJCQkJCXVyIAorCQkJCQkJCXVyX0lOIAorCQkJCQkJCXVyX1BLIAorCQkJCQkJCXZpIAorCQkJCQkJCXZpX1ZOIAorCQkJCQkJCXpoIAorCQkJCQkJCXpoX0hhbnMgCisJCQkJCQkJemhfSGFuc19DTiAKKwkJCQkJCQl6aF9IYW5zX1NHIAorCQkJCQkJCXpoX0hhbnQgCisJCQkJCQkJemhfSGFudF9ISyAKKwkJCQkJCQl6aF9IYW50X01PIAorCQkJCQkJCXpoX0hhbnRfVFcgCisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCTwvY2FwYWJpbGl0aWVzPgorCQkJCTwvcmVsZWFzZT4KKwkJCTwvcmVsZWFzZXM+CisJCTwvaWN1UHJvZHVjdD4KKwk8L2ljdVByb2R1Y3RzPgorPC9pY3VJbmZvPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sL3I1MF8xLnhtbCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC9yNTBfMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiMmY4YwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbC9yNTBfMS54bWwKQEAgLTAsMCArMSwxMDE1IEBACis8IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gImh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZHRkL2ljdW1ldGEuZHRkIj4KKzxpY3VJbmZvPgorCTxpY3VQcm9kdWN0cz4KKwkJPGljdVByb2R1Y3QgdHlwZT0iaWN1NGMiPgorCQkJPHJlbGVhc2VzPgorCQkJCTxyZWxlYXNlIHZlcnNpb249IjUwLjEiPgorCQkJCQk8Y2FwYWJpbGl0aWVzPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idW5pY29kZSIgdmVyc2lvbj0iNi4yIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJ1Y2EiIHZlcnNpb249IjYuMiIvPgorCQkJCQkJPGZlYXR1cmUgdHlwZT0idHoiIHZlcnNpb249IjIwMTJoIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjbGRyIiB2ZXJzaW9uPSIyMi4xIi8+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJmb3JtYXR0aW5nIiB0b3RhbD0iNTkzIiB2ZXJzaW9uPSI/Pz8iPgorCQkJCQkJCWFmIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhZl9OQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWZfWkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFncSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWdxX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI4MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYWtfR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyODM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTMxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhbV9FVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyXzAwMSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfQUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0JIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9FSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfRVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9JUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfSk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0tNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9LVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTEIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX0xZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfTVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX09NIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9QUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfUUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9TRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfU08gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcl9URCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFyX1lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjIwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlhcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWFzYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXNhX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlheiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfQ3lybF9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYXpfTGF0bl9BWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmFzIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliYXNfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQliZV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmVtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZW1fWk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJleiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmV6X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQliZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYmdfQkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJtIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibV9NTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJuX0JEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlibl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJvX0NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlib19JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJyX0ZSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlicnggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJyeF9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJYnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWJzX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQljYV9BRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2FfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNnZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY2dnX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljaHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNocl9VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE0MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWNzX0NaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQljeSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJY3lfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYV9ESyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGF2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzY4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkYXZfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9BVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkZV9ERSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZGVfTEkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRlX0xVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkamUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWRqZV9ORSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHVhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlkdWFfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWR5byA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHlvX1NOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlkeiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZHpfQlQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVidSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMxMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWJ1X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzEzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllZSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWVfR0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVlX1RHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTczOm9rIGZtdDpvayAtLT4KKwkJCQkJCQllbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZWxfQ1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVsX0dSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fMTUwIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9BRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0FVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CQiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9CUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0JaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9DQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0RNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9GSiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fRk0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dCIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fR00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0dVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9HWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9JTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0pFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9KTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0tJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9LTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fS1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX0xDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9MUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTFMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX01UIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9NVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTVcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fTlogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1BSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9QVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fU0wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1NTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9TWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVEMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1RPIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9UVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9VTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1VTX1BPU0lYIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fVkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1ZJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9WVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fV1MgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVuX1pBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllbl9aTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZW5fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfNDE5IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19BUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19DTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfQ1IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0NVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ETyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfRUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0VDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19FUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfR1EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX0dUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19ITiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfSUMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX01YIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19OSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUEEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19QSCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfUFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1BZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19TViA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXNfVVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWVzX1VZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQllc19WRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV0X0VFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlldSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXVfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWV3byA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZXdvX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmFfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZhX0lSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmZfU04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzMwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaV9GSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMzMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZmlsIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmaWxfUEggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlmb19GTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0JKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9CTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9DSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0RKIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9EWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfRlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9HRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfR04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0dQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9HUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfSFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX0tNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9MVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01DIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NRiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9NUSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTVIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX01VIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9OQyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfTkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1BGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9SRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfUlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1NDIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9TTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfU1kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1REIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9URyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZnJfVE4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWZyX1ZVIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlmcl9ZVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdhX0lFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlnbCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ2xfRVMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCWdzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3N3X0NIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3VfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWd1eiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3V6X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlndiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI5NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJZ3ZfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX0dIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05FIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYV9MYXRuX05HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloYXcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhhd19VUyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhlX0lMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQloaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaGlfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWhyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlocl9CQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHJfSFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlodV9IVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaHkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWh5X0FNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWRfSUQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlnIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpZ19ORyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaWlfQ04gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWlzX0lTIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJaXRfQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCWl0X0lUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlpdF9TTSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamFfSlAgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJamdvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNTE2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlqZ29fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM1MTY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWptYyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJam1jX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FfR0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2FiX0RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrYW0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWthbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2RlIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDM5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrZGVfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0Mzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtlYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2VhX0NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlraHEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtocV9NTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2kgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtpX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjkwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlrayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2tfQ3lybF9LWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsX0dMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtsbl9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCWttX0tIIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa25fSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tQIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvX0tSIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtvayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa29rX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjQ1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NfQXJhYl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrc2JfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODk6b2sgZm10Om9rIC0tPgorCQkJCQkJCWtzZiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3NmX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlrdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJa3dfR0IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxhZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbGFnX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbGdfVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbl9BTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG5fQ0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxuX0NGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlsbl9DRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzM2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbG8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCWxvX0xBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHRfTFQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdV9DRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHVvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdW9fS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTc6b2sgZm10Om9rIC0tPgorCQkJCQkJCWx1eSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHV5X0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlsdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbHZfTFYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1hcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWFzX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltYXNfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzU6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1lciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWVyX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNjY6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1mZV9NVSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1nX01HIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltZ2ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1naF9NWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWdvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzQ0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltZ29fQ00gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzNDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1rIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlta19NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbWwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1sX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjM3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQltciA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwOTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXJfSU4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltc19CTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXNfTVkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW1zX1NHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQltdCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXRfTVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW11YSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI1NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXVhX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjU1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlteSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbXlfTU0gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5hcSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmFxX05BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmJfTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5kIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZF9aVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5lX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQluZV9OUCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX0FXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9CRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfQ1cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5sX05MIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlubF9TUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbmxfU1ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCW5tZyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm1nX0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlubiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbm5fTk8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCW51cyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIzMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJbnVzX1NEIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlueW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW55bl9VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb20gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDg6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9tX0VUIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlvbV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJb3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMzI6b2sgZm10Om9rIC0tPgorCQkJCQkJCW9yX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjMyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwYSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfQXJhYl9QSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGFfR3VydV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcGwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXBsX1BMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlwcyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHNfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9BTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfQlIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X0NWIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9HVyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X01aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlwdF9QVCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcHRfU1QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXB0X1RMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlybSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIxMzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm1fQ0ggPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjYwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlybl9CSSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI2MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJvX01EIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTk5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb19STyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcm9mIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlyb2ZfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9CWSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfS0cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X0taIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydV9NRCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcnVfUlUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ1X1VBIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlydyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI0NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcndfUlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNDc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXJ3ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJcndrX1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzYXEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMjA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNhcV9LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMyMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2JwIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjE5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzYnBfVFogPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNlaCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2VoX01aIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzZXMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNlc19NTCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2cgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNnX0NGIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaGkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaV9MYXRuIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaGlfTGF0bl9NQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2hpX1RmbmcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNoaV9UZm5nX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzaSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2lfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNrIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlza19TSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc2wgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNsX1NJIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjEwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzbiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc25fWlcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19ESiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc29fRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNvX0tFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjc4Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzb19TTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3ODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3EgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNxX0FMIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzcV9NSyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3IgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmwgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0N5cmxfUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fQkEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fTUUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXNyX0xhdG5fUlMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdl9BWCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3ZfRkkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN2X1NFIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzdyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3dfS0UgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODA6b2sgZm10Om9rIC0tPgorCQkJCQkJCXN3X1RaIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd19VRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4MDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJc3djIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzM5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQlzd2NfQ0QgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMzMzk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGFfTEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRhX01ZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTg3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0YV9TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE4NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlX0lOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjI5Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0ZW8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRlb19LRSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGVvX1VHIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjA1Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aCA8IS0tICAgb3BlbjpvayBzeW1zOjM5LzQxIzIxODpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGhfVEggPCEtLSAgIG9wZW46b2sgc3ltczozOS80MSMyMTg6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTM0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl0aV9FUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdGlfRVQgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxMzQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRvIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0b19UTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXRyX0NZIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTcxOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0cl9UUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHdxIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTgyOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl0d3FfTkUgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxODI6b2sgZm10Om9rIC0tPgorCQkJCQkJCXR6bSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdHptX0xhdG4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzY6b2sgZm10Om9rIC0tPgorCQkJCQkJCXR6bV9MYXRuX01BIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1ayA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwNDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdWtfVUEgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMDQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXVyIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTc3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1cl9JTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE3NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXJfUEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxNzc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl1el9BcmFiIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjNDk6b2sgZm10Om9rIC0tPgorCQkJCQkJCXV6X0FyYWJfQUYgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM0OTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybCA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfQ3lybF9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE2NzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdXpfTGF0bl9VWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmFpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWlfTGF0biA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIyNTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmFpX0xhdG5fTFIgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMjU6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZhaV9WYWlpIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMTI3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2YWlfVmFpaV9MUiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzEyNzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJdmkgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNjc6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZpX1ZOIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjY3Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl2dW4gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMxOTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXZ1bl9UWiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzE5MTpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeG9nIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjExOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl4b2dfVUcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyMTE6b2sgZm10Om9rIC0tPgorCQkJCQkJCXlhdiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzMwNjpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeWF2X0NNIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMzA2Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl5byA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzI3MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJeW9fTkcgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiMyNzM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnMgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19DTiA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW5zX0hLIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTM6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnNfTU8gPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5MzpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFuc19TRyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzkzOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXpoX0hhbnRfSEsgPCEtLSAgIG9wZW46b2sgc3ltczo0MC80MiM5NDpvayBmbXQ6b2sgLS0+CisJCQkJCQkJemhfSGFudF9NTyA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzk0Om9rIGZtdDpvayAtLT4KKwkJCQkJCQl6aF9IYW50X1RXIDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjOTQ6b2sgZm10Om9rIC0tPgorCQkJCQkJCXp1IDwhLS0gICBvcGVuOm9rIHN5bXM6NDAvNDIjMjAwOm9rIGZtdDpvayAtLT4KKwkJCQkJCQl6dV9aQSA8IS0tICAgb3BlbjpvayBzeW1zOjQwLzQyIzIwMDpvayBmbXQ6b2sgLS0+CisJCQkJCQk8L2ZlYXR1cmU+CisJCQkJCQk8ZmVhdHVyZSB0eXBlPSJjb2xsYXRpb24iIHRvdGFsPSI0MDEiIHZlcnNpb249Ij8/PyI+CisJCQkJCQkJYWYgCisJCQkJCQkJYWZfTkEgCisJCQkJCQkJYWZfWkEgCisJCQkJCQkJYXIgCisJCQkJCQkJYXJfMDAxIAorCQkJCQkJCWFyX0FFIAorCQkJCQkJCWFyX0JIIAorCQkJCQkJCWFyX0RKIAorCQkJCQkJCWFyX0RaIAorCQkJCQkJCWFyX0VHIAorCQkJCQkJCWFyX0VIIAorCQkJCQkJCWFyX0VSIAorCQkJCQkJCWFyX0lMIAorCQkJCQkJCWFyX0lRIAorCQkJCQkJCWFyX0pPIAorCQkJCQkJCWFyX0tNIAorCQkJCQkJCWFyX0tXIAorCQkJCQkJCWFyX0xCIAorCQkJCQkJCWFyX0xZIAorCQkJCQkJCWFyX01BIAorCQkJCQkJCWFyX01SIAorCQkJCQkJCWFyX09NIAorCQkJCQkJCWFyX1BTIAorCQkJCQkJCWFyX1FBIAorCQkJCQkJCWFyX1NBIAorCQkJCQkJCWFyX1NEIAorCQkJCQkJCWFyX1NPIAorCQkJCQkJCWFyX1NZIAorCQkJCQkJCWFyX1REIAorCQkJCQkJCWFyX1ROIAorCQkJCQkJCWFyX1lFIAorCQkJCQkJCWFzIAorCQkJCQkJCWFzX0lOIAorCQkJCQkJCWF6IAorCQkJCQkJCWF6X0xhdG4gCisJCQkJCQkJYXpfTGF0bl9BWiAKKwkJCQkJCQliZSAKKwkJCQkJCQliZV9CWSAKKwkJCQkJCQliZyAKKwkJCQkJCQliZ19CRyAKKwkJCQkJCQlibiAKKwkJCQkJCQlibl9CRCAKKwkJCQkJCQlibl9JTiAKKwkJCQkJCQlicyAKKwkJCQkJCQlic19DeXJsIAorCQkJCQkJCWJzX0N5cmxfQkEgCisJCQkJCQkJYnNfTGF0biAKKwkJCQkJCQlic19MYXRuX0JBIAorCQkJCQkJCWNhIAorCQkJCQkJCWNhX0FEIAorCQkJCQkJCWNhX0VTIAorCQkJCQkJCWNociAKKwkJCQkJCQljaHJfVVMgCisJCQkJCQkJY3MgCisJCQkJCQkJY3NfQ1ogCisJCQkJCQkJY3kgCisJCQkJCQkJY3lfR0IgCisJCQkJCQkJZGEgCisJCQkJCQkJZGFfREsgCisJCQkJCQkJZGUgCisJCQkJCQkJZGVfQVQgCisJCQkJCQkJZGVfQkUgCisJCQkJCQkJZGVfQ0ggCisJCQkJCQkJZGVfREUgCisJCQkJCQkJZGVfTEkgCisJCQkJCQkJZGVfTFUgCisJCQkJCQkJZHogCisJCQkJCQkJZWUgCisJCQkJCQkJZWVfR0ggCisJCQkJCQkJZWVfVEcgCisJCQkJCQkJZWwgCisJCQkJCQkJZWxfQ1kgCisJCQkJCQkJZWxfR1IgCisJCQkJCQkJZW4gCisJCQkJCQkJZW5fMTUwIAorCQkJCQkJCWVuX0FHIAorCQkJCQkJCWVuX0FTIAorCQkJCQkJCWVuX0FVIAorCQkJCQkJCWVuX0JCIAorCQkJCQkJCWVuX0JFIAorCQkJCQkJCWVuX0JNIAorCQkJCQkJCWVuX0JTIAorCQkJCQkJCWVuX0JXIAorCQkJCQkJCWVuX0JaIAorCQkJCQkJCWVuX0NBIAorCQkJCQkJCWVuX0NNIAorCQkJCQkJCWVuX0RNIAorCQkJCQkJCWVuX0ZKIAorCQkJCQkJCWVuX0ZNIAorCQkJCQkJCWVuX0dCIAorCQkJCQkJCWVuX0dEIAorCQkJCQkJCWVuX0dHIAorCQkJCQkJCWVuX0dIIAorCQkJCQkJCWVuX0dJIAorCQkJCQkJCWVuX0dNIAorCQkJCQkJCWVuX0dVIAorCQkJCQkJCWVuX0hLIAorCQkJCQkJCWVuX0lFIAorCQkJCQkJCWVuX0lNIAorCQkJCQkJCWVuX0lOIAorCQkJCQkJCWVuX0pFIAorCQkJCQkJCWVuX0pNIAorCQkJCQkJCWVuX0tFIAorCQkJCQkJCWVuX0tJIAorCQkJCQkJCWVuX0tOIAorCQkJCQkJCWVuX0tZIAorCQkJCQkJCWVuX0xDIAorCQkJCQkJCWVuX0xSIAorCQkJCQkJCWVuX0xTIAorCQkJCQkJCWVuX01HIAorCQkJCQkJCWVuX01IIAorCQkJCQkJCWVuX01QIAorCQkJCQkJCWVuX01UIAorCQkJCQkJCWVuX01VIAorCQkJCQkJCWVuX01XIAorCQkJCQkJCWVuX05BIAorCQkJCQkJCWVuX05HIAorCQkJCQkJCWVuX05aIAorCQkJCQkJCWVuX1BHIAorCQkJCQkJCWVuX1BIIAorCQkJCQkJCWVuX1BLIAorCQkJCQkJCWVuX1BSIAorCQkJCQkJCWVuX1BXIAorCQkJCQkJCWVuX1NCIAorCQkJCQkJCWVuX1NDIAorCQkJCQkJCWVuX1NHIAorCQkJCQkJCWVuX1NMIAorCQkJCQkJCWVuX1NTIAorCQkJCQkJCWVuX1RDIAorCQkJCQkJCWVuX1RPIAorCQkJCQkJCWVuX1RUIAorCQkJCQkJCWVuX1RaIAorCQkJCQkJCWVuX1VHIAorCQkJCQkJCWVuX1VNIAorCQkJCQkJCWVuX1VTIAorCQkJCQkJCWVuX1VTX1BPU0lYIAorCQkJCQkJCWVuX1ZDIAorCQkJCQkJCWVuX1ZHIAorCQkJCQkJCWVuX1ZJIAorCQkJCQkJCWVuX1ZVIAorCQkJCQkJCWVuX1dTIAorCQkJCQkJCWVuX1pBIAorCQkJCQkJCWVuX1pNIAorCQkJCQkJCWVuX1pXIAorCQkJCQkJCWVvIAorCQkJCQkJCWVzIAorCQkJCQkJCWVzXzQxOSAKKwkJCQkJCQllc19BUiAKKwkJCQkJCQllc19CTyAKKwkJCQkJCQllc19DTCAKKwkJCQkJCQllc19DTyAKKwkJCQkJCQllc19DUiAKKwkJCQkJCQllc19DVSAKKwkJCQkJCQllc19ETyAKKwkJCQkJCQllc19FQSAKKwkJCQkJCQllc19FQyAKKwkJCQkJCQllc19FUyAKKwkJCQkJCQllc19HUSAKKwkJCQkJCQllc19HVCAKKwkJCQkJCQllc19ITiAKKwkJCQkJCQllc19JQyAKKwkJCQkJCQllc19NWCAKKwkJCQkJCQllc19OSSAKKwkJCQkJCQllc19QQSAKKwkJCQkJCQllc19QRSAKKwkJCQkJCQllc19QSCAKKwkJCQkJCQllc19QUiAKKwkJCQkJCQllc19QWSAKKwkJCQkJCQllc19TViAKKwkJCQkJCQllc19VUyAKKwkJCQkJCQllc19VWSAKKwkJCQkJCQllc19WRSAKKwkJCQkJCQlldCAKKwkJCQkJCQlldF9FRSAKKwkJCQkJCQlmYSAKKwkJCQkJCQlmYV9BRiAKKwkJCQkJCQlmYV9JUiAKKwkJCQkJCQlmaSAKKwkJCQkJCQlmaV9GSSAKKwkJCQkJCQlmaWwgCisJCQkJCQkJZmlsX1BIIAorCQkJCQkJCWZvIAorCQkJCQkJCWZvX0ZPIAorCQkJCQkJCWZyIAorCQkJCQkJCWZyX0JFIAorCQkJCQkJCWZyX0JGIAorCQkJCQkJCWZyX0JJIAorCQkJCQkJCWZyX0JKIAorCQkJCQkJCWZyX0JMIAorCQkJCQkJCWZyX0NBIAorCQkJCQkJCWZyX0NEIAorCQkJCQkJCWZyX0NGIAorCQkJCQkJCWZyX0NHIAorCQkJCQkJCWZyX0NIIAorCQkJCQkJCWZyX0NJIAorCQkJCQkJCWZyX0NNIAorCQkJCQkJCWZyX0RKIAorCQkJCQkJCWZyX0RaIAorCQkJCQkJCWZyX0ZSIAorCQkJCQkJCWZyX0dBIAorCQkJCQkJCWZyX0dOIAorCQkJCQkJCWZyX0dQIAorCQkJCQkJCWZyX0dRIAorCQkJCQkJCWZyX0hUIAorCQkJCQkJCWZyX0tNIAorCQkJCQkJCWZyX0xVIAorCQkJCQkJCWZyX01BIAorCQkJCQkJCWZyX01DIAorCQkJCQkJCWZyX01GIAorCQkJCQkJCWZyX01HIAorCQkJCQkJCWZyX01MIAorCQkJCQkJCWZyX01RIAorCQkJCQkJCWZyX01SIAorCQkJCQkJCWZyX01VIAorCQkJCQkJCWZyX05DIAorCQkJCQkJCWZyX05FIAorCQkJCQkJCWZyX1BGIAorCQkJCQkJCWZyX1JFIAorCQkJCQkJCWZyX1JXIAorCQkJCQkJCWZyX1NDIAorCQkJCQkJCWZyX1NOIAorCQkJCQkJCWZyX1NZIAorCQkJCQkJCWZyX1REIAorCQkJCQkJCWZyX1RHIAorCQkJCQkJCWZyX1ROIAorCQkJCQkJCWZyX1ZVIAorCQkJCQkJCWdhIAorCQkJCQkJCWdhX0lFIAorCQkJCQkJCWd1IAorCQkJCQkJCWd1X0lOIAorCQkJCQkJCWhhIAorCQkJCQkJCWhhX0xhdG4gCisJCQkJCQkJaGFfTGF0bl9HSCAKKwkJCQkJCQloYV9MYXRuX05FIAorCQkJCQkJCWhhX0xhdG5fTkcgCisJCQkJCQkJaGF3IAorCQkJCQkJCWhlIAorCQkJCQkJCWhlX0lMIAorCQkJCQkJCWhpIAorCQkJCQkJCWhpX0lOIAorCQkJCQkJCWhyIAorCQkJCQkJCWhyX0JBIAorCQkJCQkJCWhyX0hSIAorCQkJCQkJCWh1IAorCQkJCQkJCWh1X0hVIAorCQkJCQkJCWh5IAorCQkJCQkJCWh5X0FNIAorCQkJCQkJCWlkIAorCQkJCQkJCWlkX0lEIAorCQkJCQkJCWlnIAorCQkJCQkJCWlnX05HIAorCQkJCQkJCWlzIAorCQkJCQkJCWlzX0lTIAorCQkJCQkJCWl0IAorCQkJCQkJCWl0X0NIIAorCQkJCQkJCWl0X0lUIAorCQkJCQkJCWl0X1NNIAorCQkJCQkJCWphIAorCQkJCQkJCWphX0pQIAorCQkJCQkJCWthIAorCQkJCQkJCWthX0dFIAorCQkJCQkJCWtrIAorCQkJCQkJCWtrX0taIAorCQkJCQkJCWtsIAorCQkJCQkJCWtsX0dMIAorCQkJCQkJCWttIAorCQkJCQkJCWttX0tIIAorCQkJCQkJCWtuIAorCQkJCQkJCWtuX0lOIAorCQkJCQkJCWtvIAorCQkJCQkJCWtvX0tQIAorCQkJCQkJCWtvX0tSIAorCQkJCQkJCWtvayAKKwkJCQkJCQlrb2tfSU4gCisJCQkJCQkJbG4gCisJCQkJCQkJbG5fQU8gCisJCQkJCQkJbG5fQ0QgCisJCQkJCQkJbG5fQ0YgCisJCQkJCQkJbG5fQ0cgCisJCQkJCQkJbHQgCisJCQkJCQkJbHRfTFQgCisJCQkJCQkJbHYgCisJCQkJCQkJbHZfTFYgCisJCQkJCQkJbWsgCisJCQkJCQkJbWtfTUsgCisJCQkJCQkJbWwgCisJCQkJCQkJbWxfSU4gCisJCQkJCQkJbXIgCisJCQkJCQkJbXJfSU4gCisJCQkJCQkJbXMgCisJCQkJCQkJbXNfQk4gCisJCQkJCQkJbXNfTVkgCisJCQkJCQkJbXNfU0cgCisJCQkJCQkJbXQgCisJCQkJCQkJbXRfTVQgCisJCQkJCQkJbXkgCisJCQkJCQkJbXlfTU0gCisJCQkJCQkJbmIgCisJCQkJCQkJbmJfTk8gCisJCQkJCQkJbmwgCisJCQkJCQkJbmxfQVcgCisJCQkJCQkJbmxfQkUgCisJCQkJCQkJbmxfQ1cgCisJCQkJCQkJbmxfTkwgCisJCQkJCQkJbmxfU1IgCisJCQkJCQkJbmxfU1ggCisJCQkJCQkJbm4gCisJCQkJCQkJbm5fTk8gCisJCQkJCQkJb20gCisJCQkJCQkJb21fRVQgCisJCQkJCQkJb21fS0UgCisJCQkJCQkJb3IgCisJCQkJCQkJb3JfSU4gCisJCQkJCQkJcGEgCisJCQkJCQkJcGFfQXJhYiAKKwkJCQkJCQlwYV9BcmFiX1BLIAorCQkJCQkJCXBhX0d1cnUgCisJCQkJCQkJcGFfR3VydV9JTiAKKwkJCQkJCQlwbCAKKwkJCQkJCQlwbF9QTCAKKwkJCQkJCQlwcyAKKwkJCQkJCQlwc19BRiAKKwkJCQkJCQlwdCAKKwkJCQkJCQlwdF9BTyAKKwkJCQkJCQlwdF9CUiAKKwkJCQkJCQlwdF9DViAKKwkJCQkJCQlwdF9HVyAKKwkJCQkJCQlwdF9NTyAKKwkJCQkJCQlwdF9NWiAKKwkJCQkJCQlwdF9QVCAKKwkJCQkJCQlwdF9TVCAKKwkJCQkJCQlwdF9UTCAKKwkJCQkJCQlybyAKKwkJCQkJCQlyb19NRCAKKwkJCQkJCQlyb19STyAKKwkJCQkJCQlydSAKKwkJCQkJCQlydV9CWSAKKwkJCQkJCQlydV9LRyAKKwkJCQkJCQlydV9LWiAKKwkJCQkJCQlydV9NRCAKKwkJCQkJCQlydV9SVSAKKwkJCQkJCQlydV9VQSAKKwkJCQkJCQlzaSAKKwkJCQkJCQlzaV9MSyAKKwkJCQkJCQlzayAKKwkJCQkJCQlza19TSyAKKwkJCQkJCQlzbCAKKwkJCQkJCQlzbF9TSSAKKwkJCQkJCQlzcSAKKwkJCQkJCQlzcV9BTCAKKwkJCQkJCQlzcV9NSyAKKwkJCQkJCQlzciAKKwkJCQkJCQlzcl9DeXJsIAorCQkJCQkJCXNyX0N5cmxfQkEgCisJCQkJCQkJc3JfQ3lybF9NRSAKKwkJCQkJCQlzcl9DeXJsX1JTIAorCQkJCQkJCXNyX0xhdG4gCisJCQkJCQkJc3JfTGF0bl9CQSAKKwkJCQkJCQlzcl9MYXRuX01FIAorCQkJCQkJCXNyX0xhdG5fUlMgCisJCQkJCQkJc3YgCisJCQkJCQkJc3ZfQVggCisJCQkJCQkJc3ZfRkkgCisJCQkJCQkJc3ZfU0UgCisJCQkJCQkJc3cgCisJCQkJCQkJc3dfS0UgCisJCQkJCQkJc3dfVFogCisJCQkJCQkJc3dfVUcgCisJCQkJCQkJdGEgCisJCQkJCQkJdGFfSU4gCisJCQkJCQkJdGFfTEsgCisJCQkJCQkJdGFfTVkgCisJCQkJCQkJdGFfU0cgCisJCQkJCQkJdGUgCisJCQkJCQkJdGVfSU4gCisJCQkJCQkJdGggCisJCQkJCQkJdGhfVEggCisJCQkJCQkJdG8gCisJCQkJCQkJdG9fVE8gCisJCQkJCQkJdHIgCisJCQkJCQkJdHJfQ1kgCisJCQkJCQkJdHJfVFIgCisJCQkJCQkJdWsgCisJCQkJCQkJdWtfVUEgCisJCQkJCQkJdXIgCisJCQkJCQkJdXJfSU4gCisJCQkJCQkJdXJfUEsgCisJCQkJCQkJdmkgCisJCQkJCQkJdmlfVk4gCisJCQkJCQkJeW8gCisJCQkJCQkJeW9fTkcgCisJCQkJCQkJemggCisJCQkJCQkJemhfSGFucyAKKwkJCQkJCQl6aF9IYW5zX0NOIAorCQkJCQkJCXpoX0hhbnNfU0cgCisJCQkJCQkJemhfSGFudCAKKwkJCQkJCQl6aF9IYW50X0hLIAorCQkJCQkJCXpoX0hhbnRfTU8gCisJCQkJCQkJemhfSGFudF9UVyAKKwkJCQkJCQl6dSAKKwkJCQkJCQl6dV9aQSAKKwkJCQkJCTwvZmVhdHVyZT4KKwkJCQkJPC9jYXBhYmlsaXRpZXM+CisJCQkJPC9yZWxlYXNlPgorCQkJPC9yZWxlYXNlcz4KKwkJPC9pY3VQcm9kdWN0PgorCTwvaWN1UHJvZHVjdHM+Cis8L2ljdUluZm8+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWxvdXQuY3BwIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sb3V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWNhZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4veG1sb3V0LmNwcApAQCAtMCwwICsxLDc3IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ4bWxvdXQuaCIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworWE1MRmlsZTo6WE1MRmlsZShGSUxFICpmKSB7CisgICAgZmlsZSA9IGY7CisgICAgbGV2ZWwgPSAwOworfQorCitYTUxGaWxlOjp+WE1MRmlsZSgpCit7CisKK30KKwordm9pZCBYTUxGaWxlOjp3cml0ZShjb25zdCBjaGFyICpzKSB7CisgICAgZnB1dHMocywgZmlsZSk7Cit9CisKK3ZvaWQgWE1MRmlsZTo6d3JpdGVsbihjb25zdCBjaGFyICpzKSB7CisgICAgd3JpdGVJbmRlbnQoKTsKKyAgICB3cml0ZShzKTsKKyAgICB3cml0ZSgiXG4iKTsKK30KKworaW50IFhNTEZpbGU6OmluZGVudChjb25zdCBjaGFyICpzLCBib29sIHNpbmdsZSkgeworICAgIGludCBvbGRMZXZlbCA9IGxldmVsOworICAgIHdyaXRlbG4ocyk7CisgICAgbGV2ZWwrKzsKKyAgICBpZihzaW5nbGUpIHsKKyAgICAgICAgbGV2ZWwtLTsKKyAgICB9CisgICAgcmV0dXJuIG9sZExldmVsOworfQoraW50IFhNTEZpbGU6Om91dGRlbnQoY29uc3QgY2hhciAqcykgeworICAgIGxldmVsLS07CisgICAgd3JpdGVsbihzKTsKKyAgICByZXR1cm4gbGV2ZWw7Cit9CisKK3ZvaWQgWE1MRmlsZTo6d3JpdGVJbmRlbnQoKSB7CisgICAgZm9yKGludCBpPTA7aTxsZXZlbDtpKyspIHsKKyAgICAgICAgd3JpdGUoIlx0Iik7CisgICAgfQorfQorCitYTUxFbGVtZW50OjpYTUxFbGVtZW50KFhNTEZpbGUgJmYsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmF0dHJpYnMsIGJvb2wgc2luZ2xlKSA6IGZpbGUoZiksIG5hbWUobmFtZSksIHNpbmdsZShzaW5nbGUpIHsKKyAgICBjaGFyIG91dHNbMjAwXTsKKyAgICBpZihhdHRyaWJzIT1OVUxMKSB7CisgICAgICAgIHNwcmludGYob3V0cywiPCVzICVzIiwgbmFtZSwgYXR0cmlicyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ByaW50ZihvdXRzLCAiPCVzIiwgbmFtZSk7CisgICAgfQorICAgIGlmKHNpbmdsZSkgeworICAgICAgICBzdHJjYXQob3V0cywgIi8+Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RyY2F0KG91dHMsICI+Iik7CisgICAgfQorICAgIG9sZGxldmVsID0gZmlsZS5pbmRlbnQob3V0cywgc2luZ2xlKTsKK30KKworWE1MRWxlbWVudDo6flhNTEVsZW1lbnQoKSB7CisgICAgaWYoIXNpbmdsZSkgeworICAgICAgICBjaGFyIG91dHNbMjAwXTsKKyAgICAgICAgc3ByaW50ZihvdXRzLCI8LyVzPiIsIG5hbWUpOworICAgICAgICBpbnQgbmV3bGV2ZWwgPSBmaWxlLm91dGRlbnQob3V0cyk7CisgICAgICAgIGlmKG5ld2xldmVsICE9IG9sZGxldmVsKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkBAQCBFUlJPUjogZWxlbWV0ICVzIHBvcHBlZCBvdXQgdG8gbGV2ZWwgJWQgYnV0IGV4cGVjdGVkICVkLiBBYm9ydC5cbiIsIG5hbWUsIG5ld2xldmVsLCBvbGRsZXZlbCk7CisgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWxvdXQuaCBiL211bHRpL3Byb2ovaWN1NGNzY2FuL3htbG91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOGNkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi94bWxvdXQuaApAQCAtMCwwICsxLDQ3IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjbGFzcyBYTUxGaWxlIHsKKyAgICBwdWJsaWM6ICAKKyAgICBYTUxGaWxlKEZJTEUgKmYpOworICAgICB+WE1MRmlsZSgpOworICAgICAvKioKKyAgICAgICogV3JpdGUgaW5kZW50IGF0IGN1cnJlbnQgbGV2ZWwsIGluY3JlbWVudCBsZXZlbCwgYW5kIHRoZW4gcmV0dXJuIHdoYXQgdGhlIGluaXRpYWwgbGV2ZWwgd2FzCisgICAgICAqLworICAgICBpbnQgaW5kZW50KGNvbnN0IGNoYXIgKnMsIGJvb2wgc2luZ2xlID0gRkFMU0UpOworICAgICAvKioKKyAgICAgICogRGVjcmVtZW50IGxldmVsLCB3cml0ZSBpbmRlbnQgb2YgJ291dGVyJyBsZXZlbCwgYW5kIHJldHVybiB3aGF0IHRoZSBuZXcgbGV2ZWwgaXMuIFNob3VsZCBtYXRjaCB5b3VyIGVhcmxpZXIgY2FsbCB0byBpbmRlbnQuCisgICAgICAqLworICAgICBpbnQgb3V0ZGVudChjb25zdCBjaGFyICpzKTsKKyAgICAgCisgICAgIC8qKgorICAgICAgKiBXcml0ZSBzb21lIHN0cmluZyAKKyAgICAgICovCisgICAgIHZvaWQgd3JpdGVsbihjb25zdCBjaGFyICpzKTsKKyAgICAgCisgICAgIHByaXZhdGU6CisgICAgICAgdm9pZCB3cml0ZUluZGVudCgpOworICAgICAvKioKKyAgICAgICogV3JpdGUgc29tZSBzdHJpbmcgd2l0aG91dCBpbmRlbnQuICovCisgICAgIHZvaWQgd3JpdGUoY29uc3QgY2hhciAqcyk7CisgICAgIAorICAgIGludCBsZXZlbDsKKyAgICBGSUxFICpmaWxlOworfTsKKworY2xhc3MgWE1MRWxlbWVudCB7CisgICAgcHVibGljOgorICAgICAgICBYTUxFbGVtZW50KFhNTEZpbGUgJmYsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmF0dHJpYnMgID0gTlVMTCwgYm9vbCBzaW5nbGU9RkFMU0UpOworICAgICAgICB+WE1MRWxlbWVudCgpOworICAgICAgICAKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgaW50IG9sZGxldmVsOworICAgICAgICBYTUxGaWxlICZmaWxlOworICAgICAgICBib29sIHNpbmdsZTsKK307CisKKworICAgIAorCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRjc2Nhbi96YXBwaXQuc2VkIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vemFwcGl0LnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjFhYzk1Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vemFwcGl0LnNlZApAQCAtMCwwICsxLDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAorcyU8IS0tLiotLT4lJWcKK3MlWyAJXVsJIF0qJSAlZwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0Y3NjYW4vemFwcGl0LnNoIGIvbXVsdGkvcHJvai9pY3U0Y3NjYW4vemFwcGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc3ZDZhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRjc2Nhbi96YXBwaXQuc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAorc2VkIC1mIHphcHBpdC5zZWQgfCB0ciAtcyAnCSBcMDEyICcgJyAnCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi8uY2xhc3NwYXRoIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGE1YWFkCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vLmNsYXNzcGF0aApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5VU0VSX0xJQlJBUlkvQ0xEUl9KQVIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQuVVNFUl9MSUJSQVJZL0lDVV9NRVRBX0xJQiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5VU0VSX0xJQlJBUlkvSUNVX1VUSUxJVElFUyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi8ucHJvamVjdCBiL211bHRpL3Byb2ovaWN1NGpzY2FuLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMGE2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5pY3U0anNjYW48L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0anNjYW4vcmVhZG1lLnR4dCBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNhYTk4OAotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3JlYWRtZS50eHQKQEAgLTAsMCArMSwyIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RoaXMgcHJvamVjdCBpc24ndCB1c2VkIGRpcmVjdGx5IChleGNlcHQgeW91IGNhbiBydW4gaXQgYXMgYW4gZWNsaXBzZSBwcm9qZWN0IGZvciBkZXZlbG9wbWVudCkuICBJdCdzIGNhbGxlZCBmcm9tIC4uL2ljdTRjc2NhbgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL0NhcERvY3VtZW50LmphdmEgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRG9jdW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFmOTRlCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL0NhcERvY3VtZW50LmphdmEKQEAgLTAsMCArMSwxMTYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5zY2FuOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitwdWJsaWMgY2xhc3MgQ2FwRG9jdW1lbnQgaW1wbGVtZW50cyBDYXBOb2RlIHsKKworCXB1YmxpYyBjbGFzcyBUZXh0Q2FwIGV4dGVuZHMgQ2FwRWxlbWVudCB7CisJCVRleHRDYXAoU3RyaW5nIHN0cikgeworCQkJc3VwZXIoc3RyKTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHdyaXRlKFByaW50V3JpdGVyIHB3LCBpbnQgaSkgeworCQkJd3JpdGVJbmRlbnQocHcsaSk7CisJCQlwdy53cml0ZShnZXROYW1lKCkrIlxuIik7CisJCX0KKwl9CisKKwlwdWJsaWMgY2xhc3MgQ29tbWVudEVsZW1lbnQgZXh0ZW5kcyBDYXBFbGVtZW50IHsKKwkJQ29tbWVudEVsZW1lbnQoU3RyaW5nIHN0cikgeworCQkJc3VwZXIoc3RyKTsKKwkJfQorCQlwdWJsaWMgdm9pZCB3cml0ZShQcmludFdyaXRlciBwdywgaW50IGluZGVudCkgeworCQkJd3JpdGVJbmRlbnQocHcsaW5kZW50KTsKKwkJCXB3LndyaXRlKCI8IS0tICIrZ2V0TmFtZSgpKyIgLS0+XG4iKTsKKwkJfQorCX0KKworCVRhZ0VsZW1lbnQgcm9vdCA9IG5ldyBUYWdFbGVtZW50KCk7CisJCisJcHVibGljIGNsYXNzIFRhZ0VsZW1lbnQgZXh0ZW5kcyBDYXBFbGVtZW50IHsKKwkJcHVibGljIFRhZ0VsZW1lbnQoKSB7CisJCQlzdXBlcigiIik7CisJCX0KKwkJcHVibGljIFRhZ0VsZW1lbnQoU3RyaW5nIG5hbWUpIHsKKwkJCXN1cGVyKG5hbWUpOworCQl9CisKKwkJcHVibGljIHZvaWQgd3JpdGUoUHJpbnRXcml0ZXIgcHcsIGludCBpbmRlbnQpIHsKKwkJCWlmKGdldE5hbWUoKS5sZW5ndGgoKT4wKSB7CisJCQkJd3JpdGVJbmRlbnQocHcsaW5kZW50KTsKKwkJCQlwdy53cml0ZSgiPCIrZ2V0TmFtZSgpKTsKKwkJCQlpZighYXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKKwkJCQkJZm9yKEl0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTtpdGVyLmhhc05leHQoKTspIHsKKwkJCQkJCU1hcC5FbnRyeSBvID0gKE1hcC5FbnRyeSlpdGVyLm5leHQoKTsKKwkJCQkJCXB3LndyaXRlKCIgIitvLmdldEtleSgpLnRvU3RyaW5nKCkrIj1cIiIrby5nZXRWYWx1ZSgpKyJcIiIpOworCQkJCQl9CisJCQkJfQorCQkJCXB3LndyaXRlKCI+XG4iKTsKKwkJCQlpbmRlbnQrKzsKKwkJCX0KKwkJCQorCQkJZm9yKEl0ZXJhdG9yIGl0ZXIgPSBjaGlsZHJlbi5pdGVyYXRvcigpO2l0ZXIuaGFzTmV4dCgpOykgeworCQkJCUNhcE5vZGUgY2ggPSAoQ2FwTm9kZSlpdGVyLm5leHQoKTsKKwkJCQljaC53cml0ZShwdywgaW5kZW50KTsKKwkJCX0KKwkJCQorCQkJaWYoZ2V0TmFtZSgpLmxlbmd0aCgpPjApIHsKKwkJCQlpbmRlbnQtLTsKKwkJCQl3cml0ZUluZGVudChwdyxpbmRlbnQpOworCQkJCXB3LndyaXRlKCI8LyIrZ2V0TmFtZSgpKTsKKwkJCQlwdy53cml0ZSgiPlxuIik7CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFByaW50V3JpdGVyIHB3LCBpbnQgaW5kZW50KSB7CisJCWZvcig7aW5kZW50PjA7aW5kZW50LS0pIHsKKwkJCXB3LndyaXRlKCcgJyk7CisJCX0KKwl9CisKKwlwdWJsaWMgQ2FwRWxlbWVudCBjcmVhdGVDYXBFbGVtZW50KFN0cmluZyBuYW1lKSB7CisJCXJldHVybiBuZXcgVGFnRWxlbWVudChuYW1lKTsKKwl9CisKKwlwdWJsaWMgdm9pZCBhcHBlbmRDaGlsZChDYXBFbGVtZW50IGJhc2UpIHsKKwkJcm9vdC5hcHBlbmRDaGlsZChiYXNlKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIENhcERvY3VtZW50IG5ld0NhcERvY3VtZW50KCkgeworCQlyZXR1cm4gbmV3IENhcERvY3VtZW50KCk7CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIHByaW50RE9NVHJlZShDYXBEb2N1bWVudCBvdXQsIFByaW50V3JpdGVyIHB3LAorCQkJU3RyaW5nIHN0cmluZywgT2JqZWN0IG9iamVjdCkgeworCQlwdy53cml0ZShzdHJpbmcrIlxuIik7CisJCW91dC5yb290LndyaXRlKHB3LDApOworCX0KKwkKKwlwdWJsaWMgdm9pZCB3cml0ZShQcmludFdyaXRlciBwdywgaW50IGluZGVudCkgeworCQlyb290LndyaXRlKHB3LDApOworCX0KKworCXB1YmxpYyBDYXBOb2RlIGNyZWF0ZVRleHROb2RlKFN0cmluZyB0cmltKSB7CisJCXJldHVybiBuZXcgVGV4dENhcCh0cmltKTsKKwl9CisKKwlwdWJsaWMgQ2FwRWxlbWVudCBjcmVhdGVDb21tZW50KFN0cmluZyBjb20pIHsKKwkJcmV0dXJuIG5ldyBDb21tZW50RWxlbWVudChjb20pOworCX0KKworCXB1YmxpYyBpbnQgY29tcGFyZVRvKE9iamVjdCBhcmcwKSB7CisJCXJldHVybiBnZXROYW1lKCkuY29tcGFyZVRvKCgoQ2FwTm9kZSlhcmcwKS5nZXROYW1lKCkpOworCX0KKwkKKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiByb290LmdldE5hbWUoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwRWxlbWVudC5qYXZhIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL0NhcEVsZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTM3NzlhCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL0NhcEVsZW1lbnQuamF2YQpAQCAtMCwwICsxLDUxIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gKi8KKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuc2NhbjsKKworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2FwRWxlbWVudCBpbXBsZW1lbnRzIENhcE5vZGUgeworCVN0cmluZyBjb207CisJQ2FwRWxlbWVudChTdHJpbmcgc3RyKSB7CisJCWNvbSA9IHN0cjsKKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiBjb207CisJfQorCQorCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlKFByaW50V3JpdGVyIHB3LCBpbnQgaSk7CisKKwlwdWJsaWMgaW50IGNvbXBhcmVUbyhPYmplY3QgYXJnMCkgeworCQlpZihhcmcwID09IHRoaXMpIHJldHVybiAwOworCQlpbnQgc3RyID0gZ2V0TmFtZSgpLmNvbXBhcmVUbygoKENhcE5vZGUpYXJnMCkuZ2V0TmFtZSgpKTsKKwkJaWYoc3RyIT0wKSByZXR1cm4gc3RyOworCQkKKwkJaWYoYXJnMCBpbnN0YW5jZW9mIENhcEVsZW1lbnQpIHsJCQorCQkJQ2FwRWxlbWVudCBvdGggPSAoQ2FwRWxlbWVudClhcmcwOworCQkJcmV0dXJuIGF0dHJpYnV0ZXMudG9TdHJpbmcoKS5jb21wYXJlVG8ob3RoLmF0dHJpYnV0ZXMudG9TdHJpbmcoKSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJTWFwIGF0dHJpYnV0ZXMgPSBuZXcgSGFzaE1hcCgpOworCVNldCBjaGlsZHJlbiA9IG5ldyBUcmVlU2V0KCk7CisJcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyBrLCBTdHJpbmcgdikgeworCQlhdHRyaWJ1dGVzLnB1dChrLCB2KTsKKwkJCisJfQorCisJcHVibGljIHZvaWQgYXBwZW5kQ2hpbGQoQ2FwTm9kZSBlKSB7CisJCWNoaWxkcmVuLmFkZChlKTsKKwkJCisJfQorCisJcHVibGljIFN0cmluZyBnZXROb2RlTmFtZSgpIHsKKwkJcmV0dXJuIGdldE5hbWUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9DYXBOb2RlLmphdmEgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjI5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwTm9kZS5qYXZhCkBAIC0wLDAgKzEsMTMgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5zY2FuOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKKworcHVibGljIGludGVyZmFjZSBDYXBOb2RlIGV4dGVuZHMgQ29tcGFyYWJsZSB7CisKKwl2b2lkIHdyaXRlKFByaW50V3JpdGVyIHB3LCBpbnQgaSk7CisKKwlTdHJpbmcgZ2V0TmFtZSgpOworCit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vQ2FwU2Nhbi5qYXZhIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL0NhcFNjYW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODE2Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL0NhcFNjYW4uamF2YQpAQCAtMCwwICsxLDEyOSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnNjYW47CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy51bmljb2RlLmNsZHIudXRpbC5MRE1MVXRpbGl0aWVzOworaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKK2ltcG9ydCBjb20uaWJtLmljdS5kZXYubWV0YS5JY3VJbmZvOworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5tZXRhLlhNTFV0aWw7CitpbXBvcnQgY29tLmlibS5pY3UudXRpbC5WZXJzaW9uSW5mbzsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIENhcFNjYW4geworCisgICAgLyoqIENhcGFiaWxpdGllcyBzdHJpbmcgKiovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVElORyA9ICJmb3JtYXR0aW5nIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xMQVRJT04gPSAiY29sbGF0aW9uIjsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBhcmdzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgCisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiIyAiK0NhcFNjYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKyI6IFRoaXMgaXMganVzdCB0aGUgYmFzZSBjbGFzcy4gVXNlIGEgc3ViY2xhc3MuIik7CisgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgIH0KKworICAgIHByb3RlY3RlZCBTdHJpbmcgcHJvZzsKKworICAgIHByb3RlY3RlZCBFbGVtZW50IGFkZENhcGFiaWxpdHkoRG9jdW1lbnQgb3V0LCBFbGVtZW50IGNhcGFiaWxpdGllcywgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsIG5hbWUsIChTdHJpbmcpbnVsbCk7CisgICAgfQorICAgIHByb3RlY3RlZCBFbGVtZW50IGFkZENhcGFiaWxpdHkoRG9jdW1lbnQgb3V0LCBFbGVtZW50IGNhcGFiaWxpdGllcywgU3RyaW5nIG5hbWUsCisgICAgICAgICAgICBTdHJpbmcgdmVyc2lvbikgeworICAgIAorICAgICAgICBFbGVtZW50IGUgPSBvdXQuY3JlYXRlRWxlbWVudChJY3VJbmZvLkZFQVRVUkUpOworICAgICAgICBlLnNldEF0dHJpYnV0ZShJY3VJbmZvLlRZUEUsbmFtZS50cmltKCkpOworICAgICAgICBpZih2ZXJzaW9uIT1udWxsKSB7CisgICAgICAgICAgICBlLnNldEF0dHJpYnV0ZShJY3VJbmZvLlZFUlNJT04sdmVyc2lvbi50cmltKCkpOworICAgICAgICB9CisgICAgICAgIGNhcGFiaWxpdGllcy5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgcmV0dXJuIGU7CisgICAgfQorCisgICAgcHJvdGVjdGVkIEVsZW1lbnQgYWRkQ2FwYWJpbGl0eShEb2N1bWVudCBvdXQsIEVsZW1lbnQgY2FwYWJpbGl0aWVzLCBTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgIFZlcnNpb25JbmZvIHZlcnNpb24pIHsKKyAgICAgICAgcmV0dXJuIGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsIG5hbWUsIEljdUluZm8udmVyc2lvbkluZm9Ub1Nob3J0U3RyaW5nKHZlcnNpb24pKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgQ2FwU2NhbihTdHJpbmcgcHJvZykgeworICAgICAgICB0aGlzLnByb2cgPSBwcm9nOworICAgIH0KKyAgICAKKyAgICBEb2N1bWVudCBvdXQ7CisgICAgCisgICAgcHJvdGVjdGVkIEVsZW1lbnQgY3JlYXRlUHJvZHVjdChTdHJpbmcgcHJvZHVjdE5hbWUpIHsKKyAgICAgICAgRWxlbWVudCBiYXNlID0gb3V0LmNyZWF0ZUVsZW1lbnQoSWN1SW5mby5JQ1VfSU5GTyk7CisgICAgICAgIG91dC5hcHBlbmRDaGlsZChiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQgcHJvZHVjdHMgPSBvdXQuY3JlYXRlRWxlbWVudChJY3VJbmZvLklDVV9QUk9EVUNUUyk7CisgICAgICAgIGJhc2UuYXBwZW5kQ2hpbGQocHJvZHVjdHMpOworICAgICAgICAKKyAgICAgICAgRWxlbWVudCBwcm9kdWN0ID0gb3V0LmNyZWF0ZUVsZW1lbnQoSWN1SW5mby5JQ1VfUFJPRFVDVCk7CisgICAgICAgIHByb2R1Y3Quc2V0QXR0cmlidXRlKEljdUluZm8uVFlQRSwgcHJvZHVjdE5hbWUpOworICAgICAgICBwcm9kdWN0cy5hcHBlbmRDaGlsZChwcm9kdWN0KTsKKyAgICAgICAgcmV0dXJuIHByb2R1Y3Q7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBFbGVtZW50IGNyZWF0ZVJlbGVhc2UoRWxlbWVudCBwcm9kdWN0LCBTdHJpbmcgdmVyc2lvbikgeworICAgICAgICBFbGVtZW50IHJlbGVhc2VzID0gb3V0LmNyZWF0ZUVsZW1lbnQoSWN1SW5mby5SRUxFQVNFUyk7CisgICAgICAgIHByb2R1Y3QuYXBwZW5kQ2hpbGQocmVsZWFzZXMpOworICAgICAgICAKKyAgICAgICAgRWxlbWVudCByZWxlYXNlID0gb3V0LmNyZWF0ZUVsZW1lbnQoSWN1SW5mby5SRUxFQVNFKTsKKyAgICAgICAgcmVsZWFzZS5zZXRBdHRyaWJ1dGUoSWN1SW5mby5WRVJTSU9OLCB2ZXJzaW9uKTsKKyAgICAgICAgcmVsZWFzZXMuYXBwZW5kQ2hpbGQocmVsZWFzZSk7CisgICAgICAgIHJldHVybiByZWxlYXNlOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBydW5NYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBJT0V4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIAorICAgICAgICAKKyAgICAgU3lzdGVtLmVyci5wcmludGxuKCIjICIrcHJvZysiOiBzdGFydHVwLiIpOworICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICBvdXQgPSBYTUxVdGlsLmdldEJ1aWxkZXIoKS5uZXdEb2N1bWVudCgpOworICAgIAorICAgIEVsZW1lbnQgcHJvZHVjdCA9IGNyZWF0ZVByb2R1Y3QoZ2V0UHJvZHVjdCgpKTsKKyAgICAKKyAgICBFbGVtZW50IHJlbGVhc2UgPSBjcmVhdGVSZWxlYXNlKHByb2R1Y3QsIGdldFJlbGVhc2UoKSk7CisgICAgCisgICAgCisgICAgRWxlbWVudCBjYXBhYmlsaXRpZXMgPSBvdXQuY3JlYXRlRWxlbWVudChJY3VJbmZvLkNBUEFCSUxJVElFUyk7CisgICAgcmVsZWFzZS5hcHBlbmRDaGlsZChjYXBhYmlsaXRpZXMpOworICAgIAorICAgIGFkZENhcGFiaWxpdGllc1RvKGNhcGFiaWxpdGllcyk7CisKKworICAgIC8vIHdyaXRlIG91dAorICAgIE91dHB1dFN0cmVhbSBvdXRzdHIgPSBudWxsOworICAgIG91dHN0ciA9IFN5c3RlbS5vdXQ7CisvLyAgICBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbnVsbDsKKy8vICAgIGlmKG91dGZpbGUhPW51bGwpIHsKKy8vICAgICAgICBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRmaWxlKTsKKy8vICAgICAgICBvdXQgPSBmb3M7CisvLyAgICAgICAgaWYodmVyYm9zZSkgU3lzdGVtLmVyci5wcmludGxuKCIjIFdyaXRlIDwiK291dGZpbGUrIj4iKTsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgb3V0ID0gU3lzdGVtLm91dDsKKy8vICAgICAgICBpZih2ZXJib3NlKSBTeXN0ZW0uZXJyLnByaW50bG4oIiMgV3JpdGUgPHN0ZG91dD4iKTsKKy8vICAgIH0KKy8vICAgIHRyeSB7CisgICAgIGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyIHdyaXRlciA9IG5ldyBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcigKKyAgICAgICAgICAgICBvdXRzdHIpOworICAgICBTdHJpbmcgY29weSA9ICIiOworICAgICBpZih0cnVlKSBjb3B5ID0gKCI8IS0tIENvcHlyaWdodCAoYykgIitDYWxlbmRhci5nZXRJbnN0YW5jZSgpLmdldChDYWxlbmRhci5ZRUFSKSsiIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT5cbiIpOworICAgICBMRE1MVXRpbGl0aWVzLnByaW50RE9NVHJlZShvdXQsIG5ldyBQcmludFdyaXRlcih3cml0ZXIpLGNvcHkrIlxuPCFET0NUWVBFIGljdUluZm8gU1lTVEVNIFwiaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kdGQvaWN1bWV0YS5kdGRcIj5cbiIsbnVsbCk7IC8vCisgICAgIHdyaXRlci5mbHVzaCgpOworICAgIH0KKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFByb2R1Y3QoKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFJlbGVhc2UoKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBhZGRDYXBhYmlsaXRpZXNUbyhFbGVtZW50IGNhcGFiaWxpdGllcyk7Cit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbklDVS5qYXZhIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NjYW5JQ1UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjZmOGFiCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NjYW5JQ1UuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKKy8qKgorICogCisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnNjYW47CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy51bmljb2RlLmNsZHIudXRpbC5MRE1MVXRpbGl0aWVzOworaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5tZXRhLkljdUluZm87CitpbXBvcnQgY29tLmlibS5pY3UuZGV2Lm1ldGEuWE1MVXRpbDsKK2ltcG9ydCBjb20uaWJtLmljdS5sYW5nLlVDaGFyYWN0ZXI7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvcjsKK2ltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgY29tLmlibS5pY3UudGV4dC5SdWxlQmFzZWRDb2xsYXRvcjsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlRpbWVab25lOworaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuVUxvY2FsZTsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlZlcnNpb25JbmZvOworCisvKioKKyAqIEBhdXRob3Igc3JsCisgKgorICovCitwdWJsaWMgY2xhc3MgU2NhbklDVSBleHRlbmRzIENhcFNjYW57CisKKyAgICBwcm90ZWN0ZWQgU2NhbklDVSgpIHsKKyAgICAgICAgc3VwZXIoU2NhbklDVS5jbGFzcy5nZXROYW1lKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBhcmdzCisgICAgICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIAorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKyAgICAgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gIHsKKyAgICAgICAgbmV3IFNjYW5JQ1UoKS5ydW5NYWluKGFyZ3MpOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2R1Y3QoKSB7CisgICAgICAgIHJldHVybiAiaWN1NGoiOworICAgIH0KKworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0UmVsZWFzZSgpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogICAgIHRyeSB7CisgICAgfSBjYXRjaChOb0NsYXNzRGVmRm91bmRFcnJvciBuY2RmKSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IENhbid0IGdldCBJQ1UgdmVyc2lvbjogIiArIG5jZGYudG9TdHJpbmcoKSk7CisgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgIH0gY2F0Y2goTm9TdWNoRmllbGRFcnJvciBuc21lKSB7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IENhbid0IGdldCBJQ1UgdmVyc2lvbjogIiArIG5zbWUudG9TdHJpbmcoKSk7CisgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgIH0KKyAgICAgICAgICovCisgICAgICAgIHJldHVybiBJY3VJbmZvLnZlcnNpb25JbmZvVG9TaG9ydFN0cmluZyhWZXJzaW9uSW5mby5JQ1VfVkVSU0lPTik7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgYWRkQ2FwYWJpbGl0aWVzVG8oRWxlbWVudCBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgCisgICAgICAgIGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsICJ1bmljb2RlIiwgVUNoYXJhY3Rlci5nZXRVbmljb2RlVmVyc2lvbigpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsICJ1Y2EiLCBDb2xsYXRvci5nZXRJbnN0YW5jZSgpLmdldFVDQVZlcnNpb24oKSk7CisgICAgICAgIH0gY2F0Y2goTm9TdWNoTWV0aG9kRXJyb3IgbnNtZSkgeworICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogTm90ZTogIituc21lLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhZGRDYXBhYmlsaXR5KG91dCwgY2FwYWJpbGl0aWVzLCAidHoiLCBUaW1lWm9uZS5nZXRUWkRhdGFWZXJzaW9uKCkpOworICAgICAgICB9IGNhdGNoKE5vU3VjaE1ldGhvZEVycm9yIG5zbWUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IE5vdGU6ICIrbnNtZS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICBhZGRGb3JtYXR0aW5nKGNhcGFiaWxpdGllcyk7CisgICAgICAgIGFkZENvbGxhdGlvbihjYXBhYmlsaXRpZXMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEZvcm1hdHRpbmcoRWxlbWVudCBjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgICAgIEVsZW1lbnQgbG9jcyA9IGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsIENhcFNjYW4uRk9STUFUVElORyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBVTG9jYWxlIGF2YWlsYWJsZVtdID0gVUxvY2FsZS5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgICAgICBsb2NzLnNldEF0dHJpYnV0ZSgidG90YWwiLCBuZXcgSW50ZWdlcihhdmFpbGFibGUubGVuZ3RoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0cmluZyBsb2NpbmZvID0gIiI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3Bpbm5lciBzcCA9IG5ldyBTcGlubmVyKGxvY3MuZ2V0Tm9kZU5hbWUoKSxhdmFpbGFibGUubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGF2YWlsYWJsZS5sZW5ndGg7aSsrKSB7CisgICAgICAgICAgICAgICAgCVVMb2NhbGUgbG9jID0gYXZhaWxhYmxlW2ldOworICAgICAgICAgICAgICAgICAgICBpZihsb2MudG9TdHJpbmcoKS5lcXVhbHMoInJvb3QiKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7ICAgICAgICAgICAgICAgICAgICAJCisgICAgICAgICAgICAgICAgICAgICAgICBEYXRlRm9ybWF0IGZtdCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9IERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgbG9jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlmbXQgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIGxvYy50b0xvY2FsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdC5mb3JtYXQobmV3IERhdGUoMTIzNCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbG9jaW5mbyA9IGxvY2luZm8gKyAiICIgKyBsb2MudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwLnNwaW4obG9jLmdldEJhc2VOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogbG9jIGZhaWw6ICIgKyBsb2MgKyAiIC0gIiArIHQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSB0dCA9IG91dC5jcmVhdGVUZXh0Tm9kZShsb2NpbmZvLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgbG9jcy5hcHBlbmRDaGlsZCh0dCk7CisgICAgICAgICAgICB9IGNhdGNoKE5vQ2xhc3NEZWZGb3VuZEVycm9yIG5jZGYpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4ocHJvZysiOiBsb2NhbGVzOiAiICsgbmNkZi50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0gY2F0Y2goTm9TdWNoTWV0aG9kRXJyb3IgbmNkZikgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IGxvY2FsZXM6ICIgKyBuY2RmLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9ICAgIAorICAgIHZvaWQgYWRkQ29sbGF0aW9uKEVsZW1lbnQgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIEVsZW1lbnQgbG9jcyA9IGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsIENhcFNjYW4uQ09MTEFUSU9OKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBVTG9jYWxlIGF2YWlsYWJsZVtdID0gQ29sbGF0b3IuZ2V0QXZhaWxhYmxlVUxvY2FsZXMoKTsKKyAgICAgICAgICAgICAgICBTcGlubmVyIHNwID0gbmV3IFNwaW5uZXIobG9jcy5nZXROb2RlTmFtZSgpLGF2YWlsYWJsZS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGxvY3Muc2V0QXR0cmlidXRlKCJ0b3RhbCIsIG5ldyBJbnRlZ2VyKGF2YWlsYWJsZS5sZW5ndGgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2luZm8gPSAiIjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGF2YWlsYWJsZS5sZW5ndGg7aSsrKSB7CisgICAgICAgICAgICAgICAgCVVMb2NhbGUgbG9jID0gYXZhaWxhYmxlW2ldOworICAgICAgICAgICAgICAgICAgICBpZihsb2MudG9TdHJpbmcoKS5lcXVhbHMoInJvb3QiKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgLy8gIENvbGxhdG9yLmdldEluc3RhbmNlKGxvYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NpbmZvID0gbG9jaW5mbyArICIgIiArIGxvYy50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Auc3Bpbihsb2MuZ2V0QmFzZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oImxvYyBmYWlsOiAiICsgbG9jICsgIiAtICIgKyB0LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUgdHQgPSBvdXQuY3JlYXRlVGV4dE5vZGUobG9jaW5mby50cmltKCkpOworICAgICAgICAgICAgICAgIGxvY3MuYXBwZW5kQ2hpbGQodHQpOworICAgICAgICAgICAgfSBjYXRjaChOb0NsYXNzRGVmRm91bmRFcnJvciBuY2RmKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJsb2NhbGVzOiAiICsgbmNkZi50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0gY2F0Y2goTm9TdWNoTWV0aG9kRXJyb3IgbmNkZikgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigibG9jYWxlczogIiArIG5jZGYudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbkphdmEuamF2YSBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TY2FuSmF2YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDg3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU2NhbkphdmEuamF2YQpAQCAtMCwwICsxLDEzNyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKKworcGFja2FnZSBjb20uaWJtLmljdS5kZXYuc2NhbjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0LkNvbGxhdG9yOworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworCisKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlVMb2NhbGU7CisKKy8qKgorICogQGF1dGhvciBzcmwKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBTY2FuSmF2YSBleHRlbmRzIFNpbXBsZVNjYW4geworCisgICAgLyoqCisgICAgICogQHBhcmFtIHByb2cKKyAgICAgKi8KKyAgICBwdWJsaWMgU2NhbkphdmEoKSB7CisgICAgICAgIHN1cGVyKFNjYW5KYXZhLmNsYXNzLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgLyogKG5vbi1KYXZhZG9jKQorICAgICAqIEBzZWUgY29tLmlibS5pY3UuZGV2LnNjYW4uQ2FwU2NhbiNhZGRDYXBhYmlsaXRpZXNUbyhvcmcudzNjLmRvbS5DYXBFbGVtZW50KQorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGFkZENhcGFiaWxpdGllc1RvKENhcEVsZW1lbnQgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIGFkZEZvcm1hdHRpbmcoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgYWRkQ29sbGF0aW9uKGNhcGFiaWxpdGllcyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZENvbGxhdGlvbihDYXBFbGVtZW50IGNhcGFiaWxpdGllcykgeworICAgICAgICBDYXBFbGVtZW50IGxvY3MgPSBhZGRDYXBhYmlsaXR5KG91dCwgY2FwYWJpbGl0aWVzLCBDYXBTY2FuLkNPTExBVElPTik7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICBMb2NhbGUgYXZhaWxhYmxlW10gPSBDb2xsYXRvci5nZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgICAgIGxvY3Muc2V0QXR0cmlidXRlKCJ0b3RhbCIsIG5ldyBJbnRlZ2VyKGF2YWlsYWJsZS5sZW5ndGgpLnRvU3RyaW5nKCkpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkJlZ2luIGNvbGwhIik7CisgICAgICAgICAgICBTdHJpbmcgbG9jaW5mbyA9ICIiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTcGlubmVyIHNwID0gbmV3IFNwaW5uZXIobG9jcy5nZXROb2RlTmFtZSgpLGF2YWlsYWJsZS5sZW5ndGgpOworICAgICAgICAgICAgZm9yKGludCBpPTA7aTxhdmFpbGFibGUubGVuZ3RoO2krKykgeworICAgICAgICAgICAgCUxvY2FsZSBsb2MgPSBhdmFpbGFibGVbaV07CisgICAgICAgICAgICAgICAgaWYobG9jLnRvU3RyaW5nKCkuZXF1YWxzKCJyb290IikpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIENvbGxhdG9yIGMgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShsb2MpOworICAgICAgICAgICAgICAgICAgICBEYXRlRm9ybWF0IGZtdCA9IERhdGVGb3JtYXQuZ2V0VGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgbG9jKTsKKyAgICAgICAgICAgICAgICAgICAgZm10LmZvcm1hdChuZXcgRGF0ZSgxMjM0KSk7CisgICAgICAgICAgICAgICAgICAgIGxvY2luZm8gPSBsb2NpbmZvICsgIiAiICsgbG9jLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHNwLnNwaW4obG9jLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IGxvYyBmYWlsOiAiICsgbG9jICsgIiAtICIgKyB0LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ2FwTm9kZSB0dCA9IG91dC5jcmVhdGVUZXh0Tm9kZShsb2NpbmZvLnRyaW0oKSk7CisgICAgICAgICAgICBsb2NzLmFwcGVuZENoaWxkKHR0KTsKKyAgICAgICAgfSBjYXRjaChOb0NsYXNzRGVmRm91bmRFcnJvciBuY2RmKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4ocHJvZysiOiBjb2xsYXRpb246ICIgKyBuY2RmLnRvU3RyaW5nKCkpOworICAgICAgICB9IGNhdGNoKE5vU3VjaE1ldGhvZEVycm9yIG5jZGYpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IGNvbGxhdGlvbjogIiArIG5jZGYudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvY3MuYXBwZW5kQ2hpbGQob3V0LmNyZWF0ZUNvbW1lbnQoIk5vdGU6IEphdmEgbG9jYWxlcyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyB0aGFuIElDVS4iKSk7CisgICAgICAgIAorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRGb3JtYXR0aW5nKENhcEVsZW1lbnQgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIENhcEVsZW1lbnQgbG9jcyA9IGFkZENhcGFiaWxpdHkob3V0LCBjYXBhYmlsaXRpZXMsIENhcFNjYW4uRk9STUFUVElORyk7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICBMb2NhbGUgYXZhaWxhYmxlW10gPSBMb2NhbGUuZ2V0QXZhaWxhYmxlTG9jYWxlcygpOworICAgICAgICBsb2NzLnNldEF0dHJpYnV0ZSgidG90YWwiLCBuZXcgSW50ZWdlcihhdmFpbGFibGUubGVuZ3RoKS50b1N0cmluZygpKTsKKyAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgbG9jaW5mbyA9ICIiOworICAgICAgICAgICAgCisgICAgICAgICAgICBTcGlubmVyIHNwID0gbmV3IFNwaW5uZXIobG9jcy5nZXROb2RlTmFtZSgpLGF2YWlsYWJsZS5sZW5ndGgpOworICAgICAgICAgICAgZm9yKGludCBpPTA7aTxhdmFpbGFibGUubGVuZ3RoO2krKykgeworICAgICAgICAgICAgCUxvY2FsZSBsb2MgPSBhdmFpbGFibGVbaV07CisgICAgICAgICAgICAgICAgaWYobG9jLnRvU3RyaW5nKCkuZXF1YWxzKCJyb290IikpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIERhdGVGb3JtYXQgZm10ID0gRGF0ZUZvcm1hdC5nZXRUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5GVUxMLCBsb2MpOworICAgICAgICAgICAgICAgICAgICBmbXQuZm9ybWF0KG5ldyBEYXRlKDEyMzQpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jaW5mbyA9IGxvY2luZm8gKyAiICIgKyBsb2MudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgc3Auc3Bpbihsb2MudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHByb2crIjogbG9jIGZhaWw6ICIgKyBsb2MgKyAiIC0gIiArIHQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBDYXBOb2RlIHR0ID0gb3V0LmNyZWF0ZVRleHROb2RlKGxvY2luZm8udHJpbSgpKTsKKyAgICAgICAgICAgIGxvY3MuYXBwZW5kQ2hpbGQodHQpOworICAgICAgICB9IGNhdGNoKE5vQ2xhc3NEZWZGb3VuZEVycm9yIG5jZGYpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IGxvY2FsZXM6ICIgKyBuY2RmLnRvU3RyaW5nKCkpOworICAgICAgICB9IGNhdGNoKE5vU3VjaE1ldGhvZEVycm9yIG5jZGYpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihwcm9nKyI6IGxvY2FsZXM6ICIgKyBuY2RmLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsb2NzLmFwcGVuZENoaWxkKG91dC5jcmVhdGVDb21tZW50KCJOb3RlOiBKYXZhIGxvY2FsZXMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgdGhhbiBJQ1UuIikpOworICAgICAgICAKKyAgICB9CisKKyAgICAvKiAobm9uLUphdmFkb2MpCisgICAgICogQHNlZSBjb20uaWJtLmljdS5kZXYuc2Nhbi5DYXBTY2FuI2dldFByb2R1Y3QoKQorICAgICAqLworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvZHVjdCgpIHsKKyAgICAgICAgcmV0dXJuICJqYXZhIjsKKyAgICB9CisKKyAgICAvKiAobm9uLUphdmFkb2MpCisgICAgICogQHNlZSBjb20uaWJtLmljdS5kZXYuc2Nhbi5DYXBTY2FuI2dldFJlbGVhc2UoKQorICAgICAqLworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0UmVsZWFzZSgpIHsKKyAgICAgICAgU3RyaW5nIHZlciA9ICBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpOworICAgICAgICBpbnQgdSA9IHZlci5pbmRleE9mKCdfJyk7CisgICAgICAgIGlmKHU+MCkgeworICAgICAgICAJdmVyID0gdmVyLnN1YnN0cmluZygwLHUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2ZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIGFyZ3MKKyAgICAgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBuZXcgU2NhbkphdmEoKS5ydW5NYWluKGFyZ3MpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9pY3U0anNjYW4vc3JjL2NvbS9pYm0vaWN1L2Rldi9zY2FuL1NpbXBsZVNjYW4uamF2YSBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TaW1wbGVTY2FuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0ZDc0MgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TaW1wbGVTY2FuLmphdmEKQEAgLTAsMCArMSwxMjYgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5zY2FuOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CisKK2ltcG9ydCBvcmcudW5pY29kZS5jbGRyLnV0aWwuTERNTFV0aWxpdGllczsKKworaW1wb3J0IGNvbS5pYm0uaWN1LmRldi5tZXRhLkljdUluZm87CitpbXBvcnQgY29tLmlibS5pY3UuZGV2Lm1ldGEuWE1MVXRpbDsKK2ltcG9ydCBjb20uaWJtLmljdS51dGlsLlZlcnNpb25JbmZvOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2ltcGxlU2NhbiB7CisKKyAgICAvKiogQ2FwYWJpbGl0aWVzIHN0cmluZyAqKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRUSU5HID0gImZvcm1hdHRpbmciOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTExBVElPTiA9ICJjb2xsYXRpb24iOworCisgICAgLyoqCisgICAgICogQHBhcmFtIGFyZ3MKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24geworICAgICAKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIjICIrU2ltcGxlU2Nhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkrIjogVGhpcyBpcyBqdXN0IHRoZSBiYXNlIGNsYXNzLiBVc2UgYSBzdWJjbGFzcy4iKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMSk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIFN0cmluZyBwcm9nOworCisgICAgcHJvdGVjdGVkIENhcEVsZW1lbnQgYWRkQ2FwYWJpbGl0eShDYXBEb2N1bWVudCBvdXQsIENhcEVsZW1lbnQgY2FwYWJpbGl0aWVzLCBTdHJpbmcgbmFtZSkgeworICAgICAgICByZXR1cm4gYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgbmFtZSwgKFN0cmluZyludWxsKTsKKyAgICB9CisgICAgcHJvdGVjdGVkIENhcEVsZW1lbnQgYWRkQ2FwYWJpbGl0eShDYXBEb2N1bWVudCBvdXQsIENhcEVsZW1lbnQgY2FwYWJpbGl0aWVzLCBTdHJpbmcgbmFtZSwKKyAgICAgICAgICAgIFN0cmluZyB2ZXJzaW9uKSB7CisgICAgCisgICAgICAgIENhcEVsZW1lbnQgZSA9IG91dC5jcmVhdGVDYXBFbGVtZW50KEljdUluZm8uRkVBVFVSRSk7CisgICAgICAgIGUuc2V0QXR0cmlidXRlKEljdUluZm8uVFlQRSxuYW1lLnRyaW0oKSk7CisgICAgICAgIGlmKHZlcnNpb24hPW51bGwpIHsKKyAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKEljdUluZm8uVkVSU0lPTix2ZXJzaW9uLnRyaW0oKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FwYWJpbGl0aWVzLmFwcGVuZENoaWxkKGUpOworICAgICAgICByZXR1cm4gZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgQ2FwRWxlbWVudCBhZGRDYXBhYmlsaXR5KENhcERvY3VtZW50IG91dCwgQ2FwRWxlbWVudCBjYXBhYmlsaXRpZXMsIFN0cmluZyBuYW1lLAorICAgICAgICAgICAgVmVyc2lvbkluZm8gdmVyc2lvbikgeworICAgICAgICByZXR1cm4gYWRkQ2FwYWJpbGl0eShvdXQsIGNhcGFiaWxpdGllcywgbmFtZSwgSWN1SW5mby52ZXJzaW9uSW5mb1RvU2hvcnRTdHJpbmcodmVyc2lvbikpOworICAgIH0KKworICAgIHByb3RlY3RlZCBTaW1wbGVTY2FuKFN0cmluZyBwcm9nKSB7CisgICAgICAgIHRoaXMucHJvZyA9IHByb2c7CisgICAgfQorICAgIAorICAgIENhcERvY3VtZW50IG91dDsKKyAgICAKKyAgICBwcm90ZWN0ZWQgQ2FwRWxlbWVudCBjcmVhdGVQcm9kdWN0KFN0cmluZyBwcm9kdWN0TmFtZSkgeworICAgICAgICBDYXBFbGVtZW50IGJhc2UgPSBvdXQuY3JlYXRlQ2FwRWxlbWVudChJY3VJbmZvLklDVV9JTkZPKTsKKyAgICAgICAgb3V0LmFwcGVuZENoaWxkKGJhc2UpOworICAgICAgICAKKyAgICAgICAgQ2FwRWxlbWVudCBwcm9kdWN0cyA9IG91dC5jcmVhdGVDYXBFbGVtZW50KEljdUluZm8uSUNVX1BST0RVQ1RTKTsKKyAgICAgICAgYmFzZS5hcHBlbmRDaGlsZChwcm9kdWN0cyk7CisgICAgICAgIAorICAgICAgICBDYXBFbGVtZW50IHByb2R1Y3QgPSBvdXQuY3JlYXRlQ2FwRWxlbWVudChJY3VJbmZvLklDVV9QUk9EVUNUKTsKKyAgICAgICAgcHJvZHVjdC5zZXRBdHRyaWJ1dGUoSWN1SW5mby5UWVBFLCBwcm9kdWN0TmFtZSk7CisgICAgICAgIHByb2R1Y3RzLmFwcGVuZENoaWxkKHByb2R1Y3QpOworICAgICAgICByZXR1cm4gcHJvZHVjdDsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIENhcEVsZW1lbnQgY3JlYXRlUmVsZWFzZShDYXBFbGVtZW50IHByb2R1Y3QsIFN0cmluZyB2ZXJzaW9uKSB7CisgICAgICAgIENhcEVsZW1lbnQgcmVsZWFzZXMgPSBvdXQuY3JlYXRlQ2FwRWxlbWVudChJY3VJbmZvLlJFTEVBU0VTKTsKKyAgICAgICAgcHJvZHVjdC5hcHBlbmRDaGlsZChyZWxlYXNlcyk7CisgICAgICAgIAorICAgICAgICBDYXBFbGVtZW50IHJlbGVhc2UgPSBvdXQuY3JlYXRlQ2FwRWxlbWVudChJY3VJbmZvLlJFTEVBU0UpOworICAgICAgICByZWxlYXNlLnNldEF0dHJpYnV0ZShJY3VJbmZvLlZFUlNJT04sIHZlcnNpb24pOworICAgICAgICByZWxlYXNlcy5hcHBlbmRDaGlsZChyZWxlYXNlKTsKKyAgICAgICAgcmV0dXJuIHJlbGVhc2U7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHJ1bk1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgCisgICAgICAgIAorICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiMgIitwcm9nKyI6IHN0YXJ0dXAuIik7CisgICAgb3V0ID0gQ2FwRG9jdW1lbnQubmV3Q2FwRG9jdW1lbnQoKTsKKyAgICAKKyAgICBDYXBFbGVtZW50IHByb2R1Y3QgPSBjcmVhdGVQcm9kdWN0KGdldFByb2R1Y3QoKSk7CisgICAgCisgICAgQ2FwRWxlbWVudCByZWxlYXNlID0gY3JlYXRlUmVsZWFzZShwcm9kdWN0LCBnZXRSZWxlYXNlKCkpOworICAgIAorICAgIAorICAgIENhcEVsZW1lbnQgY2FwYWJpbGl0aWVzID0gb3V0LmNyZWF0ZUNhcEVsZW1lbnQoSWN1SW5mby5DQVBBQklMSVRJRVMpOworICAgIHJlbGVhc2UuYXBwZW5kQ2hpbGQoY2FwYWJpbGl0aWVzKTsKKyAgICAKKyAgICBhZGRDYXBhYmlsaXRpZXNUbyhjYXBhYmlsaXRpZXMpOworCisKKyAgICAvLyB3cml0ZSBvdXQKKyAgICBPdXRwdXRTdHJlYW0gb3V0c3RyID0gbnVsbDsKKyAgICBvdXRzdHIgPSBTeXN0ZW0ub3V0OworLy8gICAgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7CisvLyAgICBpZihvdXRmaWxlIT1udWxsKSB7CisvLyAgICAgICAgZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0ZmlsZSk7CisvLyAgICAgICAgb3V0ID0gZm9zOworLy8gICAgICAgIGlmKHZlcmJvc2UpIFN5c3RlbS5lcnIucHJpbnRsbigiIyBXcml0ZSA8IitvdXRmaWxlKyI+Iik7CisvLyAgICB9IGVsc2UgeworLy8gICAgICAgIG91dCA9IFN5c3RlbS5vdXQ7CisvLyAgICAgICAgaWYodmVyYm9zZSkgU3lzdGVtLmVyci5wcmludGxuKCIjIFdyaXRlIDxzdGRvdXQ+Iik7CisvLyAgICB9CisvLyAgICB0cnkgeworICAgICBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlciB3cml0ZXIgPSBuZXcgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXIoCisgICAgICAgICAgICAgb3V0c3RyKTsKKyAgICAgU3RyaW5nIGNvcHkgPSAiIjsKKyAgICAgaWYodHJ1ZSkgY29weSA9ICgiPCEtLSBDb3B5cmlnaHQgKGMpICIrQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXQoQ2FsZW5kYXIuWUVBUikrIiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gLS0+XG4iKTsKKyAgICAgQ2FwRG9jdW1lbnQucHJpbnRET01UcmVlKG91dCwgbmV3IFByaW50V3JpdGVyKHdyaXRlciksY29weSsiXG48IURPQ1RZUEUgaWN1SW5mbyBTWVNURU0gXCJodHRwOi8vaWN1LXByb2plY3Qub3JnL2R0ZC9pY3VtZXRhLmR0ZFwiPlxuIixudWxsKTsgLy8KKyAgICAgd3JpdGVyLmZsdXNoKCk7CisgICAgfQorICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvZHVjdCgpOworICAgIAorICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UmVsZWFzZSgpOworICAgIAorICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGFkZENhcGFiaWxpdGllc1RvKENhcEVsZW1lbnQgY2FwYWJpbGl0aWVzKTsKK30KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovaWN1NGpzY2FuL3NyYy9jb20vaWJtL2ljdS9kZXYvc2Nhbi9TcGlubmVyLmphdmEgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU3Bpbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL2ljdTRqc2Nhbi9zcmMvY29tL2libS9pY3UvZGV2L3NjYW4vU3Bpbm5lci5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAqLworCitwYWNrYWdlIGNvbS5pYm0uaWN1LmRldi5zY2FuOworCitjbGFzcyBTcGlubmVyIHsKKyAgICBTdHJpbmcgc3RyID0gIiI7CisgICAgaW50IG4gPSAwOworICAgIGludCBtYXggPSAtMTsKKyAgICBTcGlubmVyKCkgeworICAgIH0KKyAgICBTcGlubmVyKFN0cmluZyBzdHIpIHsKKyAgICAgICAgdGhpcy5zdHIgPSBzdHI7CisgICAgfQorICAgIFNwaW5uZXIoU3RyaW5nIHN0ciwgaW50IG1heCkgeworICAgICAgICB0aGlzLnN0ciA9IHN0cjsKKyAgICAgICAgdGhpcy5tYXggPSBtYXg7CisgICAgfQorICAgIHZvaWQgc3BpbigpIHsKKyAgICAgICAgc3BpbihudWxsKTsKKyAgICB9CisgICAgdm9pZCBzcGluKFN0cmluZyB3aGF0KSB7CisgICAgICAgIC8vIFRPRE86IHRpbWUgYmFzZWQuCisgICAgICAgIG4rKzsKKyAgICAgICAgaWYoKG4lMjUpPT0wKSB7CisgICAgICAgICAgICBTdHJpbmcgbnN0cj0iIjsKKyAgICAgICAgICAgIGlmKG1heD4wKSB7CisgICAgICAgICAgICAgICAgbnN0cj0iLyIrbWF4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIjIitzdHIrIi4uIituK25zdHIrIiAiKyh3aGF0IT1udWxsP3doYXQ6IiIpKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL01ha2VmaWxlIGIvbXVsdGkvcHJvai9wcm92aWRlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjczYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9NYWtlZmlsZQpAQCAtMCwwICsxLDM1OCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKK2FsbDogZ2x1cmVucyBpaSBwbHVncyB0ZXN0cHJvZworCisjIGV4dHJhIGZpbGVzIHRoYXQgbmVlZCBnZW5lcmF0aW9uLgorUExVR19FWFRSQV9ERVBTPQorVU5BTUU9JChzaGVsbCB1bmFtZSkKK0RPVD0uLi8uLi9jCitTT0JKPWFvCitpZmVxICgkKFVOQU1FKSxMaW51eCkKK0xJQlBBVEhfVkFSPUxEX0xJQlJBUllfUEFUSAorUExVR19FWFRSQV9MREZMQUdTPS1mUElDCitQQkxEX0VYVFJBX0ZMQUdTPS1mUElDCitHTFVFX0VYVFJBX0NGTEFHUz0gLWZQSUMKK1BMVUdMSUJfU089c28KK2Vsc2UKK2lmZXEgKCQoVU5BTUUpLERhcndpbikKK0xJQlBBVEhfVkFSPURZTERfTElCUkFSWV9QQVRICitQTFVHX0VYVFJBX0xERkxBR1M9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCAkKEdMVUVfRVhQT1JUKSAtZHluYW1pY2xpYiAtZHluYW1pYworUExVR19FWFRSQV9ERVBTKz0kKEdMVUVfRVhQT1JUKQorUExVR0xJQl9TTz1keWxpYgorZWxzZQoraWZlcSAoJChVTkFNRSksQUlYKQorTElCUEFUSF9WQVI9TElCUEFUSAorI1BMVUdfRVhUUkFfTERGTEFHUz0tZXhwb3J0ZWRfc3ltYm9sc19saXN0ICQoR0xVRV9FWFBPUlQpIC1keW5hbWljbGliIC1keW5hbWljCitQTFVHX0VYVFJBX0RFUFMrPSQoR0xVRV9FWFBPUlQpCitQTFVHTElCX1NPPWEKK1NPQko9bworZWxzZQorJCh3YXJuaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopCiskKHdhcm5pbmcgdGhpcyBzY3JpcHQgbWF5IG5vdCBrbm93IGhvdyB0byBoYW5kbGUgeW91ciAkKFVOQU1FKSBzeXN0ZW0pCitlbmRpZgorZW5kaWYKK2VuZGlmCisKK1NVQkhFQUQ9IioqKiBJQ1UiCisKK3NyY2Rpcj0kKHNoZWxsIHB3ZCkKKworUFJPVklERVI9cHJvdmlkZXIKK0xJQlBST1ZJREVSPWxpYiQoUFJPVklERVIpLmEKKworI2xpYnM6ICQoSUNVX1RBUkJBTExTX1ZFUlM6JT0kKE9VVCkvJS9saWIvJChMSUJQUk9WSURFUikpCisKK1BMVUdMSUJfSU5TVD0kKENfSU5TKS9yJChQTFVHTElCKQorUExVR0xJQl9JQ1VfQ09ORklHPSQoUExVR0xJQl9JTlNUKS9iaW4vaWN1LWNvbmZpZworI1BMVUdMSUJfU089JChzaGVsbCAkKFBMVUdMSUJfSUNVX0NPTkZJRykgLS1zbyAyPi9kZXYvbnVsbCApCitQTFVHTElCX05BTUU9bGliaWN1cHJvdi4kKFBMVUdMSUJfTUFKKS4kKFBMVUdMSUJfU08pCisjUExVR0xJQl9NQUo9JChlY2hvICQoUExVR0xJQikgfCBjdXQgLWRfIC1mLTEgfCB0ciAtZCBfICkKKyNHTE9VVF9JQ1U9JChJQ1VfVEFSQkFMTFNfVkVSUzolPSQoR0xPVVQpLyUvJChPSykpCitQTFVHTElCX0FWQUlMQUJMRT0kKHNoZWxsIGVjaG8gJChQUk9WSURFUl9BVkFJTEFCTEUpIHwgdHIgJy4nICdfJykKK1BMVUdMSUJfQVZBSUxBQkxFX0RBVEE9JChQTFVHTElCX0FWQUlMQUJMRTolPSQoQlVJTEQpLyUvZGF0YS9vdXQvdG1wLyoubykKK1BMVUdMSUJfQVZBSUxBQkxFX1NUQVRJQ1M9JChQTFVHTElCX0FWQUlMQUJMRTolPSQoQlVJTEQpLyUvW2NpXSovKi4kKFNPQkopKQorUExVR0xJQl9PVVRMSUJTPSQoUExVR0xJQjolPSQoT1VUKS8lL2xpYi8kKFBMVUdMSUJfTkFNRSkpCisKKworCisjIyBjb25maWd1cmF0aW9uCisjIEFic29sdXRlIHBhdGggdG8gdGhpcyBkaXIuIAorIyBkaXIgaG9sZGluZyBJQ1VzIHRvIGJlIGJ1aWx0CitNVUxUSUNVX1JPT1Q9Li4vLi4KK2luY2x1ZGUgJChNVUxUSUNVX1JPT1QpL2MvTWFrZWZpbGUtYy5pbmMKK0lDVV9DT05GSUc9aWN1LWNvbmZpZy1ub3Nhbml0eQorSUNVX0NPTkZJR19PUklHPWljdS1jb25maWcKKworIyBzdWJkaXJzLi4uCisjIHByZWZpeCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIG5vbi1wcm92aWRlciBidWlsZHMKK1BfUFJFRklYPXAKK0JVSUxEPSQoTV9UTVApLyQoUF9QUkVGSVgpYmxkCitJTlNUPSQoTV9UTVApLyQoUF9QUkVGSVgpaW5zCitTUkM9JChNX1RNUCkvJChQX1BSRUZJWClzcmMKK09VVD0kKFRPUCkvb3V0CitTT1VSQ0U9JChTX1NSQ0RJUikKK0dMVUU9Z2x1ZQorR0xVRV9FWFBPUlQ9JChHTFVFKS9leHBvcnQudHh0CitHTE9VVD0kKE1fVE1QKS8kKFBfUFJFRklYKWdsb3V0CisjIGhlYWRlciBsb2NhdGlvbnMKK0lOQ0dMVUU9JChUT1ApLyQoR0xVRSkvaW5jbHVkZQorIyByZWxhdGl2ZSBwYXRoIHRvIGljdWdsdWUgd2l0aGluIGdsb3V0CitHTFVSRU49Z2x1cmVuL2luY2x1ZGUvaWN1Z2x1ZQorIyByZWxhdGl2ZSBwYXRoIHRvIGdsdXJlbi5oCitHTFVSRU5fSD0kKEdMVVJFTikvZ2x1cmVuLmgKKyMgU3BlY2lhbCAnY29uZmlndXJlJyBjYWxsZXIKK1NVUEVSQ09ORj0kKFRPUCkvJChNVUxUSUNVX1JPT1QpL2Mvc3VwZXJjb25mLnNoCisjIG9wdGlvbnMgdG8gY29tcGlsYXRpb24gKHN1Y2ggYXMsIGRlYnVnKQorWE9QVFM9JChFWFRSQV9DT01QSUxFX09QVFMpCitPSz1vaworTU9QVFM9CisKKyMgZGlyZWN0b3JpZXMgdGhhdCBuZWVkIHRvIGJlIGJ1aWx0CitBTExESVJTPSQoSU5TVCkgJChCVUlMRCkgJChTUkMpICQoR0xPVVQpICQoT1VUKSAkKEdMT1VUKS8kKFBMVUdMSUIpICQoT1VUKS8kKFBMVUdMSUIpL2JpbgorIyBUaGUgJ29rJyBmbGFnIGZpbGUgZm9yIGluc3RhbGxhdGlvbnMKK0lOU1RfSUNVPSQoUExVR0xJQl9BVkFJTEFCTEU6JT0kKElOU1QpLyUvJChPSykpCitCVUlMRF9JQ1U9JChQTFVHTElCX0FWQUlMQUJMRTolPSQoQlVJTEQpLyUvJChPSykpCisjIHRoaXMgaGFzIHRvIGRvIHdpdGggdGhlIHBsdWdsaWIKK0dMT1VUX0lDVT0kKFBMVUdMSUI6JT0kKEdMT1VUKS8lL29iai0kKE9LKSkKKyNTUkNfSUNVPSQoSUNVX1RBUkJBTExTX1ZFUlM6JT0kKFNSQykvJS8kKE9LKSkKKyMgZ2x1cmVuLmggZmlsZXMgZm9yIGVhY2ggdmVyc2lvbgorR0xVUkVOX0lDVT0kKFBMVUdMSUJfQVZBSUxBQkxFOiU9JChCVUlMRCkvJS8kKEdMVVJFTl9IKSkKKyM/CitDT05GSUdVUkVfQ01EPQorIyBPcHRpb25zIHBhc3NlZCB0byBjb25maWd1cmUKK0NPTkZJR1VSRV9PUFRTPS0tZW5hYmxlLXN0YXRpYyAtLWRpc2FibGUtc2hhcmVkIC0td2l0aC1kYXRhLXBhY2thZ2luZz1zdGF0aWMgLS1kaXNhYmxlLWV4dHJhcyAtLWRpc2FibGUtaWN1aW8gLS1kaXNhYmxlLWxheW91dCAtLWRpc2FibGUtdGVzdHMgLS1kaXNhYmxlLXNhbXBsZXMgICQoRVhUUkFfQ09ORklHVVJFX09QVFMpIAorIyBhZGRpdGlvbmFsIG9wdGlvbnMgcGFzc2VkIHRvIG1ha2UKK01BS0VfWFRSQV9PUFRTPSJQS0dEQVRBX01PREU9c3RhdGljIgorIyBhZGRpdGlvbmFsIG9wdGlvbnMgcGFzc2VkIHRvIG1ha2UgaW5zdGFsbAorTUFLRV9JTlNUQUxMX1hUUkFfT1BUUz0kKE1BS0VfWFRSQV9PUFRTKQorCisjIE11bmdlZCBzb3VyY2UgbmFtZXM6IGxpc3Qgb2YgQysrLCBPIGV0YyBmaWxlcyBmb3IgRnJvbnRlbmQKK1BBUlRTVUZGPV9mZQorR0xfRkVfQ1hYPSQobm90ZGlyICQod2lsZGNhcmQgJChHTFVFKS8qJChQQVJUU1VGRikuY3BwKSkKK0dMX0ZFX0ZJTEVTPSQoR0xfRkVfQ1hYOiUuY3BwPSQoR0xVRSkvJS5jcHApCitHTF9GRV9PPSQoR0xfRkVfQ1BQOiUuY3BwPSUubykKK0dMX1BBUlRTPSQoR0xfRkVfQ1hYOiUkKFBBUlRTVUZGKS5jcHA9JSkKKyMgQyBmbGFncyB1c2VkIGluIEdsdWUgY29tcGlsYXRpb24KK0dMVUVfQ0ZMQUdTPS1JJChJTkNHTFVFKSAkKEdMVUVfRVhUUkFfQ0ZMQUdTKQorCisjIGljdS1jb25maWcgc3dpdGNoZXMgZm9yIGNvbXBpbGluZzogQyBhbmQgQysrCitJQ1VfQ09ORklHX0NPTU1PTj0tLWNwcGZsYWdzCisjIGljdS1jb25maWcgc3dpdGNoZXMgZm9yIEMKK0lDVV9DT05GSUdfQ0M9LS1jYyAkKElDVV9DT05GSUdfQ09NTU9OKSAtLWNmbGFncyAKKyMgaWN1LWNvbmZpZyBzd2l0Y2hlcyBmb3IgQysrCitJQ1VfQ09ORklHX0NYWD0tLWN4eCAkKElDVV9DT05GSUdfQ09NTU9OKSAtLWN4eGZsYWdzCisKKyMgc2lnaCwgaW5jbHVkZSBjb21tb24uCitQTFVHX0VYVFJBX0ZMQUdTPS1JJChCVUlMRCkvJChQTFVHTElCKS9jb21tb24gLUkkKE1fVE1QKS9idWlsZC9yJChQTFVHTElCKS9pY3Uvc291cmNlL2NvbW1vbgorCitpbmNsdWRlIE1ha2VmaWxlLmxvY2FsCisKKworCisjIFVzYWdlOiAgJChjYWxsIFNJTEVOVF9DT01QSUxFLGxvZ2ZpbGUsY21kKQoraWZuZGVmIFZFUkJPU0UKKwlMT0dfQ09NUElMRT1lY2hvIGJ1aWxkIHdpdGggVkVSQk9TRT0xIHRvIHVuaGlkZSBjb21waWxlIDsgICggKCQoMikgMj4mMSkgPiAkKDEpIHx8IChlY2hvICJDb21waWxlIGZhaWxlZCwgc2VlIGxvZ2ZpbGUgaW4gJCgxKSBmb3IgZGV0YWlscy4iIDtleGl0IDEpKQorZWxzZQorCUxPR19DT01QSUxFPSQoMikgMj4mMSB8IHRlZSAkKDEpCitlbmRpZgorCitFQ0hPX0NPTVBJTEU9ZWNobyAiXCMgJHtzdWJzdCAiLFwiLCQoMSl9IiA7ICggJCgxKSB8fCAoICBleGl0IDEpICkKKworUExVR0xJQj0kKHNoZWxsIGVjaG8gJChQUk9WSURFUl9UQVJHRVQpICB8IHRyICcuJyAnXycgKQorUExVR0xJQl9NQUo9JChzaGVsbCAgLi9pY3Uyc3ltdmVyLnNoICQoUExVR0xJQikpCisKKyMjIEBidWlsZCBBbGwgaW5zdGFsbGVkIElDVXMKK2lpOiAkKEdMT1VUX0lDVSkKKworIyBEb24ndCBkZWxldGUgdGhlc2UgZmlsZXMKKy5QUkVDSU9VUzogKElOU1RfSUNVKSAkKEJVSUxEX0lDVSkgJChTUkNfSUNVKSAkKElDVV9UQVJCQUxMU19WRVJTOiU9JChCVUlMRCkvJS9jb25maWcuc3RhdHVzKSAkKElDVV9UQVJCQUxMU19WRVJTOiU9JChHTE9VVCkvJS9vYmotJChPSykpICAkKElDVV9UQVJCQUxMU19WRVJTOiU9JChCVUlMRCkvJS9jb25maWcvJChJQ1VfQ09ORklHKSkgJChQTFVHTElCX0lDVV9DT05GSUcpCisKKyMgY2xlYW51cAorY2xlYW46CisJLXJtIC1yZiAkKEFMTERJUlMpCisJLSQoTUFLRSkgLUMgLi4vLi4gY2xlYW4KKworIyBjcmVhdGUgYWxsIGVtcHR5IHdvcmsgZGlycworJChBTExESVJTKToKKwktbWtkaXIgLXAgJChAKQorCisjIEJ1aWxkIHIkKFBMVUdMSUIpIGZyb20gLi4vLi4vYworJChQTFVHTElCX0lDVV9DT05GSUcpOgorCUBlY2hvICIkKFNVQkhFQUQpICIkKFBMVUdMSUIpICIocGx1Z2luKSBidWlsZGluZy4uLiIKKwkkKGNhbGwgTE9HX0NPTVBJTEUsLi4vLi4vYy9yaWN1cyQoUExVR0xJQikubG9nLCQoTUFLRSkgTUFLRV9PUFRTPSQoTUFLRV9PUFRTKSBYVFJBX1JJQ1VfQ1BQRkxBR1M9JChYVFJBX1JJQ1VfQ1BQRkxBR1MpIC1DIC4uLy4uL2MgSUNVVkVSUz0kKFBMVUdMSUIpIHJpY3VzKQorCisjIGJ1aWxkIHRoZSBnbHVlIG9iamVjdHMgZm9yIFRBUkdFVAorIyB1c2VkIHRvIGJlICUvKiBpbnN0ZWFkIG9mICQoUExVR0xJQikgLSBub3csIHdpcmUgaXQgZG93biB0byBwbHVnbGliLgorJChHTE9VVCkvJChQTFVHTElCKS9vYmotJChPSyk6ICQoR0xPVVQpIGdsdXJlbnMgICQoUExVR0xJQl9JQ1VfQ09ORklHKSAkKEdMX0ZFX0ZJTEVTKSAkKEFMTERJUlMpCisJQGVjaG8gJChTVUJIRUFEKSAkKFBMVUdMSUIpICIocGx1Z2luKSBidWlsZGluZyBnbHVlLi4iCisjCSQoc2hlbGwgJChCVUlMRCkvJChQTFVHTElCKS9jb25maWcvJChJQ1VfQ09ORklHKSAkKElDVV9DT05GSUdfQ0MpKSAkKEdMVUVfQ0ZMQUdTKSAtYyAtRElDVUdMVUVfVkVSPSQoUExVR0xJQikgLW8gJChHTE9VVCkvJChQTFVHTElCKS9nbF9iZV9jXyQoUExVR0xJQikubyAkKEdMX0JFX0M6JS5jPSQoR0xVRSkvJS5jKQorIwkkKHNoZWxsICQoQlVJTEQpLyQoUExVR0xJQikvY29uZmlnLyQoSUNVX0NPTkZJRykgJChJQ1VfQ09ORklHX0NYWCkpICQoR0xVRV9DRkxBR1MpIC1jIC1ESUNVR0xVRV9WRVI9JChQTFVHTElCKSAtbyAkKEdMT1VUKS8kKFBMVUdMSUIpL2dsX2JlX2N4eF8kKFBMVUdMSUIpLm8gJChHTF9CRV9DWFg6JS5jcHA9JChHTFVFKS8lLmNwcCkKKwktcm0gLXJmICQoR0xPVVQpLyQoUExVR0xJQikvaW5jbHVkZQorCW1rZGlyIC1wICQoR0xPVVQpLyQoUExVR0xJQikvaW5jbHVkZS9pY3VnbHVlL2luY2x1ZGUKKyMgZm9yIGVhY2ggdmVyc2lvbi4uICBidWlsZCBhbGwgT1RIRVIgRkUgZmlsZXMKKyMgVE9ETzogY2hlY2sgaXMgdW5uZWNlc3NhcnksIG5vdCBwZXJtaXR0ZWQuCisjIFRPRE86IGNoYW5nZSB0byBkZXBlbmQgaW5zdGVhZCBvZiBmb3IgbGlzdC4gCisJQGZvciB2ZXIgaW4gJChQTFVHTElCX0FWQUlMQUJMRSkgOyBcCisJZG8gXAorCQllY2hvICIqJChTVUJIRUFEKSIgJCR2ZXIgIihwcm92aWRlcikiIGZvciAgJChQTFVHTElCKSAiKHBsdWdpbikiIDsgXAorCQlpZiBbICEgIiQkdmVyIiA9ICIkKFBMVUdMSUIpIiBdOyBcCisJCXRoZW4gXAorCQkJZm9yIHBhcnQgaW4gJChHTF9QQVJUUykgOyBcCisJCQlkbyBcCisJCQkJZWNobyAiKiokKFNVQkhFQUQpIiAkJHZlciAiKHByb3ZpZGVyKSBiYWNrZW5kOiAtLS0tICIgIiQkcGFydCIgIi0tLS0iICA7IFwKKwkJCQkkKGNhbGwgRUNIT19DT01QSUxFLCQoc2hlbGwgJChQTFVHTElCX0lDVV9DT05GSUcpIC0tbm92ZXJpZnkgJChJQ1VfQ09ORklHX0NYWCkpICQoR0xVRV9DRkxBR1MpIC1jIC1JJChUT1ApLyQoQlVJTEQpLyQkdmVyL2dsdXJlbi9pbmNsdWRlIC1ESUNVR0xVRV9WRVI9JCR2ZXIgLURJQ1VHTFVFX1ZFUl9TVFI9XCIkJHZlclwiICItREdMVUVfU1lNKHgpPWdsdWUgIyMgeCAjIyAkJHZlciIgLW8gJChHTE9VVCkvJChQTFVHTElCKS8kJHtwYXJ0fV8kJHt2ZXJ9X2Zvcl8kKFBMVUdMSUIpLm8gJChHTFVFKS8kJHtwYXJ0fSQoUEFSVFNVRkYpLmNwcCAkKFhPUFRTKSApIHx8IGV4aXQgMSA7IFwKKwkJCWRvbmUgOyBcCisJCQllY2hvICIgR0xVRV9WRVIoICQkdmVyICkgIiA+PiAkKEdMT1VUKS8kKFBMVUdMSUIpL2luY2x1ZGUvaWN1Z2x1ZS9nbHZlci5oOyBcCisJCWZpIFwKKwlkb25lCisjIGJ1aWxkICd0aGlzIHZlcnNpb24nIEZFIGZpbGVzCisJQGZvciBwYXJ0IGluICQoR0xfUEFSVFMpIDsgXAorCWRvIFwKKwkJZWNobyAiSUNVIiAkKFBMVUdMSUIpICIocGx1Z2luKSBidWlsZGluZyBwbHVnaW4gZm9yICAtLS0tLS0tICQkcGFydCAtLS0tLSIgOyBcCisJCSQoY2FsbCBFQ0hPX0NPTVBJTEUsJChzaGVsbCAkKFBMVUdMSUJfSUNVX0NPTkZJRykgLS1ub3ZlcmlmeSAkKElDVV9DT05GSUdfQ1hYKSkgJChHTFVFX0NGTEFHUykgLUkkKEdMT1VUKS8kKFBMVUdMSUIpL2luY2x1ZGUgLWMgLW8gJChHTE9VVCkvJChQTFVHTElCKS8kJHtwYXJ0fV8kKFBMVUdMSUIpLm8gJChHTFVFKS8kJHtwYXJ0fSQoUEFSVFNVRkYpLmNwcCAkKFhPUFRTKSAkKFBMVUdfRVhUUkFfRkxBR1MpICkgfHwgZXhpdCAxIDsgXAorCWRvbmUKKwl0b3VjaCAkQAorCitwbHVnczogJChQTFVHTElCX09VVExJQlMpICQoT1VUKS8kKFBMVUdMSUJfTUFKOiU9aWN1cGx1Z2lucyUudHh0KQorCitpbnN0YWxsLXBsdWdzOiAkKFBMVUdMSUJfSU5TVCkvbGliLyQoUExVR0xJQl9OQU1FKSAkKFBMVUdMSUJfSU5TVCkvbGliL2ljdS9pY3VwbHVnaW5zJChQTFVHTElCX01BSikudHh0CisJZWNobyAiUGx1Z2lucyBpbnN0YWxsZWQgZm9yIHRlc3RpbmcuIgorCisjVE9ETzogc2hvdWxkIGJlICdpbnN0YWxsJyBub3QgJ2NwJworJChQTFVHTElCX0lOU1QpL2xpYi8kKFBMVUdMSUJfTkFNRSkgJChQTFVHTElCX0lOU1QpL2xpYi9pY3UvaWN1cGx1Z2lucyQoUExVR0xJQl9NQUopLnR4dDogJChQTFVHTElCX09VVExJQlMpCisJY3AgJChQTFVHTElCX09VVExJQlMpICQoUExVR0xJQl9JTlNUKS9saWIKKwllY2hvICIjIEdlbmVyYXRlZC4gIiA+ICQoUExVR0xJQl9JTlNUKS9saWIvaWN1L2ljdXBsdWdpbnMkKFBMVUdMSUJfTUFKKS50eHQKKwlAZm9yIHBhcnQgaW4gJChHTF9QQVJUUykgOyBcCisJZG8gXAorCQllY2hvICIkKFBMVUdMSUJfTkFNRSkJJCR7cGFydH1fcHJvdmlkZXJfcGx1Z2luIiA+PiAkKFBMVUdMSUJfSU5TVCkvbGliL2ljdS9pY3VwbHVnaW5zJChQTFVHTElCX01BSikudHh0IDsgXAorCQllY2hvICIgJCR7cGFydH1fcHJvdmlkZXJfcGx1Z2luIiA7IFwKKwlkb25lCisKKyQoR0xVRV9FWFBPUlQpOiBNYWtlZmlsZSAkKEdMX0ZFX0ZJTEVTKQorCWVjaG8gIiMgR2VuZXJhdGVkIGZvciBpbnN0YWxsYXRpb24uICIgPiAkQAorCUBmb3IgcGFydCBpbiAkKEdMX1BBUlRTKSA7IFwKKwlkbyBcCisJCWVjaG8gIl8kJHtwYXJ0fV9wcm92aWRlcl9wbHVnaW4iID4+ICRAIDsgXAorCQllY2hvICIgXyQke3BhcnR9X3Byb3ZpZGVyX3BsdWdpbiIgOyBcCisJZG9uZQorCiskKE9VVCkvaWN1cGx1Z2lucyQoUExVR0xJQl9NQUopLnR4dDogJChQTFVHTElCX09VVExJQlMpIE1ha2VmaWxlCisJZWNobyAiIyBHZW5lcmF0ZWQgZm9yIHRlc3RpbmcuIiA+ICRACisJQGZvciBwYXJ0IGluICQoR0xfUEFSVFMpIDsgXAorCWRvIFwKKwkJZWNobyAiJChQTFVHTElCX05BTUUpCSQke3BhcnR9X3Byb3ZpZGVyX3BsdWdpbiIgPj4gJEAgOyBcCisJCWVjaG8gIiAkJHtwYXJ0fV9wcm92aWRlcl9wbHVnaW4iIDsgXAorCWRvbmUKKworVEVTVFBST0c9JChHTF9QQVJUUzolPSVkaWZmJChFWEVFWFQpKQorCit0ZXN0cHJvZzogJChQTFVHTElCOiU9JChPVVQpLyUvYmluLyQoVEVTVFBST0cpKSAKKworY2hlY2staWN1MnN5bXZlcjoKKwkuL2NoZWNrLWljdTJzeW12ZXIuc2gKKworZ2VuZXJhdGUtZ2RicmM6CisJZWNobyAiIyBnZW5lcmF0ZWQgYnkgJEAiID4gLmdkYnJjCisJZWNobyAic2V0IGVudmlyb25tZW50IElDVV9QTFVHSU5TPSQoT1VUKSIgPj4gLmdkYnJjCisJZWNobyAic2V0IGVudmlyb25tZW50ICQoTElCUEFUSF9WQVIpPSQoT1VUKS8uLi8kKFBMVUdMSUJfSU5TVCkvbGliOiQoT1VUKS8kKFBMVUdMSUIpL2xpYiIgPj4gLmdkYnJjCisKKworY2hlY2s6IGNoZWNrLWljdTJzeW12ZXIgYWxsIHRlc3Rwcm9nICQoT1VUKS9pY3VwbHVnaW5zJChQTFVHTElCX01BSikudHh0CisJSUNVX1BMVUdJTlM9JChPVVQpICQoTElCUEFUSF9WQVIpPSQoUExVR0xJQl9JTlNUKS9saWI6b3V0LyQoUExVR0xJQikvbGliICQoUExVR0xJQl9JTlNUKS9iaW4vaWN1aW5mbyB8fCAoIGVjaG8gIklDVSBicm9rZW4uIiA7IC9iaW4vZmFsc2UgKQorCUlDVV9QTFVHSU5TPSQoT1VUKSAkKExJQlBBVEhfVkFSKT0kKFBMVUdMSUJfSU5TVCkvbGliOm91dC8kKFBMVUdMSUIpL2xpYiAkKFBMVUdMSUJfSU5TVCkvYmluL2ljdWluZm8gLUwgfHwgKCBlY2hvICJQbHVnaW4gYnJva2VuLiIgOyAvYmluL2ZhbHNlICkKKwlAZm9yIHByb2cgaW4gJChURVNUUFJPRykgOyBcCisJZG8gXAorCQllY2hvICIjIElDVV9QTFVHSU5TPSQoT1VUKSAkKExJQlBBVEhfVkFSKT0kKFBMVUdMSUJfSU5TVCkvbGliOm91dC8kKFBMVUdMSUIpL2xpYiBvdXQvJChQTFVHTElCKS9iaW4vJCR7cHJvZ30iIDsgXAorCQlJQ1VfUExVR0lOUz0kKE9VVCkgJChMSUJQQVRIX1ZBUik9JChQTFVHTElCX0lOU1QpL2xpYjpvdXQvJChQTFVHTElCKS9saWIgb3V0LyQoUExVR0xJQikvYmluLyQke3Byb2d9IHx8ICggZWNobyAiJCR7cHJvZ30gZmFpbGVkLiIgOyBleGl0IDEgKSA7IFwKKwlkb25lCisKK2luc3RhbGwtY2hlY2s6IGluc3RhbGwtcGx1Z3MKKwkkKExJQlBBVEhfVkFSKT0kKFBMVUdMSUJfSU5TVCkvbGliICQoUExVR0xJQl9JTlNUKS9iaW4vaWN1aW5mbyAtTCB8fCAoIGVjaG8gIlBsdWdpbiBicm9rZW4uIiA7IC9iaW4vZmFsc2UgKQorCUBmb3IgcHJvZyBpbiAkKFRFU1RQUk9HKSA7IFwKKwlkbyBcCisJCWVjaG8gIiMgJCR7cHJvZ30iIDsgXAorCQkkKExJQlBBVEhfVkFSKT0kKFBMVUdMSUJfSU5TVCkvbGliIG91dC8kKFBMVUdMSUIpL2Jpbi8kJHtwcm9nfSB8fCAoIGVjaG8gIiQke3Byb2d9IGFnYWluc3QgaW5zdGFsbGVkIGZhaWxlZC4iIDsgZXhpdCAxICkgOyBcCisJZG9uZQorCiskKE9VVCkvJChQTFVHTElCKS9iaW4vJChURVNUUFJPRyk6ICAkKEdMT1VUKS8kKFBMVUdMSUIpL29iai0kKE9LKSAkKE9VVCkvJChQTFVHTElCKS9wcm92aWRlcl92ZXJzaW9uLmggJChBTExESVJTKQorCUBmb3IgcHJvZyBpbiAkKFRFU1RQUk9HKSA7IFwKKwlkbyBcCisJCSR7Y2FsbCBFQ0hPX0NPTVBJTEUsJChzaGVsbCAkKFBMVUdMSUJfSUNVX0NPTkZJRykgLS1jeHggLS1jeHhmbGFncyAtLWNwcGZsYWdzIC0tbGRmbGFncykgLW8gJChPVVQpLyQoUExVR0xJQikvYmluLyQke3Byb2d9IC1JJChPVVQpLyQoUExVR0xJQikgJChURVNUUFJPR19YVFJBX09QVFMpICQoc3JjZGlyKS8kJHtwcm9nfS5jcHB9IHx8IGV4aXQgMSA7IFwKKwlkb25lCisKKyQoT1VUKS8lL2xpYi8kKFBMVUdMSUJfTkFNRSk6ICAkKEdMT1VUKS8lL29iai0kKE9LKSAkKFBMVUdfRVhUUkFfREVQUykKKwktbWtkaXIgLXAgJChPVVQpLyQqL2xpYgorCSQoc2hlbGwgJChQTFVHTElCX0lDVV9DT05GSUcpIC0tY3h4IC0tY3h4ZmxhZ3MgLS1jcHBmbGFncyAtLWxkZmxhZ3MpICQoUExVR19FWFRSQV9MREZMQUdTKSAtc2hhcmVkIC1vICRAICQoR0xPVVQpLyQqLyoubyAkKFBMVUdMSUJfQVZBSUxBQkxFX0RBVEEpICQoUExVR0xJQl9BVkFJTEFCTEVfU1RBVElDUykKKworIwljcCAkQCAkKENfSU5TKS9yJCovbGliLworCiskKE9VVCkvJS9saWIvJChMSUJQUk9WSURFUik6ICAkKEdMT1VUKS8lL29iai0kKE9LKQorCS1ta2RpciAtcCAkKE9VVCkvJCovbGliCisJZWNobyBjb3B5IGluY2x1ZGVzCisJYXIgLXJ2ICRAICQoR0xPVVQpLyQqLyoubworCXJhbmxpYiAkQAorCisjIyBAQCBidWlsZCBnbHUgcmVuYW1lIGZpbGVzCitnbHVyZW5zOiAkKEdMVVJFTl9JQ1UpCisKKyMgYnVpbGQgc2luZ2xlIGdsdXJlbi5oIAorJChCVUlMRCkvJS8kKEdMVVJFTl9IKTogJChCVUlMRCkvJS9vayBNYWtlZmlsZSBtYWtlZ2x1cmVuLnNoCisJLW1rZGlyIC1wICQoQlVJTEQpLyQqLyQoR0xVUkVOKQorCWVudiBTUkM9IiQoU1JDKSIgU09VUkNFPSIkKFNPVVJDRSkiIEdMVUU9IiQoR0xVRSkiIC4vbWFrZWdsdXJlbi5zaCAkQCAkKgorCUBmZ3JlcCAtcSBPSUNVXyAkQCB8fCAoIGVjaG8gIkVycm9yOiAkQDogbm8gT0lDVV8gc3ltYm9scyBmb3VuZC4gUmVtb3ZpbmcgZ2x1cmVuLmggIiA7IHJtIC1mICRAIDsgZXhpdCAxKQorCiskKEJVSUxEKS8lL2NvbmZpZy8kKElDVV9DT05GSUcpOiAkKEJVSUxEKS8lL2NvbmZpZy8kKElDVV9DT05GSUdfT1JJRykgaWN1LWNvbmZpZy5zZWQgJChCVUlMRCkvJS9vayAKKwlzZWQgLWYgaWN1LWNvbmZpZy5zZWQgPCAkKEJVSUxEKS8kKi9jb25maWcvJChJQ1VfQ09ORklHX09SSUcpID4gICQoQlVJTEQpLyQqL2NvbmZpZy8kKElDVV9DT05GSUcpICYmIGNobW9kIGErcnggICQoQlVJTEQpLyQqL2NvbmZpZy8kKElDVV9DT05GSUcpCisKKyMgcGVyZm9ybSBpbnN0YWxsYXRpb24KKyQoSU5TVCkvJS9vazogJChCVUlMRCkvJS9vaworCWVjaG8gJChTVUJIRUFEKSAkKiAiKGJhY2tlbmQpIGluc3RhbGxpbmcuLi4iCisJZWNobyAiSU5TVCAiICJbIiAkKiAiXSIKKwlta2RpciAtcCAkKElOU1QpLyQqCisJLSQoY2FsbCBMT0dfQ09NUElMRSwkKEJVSUxEKSQqL29rLmxvZywkKE1BS0UpICQoTU9QVFMpIC1DICQoQlVJTEQpLyQqIGluc3RhbGwgJChNQUtFX0lOU1RBTExfWFRSQV9PUFRTKSkKKwl0b3VjaCAkQAorCisjIHVucGFjayBJQ1UgYW5kIHBhdGNoCiskKFNSQykvJS9vazogJChJQ1VTKS9pY3U0Yy0lLXNyYy50Z3oKKwktWyAtZCAkKFNSQykvJCogXSAmJiBybSAtcmYgJChTUkMpLyQqCisJQGVjaG8gJChTVUJIRUFEKSAkKiAiKGJhY2tlbmQpIHVucGFja2luZy4uLiIKKwlta2RpciAtcCAkKFNSQykvJCoKKwkkKGNhbGwgTE9HX0NPTVBJTEUsJChTUkMpLyQqL3VucGFjay5sb2csKCBjZCAkKFNSQykvJCogJiYgZ3VuemlwIC1kIDwgJChUT1ApLyQoSUNVUykvaWN1NGMtJCotc3JjLnRneiB8IHRhciB4dmZwIC0gKSkKKwkoWyAtZiAkKERPVCkvcGF0Y2gvJCogXSAmJiBwYXRjaCAtZCAkKFNSQykvJCogLXAxIDwgJChET1QpL3BhdGNoLyQqKSB8fCB0cnVlCisJdG91Y2ggJEAKKworIyBjb25maWcgCiskKEJVSUxEKS8lL2NvbmZpZy5zdGF0dXM6ICQoU1JDKS8lL29rCisJQGVjaG8gJChTVUJIRUFEKSAkKiAiKGJhY2tlbmQpIGNvbmZpZ3VyaW5nLi4uIgorCS1bIC1kICQoQlVJTEQpLyQqIF0gJiYgcm0gLXJmICQoQlVJTEQpLyQqCisJbWtkaXIgLXAgJChCVUlMRCkvJCoKKwkkKGNhbGwgTE9HX0NPTVBJTEUsJChCVUlMRCkvJCovY29uZmlndXJlLmxvZywoIGNkICQoQlVJTEQpLyQqICYmIGVudiBDRkxBR1M9IiQoQ0ZMQUdTKSAkKFBCTERfRVhUUkFfRkxBR1MpIiBDWFhGTEFHUz0iJChDWFhGTEFHUykgJChQQkxEX0VYVFJBX0ZMQUdTKSIgJChzaGVsbCAkKFNVUEVSQ09ORikgJChUT1ApLyQoU1JDKS8kKi8kKFNPVVJDRSkgJCopICQoQ09ORklHVVJFX09QVFMpIC0tc3JjZGlyPSQoVE9QKS8kKFNSQykvJCovJChTT1VSQ0UpIC0tcHJlZml4PSQoVE9QKS8kKElOU1QpLyQqICkpCisKKyMgYnVpbGQgCisjIG5vdGU6IHJlZ2V4IGhhZCByZW5hbWluZyBwcm9ibGVtcywgYW5kIHNwb29mIGRlcGVuZHMgb24gcmVnZXguIE51a2UgdGhlbS4KKyQoQlVJTEQpLyUvb2s6ICQoQlVJTEQpLyUvY29uZmlnLnN0YXR1cworCUBlY2hvICQoU1VCSEVBRCkgJCogIihiYWNrZW5kKSBidWlsZGluZy4uIgorCSQoY2FsbCBMT0dfQ09NUElMRSwkKEJVSUxEKS8kKi9vazIubG9nLCggJChNQUtFKSAgJChNT1BUUykgLUMgJChCVUlMRCkvJCogYWxsICQoTUFLRV9YVFJBX09QVFMpICkpCisJQGlmIFsgISAtZiAkKEJVSUxEKS8kKi9jb21tb24vcHV0aWwuJChTT0JKKSBdOyBcCisJdGhlbiBcCisJCWVjaG8gcmUtdW5wYWNraW5nICQoQlVJTEQpLyQqL2NvbW1vbiA7IFwKKwkJKCBjZCAkKEJVSUxEKS8kKi9jb21tb24gJiYgYXIgeGYgLi4vbGliL2xpYnNpY3V1Yy5hIHx8IGVjaG8gY291bGQgbm90IHVucGFjayAuLi9saWIvbGlic2ljdXVjLmEgKSA7IFwKKwkJZWNobyByZS11bnBhY2tpbmcgJChCVUlMRCkvJCovaTE4biA7IFwKKwkJKCBjZCAkKEJVSUxEKS8kKi9pMThuICYmIGFyIHhmIC4uL2xpYi9saWJzaWN1aTE4bi5hIHx8IGVjaG8gY291bGQgbm90IHVucGFjayAuLi9saWIvbGlic2ljdWkxOG4uYSApIDsgXAorCWZpCisJQGlmIFsgISAtZiAkKEJVSUxEKS8kKi9jb21tb24vcHV0aWwuJChTT0JKKSBdOyBcCisJdGhlbiBcCisJCWVjaG8gRVJST1I6IHN0aWxsIGNvdWxkIG5vdCBmaW5kICQoQlVJTEQpLyQqL2NvbW1vbi9wdXRpbC4kKFNPQkopIC0gYnVpbGQgbWF5IGZhaWwuOyBcCisJZmkKKwktcm0gLWYgJChCVUlMRCkvJCovaTE4bi91cmVnZXgqLiogJChCVUlMRCkvJCovaTE4bi91c3Bvb2YqLipvKgorCXRvdWNoICRACisKK2luZm8gaGVscDoKKwlAZWNobyAkKFNVQkhFQUQpIFByb3ZpZGVyIEJ1aWxkCisJQGVjaG8gIlRhcmdldHRpbmcgUHJvdmlkZXIgYWdhaW5zdCBJQ1UgJChQUk9WSURFUl9UQVJHRVQpICgkKFBMVUdMSUIpLCBtYWpvciAkKFBMVUdMSUJfTUFKKSkiCisJQGVjaG8gIkF2YWlsYWJsZSBwbHVnaW5zOiAkKFBST1ZJREVSX0FWQUlMQUJMRSkgKCQoUExVR0xJQl9BVkFJTEFCTEUpKSIKKwlAZWNobyAiQXZhaWxhYmxlIGtleXdvcmRzOiIKKwlAZm9yIHZlciBpbiAkKFBST1ZJREVSX0FWQUlMQUJMRSk7IGRvIFwKKwkJZWNobyAiICAgLi4uQHByb3ZpZGVyPWljdSJgZWNobyAkJHZlciB8IC4vaWN1MnN5bXZlci5zaGA7IFwKKwlkb25lCisJQGVjaG8gIlBsdWdpbiBsaWJyYXJ5IHdpbGwgYmUgJChQTFVHTElCX05BTUUpIgorCUBlY2hvCisJQGVjaG8gQXZhaWxhYmxlIElDVSB0YXJiYWxsczogICQoSUNVX1RBUkJBTExTKQorCUBlY2hvIEF2YWlsYWJsZSBJQ1UgdmVyc2lvbnM6ICQoc2hlbGwgZWNobyAkKElDVV9UQVJCQUxMU19WRVJTKSB8IHRyICdfJyAnLicpCisKKyQoT1VUKS8kKFBMVUdMSUIpL3Byb3ZpZGVyX3ZlcnNpb24uaDogTWFrZWZpbGUubG9jYWwgTWFrZWZpbGUgJChBTExESVJTKQorCUBlY2hvICQoU1VCSEVBRCkgJChQTFVHSU4pICIocGx1Z2luKSIgR2VuZXJhdGluZyAkQCAuLgorCUBlY2hvICIvKiBHZW5lcmF0ZWQgZmlsZS4gKi8iID4gJEAKKwlAZWNobyAiY29uc3QgY2hhciAqcHJvdmlkZXJfdmVyc2lvbltdID0geyIgPj4gJEAKKwlAZm9yIHZlciBpbiAkKFBST1ZJREVSX0FWQUlMQUJMRSk7IGRvIFwKKwkJc3ltPWBlY2hvICQkdmVyIHwgLi9pY3Uyc3ltdmVyLnNoYCA7IFwKKwkJZWNobyBWZXJzaW9uICQkdmVyLCBTeW1ib2wgJCRzeW0gOyBcCisJCWVjaG8gIlwiJCRzeW1cIiIsICA+PiAkQCA7IFwKKwlkb25lCisJQGVjaG8gIiB9OyAiID4+ICRACisJQGVjaG8gIiNkZWZpbmUgUFJPVklERVJfQ09VTlQgKHNpemVvZihwcm92aWRlcl92ZXJzaW9uKS9zaXplb2YocHJvdmlkZXJfdmVyc2lvblswXSkpIiA+PiAkQAorCUBlY2hvID4+ICRACisJQGVjaG8gJChTVUJIRUFEKSAkKFBMVUdJTikgIihwbHVnaW4pIiBHZW5lcmF0ZWQgJEAKKworIy0tIGZvciB0aGUgcHJvdG90eXBlCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL01ha2VmaWxlLmxvY2FsLXNhbXBsZSBiL211bHRpL3Byb2ovcHJvdmlkZXIvTWFrZWZpbGUubG9jYWwtc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YTM2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL01ha2VmaWxlLmxvY2FsLXNhbXBsZQpAQCAtMCwwICsxLDMyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyMgbG9jYWwgZGVmaW5pdGlvbnMgbXVzdCBnbyBpbiBNYWtlZmlsZS5sb2NhbAorIyBleGFtcGxlOgorCisjIworIyMgVGhlc2UgdHdvIGFyZSBSRVFVSVJFRC4KKyMjCisKKyMgVGhlIHZlcnNpb24gb2YgSUNVIHlvdSB3aWxsIGJ1aWxkIGFnYWluc3QgKHdoaWNoIEFQSSB5b3Ugd2lsbCB1c2UpLiAgTm90ZSwgNDkuMSBpcyByZXF1aXJlZCBmb3IgY29sbGF0aW9uIHN1cHBvcnQsIGFuZCBmb3IgZGF0ZSBzdXBwb3J0LgorIyBFWEFNUExFOiA0OS4xCitQUk9WSURFUl9UQVJHRVQ9NDkuMQorCisjIFRoZSB2ZXJzaW9ucyBvZiBJQ1UgeW91IHdhbnQgdG8gaGF2ZSBhdmFpbGFibGUgaW4gdGhlIHBsdWdpbi4gU3BhY2Ugc2VwYXJhdGVkLiAgRG9uJ3QgaW5jbHVkZSB0aGUgUFJPVklERVJfVEFSR0VUIHZlcnNpb24uCisjIEVYQU1QTEU6IDMuOC4xICA0LjIuMC4xCitQUk9WSURFUl9BVkFJTEFCTEU9My44LjEgNC4yLjAuMQorCisKKworCisKKyMjCisjIyBmb2xsb3dpbmcgYXJlIE9QVElPTkFMCisjIworCisjIyBkZWJ1ZyBvcHRpb25zCisjRVhUUkFfQ09NUElMRV9PUFRTPS1nCisKKyMjIGNvbmZpZ3VyZSBvcHRpb25zCisjRVhUUkFfQ09ORklHVVJFX09QVFM9LS13aXRoLWxpYnJhcnktc3VmZml4PXNybAorCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2NhbGRpZmYuY3BwIGIvbXVsdGkvcHJvai9wcm92aWRlci9jYWxkaWZmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzc0MDcyCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9jYWxkaWZmLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgPHVuaWNvZGUvZGF0ZWZtdC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWRhdC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNsZWFuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworCisvKiBTdHJpbmcgdG8gdXNlLiAqLworY29uc3QgVURhdGUgc3R1ZmYgPSAxMjk5OTc3NzcxMDAwLjBMOworCitpbnQgZXJyPTA7CisjaW5jbHVkZSAicHJvdmlkZXJfdmVyc2lvbi5oIgorCisKKyNkZWZpbmUgTE9DQUxFX0NPVU5UIDQKK2NvbnN0IGNoYXIgKmxvY2FsZVtMT0NBTEVfQ09VTlRdID0geyAiZXNfR1UiLCAiZnJfQUQiLCAiZXRfQU0iLCAiZW5fSUUiIH07IC8qIExpc3Qgb2YgbG9jYWxlcyB0byB0ZXN0ICovCisKKy8qKgorICogU2V0IHVwIElDVSwgcHJpbnQgIyBvZiBhdmFpbGFibGUgY29sbGF0b3JzCisgKi8KK3ZvaWQgc2V0dXAoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgICAgdV9pbml0KCZzdGF0dXMpOworICAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIklDVSAlcyBpbml0OiAlc1xuIiwgVV9JQ1VfVkVSU0lPTiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisKKyAgICAgaW50MzJfdCBjb3VudDsKKyAgICAgY29uc3QgTG9jYWxlICpzZSA9IENhbGVuZGFyOjpnZXRBdmFpbGFibGVMb2NhbGVzKGNvdW50KTsKKyAgICAgZnByaW50ZihzdGRlcnIsICIjIENhbGVuZGFycyBub3cgYXZhaWxhYmxlOiAlZCxcdCVzIC0gJWQgcHJvdmlkZXJzIGV4cGVjdGVkLlxuIiwgY291bnQsIHVfZXJyb3JOYW1lKHN0YXR1cyksIChpbnQzMl90KVBST1ZJREVSX0NPVU5UKTsKK30KKworaW50IG1haW4oaW50IC8qIGFyZ2MqLyAsIGNvbnN0IGNoYXIgKiAvKmFyZ3YqLyBbXSkgeworI2lmIDAKKyAgLy8gZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBJQ1UgJXMgZG9lc24ndCBzdXBwb3J0IGRhdGUgcHJvdmlkZXJzLiBOZWVkIGF0IGxlYXN0IDQ5LlxuIiwgIFVfSUNVX1ZFUlNJT04gKTsKKyAgLy8gcmV0dXJuIDA7CisjZWxzZQorICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGludCBkaWZmcyA9IDA7CisgICAgaW50IGdiYWRkaWZmcyA9MDsKKyAgICBVRGF0ZUZvcm1hdFN0eWxlIHN0eWxlc1tdID0geyBVREFUX0ZVTEwsIFVEQVRfU0hPUlQgfTsKKyAgICBzZXR1cChzdGF0dXMpOworICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSByZXR1cm4gMTsKKworICAgIGludCBleHBlY3RlZCA9IFBST1ZJREVSX0NPVU5UOworCisgICAgZm9yKHVpbnQzMl90IHM9MDtzPHNpemVvZihzdHlsZXMpL3NpemVvZihzdHlsZXNbMF0pO3MrKykgeworICAgICAgZm9yKGludCBsPTA7bDxMT0NBTEVfQ09VTlQ7bCsrKSB7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgY2hhciBvbGRDaGFyc1syMDBdOworICAgICAgICBpbnQzMl90IG9sZExlbiA9IC0xOworICAgICAgICBmb3IoaW50IHY9MDt2PD1leHBlY3RlZDt2KyspIHsKKyAgICAgICAgICAKKyAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGxvY2FsZSBJRAorICAgICAgICAgIGNoYXIgbG9jSURbMjAwXTsKKyAgICAgICAgICBzdHJjcHkobG9jSUQsIGxvY2FsZVtsXSk7CisgICAgICAgICAgaWYoKHYhPWV4cGVjdGVkKSkgeyAvLyAtMSA9IG5vIHZlcnNpb24KKyAgICAgICAgICAgIHN0cmNhdChsb2NJRCwgIkBzcD1pY3UiKTsKKyAgICAgICAgICAgIHN0cmNhdChsb2NJRCwgcHJvdmlkZXJfdmVyc2lvblt2XSk7CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIHByaW50ZigiJTE4cyA6ICIsIGxvY0lEKTsKKyAgICAgICAgICAKKyAgICAgICAgICBVRXJyb3JDb2RlIHN1YlN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICBjaGFyIG91dGNoYXJzWzIwMF07CisgICAgICAgICAgCisgICAgICAgICAgTG9jYWxQb2ludGVyPENhbGVuZGFyPiBjYWwoQ2FsZW5kYXI6OmNyZWF0ZUluc3RhbmNlKExvY2FsZShsb2NJRCksIHN1YlN0YXR1cykpOworICAgICAgICAgIAorICAgICAgICAgIGlmKFVfRkFJTFVSRShzdWJTdGF0dXMpKSB7CisgICAgICAgICAgICBwcmludGYoIkVSUjogJXNcbiIsIHVfZXJyb3JOYW1lKHN1YlN0YXR1cykpOworICAgICAgICAgICAgZXJyKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgICAgLy8gaW50MzJfdCBsZW4gPSB1ZGF0X2Zvcm1hdChkYXQsIHN0dWZmLCBvdXRjaGFycywgMjAwLCBOVUxMLCAmc3ViU3RhdHVzKTsgCisgICAgICAgICAgCisgICAgICAgICAgLy8gLy9wcmludGYoIlxuIik7CisgICAgICAgICAgLy9jaGFyIHV0ZjhbMjAwXTsKKyAgICAgICAgICAvLyB1X3N0clRvVVRGOCh1dGY4LCAyMDAsIE5VTEwsIG91dGNoYXJzLCBsZW4sICZzdWJTdGF0dXMpOworICAgICAgICAgIAorICAgICAgICAgIHNwcmludGYob3V0Y2hhcnMsICIgY2FsOiBtaW5kYXlzPSVkIGZpcnN0ZGF5PSVkICIsIChpbnQpY2FsLT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCksIChpbnQpY2FsLT5nZXRGaXJzdERheU9mV2VlaygpKTsKKyAgICAgICAgICBpbnQzMl90IGxlbiA9IHN0cmxlbihvdXRjaGFycyk7CisKKyAgICAgICAgICBpZihvbGRMZW4hPWxlbiB8fCBtZW1jbXAob3V0Y2hhcnMsb2xkQ2hhcnMsbGVuKnNpemVvZihvdXRjaGFyc1swXSkpKSB7CisgICAgICAgICAgICBpZih2PT0wKSB7CisgICAgICAgICAgICAgIHB1dGNoYXIoJyAnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHB1dGNoYXIgKCchJyk7CisgICAgICAgICAgICAgIGRpZmZzKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1dGNoYXIgKCc9Jyk7CisgICAgICAgICAgfQorICAgICAgICAgIHByaW50ZigiICVzICIsIG91dGNoYXJzKTsgCisgICAgICAgICAgCisgICAgICAgICAgZm9yKGludCBpPTA7aTxsZW47aSsrKSB7CisgICAgICAgICAgICAgICBpZigoaTxvbGRMZW4pJiYob3V0Y2hhcnNbaV0hPW9sZENoYXJzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlmZnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiKiIsIG9sZENoYXJzW2ldKTsKKyAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgIHByaW50ZigiICIpOworICAgICAgICAgICAgICAgfQorICAgICAgICAgIC8vICAgLy8gICAgICAgICAgICAgICAgcHJpbnRmKCJVKyUwNFgiLCAob3V0Y2hhcnNbaV0pKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcHV0Y2hhcignXG4nKTsKKyAgICAgICAgICAKKyAgICAgICAgICBvbGRMZW4gPSBsZW47CisgICAgICAgICAgbWVtY3B5KG9sZENoYXJzLCBvdXRjaGFycywgbGVuKnNpemVvZihvbGRDaGFyc1swXSkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgICAgCisgICAgaWYoZGlmZnM9PTApIHsKKyAgICAgIHByaW50ZigiRVJST1I6IDAgZGlmZmVyZW5jZXMgZm91bmQgYmV0d2VlbiBwbGF0Zm9ybXMuLiBhcmUgdGhlIHBsYXRmb3JtcyBpbnN0YWxsZWQ/IFRyeSAnaWN1aW5mbyAtTCdcbiIpOworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHByaW50ZigiJWQgZGlmZmVyZW5jZXMgZm91bmQgYW1vbmcgcHJvdmlkZXIgdmVyc2lvbnMhIFByb3ZpZGVyIGlzIHdvcmtpbmchXG4iLCBkaWZmcyk7CisgICAgfQorCisgICAgLy8gaWYoZ2JhZGRpZmZzPjApIHsKKyAgICAvLyAgIHByaW50ZigiRVJST1I6ICVkIGRpZmZzIGZvdW5kIGJldHdlZW4gYSBjb2xsYXRvciBhbmQgaXQncyByZW9wZW5lZCAoZnJvbSBzaG9ydHN0cmluZykgdmFyaWFudC5cbiIsIGdiYWRkaWZmcyk7CisgICAgLy8gICByZXR1cm4gMjsKKyAgICAvLyB9IGVsc2UgeworICAgIC8vICAgcHJpbnRmKCJDb2xsYXRvciBhbmQgcmVvcGVuZWQgKHNob3J0c3RyaW5nKSBhcmUgT0suXG4iKTsKKyAgICAvLyB9CisKKyAgICBpZihlcnIpIHsKKyAgICAgIHByaW50ZigiJWQgZXJyb3JzIC0gRkFJTCFcbiIsIGVycik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcmludGYoIlN1Y2Nlc3MhXG4iKTsKKyAgICAKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9jaGVjay1pY3Uyc3ltdmVyLnNoIGIvbXVsdGkvcHJvai9wcm92aWRlci9jaGVjay1pY3Uyc3ltdmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2ZjcyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2NoZWNrLWljdTJzeW12ZXIuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL2Jhc2gKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK2lmIFsgJCMgLWVxIDEgXTsKK3RoZW4KKyAgICBWRVJCT1NFPTEKK2Vsc2UKKyAgICBWRVJCT1NFPTAKK2ZpCisKK2Z1bmN0aW9uIHZlcmJvc2UoKQoreworICAgIGlmIFsgJHtWRVJCT1NFfSAtZXEgMSBdOworICAgIHRoZW4KKyAgICAgICAgZWNobyAiJCoiCisgICAgZWxzZQorICAgICAgICBlY2hvIC1uIC4KKyAgICBmaQorfQorCitmdW5jdGlvbiBjKCkKK3sKKyAgICBJTj0kMQorICAgIEVYUD0kMgorICAgIE9VVD1gLi9pY3Uyc3ltdmVyLnNoICRJTmAKKyAgICBpZiBbICJ4JHtPVVR9IiAhPSAieCR7RVhQfSIgXTsKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBcIiR7SU59XCIgLT4gXCIke09VVH1cIiwgZXhwZWN0ZWQgJHtFWFB9IiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgZWxzZQorICAgICAgICB2ZXJib3NlICIke0lOfSAtPiAke09VVH0iCisgICAgZmkKKworICAgIE9VVD1gZWNobyAke0lOfSB8IC4vaWN1MnN5bXZlci5zaGAKKyAgICBpZiBbICJ4JHtPVVR9IiAhPSAieCR7RVhQfSIgXTsKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBcIiR7SU59XCIgLT4gXCIke09VVH1cIiwgZXhwZWN0ZWQgJHtFWFB9ICh2aWEgc3RyZWFtKSIgPiYyCisgICAgICAgIGV4aXQgMQorICAgIGVsc2UKKyAgICAgICAgdmVyYm9zZSAiJHtJTn0gLT4gJHtPVVR9ICh2aWEgc3RyZWFtKSIKKyAgICBmaQorfQorCitjCSczLjYuMicJCSczNicKK2MJJzEuMCcJCScxMCcKK2MJJzQuOCcJCSc0OCcKK2MJJzQuOC4xLjEnCSc0OCcKK2MJJzQuMC4yJwkJJzQwJworYwknNC4xLjInCQknNDEnCitjCSc0OS4xLjInCSc0OScKK2MJJzQ5JwkJJzQ5JworYwknNTAuMC4zJwknNTAnCitjCSc1MS4wLjAuMScJJzUxJworCitlY2hvICIgT0shIgorCitleGl0IDAKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvY29sbGRpZmYuY3BwIGIvbXVsdGkvcHJvai9wcm92aWRlci9jb2xsZGlmZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1Y2ZjNwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvY29sbGRpZmYuY3BwCkBAIC0wLDAgKzEsMTg3IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaW5jbHVkZSA8dW5pY29kZS9jb2xsLmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2xlYW4uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisKKy8qIFN0cmluZyB0byB1c2UuICovCitjb25zdCBVQ2hhciBzdHVmZltdID0geyAweDMwQkIsIDB4MGQ0YywgMHg1MywgMHg3NCwgMHg3NSwgMHg2NiwgMHg2NiwgMHgwMCB9OyAvKiBTdHVmZiAqLworCisjaW5jbHVkZSAicHJvdmlkZXJfdmVyc2lvbi5oIgorCisKKyNkZWZpbmUgTE9DQUxFX0NPVU5UIDQKK2NvbnN0IGNoYXIgKmxvY2FsZVtMT0NBTEVfQ09VTlRdID0geyAiZmkiLCAiZW5fVVMiLCAiamEiLCAibWwiIH07IC8qIExpc3Qgb2YgbG9jYWxlcyB0byB0ZXN0ICovCisKKy8qKgorICogU2V0IHVwIElDVSwgcHJpbnQgIyBvZiBhdmFpbGFibGUgY29sbGF0b3JzCisgKi8KK3ZvaWQgc2V0dXAoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgICAgdV9pbml0KCZzdGF0dXMpOworICAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIklDVSAlcyBpbml0OiAlc1xuIiwgVV9JQ1VfVkVSU0lPTiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisKKyAgICBpbnQzMl90IGNvdW50OworICAgIFN0cmluZ0VudW1lcmF0aW9uICpzZSA9IENvbGxhdG9yOjpnZXRBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY291bnQgPSBzZS0+Y291bnQoc3RhdHVzKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiMgQ29sbGF0b3JzIG5vdyBhdmFpbGFibGU6ICVkLFx0JXMgLSAlZCBwcm92aWRlcnMgZXhwZWN0ZWQuXG4iLCBjb3VudCwgdV9lcnJvck5hbWUoc3RhdHVzKSwgKGludDMyX3QpUFJPVklERVJfQ09VTlQpOworfQorCitpbnQgbWFpbihpbnQgLyogYXJnYyovICwgY29uc3QgY2hhciAqIC8qYXJndiovIFtdKSB7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IGRpZmZzID0gMDsKKyAgICBpbnQgZ2JhZGRpZmZzID0wOworICAgIHNldHVwKHN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHJldHVybiAxOworCisgICAgaW50IGV4cGVjdGVkID0gUFJPVklERVJfQ09VTlQ7CisKKyAgICBmb3IoaW50IGw9MDtsPExPQ0FMRV9DT1VOVDtsKyspIHsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB1aW50OF90IG9sZEJ5dGVzWzIwMF07CisgICAgICAgIGludDMyX3Qgb2xkTGVuID0gLTE7CisgICAgICAgIGZvcihpbnQgdj0wO3Y8PWV4cGVjdGVkO3YrKykgeworCisgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGxvY2FsZSBJRAorICAgICAgICAgICAgY2hhciBsb2NJRFsyMDBdOworICAgICAgICAgICAgc3RyY3B5KGxvY0lELCBsb2NhbGVbbF0pOworICAgICAgICAgICAgaWYoKHYhPWV4cGVjdGVkKSkgeyAvLyAtMSA9IG5vIHZlcnNpb24KKyAgICAgICAgICAgICAgICBzdHJjYXQobG9jSUQsICJAc3A9aWN1Iik7CisgICAgICAgICAgICAgICAgc3RyY2F0KGxvY0lELCBwcm92aWRlcl92ZXJzaW9uW3ZdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHJpbnRmKCIlLTI4cyA9ICAiLCBsb2NJRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFVFcnJvckNvZGUgc3ViU3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAgdWludDhfdCBieXRlc1syMDBdOworICAgICAgICAgICAgdWludDhfdCBieXRlc2JbMjAwXTsKKyNkZWZpbmUgVVNFX0NYWCAwCisKKyNpZiBVU0VfQ1hYCisgICAgICAgICAgICBDb2xsYXRvciAqY29sID0gQ29sbGF0b3I6OmNyZWF0ZUluc3RhbmNlKExvY2FsZShsb2NJRCksc3ViU3RhdHVzKTsKKyAgICAgICAgICAgIGlmKFVfRkFJTFVSRShzdWJTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFUlI6ICVzXG4iLCB1X2Vycm9yTmFtZShzdWJTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludDMyX3QgbGVuID0gY29sLT5nZXRTb3J0S2V5KHN0dWZmLCAtMSwgYnl0ZXMsIDIwMCk7CisjZWxzZQorI2lmIDEKKyAgICAgICAgICAgIGNoYXIgeGJ1ZjJbMjAwXTsKKyAgICAgICAgICAgIHN0cmNweSh4YnVmMiwiWC8iKTsKKyAgICAgICAgICAgIHN0cmNhdCh4YnVmMixsb2NJRCk7CisgICAgICAgICAgICBzdHJjYXQoeGJ1ZjIsIi8iKTsKKyAgICAgICAgICAgIC8vcHJpbnRmKCIgLT4gJXNcbiIsIHhidWYyKTsKKyAgICAgICAgICAgIFVDb2xsYXRvciAqY29sID0gdWNvbF9vcGVuRnJvbVNob3J0U3RyaW5nKHhidWYyLCBGQUxTRSxOVUxMLCAmc3ViU3RhdHVzKTsKKyNlbHNlCisgICAgICAgICAgICBVQ29sbGF0b3IgKmNvbCA9IHVjb2xfb3Blbihsb2NJRCwgJnN1YlN0YXR1cyk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmKFVfRkFJTFVSRShzdWJTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFUlI6ICVzXG4iLCB1X2Vycm9yTmFtZShzdWJTdGF0dXMpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorCisgICAgICAgICAgICBjaGFyIHhidWYzWzIwMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludDMyX3QgZGVmID0gdWNvbF9nZXRTaG9ydERlZmluaXRpb25TdHJpbmcoY29sLGxvY0lELypOVUxMKi8seGJ1ZjMsMjAwLCZzdWJTdGF0dXMpOworICAgICAgICAgICAgICBpZihVX0ZBSUxVUkUoc3ViU3RhdHVzKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiRXJyIGdldHRpbmcgc2hvcnQgc3RyaW5nIG5hbWU6ICVzXG4iLCB1X2Vycm9yTmFtZShzdWJTdGF0dXMpKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiAtLT4gJXNcbiIsIHhidWYzKTsKKyAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludDMyX3QgbGVuID0gdWNvbF9nZXRTb3J0S2V5KGNvbCwgc3R1ZmYsIC0xLCBieXRlcywgMjAwKTsKKyNlbmRpZgorCisgICAgICAgICAgICBwcmludGYoIiAgICAgIik7CisKKyAgICAgICAgICAgIGludCB0ZGlmZnM9MDsKKworICAgICAgICAgICAgZm9yKGludCBpPTA7aTxsZW47aSsrKSB7CisJICAgICAgaWYoaTxvbGRMZW4mJmJ5dGVzW2ldIT1vbGRCeXRlc1tpXSkgeworICAgICAgICAgICAgICAgIGRpZmZzKys7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIqIik7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcHJpbnRmKCIlMDJYIiwgKDB4RkYmYnl0ZXNbaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKworICAgICAgICAgICAgY2hhciB4YnVmNFsyMDBdOworICAgICAgICAgICAgVUNvbGxhdG9yICpjb2wyID0gdWNvbF9vcGVuRnJvbVNob3J0U3RyaW5nKHhidWYzLCBGQUxTRSwgTlVMTCwgJnN1YlN0YXR1cyk7CisgICAgICAgICAgICBpZihVX0ZBSUxVUkUoc3ViU3RhdHVzKSkgeworICAgICAgICAgICAgICBwcmludGYoIkVyciBvcGVuaW5nIGZyb20gbmV3IHNob3J0IHN0cmluZyA6ICVzXG4iLCB1X2Vycm9yTmFtZShzdWJTdGF0dXMpKTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpbnQzMl90IGRlZjQgPSB1Y29sX2dldFNob3J0RGVmaW5pdGlvblN0cmluZyhjb2wsbG9jSUQvKk5VTEwqLyx4YnVmNCwyMDAsJnN1YlN0YXR1cyk7CisgICAgICAgICAgICAgIGlmKHN0cmNtcCh4YnVmNCx4YnVmMykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiAtLT4gcmVvcGVuZWQgPSAlcyAoJXMpXG4iLCB4YnVmNCwgdV9lcnJvck5hbWUoc3ViU3RhdHVzKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludDMyX3QgbGVuMiA9IHVjb2xfZ2V0U29ydEtleShjb2wyLCBzdHVmZiwgLTEsIGJ5dGVzYiwgMjAwKTsKKworICAgICAgICAgICAgaW50IGJhZGRpZmZzPTA7CisgICAgICAgICAgICBmb3IoaW50IGk9MDtpPGxlbjtpKyspIHsKKwkgICAgICBpZihpPGxlbiYmYnl0ZXNbaV0hPWJ5dGVzYltpXSkgeworICAgICAgICAgICAgICAgICAgYmFkZGlmZnMrKzsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiISIpOworICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgIC8vIHByaW50ZigiICIpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gcHJpbnRmKCIlMDJYIiwgKDB4RkYmYnl0ZXNiW2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihiYWRkaWZmcz4wKSB7CisgICAgICAgICAgICAgIHByaW50ZigiIC0gRVJSISBEaWZmcyBmcm9tICVzIGluICVkIHBsYWNlc1xuIiwgeGJ1ZjIsYmFkZGlmZnMpOworICAgICAgICAgICAgICBnYmFkZGlmZnMrPWJhZGRpZmZzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgLy9wcmludGYoIiAgT0suXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworCisgICAgICAgICAgICAKKworI2lmIFVTRV9DWFgKKyAgICAgICAgICAgIGRlbGV0ZSBjb2w7CisjZWxzZQorICAgICAgICAgICAgdWNvbF9jbG9zZShjb2wpOworI2VuZGlmCisKKyAgICAgICAgICAgIG9sZExlbiA9IGxlbjsKKyAgICAgICAgICAgIG1lbWNweShvbGRCeXRlcywgYnl0ZXMsIGxlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZihkaWZmcz09MCkgeworI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8IDQ5KQorICAgICAgcHJpbnRmKCJFUlJPUjogMCBkaWZmZXJlbmNlcyBmb3VuZCBiZXR3ZWVuIHBsYXRmb3Jtcy4gSUNVICIgVV9JQ1VfVkVSU0lPTiAiIGRvZXMgbm90IHN1cHBvcnQgY29sbGF0b3IgcGx1Z2lucyBwcm9wZXJseSAobm90IHVudGlsIDQ5KVxuIik7CisjZWxzZQorICAgICAgcHJpbnRmKCJFUlJPUjogMCBkaWZmZXJlbmNlcyBmb3VuZCBiZXR3ZWVuIHBsYXRmb3Jtcy4uIGFyZSB0aGUgcGxhdGZvcm1zIGluc3RhbGxlZD8gVHJ5ICdpY3VpbmZvIC1MJ1xuIik7CisjZW5kaWYKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBwcmludGYoIiVkIGRpZmZlcmVuY2VzIGZvdW5kIGFtb25nIHByb3ZpZGVyIHZlcnNpb25zIVxuIiwgZGlmZnMpOworICAgIH0KKworICAgIGlmKGdiYWRkaWZmcz4wKSB7CisgICAgICBwcmludGYoIkVSUk9SOiAlZCBkaWZmcyBmb3VuZCBiZXR3ZWVuIGEgY29sbGF0b3IgYW5kIGl0J3MgcmVvcGVuZWQgKGZyb20gc2hvcnRzdHJpbmcpIHZhcmlhbnQuXG4iLCBnYmFkZGlmZnMpOworICAgICAgcmV0dXJuIDI7CisgICAgfSBlbHNlIHsKKyAgICAgIHByaW50ZigiQ29sbGF0b3IgYW5kIHJlb3BlbmVkIChzaG9ydHN0cmluZykgYXJlIE9LLlxuIik7CisgICAgfQorCisgICAgcHJpbnRmKCJTdWNjZXNzIVxuIik7CisgICAgCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2RhdGVkaWZmLmNwcCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZGF0ZWRpZmYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjliOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2RhdGVkaWZmLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgPHVuaWNvZGUvZGF0ZWZtdC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWRhdC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNsZWFuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworCisvKiBTdHJpbmcgdG8gdXNlLiAqLworY29uc3QgVURhdGUgc3R1ZmYgPSAxMjk5OTc3NzcxMDAwLjBMOworCisjaW5jbHVkZSAicHJvdmlkZXJfdmVyc2lvbi5oIgorCisKKyNkZWZpbmUgTE9DQUxFX0NPVU5UIDQKK2NvbnN0IGNoYXIgKmxvY2FsZVtMT0NBTEVfQ09VTlRdID0geyAiZmkiLCAiZW5fVVMiLCAiamEiLCAibWwiIH07IC8qIExpc3Qgb2YgbG9jYWxlcyB0byB0ZXN0ICovCisKKy8qKgorICogU2V0IHVwIElDVSwgcHJpbnQgIyBvZiBhdmFpbGFibGUgY29sbGF0b3JzCisgKi8KK3ZvaWQgc2V0dXAoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgICAgdV9pbml0KCZzdGF0dXMpOworICAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIklDVSAlcyBpbml0OiAlc1xuIiwgVV9JQ1VfVkVSU0lPTiwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisKKyAgICAvLyBpbnQzMl90IGNvdW50OworICAgIC8vIFN0cmluZ0VudW1lcmF0aW9uICpzZSA9IERhdGVGb3JtYXQ6OmdldEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICAvLyBjb3VudCA9IHNlLT5jb3VudChzdGF0dXMpOworICAgIC8vIGZwcmludGYoc3RkZXJyLCAiIyBEYXRlRm9ybWF0cyBub3cgYXZhaWxhYmxlOiAlZCxcdCVzIC0gJWQgcHJvdmlkZXJzIGV4cGVjdGVkLlxuIiwgY291bnQsIHVfZXJyb3JOYW1lKHN0YXR1cyksIChpbnQzMl90KVBST1ZJREVSX0NPVU5UKTsKK30KKworaW50IG1haW4oaW50IC8qIGFyZ2MqLyAsIGNvbnN0IGNoYXIgKiAvKmFyZ3YqLyBbXSkgeworI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8IDQ5KQorICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IElDVSAlcyBkb2Vzbid0IHN1cHBvcnQgZGF0ZSBwcm92aWRlcnMuIE5lZWQgYXQgbGVhc3QgNDkuXG4iLCAgVV9JQ1VfVkVSU0lPTiApOworICByZXR1cm4gMDsKKyNlbHNlCisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IGRpZmZzID0gMDsKKyAgICBpbnQgZ2JhZGRpZmZzID0wOworICAgIFVEYXRlRm9ybWF0U3R5bGUgc3R5bGVzW10gPSB7IFVEQVRfRlVMTCwgVURBVF9TSE9SVCB9OworICAgIHNldHVwKHN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cykpIHJldHVybiAxOworCisgICAgaW50IGV4cGVjdGVkID0gUFJPVklERVJfQ09VTlQ7CisKKyAgICBmb3IodWludDMyX3Qgcz0wO3M8c2l6ZW9mKHN0eWxlcykvc2l6ZW9mKHN0eWxlc1swXSk7cysrKSB7CisgICAgICBmb3IoaW50IGw9MDtsPExPQ0FMRV9DT1VOVDtsKyspIHsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBVQ2hhciBvbGRDaGFyc1syMDBdOworICAgICAgICBpbnQzMl90IG9sZExlbiA9IC0xOworICAgICAgICBmb3IoaW50IHY9MDt2PD1leHBlY3RlZDt2KyspIHsKKyAgICAgICAgICAKKyAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGxvY2FsZSBJRAorICAgICAgICAgIGNoYXIgbG9jSURbMjAwXTsKKyAgICAgICAgICBzdHJjcHkobG9jSUQsIGxvY2FsZVtsXSk7CisgICAgICAgICAgaWYoKHYhPWV4cGVjdGVkKSkgeyAvLyAtMSA9IG5vIHZlcnNpb24KKyAgICAgICAgICAgIHN0cmNhdChsb2NJRCwgIkBzcD1pY3UiKTsKKyAgICAgICAgICAgIHN0cmNhdChsb2NJRCwgcHJvdmlkZXJfdmVyc2lvblt2XSk7CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIHByaW50ZigiJTE4cyA6ICIsIGxvY0lEKTsKKyAgICAgICAgICAKKyAgICAgICAgICBVRXJyb3JDb2RlIHN1YlN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICBVQ2hhciBvdXRjaGFyc1syMDBdOworICAgICAgICAgIAorICAgICAgICAgIFVEYXRlRm9ybWF0ICpkYXQgPSB1ZGF0X29wZW4oc3R5bGVzW3NdLHN0eWxlc1tzXSwgbG9jSUQsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3ViU3RhdHVzKTsKKyAgICAgICAgICAKKyAgICAgICAgICBpZihVX0ZBSUxVUkUoc3ViU3RhdHVzKSkgeworICAgICAgICAgICAgcHJpbnRmKCJFUlI6ICVzXG4iLCB1X2Vycm9yTmFtZShzdWJTdGF0dXMpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICBpbnQzMl90IGxlbiA9IHVkYXRfZm9ybWF0KGRhdCwgc3R1ZmYsIG91dGNoYXJzLCAyMDAsIE5VTEwsICZzdWJTdGF0dXMpOyAKKyAgICAgICAgICAKKyAgICAgICAgICAvL3ByaW50ZigiXG4iKTsKKyAgICAgICAgICBjaGFyIHV0ZjhbMjAwXTsKKyAgICAgICAgICB1X3N0clRvVVRGOCh1dGY4LCAyMDAsIE5VTEwsIG91dGNoYXJzLCBsZW4sICZzdWJTdGF0dXMpOworICAgICAgICAgIGlmKG9sZExlbiE9bGVuIHx8IG1lbWNtcChvdXRjaGFycyxvbGRDaGFycyxsZW4qc2l6ZW9mKG91dGNoYXJzWzBdKSkpIHsKKyAgICAgICAgICAgIHB1dGNoYXIgKCchJyk7CisgICAgICAgICAgICBkaWZmcysrOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXRjaGFyICgnPScpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmludGYoIiAlcyAiLCB1dGY4KTsgCisgICAgICAgICAgCisgICAgICAgICAgLy8gZm9yKGludCBpPTA7aTxsZW47aSsrKSB7CisgICAgICAgICAgLy8gICBpZigoaTxvbGRMZW4pJiYob3V0Y2hhcnNbaV0hPW9sZENoYXJzW2ldKSkgeworICAgICAgICAgIC8vICAgICAgIGRpZmZzKys7CisgICAgICAgICAgLy8gICAgICAgcHJpbnRmKCIqIiwgb2xkQ2hhcnNbaV0pOworICAgICAgICAgIC8vICAgICB9IGVsc2UgeworICAgICAgICAgIC8vICAgICAgIHByaW50ZigiICIpOworICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgLy8gICAvLyAgICAgICAgICAgICAgICBwcmludGYoIlUrJTA0WCIsIChvdXRjaGFyc1tpXSkpOworICAgICAgICAgIC8vIH0KKyAgICAgICAgICBwdXRjaGFyKCdcbicpOworICAgICAgICAgIHVkYXRfY2xvc2UoZGF0KTsKKyAgICAgICAgICAKKyAgICAgICAgICBvbGRMZW4gPSBsZW47CisgICAgICAgICAgbWVtY3B5KG9sZENoYXJzLCBvdXRjaGFycywgbGVuKnNpemVvZihvbGRDaGFyc1swXSkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgICAgCisgICAgaWYoZGlmZnM9PTApIHsKKyAgICAgIHByaW50ZigiRVJST1I6IDAgZGlmZmVyZW5jZXMgZm91bmQgYmV0d2VlbiBwbGF0Zm9ybXMuLiBhcmUgdGhlIHBsYXRmb3JtcyBpbnN0YWxsZWQ/IFRyeSAnaWN1aW5mbyAtTCdcbiIpOworICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgIHByaW50ZigiJWQgZGlmZmVyZW5jZXMgZm91bmQgYW1vbmcgcHJvdmlkZXIgdmVyc2lvbnMhXG4iLCBkaWZmcyk7CisgICAgfQorCisgICAgLy8gaWYoZ2JhZGRpZmZzPjApIHsKKyAgICAvLyAgIHByaW50ZigiRVJST1I6ICVkIGRpZmZzIGZvdW5kIGJldHdlZW4gYSBjb2xsYXRvciBhbmQgaXQncyByZW9wZW5lZCAoZnJvbSBzaG9ydHN0cmluZykgdmFyaWFudC5cbiIsIGdiYWRkaWZmcyk7CisgICAgLy8gICByZXR1cm4gMjsKKyAgICAvLyB9IGVsc2UgeworICAgIC8vICAgcHJpbnRmKCJDb2xsYXRvciBhbmQgcmVvcGVuZWQgKHNob3J0c3RyaW5nKSBhcmUgT0suXG4iKTsKKyAgICAvLyB9CisKKyAgICBwcmludGYoIlN1Y2Nlc3MhXG4iKTsKKyAgICAKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9leHBvcnQudHh0IGIvbXVsdGkvcHJvai9wcm92aWRlci9leHBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YWI3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2V4cG9ydC50eHQKQEAgLTAsMCArMSwyIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAorX2NvbGxfcHJvdmlkZXJfcGx1Z2luCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvX3ZlcnNpb25saXN0Xy5jcHAgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvX3ZlcnNpb25saXN0Xy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxMDYwOQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9fdmVyc2lvbmxpc3RfLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgPGljdWdsdWUvaWN1Z2x1ZS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvY29sbC5oPgorCisKKyNpZiBkZWZpbmVkICggSUNVR0xVRV9WRVIgKQorLy8jZXJyb3IgREVGSU5FRCEKKyNlbHNlCisKKyNkZWZpbmUgR0xVRV9WRVIoeCkgcHV0cygiVmVyc2lvbiAiICMgeCApOworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLy8gZ2VuZXJhdGUgbGlzdCBvZiB2ZXJzaW9ucworI2luY2x1ZGUgPGljdWdsdWUvZmVfdmVybGlzdC5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKSB7CitwcmludGYoIkknbSBvbiAiIFVfSUNVX1ZFUlNJT04gIiBidXQgaSBoYXZlIG1vZHVsZXMgZm9yOiBcbiIpOworICBmb3IoaW50IGk9MDtmZV92ZXJsaXN0W2ldO2krKykgeworICAgICAgcHJpbnRmKCIlZDogJXNcbiIsIGksIGZlX3Zlcmxpc3RbaV0pOworICB9Cit9CisKKyNlbmRpZgorCisKKworCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvY2FsX2ZlLmNwcCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9jYWxfZmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YWQ4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvY2FsX2ZlLmNwcApAQCAtMCwwICsxLDQyOCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKyNkZWZpbmUgQ0FMX0ZFX0RFQlVHIDEKKworI2lmbmRlZiBDQUxfRkVfREVCVUcKKyNkZWZpbmUgQ0FMX0ZFX0RFQlVHIDAKKyNlbmRpZgorCisjaWYgQ0FMX0ZFX0RFQlVHCisjZGVmaW5lIGRlYnVnZnByaW50Zih4KSBmZmx1c2goc3RkZXJyKSxmZmx1c2goc3Rkb3V0KSxmcHJpbnRmIHgsZmZsdXNoKHN0ZGVyciksZmZsdXNoKHN0ZG91dCkKKyNlbHNlCisjZGVmaW5lIGRlYnVnZnByaW50Zih4KQorI2VuZGlmCisKKyNpbmNsdWRlIDxpY3VnbHVlL2ljdWdsdWUuaD4KKyNpbmNsdWRlICJ1bmljb2RlL3VjYWwuaCIKKy8vI2luY2x1ZGUgPHVuaWNvZGUvdGJsY29sbC5oPgorI2luY2x1ZGUgInVuaWNvZGUvY2FsZW5kYXIuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorI2luY2x1ZGUgInVuaWNvZGUvZ3JlZ29jYWwuaCIKKworCisKKy8qKgorICogTWFjcm8gdG8gZGVmaW5lIHRoZSBDYWxlbmRhcl9nbHVlXzRfMiBjbGFzcyAKKyAqLworI2lmZGVmIEdMVUVfVkVSCisjZXJyb3IgR0xVRV9WRVIgaXMgZGVmaW5lZAorI2VuZGlmCisKKyNkZWZpbmUgR0xVRV9WRVIoeCkgY2xhc3MgR0xVRV9TWU1fViggQ2FsZW5kYXIsIHggKSA6IHB1YmxpYyBDYWxlbmRhciB7ICBcCitwdWJsaWM6IC8qIHN0YXRpYyBjcmVhdGUgKi8gXAorICBVQ2FsZW5kYXIgKl90aGlzOyBHTFVFX1NZTV9WKCBDYWxlbmRhciwgeCApICggY29uc3QgTG9jYWxlJiwgVUVycm9yQ29kZSYgKTsgXAorcHJpdmF0ZTogXAorICAgIHZpcnR1YWwgfiBHTFVFX1NZTV9WICggQ2FsZW5kYXIsIHgpICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgdm9pZCogZ2V0RHluYW1pY0NsYXNzSUQoKSBjb25zdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyB2b2lkKiBnZXRTdGF0aWNDbGFzc0lEKCkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBvdmVycmlkZXMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCBVQm9vbCBoYXZlRGVmYXVsdENlbnR1cnkoKSBjb25zdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHZpcnR1YWwgVURhdGUgZGVmYXVsdENlbnR1cnlTdGFydCgpIGNvbnN0IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIGludDMyX3QgaGFuZGxlR2V0RXh0ZW5kZWRZZWFyKCkgOyBcCit2aXJ0dWFsIGNvbnN0IGNoYXIgKiBnZXRUeXBlKCkgY29uc3QgOyBcCit2aXJ0dWFsIFVCb29sIGluRGF5bGlnaHRUaW1lKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgOyBcCisgICAgdmlydHVhbCBpbnQzMl90IGRlZmF1bHRDZW50dXJ5U3RhcnRZZWFyKCkgY29uc3QgOyAgXAorICAgIHZpcnR1YWwgaW50MzJfdCBoYW5kbGVDb21wdXRlTW9udGhTdGFydChpbnQzMl90IGV5ZWFyLCBpbnQzMl90IG1vbnRoLCBVQm9vbCB1c2VNb250aCkgY29uc3QgOyBcCisgICAgdmlydHVhbCBpbnQzMl90IGhhbmRsZUdldExpbWl0KFVDYWxlbmRhckRhdGVGaWVsZHMgZmllbGQsIEVMaW1pdFR5cGUgbGltaXRUeXBlKSBjb25zdCA7IFwKKyAgICB2aXJ0dWFsIENhbGVuZGFyKiBjbG9uZSh2b2lkKSBjb25zdDsgXAorICBwdWJsaWM6IHN0YXRpYyBpbnQzMl90IGNvdW50QXZhaWxhYmxlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcHVibGljOiBzdGF0aWMgaW50MzJfdCBhcHBlbmRBdmFpbGFibGUoVW5pY29kZVN0cmluZyogc3RycywgaW50MzJfdCBpLCBpbnQzMl90IGNvdW50KTsgXAorICB9OworCisKKy8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGhlIGZvbGxvd2luZyBjb2RlIHJ1bnMgaW5zaWRlIHRoZSAndGFyZ2V0JyB2ZXJzaW9uIChpLmUuIG9sZCBJQ1UpID09PT09PT09PT0gKiovCisjaWYgZGVmaW5lZCAoIElDVUdMVUVfVkVSICkKKworLyogY29kZSBmb3Igc29tZSB2ZXJzaW9uICovCisjaW5jbHVkZSA8aWN1Z2x1ZS9nbHVyZW4uaD4KKyNpbmNsdWRlICJvaWN1LmgiCisKKyNpZmRlZiBHTFVFX1ZFUgorR0xVRV9WRVIoIElDVUdMVUVfVkVSICkKKyNlbmRpZgorCitHTFVFX1NZTSAoQ2FsZW5kYXIgKSA6OiBHTFVFX1NZTShDYWxlbmRhcikgKCBjb25zdCBMb2NhbGUmIGxvYywgVUVycm9yQ29kZSYgc3RhdHVzICkgOgorQ2FsZW5kYXIoc3RhdHVzKSwgX3RoaXMoTlVMTCkKK3sgCisKKyAgX3RoaXMgPSBPSUNVX3VjYWxfb3BlbihOVUxMLCAtMSwgLypsb2NhbGUqL05VTEwsIFVDQUxfREVGQVVMVCwgJnN0YXR1cyk7CisKKyAgLy8gY29weSBzb21lIHRoaW5ncyBvdmVyCisgIHNldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoT0lDVV91Y2FsX2dldEF0dHJpYnV0ZShfdGhpcywgVUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSykpOworICBzZXRGaXJzdERheU9mV2VlaygoVUNhbGVuZGFyRGF5c09mV2VlaylPSUNVX3VjYWxfZ2V0QXR0cmlidXRlKF90aGlzLCBVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLKSk7Cit9CisKK0dMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiB+IEdMVUVfU1lNKENhbGVuZGFyKSAoKSB7CisjaWYgQ0FMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiB1Y2FsX2Nsb3NlIik7CisjZW5kaWYKKyAgICBPSUNVX3VjYWxfY2xvc2UoX3RoaXMpOworfQorCisKK1VCb29sIEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBoYXZlRGVmYXVsdENlbnR1cnkoKSBjb25zdCB7CisgIHJldHVybiBGQUxTRTsKK30KK1VEYXRlIEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBkZWZhdWx0Q2VudHVyeVN0YXJ0KCkgY29uc3QgeworICByZXR1cm4gMEw7Cit9CitpbnQzMl90IEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBoYW5kbGVHZXRFeHRlbmRlZFllYXIoKSB7CisgIHJldHVybiAwOworfQorY29uc3QgY2hhciAqIEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBnZXRUeXBlKCkgY29uc3QgIHsKKyAgcmV0dXJuICJkaWxiZXJ0IjsKK30KK1VCb29sIEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBpbkRheWxpZ2h0VGltZShVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0ICB7CisgIHJldHVybiBGQUxTRTsKK30KK2ludDMyX3QgR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGRlZmF1bHRDZW50dXJ5U3RhcnRZZWFyKCkgY29uc3QgIHsKKyAgcmV0dXJuIDIwMTI7Cit9CitpbnQzMl90IEdMVUVfU1lNICggQ2FsZW5kYXIgKSA6OiBoYW5kbGVDb21wdXRlTW9udGhTdGFydChpbnQzMl90IGV5ZWFyLCBpbnQzMl90IG1vbnRoLCBVQm9vbCB1c2VNb250aCkgY29uc3QgeworICByZXR1cm4gMDsKK30KKworaW50MzJfdCBHTFVFX1NZTSAoIENhbGVuZGFyICkgOjogaGFuZGxlR2V0TGltaXQoVUNhbGVuZGFyRGF0ZUZpZWxkcyBmaWVsZCwgRUxpbWl0VHlwZSBsaW1pdFR5cGUpIGNvbnN0IHsKKyAgcmV0dXJuIDE7Cit9CitDYWxlbmRhciogR0xVRV9TWU0gKCBDYWxlbmRhciApIDo6IGNsb25lKHZvaWQpIGNvbnN0IHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworLy8gRGF0ZUZvcm1hdCAqCisvLyBHTFVFX1NZTSAoIERhdGVGb3JtYXQgKSA6OiBjcmVhdGUoVURhdGVGb3JtYXRTdHlsZSAgdGltZVN0eWxlLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0U3R5bGUgIGRhdGVTdHlsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHR6SURMZW5ndGgsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvY2FsZSAmbG9jLCBjb25zdCBjaGFyICovKnZlciovKSB7CisvLyAgIC8vIFRPRE86IHNhdmUgdmVyc2lvbgorLy8gICAvL2NoYXIgbG9jQnVmWzIwMF07CisvLyAgIC8vY2hhciBrd3ZCdWZbMjAwXTsKKy8vICAgVURhdGVGb3JtYXQgKiB1YyA9ICBPSUNVX3VkYXRfb3BlbiggdGltZVN0eWxlLCBkYXRlU3R5bGUsIGxvY2FsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHpJRCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHpJRExlbmd0aCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKKy8vICAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHJldHVybiBOVUxMOyAvLyBUT0RPOiBFUlI/CisvLyAgICAgRGF0ZUZvcm1hdCAqYyA9ICBuZXcgR0xVRV9TWU0oIERhdGVGb3JtYXQgKSAoIHVjICk7CisvLyAjaWYgQ0FMX0ZFX0RFQlVHCisvLyAgICAgZnByaW50ZihzdGRlcnIsICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiB1ZGF0X29wZW49JXMgLT4+ICVwXG4iLCBsb2MuZ2V0TmFtZSgpLCAodm9pZCopYyk7CisvLyAjZW5kaWYKKy8vICAgICByZXR1cm4gYzsKKy8vIH0KKworCisgaW50MzJfdCBHTFVFX1NZTSAoIENhbGVuZGFyICkgOjogY291bnRBdmFpbGFibGUoKSB7CisgICAgaW50MzJfdCBjb3VudCA9ICBPSUNVX3VkYXRfY291bnRBdmFpbGFibGUoKTsKKyAgICByZXR1cm4gY291bnQ7CisgfQorIAorIAoraW50MzJfdCBHTFVFX1NZTSAoIENhbGVuZGFyICkgOjogYXBwZW5kQXZhaWxhYmxlKFVuaWNvZGVTdHJpbmcqIHN0cnMsIGludDMyX3QgaSwgaW50MzJfdCAvKmNvdW50Ki8pIHsKKyAgIGludCBhdmFpbCA9IE9JQ1VfdWRhdF9jb3VudEF2YWlsYWJsZSgpOworICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICBPSUNVX3VfaW5pdCgmc3RhdHVzKTsKKyNpZiBDQUxfRkVfREVCVUcKKyAgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIGF2YWlsICVkIC0gaW5pdCAlc1xuIiwgYXZhaWwsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworI2VuZGlmICAgCisgICAgZm9yKGludCBqPTA7ajxhdmFpbDtqKyspIHsKKyAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoT0lDVV91ZGF0X2dldEF2YWlsYWJsZShqKSk7CisgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCJAc3A9aWN1Iik7CisgICAgICAgICBpZihJU19PTERfVkVSU1RSKElDVUdMVUVfVkVSX1NUUikpIHsKKyAgICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCggSUNVR0xVRV9WRVJfU1RSW09MRF9WRVJTVFJfTUFKXSApOyAgLy8gWF95CisgICAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIElDVUdMVUVfVkVSX1NUUltPTERfVkVSU1RSX01JTl0gKTsgIC8vIHhfWQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCggSUNVR0xVRV9WRVJfU1RSW05FV19WRVJTVFJfTUFKXSApOyAgLy8gWHlfCisgICAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIElDVUdMVUVfVkVSX1NUUltORVdfVkVSU1RSX01JTl0gKTsgIC8vIHhZXworICAgICAgICAgfQorI2lmIENBTF9GRV9ERUJVRworICAgICAgICAgeyAKKyAgICAgICAgICAgIGNoYXIgZm9vWzk5OV07CisgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3MgPSBzdHJzW2kral0uZ2V0VGVybWluYXRlZEJ1ZmZlcigpOworICAgICAgICAgICAgdV9hdXN0cmNweShmb28sIHNzKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIGFwcGVuZGluZyBbJWQrJWQ9JWRdIDw8JXM+PlxuIiwgaSwgaiwgaStqLCBmb28pOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIE9JQ1VfdWNvbF9jb3VudEF2YWlsYWJsZSgpOworIH0KKworVU9CSkVDVF9ERUZJTkVfUlRUSV9JTVBMRU1FTlRBVElPTiggR0xVRV9TWU0oIENhbGVuZGFyICkgKQorCisKKworCisjZWxzZQorLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBUaGUgZm9sbG93aW5nIGNvZGUgcnVucyBpbnNpZGUgdGhlICdwcm92aWRlcicgdmVyc2lvbiAoaS5lLiBjdXJyZW50IElDVSkgPT09PT09PT09PSAqKi8KKworLy8gI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8IDQ5KQorLy8gI2RlZmluZSBDQUxfUFJPVklERVJfVU5TVVBQT1JURUQKKy8vICNlbmRpZgorCisjaWZuZGVmIENBTF9QUk9WSURFUl9VTlNVUFBPUlRFRAorLy8gZGVmaW5lIENvbGxhdG9yX1hYCisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorCisjaW5jbHVkZSAic2VydmxvYy5oIgorCisvLyBnZW5lcmF0ZSBsaXN0IG9mIHZlcnNpb25zCitzdGF0aWMKKyNpbmNsdWRlIDxpY3VnbHVlL2ZlX3Zlcmxpc3QuaD4KKworY2xhc3MgVmVyc2lvbkNhbGVuZGFyRmFjdG9yeSA6IHB1YmxpYyBMb2NhbGVLZXlGYWN0b3J5ICB7CitwdWJsaWM6CisgIFZlcnNpb25DYWxlbmRhckZhY3RvcnkoKTsKKyAgdmlydHVhbCBVT2JqZWN0KiBoYW5kbGVDcmVhdGUoY29uc3QgTG9jYWxlICZsb2MsIGludDMyX3Qga2luZCwgY29uc3QgSUNVU2VydmljZSogc2VydmljZSwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdDsKKyAgLy8gdmlydHVhbCBDYWxlbmRhciAqY3JlYXRlRm9ybWF0KFVDYWxlbmRhclN0eWxlICB0aW1lU3R5bGUsCisgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDYWxlbmRhclN0eWxlICBkYXRlU3R5bGUsCisgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICpsb2NhbGUsCisgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqcGF0dGVybiwKKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisgIHZpcnR1YWwgdm9pZCogZ2V0RHluYW1pY0NsYXNzSUQoKSBjb25zdDsgCisgIHN0YXRpYyB2b2lkKiBnZXRTdGF0aWNDbGFzc0lEKCkgOyAKKyAgdmlydHVhbCBjb25zdCBIYXNodGFibGUqIGdldFN1cHBvcnRlZElEcyhVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0OworcHJpdmF0ZToKKyAgY29uc3QgVW5pY29kZVN0cmluZyAqZ2V0U3VwcG9ydGVkSURzKGludDMyX3QgJmNvdW50LCBVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0OworCitwdWJsaWM6Cit2aXJ0dWFsIFVPYmplY3QqCisgY3JlYXRlKGNvbnN0IElDVVNlcnZpY2VLZXkmIGtleSwgY29uc3QgSUNVU2VydmljZSogc2VydmljZSwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCA7CisKK307CisKK1VPQkpFQ1RfREVGSU5FX1JUVElfSU1QTEVNRU5UQVRJT04oIFZlcnNpb25DYWxlbmRhckZhY3RvcnkgKQorCitVT2JqZWN0KgorVmVyc2lvbkNhbGVuZGFyRmFjdG9yeTo6Y3JlYXRlKGNvbnN0IElDVVNlcnZpY2VLZXkmIGtleSwgY29uc3QgSUNVU2VydmljZSogc2VydmljZSwgVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCAgeworICAvLyAgVW5pY29kZVN0cmluZyBpZDsKKyAgLy8gIGtleS5jdXJyZW50SUQoaWQpOworICAvLyAgTG9jYWxlIGwoaWQpOworICBMb2NhbGUgbDsKKyAgY29uc3QgTG9jYWxlS2V5JiBsa2V5ID0gKExvY2FsZUtleSYpa2V5OworICBsa2V5LmN1cnJlbnRMb2NhbGUobCk7CisgIGRlYnVnZnByaW50Zigoc3RkZXJyLCAiVkNhbEY6OmNyZWF0ZSgpIC4uICVzIGVycj0lc1xuIiwgKGNvbnN0IGNoYXIqKWwuZ2V0TmFtZSgpLCB1X2Vycm9yTmFtZShzdGF0dXMpKSk7CisKKyAgY2hhciBrd1sxMDBdOworICBpbnQzMl90IGt3bGVuID0gbC5nZXRLZXl3b3JkVmFsdWUoInNwIiwga3csIDEwMCwgc3RhdHVzKTsKKworICBVT2JqZWN0ICpmOworICBpZihrd2xlbj4wKSB7CisgICAgZGVidWdmcHJpbnRmKChzdGRlcnIsICJUcnlpbmcgZm9yIGt3PSVzXG4iLCBrdykpOworICAgIGYgPSBoYW5kbGVDcmVhdGUobCwgLTEsIHNlcnZpY2UsIHN0YXR1cyk7CisgIH0gZWxzZSB7CisgICAgZiA9IExvY2FsZUtleUZhY3Rvcnk6OmNyZWF0ZShrZXksc2VydmljZSxzdGF0dXMpOworICB9CisKKworICAKKyAgZGVidWdmcHJpbnRmKChzdGRlcnIsICJWQ2FsRjo6Y3JlYXRlKCkgLi4gPSAlcCBlcnI9JXNcbiIsICh2b2lkKilmLCB1X2Vycm9yTmFtZShzdGF0dXMpKSk7CisgIHJldHVybiBmOworfQorCitWZXJzaW9uQ2FsZW5kYXJGYWN0b3J5OjpWZXJzaW9uQ2FsZW5kYXJGYWN0b3J5KCkgOkxvY2FsZUtleUZhY3RvcnkoTG9jYWxlS2V5RmFjdG9yeTo6VklTSUJMRSl7CisjaWYgQ0FMX0ZFX0RFQlVHCisgIHByaW50ZigiVkNhbEY6IGhpISBwaWQ9JWQsIHRoaXM9JXBcbiIsIGdldHBpZCgpLCAodm9pZCopdGhpcyk7CisjZW5kaWYKK30KK1VPYmplY3QqIFZlcnNpb25DYWxlbmRhckZhY3Rvcnk6OmhhbmRsZUNyZWF0ZShjb25zdCBMb2NhbGUgJmxvYywgaW50MzJfdCBraW5kLCBjb25zdCBJQ1VTZXJ2aWNlKiBzZXJ2aWNlLCBVRXJyb3JDb2RlJiBzdGF0dXMpIGNvbnN0IHsKKyAgLy9Mb2NhbGUgbG9jKGxvY2FsZSk7CisgICAgLy8gcHVsbCBvZmYgcHJvdmlkZXIgIworICAgIGNoYXIgcHJvdmlkZXJbMjAwXTsKKyNpZiBDQUxfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ2FsRjpDQyAlc1xuIiwgbG9jLmdldE5hbWUoKSk7CisjZW5kaWYKKyAgICBpbnQzMl90IGxlbiA9IGxvYy5nZXRLZXl3b3JkVmFsdWUoInNwIiwgcHJvdmlkZXIsIDIwMCwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKXx8bGVuPT0wKSByZXR1cm4gTlVMTDsKKyNpZiBDQUxfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ2FsRjpLV1Y+ICVzLyVkXG4iLCB1X2Vycm9yTmFtZShzdGF0dXMpLCBsZW4pOworI2VuZGlmCisgICAgcHJvdmlkZXJbbGVuXT0wOworI2lmIENBTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDYWxGOktXViAlc1xuIiwgcHJvdmlkZXIpOworI2VuZGlmCisgICAgaWYoc3RybmNtcChwcm92aWRlciwiaWN1IiwzKSkgcmV0dXJuIE5VTEw7CisgICAgY29uc3QgY2hhciAqaWN1dmVyPXByb3ZpZGVyKzM7CisjaWYgQ0FMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNhbEY6SUNVViAlc1xuIiwgaWN1dmVyKTsKKyNlbmRpZgorICAgIAorI2lmIGRlZmluZWQoR0xVRV9WRVIpCisjdW5kZWYgR0xVRV9WRVIKKyNlbmRpZgorI2RlZmluZSBHTFVFX1ZFUih4KSBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwiJWMvJWN8JWMvJWNcbiIsIGljdXZlclswXSwoI3gpWzBdLGljdXZlclsxXSwoI3gpWzJdKSk7ICBpZihDTVBfVkVSU1RSKGljdXZlciwgKCN4KSkpIHsgQ2FsZW5kYXIgKmMgPSBuZXcgZ2x1ZSAjIyBDYWxlbmRhciAjIyB4IChsb2MsIHN0YXR1cyk7IGRlYnVnZnByaW50Zigoc3RkZXJyLCAiVkNhbEY6OkNDICVzIC0+ICVwXG4iLCBsb2MuZ2V0TmFtZSgpLCBjKSk7IHJldHVybiBjOyB9CisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorI2lmIENBTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDYWxGOkNDICVzIGZhaWxlZFxuIiwgbG9jLmdldE5hbWUoKSk7CisjZW5kaWYKKworICAgIHJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBjb25zdCBVbmljb2RlU3RyaW5nICpnTG9jYWxlc0RhdGUgPSBOVUxMOworc3RhdGljICBpbnQzMl90IGdMb2NDb3VudERhdGUgPSAwOyAKKworY29uc3QgSGFzaHRhYmxlICpWZXJzaW9uQ2FsZW5kYXJGYWN0b3J5OjpnZXRTdXBwb3J0ZWRJRHMgKFVFcnJvckNvZGUmIHN0YXR1cykgY29uc3QgeworICAvLyBmcm9tIGNvbGwuY3BwCisgIEhhc2h0YWJsZSAqX2lkcyA9IE5VTEw7CisgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgIGludDMyX3QgY291bnQgPSAwOworICAgIF9pZHMgPSBuZXcgSGFzaHRhYmxlKHN0YXR1cyk7CisgICAgaWYgKF9pZHMpIHsKKyAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcgKiBpZGxpc3QgPSAvKiBfZGVsZWdhdGUgLT4gKi8gZ2V0U3VwcG9ydGVkSURzKGNvdW50LCBzdGF0dXMpOworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIF9pZHMtPnB1dChpZGxpc3RbaV0sICh2b2lkKil0aGlzLCBzdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgICBkZWxldGUgX2lkczsKKyAgICAgICAgICBfaWRzID0gTlVMTDsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgc3RhdHVzID0gVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICB9CisgICAgZGVidWdmcHJpbnRmKChzdGRlcnIsIlZDYWxGOiBoYXNoPSVwLCBjb3VudD0lZCwgZXJyPSVzXG4iLCAodm9pZCopX2lkcywgY291bnQsIHVfZXJyb3JOYW1lKHN0YXR1cykpKTsKKyAgfQorICByZXR1cm4gX2lkczsKK30KKworY29uc3QgVW5pY29kZVN0cmluZworKlZlcnNpb25DYWxlbmRhckZhY3Rvcnk6OmdldFN1cHBvcnRlZElEcyhpbnQzMl90ICZjb3VudCwgVUVycm9yQ29kZSAmLypzdGF0dXMqLykgY29uc3QgeworICBpZihnTG9jYWxlc0RhdGU9PU5VTEwpIHsKKyAgICBjb3VudCA9IDA7CisgICAgCisgICAgCisgICAgLyogZ2F0aGVyIGNvdW50cyAqLworCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisjZGVmaW5lIEdMVUVfVkVSKHgpIGNvdW50ICs9IGdsdWUgIyMgQ2FsZW5kYXIgIyMgeCA6OiBjb3VudEF2YWlsYWJsZSgpOworI2luY2x1ZGUgImljdWdsdWUvZ2x2ZXIuaCIKKworI2lmIENBTF9GRV9ERUJVRworICAgIHByaW50ZigiVkNhbEY6IGNvdW50PSVkXG4iLCBjb3VudCk7CisjZW5kaWYKKyAgICBVbmljb2RlU3RyaW5nICpzdHJzID0gbmV3ICBVbmljb2RlU3RyaW5nW2NvdW50XTsKKyAgICBpbnQzMl90IGkgPSAwOworCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisjZGVmaW5lIEdMVUVfVkVSKHgpIGkgKz0gZ2x1ZSAjIyBDYWxlbmRhciAjIyB4IDo6IGFwcGVuZEF2YWlsYWJsZShzdHJzLCBpLCBjb3VudCk7CisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorCisjaWYgQ0FMX0ZFX0RFQlVHCisgICAgcHJpbnRmKCJWQ2FsRjogYXBwZW5kZWQgY291bnQ9JWRcbiIsIGNvdW50KTsKKyNlbmRpZgorCisgICAgZ0xvY0NvdW50RGF0ZSA9IGNvdW50OworICAgIGdMb2NhbGVzRGF0ZSA9IHN0cnM7CisgIH0KKyAgY291bnQgPSBnTG9jQ291bnREYXRlOworICByZXR1cm4gZ0xvY2FsZXNEYXRlOworfQorCisKKy8qIFBsdWdpbiBDb2RlICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXZlcnNpb24uaD4KKworc3RhdGljIFVSZWdpc3RyeUtleSBya2NhbCA9IE5VTEw7CisKK3ZvaWQgY2FsX3Byb3ZpZGVyX3JlZ2lzdGVyKFVFcnJvckNvZGUgJnN0YXR1cykgeworICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwgImFib3V0IHRvIHJlZ2lzdGVyIFZDYWxGXG4iKSk7CisgIHJrY2FsID0gQ2FsZW5kYXI6OnJlZ2lzdGVyRmFjdG9yeShuZXcgVmVyc2lvbkNhbGVuZGFyRmFjdG9yeSgpLCBzdGF0dXMpOworICBkZWJ1Z2ZwcmludGYoKHN0ZGVyciwgIi4uIHJlZ2lzdGVyZWQgVkNhbEYsIGtleT0lcFxuIiwgKHZvaWQqKXJrY2FsKSk7Cit9CisKK3ZvaWQgY2FsX3Byb3ZpZGVyX3VucmVnaXN0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIENhbGVuZGFyOjp1bnJlZ2lzdGVyKHJrY2FsLCBzdGF0dXMpOworfQorCisjZWxzZQorCisvKiBubyBvcC0gdGhpcyBJQ1UgZG9lc24ndCBzdXBwb3J0IGRhdGUgcHJvdmlkZXJzICovCisKK3ZvaWQgY2FsX3Byb3ZpZGVyX3JlZ2lzdGVyKFVFcnJvckNvZGUgJikgeworICAvLyBub3Qgc3VwcG9ydGVkCit9CisKK3ZvaWQgY2FsX3Byb3ZpZGVyX3VucmVnaXN0ZXIoVUVycm9yQ29kZSAmKSB7CisgIC8vIG5vdCBzdXBwb3J0ZWQKK30KKworI2VuZGlmCisKKy8qIFBsdWdpbi0gb25seSBJQ1UgNC40KyAqLworI2lmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+IDQpIHx8ICgoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU09PTQpJiYoVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0+MykpCisjaW5jbHVkZSAidW5pY29kZS9pY3VwbHVnLmgiCisKK1VfQ0FQSSBVUGx1Z1Rva2VuUmV0dXJuIFVfRVhQT1JUMiBjYWxfcHJvdmlkZXJfcGx1Z2luIChVUGx1Z0RhdGEgKmRhdGEsIFVQbHVnUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworVV9DQVBJIFVQbHVnVG9rZW5SZXR1cm4gVV9FWFBPUlQyIGNhbF9wcm92aWRlcl9wbHVnaW4gKFVQbHVnRGF0YSAqZGF0YSwgVVBsdWdSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgIHN3aXRjaChyZWFzb24pIHsKKyAgY2FzZSBVUExVR19SRUFTT05fUVVFUlk6CisgICAgdXBsdWdfc2V0UGx1Z05hbWUoZGF0YSwgIkNhbGVuZGFyIFByb3ZpZGVyIFBsdWdpbiIpOworICAgIHVwbHVnX3NldFBsdWdMZXZlbChkYXRhLCBVUExVR19MRVZFTF9ISUdIKTsKKyAgICBicmVhazsKKyAgY2FzZSBVUExVR19SRUFTT05fTE9BRDoKKyAgICBjYWxfcHJvdmlkZXJfcmVnaXN0ZXIoKnN0YXR1cyk7CisgICAgYnJlYWs7CisgIGNhc2UgVVBMVUdfUkVBU09OX1VOTE9BRDoKKyAgICBjYWxfcHJvdmlkZXJfdW5yZWdpc3Rlcigqc3RhdHVzKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsgLyogbm90IGhhbmRsZWQgKi8KKyAgfQorICByZXR1cm4gVVBMVUdfVE9LRU47Cit9CisjZWxzZQorCisvKiAKKyAgIE5vdGU6IHRoaXMgSUNVIHZlcnNpb24gbXVzdCBleHBsaWNpdGx5IGNhbGwgJ2NhbF9wcm92aWRlcl9wbHVnaW4nCisqLworCisjZW5kaWYgLyogcGx1Z2luICovCisKKyNlbmRpZiAvKiBwcm92aWRlciBzaWRlICh2cyB0YXJnZXQpICovCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvY29sbF9mZS5jcHAgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvY29sbF9mZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyNDQyOQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9jb2xsX2ZlLmNwcApAQCAtMCwwICsxLDUxNCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBDT0xMX0ZFX0RFQlVHCisjZGVmaW5lIENPTExfRkVfREVCVUcgMAorI2VuZGlmCisKKyNpbmNsdWRlIDxpY3VnbHVlL2ljdWdsdWUuaD4KKyNpbmNsdWRlIDx1bmljb2RlL2NvbGwuaD4KKy8vI2luY2x1ZGUgPHVuaWNvZGUvdGJsY29sbC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidW5pY29kZS91c3RyaW5nLmgiCisKKyNpZiBDT0xMX0ZFX0RFQlVHCisjZGVmaW5lIGRlYnVnZnByaW50Zih4KSBmcHJpbnRmIHgKKyNlbHNlCisjZGVmaW5lIGRlYnVnZnByaW50Zih4KQorI2VuZGlmCisKKy8qCisgKiBCZWZvcmUgSUNVIDUwLjAuMiAoNTBtMikgLSB0aGVyZSB3YXMgYSBkaWZmZXJlbnQgY29sbGF0b3Igc2lnbmF0dXJlLgorICogc2VlOiB0aWNrZXQ6OTQ2MCB0aWNrZXQ6OTM0NgorICovCisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNTApIHx8ICgoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU09PTUwKSYmKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNPT0wKSYmKFVfSUNVX1ZFUlNJT05fUEFUQ0hMRVZFTF9OVU08MikpCisjZGVmaW5lIFBSRV81MF8wXzJfQ09MTEFUT1IKKyNkZWZpbmUgQ09OU1RfQkVGT1JFXzUwXzBfMiBjb25zdAorI2RlZmluZSBDT05TVF9BRlRFUl81MF8wXzIgCisjZGVmaW5lIFJFRl9BRlRFUl81MF8wXzIKKyNlbHNlCisvKiAiY3VycmVudCIgQVBJICovCisjZGVmaW5lIENPTlNUX0JFRk9SRV81MF8wXzIKKyNkZWZpbmUgQ09OU1RfQUZURVJfNTBfMF8yIGNvbnN0CisjZGVmaW5lIFJFRl9BRlRFUl81MF8wXzIgJgorI2VuZGlmCisKKy8qKgorICogTWFjcm8gdG8gZGVmaW5lIHRoZSBDb2xsYXRvcl9nbHVlXzRfMiBjbGFzcyAKKyAqLworI2RlZmluZSBHTFVFX1ZFUih4KSBjbGFzcyBHTFVFX1NZTV9WKCBDb2xsYXRvciwgeCApIDogcHVibGljIENvbGxhdG9yIHsgIFwKKyAgICBcCisgIHB1YmxpYzogIHN0YXRpYyBDb2xsYXRvciAqY3JlYXRlKGNvbnN0IExvY2FsZSAmbG9jLCBjb25zdCBjaGFyICp2ZXIpOyBcCisgIHByaXZhdGU6IFVDb2xsYXRvciAqX3RoaXM7IEdMVUVfU1lNX1YoIENvbGxhdG9yLCB4ICkgKCBVQ29sbGF0b3IqIHRuICkgOiBfdGhpcyh0bil7fSBcCisgICAgdmlydHVhbCB+IEdMVUVfU1lNX1YgKCBDb2xsYXRvciwgeCkgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCB2b2lkKiBnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIHZvaWQqIGdldFN0YXRpY0NsYXNzSUQoKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCBDb2xsYXRvciogY2xvbmUoKSBjb25zdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCBVQ29sbGF0aW9uUmVzdWx0IGNvbXBhcmUoY29uc3QgVW5pY29kZVN0cmluZyYsIGNvbnN0IFVuaWNvZGVTdHJpbmcmLCBVRXJyb3JDb2RlJikgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIFVDb2xsYXRpb25SZXN1bHQgY29tcGFyZShjb25zdCBVbmljb2RlU3RyaW5nJiwgY29uc3QgVW5pY29kZVN0cmluZyYsIGludDMyX3QsIFVFcnJvckNvZGUmKSBjb25zdDsgXAorICAgIHZpcnR1YWwgVUNvbGxhdGlvblJlc3VsdCBjb21wYXJlKGNvbnN0IFVDaGFyKiwgaW50MzJfdCwgY29uc3QgVUNoYXIqLCBpbnQzMl90LCBVRXJyb3JDb2RlJikgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIENvbGxhdGlvbktleSYgZ2V0Q29sbGF0aW9uS2V5KGNvbnN0IFVuaWNvZGVTdHJpbmcmLCBDb2xsYXRpb25LZXkmLCBVRXJyb3JDb2RlJikgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIENvbGxhdGlvbktleSYgZ2V0Q29sbGF0aW9uS2V5KGNvbnN0IFVDaGFyKiwgaW50MzJfdCwgQ29sbGF0aW9uS2V5JiwgVUVycm9yQ29kZSYpIGNvbnN0OyBcCisgICAgdmlydHVhbCBpbnQzMl90IGhhc2hDb2RlKCkgY29uc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCBDT05TVF9CRUZPUkVfNTBfMF8yIExvY2FsZSBnZXRMb2NhbGUoVUxvY0RhdGFMb2NhbGVUeXBlLCBVRXJyb3JDb2RlJikgY29uc3Q7IFwKKyAgICB2aXJ0dWFsIEVDb2xsYXRpb25TdHJlbmd0aCBnZXRTdHJlbmd0aCgpIGNvbnN0OyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RyZW5ndGgoRUNvbGxhdGlvblN0cmVuZ3RoKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVyc2lvbih1aW50OF90KikgY29uc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlKFVDb2xBdHRyaWJ1dGUsIFVDb2xBdHRyaWJ1dGVWYWx1ZSwgVUVycm9yQ29kZSYpIDsgXAorICAgIHZpcnR1YWwgVUNvbEF0dHJpYnV0ZVZhbHVlIGdldEF0dHJpYnV0ZShVQ29sQXR0cmlidXRlLCBVRXJyb3JDb2RlJikgQ09OU1RfQUZURVJfNTBfMF8yOyBcCisgICAgdmlydHVhbCB1aW50MzJfdCBzZXRWYXJpYWJsZVRvcChjb25zdCBVQ2hhciosIGludDMyX3QsIFVFcnJvckNvZGUmKTsgXAorICAgIHZpcnR1YWwgdWludDMyX3Qgc2V0VmFyaWFibGVUb3AoY29uc3QgVW5pY29kZVN0cmluZyBSRUZfQUZURVJfNTBfMF8yLCBVRXJyb3JDb2RlJik7ICAgICAgICBcCisgICAgdmlydHVhbCB2b2lkIHNldFZhcmlhYmxlVG9wKHVpbnQzMl90LCBVRXJyb3JDb2RlJik7ICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCB1aW50MzJfdCBnZXRWYXJpYWJsZVRvcChVRXJyb3JDb2RlJikgY29uc3Q7ICAgICAgICAgICAgICAgICBcCisgICAgdmlydHVhbCBDb2xsYXRvciogc2FmZUNsb25lKCkgQ09OU1RfQUZURVJfNTBfMF8yIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIGludDMyX3QgZ2V0U29ydEtleShjb25zdCBVbmljb2RlU3RyaW5nJiwgdWludDhfdCosIGludDMyX3QpIGNvbnN0OyBcCisgICAgdmlydHVhbCBpbnQzMl90IGdldFNvcnRLZXkoY29uc3QgVUNoYXIqLCBpbnQzMl90LCB1aW50OF90KiwgaW50MzJfdCkgY29uc3Q7IFwKKyAgcHVibGljOiBzdGF0aWMgaW50MzJfdCBjb3VudEF2YWlsYWJsZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHVibGljOiBzdGF0aWMgaW50MzJfdCBhcHBlbmRBdmFpbGFibGUoVW5pY29kZVN0cmluZyogc3RycywgaW50MzJfdCBpLCBpbnQzMl90IGNvdW50KTsgXAorICBwdWJsaWM6IHZpcnR1YWwgaW50MzJfdCBpbnRlcm5hbEdldFNob3J0RGVmaW5pdGlvblN0cmluZyhjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKmJ1ZmZlciwgaW50MzJfdCBjYXBhY2l0eSwgVUVycm9yQ29kZSAmc3RhdHVzKSBjb25zdDsgXAorICB9OworCisvKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFRoZSBmb2xsb3dpbmcgY29kZSBydW5zIGluc2lkZSB0aGUgJ3RhcmdldCcgdmVyc2lvbiAoaS5lLiBvbGQgSUNVKSA9PT09PT09PT09ICoqLworI2lmIGRlZmluZWQgKCBJQ1VHTFVFX1ZFUiApCisKKworLy8gdGhlc2UgZnJvbSB0Ymxjb2xsLmgKK3N0YXRpYyBDb2xsYXRvcjo6RUNvbGxhdGlvblN0cmVuZ3RoIF9nZXRFQ29sbGF0aW9uU3RyZW5ndGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ29sbGF0aW9uU3RyZW5ndGggJnN0cmVuZ3RoKSAKK3sKKyAgICBzd2l0Y2ggKHN0cmVuZ3RoKQorICAgIHsKKyAgICBjYXNlIFVDT0xfUFJJTUFSWSA6CisgICAgICAgIHJldHVybiBDb2xsYXRvcjo6UFJJTUFSWTsKKyAgICBjYXNlIFVDT0xfU0VDT05EQVJZIDoKKyAgICAgICAgcmV0dXJuIENvbGxhdG9yOjpTRUNPTkRBUlk7CisgICAgY2FzZSBVQ09MX1RFUlRJQVJZIDoKKyAgICAgICAgcmV0dXJuIENvbGxhdG9yOjpURVJUSUFSWTsKKyAgICBjYXNlIFVDT0xfUVVBVEVSTkFSWSA6CisgICAgICAgIHJldHVybiBDb2xsYXRvcjo6UVVBVEVSTkFSWTsKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgcmV0dXJuIENvbGxhdG9yOjpJREVOVElDQUw7CisgICAgfQorfQorCitzdGF0aWMgVUNvbGxhdGlvblN0cmVuZ3RoIF9nZXRVQ29sbGF0aW9uU3RyZW5ndGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbGxhdG9yOjpFQ29sbGF0aW9uU3RyZW5ndGggJnN0cmVuZ3RoKSAKK3sKKyAgICBzd2l0Y2ggKHN0cmVuZ3RoKQorICAgIHsKKyAgICBjYXNlIENvbGxhdG9yOjpQUklNQVJZIDoKKyAgICAgICAgcmV0dXJuIFVDT0xfUFJJTUFSWTsKKyAgICBjYXNlIENvbGxhdG9yOjpTRUNPTkRBUlkgOgorICAgICAgICByZXR1cm4gVUNPTF9TRUNPTkRBUlk7CisgICAgY2FzZSBDb2xsYXRvcjo6VEVSVElBUlkgOgorICAgICAgICByZXR1cm4gVUNPTF9URVJUSUFSWTsKKyAgICBjYXNlIENvbGxhdG9yOjpRVUFURVJOQVJZIDoKKyAgICAgICAgcmV0dXJuIFVDT0xfUVVBVEVSTkFSWTsKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgcmV0dXJuIFVDT0xfSURFTlRJQ0FMOworICAgIH0KK30KKworCisKKy8qIGNvZGUgZm9yIHNvbWUgdmVyc2lvbiAqLworI2luY2x1ZGUgPGljdWdsdWUvZ2x1cmVuLmg+CisKKyNpbmNsdWRlICJvaWN1LmgiCisKKy8qIEV4cGFuZCBHTFVFX1ZFUiB0byBkZWZpbmUgdGhlIGNsYXNzICovCisjaWZkZWYgR0xVRV9WRVIKK0dMVUVfVkVSKCBJQ1VHTFVFX1ZFUiApCisjZW5kaWYKKworR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IH4gR0xVRV9TWU0oQ29sbGF0b3IpICgpIHsKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiB1Y29sX2Nsb3NlIik7CisjZW5kaWYKKyAgICBPSUNVX3Vjb2xfY2xvc2UoX3RoaXMpOworfQorCisjaWYgMAorVV9DRlVOQyBpbnQzMl90IFVfQ0FMTENPTlYKK0dMVUVfU1lNICggZ2x1ZV9jYWxjU29ydEtleSkgKGNvbnN0ICAgIFVDb2xsYXRvciAgICAqY29sbCwKKyAgICAgICAgY29uc3QgICAgVUNoYXIgICAgICAgICpzb3VyY2UsCisgICAgICAgIGludDMyX3QgICAgICAgIHNvdXJjZUxlbmd0aCwKKyAgICAgICAgdWludDhfdCAgICAgICAgKipyZXN1bHQsCisgICAgICAgIHVpbnQzMl90ICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgIFVCb29sIGFsbG9jYXRlU0tCdWZmZXIsCisgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKyNlbmRpZgorCitDb2xsYXRvciAqCitHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogY3JlYXRlIChjb25zdCBMb2NhbGUgJmxvYywgY29uc3QgY2hhciAqLyp2ZXIqLykgeworICAvLyBUT0RPOiBzYXZlICd2ZXInIG9mZi4KKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBjaGFyIGxvY0J1ZlsyMDBdOworICAgIGNoYXIga3d2QnVmWzIwMF07CisgICAgaW50MzJfdCBsZW4gPSBsb2MuZ2V0S2V5d29yZFZhbHVlKCJjb2xsYXRpb24iLCBrd3ZCdWYsIDIwMCwgc3RhdHVzKTsKKyAgICBzdHJjcHkobG9jQnVmLGxvYy5nZXRCYXNlTmFtZSgpKTsKKyAgICBpZihsZW4+MCkgeworICAgICAgICBzdHJjYXQobG9jQnVmLCJAY29sbGF0b3I9Iik7CisgICAgICAgIHN0cmNhdChsb2NCdWYsa3d2QnVmKTsKKyAgICB9CisgICAgVUNvbGxhdG9yICogdWMgPSAgT0lDVV91Y29sX29wZW4oIGxvY0J1Ziwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgcmV0dXJuIE5VTEw7IC8vIFRPRE86IEVSUj8KKyAgICBDb2xsYXRvciAqYyA9ICBuZXcgR0xVRV9TWU0oIENvbGxhdG9yICkgKCB1YyApOworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIHVjb2xfb3Blbj0lcyAtPj4gJXBcbiIsIGxvY0J1ZiwgYyk7CisjZW5kaWYKKyAgICByZXR1cm4gYzsKK30KKworVU9CSkVDVF9ERUZJTkVfUlRUSV9JTVBMRU1FTlRBVElPTiggR0xVRV9TWU0oIENvbGxhdG9yICkgKQorCitDb2xsYXRvciogR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGNsb25lKCkgY29uc3QgIHsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiBjbG9uZSAlcCAtPiAiICwgdGhpcyk7CisjZW5kaWYKKyAgICBVQ29sbGF0b3IgKmNsYyA9IE9JQ1VfdWNvbF9zYWZlQ2xvbmUoIF90aGlzLCBOVUxMLCAwLCAmc3RhdHVzKTsKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiAuLiBzYWZlY2xvbmUgJXMgX3RoaXMgJXAtPiAlcCAiICwgdV9lcnJvck5hbWUoc3RhdHVzKSwgX3RoaXMsIGNsYyk7CisjZW5kaWYKKyAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKXx8Y2xjPT1OVUxMKSByZXR1cm4gTlVMTDsKKyAgICBDb2xsYXRvciAqYyA9IG5ldyBHTFVFX1NZTSggQ29sbGF0b3IgKSAoIGNsYyApOworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIC4uIHdyYXAoJXApIC0+ICVwXG4iLCBjbGMsIGMpOworI2VuZGlmCisKKyAgICByZXR1cm4gYzsKK30KKworCitVQ29sbGF0aW9uUmVzdWx0IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBjb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcmLCBjb25zdCBVbmljb2RlU3RyaW5nJiwgVUVycm9yQ29kZSYpIGNvbnN0ICB7CisgICAgcmV0dXJuIChVQ29sbGF0aW9uUmVzdWx0KTA7Cit9CisKKworVUNvbGxhdGlvblJlc3VsdCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogY29tcGFyZShjb25zdCBVbmljb2RlU3RyaW5nJiwgY29uc3QgVW5pY29kZVN0cmluZyYsIGludDMyX3QsIFVFcnJvckNvZGUmKSBjb25zdCAgeworICAgIHJldHVybiAoVUNvbGxhdGlvblJlc3VsdCkwOworfQorCisKK1VDb2xsYXRpb25SZXN1bHQgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGNvbXBhcmUoY29uc3QgVUNoYXIqIHMsIGludDMyX3Qgc2wsIGNvbnN0IFVDaGFyKiBkICwgaW50MzJfdCBkbCwgVUVycm9yQ29kZSYvKmUqLyApIGNvbnN0ICB7CisgICAgcmV0dXJuIE9JQ1VfdWNvbF9zdHJjb2xsKF90aGlzLCBzLCBzbCwgZCwgZGwpOworfQorCisjaW5jbHVkZSAidW5pY29kZS9zb3J0a2V5LmgiCisKK3N0YXRpYyBDb2xsYXRpb25LZXkga2s7CisKK0NvbGxhdGlvbktleSYgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGdldENvbGxhdGlvbktleShjb25zdCBVbmljb2RlU3RyaW5nJiwgQ29sbGF0aW9uS2V5JiwgVUVycm9yQ29kZSYpIGNvbnN0ICB7CisgIC8vI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiBHQ0sgLSBub3RpbXAiKTsKKyAgICAvLyNlbmRpZgorcmV0dXJuIGtrOworfQorCisKK0NvbGxhdGlvbktleSYgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGdldENvbGxhdGlvbktleShjb25zdCBVQ2hhciosIGludDMyX3QsIENvbGxhdGlvbktleSYsIFVFcnJvckNvZGUmKSBjb25zdCAgeworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIEdLSzIgLSBub3RpbXAiKTsKK3JldHVybiBrazsKK30KKworCitpbnQzMl90IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBoYXNoQ29kZSgpIGNvbnN0ICB7CisgICAgcmV0dXJuIDA7Cit9CisKKworQ09OU1RfQkVGT1JFXzUwXzBfMiBMb2NhbGUgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGdldExvY2FsZShVTG9jRGF0YUxvY2FsZVR5cGUsIFVFcnJvckNvZGUmKSBjb25zdCAgeworICAgIHJldHVybiBMb2NhbGUoKTsKK30KKworCitDb2xsYXRvcjo6RUNvbGxhdGlvblN0cmVuZ3RoCisgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGdldFN0cmVuZ3RoKCkgY29uc3QgIHsKKyAgICByZXR1cm4gX2dldEVDb2xsYXRpb25TdHJlbmd0aChPSUNVX3Vjb2xfZ2V0U3RyZW5ndGgoX3RoaXMpKTsKK30KKworCit2b2lkIEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBzZXRTdHJlbmd0aChFQ29sbGF0aW9uU3RyZW5ndGggcykgIHsKKyAgICBPSUNVX3Vjb2xfc2V0U3RyZW5ndGgoX3RoaXMsIF9nZXRVQ29sbGF0aW9uU3RyZW5ndGgocykpOworfQorCisKK3ZvaWQgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGdldFZlcnNpb24odWludDhfdCopIGNvbnN0ICB7Cit9CisKKwordm9pZCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogc2V0QXR0cmlidXRlKFVDb2xBdHRyaWJ1dGUsIFVDb2xBdHRyaWJ1dGVWYWx1ZSwgVUVycm9yQ29kZSYpIHsKK30KKworCitVQ29sQXR0cmlidXRlVmFsdWUgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IGdldEF0dHJpYnV0ZShVQ29sQXR0cmlidXRlLCBVRXJyb3JDb2RlJikgQ09OU1RfQUZURVJfNTBfMF8yIHsKK3JldHVybiAoVUNvbEF0dHJpYnV0ZVZhbHVlKTA7Cit9CisKKwordWludDMyX3QgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IHNldFZhcmlhYmxlVG9wKGNvbnN0IFVDaGFyKiwgaW50MzJfdCwgVUVycm9yQ29kZSYpICB7CityZXR1cm4gMDsKK30KKworCit1aW50MzJfdCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogc2V0VmFyaWFibGVUb3AoY29uc3QgVW5pY29kZVN0cmluZyBSRUZfQUZURVJfNTBfMF8yLCBVRXJyb3JDb2RlJikgIHsKK3JldHVybiAwOworfQorCisKK3ZvaWQgR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IHNldFZhcmlhYmxlVG9wKHVpbnQzMl90LCBVRXJyb3JDb2RlJikgIHsKK30KKworCit1aW50MzJfdCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0VmFyaWFibGVUb3AoVUVycm9yQ29kZSYpIGNvbnN0ICB7CityZXR1cm4gMDsKK30KKworCitDb2xsYXRvciogR0xVRV9TWU0gKCBDb2xsYXRvciApIDo6IHNhZmVDbG9uZSgpIENPTlNUX0FGVEVSXzUwXzBfMiB7CisgICAgcmV0dXJuIGNsb25lKCk7Cit9CisKKworaW50MzJfdCBHTFVFX1NZTSAoIENvbGxhdG9yICkgOjogZ2V0U29ydEtleShjb25zdCBVbmljb2RlU3RyaW5nJiBzLCB1aW50OF90KmJ1ZiwgaW50MzJfdCBsZW4pIGNvbnN0ICB7CisjaWYgQ09MTF9GRV9ERUJVRworICBmcHJpbnRmKHN0ZGVyciwgICJWQ0YgIiBJQ1VHTFVFX1ZFUl9TVFIgIiBHU0siKTsKKyNlbmRpZgorICAgIHJldHVybiBnZXRTb3J0S2V5KHMuZ2V0QnVmZmVyKCkscy5sZW5ndGgoKSwgYnVmLCBsZW4pOworfQorCisKKworCitpbnQzMl90IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBnZXRTb3J0S2V5KGNvbnN0IFVDaGFyKnMsIGludDMyX3QgbCwgdWludDhfdCpkLCBpbnQzMl90IGIpIGNvbnN0ICB7CisjaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIEdLUyIpOworI2VuZGlmCisgICAgcmV0dXJuIE9JQ1VfdWNvbF9nZXRTb3J0S2V5KF90aGlzLCBzLGwsZCxiKTsKK30KKworaW50MzJfdCBHTFVFX1NZTSAoQ29sbGF0b3IgKSA6OiAgaW50ZXJuYWxHZXRTaG9ydERlZmluaXRpb25TdHJpbmcoY29uc3QgY2hhciAqbG9jYWxlLCBjaGFyICpidWZmZXIsIGludDMyX3QgY2FwYWNpdHksIFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3QgeworICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkgcmV0dXJuIDA7CisgIGludDMyX3QgaW50UmVzID0gT0lDVV91Y29sX2dldFNob3J0RGVmaW5pdGlvblN0cmluZyhfdGhpcywgbG9jYWxlLCBidWZmZXIsIGNhcGFjaXR5LCAmc3RhdHVzKTsKKyAgaW50MzJfdCBuZXdSZXMgPSAoaW50UmVzICs9IDcpOyAvKiBfUElDVTM4ICovCisgIGludDMyX3QgcmVtYWluQ2FwID0gY2FwYWNpdHkgLSBuZXdSZXM7CisKKyAgaWYocmVtYWluQ2FwIDwgMCAmJiBVX1NVQ0NFU1Moc3RhdHVzKSkgeworICAgIHN0YXR1cyA9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SOyAvKiByYW4gb3V0IG9mIHNwYWNlIG9uIG91ciB3YXRjaCAqLworICB9CisgIGlmKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgY2hhciAqcCA9IGJ1ZmZlcitzdHJsZW4oYnVmZmVyKTsKKyAgICBzdHJuY2F0KHAsIl9QSUNVIiw1KTsKKyAgICBwICs9NSA7CisgICAgQ1BZX1ZFUlNUUihwLCBJQ1VHTFVFX1ZFUl9TVFIpOworICAgIHAgKz0yOworICAgIGlmKHJlbWFpbkNhcD4wKSB7CisgICAgICAqKHArKyk9MDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG5ld1JlczsKK30KKworCisKKyBpbnQzMl90IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBjb3VudEF2YWlsYWJsZSgpIHsKKyAgICBpbnQzMl90IGNvdW50ID0gIE9JQ1VfdWNvbF9jb3VudEF2YWlsYWJsZSgpOworICAgIHJldHVybiBjb3VudDsKKyB9CisgCisgCitpbnQzMl90IEdMVUVfU1lNICggQ29sbGF0b3IgKSA6OiBhcHBlbmRBdmFpbGFibGUoVW5pY29kZVN0cmluZyogc3RycywgaW50MzJfdCBpLCBpbnQzMl90IC8qY291bnQqLykgeworICAgaW50IGF2YWlsID0gT0lDVV91Y29sX2NvdW50QXZhaWxhYmxlKCk7CisgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgIE9JQ1VfdV9pbml0KCZzdGF0dXMpOworI2lmIENPTExfRkVfREVCVUcKKyAgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIGF2YWlsICVkIC0gaW5pdCAlc1xuIiwgYXZhaWwsIHVfZXJyb3JOYW1lKHN0YXR1cykpOworI2VuZGlmICAgCisgICAgZm9yKGludCBqPTA7ajxhdmFpbDtqKyspIHsKKyAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoT0lDVV91Y29sX2dldEF2YWlsYWJsZShqKSk7CisgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCJAc3A9aWN1Iik7CisgICAgICAgICAKKyAgICAgICAgIGlmKElTX09MRF9WRVJTVFIoSUNVR0xVRV9WRVJfU1RSKSkgeworICAgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCBJQ1VHTFVFX1ZFUl9TVFJbT0xEX1ZFUlNUUl9NQUpdICk7ICAvLyBYX3kKKyAgICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCggSUNVR0xVRV9WRVJfU1RSW09MRF9WRVJTVFJfTUlOXSApOyAgLy8geF9ZCisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCBJQ1VHTFVFX1ZFUl9TVFJbTkVXX1ZFUlNUUl9NQUpdICk7ICAvLyBYeV8KKyAgICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZCggSUNVR0xVRV9WRVJfU1RSW05FV19WRVJTVFJfTUlOXSApOyAgLy8geFlfCisgICAgICAgICB9CisKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgICAgICB7IAorICAgICAgICAgICAgY2hhciBmb29bOTk5XTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcyA9IHN0cnNbaStqXS5nZXRUZXJtaW5hdGVkQnVmZmVyKCk7CisgICAgICAgICAgICB1X2F1c3RyY3B5KGZvbywgc3MpOworICAgICAgICAgICAgZGVidWdmcHJpbnRmKChzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgYXBwZW5kaW5nIFslZCslZD0lZF0gPDwlcz4+XG4iLCBpLCBqLCBpK2osIGZvbykpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIE9JQ1VfdWNvbF9jb3VudEF2YWlsYWJsZSgpOworIH0KKworCisKKyNlbHNlCisvKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFRoZSBmb2xsb3dpbmcgY29kZSBydW5zIGluc2lkZSB0aGUgJ3Byb3ZpZGVyJyB2ZXJzaW9uIChpLmUuIGN1cnJlbnQgSUNVKSA9PT09PT09PT09ICoqLworCisvLyBkZWZpbmUgQ29sbGF0b3JfWFgKKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisKKy8vIGdlbmVyYXRlIGxpc3Qgb2YgdmVyc2lvbnMKK3N0YXRpYworI2luY2x1ZGUgPGljdWdsdWUvZmVfdmVybGlzdC5oPgorCitjbGFzcyBWZXJzaW9uQ29sbGF0b3JGYWN0b3J5IDogcHVibGljIENvbGxhdG9yRmFjdG9yeSB7CitwdWJsaWM6CisgIHZpcnR1YWwgQ29sbGF0b3IgKmNyZWF0ZUNvbGxhdG9yKGNvbnN0IExvY2FsZSAmbG9jKTsKKyAgdmlydHVhbCBjb25zdCBVbmljb2RlU3RyaW5nICpnZXRTdXBwb3J0ZWRJRHMoaW50MzJfdCAmY291bnQsIFVFcnJvckNvZGUgJnN0YXR1cyk7CisgIHZpcnR1YWwgdm9pZCogZ2V0RHluYW1pY0NsYXNzSUQoKSBjb25zdDsgCisgIHN0YXRpYyB2b2lkKiBnZXRTdGF0aWNDbGFzc0lEKCkgOyAKK307CisKK1VPQkpFQ1RfREVGSU5FX1JUVElfSU1QTEVNRU5UQVRJT04oIFZlcnNpb25Db2xsYXRvckZhY3RvcnkgKQorCitDb2xsYXRvciAqVmVyc2lvbkNvbGxhdG9yRmFjdG9yeTo6Y3JlYXRlQ29sbGF0b3IoY29uc3QgTG9jYWxlICZsb2MpIHsKKyAgICAvLyBwdWxsIG9mZiBwcm92aWRlciAjCisgICAgY2hhciBwcm92aWRlclsyMDBdOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0Y6Q0MgJXNcbiIsIGxvYy5nZXROYW1lKCkpOworI2VuZGlmCisgICAgaW50MzJfdCBsZW4gPSBsb2MuZ2V0S2V5d29yZFZhbHVlKCJzcCIsIHByb3ZpZGVyLCAyMDAsIHN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKHN0YXR1cyl8fGxlbj09MCkgcmV0dXJuIE5VTEw7CisjaWYgQ09MTF9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpLV1Y+ICVzLyVkXG4iLCB1X2Vycm9yTmFtZShzdGF0dXMpLCBsZW4pOworI2VuZGlmCisgICAgcHJvdmlkZXJbbGVuXT0wOworI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0Y6S1dWICVzXG4iLCBwcm92aWRlcik7CisjZW5kaWYKKyAgICBpZihzdHJuY21wKHByb3ZpZGVyLCJpY3UiLDMpKSByZXR1cm4gTlVMTDsKKyAgICBjb25zdCBjaGFyICppY3V2ZXI9cHJvdmlkZXIrMzsKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgZnByaW50ZihzdGRlcnIsICAiVkNGOklDVVYgJXNcbiIsIGljdXZlcik7CisjZW5kaWYKKyAgICAKKyNpZiBkZWZpbmVkKEdMVUVfVkVSKQorI3VuZGVmIEdMVUVfVkVSCisjZW5kaWYKKworI2RlZmluZSBHTFVFX1ZFUih4KSBcCisgICAgZGVidWdmcHJpbnRmKChzdGRlcnIsIiVjLyVjfCVjLyVjXG4iLCBpY3V2ZXJbMF0sKCN4KVswXSxpY3V2ZXJbMV0sKCN4KVsyXSkpOyAgXAorICAgIGlmKENNUF9WRVJTVFIoaWN1dmVyLCAoI3gpKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgQ29sbGF0b3IgKmMgPSBnbHVlICMjIENvbGxhdG9yICMjIHggOjogY3JlYXRlKGxvYywgaWN1dmVyKTsgXAorICAgICAgZGVidWdmcHJpbnRmKChzdGRlcnIsICJWQ0Y6OkNDICVzIC0+ICVwXG4iLCBsb2MuZ2V0TmFtZSgpLCBjKSk7IFwKKyAgICAgIHJldHVybiBjOyBcCisgICAgfQorCisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorI2lmIENPTExfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0Y6Q0MgJXMgZmFpbGVkXG4iLCBsb2MuZ2V0TmFtZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGNvbnN0IFVuaWNvZGVTdHJpbmcgKmdMb2NhbGVzID0gTlVMTDsKK3N0YXRpYyAgaW50MzJfdCBnTG9jQ291bnQgPSAwOyAKKworY29uc3QgVW5pY29kZVN0cmluZworKlZlcnNpb25Db2xsYXRvckZhY3Rvcnk6OmdldFN1cHBvcnRlZElEcyhpbnQzMl90ICZjb3VudCwgVUVycm9yQ29kZSAmLypzdGF0dXMqLykgeworICBpZihnTG9jYWxlcz09TlVMTCkgeworICAgIGNvdW50ID0gMDsKKyAgICAKKyAgICAKKyAgICAvKiBnYXRoZXIgY291bnRzICovCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisjZGVmaW5lIEdMVUVfVkVSKHgpIGNvdW50ICs9IGdsdWUgIyMgQ29sbGF0b3IgIyMgeCA6OiBjb3VudEF2YWlsYWJsZSgpOworI2luY2x1ZGUgImljdWdsdWUvZ2x2ZXIuaCIKKworI2lmIENPTExfRkVfREVCVUcKKyAgICBwcmludGYoIlZDRjogY291bnQ9JWRcbiIsIGNvdW50KTsKKyNlbmRpZgorICAgIFVuaWNvZGVTdHJpbmcgKnN0cnMgPSBuZXcgIFVuaWNvZGVTdHJpbmdbY291bnRdOworICAgIGludDMyX3QgaSA9IDA7CisKKyNpZiBkZWZpbmVkKEdMVUVfVkVSKQorI3VuZGVmIEdMVUVfVkVSCisjZW5kaWYKKyNkZWZpbmUgR0xVRV9WRVIoeCkgaSArPSBnbHVlICMjIENvbGxhdG9yICMjIHggOjogYXBwZW5kQXZhaWxhYmxlKHN0cnMsIGksIGNvdW50KTsKKyNpbmNsdWRlICJpY3VnbHVlL2dsdmVyLmgiCisKKyNpZiBDT0xMX0ZFX0RFQlVHCisgICAgcHJpbnRmKCJWQ0Y6IGFwcGVuZGVkIGNvdW50PSVkXG4iLCBjb3VudCk7CisjZW5kaWYKKworICAgIGdMb2NDb3VudCA9IGNvdW50OworICAgIGdMb2NhbGVzID0gc3RyczsKKyAgfQorICBjb3VudCA9IGdMb2NDb3VudDsKKyAgcmV0dXJuIGdMb2NhbGVzOworfQorCisKKy8qIFBsdWdpbiBDb2RlICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXZlcnNpb24uaD4KKworc3RhdGljIFVSZWdpc3RyeUtleSByayA9IE5VTEw7CisKK3ZvaWQgY29sbF9wcm92aWRlcl9yZWdpc3RlcihVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgcmsgPSBDb2xsYXRvcjo6cmVnaXN0ZXJGYWN0b3J5KG5ldyBWZXJzaW9uQ29sbGF0b3JGYWN0b3J5KCksIHN0YXR1cyk7Cit9CisKK3ZvaWQgY29sbF9wcm92aWRlcl91bnJlZ2lzdGVyKFVFcnJvckNvZGUgJnN0YXR1cykgeworICBDb2xsYXRvcjo6dW5yZWdpc3Rlcihyaywgc3RhdHVzKTsKK30KKworLyogUGx1Z2luLSBvbmx5IElDVSA0LjQrICovCisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID4gNCkgfHwgKChVX0lDVV9WRVJTSU9OX01BSk9SX05VTT09NCkmJihVX0lDVV9WRVJTSU9OX01JTk9SX05VTT4zKSkKKyNpbmNsdWRlICJ1bmljb2RlL2ljdXBsdWcuaCIKKworVV9DQVBJIFVQbHVnVG9rZW5SZXR1cm4gVV9FWFBPUlQyIGNvbGxfcHJvdmlkZXJfcGx1Z2luIChVUGx1Z0RhdGEgKmRhdGEsIFVQbHVnUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworVV9DQVBJIFVQbHVnVG9rZW5SZXR1cm4gVV9FWFBPUlQyIGNvbGxfcHJvdmlkZXJfcGx1Z2luIChVUGx1Z0RhdGEgKmRhdGEsIFVQbHVnUmVhc29uIHJlYXNvbiwgVUVycm9yQ29kZSAqc3RhdHVzKQoreworICBzd2l0Y2gocmVhc29uKSB7CisgIGNhc2UgVVBMVUdfUkVBU09OX1FVRVJZOgorICAgIHVwbHVnX3NldFBsdWdOYW1lKGRhdGEsICJDb2xsYXRpb24gUHJvdmlkZXIgUGx1Z2luIik7CisgICAgdXBsdWdfc2V0UGx1Z0xldmVsKGRhdGEsIFVQTFVHX0xFVkVMX0hJR0gpOworICAgIGJyZWFrOworICBjYXNlIFVQTFVHX1JFQVNPTl9MT0FEOgorICAgIGNvbGxfcHJvdmlkZXJfcmVnaXN0ZXIoKnN0YXR1cyk7CisgICAgYnJlYWs7CisgIGNhc2UgVVBMVUdfUkVBU09OX1VOTE9BRDoKKyAgICBjb2xsX3Byb3ZpZGVyX3VucmVnaXN0ZXIoKnN0YXR1cyk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7IC8qIG5vdCBoYW5kbGVkICovCisgIH0KKyAgcmV0dXJuIFVQTFVHX1RPS0VOOworfQorI2Vsc2UKKworLyogCisgICBOb3RlOiB0aGlzIElDVSB2ZXJzaW9uIG11c3QgZXhwbGljaXRseSBjYWxsICdjb2xsX3Byb3ZpZGVyX3BsdWdpbicKKyovCisKKyNlbmRpZiAvKiBwbHVnaW4gKi8KKworI2VuZGlmIC8qIHByb3ZpZGVyIHNpZGUgKHZzIHRhcmdldCkgKi8KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9kYXRlX2ZlLmNwcCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9kYXRlX2ZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGVmZTFlCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2RhdGVfZmUuY3BwCkBAIC0wLDAgKzEsMzc4IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIERBVEVfRkVfREVCVUcKKyNkZWZpbmUgREFURV9GRV9ERUJVRyAwCisjZW5kaWYKKworI2luY2x1ZGUgPGljdWdsdWUvaWN1Z2x1ZS5oPgorI2luY2x1ZGUgInVuaWNvZGUvdWRhdC5oIgorLy8jaW5jbHVkZSA8dW5pY29kZS90Ymxjb2xsLmg+CisjaW5jbHVkZSAidW5pY29kZS9kYXRlZm10LmgiCisjaW5jbHVkZSAidW5pY29kZS9zbXBkdGZtdC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidW5pY29kZS91c3RyaW5nLmgiCisjaW5jbHVkZSAidW5pY29kZS9ncmVnb2NhbC5oIgorCisKKworLyoqCisgKiBNYWNybyB0byBkZWZpbmUgdGhlIENvbGxhdG9yX2dsdWVfNF8yIGNsYXNzIAorICovCisjaWZkZWYgR0xVRV9WRVIKKyNlcnJvciBHTFVFX1ZFUiBpcyBkZWZpbmVkCisjZW5kaWYKKworI2RlZmluZSBHTFVFX1ZFUih4KSBjbGFzcyBHTFVFX1NZTV9WKCBEYXRlRm9ybWF0LCB4ICkgOiBwdWJsaWMgRGF0ZUZvcm1hdCB7ICBcCisgIHB1YmxpYzogIHN0YXRpYyBEYXRlRm9ybWF0ICpjcmVhdGUoVURhdGVGb3JtYXRTdHlsZSAgdGltZVN0eWxlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURhdGVGb3JtYXRTdHlsZSAgZGF0ZVN0eWxlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxvY2FsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgdHpJRExlbmd0aCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpwYXR0ZXJuLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzLCBjb25zdCBMb2NhbGUgJmxvYywgY29uc3QgY2hhciAqdmVyKTsgXAorICBwcml2YXRlOiBVRGF0ZUZvcm1hdCAqX3RoaXM7IEdMVUVfU1lNX1YoIERhdGVGb3JtYXQsIHggKSAoIFVEYXRlRm9ybWF0KiB0biApOyBcCisgICAgdmlydHVhbCB+IEdMVUVfU1lNX1YgKCBEYXRlRm9ybWF0LCB4KSAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIHZvaWQqIGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgdm9pZCogZ2V0U3RhdGljQ2xhc3NJRCgpIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2aXJ0dWFsIFVuaWNvZGVTdHJpbmcmIGZvcm1hdCggIENhbGVuZGFyJiBjYWwsIFVuaWNvZGVTdHJpbmcmIGFwcGVuZFRvLCBGaWVsZFBvc2l0aW9uJiBwb3MpIGNvbnN0OyBcCisgICAgdmlydHVhbCB2b2lkIHBhcnNlKCBjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0LCBDYWxlbmRhciYgY2FsLCBQYXJzZVBvc2l0aW9uJiBwb3MpIGNvbnN0OyBcCisgICAgdmlydHVhbCBGb3JtYXQqIGNsb25lKHZvaWQpIGNvbnN0OyBcCisgIHB1YmxpYzogc3RhdGljIGludDMyX3QgY291bnRBdmFpbGFibGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitwdWJsaWM6IHN0YXRpYyBpbnQzMl90IGFwcGVuZEF2YWlsYWJsZShVbmljb2RlU3RyaW5nKiBzdHJzLCBpbnQzMl90IGksIGludDMyX3QgY291bnQpOyBcCisgIH07IFwKKworCisKKy8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gVGhlIGZvbGxvd2luZyBjb2RlIHJ1bnMgaW5zaWRlIHRoZSAndGFyZ2V0JyB2ZXJzaW9uIChpLmUuIG9sZCBJQ1UpID09PT09PT09PT0gKiovCisjaWYgZGVmaW5lZCAoIElDVUdMVUVfVkVSICkKKworCisKKy8qIGNvZGUgZm9yIHNvbWUgdmVyc2lvbiAqLworI2luY2x1ZGUgPGljdWdsdWUvZ2x1cmVuLmg+CisjaW5jbHVkZSAib2ljdS5oIgorCisjaWZkZWYgR0xVRV9WRVIKK0dMVUVfVkVSKCBJQ1VHTFVFX1ZFUiApCisjZW5kaWYKKworR0xVRV9TWU0gKERhdGVGb3JtYXQgKSA6OiBHTFVFX1NZTShEYXRlRm9ybWF0KSAoIFVEYXRlRm9ybWF0KiB0bikgOgorIF90aGlzKHRuKQoreyAKKworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgYWRvcHRDYWxlbmRhcihuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoc3RhdHVzKSk7Cit9CisKK0dMVUVfU1lNICggRGF0ZUZvcm1hdCApIDo6IH4gR0xVRV9TWU0oRGF0ZUZvcm1hdCkgKCkgeworI2lmIERBVEVfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIHVkYXRfY2xvc2UiKTsKKyNlbmRpZgorICAgIE9JQ1VfdWRhdF9jbG9zZShfdGhpcyk7Cit9CisKK0RhdGVGb3JtYXQgKgorR0xVRV9TWU0gKCBEYXRlRm9ybWF0ICkgOjogY3JlYXRlKFVEYXRlRm9ybWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqdHpJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhbGUgJmxvYywgY29uc3QgY2hhciAqLyp2ZXIqLykgeworICAvLyBUT0RPOiBzYXZlIHZlcnNpb24KKyAgLy9jaGFyIGxvY0J1ZlsyMDBdOworICAvL2NoYXIga3d2QnVmWzIwMF07CisgIFVEYXRlRm9ybWF0ICogdWMgPSAgT0lDVV91ZGF0X29wZW4oIHRpbWVTdHlsZSwgZGF0ZVN0eWxlLCBsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6SUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6SURMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSByZXR1cm4gTlVMTDsgLy8gVE9ETzogRVJSPworICAgIERhdGVGb3JtYXQgKmMgPSAgbmV3IEdMVUVfU1lNKCBEYXRlRm9ybWF0ICkgKCB1YyApOworI2lmIERBVEVfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIHVkYXRfb3Blbj0lcyAtPj4gJXBcbiIsIGxvYy5nZXROYW1lKCksICh2b2lkKiljKTsKKyNlbmRpZgorICAgIHJldHVybiBjOworfQorCitVbmljb2RlU3RyaW5nJiBHTFVFX1NZTSAoRGF0ZUZvcm1hdCApIDo6IGZvcm1hdCggIENhbGVuZGFyJiBjYWwsIFVuaWNvZGVTdHJpbmcmIGFwcGVuZFRvLCBGaWVsZFBvc2l0aW9uJiBwb3MpIGNvbnN0Cit7CisjaWYgREFURV9GRV9ERUJVRworICBmcHJpbnRmKHN0ZGVyciwgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIC0gZm9ybWF0dGluZy4gXG4iKTsKKyNlbmRpZgorICBpbnQzMl90IGxlbiA9IGFwcGVuZFRvLmxlbmd0aCgpOworCisgIFVDaGFyIGp1bmtbMjAwXTsKKyAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisKKyAgVUZpZWxkUG9zaXRpb24gcG9zMjsKKworICBpbnQzMl90IG5sZW4gPSBPSUNVX3VkYXRfZm9ybWF0KF90aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbC5nZXRUaW1lKHN0YXR1cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1cyk7CisKKyAgLy8gdG9kbzogdXNlIHBvczIKKyAgcG9zLnNldEJlZ2luSW5kZXgobGVuKTsKKyAgcG9zLnNldEVuZEluZGV4KGxlbiArPSBubGVuKTsKKyAgYXBwZW5kVG8uYXBwZW5kKGp1bmssIG5sZW4pOworCisgIHJldHVybiBhcHBlbmRUbzsKK30KKwordm9pZCAgR0xVRV9TWU0gKERhdGVGb3JtYXQgKSA6OiBwYXJzZSggY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCwgQ2FsZW5kYXImIGNhbCwgUGFyc2VQb3NpdGlvbiYgcG9zKSBjb25zdAoreworICByZXR1cm47Cit9CisKK0Zvcm1hdCogIEdMVUVfU1lNIChEYXRlRm9ybWF0ICkgOjogY2xvbmUodm9pZCkgY29uc3QKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKKworCisgaW50MzJfdCBHTFVFX1NZTSAoIERhdGVGb3JtYXQgKSA6OiBjb3VudEF2YWlsYWJsZSgpIHsKKyAgICBpbnQzMl90IGNvdW50ID0gIE9JQ1VfdWRhdF9jb3VudEF2YWlsYWJsZSgpOworICAgIHJldHVybiBjb3VudDsKKyB9CisgCisgCitpbnQzMl90IEdMVUVfU1lNICggRGF0ZUZvcm1hdCApIDo6IGFwcGVuZEF2YWlsYWJsZShVbmljb2RlU3RyaW5nKiBzdHJzLCBpbnQzMl90IGksIGludDMyX3QgLypjb3VudCovKSB7CisgICBpbnQgYXZhaWwgPSBPSUNVX3VkYXRfY291bnRBdmFpbGFibGUoKTsKKyAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgT0lDVV91X2luaXQoJnN0YXR1cyk7CisjaWYgREFURV9GRV9ERUJVRworICAgZnByaW50ZihzdGRlcnIsICAiVkNGICIgSUNVR0xVRV9WRVJfU1RSICIgYXZhaWwgJWQgLSBpbml0ICVzXG4iLCBhdmFpbCwgdV9lcnJvck5hbWUoc3RhdHVzKSk7CisjZW5kaWYgICAKKyAgICBmb3IoaW50IGo9MDtqPGF2YWlsO2orKykgeworICAgICAgICAgc3Ryc1tpK2pdLmFwcGVuZChPSUNVX3VkYXRfZ2V0QXZhaWxhYmxlKGopKTsKKyAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIkBzcD1pY3UiKTsKKyAgICAgICAgIHN0cnNbaStqXS5hcHBlbmQoIElDVUdMVUVfVkVSX1NUUlswXSApOyAgLy8gWF95CisgICAgICAgICBzdHJzW2kral0uYXBwZW5kKCBJQ1VHTFVFX1ZFUl9TVFJbMl0gKTsgIC8vIHhfWQorI2lmIERBVEVfRkVfREVCVUcKKyAgICAgICAgIHsgCisgICAgICAgICAgICBjaGFyIGZvb1s5OTldOworICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNzID0gc3Ryc1tpK2pdLmdldFRlcm1pbmF0ZWRCdWZmZXIoKTsKKyAgICAgICAgICAgIHVfYXVzdHJjcHkoZm9vLCBzcyk7CisgICAgICAgICAgICAvLyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRiAiIElDVUdMVUVfVkVSX1NUUiAiIGFwcGVuZGluZyBbJWQrJWQ9JWRdIDw8JXM+PlxuIiwgaSwgaiwgaStqLCBmb28pOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIE9JQ1VfdWNvbF9jb3VudEF2YWlsYWJsZSgpOworIH0KKworVU9CSkVDVF9ERUZJTkVfUlRUSV9JTVBMRU1FTlRBVElPTiggR0xVRV9TWU0oIERhdGVGb3JtYXQgKSApCisKKworCisKKyNlbHNlCisvKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFRoZSBmb2xsb3dpbmcgY29kZSBydW5zIGluc2lkZSB0aGUgJ3Byb3ZpZGVyJyB2ZXJzaW9uIChpLmUuIGN1cnJlbnQgSUNVKSA9PT09PT09PT09ICoqLworCisjaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNDkpCisjZGVmaW5lIERBVEVfUFJPVklERVJfVU5TVVBQT1JURUQKKyNlbmRpZgorCisjaWZuZGVmIERBVEVfUFJPVklERVJfVU5TVVBQT1JURUQKKy8vIGRlZmluZSBDb2xsYXRvcl9YWAorI2luY2x1ZGUgImljdWdsdWUvZ2x2ZXIuaCIKKworLy8gZ2VuZXJhdGUgbGlzdCBvZiB2ZXJzaW9ucworc3RhdGljCisjaW5jbHVkZSA8aWN1Z2x1ZS9mZV92ZXJsaXN0Lmg+CisKK2NsYXNzIFZlcnNpb25EYXRlRm9ybWF0RmFjdG9yeSA6IHB1YmxpYyBVT2JqZWN0ICB7CitwdWJsaWM6CisgIHZpcnR1YWwgRGF0ZUZvcm1hdCAqY3JlYXRlRm9ybWF0KFVEYXRlRm9ybWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURhdGVGb3JtYXRTdHlsZSAgZGF0ZVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqdHpJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgdHpJRExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMpOworICB2aXJ0dWFsIGNvbnN0IFVuaWNvZGVTdHJpbmcgKmdldFN1cHBvcnRlZElEcyhpbnQzMl90ICZjb3VudCwgVUVycm9yQ29kZSAmc3RhdHVzKTsKKyAgdmlydHVhbCB2b2lkKiBnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0OyAKKyAgc3RhdGljIHZvaWQqIGdldFN0YXRpY0NsYXNzSUQoKSA7IAorfTsKKworVU9CSkVDVF9ERUZJTkVfUlRUSV9JTVBMRU1FTlRBVElPTiggVmVyc2lvbkRhdGVGb3JtYXRGYWN0b3J5ICkKKworRGF0ZUZvcm1hdCAqVmVyc2lvbkRhdGVGb3JtYXRGYWN0b3J5OjpjcmVhdGVGb3JtYXQoVURhdGVGb3JtYXRTdHlsZSAgdGltZVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0U3R5bGUgIGRhdGVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHR6SURMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzKSB7CisgICAgTG9jYWxlIGxvYyhsb2NhbGUpOworICAgIC8vIHB1bGwgb2ZmIHByb3ZpZGVyICMKKyAgICBjaGFyIHByb3ZpZGVyWzIwMF07CisjaWYgREFURV9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpDQyAlc1xuIiwgbG9jLmdldE5hbWUoKSk7CisjZW5kaWYKKyAgICBpbnQzMl90IGxlbiA9IGxvYy5nZXRLZXl3b3JkVmFsdWUoInNwIiwgcHJvdmlkZXIsIDIwMCwgKnN0YXR1cyk7CisgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpfHxsZW49PTApIHJldHVybiBOVUxMOworI2lmIERBVEVfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0Y6S1dWPiAlcy8lZFxuIiwgdV9lcnJvck5hbWUoKnN0YXR1cyksIGxlbik7CisjZW5kaWYKKyAgICBwcm92aWRlcltsZW5dPTA7CisjaWYgREFURV9GRV9ERUJVRworICAgIGZwcmludGYoc3RkZXJyLCAgIlZDRjpLV1YgJXNcbiIsIHByb3ZpZGVyKTsKKyNlbmRpZgorICAgIGlmKHN0cm5jbXAocHJvdmlkZXIsImljdSIsMykpIHJldHVybiBOVUxMOworICAgIGNvbnN0IGNoYXIgKmljdXZlcj1wcm92aWRlciszOworI2lmIERBVEVfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0Y6SUNVViAlc1xuIiwgaWN1dmVyKTsKKyNlbmRpZgorICAgIAorI2lmIGRlZmluZWQoR0xVRV9WRVIpCisjdW5kZWYgR0xVRV9WRVIKKyNlbmRpZgorI2RlZmluZSBHTFVFX1ZFUih4KSAvKnByaW50ZigiJWMvJWN8JWMvJWNcbiIsIGljdXZlclswXSwoI3gpWzBdLGljdXZlclsxXSwoI3gpWzJdKTsqLyAgaWYoaWN1dmVyWzBdPT0gKCN4KVswXSAmJiBpY3V2ZXJbMV09PSgjeClbMl0pIHsgRGF0ZUZvcm1hdCAqYyA9IGdsdWUgIyMgRGF0ZUZvcm1hdCAjIyB4IDo6IGNyZWF0ZSh0aW1lU3R5bGUsZGF0ZVN0eWxlLGxvY2FsZSx0eklELHR6SURMZW5ndGgscGF0dGVybixwYXR0ZXJuTGVuZ3RoLHN0YXR1cyxsb2MsaWN1dmVyKTsgLypmcHJpbnRmKHN0ZGVyciwgIlZDRjo6Q0MgJXMgLT4gJXBcbiIsIGxvYy5nZXROYW1lKCksIGMpOyovIHJldHVybiBjOyB9CisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorI2lmIERBVEVfRkVfREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwgICJWQ0Y6Q0MgJXMgZmFpbGVkXG4iLCBsb2MuZ2V0TmFtZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGNvbnN0IFVuaWNvZGVTdHJpbmcgKmdMb2NhbGVzRGF0ZSA9IE5VTEw7CitzdGF0aWMgIGludDMyX3QgZ0xvY0NvdW50RGF0ZSA9IDA7IAorCisKK2NvbnN0IFVuaWNvZGVTdHJpbmcKKypWZXJzaW9uRGF0ZUZvcm1hdEZhY3Rvcnk6OmdldFN1cHBvcnRlZElEcyhpbnQzMl90ICZjb3VudCwgVUVycm9yQ29kZSAmLypzdGF0dXMqLykgeworICBpZihnTG9jYWxlc0RhdGU9PU5VTEwpIHsKKyAgICBjb3VudCA9IDA7CisgICAgCisgICAgCisgICAgLyogZ2F0aGVyIGNvdW50cyAqLworCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisjZGVmaW5lIEdMVUVfVkVSKHgpIGNvdW50ICs9IGdsdWUgIyMgRGF0ZUZvcm1hdCAjIyB4IDo6IGNvdW50QXZhaWxhYmxlKCk7CisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorCisjaWYgREFURV9GRV9ERUJVRworICAgIHByaW50ZigiVkNGOiBjb3VudD0lZFxuIiwgY291bnQpOworI2VuZGlmCisgICAgVW5pY29kZVN0cmluZyAqc3RycyA9IG5ldyAgVW5pY29kZVN0cmluZ1tjb3VudF07CisgICAgaW50MzJfdCBpID0gMDsKKworI2lmIGRlZmluZWQoR0xVRV9WRVIpCisjdW5kZWYgR0xVRV9WRVIKKyNlbmRpZgorI2RlZmluZSBHTFVFX1ZFUih4KSBpICs9IGdsdWUgIyMgRGF0ZUZvcm1hdCAjIyB4IDo6IGFwcGVuZEF2YWlsYWJsZShzdHJzLCBpLCBjb3VudCk7CisjaW5jbHVkZSAiaWN1Z2x1ZS9nbHZlci5oIgorCisjaWYgREFURV9GRV9ERUJVRworICAgIHByaW50ZigiVkNGOiBhcHBlbmRlZCBjb3VudD0lZFxuIiwgY291bnQpOworI2VuZGlmCisKKyAgICBnTG9jQ291bnREYXRlID0gY291bnQ7CisgICAgZ0xvY2FsZXNEYXRlID0gc3RyczsKKyAgfQorICBjb3VudCA9IGdMb2NDb3VudERhdGU7CisgIHJldHVybiBnTG9jYWxlc0RhdGU7Cit9CisKKworLyogUGx1Z2luIENvZGUgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPgorCisvL3N0YXRpYyBVUmVnaXN0cnlLZXkgcmtkYXRlID0gTlVMTDsKKworc3RhdGljIFZlcnNpb25EYXRlRm9ybWF0RmFjdG9yeSB2ZGY7CisKK2V4dGVybiAiQyIgVURhdGVGb3JtYXQgKnZlcnNpb25EYXRlRm9ybWF0T3BlbmVyKFVEYXRlRm9ybWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqdHpJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cykgeworICBEYXRlRm9ybWF0ICpkZiA9IHZkZi5jcmVhdGVGb3JtYXQodGltZVN0eWxlLGRhdGVTdHlsZSxsb2NhbGUsdHpJRCx0eklETGVuZ3RoLHBhdHRlcm4scGF0dGVybkxlbmd0aCxzdGF0dXMpOworICAvLyBwcmludGYoIkhleSEgSSBnb3Q6ICVzIC0+ICVwXG4iLCBsb2NhbGUsIGRmKTsKKyAgcmV0dXJuIChVRGF0ZUZvcm1hdCopZGY7Cit9CisKK3ZvaWQgZGF0ZV9wcm92aWRlcl9yZWdpc3RlcihVRXJyb3JDb2RlICZzdGF0dXMpIHsKKyAgdWRhdF9yZWdpc3Rlck9wZW5lcih2ZXJzaW9uRGF0ZUZvcm1hdE9wZW5lciwgJnN0YXR1cyk7CisgIC8vICAgcmtkYXRlID0gRGF0ZUZvcm1hdDo6cmVnaXN0ZXJGYWN0b3J5KG5ldyBWZXJzaW9uRGF0ZUZvcm1hdEZhY3RvcnkoKSwgc3RhdHVzKTsKK30KKwordm9pZCBkYXRlX3Byb3ZpZGVyX3VucmVnaXN0ZXIoVUVycm9yQ29kZSAmc3RhdHVzKSB7CisgIHVkYXRfdW5yZWdpc3Rlck9wZW5lcih2ZXJzaW9uRGF0ZUZvcm1hdE9wZW5lciwgJnN0YXR1cyk7Cit9CisKKyNlbHNlCisKKy8qIG5vIG9wLSB0aGlzIElDVSBkb2Vzbid0IHN1cHBvcnQgZGF0ZSBwcm92aWRlcnMgKi8KKwordm9pZCBkYXRlX3Byb3ZpZGVyX3JlZ2lzdGVyKFVFcnJvckNvZGUgJikgeworICAvLyBub3Qgc3VwcG9ydGVkCit9CisKK3ZvaWQgZGF0ZV9wcm92aWRlcl91bnJlZ2lzdGVyKFVFcnJvckNvZGUgJikgeworICAvLyBub3Qgc3VwcG9ydGVkCit9CisKKyNlbmRpZgorCisvKiBQbHVnaW4tIG9ubHkgSUNVIDQuNCsgKi8KKyNpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPiA0KSB8fCAoKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNPT00KSYmKFVfSUNVX1ZFUlNJT05fTUlOT1JfTlVNPjMpKQorI2luY2x1ZGUgInVuaWNvZGUvaWN1cGx1Zy5oIgorCitVX0NBUEkgVVBsdWdUb2tlblJldHVybiBVX0VYUE9SVDIgZGF0ZV9wcm92aWRlcl9wbHVnaW4gKFVQbHVnRGF0YSAqZGF0YSwgVVBsdWdSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCitVX0NBUEkgVVBsdWdUb2tlblJldHVybiBVX0VYUE9SVDIgZGF0ZV9wcm92aWRlcl9wbHVnaW4gKFVQbHVnRGF0YSAqZGF0YSwgVVBsdWdSZWFzb24gcmVhc29uLCBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgIHN3aXRjaChyZWFzb24pIHsKKyAgY2FzZSBVUExVR19SRUFTT05fUVVFUlk6CisgICAgdXBsdWdfc2V0UGx1Z05hbWUoZGF0YSwgIkRhdGUgUHJvdmlkZXIgUGx1Z2luIik7CisgICAgdXBsdWdfc2V0UGx1Z0xldmVsKGRhdGEsIFVQTFVHX0xFVkVMX0hJR0gpOworICAgIGJyZWFrOworICBjYXNlIFVQTFVHX1JFQVNPTl9MT0FEOgorICAgIGRhdGVfcHJvdmlkZXJfcmVnaXN0ZXIoKnN0YXR1cyk7CisgICAgYnJlYWs7CisgIGNhc2UgVVBMVUdfUkVBU09OX1VOTE9BRDoKKyAgICBkYXRlX3Byb3ZpZGVyX3VucmVnaXN0ZXIoKnN0YXR1cyk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7IC8qIG5vdCBoYW5kbGVkICovCisgIH0KKyAgcmV0dXJuIFVQTFVHX1RPS0VOOworfQorI2Vsc2UKKworLyogCisgICBOb3RlOiB0aGlzIElDVSB2ZXJzaW9uIG11c3QgZXhwbGljaXRseSBjYWxsICdkYXRlX3Byb3ZpZGVyX3BsdWdpbicKKyovCisKKyNlbmRpZiAvKiBwbHVnaW4gKi8KKworI2VuZGlmIC8qIHByb3ZpZGVyIHNpZGUgKHZzIHRhcmdldCkgKi8KZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9nbHVyZW4tYm90dG9tLmggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvZ2x1cmVuLWJvdHRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYmZiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvZ2x1cmVuLWJvdHRvbS5oCkBAIC0wLDAgKzEsMTIgQEAKKworI2VuZGlmCisKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvZ2x1cmVuLXRvcC5oIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2dsdXJlbi10b3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI4YmYxCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2dsdXJlbi10b3AuaApAQCAtMCwwICsxLDEyIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBfR0xVUkVOX0gKKyNkZWZpbmUgX0dMVVJFTl9ICisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvY29sbF9iZS5oIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9jb2xsX2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjYzdkMwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvY29sbF9iZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIF9DT0xMX0JFCisjZGVmaW5lIF9DT0xMX0JFCisKKyNpbmNsdWRlIDxpY3VnbHVlL2ljdWdsdWUuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vjb2xsLmg+IC8qIGZvciBkZWZpbml0aW9ucyAqLworCisjaWYgZGVmaW5lZChYUF9DUExVU1BMVVMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit2b2lkICogR0xVRV9TWU0odWNvbF9vcGVuKSAoY29uc3QgY2hhciAqbG9jYWxlKTsKK3ZvaWQgKiBHTFVFX1NZTSh1Y29sX2Nsb3NlKSAodm9pZCAqY29sbCk7Cit2b2lkICogR0xVRV9TWU0oCisKKworI2lmIGRlZmluZWQoWFBfQ1BMVVNQTFVTKSAKK30KKyNlbmRpZgorCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvaW5jbHVkZS9pY3VnbHVlL2NvbGxfZmUuaCBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvY29sbF9mZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjJmODUKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvaW5jbHVkZS9pY3VnbHVlL2NvbGxfZmUuaApAQCAtMCwwICsxLDI0IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBfQ09MTF9GRQorI2RlZmluZSBfQ09MTF9GRQorCisjaW5jbHVkZSA8aWN1Z2x1ZS9pY3VnbHVlLmg+CisjaW5jbHVkZSA8dW5pY29kZS9jb2xsLmg+CisKKyNpZiBkZWZpbmVkKFhQX0NQTFVTUExVUykKKworY2xhc3MgR0xVRV9TWU0oIEdsdWVGRUNvbGxhdG9yICkgOiBwdWJsaWMgQ29sbGF0b3IgeworCit9OworCisjZW5kaWYgLyogWFBfQ1BMVVNQTFVTICovCisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvZmVfdmVybGlzdC5oIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9mZV92ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyNzNjMwotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvZmVfdmVybGlzdC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisvKioKKyAqIFB1cnBvc2U6IGNyZWF0ZSBsb2NhbCBvciBzdGF0aWMgZmVfdmVybGlzdCBzdWNoIGFzOgorICogCisgKiAgIGNvbnN0IGNoYXIgKmZlX3Zlcmxpc3RbXSA9IHsgIjRfMiIsICI0XzJfMyIsIC4uLiwgTlVMTCB9OyAKKyAqLworCisjaWYgZGVmaW5lZChHTFVFX1ZFUikKKyN1bmRlZiBHTFVFX1ZFUgorI2VuZGlmCisKK2NvbnN0IGNoYXIgKmZlX3Zlcmxpc3RbXSA9IHsgCisjZGVmaW5lIEdMVUVfVkVSKHgpICAjeCAgLAorI2luY2x1ZGUgImljdWdsdWUvZ2x2ZXIuaCIKKyN1bmRlZiBHTFVFX1ZFUgorICAgIE5VTEwKK307CisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvaWN1Z2x1ZS5oIGIvbXVsdGkvcHJvai9wcm92aWRlci9nbHVlL2luY2x1ZGUvaWN1Z2x1ZS9pY3VnbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0ODU2MQotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9pbmNsdWRlL2ljdWdsdWUvaWN1Z2x1ZS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgX0lDVUdMVUVfSAorI2RlZmluZSBfSUNVR0xVRV9ICisKKy8qIEdldCB1dHlwZXMuaCBmcm9tIHdoYXRldmVyIElDVSB3ZSBhcmUgdW5kZXIgKi8KKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorCisjZGVmaW5lIEdMVUVfU1lNX1YoeCwgdikgZ2x1ZSAjIyB4ICMjIHYKKworLyoqCisgKiBob3cgdG8gcGFyc2UgYSB2ZXJzaW9uIHN0cmluZy4KKyAqIG9sZDogIDNfNl9YLCAzXzhfWCwgNF80X1gsIDRfOF9YCisgKiBuZXc6ICA0OV9YLCA1MF9YLCA1MV9YLCAuLi4KKyAqCisgKiBleGFtcGxlIHVzZToKKyAqICBjaGFyICpzdHIgPSAiNTBfMF8wIiwgc3RyMT0iNDlfMV8yIixzdHIyPSI0XzhfMV8xIjsKKyAqICBpZihJU19PTERfVkVSU0lPTihzdHIpKSB7CisgKiAgICBtYWogPSBzdHJbT0xEX1ZFUlNUUl9NQUpdOworICogICAgbWluID0gc3RyW09MRF9WRVJTVFJfTUlOXTsKKyAqICB9IGVsc2UgeworICogICAgbWFqID0gc3RyW05FV19WRVJTVFJfTUFKXTsKKyAqICAgIG1pbiA9IHN0cltORVdfVkVSU1RSX01JTl07CisgKiAgfQorICovCisjZGVmaW5lIElTX09MRF9WRVJTVFIoeCkgKCh4WzBdPCc0JykgfHwgKCh4WzBdPT0nNCcpICYmICh4WzJdPCc5JykgJiYgKHhbMl0+PScwJykpKQorI2RlZmluZSBPTERfVkVSU1RSX01BSiAwIAorI2RlZmluZSBPTERfVkVSU1RSX01JTiAyCisjZGVmaW5lIE5FV19WRVJTVFJfTUFKIDAKKyNkZWZpbmUgTkVXX1ZFUlNUUl9NSU4gMQorCisvKioKKyAqIGNvcHkgdmVyc2lvbiBpbnRvIGRzdFswXSBhbmQgZHN0WzFdCisgKiBkb2VzIG5vdCBtb2RpZnkgZHN0IHB0cgorICovCisjZGVmaW5lIENQWV9WRVJTVFIoZHN0LHZlcikgaWYoSVNfT0xEX1ZFUlNUUih2ZXIpKSBcCisgICAgeyBcCisgICAgICAoZHN0KVswXT12ZXJbT0xEX1ZFUlNUUl9NQUpdOyAgICAgICAgICAgICAgXAorICAgICAgKGRzdClbMV09dmVyW09MRF9WRVJTVFJfTUlOXTsgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoZHN0KVswXT12ZXJbTkVXX1ZFUlNUUl9NQUpdOyAgICAgICBcCisgICAgICAoZHN0KVsxXT12ZXJbTkVXX1ZFUlNUUl9NSU5dOyAgICAgICAgICAgICBcCisgICAgfQorCisvKioKKyAqIGNvbXBhcmUgYSB2ZXJzdHIgdG8gYSBzdHJpbmcKKyAqIEBwYXJhbSBzdHIgYSAyIGNoYXIgc3RyaW5nIHN1Y2ggYXMgIjUwIiwgIjQ0IiwgIjQ5IgorICogQHBhcmFtIHZlciBhIHZlcnN0ciBzdWNoIGFzICI1MF8wXzIiLCAiNF84XzFfMSIsIGV0YworICogQHJldHVybiB0cnVlIG9yIGZhbHNlCisgKi8KKworI2RlZmluZSBDTVBfVkVSU1RSKHN0cix2ZXIpIFwKKyAgKCAoSVNfT0xEX1ZFUlNUUih2ZXIpKSA/IFwKKyAgICAgKCBcCisgICAgICAoc3RyKVswXT09dmVyW09MRF9WRVJTVFJfTUFKXSAmJiAgICAgICAgICAgICAgXAorICAgICAgKHN0cilbMV09PXZlcltPTERfVkVSU1RSX01JTl0gXAorICAgICApOiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKHN0cilbMF09PXZlcltORVdfVkVSU1RSX01BSl0mJiAgICAgICBcCisgICAgICAoc3RyKVsxXT09dmVyW05FV19WRVJTVFJfTUlOXSAgICAgICAgICAgICBcCisgICAgICkgXAorICAgKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvZ2x1ZS9vaWN1LmggYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvb2ljdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmZiMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2dsdWUvb2ljdS5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIF9PSUNVCisjZGVmaW5lIF9PSUNVCisKKyNpbmNsdWRlICJ1bmljb2RlL3VjbGVhbi5oIgorLyoqCisgICB1Y2xlYW4uaAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCitPSUNVX3VfaW5pdChVRXJyb3JDb2RlICpzdGF0dXMpOworCisjaW5jbHVkZSAidW5pY29kZS91Y29sLmgiCisvKioKKyB1Y29sLmgKKyovCitVX1NUQUJMRSBVQ29sbGF0b3IqIFVfRVhQT1JUMiAKK09JQ1VfdWNvbF9vcGVuKGNvbnN0IGNoYXIgKmxvYywgVUVycm9yQ29kZSYgc3RhdHVzKTsKKworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK09JQ1VfdWNvbF9nZXRTaG9ydERlZmluaXRpb25TdHJpbmcoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBjYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCitPSUNVX3Vjb2xfY2xvc2UoVUNvbGxhdG9yKik7CisKK1VfU1RBQkxFIFVDb2xsYXRpb25SZXN1bHQgT0lDVV91Y29sX3N0cmNvbGwJKAljb25zdCBVQ29sbGF0b3IgKiAJY29sbCwKK2NvbnN0IFVDaGFyICogCXNvdXJjZSwKK2ludDMyX3QgCXNvdXJjZUxlbmd0aCwKK2NvbnN0IFVDaGFyICogCXRhcmdldCwKK2ludDMyX3QgCXRhcmdldExlbmd0aAkgCispOworCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK09JQ1VfdWNvbF9zZXRTdHJlbmd0aChjb25zdCBVQ29sbGF0b3IgKiwgVUNvbGxhdGlvblN0cmVuZ3RoICk7CisKKworI2lmbmRlZiBPSUNVX3Vjb2xfZ2V0QXZhaWxhYmxlCisjZXJyb3IgT0lDVV91Y29sX2dldEF2YWlsYWJsZSBub3QgZm91bmQgLSB1cmVuYW1lIHN5bWJvbCBtaXNtYXRjaD8KKyNlbmRpZgorCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBPUlQyIAorT0lDVV91Y29sX2dldEF2YWlsYWJsZShpbnQzMl90IGkpOworCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK09JQ1VfdWNvbF9jb3VudEF2YWlsYWJsZSgpOworCisKK1VfU1RBQkxFIFVDb2xsYXRpb25TdHJlbmd0aCBVX0VYUE9SVDIgCitPSUNVX3Vjb2xfZ2V0U3RyZW5ndGgoVUNvbGxhdG9yICpjb2wpOworCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK09JQ1VfdWNvbF9nZXRTb3J0S2V5KGNvbnN0ICAgIFVDb2xsYXRvciAgICAqY29sbCwKKyAgICAgICAgY29uc3QgICAgVUNoYXIgICAgICAgICpzb3VyY2UsCisgICAgICAgIGludDMyX3QgICAgICAgIHNvdXJjZUxlbmd0aCwKKyAgICAgICAgdWludDhfdCAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgcmVzdWx0TGVuZ3RoKTsKKworCitVX1NUQUJMRSBVQ29sbGF0b3IqIFVfRVhQT1JUMiAKK09JQ1VfdWNvbF9zYWZlQ2xvbmUoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICpzdGFja0J1ZmZlciwKKyAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcEJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKyNpbmNsdWRlICJ1bmljb2RlL3VkYXQuaCIKK1VfU1RBQkxFIFVEYXRlRm9ybWF0KiBVX0VYUE9SVDIgCitPSUNVX3VkYXRfb3BlbihVRGF0ZUZvcm1hdFN0eWxlICB0aW1lU3R5bGUsCisgICAgICAgICAgVURhdGVGb3JtYXRTdHlsZSAgZGF0ZVN0eWxlLAorICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICpsb2NhbGUsCisgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnR6SUQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgdHpJRExlbmd0aCwKKyAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICAgICBwYXR0ZXJuTGVuZ3RoLAorICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMpOworCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBPUlQyIAorT0lDVV91ZGF0X2dldEF2YWlsYWJsZShpbnQzMl90IGkpOworCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK09JQ1VfdWRhdF9jb3VudEF2YWlsYWJsZSgpOworCisKK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAorT0lDVV91ZGF0X2Nsb3NlKFVEYXRlRm9ybWF0KiBmb3JtYXQpOworCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK09JQ1VfdWRhdF9mb3JtYXQoICAgIGNvbnN0ICAgIFVEYXRlRm9ybWF0KiAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAgICAgZGF0ZVRvRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRmllbGRQb3NpdGlvbiogcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworCisKKy8qKgorIGVuZCB1Y29sLmgKKyovCisKKyNpbmNsdWRlICJ1bmljb2RlL3VjYWwuaCIKKworVV9TVEFCTEUgVUNhbGVuZGFyKiBVX0VYUE9SVDIgCitPSUNVX3VjYWxfb3Blbihjb25zdCBVQ2hhciogICB6b25lSUQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAgbGVuLAorICAgICAgICAgIGNvbnN0IGNoYXIqICAgIGxvY2FsZSwKKyAgICAgICAgICBVQ2FsZW5kYXJUeXBlICB0eXBlLAorICAgICAgICAgIFVFcnJvckNvZGUqICAgIHN0YXR1cyk7CisKKy8qKgorICogQ2xvc2UgYSBVQ2FsZW5kYXIuCisgKiBPbmNlIGNsb3NlZCwgYSBVQ2FsZW5kYXIgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIGNsb3NlLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAorT0lDVV91Y2FsX2Nsb3NlKFVDYWxlbmRhciAqY2FsKTsKKworCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK09JQ1VfdWNhbF9nZXRBdHRyaWJ1dGUoY29uc3QgVUNhbGVuZGFyKiAgICBjYWwsCisgICAgICAgICAgICAgICAgICBVQ2FsZW5kYXJBdHRyaWJ1dGUgIGF0dHIpOworCisKKy8vIGRlZmluZSB2ZXJzaW9uCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9pY3UtY29uZmlnLnNlZCBiL211bHRpL3Byb2ovcHJvdmlkZXIvaWN1LWNvbmZpZy5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5ZmU5NgotLS0gL2Rldi9udWxsCisrKyBiL211bHRpL3Byb2ovcHJvdmlkZXIvaWN1LWNvbmZpZy5zZWQKQEAgLTAsMCArMSw0IEBACisjIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisjIG11bmdlCitzJV5zYW5pdHkkJSMgc2FuaXR5IGRpc2FibGVkLiUKKwpkaWZmIC0tZ2l0IGEvbXVsdGkvcHJvai9wcm92aWRlci9pY3Uyc3ltdmVyLnNoIGIvbXVsdGkvcHJvai9wcm92aWRlci9pY3Uyc3ltdmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjYTQzMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tdWx0aS9wcm9qL3Byb3ZpZGVyL2ljdTJzeW12ZXIuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL2Jhc2gKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1BSRTQ0PTAKKworIyBvdXRwdXQgNF8wIGluc3RlYWQgb2YgNDAKK2lmIFsgIiQxIiA9PSAiLS1wcmU0NHN5bSIgXTsKK3RoZW4KKyAgICBQUkU0ND0xCisgICAgc2hpZnQKK2ZpCisKK0lOVkVSPSIwLjAiCitpZiBbICQjIC1lcSAwIF07Cit0aGVuCisgICAgcmVhZCBJTlZFUgorZWxpZiBbICQjIC1lcSAxIF07Cit0aGVuCisgICAgSU5WRVI9JDEKK2Vsc2UKKyAgICBlY2hvICIkMDogZXJyb3I6IHJlcXVpcmUgb25lIG9yIHplcm8gYXJndW1lbnRzLiBJZiB6ZXJvLCByZWFkIGZyb20gc3RkaW4iID4mMgorICAgIGV4aXQgMQorZmkKKworVU5EPWBlY2hvICR7SU5WRVJ9IHwgdHIgJy4nICdfJ2AKK01BSjA9YGVjaG8gJHtVTkR9IHwgY3V0IC1kXyAtZjFgCitNSU4xPWBlY2hvICR7VU5EfSB8IGN1dCAtZF8gLWYyYAoraWYgWyAke01BSjB9IC1sdCA0OSBdOwordGhlbgorICAgIGlmIFsgJHtQUkU0NH0gLWVxIDAgXTsKKyAgICB0aGVuCisgICAgICAgICMgcHJlIDUwOiAgcGFzdGUgdG9nZXRoZXIgIjQiIGFuZCAiOCIgdG8gZ2V0IDQ4CisgICAgICAgIGVjaG8gLW4gIiR7TUFKMH0ke01JTjF9IgorICAgIGVsc2UKKyAgICAgICAgIyBwcmUgNTA6IDRfOAorICAgICAgICBlY2hvIC1uICIke01BSjB9XyR7TUlOMX0iCisgICAgZmkKK2Vsc2UKKyAgICAjIHBvc3QgNTA6ICBqdXN0IHVzZSB0aGUgZmlyc3QgIworICAgIGVjaG8gLW4gIiR7TUFKMH0iCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvbWFrZWdsdXJlbi5zaCBiL211bHRpL3Byb2ovcHJvdmlkZXIvbWFrZWdsdXJlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjNkZWFmCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9tYWtlZ2x1cmVuLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworIyAkQAorT1VUPSQxCitzaGlmdAorIyAkKgorVkVSPSQxCitzaGlmdAorCitUSU5ZPWAuL2ljdTJzeW12ZXIuc2ggJFZFUmAKK09MRFNZTT1gLi9pY3Uyc3ltdmVyLnNoIC0tcHJlNDRzeW0gJFZFUmAKKworZWNobyAiJDA6IEJ1aWxkaW5nICR7T1VUfSBmb3IgJHtUSU5ZfSAtLS0tLS0tICIgPiYyCitlY2hvICJvbGRzeW0gPSAke09MRFNZTX0iCisjc2V0IC14IAorVVJFTkFNRT0ke1NSQ30vJHtWRVJ9LyR7U09VUkNFfS9jb21tb24vdW5pY29kZS91cmVuYW1lLmgKKygKKyAgICBjYXQgJHtHTFVFfS9nbHVyZW4tdG9wLmgKKyAgICBlY2hvICIvKiBHZW5lcmF0ZWQgZnJvbSAke1VSRU5BTUV9IGJ5ICR7MH0gKi8iCisgICAgZWNobyAiI2RlZmluZSBHTFVSRU5fVkVSIiAke1RJTll9CisgICAgZWNobyAiI2RlZmluZSBHTFVSRU5fVElOWSIgJHtUSU5ZfQorICAgIGVjaG8KKyAgICBlY2hvICcvKiBvbGQgc3R5bGUgKDw0LjQpKi8nCisgICAgZ3JlcCAiXiNkZWZpbmUuKiR7T0xEU1lNfSQiICR7VVJFTkFNRX0gICB8IGZncmVwIC12ICcqJyB8IHNlZCAtZSAic0BeI2RlZmluZSBcKFteIF0qXCkgXChbXiBdKlwpQCNkZWZpbmUgT0lDVV9cMSBcMkAiCisgICAgZWNobyAnLyogbmV3IHN0eWxlICg0LjQrKSAqLycKKyAgICBmZ3JlcCAiIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSgiICR7VVJFTkFNRX0gfCBzZWQgLWUgInNAXiNkZWZpbmUgXChbXiBdKlwpIC4qQCNkZWZpbmUgT0lDVV9cMSBcMV8ke1RJTll9QCIKKyAgICBjYXQgJHtHTFVFfS9nbHVyZW4tYm90dG9tLmgKKykgfAorICAgIGNhdCA+ICR7T1VUfQorIyAgICB0ZWUgJHtPVVR9CisKZGlmZiAtLWdpdCBhL211bHRpL3Byb2ovcHJvdmlkZXIvcmVhZG1lLnR4dCBiL211bHRpL3Byb2ovcHJvdmlkZXIvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTdkM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcHJvai9wcm92aWRlci9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vY2F0CisjIENvcHlyaWdodCAoYykgMjAwOS0yMDEyIElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyMgSUNVIFByb3ZpZGVyIEZlYXR1cmUuIC0gJElkJAorCisqIE5vdGUsIGFzIG9mIElDVTQ5IHRoaXMgaXMgYSB0ZWNobm9sb2d5IHByZXZpZXcuCisKK0JVSUxESU5HOgorCisxYS4gRG93bmxvYWQgdGhlIElDVSBzb3VyY2UgKC50Z3opIHlvdSB3aXNoIHRvIFRBUkdFVCAoaS5lLiBsaW5rIHlvdXIKK2FwcGxpY2F0aW9uIGFnYWluc3QpLiAgVGhpcyBtdXN0IGJlIHRoZSBJQ1U0OSBicmFuY2gKK2h0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS9pY3UvYnJhbmNoZXMvc3JsL3Vjb2w4MTU3IGF0Cit0aGlzIHdyaXRpbmcuCisKKzFiLiBEb3dubG9hZCBvbmUgb3IgbW9yZSBJQ1VzICgudGd6KSB5b3Ugd2lzaCB0byBoYXZlIEFWQUlMQUJMRSAodmlhCit0aGUgcHJvdmlkZXIgaW50ZXJmYWNlKS4gIEFzIG9mIHRoaXMgd3JpdGluZywgNDksIDQuOC4xLjEsIDQuNi54LCA0LjQueCwgNC4yLjAuMSwgMy44LjEsIDMuNiwgMy40LjEsIGFuZCAzLjIuMSBoYXZlIGJlZW4gdGVzdGVkLgorCisgICBOb3RlIHRoYXQgdGhlIE1BSk9SK01JTk9SIHZlcnNpb24gbnVtYmVycyBtdXN0IG5vdCBjb25mbGljdCBiZXR3ZWVuIHRoZSBUQVJHRVQgIGFuZCBBVkFJTEFCTEUgSUNVcy4gT25seSBvbmUgSUNVIG9mIGVhY2ggbWFqb3IrbWlub3IgaXMgYWxsb3dlZC4gCisgICBTbywgb25seSBvbmUgNC40LlgsIG9uZSAzLjguWCwgZXRjLiAgVGhpcyBpcyBkdWUgdG8gSUNVIGJpbmFyeSBjb21wYXRpYmlsaXR5IHJ1bGVzLgorCisKKzFjLiBDb3B5IHRoZSBJQ1VzIChuYW1lZCBhcyB0aGV5IHdlcmUgZG93bmxvYWRlZCkgaW50byB0aGUgLi4vLi4vcGFja2FnZXMvIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGlzIHJlYWRtZS4KKworMmEuIENvcHkgdGhlIGZpbGUgIk1ha2VmaWxlLmxvY2FsLXNhbXBsZSIgaW50byBhIG5ldyBmaWxlICJNYWtlZmlsZS5sb2NhbCIuCisKKzJiLiBFZGl0IHRoZSBNYWtlZmlsZS5sb2NhbCB0byBtb2RpZnkgdGhlIFBST1ZJREVSX1RBUkdFVCBhbmQKK1BST1ZJREVSX0FWQUlMQUJMRSBzZXR0aW5ncy4KKworICAgTm90ZSB0aGF0IGlmIHlvdSBoYXZlIGEgc3BlY2lhbCBpbnN0YWxsYXRpb24gb2YgdGhlIGN1cnJlbnQgSUNVCisgICAoSUNVIDQ5KSB0aGF0IHlvdSB3YW50IHRvIGJlIHRoZSB0YXJnZXQsIHlvdSBjYW4gc2V0IFBMVUdMSUJfSU5TVAorICAgdG8gdGhlIGluc3RhbGxlZCBJQ1UgcGF0aC4gWW91IG11c3Qgc3RpbGwgc2V0IFBST1ZJREVSX1RBUkdFVC4KKworMy4gQ2hlY2sgdGhlIG1ha2VmaWxlIHNldHRpbmdzIGJ5IHJ1bm5pbmcgJ21ha2UgaW5mbycsIHlvdSBzaG91bGQgc2VlIG91dHB1dCBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6CisKKyAgIElDVSBQcm92aWRlciBCdWlsZAorIFRhcmdldHRpbmcgUHJvdmlkZXIgYWdhaW5zdCBJQ1UgNDkgKDQ5LCBtYWpvciA0OSkKKyAgQXZhaWxhYmxlIHBsdWdpbnM6IDMuOC4xIDQuMi4wLjEgICgzXzhfMSA0XzJfMF8xKQorICAgQXZhaWxhYmxlIGtleXdvcmRzOgorICAgICAgLi4uQHByb3ZpZGVyPWljdTM4CisgICAgICAuLi5AcHJvdmlkZXI9aWN1NDIKKyAgIFBsdWdpbiBsaWJyYXJ5IHdpbGwgYmUgbGliaWN1cHJvdi40OS5zbworCisgICBBdmFpbGFibGUgSUNVIHRhcmJhbGxzOiBpY3U0Yy0zXzhfMS1zcmMudGd6IGljdTRjLTRfMl8wXzEtc3JjLnRneiBpY3U0Yy00XzRfMi1zcmMudGd6IAorICAgQXZhaWxhYmxlIElDVSB2ZXJzaW9uczogMy44LjEgNC4yLjAuMSA0LjQuMiAKKworCisgVGhlIGxhc3QgdHdvIGxpbmVzIHNob3cgd2hpY2ggSUNVIC50Z3ogZmlsZXMgYXJlIGF2YWlsYWJsZS4gSWYgYSB2ZXJzaW9uIGlzIG5vdCBsaXN0ZWQsIG1ha2Ugc3VyZSB0aGUgZmlsZW5hbWUgaXMgYXMgYWJvdmUuCisKKzQuIE5vdywgeW91IGFyZSByZWFkeSB0byBidWlsZCBhbmQgdGVzdC4KKworKE5vdGU6IHlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZXMgQ0MsIENYWCwgQ1hYRkxBR1MsIGFuZCBDRkxBR1MgdG8gc2V0Cit0aGUgY29tcGlsZXIgb3B0aW9ucy4gKQorCisgICAgIG1ha2UgY2hlY2sKKworICAgVGhpcyB3aWxsIHRha2UgcXVpdGUgYSB3aGlsZSBhcyBpdCBoYXMgdG8gYnVpbGQgTiBjb3BpZXMgb2YgSUNVLgorCisgICBXaGVuIGRvbmUsIGl0IHNob3VsZCBzaG93IGEgbGlzdCBvZiBjb2xsYXRpb24ga2V5cywgYW5kIGluZGljYXRlIHRoYXQgdGhlcmUgd2VyZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIElDVSAzLjgsIDQuNCwgNC4yLiAgIFlvdSBtYXkgbmVlZCB0byBtb2RpZnkgY29sZGlmZi5jcHAgaWYgeW91IGFyZSB1c2luZyBhIGRpZmZlcmVudCBzZXQgb2YgSUNVIHZlcnNpb25zLgorCis1LiBZb3UgY2FuIHRlc3QgaW4gYW4gJ2luc3RhbGxlZCcgSUNVIChub3QgdGhlIHN5c3RlbSBpbnN0YWxsKSB3aXRoIHRoaXMgY29tbWFuZDoKKworICAgICAgbWFrZSBpbnN0YWxsLWNoZWNrCisKK0RFUExPWUlORzoKKworNi4gIFRvIGluc3RhbGwgdGhlIHBsdWdpbiBpbiB5b3VyIG93biBJQ1UsIGNvcHkgIG91dC9pY3VwbHVnaW5zNDQudHh0IGludG8geW91ciBsaWIvaWN1LCAgYW5kIG91dC9saWIvbGliaWN1cHJvdi40NC5zbyBpbnRvIHlvdXIgbGliLyBkaXJlY3RvcmllcyB3aGVyZSBJQ1UgaXMgaW5zdGFsbGVkLiAKKworIE5vdGUgdGhhdCBydW5uaW5nICdpY3VpbmZvJyB3aWxsIHRlbGwgeW91IHdoZXJlIHRoZSBwbHVnaW4gZmlsZSBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkLCBhbmQgJ2ljdWluZm8gLUwnIHdpbGwgZGVidWcgYW55IGxvYWQgaXNzdWVzLgorCitVU0lORzoKKworQ29sbGF0b3JzIG9wZW5lZCB3aXRoIGFuIGlkIHN1Y2ggYXMgdGhhdCBzaG93biBpbiAnbWFrZSBpbmZvJywgc3VjaCBhcyAgJ2VuX1VTQHByb3ZpZGVyPWljdTM4JyB3aWxsIGxvYWQsIGZvciBleGFtcGxlLCBhbiBJQ1UgMy44IGNvbGxhdG9yLgorCitEYXRlIEZvcm1hdHMgb3BlbmVkICh1ZGF0X29wZW4pIHdpbGwgYWxzbyBsb2FkIGEgZGlmZmVyZW50IGRhdGUKK2Zvcm1hdCwgYnV0IG9ubHkgdGhyb3VnaCAndWRhdF9vcGVuJy4KKworCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUSEVPUlkgKElOVEVSTkFMIFVTRSBPTkxZISkKKworRm9yIGRpc2N1c3Npb246ICBhc3N1bWUgVEFSR0VUIDUwLjAuMiBhbmQgUFJPVklERVIgNC4wLjEKKworaS4gR0VORVJBTAorCisgVGhlICJmcm9udCBlbmQiIGZvciBlYWNoIG1vZHVsZSAoZGF0ZSwgY29sbGF0b3IsIC4uKSAgaXMgYnVpbHQgb25jZSBmb3IgdGhlIHRhcmdldCB2ZXJzaW9uLCBhbmQgdGhlICJiYWNrIGVuZCIgZ2x1ZSBpcyBidWlsdCBvbmNlIGZvciBlYWNoIHByb3ZpZGVyIHZlcnNpb24uICAoVE9ETzogZml4IHdvcmRpbmcgaGVyZS4pCisKKyBUaGUgb2ljdS5oIGhlYWRlciwgY29tYmluZWQgd2l0aCB0aGUgZ2VuZXJhdGVkIGdsdXJlbi5oLCBwcm92aWRlcyBhICJyZW5hbWVkIiBzeW1ib2wgc3VjaCBhcyAobGl0ZXJhbGx5KSBPSUNVX3Vjb2xfc3RyY29sbCB3aGljaCBpcyAjZGVmaW5lZCAgdG8gc29tZSBzcGVjaWZpYyB2ZXJzaW9uLCBzdWNoIGFzIHVjb2xfc3RyY29sbF80XzAuICBTbywgeW91IGNhbiBjYWxsIHRoZSBPSUNVXyB2ZXJzaW9uIG1lYW5pbmcgIk9sZCBJQ1UiLiBUaHVzLCB5b3UgaGF2ZSB0aGUgSUNVIDQuMCBmdW5jdGlvbiBkZWZpbmVkIGFzIGFuIGV4dGVybiwgYnkgaXRzIGV4cGxpY2l0IG5hbWUsIHdpdGhpbiB0aGUgSUNVIDUwIHNwYWNlLiAKKworIFRoZSBpY3VnbHVlL2dsdmVyLmggaGVhZGVyIGZpbGUgY29udGFpbnMgbXVsdGlwbGUgY2FsbHMgdG8sIGZvciBleGFtcGxlLCBHTFVFX1ZFUig0XzBfMSkgIEdMVUVfVkVSKDQ5XzFfMikgLi4uICAgCisgQSBtb2R1bGUgY2FuIHJlZGVmaW5lIEdMVUVfVkVSICBpbiBvcmRlciB0byBkbyBzb21lICJlYWNoLXZlcnNpb24iIHByb2Nlc3MuICBUaHVzLCBnbHZlci5oIGNhbiBiZSAjaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuLgorCisgR2VuZXJhbGx5LCBhIGxvY2FsZSBzdWNoIGFzIGVuX1VTQHNwPWljdTQwICB3aWxsIHJlZmVyIHRvIGFuIElDVSA0LjAgIHByb3ZpZGVyLgorCisgVGhlcmUgYXJlIGxvdHMgb2YgdmVyc2lvbi1zcGVjaWZpYyAjaWZkZWZzIHVzZWQgdG8gZGVhbCB3aXRoIHRoZSB2YWdhcmllcyBvZiBhIGRlY2FkZSBvZiBJQ1UgY2hhbmdlcy4KKworaWkuIENPTExBVE9SUworCisgRm9yIGVhY2ggYmFjayBlbmQsIHRoZXJlJ3MgYW4gaWN1XzUwOjpDb2xsYXRvciBjbGFzcyBuYW1lZCwgc2F5LCBnbHVlQ29sbGF0b3I0XzBfMSB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgVEFSR0VUIHNwYWNlLiBIb3dldmVyLCBlYWNoIGZ1bmN0aW9uIG9mIHRoaXMgY2xhc3MsIHN1Y2ggYXMgImNvbXBhcmUiLCBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nLCBmb3IgZXhhbXBsZSwgIE9JQ1VfdWNvbF9zdHJjb2xsLiAgQXMgbm90ZWQgYWJvdmUsIHRoaXMgaXMgZGlyZWN0bHkgY2FsbGluZyB1Y29sX3N0cmNvbGxfNF8wLiBUaGlzIGlzIHdoZXJlIHRoZSBjcm9zcy12ZXJzaW9uIGNhbGxzIGhhcHBlbi4gIFN1Y2ggZ2x1ZSBjb2RlIG11c3QgYmUgdmVyeSBjYXJlZnVsIG5vdCB0bywgZm9yIGV4YW1wbGUsICBjYWxsIHVjb2xfb3Blbl80XzAgYW5kIHBhc3MgdGhlIHJlc3VsdCB0byB1Y29sX2Nsb3NlXzUwICEgCisKKyBUaGUgRkUgYnVpbGRzIGEgQ29sbGF0b3JGYWN0b3J5IHN1YmNsYXNzLCBWZXJzaW9uQ29sbGF0b3JGYWN0b3J5LiAgSXQgcmVnaXN0ZXJzIGEgY29sbGF0b3IgZm9yIGV2ZXJ5IGxvY2FsZWlkIGl0IGNhbiBzdXBwb3J0LiBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyBlYWNoIGdsdWVDb2xsYXRvciogc3ViY2xhc3MncyBzdGF0aWMgOjpjb3VudEF2YWlsYWJsZSBhbmQgYXBwZW5kQXZhaWxhYmxlIGZ1bmN0aW9ucyBkaXJlY3RseS4gCisKKyBUaGUgcGx1Z2luIHNpbXBseSByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzIHRoZSBWQ0YuIFN1Y2ggY29sbGF0b3JzIGFyZSBhdmFpbGFibGUgdG8gYm90aCBDKysgYW5kIEMgQVBJLCBpbmNsdWRpbmcgdGhlIHNob3J0c3RyaW5nIGludGVyZmFjZSwgdXNpbmcgdGhlIF9QSUNVIyMgc2hvcnQgc3RyaW5nIHRhZy4KKworaWlpLiBEQVRFIEZPUk1BVFRFUlMKKworIERhdGUgZm9ybWF0dGVycyB3b3JrIGluIGEgc2ltaWxhciBmYXNoaW9uIHRvIGNvbGxhdG9ycy4gIERhdGVGb3JtYXQgc3ViY2xhc3NlcyBhcmUgcmVnaXN0ZXJlZCB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgT0lDVV91ZGF0XyogZnVuY3Rpb25zLiBBICJEYXRlRm9ybWF0T3BlbmVyIiAoZmFjdG9yeSBlcXVpdmFsZW50KSBpcyByZWdpc3RlcmVkIHRvIGFsbG93IHVkYXRfb3BlbiB0byBwcm9jZXNzIGNvcnJlY3RseS4gQysrIGRhdGUgZm9ybWF0IHJlZ2lzdHJhdGlvbiBpcyBub3QgYWRkcmVzc2VkIGFzIG9mIHRoaXMgd3JpdGluZy4KKworCmRpZmYgLS1naXQgYS9tdWx0aS9yZWFkbWUudHh0IGIvbXVsdGkvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NiNzZkCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGkvcmVhZG1lLnR4dApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vY2F0CisjIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIElCTSBDb3JwLiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisKKworTk9URToKK05PVEU6IEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgJ1Byb3ZpZGVyJyBmZWF0dXJlLCBzZWUgcHJvai9wcm92aWRlci9yZWFkbWUudHh0CitOT1RFOgorCisKKworIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHBpZWNlcyBvZiB0aGUgJ011bHRpSWN1JyBmZWF0dXJlLCB3aGljaCBjb250YWlucworc2NyaXB0cyBmb3IgYnVpbGRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgSUNVIGF0IHRoZSBzYW1lIHRpbWUsIGFuZCBydW5uaW5nCit2YXJpb3VzIHBpZWNlcyBvZiBjb2RlIGFnYWluc3QgaXQuCisKKyBOb3RlLCBpZiB5b3UgY29weSBvbmUgb2YgdGhlc2UgcHJvamVjdHMgb3V0c2lkZSB0aGUgbXVsdGkvIGRpcmVjdG9yeSwKK3lvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSAnTVVMVElJQ1VfUk9PVCcgdmFyaWFibGUgaW4gYnVpbGQgc2NyaXB0cyBwb2ludHMKK3RvIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IGhlcmUsICdtdWx0aS8nLgorCisgbXVsdGkvICAgICAgICAgICAgICAoIFlvdSBhcmUgSGVyZSApCisgbXVsdGkvcGFja2FnZXMvICAgICAudGd6IGFuZCAuamFyIGZpbGVzIGZvciBDIGFuZCBKIHJlc3BlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSB0aGUgcmVhZG1lIGluIHRoYXQgZGlyZWN0b3J5KQorIG11bHRpL2MvICAgICAgICAgICAgU2NyaXB0cyBmb3IgYnVpbGRpbmcgYWdhaW5zdCBJQ1U0QworIG11bHRpL2MvcGF0Y2gvICAgICAgICAgUGF0Y2hlcyBmb3IgYnVpbGRpbmcgb2xkIElDVSB2ZXJzaW9ucworIAorIG11bHRpL2NvbW1vbi8gICAgICAgQ29tbW9uIG1ha2VmaWxlcworCisgbXVsdGkvai8gICAgICAgICAgICBTY3JpcHRzIGZvciBidWlsZGluZyBhZ2FpbnN0IElDVTRKCisKKyBtdWx0aS90bXAvICAgICAgICAgIFRlbXBvcmFyeSBkaXJlY3RvcnksIGNvbnRhaW5zIGludGVybWVkaWF0ZSBidWlsZHMKKyBtdWx0aS90bXAvc3JjLyAgICAgICAgIFVucGFja2VkIGFuZCBwYXRjaGVkIHNvdXJjZQorIG11bHRpL3RtcC9idWlsZC8gICAgICAgQnVpbHQgSUNVcworIG11bHRpL3RtcC9pbnN0LyAgICAgICAgSW5zdGFsbGVkIElDVXMKKworIG11bHRpL3Byb2ovICAgICAgICAgQ29udGFpbnMgdmFyaW91cyBwcm9qZWN0cyB3aGljaCBtYWtlIHVzZSBvZiBtdWx0aS1pY3UuCisgICAgICAgICAgICAgICAgICAgICAgIChTZWUgaW5kaXZpZHVhbCByZWFkbWVzIHVuZGVyIGVhY2ggcHJvamVjdC4pCisgbXVsdGkvcHJvai9jaGVsbG8vICBDICJoZWxsbyB3b3JsZCIgYWdhaW5zdCBtdWx0aXBsZSBJQ1VzCisgbXVsdGkvcHJvai9qaGVsbG8vICBKICJoZWxsbyB3b3JsZCIgYWdhaW5zdCBtdWx0aXBsZSBJQ1VzCisKKy0tCitIT1cgVE8gVVNFCisKKzEuIENvcHkgc29tZSBJQ1Ugc291cmNlIGZpbGVzIGludG8gbXVsdGkvcGFja2FnZXMvCisKKzIuIGluICJtdWx0aS9jIiAgcnVuICJtYWtlIGlpY3VzIiAtIHRoaXMgd2lsbCB0YWtlIGEgd2hpbGUuCisKKzMuVG8gdmVyaWZ5IHRoZSBJQ1UgYnVpbGQsIGluICJtdWx0aS9wcm9qL2NoZWxsbyIsICBydW4gIm1ha2UgY2hlY2siLgorCisgICBZb3Ugc2hvdWxkIHNlZSBvdXRwdXQgbGlrZSB0aGlzOgorCisgICAgICAgb3V0LzNfOF8xLnR4dDogIElDVSAzLjguMQorICAgICAgIG91dC80XzJfMF8xLnR4dDogIElDVSA0LjIKKyAgICAgICBvdXQvNF80XzEudHh0OiAgSUNVIDQuNC4xCisKKzQuIFRoZSAnUHJvdmlkZXInIHByb2plY3QgaXMgbW9yZSBjb21wbGV4LiBUbyBzZWUgaXRzIGluZm9ybWF0aW9uLCBzZWUKK3RoZSByZWFkbWUgaW4gdGhhdCBkaXJlY3RvcnkuIApkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jL2FsbExvY2FsZVRlc3Quc2ggYi9yZWxlYXNlL2MvYWxsTG9jYWxlVGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lM2EwNzRmCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL2FsbExvY2FsZVRlc3Quc2gKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IElCTSBBbGwgUmlnaHRzIFJlc2VydmVkCisjCitlY2hvICJUZXN0aW5nICQxIGluIGFsbCBsb2NhbGVzIgorb3V0ZmlsZT0kMS1sb2NhbGUudHh0CitlY2hvICIiID4gJG91dGZpbGUKK2ZvciBsb2MgaW4gYGxvY2FsZSAtYWA7IGRvCitlY2hvIExDX0FMTD0kbG9jID4+ICRvdXRmaWxlCitMQ19BTEw9JGxvYyBtYWtlIGNoZWNrICQyID4+ICRvdXRmaWxlIDI+JjEKK2RvbmUKKworZWNobyAiRG9uZSB0ZXN0aW5nICQxIGluIGFsbCBsb2NhbGVzIgorCmRpZmYgLS1naXQgYS9yZWxlYXNlL2MvYWxsVGltZXpvbmVUZXN0LnNoIGIvcmVsZWFzZS9jL2FsbFRpbWV6b25lVGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjMxNDhlCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL2FsbFRpbWV6b25lVGVzdC5zaApAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBJQk0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworZWNobyAiVGVzdGluZyAkMSBpbiBhbGwgdGltZXpvbmVzIgorb3V0ZmlsZT0kMS10aW1lem9uZS50eHQKK2VjaG8gIiIgPiAkb3V0ZmlsZQorZm9yIHRpbWV6b25lIGluIGBsb2NhdGUgL3Vzci9zaGFyZS96b25laW5mby98ZmdyZXAgLXYgL3JpZ2h0L3xmZ3JlcCAtdiAvcG9zaXgvYDsgZG8KK3RpbWV6b25lPSR7dGltZXpvbmUjL3Vzci9zaGFyZS96b25laW5mby99CitlY2hvIFRaPSR0aW1lem9uZSA+PiAkb3V0ZmlsZQorVFo9JHRpbWV6b25lIG1ha2UgY2hlY2sgJDIgPj4gJG91dGZpbGUgMj4mMQorZG9uZQorCitlY2hvICJEb25lIHRlc3RpbmcgJDEgaW4gYWxsIHRpbWV6b25lcyIKKwpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jL2JvbWZpeC5weSBiL3JlbGVhc2UvYy9ib21maXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjZDc5YQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvYy9ib21maXgucHkKQEAgLTAsMCArMSw4OCBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIFJ1biB0aGlzIGxpa2Ugc286CisjICBjZCAvcGF0aC90by9JQ1UKKyMgIHB5dGhvbiAvcGF0aC90by90aGlzc2NyaXB0L2JvbWZpeC5weQorIworIyBpdCB3aWxsIGZpeHVwIGFueSBmaWxlcyB0aGF0IGhhdmUgYSBtaW1lLXR5cGUgb2YgInV0Zi04IiBidXQgbm8gQk9NLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdm4uY29yZSwgc3ZuLmNsaWVudCwgc3ZuLndjCitpbXBvcnQgY29kZWNzCisKKworcHJpbnQgIkZpeGluZyBib20gaW4gLlxuIgorCitjdHggPSBzdm4uY2xpZW50LnN2bl9jbGllbnRfY3R4X3QoKQorCit0cmVlID0gb3Mud2FsaygiLiIpCisKK25vdHM9MAorbm90dXRmOD0wCitub3Byb3BzPTAKK3V0Zjg9MAorZml4ZWQ9MAordGZpbGVzPTAKK2JvbT1jb2RlY3MuQk9NX1VURjgKKworCitmb3IgZW50IGluIHRyZWU6CisgICAgKHBhdGgsZGlycyxmaWxlcykgPSBlbnQKKyAgICBpZihwYXRoLmZpbmQoIi8uc3ZuIikgIT0gLTEpOgorICAgICAgICBjb250aW51ZQorICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICB0ZmlsZXM9dGZpbGVzKzEKKyAgICAgICAgcmV2aXNpb24gPSBzdm4uY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgICAgICBmcCA9IG9zLnBhdGguYWJzcGF0aChwYXRoICsgIi8iICsgZmlsZSkKKyAgICAgICAgI3ByaW50ICJ0ZXN0aW5nICIgKyBmcAorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9wcyA9IHN2bi5jbGllbnQucHJvcGdldCgic3ZuOm1pbWUtdHlwZSIsIGZwLCByZXZpc2lvbiwgMCwgY3R4KQorICAgICAgICAgICAgaWYgKG5vdCBwcm9wcyBvciBub3QgcHJvcHNbZnBdKTogCisgICAgICAgICAgICAgICAgbm9wcm9wcyA9IG5vcHJvcHMgKyAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHlwZSA9IHByb3BzW2ZwXQorCisgICAgICAgICAgICBpZiAobm90IHR5cGUgPT0gInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIpOgorICAgICAgICAgICAgICAgIG5vdHV0ZjggPSBub3R1dGY4ICsgMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgZnAgaXMgdXRmLTgKKyAgICAgICAgICAgIHV0Zjg9dXRmOCsxCisKKyAgICAgICAgICAgIGYgPSBvcGVuKGZwLCAncmInKQorICAgICAgICAgICAgYnl0ZXM9Zi5yZWFkKDMpCisgICAgICAgICAgICBpZiBub3QgYnl0ZXM6CisgICAgICAgICAgICAgICAgcHJpbnQgZnAgKyAiOiBjb3VsZCBub3QgcmVhZCAzIGJ5dGVzIgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIChieXRlcyA9PSBib20pOgorICAgICAgICAgICAgICAgICNwcmludCBmcCArICI6IE9LIgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgCisgICAgICAgICAgICBvcy5yZW5hbWUoZnAsZnArIi50bXAiKQorICAgICAgICAgICAgbz1vcGVuKGZwLCd3YicpCisgICAgICAgICAgICBvLndyaXRlKGJvbSkKKyAgICAgICAgICAgIHdoaWxlKDEpOgorICAgICAgICAgICAgICAgIGJ5dGVzID0gZi5yZWFkKDIwNDgpCisgICAgICAgICAgICAgICAgaWYgYnl0ZXM6CisgICAgICAgICAgICAgICAgICAgIG8ud3JpdGUoYnl0ZXMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG8uY2xvc2UoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoZnArIi50bXAiKQorICAgICAgICAgICAgZml4ZWQ9Zml4ZWQrMQorICAgICAgICAgICAgCisKKyAgICAgICAgICAgIHByaW50IGZwCisgICAgICAgICAgICAKKyAgICAgICAgZXhjZXB0IHN2bi5jb3JlLlN1YnZlcnNpb25FeGNlcHRpb246CisgICAgICAgICAgICBub3RzID0gbm90cyArIDEKKyAgICAgICAgICAgICNwcmludCAiTm90IHVuZGVyIHZjOiAiICsgZnAKKworCitwcmludCAiJWQgZmlsZXMsICVkIG5vdCB1bmRlciBzdm4sICVkIHdpdGggbm8gcHJvcHMsICVkIG5vdCB1dGY4OiAlZCB1dGY4LCAlZCBmaXhlZFxuIiAlICh0ZmlsZXMsbm90cyxub3Byb3BzLG5vdHV0ZjgsdXRmOCxmaXhlZCkKZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy9lbnZpcm9ubWVudFRlc3Quc2ggYi9yZWxlYXNlL2MvZW52aXJvbm1lbnRUZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1NDIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2MvZW52aXJvbm1lbnRUZXN0LnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBJQk0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyBUaGlzIHRlc3Qgc2NyaXB0IGVudW1lcmF0ZXMgYWxsIGxvY2FsZXMgYW5kIGFsbCB0aW1lem9uZXMgaW5zdGFsbGVkIG9uIGEKKyMgbWFjaGluZSAodXN1YWxseSBMaW51eCksIGFuZCBydW5zIHRoZSBleGlzdGluZyBJQ1U0QyB0ZXN0cyB0byBtYWtlIHN1cmUgdGhhdAorIyB0aGUgdGVzdHMgcGFzcy4gTm90IGV2ZXJ5b25lIGlzIHVzaW5nIGFuZCB0ZXN0aW5nIElDVTRDIGluIHRoZSBlbl9VUyBsb2NhbGUKKyMgd2l0aCB0aGUgUGFjaWZpYyB0aW1lem9uZS4KK3RvcF9pY3VfZGlyPS4uLy4uLy4uL2ljdQorcmVsZWFzZV90b29sc19kaXI9Li4vLi4vLi4vLi4vdG9vbHMvcmVsZWFzZS9jCitjZCAkdG9wX2ljdV9kaXIvc291cmNlL3Rlc3QvaW50bHRlc3QKKyRyZWxlYXNlX3Rvb2xzX2Rpci9hbGxMb2NhbGVUZXN0LnNoIGludGx0ZXN0ICYKKyRyZWxlYXNlX3Rvb2xzX2Rpci9hbGxUaW1lem9uZVRlc3Quc2ggaW50bHRlc3QgJgorY2QgLi4vaW90ZXN0CiskcmVsZWFzZV90b29sc19kaXIvYWxsTG9jYWxlVGVzdC5zaCBpb3Rlc3QgSU9URVNUX09QVFM9aW90ZXN0LWMtbG9jLnR4dCAmCiskcmVsZWFzZV90b29sc19kaXIvYWxsVGltZXpvbmVUZXN0LnNoIGlvdGVzdCBJT1RFU1RfT1BUUz1pb3Rlc3QtYy10ei50eHQgJgorY2QgLi4vY2ludGx0c3QKKyRyZWxlYXNlX3Rvb2xzX2Rpci9hbGxMb2NhbGVUZXN0LnNoIGNpbnRsdHN0ICYKKyRyZWxlYXNlX3Rvb2xzX2Rpci9hbGxUaW1lem9uZVRlc3Quc2ggY2ludGx0c3QgJgorCitlY2hvICJBbGwgdGVzdHMgaGF2ZSBiZWVuIHNwYXduZWQuIgorZWNobyAiUGxlYXNlIHdhaXQgd2hpbGUgdGhlIHRlc3RzIHJ1bi4gVGhpcyBtYXkgdGFrZSBhIHdoaWxlLiIKZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy9vcy1tYXBwaW5nL01ha2VmaWxlIGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyMjM4NwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvYy9vcy1tYXBwaW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsNzAgQEAKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMKKyMgIEZJTEUgTkFNRSA6IE1ha2VmaWxlCisjCisjICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyMgICAwMy8wMi8yMDA2ICBncmhvdGVuICAgICBDcmVhdGlvbi4KKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisjIyBMaXN0IG9mIHBob255IHRhcmdldHMKKy5QSE9OWSA6IGFsbCBhbGwtbG9jYWwgaW5zdGFsbCBpbnN0YWxsLWxvY2FsIGNsZWFuIGNsZWFuLWxvY2FsCVwKK2Rpc3RjbGVhbiBkaXN0Y2xlYW4tbG9jYWwgaW5zdGFsbC1saWJyYXJ5IGluc3RhbGwtaGVhZGVycyBkaXN0CVwKK2Rpc3QtbG9jYWwgY2hlY2sgY2hlY2stbG9jYWwKKworIyMgQ2xlYXIgc3VmZml4IGxpc3QKKy5TVUZGSVhFUyA6CisKKyMjIExpc3Qgb2Ygc3RhbmRhcmQgdGFyZ2V0cworYWxsOiBhbGwtbG9jYWwKK2luc3RhbGw6IGluc3RhbGwtbG9jYWwKK2NsZWFuOiBjbGVhbi1sb2NhbAorZGlzdGNsZWFuIDogZGlzdGNsZWFuLWxvY2FsCitkaXN0OiBkaXN0LWxvY2FsCitjaGVjazogYWxsIGNoZWNrLWxvY2FsCisKK0FMTF9UQVJHRVRTID0gZGlzcGxheUxvY2FsZUNvbnYgdGVzdFRpbWV6b25lCisjSUNVX0JBU0UgPSAvaG9tZS9idWlsZC9CdWlsZF9JQ1VfSFAxMWlBQ0MKKyNJQ1VfQkFTRSA9IC9ob21lL2J1aWxkL0J1aWxkX0lDVV9Tb2xhcmlzOUNDCitJQ1VfQkFTRSA9IC9ob21lL2J1aWxkL0J1aWxkX0lDVV9MaW51eFJIRUw0LjIKKyNJQ1VfQkFTRSA9IC9ob21lL2J1aWxkL0J1aWxkX0lDVV9NYWNPU1gKKyNJQ1VfQkFTRSA9IC9ob21lL2J1aWxkL0J1aWxkX0lDVV9BSVg1LjJWQTYKKworYWxsLWxvY2FsOiAkKEFMTF9UQVJHRVRTKQorCitkaXNwbGF5TG9jYWxlQ29udjogZGlzcGxheUxvY2FsZUNvbnYuYworCSNhQ0MgK0RENjQgLUkkKElDVV9CQVNFKS9pY3Uvc291cmNlL2NvbW1vbi8gLUwkKElDVV9CQVNFKS9pY3Uvc291cmNlL2xpYi8gLWxpY3V1YyAtbGljdWRhdGEgLW8gJEAgJDwKKwkjQ0MgLXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY5IC1JJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9jb21tb24vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMgLWxpY3VkYXRhIC1vICRAICQ8CisJZ2NjIC1JICQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvY29tbW9uLyAtTCQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvbGliLyAtbGljdXVjIC1saWN1ZGF0YSAtbyAkQCAkPAorCSNnY2MgLUkgJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9jb21tb24vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMgLWxpY3VkYXRhIC1vICRAICQ8CisJI3hsYyAtcTY0IC1JICQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvY29tbW9uLyAtTCQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvbGliLyAtbGljdXVjMzUgLWxpY3VkYXRhMzUgLW8gJEAgJDwKKwordGVzdFRpbWV6b25lOiB0ZXN0VGltZXpvbmUuYworCSNhQ0MgK0RENjQgLUkkKElDVV9CQVNFKS9pY3Uvc291cmNlL2NvbW1vbi8gLUkkKElDVV9CQVNFKS9pY3Uvc291cmNlL2kxOG4vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMgLWxpY3VkYXRhIC1vICRAICQ8CisJI0NDIC14dGFyZ2V0PXVsdHJhIC14YXJjaD12OSAtSSQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvY29tbW9uLyAtSSQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvaTE4bi8gLUwkKElDVV9CQVNFKS9pY3Uvc291cmNlL2xpYi8gLWxpY3V1YyAtbGljdWRhdGEgLW8gJEAgJDwKKwlnY2MgLUkgJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9jb21tb24vIC1JJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9pMThuLyAtTCQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvbGliLyAtbGljdXVjIC1saWN1ZGF0YSAtbyAkQCAkPAorCSNnY2MgLUkgJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9jb21tb24vIC1JJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9pMThuLyAtTCQoSUNVX0JBU0UpL2ljdS9zb3VyY2UvbGliLyAtbGljdXVjIC1saWN1ZGF0YSAtbyAkQCAkPAorCSN4bGMgLXE2NCAtSSAkKElDVV9CQVNFKS9pY3Uvc291cmNlL2NvbW1vbi8gLUkkKElDVV9CQVNFKS9pY3Uvc291cmNlL2kxOG4vIC1MJChJQ1VfQkFTRSkvaWN1L3NvdXJjZS9saWIvIC1saWN1dWMzNSAtbGljdWRhdGEzNSAtbyAkQCAkPAorCisKK2luc3RhbGwtbG9jYWw6IGluc3RhbGwtaGVhZGVycyBpbnN0YWxsLWxpYnJhcnkKKworaW5zdGFsbC1saWJyYXJ5OiBhbGwtbG9jYWwKKworaW5zdGFsbC1oZWFkZXJzOgorCitkaXN0LWxvY2FsOgorCitjbGVhbi1sb2NhbDoKKyMJdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgJChSTVYpICQoQ0xFQU5GSUxFUykKKwlybSAkKE9CSkVDVFMpICQoQUxMX1RBUkdFVFMpICQoU09fVkVSU0lPTl9EQVRBKQorCitkaXN0Y2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsCisKK2NoZWNrLWxvY2FsOgorCisKZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy9vcy1tYXBwaW5nL2Rpc3BsYXlMb2NhbGVDb252LmMgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy9kaXNwbGF5TG9jYWxlQ29udi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzODA1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy9kaXNwbGF5TG9jYWxlQ29udi5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICBGSUxFIE5BTUUgOiB0ZXN0VGltZXpvbmUuYworKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDMvMDIvMjAwNiAgZ3Job3RlbiAgICAgQ3JlYXRpb24uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisjaW5jbHVkZSAidW5pY29kZS9wdXRpbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWxvYy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXJlcy5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBjb25zdCBhcmd2W10pIHsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKworICAgIHVyZXNfY2xvc2UodXJlc19vcGVuKE5VTEwsIE5VTEwsICZzdGF0dXMpKTsKKyAgICBpZiAoc3RhdHVzICE9IFVfWkVST19FUlJPUikgeworICAgICAgICBwcmludGYoInVsb2NfZ2V0RGVmYXVsdCA9ICVzXG4iLCB1bG9jX2dldERlZmF1bHQoKSk7CisgICAgICAgIHByaW50ZigiTG9jYWxlIGF2YWlsYWJsZSBpbiBJQ1UgPSAlc1xuIiwgc3RhdHVzID09IFVfWkVST19FUlJPUiA/ICJUUlVFIiA6ICJGQUxTRSIpOworICAgIH0KKyAgICBpZiAoc3RyY21wKHVjbnZfZ2V0RGVmYXVsdE5hbWUoKSwgIlVTLUFTQ0lJIikgPT0gMCkgeworICAgICAgICBwcmludGYoInVwcnZfZ2V0RGVmYXVsdENvZGVwYWdlID0gJXNcbiIsIHVwcnZfZ2V0RGVmYXVsdENvZGVwYWdlKCkpOworICAgICAgICBwcmludGYoInVjbnZfZ2V0RGVmYXVsdE5hbWUgPSAlc1xuIiwgdWNudl9nZXREZWZhdWx0TmFtZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9yZWxlYXNlL2Mvb3MtbWFwcGluZy9yZWFkbWUudHh0IGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGJiNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvcmVhZG1lLnR4dApAQCAtMCwwICsxLDEyIEBACisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKworVGhlc2UgdGVzdHMgYWxsb3cgeW91IHRvIHNlZSBob3cgdGltZXpvbmVzLCBsb2NhbGVzLCBjaGFyc2V0cyBhbmQgb3RoZXIgc2ltaWxhciBzdHVmZiBhcmUgbWFwcGVkIGZyb20gdGhlIE9TIHZhbHVlcyB0byBJQ1Ugc3BlY2lmaWMgdmFsdWVzLgorCitTb21lIHR3ZWFraW5nIG1heSBiZSByZXF1aXJlZCB0byBnZXQgdGhlc2UgdG9vbHMgdG8gd29yay4KKworSWYgdGhlIGNoYXJzZXQgbWFwcyB0byBVUy1BU0NJSSwgaXQgbWF5IGJlIGFuIGluZGljYXRpb24gdGhhdCB0aGUgYWxpYXMgb3IgbWFwcGluZyB0YWJsZSBkbyBub3QgZXhpc3QgaW4gSUNVLgorSWYgdGhlIGxvY2FsZSBkb2Vzbid0IGV4aXN0LCB0aGUgdGVzdCB3aWxsIHN0YXRlIHRoYXQgdGhlIGxvY2FsZSBpcyBub3QgYXZhaWxhYmxlLgorSWYgdGhlIHRpbWV6b25lIGRvZXNuJ3QgbWF0Y2gsIGl0IHdpbGwgYmUgbGlzdGVkIGFzIGEgZGlmZmVyZW5jZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0TG9jYWxlcy5zaCBiL3JlbGVhc2UvYy9vcy1tYXBwaW5nL3Rlc3RMb2NhbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExNWUwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0TG9jYWxlcy5zaApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDgsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZm9yIGxvYyBpbiBgbG9jYWxlIC1hYDsgZG8gZWNobyA7IGVjaG8gTENfQUxMPSRsb2MgOyBMQ19BTEw9JGxvYyAuL2Rpc3BsYXlMb2NhbGVDb252IDsgZG9uZQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jL29zLW1hcHBpbmcvdGVzdFRpbWV6b25lLmMgYi9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0VGltZXpvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzY3Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvdGVzdFRpbWV6b25lLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIEZJTEUgTkFNRSA6IHRlc3RUaW1lem9uZS5jCisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwMy8wMi8yMDA2ICBncmhvdGVuL21vdyBDcmVhdGlvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgInVuaWNvZGUvcHV0aWwuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VkYXQuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGNvbnN0IGFyZ3ZbXSkgeworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGNoYXIgc3lzVGltZVN0clsyNTZdOworICAgIHN0cnVjdCB0bSBzdW1tZXJUaW1lVE07CisgICAgc3RydWN0IHRtIHdpbnRlclRpbWVUTTsKKworICAgIG1lbXNldChzeXNUaW1lU3RyLCAwLCBzaXplb2Yoc3lzVGltZVN0cikpOworICAgIG1lbXNldCgmc3VtbWVyVGltZVRNLCAwLCBzaXplb2Yoc3VtbWVyVGltZVRNKSk7CisgICAgbWVtc2V0KCZ3aW50ZXJUaW1lVE0sIDAsIHNpemVvZih3aW50ZXJUaW1lVE0pKTsKKworICAgIHN0cnB0aW1lKCIyMDA2LTA2LTAxIDEyOjAwIiwgIiVZLSVtLSVkICVIOiVNIiwgJnN1bW1lclRpbWVUTSk7CisgICAgc3RyZnRpbWUoc3lzVGltZVN0ciwgc2l6ZW9mKHN5c1RpbWVTdHIpLTEsICIlWS0lbS0lZCAlSDolTSIsICZzdW1tZXJUaW1lVE0pOworICAgIHB1dHMoc3lzVGltZVN0cik7Cit9CmRpZmYgLS1naXQgYS9yZWxlYXNlL2Mvb3MtbWFwcGluZy90ZXN0VGltZXpvbmVzLnNoIGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvdGVzdFRpbWV6b25lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNDk1YjUxCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL29zLW1hcHBpbmcvdGVzdFRpbWV6b25lcy5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3RpbWV6b25lcz1gbG9jYXRlIHpvbmVpbmZvIHwgZmdyZXAgLXYgZXZvbHV0aW9uLWRhdGEtc2VydmVyYAorZm9yIHR6b25lIGluICR0aW1lem9uZXMKK2RvIAorICAgIGlmIFsgLWYgJHR6b25lIF07IHRoZW4KKyAgICAgICAgdHpuYW1lPSR7dHpvbmUjL3Vzci9zaGFyZS96b25laW5mby99CisgICAgICAgIElDVVRpbWU9YExEX0xJQlJBUllfUEFUSD0uLi9kZXYtaWN1L2ljdS9zb3VyY2UvbGliLyBUWj0kdHpuYW1lIC4vY2hlY2tUaW1lem9uZWAKKyAgICAgICAgc3lzdGVtSG91cj1gVFo9JHR6bmFtZSBkYXRlICslSWAKKyAgICAgICAgIyBPUyBYIGRvZXMgbm90IGFsbG93ICUtSSBzbyB0aGlzIHVnbHkgbWVzcyBuZWVkcyB0byBvY2N1cgorICAgICAgICBpZiBbICIke3N5c3RlbUhvdXI6MDoxfSIgPT0gIjAiIF07IHRoZW4KKyAgICAgICAgICAgIHN5c3RlbUhvdXI9JHtzeXN0ZW1Ib3VyOjE6MX0KKyAgICAgICAgZmkKKyAgICAgICAgc3lzdGVtVGltZVNob3J0PWBUWj0kdHpuYW1lIGRhdGUgKyViXCAlZCxcICVZYAorICAgICAgICBzeXN0ZW1UaW1lU2hvcnQ9IiR7c3lzdGVtVGltZVNob3J0fSAke3N5c3RlbUhvdXJ9IgorICAgICAgICBzeXN0ZW1UaW1lQU1QTT1gVFo9JHR6bmFtZSBkYXRlICslcGAKKyAgICAgICAgaW5kZXgxPWBleHByICIkc3lzdGVtVGltZVNob3J0IiA6ICcuKidgCisgICAgICAgIGluZGV4Mj1gZXhwciAiJElDVVRpbWUiIDogJy4qJ2AtMgorICAgICAgICBJQ1VUaW1lU2hvcnQ9JHtJQ1VUaW1lOjA6JHtpbmRleDF9fQorICAgICAgICBJQ1VBTVBNPSR7SUNVVGltZToke2luZGV4Mn06Mn0KKyAgICAgICAgc3lzdGVtVGltZT1gVFo9JHR6bmFtZSBkYXRlICslYlwgJWQsXCAlWVwgJXJgCisgICAgICAgIGlmIFsgIiRzeXN0ZW1UaW1lU2hvcnQiID09ICIkSUNVVGltZVNob3J0IiBdICYmIFsgIiRzeXN0ZW1UaW1lQU1QTSIgPT0gIiRJQ1VBTVBNIiBdOyB0aGVuCisgICAgICAgICAgICBpZiBbICIkb3B0MSIgIT0gIi1iYWQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvIFRaPSR0em5hbWUKKyAgICAgICAgICAgICAgICBlY2hvIFN5c3RlbTogJHN5c3RlbVRpbWUKKyAgICAgICAgICAgICAgICBlY2hvIElDVTogJElDVVRpbWUKKyAgICAgICAgICAgIGZpCisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBpZiBbICIkb3B0MSIgPT0gIi1hbGwiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvIC0tVFo9JHR6bmFtZQorICAgICAgICAgICAgICAgIGVjaG8gLS1TeXN0ZW06ICRzeXN0ZW1UaW1lCisgICAgICAgICAgICAgICAgZWNobyAtLUlDVTogJElDVVRpbWUKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlY2hvIFRaPSR0em5hbWUKKyAgICAgICAgICAgICAgICBlY2hvIFN5c3RlbTogJHN5c3RlbVRpbWUKKyAgICAgICAgICAgICAgICBlY2hvIElDVTogJElDVVRpbWUKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKK2RvbmUKZGlmZiAtLWdpdCBhL3JlbGVhc2UvYy91Y29uZmlndGVzdC5zaCBiL3JlbGVhc2UvYy91Y29uZmlndGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjVmMWYzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jL3Vjb25maWd0ZXN0LnNoCkBAIC0wLDAgKzEsMzI5IEBACisjIS9iaW4vc2gKKyMgRXhoYXVzdChpdmUsIGluZykgIChNZWFuLCBNdWx0aSkgIChUZXN0LCBUcm91YmxlKQorIyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBJQk0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisjIEJ1aWxkcyBJQ1UgYSB3aG9sZSBsb3R0YSB0aW1lcyBhbmQgd2l0aCBkaWZmZXJlbnQgb3B0aW9ucworIyBTZXQgdGhlIG9wdGlvbnMgYmVsb3cgYW5kIGV4ZWN1dGUgdGhpcyBzY3JpcHQgd2l0aCB0aGUgc2hlbGwuCisKKyMgVGhpcyBzY3JpcHQgaXMgY2hlY2tlZCBpbnRvIHRvb2xzL3RydW5rL3JlbGVhc2UvYy4gSXQgYXNzdW1lcyB0aGF0IHRoZQorIyBpY3UgZGlyZWN0b3J5IGlzIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSB0b29scyAgZGlyZWN0b3J5LiBJZiB0aGlzCisjIGlzIG5vdCB0aGUgY2FzZSwgdXNlIHRoZSB1Y29uZmlndGVzdC5sb2NhbCBmaWxlIHRvIHNldCB0aGUKKyMgU1JDX0RJUiB2YXJpYWJsZSB0byBwb2ludCBhdCB0aGUgSUNVIHNvdXJjZSBkaXJlY3RvcnkuIAorIyBPciwgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiBtYWtlIGEgc3ltbGluayB0b29scy9pY3UgLT4geW91cl9pY3VfZGlyCisjIFlvdSBjYW4gYWxzbyB1c2UgdGhlIHVjb25maWd0ZXN0LmxvY2FsIGZpbGUgdG8gb3ZlcnJpZGUgdGhlIEJVSUxEX0RJUgorIyBhbmQgSUNVUExBVEZPUk0gdmFyaWFibGVzLgorCisjIEl0IGNhbiBiZSBoYW5keSB0byBydW4gJ3RhaWwgLUYgdWNvbmZpZ3Rlc3Qvc3RhdHMnIGluIGFub3RoZXIgd2luZG93IHRvIHNlZSB3aGVyZSB0aGluZ3MgYXJlLgorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tIEZpbmQgZnVsbCBwYXRoIG5hbWVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSk9QVD0tajIKKworIyBjaGVjayBmb3IgdWNvbmZpZ3Rlc3QubG9jYWwKK2lmIFsgLWYgLi91Y29uZmlndGVzdC5sb2NhbCBdCit0aGVuCisgICAgLiAuL3Vjb25maWd0ZXN0LmxvY2FsCitmaQorCisjIGxvY2F0aW9uIG9mIHRoaXMgc2NyaXB0CitTPSQocHdkKQorCisjIEJ1aWxkIHJvb3QgLSB0b29scy9yZWxlYXNlL2MvdWNvbmZpZ3Rlc3QKK0JVSUxEX0RJUj0ke0JVSUxEX0RJUjotJHtTfS91Y29uZmlndGVzdH0KKworRkFJTFM9JHtCVUlMRF9ESVJ9L2ZhaWxzCitTVEFUUz0ke0JVSUxEX0RJUn0vc3RhdHMKKworPiR7RkFJTFN9Cis+JHtTVEFUU30KK2VjaG8gPj4gJHtTVEFUU30KK2VjaG8gPj4gJHtTVEFUU30KKworIyB0aGUgcnVuQ29uZmlndXJlSUNVIHBsYXRmb3JtIG5hbWUKK0lDVVBMQVRGT1JNPSR7SUNVUExBVEZPUk06LUxpbnV4fQorCisjIEdsb2JhbCBDb25maWcgb3B0aW9ucyB0byB1c2UKKyNleHBvcnQgQ09QVFM9IiAtLXdpdGgtZGF0YS1wYWNrYWdpbmc9YXJjaGl2ZSIKK2V4cG9ydCBDT1BUUz0KKworIyBHbG9iYWwgdGVzdGluZyBvcHRpb25zIHRvIHVzZQorZXhwb3J0IElOVExURVNUT1BUUz0tdyAKK2V4cG9ydCBDSU5UTFRFU1RfT1BUUz0tdworIyAtLS0gUHJvYmFibHkgd2lsbCBub3QgbmVlZCB0byBtb2RpZnkgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgLS0tCisKKyMgSUNVIGRpcmVjdG9yeSBpcyAkUy8uLi8uLi8uLi9pY3UKK0lDVT0kKGRpcm5hbWUgJChkaXJuYW1lICQoZGlybmFtZSAke1N9KSkpL2ljdQorCisjIFNvdXJjZSBkaXJlY3RvcnkKK1NSQ19ESVI9JHtTUkNfRElSOi0ke0lDVX0vc291cmNlfQorCisjIC0tLS0tLS0tLS0tLSBFbmQgb2YgY29uZmlnIHZhcmlhYmxlcworVUNPTkZJR19IPSRTUkNfRElSL2NvbW1vbi91bmljb2RlL3Vjb25maWcuaAorVUNPTkZJR19MT0NBTF9IPXVjb25maWdfbG9jYWwuaAorVUNPTkZJR19VU0VfTE9DQUw9VUNPTkZJR19VU0VfTE9DQUwKKyMgUHJlcGFyZSB1Y29uZmlnLmgKK2lmIGdyZXAgLXEgJHtVQ09ORklHX0xPQ0FMX0h9ICAkVUNPTkZJR19IIDsKK3RoZW4KKyAgICBlY2hvICIjICRVQ09ORklHX0ggYWxyZWFkeSBjb250YWlucyBvdXIgcGF0Y2gsIG5vIGNoYW5nZSIKK2Vsc2UKKyAgICBtdiAkVUNPTkZJR19IICR7VUNPTkZJR19IfS5vcmlnCisgICAgY2F0ID4gJFVDT05GSUdfSCAgPDxFT0YKKyNpZiBkZWZpbmVkKCR7VUNPTkZJR19VU0VfTE9DQUx9KQorI2luY2x1ZGUgJHtVQ09ORklHX0xPQ0FMX0h9IgorI2VuZGlmCisvKiBmb3IgdWNvbmZpZ3Rlc3Quc2ggLSB5b3UgbWF5IFJFTU9WRSBhYm92ZSB0aGlzIGxpbmUgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitFT0YKK2NhdCAke1VDT05GSUdfSH0ub3JpZyA+PiAke1VDT05GSUdfSH0KKyAgICBlY2hvICIjICRVQ09ORklHX0ggdXBkYXRlZCIKK2ZpCisKKworIyBTdGFydCwgIHNldCBhIGRlZmF1bHQgbmFtZSB0byBzdGFydCB3aXRoIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcKKworZXhwb3J0IE5BTUU9Zm9vCitta2RpciAtcCAke0JVSUxEX0RJUn0gJHtCVUlMRF9ESVJ9L3RpbWVzIDI+L2Rldi9udWxsCisKKyMgQmFubmVyIGZ1bmN0aW9uIC0gcHJpbnQgYSBzZXBhcmF0b3IgdG8gc3BsaXQgdGhlIG91dHB1dAorYmFuKCkKK3sKKyAgICBlY2hvCisgICAgZWNobworICAgIGVjaG8gIiMtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJE5BTUUtLS0tLS0tLS0tLS0tIC0jIgorICAgIGVjaG8KKyAgICBlY2hvICJDUFBGTEFHUyA9ICRDUFBGTEFHUyIKKyAgICBlY2hvICJVQ09ORklHUyA9ICRVQ09ORklHUyIKKyAgICBlY2hvCisgICAgZWNobyAiIGJ1aWxkIHRvICR7QlVJTERfRElSfS8ke05BTUV9IGFuZCBpbnN0YWxsIGluICR7QlVJTERfRElSfS9JJHtOQU1FfSAiCisgICAgZWNobworCisgICAgZWNobyAiJHtOQU1FfSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+ICR7U1RBVFN9Cit9CisKKyMgQ2xlYW4gdXAgdGhlIG9sZCB0cmVlIGJlZm9yZSBidWlsZGluZyBhZ2FpbgorY2xlYW4oKQoreworICAgIHN0YXRzIGNsZWFuCisgICAgZWNobyBjbGVhbmluZyAke0JVSUxEX0RJUn0vJHtOQU1FfSBhbmQgJHtCVUlMRF9ESVJ9L0kke05BTUV9CisgICAgcm0gLXJmICR7QlVJTERfRElSfS9JJHtOQU1FfSAke0JVSUxEX0RJUn0vJHtOQU1FfQorICAgIG1rZGlyIC1wICR7QlVJTERfRElSfS8ke05BTUV9Cit9CisKKyMgUnVuIGNvbmZpZ3VyZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIChvdXQgb2Ygc291cmNlIGJ1aWxkKQorY29uZmlnKCkKK3sKKyAgICBzdGF0cyBjb25maWcKKyAgICBta2RpciAtcCAke0JVSUxEX0RJUn0vJHtOQU1FfSAyPi9kZXYvbnVsbAorICAgIGNkICR7QlVJTERfRElSfS8ke05BTUV9CisgICAgbWtkaXIgZW10aW5jIDI+L2Rldi9udWxsCisKKyAgICAjIG15Y29uZmlnLmgKKyAgICBjYXQgPiBlbXRpbmMvJHtVQ09ORklHX0xPQ0FMX0h9IDw8RU9GCisvKiBOQU1FPSR7TkFNRX0gICAgICAgICAgICAqLworLyogVUNPTkZJR1M9JHtVQ09ORklHU30gICAgKi8KKy8qIENQUEZMQUdTPSR7Q1BQRkxBR1N9ICAgICovCisjaWZuZGVmIF9NWUNPTkZJR19ICisjZGVmaW5lIF9NWUNPTkZJR19ICisKK0VPRgorICAgIGZvciB3aGF0IGluIGBlY2hvICRVQ09ORklHU2A7CisgICAgZG8KKyAgICAgICAgZWNobyAiI2RlZmluZSBVQ09ORklHXyR7d2hhdH0gMSIgPj4gZW10aW5jLyR7VUNPTkZJR19MT0NBTF9IfQorICAgIGRvbmUKKyAgICBjYXQgPj4gZW10aW5jLyR7VUNPTkZJR19MT0NBTF9IfSA8PEVPRgorI2VuZGlmCitFT0YKKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUQke1VDT05GSUdfVVNFX0xPQ0FMfSAtSSR7QlVJTERfRElSfS8ke05BTUV9L2VtdGluYyIKKyAgICBlY2hvICJDUFBGTEFHUz1cIiRDUFBGTEFHU1wiIENvbmZpZ3VyZSAkQ09QVFMgLS1zcmNkaXI9JFNSQ19ESVIiCisgICAgJFNSQ19ESVIvcnVuQ29uZmlndXJlSUNVICR7SUNVUExBVEZPUk19ICRDT1BUUyAtLXByZWZpeD0ke0JVSUxEX0RJUn0vSSR7TkFNRX0gLS1zcmNkaXI9JFNSQ19ESVIgMj4mMSA+ICR7QlVJTERfRElSfS8ke05BTUV9L2NvbmZpZy5vdXQKK30KKworc3RhdHMoKQoreworICAgIFNUQVRVUz0iJHtOQU1FfTogJHsxfSAJImBkYXRlYAorICAgIGVjaG8gJHtTVEFUVVN9ID4+ICR7U1RBVFN9CisgICAgZWNobyAiG1sxbSoqKiAke05BTUV9ICoqKioqKioqKiAkezF9ICoqKioqKioqKioqKiogG1ttIgorfQorCitmYWlsKCkKK3sKKyAgICBGQUlMVVJFPSJlcnJvcjogJHtCVUlMRF9ESVJ9LyR7TkFNRX06ICR7MX0gImBkYXRlYAorICAgIGVjaG8gJHtGQUlMVVJFfSA+PiAke0ZBSUxTfQorICAgIGVjaG8gJHtGQUlMVVJFfSA+PiAke1NUQVRTfQorICAgIGVjaG8gIhtbN20ke0ZBSUxVUkV9G1ttIgorfQorCisjIERvIGFuIGFjdHVhbCBidWlsZAorYmxkKCkKK3sKKyMjKiMjICBTdHJlYW0gZmlsdGVyIHRvIHB1dCAnTkFNRTogJyBpbiBmcm9udCBvZgorIyMqIyMgIGV2ZXJ5IGxpbmU6CisjIyojIyAgICAgIC4gLiAuICAgMj4mMSB8IHRlZSAtYSAuL2JsZC5sb2cgfCBzZWQgLWUgInMvXi8ke05BTUV9OiAvIgorICAgIGNkICR7QlVJTERfRElSfS8ke05BTUV9CisgICAgc3RhdHMgIm1ha2UgLWsgJHtKT1BUfSBhbGwgJHsxfSIKKyAgICAvdXNyL2Jpbi90aW1lIC1vICR7QlVJTERfRElSfS90aW1lcy8ke05BTUV9LmFsbCAgICAgbWFrZSAtayAke0pPUFR9IGFsbCAkezF9ICAgIERFUFM9ICAgICAgICAgICAgICAgICAgfHwgZmFpbCBtYWtlCisgICAgc3RhdHMgaW5zdGFsbAorICAgIC91c3IvYmluL3RpbWUgLW8gJHtCVUlMRF9ESVJ9L3RpbWVzLyR7TkFNRX0uaW5zdGFsbCBtYWtlIC1rIGluc3RhbGwgJHsxfSAgICAgICAgREVQUz0gICAgICAgICAgSU5TVEFMTF9EQVRBPSdsbiAtc3ZmICcgIHx8IGZhaWwgaW5zdGFsbAorICAgIC91c3IvYmluL3RpbWUgLW8gJHtCVUlMRF9ESVJ9L3RpbWVzLyR7TkFNRX0uaWwgICAgICBtYWtlIC1rIGluc3RhbGwtbG9jYWwgJHsxfSAgREVQUz0gICAgICAgICAgfHwgZmFpbCBpbnN0YWxsLWxvY2FsCisgICAgc3RhdHMgY2hlY2sKKyAgICAvdXNyL2Jpbi90aW1lIC1vICR7QlVJTERfRElSfS90aW1lcy8ke05BTUV9LmNoayAgICAgbWFrZSAtayAke0pPUFR9IGNoZWNrICR7MX0gSU5UTFRFU1RfT1BUUz0tdyBDSU5UTFRTVF9PUFRTPS13IERFUFM9IHx8IGZhaWwgY2hlY2sKKyAgICBzdGF0cyBoZHJ0c3QKKyAgICBQQVRIPSR7QlVJTERfRElSfS9JJHtOQU1FfS9iaW46JFBBVEggbWFrZSAtayAtQyAke0JVSUxEX0RJUn0vJHtOQU1FfS90ZXN0L2hkcnRzdC8gIERFUFM9IGNoZWNrICAgIHx8IGZhaWwgaGRydHN0Cit9CisKKworIyBEbyBhIGNvbXBsZXRlIGN5Y2xlIGZvciBhIHJ1bgorIyBhcmc6IG9wdHMgdG8gYnVpbGQKK2RvaXQoKQoreworYmFuIDsgY2xlYW4gOyBjb25maWcgOyBibGQgJHsxfQorfQorCisjIFNldCB1cCB0aGUgdmFyaWFibGVzIGZvciBjb252ZW5pZW5jZQorTk9fQ09MPSJOT19DT0xMQVRJT04iCitOT19CUks9Ik5PX0JSRUFLX0lURVJBVElPTiIKK05PX0ZNVD0iTk9fRk9STUFUVElORyIKK05PX1VDTT0iTk9fTEVHQUNZX0NPTlZFUlNJT04iCisjIFNpbmNlIE5PX0NPTlZFUlNJT04gaXMgb25seSBtZWFudCB0byBhbGxvdyB0aGUgY29tbW9uIGFuZCBpMThuCisjIGxpYnJhcmllcyB0byBiZSBidWlsdCwgd2UgZG9uJ3QgdGVzdCB0aGlzIGNvbmZpZ3VyYXRpb24uCisjTk9fQ05WPSJOT19DT05WRVJTSU9OIgorTk9fRklPPSJOT19GSUxFX0lPIgorTk9fWExUPSJOT19UUkFOU0xJVEVSQVRJT04iCitOT19SR1g9Ik5PX1JFR1VMQVJfRVhQUkVTU0lPTlMiCitKU19DT0w9Ik9OTFlfQ09MTEFUSU9OIgorTk9fTlJNPSJOT19OT1JNQUxJWkFUSU9OIgorTk9fSUROPSJOT19JRE5BIgorTk9fU1ZDPSJOT19TRVJWSUNFIgorTk9fTVNUPSIkTk9fQ09MICROT19CUksgJE5PX0ZNVCAkTk9fVUNNICROT19GSU8gJE5PX1JHWCAkTk9fWExUICROT19OUk0gJE5PX0lETiAkTk9fU1ZDIgorTk9fQUxMPSIkTk9fTVNUICROT19TVkMiCisKKyMgTm93LCBjb21lIHRoZSBhY3R1YWwgdGVzdCBydW5zCisjIEVhY2ggb25lIHNldHMgYSBOQU1FLCBhbmQgQ1BQRkxBR1Mgb3Igb3RoZXIgZmxhZ3MsIGFuZCBjYWxscyBkb2l0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgREVGQVVMVAorZXhwb3J0IE5BTUU9REVGQVVMVAorZXhwb3J0IFVDT05GSUdTPSIiCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKK1VTRV9QUkVCVUlMVF9EQVRBPSJJQ1VEQVRBX1NPVVJDRV9BUkNISVZFPWBlY2hvICR7QlVJTERfRElSfS9ERUZBVUxUL2RhdGEvb3V0L3RtcC8qLmRhdGAiCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fTVNUCitleHBvcnQgTkFNRT1OT19NU1QKK2V4cG9ydCBVQ09ORklHUz0iJE5PX01TVCIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PX1JHWAorZXhwb3J0IE5BTUU9Tk9fUkdYCitleHBvcnQgVUNPTkZJR1M9IiROT19SR1giCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQgJHtVU0VfUFJFQlVJTFRfREFUQX0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19DT0wKK2V4cG9ydCBOQU1FPU5PX0NPTAorZXhwb3J0IFVDT05GSUdTPSIkTk9fQ09MIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fQlJLCitleHBvcnQgTkFNRT1OT19CUksKK2V4cG9ydCBVQ09ORklHUz0iJE5PX0JSSyIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PX0ZNVAorZXhwb3J0IE5BTUU9Tk9fRk1UCitleHBvcnQgVUNPTkZJR1M9IiROT19GTVQiCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19VQ00KK2V4cG9ydCBOQU1FPU5PX1VDTQorZXhwb3J0IFVDT05GSUdTPSIkTk9fVUNNIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fRklPCitleHBvcnQgTkFNRT1OT19GSU8KK2V4cG9ydCBVQ09ORklHUz0iJE5PX0ZJTyIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdCAke1VTRV9QUkVCVUlMVF9EQVRBfQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PX1hMVAorZXhwb3J0IE5BTUU9Tk9fWExUCitleHBvcnQgVUNPTkZJR1M9IiROT19YTFQiCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT19JRE4KK2V4cG9ydCBOQU1FPU5PX0lETgorZXhwb3J0IFVDT05GSUdTPSIkTk9fSUROIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fTlJNCitleHBvcnQgTkFNRT1OT19OUk0KK2V4cG9ydCBVQ09ORklHUz0iJE5PX05STSIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PX1NWQworZXhwb3J0IE5BTUU9Tk9fU1ZDCitleHBvcnQgVUNPTkZJR1M9IiROT19TVkMiCitleHBvcnQgQ1BQRkxBR1M9IiIKK2RvaXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBKU19DT0wKK2V4cG9ydCBOQU1FPUpTX0NPTAorZXhwb3J0IFVDT05GSUdTPSIkSlNfQ09MIgorZXhwb3J0IENQUEZMQUdTPSIiCitkb2l0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9fQUxMCitleHBvcnQgTkFNRT1OT19BTEwKK2V4cG9ydCBVQ09ORklHUz0iJE5PX0FMTCIKK2V4cG9ydCBDUFBGTEFHUz0iIgorZG9pdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK05BTUU9ZG9uZQorYmFuCitlY2hvICJBbGwgYnVpbGRzIGZpbmlzaGVkISBUaW1lcyBhcmUgaW4gJHtCVUlMRF9ESVJ9L3RpbWVzIgorZWNobyAiVGhlcmUgd2VyZSBlcnJvcnMgaWYgdGhlIGZvbGxvd2luZyBncmVwIGZpbmRzIGFueXRoaW5nLiIKK2VjaG8gImdyZXAgc3RhdHVzICR7QlVJTERfRElSfS90aW1lcy8qIgorZ3JlcCBzdGF0dXMgJHtCVUlMRF9ESVJ9L3RpbWVzLyoKKworaWYgWyAtcyAke0ZBSUxTfSBdOwordGhlbgorICAgIGVjaG8gIkZhaWx1cmVzOiAiCisgICAgY2F0ICR7RkFJTFN9CitmaQorCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvLmNsYXNzcGF0aCBiL3JlbGVhc2UvamF2YS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTU4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvLmNsYXNzcGF0aApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisjIENvcHlyaWdodCAoQykgMjAwOSBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorLS0+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImNsYXNzZXMiLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhLy5wcm9qZWN0IGIvcmVsZWFzZS9qYXZhLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0N2ZkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvLnByb2plY3QKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyMgQ29weXJpZ2h0IChDKSAyMDA5IElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCistLT4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+dG9vbHNqPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS9NYWtlZmlsZSBiL3JlbGVhc2UvamF2YS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxNzIwCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL01ha2VmaWxlCkBAIC0wLDAgKzEsODEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworIworIworIworI1VzYWdlOgorIyBtYWtlIE9MRF9JQ1U9L3hzcmwvRS80MDFtNDAgIE5FV19JQ1U9L3hzcmwvRS9pY3U0Y3Q0MgorIworIyB5b3UgY2FuIHB1dCB0aGUgT0xEX0lDVT14eCBhbmQgTkVXX0lDVT15eSBpbiBzZXBhcmF0ZSBsaW5lcyBpbiBNYWtlZmlsZS5sb2NhbCAKKyMKKworQU5UPWFudAorQU5UX1RBUkdFVD1hcGlyZXBvcnQKK0RPWFlHRU49ZG94eWdlbgorCistaW5jbHVkZSBNYWtlZmlsZS5sb2NhbAorCitUQVJHRVQ9QVBJQ2hhbmdlUmVwb3J0Lmh0bWwKKworTk9UU0VUPQorCitpZmVxICgkKE9MRF9JQ1UpLCkKK05PVFNFVDo9IiQoTk9UU0VUKSBPTERfSUNVIgorZW5kaWYKKworaWZlcSAoJChORVdfSUNVKSwpCitOT1RTRVQ6PSIkKE5PVFNFVCkgTkVXX0lDVSIKK2VuZGlmCisKK2lmZXEgKCQoTkVXX0lDVV9CVUlMRCksKQorTkVXX0lDVV9CVUlMRDo9JChORVdfSUNVKS9zb3VyY2UKK2VuZGlmCisKK2lmZXEgKCQoT0xEX0lDVV9CVUlMRCksKQorT0xEX0lDVV9CVUlMRDo9JChPTERfSUNVKS9zb3VyY2UKK2VuZGlmCisKK2FsbDogJChUQVJHRVQpICQoTE9DQUxfVEFSR0VUKQorCisKK2lmbmVxICgkKE5PVFNFVCksKQorY2hlY2stdmFyczoKKwlAZWNobyAiRXJyb3I6IHBsZWFzZSBzZXQgJChOT1RTRVQpIGluIE1ha2VmaWxlLmxvY2FsIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorCWZhbHNlCitlbHNlCitjaGVjay12YXJzOgorZW5kaWYKKworLlBIT05ZOiBjaGVjay12YXJzIGNsYXNzZXMgY2xlYW4tZG9jcworCisuUFJFQ0lPVVM6ICQoVEFSR0VUKSAkKE9MRF9JQ1VfQlVJTEQpLyQoRE9YWUZJTEUpICQoTkVXX0lDVV9CVUlMRCkvJChET1hZRklMRSkKKworIyMjIyMjIworRE9YWUZJTEU9RG94eWZpbGUKK1hNTD1kb2MveG1sCitVVkVSU0lPTkg9JChYTUwpL3V2ZXJzaW9uXzhoLnhtbAorCitjbGVhbi1kb2NzOiB8IGNoZWNrLXZhcnMKKwktcm0gLXJmICIkKE9MRF9JQ1VfQlVJTEQpLyQoWE1MKSIgIiQoTkVXX0lDVV9CVUlMRCkvJChYTUwpIgorCiskKFRBUkdFVCk6IGNoZWNrLXZhcnMgJChPTERfSUNVX0JVSUxEKS8kKFhNTCkgJChORVdfSUNVX0JVSUxEKS8kKFhNTCkgCisJZWNobyAiUmVtZW1iZXIgdG8gcnVuIHRoZSBub24tYXNjaWkgZmlsZSBkZXRlY3RvciBpZiB5b3UgZ2V0IGVycm9ycy4iCisJJChBTlQpIC1Eb2xkZGlyPSIkKE9MRF9JQ1VfQlVJTEQpLyQoWE1MKSIgLURuZXdkaXI9IiQoTkVXX0lDVV9CVUlMRCkvJChYTUwpIiAkKEFOVF9UQVJHRVQpCisKKyMgY2hlY2stdmFycyAkKE9MRF9JQ1VfQlVJTEQpLyQoWE1MKSAkKE5FV19JQ1VfQlVJTEQpLyQoWE1MKSAKK0FQSUNoYW5nZVJlcG9ydC54bWw6CisJZWNobyAiUmVtZW1iZXIgdG8gcnVuIHRoZSBub24tYXNjaWkgZmlsZSBkZXRlY3RvciBpZiB5b3UgZ2V0IGVycm9ycy4iCisJJChBTlQpIC1Eb2xkZGlyPSIkKE9MRF9JQ1VfQlVJTEQpLyQoWE1MKSIgLURuZXdkaXI9IiQoTkVXX0lDVV9CVUlMRCkvJChYTUwpIiAkKEFOVF9UQVJHRVQpX3htbAorCislL2RvYy94bWw6CSUvRG94eWZpbGUKKyMgZG9uJ3QgY2FyZSB3aGF0IEdFTkVSQVRFX1hNTCBpcyBzZXQgdG8gcHJldmlvdXNseSAtIHNldCBpdCB0byB5ZXMuCisJQGVjaG8gcnVubmluZyBkb3h5dWdlbiAuLiAKKwkoIGNkICIkKi8iICYmICggKGNhdCAuL0RveHlmaWxlIHwgZ3JlcCAtdiAnXkdFTkVSQVRFXycpIDsgIGVjaG8gJ0dFTkVSQVRFX1hNTD1ZRVMnKSAgfCAkKERPWFlHRU4pIC0gICkKKwlAZWNobyBkb3h5Z2VuIGRvbmUgaW4gJCoKKworJS9Eb3h5ZmlsZToJJS9NYWtlZmlsZQorCUBlY2hvIGdlbmVyYXRpbmcgJEAKKwlAJChNQUtFKSAtQyAgIiQqLyIgRG94eWZpbGUgfHwgKCBlY2hvICJjb3VsZCBub3QgbWFrZSBEb3h5ZmlsZSBpbiAkKiAgLSB3YXMgZG94eWdlbiBhdmFpbGFibGU/IiA7IGZhbHNlICkKKworIyUvc291cmNlL01ha2VmaWxlOiAlL3NvdXJjZS9NYWtlZmlsZS5pbgorIwlAZWNobyAiJEAgZG9lcyBub3Qgc2VlbSB0byBleGlzdCAtIHdhcyBjb25maWd1cmUgcnVuPyIgOyBmYWxzZQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL2J1aWxkLnhtbCBiL3JlbGVhc2UvamF2YS9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMGY3MwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9idWlsZC54bWwKQEAgLTAsMCArMSwxMjkgQEAKKzwhLS0KKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAwNi0yMDExLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAqCisqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFRoaXMgaXMgdGhlIGFudCBidWlsZCBmaWxlIGZvciBJQ1UgdG9vbHMuIAorKi8KKy0tPgorPHByb2plY3QgbmFtZT0icmVsZWFzZS10b29scyIgZGVmYXVsdD0idG9vbHMiIGJhc2VkaXI9Ii4iID4KKyAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgICAgICA8dHN0YW1wLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InNyYy5kaXIiIHZhbHVlPSJzcmMiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxpYi5kaXIiIHZhbHVlPSJsaWIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmRpciIgdmFsdWU9ImNsYXNzZXMiLz4KKyAgICAgICAgPHByb3BlcnR5IGZpbGU9ImFwaS1yZXBvcnQucHJvcGVydGllcyIgLz4KKworICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmRpcn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iamF2YSBob21lOiAke2phdmEuaG9tZX0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iamF2YSB2ZXJzaW9uOiAke2phdmEudmVyc2lvbn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iamF2YSB2ZW5kb3I6ICR7amF2YS52bS52ZW5kb3J9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFudCBqYXZhIHZlcnNpb246ICR7YW50LmphdmEudmVyc2lvbn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHthbnQudmVyc2lvbn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iJHtiYXNlZGlyfSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJ0b29scyIgIGRlcGVuZHM9ImluaXQiIGRlc2NyaXB0aW9uPSJjb21waWxlIHJlbGVhc2UgdG9vbHMiPgorICAgICAgICA8amF2YWMgaW5jbHVkZWFudHJ1bnRpbWU9ImZhbHNlIiBpbmNsdWRlcz0iKiovKi5qYXZhIgorICAgICAgICAgICAgc3JjZGlyPSIke3NyYy5kaXJ9IgorICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5kaXJ9IgorICAgICAgICAgICAgc291cmNlPSIxLjUiCisgICAgICAgICAgICBkZWJ1Zz0ib24iIGRlcHJlY2F0aW9uPSJvZmYiCisgICAgICAgICAgICBlbmNvZGluZz0iYXNjaWkiLz4KKyAgICA8L3RhcmdldD4gICAgICAgICAgICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0IiBkZXNjcmlwdGlvbj0icmVtb3ZlIGFsbCBidWlsZCB0YXJnZXRzIj4KKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGlyfSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJhcGlyZXBvcnQiIGRlcGVuZHM9InRvb2xzIj4gICAgCisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLmlibS5pY3UuZGV2LnRvb2xzLmRvY3MuU3RhYmxlQVBJIiBmb3JrPSJ5ZXMiIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgICAgCis8IS0tCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi1ERUxFVEVNRS1uZXd2ZXIiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiNC42Ii8+CistLT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItLW9sZGRpciIvPiAKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiJHtvbGRkaXJ9Ii8+CisgICAgICAgICAgICAKKzwhLS0KKwkhISBPbmx5IG5lZWQgdGhlc2UgaWYgeW91IG11c3Qgb3ZlcnJpZGUuIFJlbW92ZSB0aGUgREVMRVRFTUUKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLURFTEVURU1FLW5ld3ZlciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke25ld3Zlcn0iLz4KKy0tPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tbmV3ZGlyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIiR7bmV3ZGlyfSIvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tY3BweHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuYy54c2x0Ii8+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1jeHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ0Z1bmMueHNsdCIvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tcmVwb3J0eHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5SZXBvcnQueHNsdCIvPgorCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tcmVzdWx0ZmlsZSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L0FQSUNoYW5nZVJlcG9ydC5odG1sIi8+CisKKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmRpcn0iLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtqYXZhLmNsYXNzLnBhdGh9LyIvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtsaWIuZGlyfS94YWxhbi5qYXIiLz4KKwkJPGZpbGVzZXQgZGlyPSIke2xpYi5kaXJ9Ii8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2xpYi5kaXJ9L3hlcmNlc0ltcGwuamFyIi8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9Ii4iLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJhcGlyZXBvcnRfeG1sIiBkZXBlbmRzPSJ0b29scyI+ICAgIAorICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5pYm0uaWN1LmRldi50b29scy5kb2NzLlN0YWJsZUFQSSIgZm9yaz0ieWVzIiBmYWlsb25lcnJvcj0idHJ1ZSI+CisKKzwhLS0KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLURFTEVURU1FLW5ld3ZlciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICI0LjQuMSIvPgorICAgIAorLS0+CisKKzwhLS0gICAgICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItREVMRVRFTUUtbmV3dmVyIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIjQuNiIvPgorLS0+ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiLS1vbGRkaXIiLz4gCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIiR7b2xkZGlyfSIvPgorICAgICAgICAgICAgCis8IS0tCisJISEgT25seSBuZWVkIHRoZXNlIGlmIHlvdSBtdXN0IG92ZXJyaWRlLiBSZW1vdmUgdGhlIERFTEVURU1FCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi1ERUxFVEVNRS1uZXd2ZXIiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiJHtuZXd2ZXJ9Ii8+CistLT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItLW5ld2RpciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke25ld2Rpcn0iLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItLWNwcHhzbHQiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiJHtiYXNlZGlyfS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZHVtcEFsbENwcEZ1bmNfeG1sLnhzbHQiLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItLWN4c2x0Ii8+CisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIiR7YmFzZWRpcn0vc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuY194bWwueHNsdCIvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlID0gIi0tcmVwb3J0eHNsdCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICIke2Jhc2VkaXJ9L3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5SZXBvcnRfeG1sLnhzbHQiLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZSA9ICItLXJlc3VsdGZpbGUiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWUgPSAiJHtiYXNlZGlyfS9BUElDaGFuZ2VSZXBvcnQueG1sIi8+CisKKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmRpcn0iLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtqYXZhLmNsYXNzLnBhdGh9LyIvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtsaWIuZGlyfS94YWxhbi5qYXIiLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7bGliLmRpcn0veGVyY2VzSW1wbC5qYXIiLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iLiIvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS9pY3U0Yy5jc3MgYi9yZWxlYXNlL2phdmEvaWN1NGMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZTg2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvaWN1NGMuY3NzCkBAIC0wLDAgKzEsNDQ3IEBACisvKgorICogRGVmYXVsdCBDU1Mgc3R5bGUgc2hlZXQgZm9yIHRoZSBJQ1U0QyBPcGVuIFNvdXJjZSByZWFkbWUKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisvKiBHbG9iYWwgc3R5bGVzICovCisKK2JvZHkscCxsaSxvbCx1bCx0aCx0ZCB7CisJZm9udC1zaXplOiAxMHB0OworCWZvbnQtZmFtaWx5OiAiQXJpYWwiLCAiSGVsdmV0aWNhIiwgc2Fucy1zZXJpZjsKK30KKworYm9keSB7CisJbWFyZ2luOiAxZW07Cit9CisKK2JvZHkuZHJhZnQgeworCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvZHJhZnRiZy5wbmcpOworfQorCisubWFpbmJvZHkgeworCXBhZGRpbmc6IDFlbTsKK30KKworLyoKKyAqIEN1c3RvbWl6ZSB0aGUgaGVhZGVycyB0byBoYXZlIGxlc3Mgc3BhY2UgYXJvdW5kIHRoZW0gdGhhbiB1c3VhbAorICovCisKK2gxIHsKKwltYXJnaW4tYm90dG9tOiAuNWVtOworCW1hcmdpbi10b3A6IC41ZW07CisJcGFkZGluZy1ib3R0b206IC41ZW07CisJcGFkZGluZy10b3A6IC41ZW07CisJZm9udC13ZWlnaHQ6IDcwMDsKKwlmb250LXNpemU6IDIwcHQ7CisJZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CisJYm9yZGVyLXdpZHRoOiAycHg7CisJYm9yZGVyLXN0eWxlOiBzb2xpZDsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJd2lkdGg6IDEwMCU7CisJZm9udC1zaXplOiAyMDAlOworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMiB7CisJYm9yZGVyLXRvcDogMnB4IHNvbGlkICMyMmQ7CisJYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMjJkOworCW1hcmdpbi1ib3R0b206IDAuNWVtOworCXBhZGRpbmctbGVmdDogNHB4OworCW1hcmdpbi10b3A6IDEycHQ7CisJZm9udC13ZWlnaHQ6IDcwMDsKKwlmb250LXNpemU6IDJlbTsKKwlmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworCXBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXM7Cit9CisKK2gyIGEgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogYmxhY2s7Cit9CisKK2gyIGE6aG92ZXIgeworCWNvbG9yOiBibHVlOworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitoMyB7CisJYm9yZGVyLXRvcDogMXB4IHNvbGlkIGdyYXk7CisJY29sb3I6ICMxZTFjNDY7CisJbWFyZ2luLWJvdHRvbTogMHB0OworCW1hcmdpbi10b3A6IDEycHQ7CisJcGFkZGluZy1sZWZ0OiAwOworCW1hcmdpbi1sZWZ0OiAxZW07CisJbWFyZ2luLXRvcDogMC4yZW07CisJcGFkZGluZy1ib3R0b206IDAuNGVtOworCWZvbnQtc2l6ZTogMS41ZW07CisJZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7Cit9CisKK2gzIGEgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogYmxhY2s7Cit9CisKK2gzIGE6aG92ZXIgeworCWNvbG9yOiBibHVlOworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitoNCB7CisJbWFyZ2luLWxlZnQ6IDEuNWVtOworCW1hcmdpbi1ib3R0b206IDBwdDsKKwltYXJnaW4tdG9wOiAxMnB0OworCWZvbnQtc2l6ZTogMS4wZW07CisJZm9udC13ZWlnaHQ6IGJvbGRlcjsKKwlmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKK30KKworaDQgYSB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWNvbG9yOiBibGFjazsKK30KKworaDQgYTpob3ZlciB7CisJY29sb3I6IGJsdWU7CisJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKK2g1LCBoNiB7CisJbWFyZ2luLWxlZnQ6IDEuOGVtOworCW1hcmdpbi1ib3R0b206IDBwdDsKKwltYXJnaW4tdG9wOiAxMnB0OworCXBhZGRpbmctbGVmdDogMC43NWVtOworCWZvbnQtc2l6ZTogeC1zbWFsbDsKKwlmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKK30KKworcCxwcmUsdGFibGUsdWwsb2wsZGwgeworCW1hcmdpbi1sZWZ0OiAyZW07Cit9CisKKy8qCisgKiBOYXZpZ2F0aW9uIHNpZGViYXIgb24gdGhlIGxlZnQgaGFuZCBvZiBtb3N0IHBhZ2VzCisgKi8KKwordGQuc2lkZWJhcjEgeworCWJhY2tncm91bmQtY29sb3I6ICM5OUNDRkY7CisJZm9udC13ZWlnaHQ6IDcwMDsKKwltYXJnaW4tdG9wOiAwcHg7CisJbWFyZ2luLWJvdHRvbTogMHB4OworCXBhZGRpbmctdG9wOiAxZW07CisJcGFkZGluZy1sZWZ0OiAwLjJlbTsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCit0ZC5zaWRlYmFyMiB7CisJYmFja2dyb3VuZC1jb2xvcjogIzk5Q0NGRjsKKwltYXJnaW4tdG9wOiAwcHg7CisJbWFyZ2luLWJvdHRvbTogMHB4OworCW1hcmdpbi1sZWZ0OiAwcHg7CisJcGFkZGluZy10b3A6IDFweDsKKwlwYWRkaW5nLWJvdHRvbTogMXB4OworCXBhZGRpbmctbGVmdDogMXB4OworCXBhZGRpbmctcmlnaHQ6IDAuNWVtOworCXdoaXRlLXNwYWNlOiBub3dyYXA7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWRpc3BsYXk6IGJsb2NrOworfQorCit0ZC5zaWRlYmFyMjpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKwlwYWRkaW5nLXRvcDogMXB4OworCXBhZGRpbmctYm90dG9tOiAxcHg7CisJcGFkZGluZy1sZWZ0OiAxcHg7CisJcGFkZGluZy1yaWdodDogMC41ZW07Cit9CisKK2Euc2lkZWJhcjIgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwlkaXNwbGF5OiBibG9jazsKKwl3aWR0aDogMTAwJTsKK30KKworYS5zaWRlYmFyMjpsaW5rIHsKKwljb2xvcjogIzAwMDA5OTsKKwlkaXNwbGF5OiBibG9jazsKK30KKworYS5zaWRlYmFyMjpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI0VFRUVGRjsKKwlkaXNwbGF5OiBibG9jazsKK30KKworLnVuZGVybGluZWhvdmVyOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUZGOworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKiBUaGlzIGlzIHRoZSBmYWRlZCBoZWFkZXIgYXQgdGhlIHRvcCAqLworCit0ZC5mYWRlZHRvcCB7CisJYmFja2dyb3VuZC1jb2xvcjogIzAwNjY5OTsKKwliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cDovL3d3dy5pY3UtcHJvamVjdC5vcmcvaW1hZ2VzL2dyMTAwLmdpZik7Cit9CisKKy8qIFJlbGF0ZWQgc2l0ZSBvbiB0aGUgbGVmdCAqLworCitwLnJlbGF0ZWRzaXRlIHsKKwljb2xvcjogV2hpdGU7CisJZm9udC13ZWlnaHQ6IDcwMDsKKwlmb250LXNpemU6IDEwcHQ7CisJbWFyZ2luLXRvcDogMWVtOworCW1hcmdpbi1ib3R0b206IDA7CisJcGFkZGluZy1sZWZ0OiAwLjJlbTsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworfQorCisvKiBSZWxhdGVkIHNpdGUgb24gdGhlIGxlZnQgKi8KKworcC5zaWRlYmFyMyB7CisJbWFyZ2luLXRvcDogMC43NWVtOworCW1hcmdpbi1ib3R0b206IDA7CisJcGFkZGluZy1sZWZ0OiAwLjhlbTsKK30KKworYS5zaWRlYmFyMyB7CisJZm9udC1zaXplOiAwLjllbTsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKK2Euc2lkZWJhcjM6bGluayB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWNvbG9yOiBXaGl0ZTsKK30KKworYS5zaWRlYmFyMzpob3ZlciB7CisJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qIEZBUSAqLworCitsaS5mYXFfY29udGVudHMgeworCWZvbnQtd2VpZ2h0OiA1MDA7Cit9CisKK3AuZmFxX3EgeworCWZvbnQtd2VpZ2h0OiA3MDA7CisJbWFyZ2luLWJvdHRvbTogMHB4OworfQorCitwLmZhcV9hIHsKKwltYXJnaW4tdG9wOiAwcHg7Cit9CisKKy8qIE5ld3MgaXRlbXMgKi8KKwordGFibGUubmV3c0l0ZW0geworCXBhZGRpbmctbGVmdDogMWVtOworCXBhZGRpbmctcmlnaHQ6IDFlbTsKKwlib3JkZXItd2lkdGg6IG1lZGl1bTsKK30KKwordGgubmV3c0l0ZW0geworCWJhY2tncm91bmQtY29sb3I6ICM2NjY2NjY7CisJY29sb3I6IFdoaXRlOworfQorCit0ZC5uZXdzSXRlbSB7CisJYmFja2dyb3VuZC1jb2xvcjogI0NDQ0NDQzsKK30KKwordGQucmVsZWFzZS1saW5lLHRoLnJlbGVhc2UtbGluZSB7CisJcGFkZGluZy1sZWZ0OiAwLjVlbTsKKwlwYWRkaW5nLXJpZ2h0OiAwLjVlbTsKKwl3aGl0ZS1zcGFjZTogbm93cmFwOworCWJvcmRlcjogMXB4OworfQorCisubm90ZSB7CisJZm9udC1zdHlsZTogaXRhbGljOworCWZvbnQtc2l6ZTogc21hbGw7CisJbWFyZ2luLWxlZnQ6IDFlbTsKK30KKworc2FtcCB7CisJbWFyZ2luLWxlZnQ6IDFlbTsKKwltYXJnaW4tcmlnaHQ6IDJlbTsKKwlib3JkZXItc3R5bGU6IGdyb292ZTsKKwlwYWRkaW5nOiAxZW07CisJZGlzcGxheTogYmxvY2s7CisJYmFja2dyb3VuZC1jb2xvcjogI0VFRUVFRQorfQorCit0YWJsZS5ydGFibGUgY2FwdGlvbiB7CisJbWFyZ2luLWxlZnQ6IDJweDsKKwltYXJnaW4tcmlnaHQ6IDJweDsKKwlwYWRkaW5nOiAzcHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJYmFja2dyb3VuZC1jb2xvcjogI2RlZTJmZjsKKwl0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZS5ydGFibGUgdHIgdGggeworCWJhY2tncm91bmQtY29sb3I6ICNkZWUyZmY7CisJdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUucnRhYmxlIHRyIHRkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjYzBjMGZkOworCXBhZGRpbmc6IDNweDsKK30KKwordGFibGUucnRhYmxlIHRyLmJyb2tlbiB0ZCB7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZiYjsKKwlib3JkZXI6IDFweCBkYXNoZWQgZ3JheTsKKwlwYWRkaW5nOiAzcHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3RhYmxlLnJ0YWJsZSB0ci5yYXJlbHkgdGQgeworCWJhY2tncm91bmQtY29sb3I6ICNlZmU5YzI7CisJcGFkZGluZzogM3B4OworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLyogIEFQSUNoYW5nZVJlcG9ydCBzcGVjaWZpYyB0aGluZ3MgKi8KKworLnJvdzAgeworCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorCisucm93MSB7CisJYmFja2dyb3VuZC1jb2xvcjogI2RmZDsKK30KKworLnZlcmNoYW5nZSB7CisJY29sb3I6IHJlZDsKKwlmb250LXdlaWdodDogYm9sZDsKKwlmb250LXNpemU6IGxhcmdlOworfQorCisuc3RhYmNoYW5nZSB7CisJY29sb3I6IHJlZDsKKwlmb250LXNpemU6IGxhcmdlOworfQorCisuYmlnd2FybiB7CisJY29sb3I6IHJlZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKwlmb250LXNpemU6IHgtbGFyZ2U7CisJbWFyZ2luOiAwLjUgZW07Cit9CisKK3RhYmxlLmdlblRhYmxlIHsKKwlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworCWJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworfQorCisvKiAnZXZlcnl0aGluZyBpbmMgdmVyc2lvbiAqLworCit0YWJsZS5nZW50YWJsZSB0ZCB7CisJYm9yZGVyOiAxcHggc29saWQgZ3JheTsKKwlwYWRkaW5nOiAwLjI1ZW07CisJZm9udC1zaXplOiBzbWFsbDsKK30KKworLyogbm90IHZlcnNpb24gKi8KKwordGFibGUuZ2VuVGFibGUgdGQuZmlsZSwKK3RhYmxlLmdlblRhYmxlIHRkLnByb3RvIHsKKwlib3JkZXI6IG5vbmU7CisJZm9udC1zaXplOiBtZWRpdW07Cit9CisKK3RhYmxlLmdlblRhYmxlIHRkLmZpbGUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2Rpdi5vdGhlciAucm93MCB7CisJYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cit9CisKK2Rpdi5vdGhlciAucm93MSB7CisJYmFja2dyb3VuZC1jb2xvcjogI2RkZjsKK30KKwordGFibGUuZG9jVGFibGUgeworCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisJYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy8qICdldmVyeXRoaW5nIGluYyB2ZXJzaW9uICovCisKK3RhYmxlLmRvY1RhYmxlIHRkLAordGFibGUuZG9jVGFibGUgdGggeworCWJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CisJcGFkZGluZzogMC4yNWVtOworCWZvbnQtc2l6ZTogc21hbGw7Cit9CisKKy8qIG5vdCB2ZXJzaW9uICovCisKK3RhYmxlLmRvY1RhYmxlIHRkLmZpbGUsCit0YWJsZS5kb2NUYWJsZSB0ZC5wcm90byB7CisJYm9yZGVyOiBub25lOworCWZvbnQtc2l6ZTogbWVkaXVtOworfQorCit0YWJsZS5kb2NUYWJsZSB0ZC5maWxlIHsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCithYmJyIHsKKwlib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICMwQjA7Cit9CisKK2gyLlRPQyB7CisJcGFnZS1icmVhay1iZWZvcmU6IGF1dG87Cit9CisKK2JvZHkucmVhZG1lIHsKKwkKK30KKworY2FwdGlvbiB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJdGV4dC1hbGlnbjogbGVmdAorfQorCitkaXYuaW5kZW50IHsKKwltYXJnaW4tbGVmdDogMmVtCit9CisKK3VsLlRPQyB7CisJbGlzdC1zdHlsZS10eXBlOiBub25lOworCXBhZGRpbmctbGVmdDogMWVtOworCWZvbnQtc2l6ZTogbGFyZ2VyOworfQorCit1bC5UT0MgbGkgYSB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3VsLlRPQyBsaSB1bCBsaSBhIHsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKKwlmb250LXNpemU6IHNtYWxsOworfQorCit1bC5UT0MgbGkgdWwgeworCW1hcmdpbi1sZWZ0OiAwOworCXBhZGRpbmctbGVmdDogMmVtOworCWZvbnQtd2VpZ2h0OiBub3JtYWw7CisJbGlzdC1zdHlsZS10eXBlOiBub25lOworfQorCitwcmUuc2FtcCxzYW1wIHsKKwltYXJnaW4tbGVmdDogMWVtOworCWJvcmRlci1zdHlsZTogZ3Jvb3ZlOworCXBhZGRpbmc6IDFlbTsKKwlkaXNwbGF5OiBibG9jazsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRUVFRUVFCit9CmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvcmVhZG1lLnR4dCBiL3JlbGVhc2UvamF2YS9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZDJlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvcmVhZG1lLnR4dApAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAwOS0yMDExIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK0FQSSBDaGFuZ2UgUmVwb3J0OgorCitBIHRvb2wgdG8gZ2VuZXJhdGUgYSByZXBvcnQgb2YgQVBJIHN0YXR1cyBjaGFuZ2VzIGJldHdlZW4gdHdvIElDVTRDIHJlbGVhc2VzLgorKElDVTRKIGhhcyBhIGJ1aWx0aW4gY2hhbmdlIHJlcG9ydCBnZW5lcmF0b3IpCisKK1JlcXVpcmVtZW50czoKKyAgLSBFdmVyeXRoaW5nIG5lZWRlZCB0byBidWlsZCBJQ1U0QyBmcm9tIGEgY29tbWFuZCBsaW5lIChVTklYKSBlbnZpcm9ubWVudAorICAtIERveHlnZW4gKGZvciBnZW5lcmF0aW5nIGRvY3MpLgorICAgICBEb3h5Z2VuIDEuNy41LjEgaXMgcmVjb21tZW5kZWQgZm9yIElDVSBBUEkgZG9jcywgCisgICAgIGJ1dCBhbiBvbGRlciBEb3h5Z2VuIG1heSB3b3JrIGZvciB0aGUgQVBJIENoYW5nZSBSZXBvcnQuCisgIC0gSmF2YSBKREsgMS41KworICAtIEFwYWNoZSBBbnQKKworVG8gdXNlIHRoZSB1dGlsaXR5OgorIDEuIFB1dCBib3RoIG9sZCBhbmQgbmV3IElDVSBzb3VyY2UgdHJlZXMgb24geW91ciBzeXN0ZW0KKyAyLiBSdW4gImNvbmZpZ3VyZSIgaW4gYm90aCBvbGQgYW5kIG5ldyAoeW91IGNhbiB1c2UgYW55IG1peHR1cmUgb2YgaW4tc291cmNlIGFuZCBvdXQtb2Ytc291cmNlIGJ1aWxkcykuIERveHlnZW4gbXVzdCBiZSBmb3VuZCBkdXJpbmcgdGhlIGNvbmZpZ3VyZSBwaGFzZSwgYnV0IHlvdSBkbyBub3QgbmVlZCB0byBidWlsZCB0aGUgc3RhbmRhcmQgQVBJIGRvY3MuCisgMy4gY3JlYXRlIGEgTWFrZWZpbGUubG9jYWwgaW4gdGhpcyByZWFkbWUncyBkaXJlY3RvcnkgKHRvb2xzL3JlbGVhc2UvamF2YS8pIAorICAgICAgICAgICAgd2l0aCBqdXN0IHRoZXNlIHR3byBsaW5lczoKKwkJCU9MRF9JQ1U9L3hzcmwvRS9pY3UtMS4wCisJCQlORVdfSUNVPS94c3JsL0UvaWN1LTYuOAorCSAgICggd2hlcmUgdGhlc2UgYXJlIHRoZSBwYXRocyB0byB0aGUgcGFyZW50IG9mICdzb3VyY2UnLCBldGMpICAgICAKKyAgICAgICAgICAgSWYgeW91ciBJQ1UgaXMgYW4gb3V0LW9mLXNvdXJjZS1idWlsZCwgYWRkIHRoZXNlIHR3byBsaW5lcworICAgICAgICAgICBpbmRpY2F0aW5nIHRoZSBidWlsZCBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE9MRF9JQ1VfQlVJTEQ9L3hzcmwvRS9pY3UtYnVpbGQtbTQ4CisgICAgICAgICAgICAgICAgICAgICAgICBORVdfSUNVX0JVSUxEPS94c3JsL0UvaWN1LWJ1aWxkCisgNC4gZnJvbSB0aGlzIGRpcmVjdG9yeSwgKHRvb2xzL3JlbGVhc2UvamF2YS8pIHJ1biBNYWtlIHRvIGJ1aWxkIGRvY3M6CisgICAgICAgICAgICBtYWtlCisgNS4gVGhpcyB3aWxsIGNyZWF0ZSBhbiAnQVBJQ2hhbmdlUmVwb3J0Lmh0bWwnIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkuIExvb2sgaXQgb3ZlciwgYW5kIHRoZW4gY2hlY2sgaXQgaW4gdG8gJHtORVdfSUNVfS9BUElDaGFuZ2VSZXBvcnQuaHRtbCAocGFyZW50IG9mIGljdS9zb3VyY2UpLgpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9TdGFibGVBUEkuamF2YSBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvU3RhYmxlQVBJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3YjAwZAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvU3RhYmxlQVBJLmphdmEKQEAgLTAsMCArMSwxMDcwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDcmVhdGVkIG9uIDIwMDYtNy0yNCA/CisgKiBNb3ZlZCBmcm9tIEphdmEgMS40IHRvIDEuNT8gQVBJIGJ5IHNybCAyMDA5LTAxLTE2CisgKi8KK3BhY2thZ2UgY29tLmlibS5pY3UuZGV2LnRvb2xzLmRvY3M7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdDsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NUmVzdWx0OworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtU291cmNlOworaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aDsKK2ltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhDb25zdGFudHM7CitpbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhGYWN0b3J5OworCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7CitpbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKK2ltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKK2ltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247CisKKworLyoqCisgQSB1dGlsaXR5IHRvIHJlcG9ydCB0aGUgc3RhdHVzIGNoYW5nZSBiZXR3ZWVuIHR3byBJQ1UgcmVsZWFzZXMKKworVG8gdXNlIHRoZSB1dGlsaXR5CisxLiBHZW5lcmF0ZSB0aGUgWE1MIGZpbGVzCisgICAgKHB1dCB0aGUgdHdvIElDVSByZWxlYXNlcyBvbiB5b3VyIG1hY2hpbmUgXl9eICkKKyAgICAoZ2VuZXJhdGUgJ0RveHlnZW4nIGZpbGUgb24gV2luZG93cyBwbGF0Zm9ybSB3aXRoIEN5Z3dpbidzIGhlbHApCisgICAgRWRpdCB0aGUgZ2VuZXJhdGVkICdEb3h5Z2VuJyBmaWxlIHVuZGVyIElDVTRDIHNvdXJjZSBkaXJlY3RvcnkKKyAgICBhKSBHRU5FUkFURV9YTUwgICAgICAgICAgID0gWUVTCisgICAgYikgU3luYyB0aGUgQUxJQVNFUyBkZWZpbmlhdGlvbgorICAgICAgIChGb3IgZXhhbXBsZSwgY29weSB0aGUgQUxJQVNFUyBkZWZpbmF0aW9uIGZyb20gSUNVIDMuNgorICAgICAgIERveHlnZW4gZmlsZSB0byBJQ1UgMy40IERveHlnZW4gZmlsZS4pCisgICAgYykgZ2VyZW5hdGUgdGhlIFhNTCBmaWxlcworMi4gQnVpbGQgdGhlIHRvb2wKKyAgICBEb3dubG9hZCBBcGFjaGUgWGVyY2VzIEphdmEgUGFyc2VyCisgICAgQnVpbGQgdGhpcyBmaWxlIHdpdGggdGhlIGxpYnJhcnkKKzMuIEVkaXQgdGhlIGFwaS1yZXBvcnQtY29uZmlnLnhtbCBmaWxlICYgQ2hhbmdlIHRoZSBmaWxlIGFjY29yZGluZyB5b3VyIHJlYWwgY29uZmlndXJhdGlvbgorNC4gUnVuIHRoZSB0b29sIHRvIGdlbmVyYXRlIHRoZSByZXBvcnQuCisKKyAqIEBhdXRob3IgUmF5bW9uZCBZYW5nCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFibGVBUEkgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ19GT0xERVIgPSAiZG9jRm9sZGVyIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERVhfWE1MID0gImluZGV4LnhtbCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElDVV9TUEFDRV9QUkVGSVggPSAiSUNVICI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOSVRJQUxJWkVSX1hQQVRIID0gImluaXRpYWxpemVyIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRV9YUEFUSCA9ICJuYW1lIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVZFUlNJT05BID0gInV2ZXJudW1fOGgueG1sIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVZFUlNJT05CID0gInV2ZXJzaW9uXzhoLnhtbCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVfSUNVX1ZFUlNJT04gPSAiVV9JQ1VfVkVSU0lPTiI7CisgICAgLyogSUNVIDQuNCsgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUNVX1ZFUlNJT05fWFBBVEhBID0gIi9kb3h5Z2VuL2NvbXBvdW5kZGVmW0BpZD0ndXZlcm51bV84aCddW0BraW5kPSdmaWxlJ10vc2VjdGlvbmRlZltAa2luZD0nZGVmaW5lJ10iOworCS8qIElDVSA8NC40ICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElDVV9WRVJTSU9OX1hQQVRIQiA9ICIvZG94eWdlbi9jb21wb3VuZGRlZltAaWQ9J3V2ZXJzaW9uXzhoJ11bQGtpbmQ9J2ZpbGUnXS9zZWN0aW9uZGVmW0BraW5kPSdkZWZpbmUnXSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElDVV9WRVJTSU9OX1hQQVRIID0gSUNVX1ZFUlNJT05fWFBBVEhBOworCisJcHJpdmF0ZSBTdHJpbmcgbGVmdFZlcjsKKyAgICBwcml2YXRlIEZpbGUgbGVmdERpciA9IG51bGw7CisvLyAgICBwcml2YXRlIFN0cmluZyBsZWZ0U3RhdHVzOworICAgIHByaXZhdGUgU3RyaW5nIGxlZnRNaWxlc3RvbmUgPSAiIjsKKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyByaWdodFZlcjsKKyAgICBwcml2YXRlIEZpbGUgcmlnaHREaXIgPSBudWxsOworLy8gICAgcHJpdmF0ZSBTdHJpbmcgcmlnaHRTdGF0dXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgcmlnaHRNaWxlc3RvbmUgPSAiIjsKKworICAgIHByaXZhdGUgSW5wdXRTdHJlYW0gZHVtcENwcFhzbHRTdHJlYW0gPSBudWxsOyAKKwlwcml2YXRlIElucHV0U3RyZWFtIGR1bXBDWHNsdFN0cmVhbSA9IG51bGw7CisJcHJpdmF0ZSBJbnB1dFN0cmVhbSByZXBvcnRYc2xTdHJlYW0gPSBudWxsOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDWFNMVCA9ICJkdW1wQWxsQ0Z1bmMueHNsdCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENQUFhTTFQgPSAiZHVtcEFsbENwcEZ1bmMueHNsdCI7IAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSUFRYU0xUID0gImdlblJlcG9ydC54c2x0IjsKKworICAgIHByaXZhdGUgRmlsZSBkdW1wQ3BwWHNsdDsKKyAgICBwcml2YXRlIEZpbGUgZHVtcENYc2x0OworICAgIHByaXZhdGUgRmlsZSByZXBvcnRYc2w7CisgICAgcHJpdmF0ZSBGaWxlIHJlc3VsdEZpbGU7CisgICAgCisKKyAgICBzdGF0aWMgTWFwPFN0cmluZyxTZXQ8U3RyaW5nPj4gc2ltcGxpZmljYXRpb25zID0gbmV3IFRyZWVNYXA8U3RyaW5nLFNldDxTdHJpbmc+PigpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGFkZFNpbXBsaWZpY2F0aW9uKFN0cmluZyBwcm90b3R5cGUwLCBTdHJpbmcgcHJvdG90eXBlKSB7CisgICAgICAgIFNldDxTdHJpbmc+IHMgPSBzaW1wbGlmaWNhdGlvbnMuZ2V0KHByb3RvdHlwZSk7CisgICAgICAgIGlmKHM9PW51bGwpIHsKKyAgICAgICAgICAgIHMgPSBuZXcgVHJlZVNldDxTdHJpbmc+KCk7CisgICAgICAgICAgICBzaW1wbGlmaWNhdGlvbnMucHV0KHByb3RvdHlwZSwgcyk7CisgICAgICAgIH0KKyAgICAgICAgcy5hZGQocHJvdG90eXBlMCk7CisgICAgfQorCisgICAgc3RhdGljIFNldDxTdHJpbmc+IGdldENoYW5nZWRTaW1wbGlmaWNhdGlvbnMoKSB7CisgICAgICAgIFNldDxTdHJpbmc+IG91dHB1dCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKyAgICAgICAgZm9yKE1hcC5FbnRyeTxTdHJpbmcsU2V0PFN0cmluZz4+IGUgOiBzaW1wbGlmaWNhdGlvbnMuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgaWYoZS5nZXRWYWx1ZSgpLnNpemUoKT4xKSB7CisgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChlLmdldEtleSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0cHV0OworICAgIH0KKworICAgIAorICAgIGZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyBudWwgPSAiTm9uZSI7IAorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24geworICAgICAgICAKKyAgICAgICAgU3RhYmxlQVBJIHQgPSBuZXcgU3RhYmxlQVBJKCk7CisgICAgICAgIHQucnVuKGFyZ3MpOyAKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHRoaXMucGFyc2VBcmdzKGFyZ3MpOworICAgICAgICBTZXQ8Sm9pbmVkRnVuY3Rpb24+IGZ1bGwgPSBuZXcgVHJlZVNldDxKb2luZWRGdW5jdGlvbj4oKTsKKworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlJlYWRpbmcgQysrLi4uIik7CisgICAgICAgIFNldDxKb2luZWRGdW5jdGlvbj4gc2V0Q3BwID0gdGhpcy5nZXRGdWxsTGlzdChkdW1wQ3BwWHNsdFN0cmVhbSwgQ1BQWFNMVCk7CisgICAgICAgIGZ1bGwuYWRkQWxsKHNldENwcCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVhZCAiK3NldENwcC5zaXplKCkgKyIgQysrLiAgUmVhZGluZyBDOiIpOworICAgICAgICAKKyAgICAgICAgU2V0PEpvaW5lZEZ1bmN0aW9uPiBzZXRDID0gdGhpcy5nZXRGdWxsTGlzdChkdW1wQ1hzbHRTdHJlYW0sIENYU0xUKTsKKyAgICAgICAgZnVsbC5hZGRBbGwoc2V0Qyk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZWFkICIrc2V0Qy5zaXplKCkgKyIgQy4gU2V0dGluZyBub2RlOiIpOworICAgICAgICAKKyAgICAgICAgTm9kZSBmdWxsTGlzdCA9IHRoaXMuc2V0VG9Ob2RlKGZ1bGwpOworLy8gICAgICAgIHQuZHVtcE5vZGUoZnVsbExpc3QsIiIpOworICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb2RlIHNldC4gUmVwb3J0aW5nOiIpOworICAgICAgICAKKyAgICAgICAgdGhpcy5yZXBvcnRTZWxlY3RlZEZ1bihmdWxsTGlzdCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZS4gUGxlYXNlIGNoZWNrICIgKyB0aGlzLnJlc3VsdEZpbGUpOworCisgICAgICAgIFNldDxTdHJpbmc+IGNoYW5nZWRTaW1wID0gZ2V0Q2hhbmdlZFNpbXBsaWZpY2F0aW9ucygpOworICAgICAgICBpZighY2hhbmdlZFNpbXAuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLSBjaGFuZ2VkIHNpbXBsaWZpY2F0aW9ucyAtLS0iKTsKKyAgICAgICAgICAgIGZvcihTdHJpbmcgayA6IGNoYW5nZWRTaW1wKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGspOworICAgICAgICAgICAgICAgIGZvcihTdHJpbmcgcyA6IHNpbXBsaWZpY2F0aW9ucy5nZXQoaykpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcdCIrcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICBwcml2YXRlIHZvaWQgcGFyc2VBcmdzKFN0cmluZ1tdIGFyZ3MpeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIFN0cmluZyBhcmcgPSBhcmdzW2ldOworICAgICAgICAgICAgaWYgKGFyZyA9PSBudWxsIHx8IGFyZy5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXJnLmVxdWFscygiLS1oZWxwIikgKSB7CisgICAgICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcuZXF1YWxzKCItLW9sZHZlciIpICkgeworICAgICAgICAgICAgICAgIGxlZnRWZXIgPSBhcmdzWysraV07CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZy5lcXVhbHMoIi0tb2xkZGlyIikgKSB7CisgICAgICAgICAgICAgICAgbGVmdERpciA9IG5ldyBGaWxlKGFyZ3NbKytpXSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZy5lcXVhbHMoIi0tbmV3dmVyIikpIHsKKyAgICAgICAgICAgICAgICByaWdodFZlciA9IGFyZ3NbKytpXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLmVxdWFscygiLS1uZXdkaXIiKSkgeworICAgICAgICAgICAgICAgIHJpZ2h0RGlyID0gbmV3IEZpbGUoYXJnc1srK2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLmVxdWFscygiLS1jeHNsdCIpICkgeworICAgICAgICAgICAgICAgIGR1bXBDWHNsdCA9IG5ldyBGaWxlKGFyZ3NbKytpXSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZy5lcXVhbHMoIi0tY3BweHNsdCIpICkgeworICAgICAgICAgICAgICAgIGR1bXBDcHBYc2x0ID0gbmV3IEZpbGUoYXJnc1srK2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLmVxdWFscygiLS1yZXBvcnR4c2x0IikgKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0WHNsID0gbmV3IEZpbGUoYXJnc1srK2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnLmVxdWFscygiLS1yZXN1bHRmaWxlIikpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRGaWxlID0gbmV3IEZpbGUoYXJnc1srK2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmtub3duIG9wdGlvbjogIithcmcpOworICAgICAgICAgICAgICAgcHJpbnRVc2FnZSgpOworICAgICAgICAgICAgfSAKKyAgICAgICAgfQorCisgICAgICAgIGR1bXBDcHBYc2x0U3RyZWFtID0gbG9hZFN0cmVhbShDUFBYU0xULCAiLS1jcHB4c2x0IiwgZHVtcENwcFhzbHQpOworICAgICAgICBkdW1wQ1hzbHRTdHJlYW09IGxvYWRTdHJlYW0oQ1hTTFQsICItLWN4c2x0IiwgZHVtcENYc2x0KTsKKyAgICAgICAgcmVwb3J0WHNsU3RyZWFtPSBsb2FkU3RyZWFtKFJQVFhTTFQsICItLXJlcG9ydHhzbHQiLCByZXBvcnRYc2wpOworCisgICAgICAgIGxlZnRWZXIgPSB0cmltSUNVKHNldFZlcihsZWZ0VmVyLCAib2xkIiwgbGVmdERpcikpOworICAgICAgICByaWdodFZlciA9IHRyaW1JQ1Uoc2V0VmVyKHJpZ2h0VmVyLCAibmV3IiwgcmlnaHREaXIpKTsKKyAgICB9CisKKworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCisJcHJpdmF0ZSBJbnB1dFN0cmVhbSBsb2FkU3RyZWFtKFN0cmluZyBuYW1lLCBTdHJpbmcgYXJnTmFtZSwgRmlsZSBhcmdGaWxlKSB7CisgICAgCUlucHV0U3RyZWFtIHN0cmVhbSA9IG51bGw7CisgICAgCWlmKGFyZ0ZpbGUgIT0gbnVsbCkgeworICAgIAkJdHJ5IHsKKwkgICAgCQlzdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGFyZ0ZpbGUpOworCSAgICAJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJICAgIAkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yOiBDb3VsZCBub3QgbG9hZCAiICsgYXJnTmFtZSArIiAiICsgYXJnRmlsZS5nZXRQYXRoKCkgKyAiIC0gIiArIGlvZS50b1N0cmluZygpLCBpb2UpOworCSAgICAJfQorICAgIAl9IGVsc2UgeyAgICAJCisgICAgICAgIAlzdHJlYW0gPSBTdGFibGVBUEkuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbShuYW1lKTsKKyAgICAgICAgCWlmKHN0cmVhbSA9PSBudWxsKSB7CisgICAgICAgIAkJdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIk5vIHJlc291cmNlIGZvdW5kIGZvciAiICsgU3RhYmxlQVBJLmNsYXNzLmdldFBhY2thZ2UoKS5nZXROYW1lKCkrIi8iKyBuYW1lICsgIiAtICAgdXNlICIgKyBhcmdOYW1lKTsKKyAgICAgICAgCX0gZWxzZSB7CisgICAgICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgcmVzb3VyY2UgIiArIG5hbWUpOworICAgICAgICAJfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJlYW07CisJfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gd2FyblNldCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHdhcm4oU3RyaW5nIHdoYXQpIHsKKyAgICAgICAgaWYoIXdhcm5TZXQuY29udGFpbnMod2hhdCkpIHsKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FybmluZzogIit3aGF0KTsKKyAgICAgICAgICAgICAgIGlmKHdhcm5TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgKFRoZXNlIHdhcm5pbmdzIGFyZSBvbmx5IHByaW50ZWQgb25lIHRpbWUgZWFjaC4pIik7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB3YXJuU2V0LmFkZCh3aGF0KTsKKyAgICAgICAgfQorICAgIH0gCisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkaWRXYXJuU3VwZXJUcmltID0gZmFsc2U7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRyaW1JQ1UoU3RyaW5nIHZlcikgeworICAgICAgICBmaW5hbCBTdHJpbmcgSUNVXyA9IElDVV9TUEFDRV9QUkVGSVg7CisgICAgICAgIGZpbmFsIFN0cmluZyBJQ1UgPSAiSUNVIjsKKyAgICAgICAgaWYodmVyICE9IG51bGwpIHsgLy8gdHJpbSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgJ0lDVS4uLicKKyAgICAgICAgICAgIHZlciA9IHZlci50cmltKCk7CisgICAgICAgICAgICBpbnQgaWN1aWR4ID0gdmVyLmxhc3RJbmRleE9mKElDVV8pOworICAgICAgICAgICAgaW50IGljdWlkeDEgPSB2ZXIubGFzdEluZGV4T2YoSUNVKTsKKyAgICAgICAgICAgIGlmKGljdWlkeD49MCkgeworICAgICAgICAgICAgICAgIHdhcm4oIlRyaW1taW5nIHRleHQgYmVmb3JlICdJQ1UnOiAiICsgdmVyLnN1YnN0cmluZygwLGljdWlkeCtJQ1VfLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgdmVyID0gdmVyLnN1YnN0cmluZyhpY3VpZHgrSUNVXy5sZW5ndGgoKSkudHJpbSgpOworICAgICAgICAgICAgfSBlbHNlIGlmKGljdWlkeDE+PTApIHsKKyAgICAgICAgICAgICAgICB3YXJuKCJUcmltbWluZyB0ZXh0IGJlZm9yZSAnSUNVICc6ICIgKyB2ZXIuc3Vic3RyaW5nKDAsaWN1aWR4MStJQ1UubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIuc3Vic3RyaW5nKGljdWlkeDErSUNVLmxlbmd0aCgpKS50cmltKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGFsd2F5cyB0cmltIGFueXRoaW5nIGFmdGVyIGEgdmVyc2lvbiAjCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IG47CisgICAgICAgICAgICAgICAgZm9yKG49dmVyLmxlbmd0aCgpLTE7bj4wICYmICgodmVyLmNoYXJBdChuKT09Jy4nKSB8fCBDaGFyYWN0ZXIuaXNEaWdpdCh2ZXIuY2hhckF0KG4pKSkgO24tLSkKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgIGlmKG4+MCkgeworICAgICAgICAgICAgICAgICAgICB3YXJuKCJUcmltbWluZyBleHRyYW5lb3VzIHRleHQgYWZ0ZXIgdmVyc2lvbjogJyIgKyB2ZXIuc3Vic3RyaW5nKG4rMSx2ZXIubGVuZ3RoKCkpICsgIiciKTsKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnN1YnN0cmluZyhuKzEpLnRyaW0oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoIWRpZFdhcm5TdXBlclRyaW0pIHsKKyAgICAgICAgICAgICAgICAJZGlkV2FyblN1cGVyVHJpbSA9IHRydWU7CisgICAgICAgICAgICAgICAgCXdhcm4oIlBsZWFzZSBPTkxZIHVzZTogICdAd2hhdGV2ZXIgSUNVIFguWS5aJyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IAorICAgICAgICByZXR1cm4gdmVyOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyBzZXRWZXIoU3RyaW5nIHByZXZWZXIsIFN0cmluZyB3aGljaFZlciwgRmlsZSBkaXIpIHsKKwkgICAgU3RyaW5nIFVWRVJTSU9OID0gVVZFUlNJT05BOworICAgIAlpZihkaXI9PW51bGwpIHsKKyAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigiLS0iK3doaWNoVmVyKyJkaXIgbm90IHNldC4iKTsKKyAgICAJCXByaW50VXNhZ2UoKTsgLyogZXhpdHMgKi8KKyAgICAJfSBlbHNlIGlmKCFkaXIuZXhpc3RzKCl8fCFkaXIuaXNEaXJlY3RvcnkoKSkgeworICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCItLSIrd2hpY2hWZXIrImRpcj0iK2Rpci5nZXROYW1lKCkrIiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkuIik7CisgICAgCQlwcmludFVzYWdlKCk7IC8qIGV4aXRzICovCisgICAgCX0KKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG51bGw7CisgICAgICAgIC8vIGxvb2tpbmcgZm9yOiA8bmFtZT5VX0lDVV9WRVJTSU9OPC9uYW1lPiBpbiB1dmVyc2lvbl84aC54bWw6ICAgICAgICA8aW5pdGlhbGl6ZXI+JnF1b3Q7My44LjEmcXVvdDs8L2luaXRpYWxpemVyPgorICAgICAgICB0cnkgeworICAgICAgICAgICAgRmlsZSB2ZXJGaWxlID0gbmV3IEZpbGUoZGlyLCBVVkVSU0lPTik7CisJCSAgICBpZighdmVyRmlsZS5leGlzdHMoKSkgeworCQkJCVVWRVJTSU9OPVVWRVJTSU9OQjsKKwkJCQlJQ1VfVkVSU0lPTl9YUEFUSD1JQ1VfVkVSU0lPTl9YUEFUSEI7CisJCQkJdmVyRmlsZSA9IG5ldyBGaWxlKGRpciwgVVZFUlNJT04pOworCQkgICAgfSBlbHNlIHsKKwkJCQlJQ1VfVkVSU0lPTl9YUEFUSD1JQ1VfVkVSU0lPTl9YUEFUSEE7CisJCSAgICB9CisgICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBnZXREb2N1bWVudCh2ZXJGaWxlKTsKKyAgICAgICAgICAgIERPTVNvdXJjZSB1dmVybnVtX2ggPSBuZXcgRE9NU291cmNlKGRvYyk7CisgICAgICAgICAgICBYUGF0aCB4cGF0aCA9IFhQYXRoRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1hQYXRoKCk7CisKKyAgICAgICAgICAgIE5vZGUgZGVmaW5lcyA9IChOb2RlKXhwYXRoLmV2YWx1YXRlKElDVV9WRVJTSU9OX1hQQVRILCB1dmVybnVtX2guZ2V0Tm9kZSgpLCBYUGF0aENvbnN0YW50cy5OT0RFKTsKKworCSAgICBpZihkZWZpbmVzPT1udWxsKSB7CisJICAgIAlTeXN0ZW0uZXJyLnByaW50bG4oImNhbid0IGxvYWQgZnJvbSAiK3ZlckZpbGUuZ2V0TmFtZSgpKyI6IitJQ1VfVkVSU0lPTl9YUEFUSCk7CisJICAgIH0KKworICAgICAgICAgICAgTm9kZUxpc3Qgbkxpc3QgPSBkZWZpbmVzLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyByZXN1bHQ9PW51bGwmJiAoaSA8IG5MaXN0LmdldExlbmd0aCgpKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgTm9kZSBsbiA9IG5MaXN0Lml0ZW0oaSk7CisgICAgICAgICAgICAgICAgaWYoISJtZW1iZXJkZWYiLmVxdWFscyhsbi5nZXROb2RlTmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTm9kZSBuYW1lID0gKE5vZGUpeHBhdGguZXZhbHVhdGUoTkFNRV9YUEFUSCwgbG4sIFhQYXRoQ29uc3RhbnRzLk5PREUpOworICAgICAgICAgICAgICAgIGlmKG5hbWU9PW51bGwpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgLy8gU3lzdGVtLmVyci5wcmludGxuKCJHb3R0YSBub2RlOiAiICsgbmFtZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSBuYW1lVmFsID0gbmFtZS5nZXRGaXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYobmFtZVZhbD09bnVsbCkgbmFtZVZhbCA9IG5hbWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWVTdHIgPSBuYW1lVmFsLmdldE5vZGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmKG5hbWVTdHI9PW51bGwpIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAvLyBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdHRhIG5hbWU6ICIgKyBuYW1lU3RyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZihuYW1lU3RyLnRyaW0oKS5lcXVhbHMoVV9JQ1VfVkVSU0lPTikpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBpbml0aWFsaXplciA9IChOb2RlKXhwYXRoLmV2YWx1YXRlKElOSVRJQUxJWkVSX1hQQVRILCBsbiwgWFBhdGhDb25zdGFudHMuTk9ERSk7CisgICAgICAgICAgICAgICAgICAgIGlmKGluaXRpYWxpemVyPT1udWxsKSBTeXN0ZW0uZXJyLnByaW50bG4oImluaXRpYWxpemVyIHdpdGggbm8gdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSBpbml0VmFsID0gaW5pdGlhbGl6ZXIuZ2V0Rmlyc3RDaGlsZCgpOworLy8gICAgICAgICAgICAgICAgICAgIGlmKGluaXRWYWw9PW51bGwpIGluaXRWYWwgPSBpbml0aWFsaXplcjsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluaXRTdHIgPSBpbml0VmFsLmdldE5vZGVWYWx1ZSgpLnRyaW0oKS5yZXBsYWNlQWxsKCJcIiIsIiIpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJQ1VfU1BBQ0VfUFJFRklYK2luaXRTdHI7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRGV0ZWN0ZWQgIit3aGljaFZlciArICIgdmVyc2lvbjogIiArIHJlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1pbGVzdG9uZU9mID0gIiI7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiAgIzEgdXNlIFVWZXJzaW9uSW5mby4gKHRoaXMgdG9vbCBkb2Vzbid0IGRlcGVuZCBvbiBJQ1U0SiB5ZXQpIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIzIgbW92ZSB0aGlzIHRvIGEgdXRpbGl0eSBmdW5jdGlvbjogc3RyaXAvImV4cGxhaW4iIGFuIElDVSB2ZXJzaW9uICMuCisgICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5zdGFydHNXaXRoKCJJQ1UgIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2ZXJzW10gPSByZXN1bHQuc3Vic3RyaW5nKDQpLnNwbGl0KCJcXC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYWogPSBJbnRlZ2VyLnBhcnNlSW50KHZlcnNbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbiA9IHZlcnMubGVuZ3RoPjE/SW50ZWdlci5wYXJzZUludCh2ZXJzWzFdKTowOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pY3IgPSB2ZXJzLmxlbmd0aD4yP0ludGVnZXIucGFyc2VJbnQodmVyc1syXSk6MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRjaCA9IHZlcnMubGVuZ3RoPjM/SW50ZWdlci5wYXJzZUludCh2ZXJzWzNdKTowOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZihtYWogPj0gNDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXcgc2NoZW1lOiA0OSBhbmQgZm9sbG93aW5nLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdHJ1bmNWZXJzaW9uID0gIklDVSAiICttYWo7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWluID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlsZXN0b25lT2YgPSAiIChtIittaWNyKyIpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgICAgLi4gIiArIG1pbGVzdG9uZU9mICsgIiBpcyBhIG1pbGVzdG9uZSB0b3dhcmRzICIgKyB0cnVuY1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihtaW4gPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBkZW5vdGUgYXMgbWlsZXN0b25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJJQ1UgIisobWFqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgICAgLi4gIiArIG1pbGVzdG9uZU9mICsgIiBpcyB0aGUgcmVsZWFzZSBvZiAiICsgdHJ1bmNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxlc3RvbmVPZiA9ICIgKHVwZGF0ZSAiK21pY3IrIi4iK3BhdGNoKyIpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIklDVSAiKyhtYWopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIGFuIHVwZGF0ZSB0byAgIiArIHRydW5jVmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsd2F5cyB0cnVuY2F0ZSB0byBtYWpvciAjIGZvciBjb21wYXJpbmcgdGFncy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVuY1ZlcnNpb247CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9sZCBzY2hlbWUgLSAxLjAuKiAuLiA0LjguKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0cnVuY1ZlcnNpb24gPSAiSUNVICIgKyBtYWorIi4iK21pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigobWluJTIpPT0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzdG9uZU9mID0gIiAoIittYWorIi4iKyhtaW4rMSkrIm0iK21pY3IrIikiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY1ZlcnNpb24gPSAiSUNVICIrKG1haikrIi4iKyhtaW4rMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAgIC4uICIgKyBtaWxlc3RvbmVPZiArICIgaXMgYSBtaWxlc3RvbmUgdG93YXJkcyAiICsgdHJ1bmNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYobWljcj09MCAmJiBwYXRjaD09MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIHRoZSByZWxlYXNlIG9mICIgKyB0cnVuY1ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzdG9uZU9mID0gIiAodXBkYXRlICIrbWljcisiLiIrcGF0Y2grIikiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICAuLiAiICsgbWlsZXN0b25lT2YgKyAiIGlzIGFuIHVwZGF0ZSB0byAiICsgdHJ1bmNWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1bmNWZXJzaW9uOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYod2hpY2hWZXIuZXF1YWxzKCJuZXciKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0TWlsZXN0b25lID0gbWlsZXN0b25lT2Y7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRNaWxlc3RvbmUgPSBtaWxlc3RvbmVPZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vZHVtcE5vZGUoZGVmaW5lcywiIik7CisgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldhcm5pbmc6IENvdWxkbid0IGdldCAiICsgd2hpY2hWZXIrICAiIHZlcnNpb24gZnJvbSAiKyBVVkVSU0lPTiArICIgLSByZXZlcnRpbmcgdG8gIiArIHByZXZWZXIpOworICAgICAgICAgICAgcmVzdWx0ID0gcHJldlZlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYocmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgCQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZihwcmV2VmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmKHJlc3VsdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYoIXJlc3VsdC5lcXVhbHMocHJldlZlcikpIHsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTm90ZTogRGV0ZWN0ZWQgIiArIHJlc3VsdCArICIgdmVyc2lvbiBidXQgd2UnbGwgdXNlIHlvdXIgcmVxdWVzdGVkIC0tIit3aGljaFZlcisidmVyICIrcHJldlZlcik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByZXZWZXI7CisgICAgICAgICAgICAgICAgICAgIGlmKCFyaWdodE1pbGVzdG9uZS5pc0VtcHR5KCkmJndoaWNoVmVyLmVxdWFscygibmV3IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiIC4uIGlnbm9yaW5nIG1pbGVzdG9uZSBpbmRpY2F0b3IgIiArIHJpZ2h0TWlsZXN0b25lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0TWlsZXN0b25lID0gIiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoIWxlZnRNaWxlc3RvbmUuaXNFbXB0eSgpJiYhd2hpY2hWZXIuZXF1YWxzKCJuZXciKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdE1pbGVzdG9uZT0iIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTm90ZTogWW91IGRvbid0IG5lZWQgdG8gdXNlICAnLS0iK3doaWNoVmVyKyJ2ZXIgIityZXN1bHQrIicgYW55bW9yZSAtIHdlIGRldGVjdGVkIGl0IGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTm90ZTogRGlkbid0IGRldGVjdCB2ZXJzaW9uIHNvIHdlJ2xsIHVzZSB5b3VyIHJlcXVlc3RlZCAtLSIrd2hpY2hWZXIrInZlciAiK3ByZXZWZXIpOworICAgICAgICAgICAgCXJlc3VsdCA9IHByZXZWZXI7CisgICAgICAgICAgICAJaWYoIXJpZ2h0TWlsZXN0b25lLmlzRW1wdHkoKSYmd2hpY2hWZXIuZXF1YWxzKCJuZXciKSkgeworICAgICAgICAgICAgCQlTeXN0ZW0uZXJyLnByaW50bG4oIiAuLiBpZ25vcmluZyBtaWxlc3RvbmUgaW5kaWNhdG9yICIgKyByaWdodE1pbGVzdG9uZSk7CisgICAgICAgICAgICAJCXJpZ2h0TWlsZXN0b25lID0gIiI7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgIGlmKCFsZWZ0TWlsZXN0b25lLmlzRW1wdHkoKSYmIXdoaWNoVmVyLmVxdWFscygibmV3IikpIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdE1pbGVzdG9uZT0iIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmKHJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgIAlTeXN0ZW0uZXJyLnByaW50bG4oInByZXZWZXI9IitwcmV2VmVyKTsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3I6IFlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgb3B0aW9uICBcIi0tIit3aGljaFZlcisidmVyXCIgIGJlY2F1c2Ugd2UgY291bGQgbm90IGRldGVjdCBhbiBJQ1UgdmVyc2lvbiBpbiAiICsgVVZFUlNJT04gKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJFcnJvcjogWW91J2xsIG5lZWQgdG8gdXNlIHRoZSBvcHRpb24gIFwiLS0iK3doaWNoVmVyKyJ2ZXJcIiAgYmVjYXVzZSB3ZSBjb3VsZCBub3QgZGV0ZWN0IGFuIElDVSB2ZXJzaW9uIGluICIgKyBVVkVSU0lPTiApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRVc2FnZSgpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiBTdGFibGVBUEkgb3B0aW9uKiB0YXJnZXQqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9wdGlvbnM6Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC0taGVscCAgICAgICAgICBQcmludCB0aGlzIHRleHQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1vbGR2ZXIgICAgICAgIFZlcnNpb24gb2Ygb2xkIHZlcnNpb24gb2YgSUNVIChvcHRpb25hbCkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1vbGRkaXIgICAgICAgIERpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHhtbCBkb2NzIG9mIG9sZCB2ZXJzaW9uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC0tbmV3dmVyICAgICAgICBWZXJzaW9uIG9mIG5ldyB2ZXJzaW9uIG9mIElDVSAob3B0aW9uYWwpIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC0tbmV3ZGlyICAgICAgICBEaXJlY3RvcnkgdGhhdCBjb250YWlucyB4bWwgZG9jcyBvZiBuZXcgdmVyc2lvbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtLWN4c2x0ICAgICAgICAgWFNMVCBmaWxlIGZvciBDIGRvY3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1jcHB4c2x0ICAgICAgIFhTTFQgZmlsZSBmb3IgQysrIGRvY3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1yZXBvcnR4c2x0ICAgIFhTTFQgZmlsZSBmb3IgcmVwb3J0IGRvY3MiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLS1yZXN1bHRmaWxlICAgIE91dHB1dCBmaWxlIik7CisgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGdldEF0dHIoTm9kZSBub2RlLCBTdHJpbmcgYXR0ck5hbWUpeworICAgIAlpZihub2RlLmdldEF0dHJpYnV0ZXMoKT09bnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCk9PTMpIHsKKy8vICAgIAkJcmV0dXJuICIodGV4dCBub2RlIDMpIjsKKyAgICAJCXJldHVybiAiKE5vZGU6ICIgKyBub2RlLnRvU3RyaW5nKCkgKyAiICkiOworLy8gICAgCQlyZXR1cm4gbm9kZS5nZXRGaXJzdENoaWxkKCkuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbShhdHRyTmFtZSkuZ2V0Tm9kZVZhbHVlKCk7CisgICAgCX0KKyAgICAJCisgICAgICAgIHRyeSB7CisgICAgICAgIAlyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGVzKCkuZ2V0TmFtZWRJdGVtKGF0dHJOYW1lKS5nZXROb2RlVmFsdWUoKTsKKyAgICAgICAgfSBjYXRjaChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKyAgICAgICAgCWlmKG5vZGUuZ2V0QXR0cmlidXRlcygpPT1udWxsKSAgeworICAgICAgICAJCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJbbm8gYXR0cmlidXRlcyBDYW4ndCBnZXQgYXR0ciAiK2F0dHJOYW1lICsiIG91dCBvZiBub2RlICIgKyBub2RlLmdldE5vZGVOYW1lKCkrIjoiK25vZGUuZ2V0Tm9kZVR5cGUoKSsiOiIrbm9kZS5nZXROb2RlVmFsdWUoKSsiQCIrbm9kZS5nZXRUZXh0Q29udGVudCgpKTsKKyAgICAgICAgCX0gZWxzZSBpZihub2RlLmdldEF0dHJpYnV0ZXMoKS5nZXROYW1lZEl0ZW0oYXR0ck5hbWUpPT1udWxsKSB7CisgICAgICAgIAkJcmV0dXJuIG51bGw7IAorICAgICAgICAJCS8vdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIk5vIGF0dHJpYnV0ZSBuYW1lZDogIithdHRyTmFtZSk7CisgICAgICAgIAl9IGVsc2UgeworICAgICAgICAJCVN5c3RlbS5lcnIucHJpbnRsbigiQ2FuJ3QgZ2V0IGF0dHIgIithdHRyTmFtZSsiOiAiK25wZS50b1N0cmluZygpKTsKKyAgICAgICAgCX0KKyAgICAgICAgCW5wZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJDYW4ndCBnZXQgYXR0ciAiK2F0dHJOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RyaW5nIGdldEF0dHIoTmFtZWROb2RlTWFwIGF0dHJMaXN0LCBTdHJpbmcgYXR0ck5hbWUpeworICAgICAgICByZXR1cm4gYXR0ckxpc3QuZ2V0TmFtZWRJdGVtKGF0dHJOYW1lKS5nZXROb2RlVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNsYXNzIEZ1bmN0aW9uIGltcGxlbWVudHMgQ29tcGFyYWJsZTxGdW5jdGlvbj4geworICAgICAgICBwdWJsaWMgU3RyaW5nIHByb3RvdHlwZTsKKyAgICAgICAgcHVibGljIFN0cmluZyBpZDsKKyAgICAgICAgcHVibGljIFN0cmluZyBzdGF0dXM7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgdmVyc2lvbjsKKyAgICAgICAgcHVibGljIFN0cmluZyBmaWxlOworICAgICAgICBwdWJsaWMgU3RyaW5nIGNvbXBhcmFibGVOYW1lOworICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoRnVuY3Rpb24gcmlnaHQpeworICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvdG90eXBlLmVxdWFscyhyaWdodC5wcm90b3R5cGUpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBGdW5jdGlvbiBmcm9tWG1sKE5vZGUgbil7CisgICAgICAgICAgICBGdW5jdGlvbiBmID0gbmV3IEZ1bmN0aW9uKCk7CisgICAgICAgICAgICBmLnByb3RvdHlwZSA9IGdldEF0dHIobiwgInByb3RvdHlwZSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZigieWVzIi5lcXVhbHMoZ2V0QXR0cihuLCAic3RhdGljIikpJiYhZi5wcm90b3R5cGUuY29udGFpbnMoInN0YXRpYyIpKSB7CisgICAgICAgICAgICAJZi5wcm90b3R5cGUgPSAic3RhdGljICIuY29uY2F0KGYucHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIGYuaWQgPSBnZXRBdHRyKG4sICJpZCIpOworICAgICAgICAgICAgZi5zdGF0dXMgPSBnZXRBdHRyKG4sICJzdGF0dXMiKTsKKyAgICAgICAgICAgIGYudmVyc2lvbiA9IHRyaW1JQ1UoZ2V0QXR0cihuLCAidmVyc2lvbiIpKTsKKyAgICAgICAgICAgIGYuZmlsZSA9IGdldEF0dHIobiwgImZpbGUiKTsKKyAgICAgICAgICAgIGYucHVyaWZ5UHJvdG90eXBlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGYuc2ltcGxpZnlQcm90b3R5cGUoKTsKKworICAgICAgICAgICAgaWYoZi5maWxlID09IG51bGwpIHsKKyAgICAgICAgICAgIAlmLmZpbGUgPSAie251bGx9IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAJZi5maWxlID0gRnVuY3Rpb24uZ2V0QmFzZW5hbWUoZi5maWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGYuY29tcGFyYWJsZU5hbWUgPSBmLmNvbXBhcmFibGVOYW1lKCk7CisgICAgICAgICAgICByZXR1cm4gZjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnZlcnQgc3RyaW5nIHRvIGJhc2VuYW1lLgorICAgICAgICAgKiBAcGFyYW0gc3RyCisgICAgICAgICAqIEByZXR1cm4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRCYXNlbmFtZShTdHJpbmcgc3RyKXsKKyAgICAgICAgICAgIGludCBpID0gc3RyLmxhc3RJbmRleE9mKCIvIik7CisgICAgICAgICAgICBzdHIgPSBpID09IC0xID8gc3RyIDogc3RyLnN1YnN0cmluZyhpKzEpOworICAgICAgICAgICAgcmV0dXJuIHN0cjsKKyAgICAgICAgfQorICAgICAgICAKKworICAgICAgICBzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgcmVwbExpc3RbXSA9IHsgICJbIF0qXFwoWyBdKnZvaWRbIF0qXFwpWyBdKiIsICAgIigpIiwgIC8vIGNsZWFudXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICwgIiwgIiwgIiwgICAgICAgICAgICAgICAgLy8gY2xlYW51cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbIF0qPVsgXSowWyBdKiQiLCAiPTAiLCAgICAgIC8vIGNsZWFudXAgcHVyZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcKVsgXSpjb25zdCIsICIpIGNvbnN0IiwgIC8vIFRoaXMganVzdCBjbGVhbnMgdXAgdGhlIHNwYWNpbmcuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXmNvbnN0IFsgXSoiLCAiY29uc3QgIiwgLy8gY2xlYW51cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIihbLCldKVsgXSpjb25zdCBbIF0qIiwgIlwxIiwgIC8vIFRPRE86IG5vdGlmeSBhYm91dCB0aGlzIGRpZmZlcmVuY2UsIHNlcGFyYXRlbHkgLSByZW1vdmUgY29uc3QgZnJvbSBwYXJhbQorICAgICAgICAgICAgCQkJCQkJfTsKKworICAgICAgICAvKioKKyAgICAgICAgICogdGhlc2UgYXJlIG5vdGVkIGFzIGRlbHRhcy4KKyAgICAgICAgICovCisgICAgICAgIHN0YXRpYyBwcml2YXRlIFN0cmluZyBzaW1wbGlmeUxpc3RbXSA9IHsgCisgICAgICAgICAgICAiWyBdKj1bIF0qMFsgXSokIiwgIiIsICAgICAgLy8gcmVtb3ZlIHB1cmUgdmlydHVhbCAtIFRPRE86IG5vdGlmeSBhYm91dCB0aGlzIGRpZmZlcmVuY2UsIHNlcGFyYXRlbHkKKyAgICAgICAgICAgICJcXClbIF0qY29uc3RbIF0qJCIsICIpIiwgIC8vIFRPRE86IG5vdGlmeSBhYm91dCB0aGlzIGRpZmZlcmVuY2UsIHNlcGFyYXRlbHkgLSByZW1vdmUgY29uc3QgZnJvbSBmdW5jdGlvbiB0eXBlCisgICAgICAgIH07CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpYWwgY2FzZXM6CisgICAgICAgICAqIAorICAgICAgICAgKiBSZW1vdmUgdGhlIHN0YXR1cyBhdHRyaWJ1dGUgZW1iZWRkZWQgaW4gdGhlIEMgcHJvdG90eXBlCisgICAgICAgICAqIAorICAgICAgICAgKiBSZW1vdmUgdGhlIHZpcnR1YWwga2V5d29yZCBpbiBDcHAgcHJvdG90eXBlCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgcHVyaWZ5UHJvdG90eXBlKCl7CisgICAgICAgICAgICAvL3JlZmVyIHRvICd1bWFjaGluZS5oJworICAgICAgICAgICAgU3RyaW5nIHN0YXR1c0xpc3RbXSA9IHsiVV9DQVBJIiwgIlVfU1RBQkxFIiwgIlVfRFJBRlQiLCAiVV9ERVBSRUNBVEVEIiwgIlVfT0JTT0xFVEUiLCAiVV9JTlRFUk5BTCIsICJ2aXJ0dWFsIiwgIlVfRVhQT1JUMiIsICJVX0kxOE5fQVBJIiwgIlVfQ09NTU9OX0FQSSIgfTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdHVzTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyBzID0gc3RhdHVzTGlzdFtpXTsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwcm90b3R5cGUucmVwbGFjZUFsbChzLCIiKTsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwcm90b3R5cGUudHJpbSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGxMaXN0Lmxlbmd0aDsgaSs9IDIpIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwcm90b3R5cGUucmVwbGFjZUFsbChyZXBsTGlzdFtpKzBdLHJlcGxMaXN0W2krMV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHByb3RvdHlwZS50cmltKCk7CisKKyAgICAgICAgICAgIC8vIE5vdywgcmVtb3ZlIHBhcmFtZXRlciBuYW1lcyEKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgaW4gPSBuZXcgU3RyaW5nQnVmZmVyKHByb3RvdHlwZSk7CisgICAgICAgICAgICBpbnQgb3BlblBhcmVuID0gaW4uaW5kZXhPZigiKCIpOworICAgICAgICAgICAgaW50IGNsb3NlUGFyZW4gPSBpbi5sYXN0SW5kZXhPZigiKSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZihvcGVuUGFyZW49PS0xIHx8IGNsb3NlUGFyZW49PS0xKSByZXR1cm47IC8vIGV4aXQsIG1hbGZvcm1lZD8KKyAgICAgICAgICAgIGlmKG9wZW5QYXJlbisxPT1jbG9zZVBhcmVuKSByZXR1cm47IC8vIGV4aXQ6ICgpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dC5hcHBlbmQoaW4sIDAsIG9wZW5QYXJlbisxKTsgLy8gcHJlbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IoaW50IGxlZnQgPSBvcGVuUGFyZW4rMTsgbGVmdDxjbG9zZVBhcmVuOykgeworICAgICAgICAgICAgCWludCByaWdodCA9IGluLmluZGV4T2YoIiwiLCBsZWZ0KzEpOyAvLyByaWdodCBlZGdlCisgICAgICAgICAgICAJaWYocmlnaHQ+PWNsb3NlUGFyZW4gfHwgcmlnaHQ9PS0xICkgIHJpZ2h0PWNsb3NlUGFyZW47IC8vIGZvdW5kIGxhc3QgY29tbWEKKyAgICAgICAgICAgIAkKKyAgICAgICAgICAgIC8vCVN5c3RlbS5lcnIucHJpbnRsbigiQ29uc2lkZXJpbmcgICIgKyBsZWZ0ICsgIiAvICIgKyByaWdodCArICIgLSAiICsgY2xvc2VQYXJlbiArICAiIDogIiAgKyBpbi5zdWJzdHJpbmcobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIAkKKyAgICAgICAgICAgIAlpZihsZWZ0PT1yaWdodCkgY29udGludWU7IAorICAgICAgICAgICAgCQorICAgICAgICAgICAgCS8vIGZpbmQgdmFyaWFibGUgbmFtZQorICAgICAgICAgICAgCWludCByaWdodENoID0gcmlnaHQtMTsKKyAgICAgICAgICAgIAlpZihyaWdodENoPT1sZWZ0KSB7IC8vIDEgY2gtIGJyZWFrCisgICAgICAgICAgICAJCW91dC5hcHBlbmQoaW4sbGVmdCxyaWdodCk7CisgICAgICAgICAgICAJCWNvbnRpbnVlOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAkvLyBlYXQgd2hpdGVzcGFjZSBhdCByaWdodAorICAgICAgICAgICAgCWludCBuYW1lRW5kQ2ggPSByaWdodENoOworICAgICAgICAgICAgCXdoaWxlKG5hbWVFbmRDaD5sZWZ0ICYmIENoYXJhY3Rlci5pc1doaXRlc3BhY2UoaW4uY2hhckF0KG5hbWVFbmRDaCkpKSB7CisgICAgICAgICAgICAJCW5hbWVFbmRDaC0tOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAlpbnQgbmFtZVN0YXJ0Q2ggPSBuYW1lRW5kQ2g7CisgICAgICAgICAgICAJd2hpbGUobmFtZVN0YXJ0Q2g+bGVmdCAmJiBDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclBhcnQoaW4uY2hhckF0KG5hbWVTdGFydENoKSkpIHsKKyAgICAgICAgICAgIAkJbmFtZVN0YXJ0Q2gtLTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICAJCisgICAgICAgICAgICAJLy8gbm93LCBkaWQgd2UgZmluZCBzb21ldGhpbmcgdG8gc2tpcD8KKyAgICAgICAgICAgIAlpZihuYW1lU3RhcnRDaD5sZWZ0ICYmIG5hbWVFbmRDaD5uYW1lU3RhcnRDaCkgeworICAgICAgICAgICAgCQlvdXQuYXBwZW5kKGluLCBsZWZ0LCBuYW1lU3RhcnRDaCsxKTsKKyAgICAgICAgICAgIAl9IGVsc2UgeworICAgICAgICAgICAgCQkvLyBwYXNzIHRocm91Z2gKKyAgICAgICAgICAgIAkJb3V0LmFwcGVuZChpbiwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAkKKyAgICAgICAgICAgIAlsZWZ0ID0gcmlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dC5hcHBlbmQoaW4sIGNsb3NlUGFyZW4sIGluLmxlbmd0aCgpKTsgLy8gcG9zdGx1ZGUKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRGVsZXRlIGFueSBkb3VibGVkIHdoaXRlc3BhY2UuCisgICAgICAgICAgICBmb3IoaW50IHA9MTtwPG91dC5sZW5ndGgoKTtwKyspIHsKKyAgICAgICAgICAgICAgICBjaGFyIHByZXYgPSBvdXQuY2hhckF0KHAtMSk7IAorICAgICAgICAgICAgCWlmKENoYXJhY3Rlci5pc1doaXRlc3BhY2UocHJldikpIHsKKyAgICAgICAgICAgIAkJd2hpbGUgKG91dC5sZW5ndGgoKT5wJiYoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShvdXQuY2hhckF0KHApKSkpIHsKKyAgICAgICAgICAgIAkJCW91dC5kZWxldGVDaGFyQXQocCk7CisgICAgICAgICAgICAJCX0KKyAgICAgICAgICAgIAkJaWYob3V0Lmxlbmd0aCgpPnApIHsKKyAgICAgICAgICAgIAkJCS8vIGFueSB0cmFpbGluZ3MgdG8gZGVsZXRlPworICAgICAgICAgICAgCQkJY2hhciBjdXJyID0gb3V0LmNoYXJBdChwKTsKKyAgICAgICAgICAgIAkJCWlmKGN1cnI9PScsJyB8fCBjdXJyPT0nKScgfHwgY3Vycj09JyonIHx8IGN1cnI9PScmJykgeyAvLyBkZWxldGUgc3BhY2VzIGJlZm9yZSB0aGVzZS4KKyAgICAgICAgICAgIAkJCQlvdXQuZGVsZXRlQ2hhckF0KC0tcCk7CisgICAgICAgICAgICAJCQkJY29udGludWU7CisgICAgICAgICAgICAJCQl9CisgICAgICAgICAgICAJCX0KKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAvLyAgU3lzdGVtLmVyci5wcmludGxuKHByb3RvdHlwZSsiIC0+ICIgKyBvdXQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBwcm90b3R5cGUgPSBvdXQudG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBzaW1wbGlmeVByb3RvdHlwZSgpIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm90b3R5cGUwID0gcHJvdG90eXBlOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaW1wbGlmeUxpc3QubGVuZ3RoOyBpKz0gMikgeworICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHByb3RvdHlwZS5yZXBsYWNlQWxsKHNpbXBsaWZ5TGlzdFtpKzBdLHNpbXBsaWZ5TGlzdFtpKzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCFwcm90b3R5cGUwLmVxdWFscyhwcm90b3R5cGUpKSB7CisgICAgICAgICAgICAgICAgYWRkU2ltcGxpZmljYXRpb24ocHJvdG90eXBlMCwgcHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorLy8gICAgICAgIHByaXZhdGUgRWxlbWVudCB0b1htbChEb2N1bWVudCBkb2MpeworLy8gICAgICAgICAgICBFbGVtZW50ICBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudCgiZnVuYyIpOworLy8gICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCJwcm90b3R5cGUiLCBwcm90b3R5cGUpOworLy8gICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCJpZCIsIGlkKTsKKy8vICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgic3RhdHVzIiwgc3RhdHVzKTsKKy8vICAgICAgICAgICAgcmV0dXJuIGVsZTsKKy8vICAgICAgICB9CisJCXB1YmxpYyBpbnQgY29tcGFyZVRvKEZ1bmN0aW9uIG8pIHsKKwkJCXJldHVybiBjb21wYXJhYmxlTmFtZS5jb21wYXJlVG8oKChGdW5jdGlvbilvKS5jb21wYXJhYmxlTmFtZSk7CisJCX0KKwkJcHVibGljIFN0cmluZyBjb21wYXJhYmxlTmFtZSgpIHsgCisJCQlyZXR1cm4gZmlsZSsifCIrcHJvdG90eXBlKyJ8IitzdGF0dXMrInwiK3ZlcnNpb24rInwiK2lkOworCQl9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjbGFzcyBKb2luZWRGdW5jdGlvbiBpbXBsZW1lbnRzIENvbXBhcmFibGU8Sm9pbmVkRnVuY3Rpb24+IHsKKyAgICAgICAgcHVibGljIFN0cmluZyBwcm90b3R5cGU7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgbGVmdFJlZklkOworICAgICAgICBwdWJsaWMgU3RyaW5nIGxlZnRTdGF0dXM7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgbGVmdFZlcnNpb247CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcmlnaHRWZXJzaW9uOworICAgICAgICBwdWJsaWMgU3RyaW5nIGxlZnRGaWxlOworICAgICAgICBwdWJsaWMgU3RyaW5nIHJpZ2h0UmVmSWQ7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcmlnaHRTdGF0dXM7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcmlnaHRGaWxlOworICAgICAgICAKKyAgICAgICAgcHVibGljIFN0cmluZyBjb21wYXJhYmxlTmFtZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKb2luZWRGdW5jdGlvbiBmcm9tTGVmdEZ1bihGdW5jdGlvbiBsZWZ0KXsKKyAgICAgICAgICAgIEpvaW5lZEZ1bmN0aW9uIHUgPSBuZXcgSm9pbmVkRnVuY3Rpb24oKTsKKyAgICAgICAgICAgIHUucHJvdG90eXBlID0gbGVmdC5wcm90b3R5cGU7CisgICAgICAgICAgICB1LmxlZnRSZWZJZCA9IGxlZnQuaWQ7CisgICAgICAgICAgICB1LmxlZnRTdGF0dXMgPSBsZWZ0LnN0YXR1czsKKyAgICAgICAgICAgIHUubGVmdEZpbGUgPSBsZWZ0LmZpbGU7CisgICAgICAgICAgICB1LnJpZ2h0UmVmSWQgPSBudWw7CisgICAgICAgICAgIC8vIHUucmlnaHRWZXJzaW9uID0gbnVsOworICAgICAgICAgICAgdS5sZWZ0VmVyc2lvbiA9IGxlZnQudmVyc2lvbjsKKyAgICAgICAgICAgIHUucmlnaHRTdGF0dXMgPSBudWw7CisgICAgICAgICAgICB1LnJpZ2h0RmlsZSA9IG51bDsKKyAgICAgICAgICAgIHUuY29tcGFyYWJsZU5hbWUgPSBsZWZ0LmNvbXBhcmFibGVOYW1lOworICAgICAgICAgICAgcmV0dXJuIHU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgc3RhdGljIEpvaW5lZEZ1bmN0aW9uIGZyb21SaWdodEZ1bihGdW5jdGlvbiByaWdodCl7CisgICAgICAgICAgICBKb2luZWRGdW5jdGlvbiB1ID0gbmV3IEpvaW5lZEZ1bmN0aW9uKCk7CisgICAgICAgICAgICB1LnByb3RvdHlwZSA9IHJpZ2h0LnByb3RvdHlwZTsKKyAgICAgICAgICAgIHUubGVmdFJlZklkID0gbnVsOworICAgICAgICAgICAgdS5sZWZ0U3RhdHVzID0gbnVsOworICAgICAgICAgICAgdS5sZWZ0RmlsZSA9IG51bDsKKyAgICAgICAgICAgLy8gdS5sZWZ0VmVyc2lvbiA9IG51bDsKKyAgICAgICAgICAgIHUucmlnaHRWZXJzaW9uID0gcmlnaHQudmVyc2lvbjsKKyAgICAgICAgICAgIHUucmlnaHRSZWZJZCA9IHJpZ2h0LmlkOworICAgICAgICAgICAgdS5yaWdodFN0YXR1cyA9IHJpZ2h0LnN0YXR1czsKKyAgICAgICAgICAgIHUucmlnaHRGaWxlID0gcmlnaHQuZmlsZTsKKyAgICAgICAgICAgIHUuY29tcGFyYWJsZU5hbWUgPSByaWdodC5jb21wYXJhYmxlTmFtZTsKKyAgICAgICAgICAgIHJldHVybiB1OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSm9pbmVkRnVuY3Rpb24gZnJvbVR3b0Z1bihGdW5jdGlvbiBsZWZ0LCBGdW5jdGlvbiByaWdodCl7CisgICAgICAgICAgICBpZiAoIWxlZnQuZXF1YWxzKHJpZ2h0KSkgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgICAgICAgICBKb2luZWRGdW5jdGlvbiB1ID0gbmV3IEpvaW5lZEZ1bmN0aW9uKCk7CisgICAgICAgICAgICB1LnByb3RvdHlwZSA9IGxlZnQucHJvdG90eXBlOworICAgICAgICAgICAgdS5sZWZ0UmVmSWQgPSBsZWZ0LmlkOworICAgICAgICAgICAgdS5sZWZ0U3RhdHVzID0gbGVmdC5zdGF0dXM7CisgICAgICAgICAgICB1LmxlZnRGaWxlID0gbGVmdC5maWxlOworICAgICAgICAgICAgdS5yaWdodFJlZklkID0gcmlnaHQuaWQ7CisgICAgICAgICAgICB1LnJpZ2h0U3RhdHVzID0gcmlnaHQuc3RhdHVzOworICAgICAgICAgICAgdS5sZWZ0VmVyc2lvbiA9IGxlZnQudmVyc2lvbjsKKyAgICAgICAgICAgIHUucmlnaHRWZXJzaW9uID0gcmlnaHQudmVyc2lvbjsKKyAgICAgICAgICAgIHUucmlnaHRGaWxlID0gcmlnaHQuZmlsZTsKKyAgICAgICAgICAgIHUuY29tcGFyYWJsZU5hbWUgPSBsZWZ0LmNvbXBhcmFibGVOYW1lKyIrIityaWdodC5jb21wYXJhYmxlTmFtZTsKKyAgICAgICAgICAgIHJldHVybiB1OworICAgICAgICB9CisKKyAgICAgICAgRWxlbWVudCB0b1htbChEb2N1bWVudCBkb2MpeworICAgICAgICAgICAgRWxlbWVudCAgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoImZ1bmMiKTsKKyAgICAgICAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoInByb3RvdHlwZSIsIGZvcm1hdENvZGUocHJvdG90eXBlKSk7CisvLyAgICAgICAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoImxlZnRSZWZJZCIsIGxlZnRSZWZJZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoImxlZnRTdGF0dXMiLCBsZWZ0U3RhdHVzKTsKKy8vICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRSZWZJZCIsIHJpZ2h0UmVmSWQpOworICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRTdGF0dXMiLCByaWdodFN0YXR1cyk7CisgICAgICAgICAgICBlbGUuc2V0QXR0cmlidXRlKCJsZWZ0VmVyc2lvbiIsIGxlZnRWZXJzaW9uKTsKKy8vICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRSZWZJZCIsIHJpZ2h0UmVmSWQpOworICAgICAgICAgICAgZWxlLnNldEF0dHJpYnV0ZSgicmlnaHRWZXJzaW9uIiwgcmlnaHRWZXJzaW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisvLyAgICAgICAgICAgIFN0cmluZyBmID0gcmlnaHRSZWZJZC5lcXVhbHMobnVsKSA/IGxlZnRSZWZJZCA6IHJpZ2h0UmVmSWQ7CisvLyAgICAgICAgICAgIGludCB0YWlsID0gZi5pbmRleE9mKCJfIik7CisvLyAgICAgICAgICAgIGYgPSB0YWlsICE9IC0xID8gZi5zdWJzdHJpbmcoMCwgdGFpbCkgOiBmOworLy8gICAgICAgICAgICBmID0gZi5zdGFydHNXaXRoKCJjbGFzcyIpID8gZi5yZXBsYWNlRmlyc3QoImNsYXNzIiwiIikgOiBmOworICAgICAgICAgICAgU3RyaW5nIGYgPSByaWdodEZpbGUuZXF1YWxzKG51bCkgPyBsZWZ0RmlsZSA6IHJpZ2h0RmlsZTsKKyAgICAgICAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoImZpbGUiLCBmKTsKKyAgICAgICAgICAgIHJldHVybiBlbGU7CisgICAgICAgIH0KKyAgICAgICAgCisKKwkJcHVibGljIGludCBjb21wYXJlVG8oSm9pbmVkRnVuY3Rpb24gbykgeworCQkJcmV0dXJuIGNvbXBhcmFibGVOYW1lLmNvbXBhcmVUbyhvLmNvbXBhcmFibGVOYW1lKTsKKwkJfQorCQkKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKEZ1bmN0aW9uIHJpZ2h0KXsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZS5lcXVhbHMocmlnaHQucHJvdG90eXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc0ZhYyA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgIFRyYW5zZm9ybWVyIG1ha2VUcmFuc2Zvcm1lcihJbnB1dFN0cmVhbSBpcywgU3RyaW5nIG5hbWUpIHsKKyAgICAJaWYoaXM9PW51bGwpIHsKKyAgICAJCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJObyBpbnB1dHN0cmVhbSBzZXQgZm9yICIgKyBuYW1lKTsKKyAgICAJfQorICAgIAlTeXN0ZW0uZXJyLnByaW50bG4oIlRyYW5zZm9ybWluZyBmcm9tOiAiICsgbmFtZSk7CisgICAgCVRyYW5zZm9ybWVyIHQ7CisJCXRyeSB7CisvLwkJCS8vIGNoZWNrIHRoZSBwcm9sb2cKKy8vCQkJaWYoaXMubWFya1N1cHBvcnRlZCgpKSAgdHJ5IHsKKy8vCQkJCWlzLm1hcmsoMTAwKTsKKy8vCQkJCWludCBiID0gaXMucmVhZCgpOworLy8JCQkJaXMucmVzZXQoKTsKKy8vCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiUmVhZCBieXRlOiA9PSAiICsgSW50ZWdlci50b0hleFN0cmluZyhiKSk7CisvLwkJCX0gY2F0Y2goVGhyb3dhYmxlIHRoKSB7CisvLwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIiAoIGNvdWxkbid0IHJlYWQgYSBieXRlOiAiICsgdGgudG9TdHJpbmcoKSsgIiApIik7CisvLwkJCX0gZWxzZSB7CisvLwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIiAoIGNvdWxkbid0IHNldCBtYXJrKSIpOworLy8JCQl9CisJCQlTdHJlYW1Tb3VyY2Ugc3MgPSBuZXcgU3RyZWFtU291cmNlKGlzKTsKKwkJCXNzLnNldFN5c3RlbUlkKG5ldyBGaWxlKCIuIikpOworCQkJdCA9IHRyYW5zRmFjLm5ld1RyYW5zZm9ybWVyKHNzKTsKKwkJfSBjYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcigiQ291bGRuJ3QgbWFrZSB0cmFuc2Zvcm1lciBmb3IgIiArIG5hbWUgKyAiIC0gIiArIGUuZ2V0TWVzc2FnZUFuZExvY2F0aW9uKCkpOwkJCQorCQl9CisgICAgCWlmKHQgPT0gbnVsbCkgeworICAgIAkJdGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkNvdWxkbid0IG1ha2UgdHJhbnNmb3JtZXIgZm9yICIgKyBuYW1lKTsKKyAgICAJfQorICAgIAlyZXR1cm4gdDsKKyAgICB9CisgICAgcHJpdmF0ZSB2b2lkIHJlcG9ydFNlbGVjdGVkRnVuKE5vZGUgam9pbmVkTm9kZSkgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9ueworICAgICAgICBUcmFuc2Zvcm1lciByZXBvcnQgPSBtYWtlVHJhbnNmb3JtZXIocmVwb3J0WHNsU3RyZWFtLCBSUFRYU0xUKTsKKyAgICAgICAgLy9yZXBvcnQuc2V0UGFyYW1ldGVyKCJsZWZ0U3RhdHVzIiwgbGVmdFN0YXR1cyk7CisgICAgICAgIHJlcG9ydC5zZXRQYXJhbWV0ZXIoImxlZnRWZXIiLCBsZWZ0VmVyKTsKKy8vICAgICAgICByZXBvcnQuc2V0UGFyYW1ldGVyKCJyaWdodFN0YXR1cyIsIHJpZ2h0U3RhdHVzKTsKKyAgICAgICAgcmVwb3J0LnNldFBhcmFtZXRlcigib3VyWWVhciIsIG5ldyBJbnRlZ2VyKG5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKS5nZXQoamF2YS51dGlsLkNhbGVuZGFyLllFQVIpKSk7CisgICAgICAgIHJlcG9ydC5zZXRQYXJhbWV0ZXIoInJpZ2h0VmVyIiwgcmlnaHRWZXIpOworICAgICAgICByZXBvcnQuc2V0UGFyYW1ldGVyKCJyaWdodE1pbGVzdG9uZSIsIHJpZ2h0TWlsZXN0b25lKTsKKyAgICAgICAgcmVwb3J0LnNldFBhcmFtZXRlcigibGVmdE1pbGVzdG9uZSIsIGxlZnRNaWxlc3RvbmUpOworICAgICAgICByZXBvcnQuc2V0UGFyYW1ldGVyKCJkYXRlVGltZSIsIG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpLmdldFRpbWUoKSk7CisgICAgICAgIHJlcG9ydC5zZXRQYXJhbWV0ZXIoIm51bCIsIG51bCk7CisgICAgICAgIAorICAgICAgICBET01Tb3VyY2Ugc3JjID0gbmV3IERPTVNvdXJjZShqb2luZWROb2RlKTsKKworICAgICAgICBSZXN1bHQgcmVzID0gbmV3IFN0cmVhbVJlc3VsdChyZXN1bHRGaWxlKTsKKy8vICAgICAgICBET01SZXN1bHQgcmVzID0gbmV3IERPTVJlc3VsdCgpOworICAgICAgICByZXBvcnQudHJhbnNmb3JtKHNyYywgcmVzKTsKKy8vICAgICAgICBkdW1wTm9kZShyZXMuZ2V0Tm9kZSgpLCIiKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTZXQ8Sm9pbmVkRnVuY3Rpb24+IGdldEZ1bGxMaXN0KElucHV0U3RyZWFtIGR1bXBYc2x0U3RyZWFtLCBTdHJpbmcgZHVtcFhzbHRGaWxlKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbnsKKyAgICAgICAgLy8gcHJlcGFyZSB0cmFuc2Zvcm1lcgorICAgICAgICBYUGF0aCB4cGF0aCA9IFhQYXRoRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1hQYXRoKCk7CisgICAgICAgIFN0cmluZyBleHByZXNzaW9uID0gIi9saXN0IjsKKyAgICAgICAgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBtYWtlVHJhbnNmb3JtZXIoZHVtcFhzbHRTdHJlYW0sIGR1bXBYc2x0RmlsZSk7CisKKyAgICAgICAgLy8gICAgICAgIElucHV0U291cmNlIGxlZnRTb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2UobGVmdERpciArICJpbmRleC54bWwiKTsKKyAgICAgICAgRE9NU291cmNlIGxlZnRJbmRleCA9IG5ldyBET01Tb3VyY2UoZ2V0RG9jdW1lbnQobmV3IEZpbGUobGVmdERpcixJTkRFWF9YTUwpKSk7CisgICAgICAgIERPTVJlc3VsdCBsZWZ0UmVzdWx0ID0gbmV3IERPTVJlc3VsdCgpOworICAgICAgICB0cmFuc2Zvcm1lci5zZXRQYXJhbWV0ZXIoRE9DX0ZPTERFUiwgbGVmdERpcik7CisgICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShsZWZ0SW5kZXgsIGxlZnRSZXN1bHQpOworCisvLyAgICAgICAgTm9kZSBsZWZ0TGlzdCA9IFhQYXRoQVBJLnNlbGVjdFNpbmdsZU5vZGUobGVmdFJlc3VsdC5nZXROb2RlKCksIi9saXN0Iik7CisgICAgICAgIE5vZGUgbGVmdExpc3QgPSAoTm9kZSl4cGF0aC5ldmFsdWF0ZShleHByZXNzaW9uLCBsZWZ0UmVzdWx0LmdldE5vZGUoKSwgWFBhdGhDb25zdGFudHMuTk9ERSk7CisgICAgICAgIGlmKGxlZnRMaXN0PT1udWxsKSB7CisgICAgICAgICAgIAkvL2R1bXBOb2RlKHhzbHRTb3VyY2UuZ2V0Tm9kZSgpKTsKKyAgICAgICAgICAJZHVtcE5vZGUobGVmdFJlc3VsdC5nZXROb2RlKCkpOworLy8gICAgICAgIAlkdW1wTm9kZShsZWZ0SW5kZXguZ2V0Tm9kZSgpKTsKKyAgICAgICAgCVN5c3RlbS5vdXQuZmx1c2goKTsKKyAgICAgICAgCVN5c3RlbS5lcnIuZmx1c2goKTsKKyAgICAgICAgCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJnZXRGdWxsTGlzdCgiK2R1bXBYc2x0RmlsZS50b1N0cmluZygpKyIpIHJldHVybmVkIGEgbnVsbCBsZWZ0ICIrZXhwcmVzc2lvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHhwYXRoLnJlc2V0KCk7IC8vIHJldXNlCisgICAgICAgIAorICAgICAgICBET01Tb3VyY2UgcmlnaHRJbmRleCA9IG5ldyBET01Tb3VyY2UoZ2V0RG9jdW1lbnQobmV3IEZpbGUocmlnaHREaXIsSU5ERVhfWE1MKSkpOworICAgICAgICBET01SZXN1bHQgcmlnaHRSZXN1bHQgPSBuZXcgRE9NUmVzdWx0KCk7CisgICAgICAgIHRyYW5zZm9ybWVyLnNldFBhcmFtZXRlcihET0NfRk9MREVSLCByaWdodERpcik7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9hZGluZzogIitkdW1wWHNsdEZpbGUudG9TdHJpbmcoKSk7CisgICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShyaWdodEluZGV4LCByaWdodFJlc3VsdCk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiICAgLi4gbG9hZGVkOiAiK2R1bXBYc2x0RmlsZS50b1N0cmluZygpKTsKKyAgICAgICAgTm9kZSByaWdodExpc3QgPSAoTm9kZSl4cGF0aC5ldmFsdWF0ZShleHByZXNzaW9uLCByaWdodFJlc3VsdC5nZXROb2RlKCksIFhQYXRoQ29uc3RhbnRzLk5PREUpOworICAgICAgICBpZihyaWdodExpc3Q9PW51bGwpIHsKKyAgICAgICAgCXRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJnZXRGdWxsTGlzdCgiK2R1bXBYc2x0RmlsZS50b1N0cmluZygpKyIpIHJldHVybmVkIGEgbnVsbCByaWdodCAiK2V4cHJlc3Npb24pOworICAgICAgICB9CisvLyAgICAgICAgZHVtcE5vZGUocmlnaHRMaXN0LCIiKTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBTZXQ8RnVuY3Rpb24+IGxlZnRTZXQgPSBub2RlVG9TZXQobGVmdExpc3QpOworICAgICAgICBTZXQ8RnVuY3Rpb24+IHJpZ2h0U2V0ID0gbm9kZVRvU2V0KHJpZ2h0TGlzdCk7CisgICAgICAgIFNldDxKb2luZWRGdW5jdGlvbj4gam9pbmVkID0gZnVsbEpvaW4obGVmdFNldCwgcmlnaHRTZXQpOworICAgICAgICByZXR1cm4gam9pbmVkOworLy8gICAgICAgIGpvaW5lZE5vZGUgPSBzZXRUb05vZGUoam9pbmVkKTsKKy8vICAgICAgICBkdW1wTm9kZShqb2luZWROb2RlLCIiKTsKKy8vICAgICAgICByZXR1cm4gam9pbmVkTm9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gbm9kZQorICAgICAqIEByZXR1cm4gICAgICBTZXQ8RnVuPgorICAgICAqLworICAgIHByaXZhdGUgU2V0PEZ1bmN0aW9uPiBub2RlVG9TZXQoTm9kZSBub2RlKXsKKyAgICAgICAgU2V0PEZ1bmN0aW9uPiBzID0gbmV3IFRyZWVTZXQ8RnVuY3Rpb24+KCk7CisgICAgICAgIE5vZGVMaXN0IGxpc3QgPSBub2RlLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgbiA9IGxpc3QuaXRlbShpKTsKKyAgICAgICAgICAgIHMuYWRkKEZ1bmN0aW9uLmZyb21YbWwobikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBzZXQgICAgICAgU2V0PEpvaW5lZEZ1bj4KKyAgICAgKiBAcmV0dXJuCisgICAgICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBOb2RlIHNldFRvTm9kZShTZXQ8Sm9pbmVkRnVuY3Rpb24+IHNldCkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb257CisgICAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZGJmID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICBEb2N1bWVudCBkb2MgID0gZGJmLm5ld0RvY3VtZW50QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7CisgICAgICAgIEVsZW1lbnQgcm9vdCA9IGRvYy5jcmVhdGVFbGVtZW50KCJsaXN0Iik7CisgICAgICAgIGRvYy5hcHBlbmRDaGlsZChyb290KTsKKyAgICAgICAgZm9yIChJdGVyYXRvcjxKb2luZWRGdW5jdGlvbj4gaXRlciA9IHNldC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKKyAgICAgICAgICAgIEpvaW5lZEZ1bmN0aW9uIGZ1biA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChmdW4udG9YbWwoZG9jKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIGFkZCB0aGUgJ2NoYW5nZWQnIHN0dWZmCisgICAgICAgIEVsZW1lbnQgcm9vdDIgPSBkb2MuY3JlYXRlRWxlbWVudCgic2ltcGxpZmljYXRpb25zIik7CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQocm9vdDIpOworICAgICAgICB7CisgICAgICAgIAlmb3IoU3RyaW5nIHNpbXBsaWZpY2F0aW9uIDogZ2V0Q2hhbmdlZFNpbXBsaWZpY2F0aW9ucygpKSB7CisgICAgICAgIAkJRWxlbWVudCBzdWJTaW1wbGlmaWNhdGlvbiA9IGRvYy5jcmVhdGVFbGVtZW50KCJzaW1wbGlmaWNhdGlvbiIpOworICAgICAgICAJCUVsZW1lbnQgYmFzZUVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgiYmFzZSIpOworICAgICAgICAJCWJhc2VFbGVtZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShzaW1wbGlmaWNhdGlvbikpOworICAgICAgICAJCXN1YlNpbXBsaWZpY2F0aW9uLmFwcGVuZENoaWxkKGJhc2VFbGVtZW50KTsKKyAgICAgICAgCQkKKyAgICAgICAgCQlyb290Mi5hcHBlbmRDaGlsZChzdWJTaW1wbGlmaWNhdGlvbik7CisgICAgICAgIAkJCisgICAgICAgIAkJZm9yKFN0cmluZyBjaGFuZ2UgOiBzaW1wbGlmaWNhdGlvbnMuZ2V0KHNpbXBsaWZpY2F0aW9uKSkgeworICAgICAgICAJCQlFbGVtZW50IGNoYW5nZUVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgiY2hhbmdlIik7CisgICAgICAgIAkJCWNoYW5nZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNoYW5nZSkpOworICAgICAgICAJCQlzdWJTaW1wbGlmaWNhdGlvbi5hcHBlbmRDaGlsZChjaGFuZ2VFbGVtZW50KTsKKyAgICAgICAgCQl9CisJICAgICAgIAl9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBkb2M7CisgICAgfQorCisgICAgLyoqCisgICAgICogZnVsbC1qb2luIHR3byBTZXQgb24gJ3Byb3RvdHlwZScgCisgICAgICogCisgICAgICogQHBhcmFtIGxlZnQgICAgIFNldDxGdW4+CisgICAgICogQHBhcmFtIHJpZ2h0ICAgIFNldDxGdW4+CisgICAgICogQHJldHVybiAgICAgICAgICBTZXQ8Sm9pbmVkRnVuPgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFNldDxKb2luZWRGdW5jdGlvbj4gZnVsbEpvaW4oU2V0PEZ1bmN0aW9uPiBsZWZ0LCBTZXQ8RnVuY3Rpb24+IHJpZ2h0KXsKKworICAgICAgICBTZXQ8Sm9pbmVkRnVuY3Rpb24+IGpvaW5lZCA9IG5ldyBUcmVlU2V0PEpvaW5lZEZ1bmN0aW9uPigpOyAvL1NldDxKb2luZWRGdW4+CisgICAgICAgIFNldDxGdW5jdGlvbj4gY29tbW9uID0gbmV3IFRyZWVTZXQ8RnVuY3Rpb24+KCk7IC8vU2V0PEZ1bj4KKyAgICAgICAgZm9yIChJdGVyYXRvcjxGdW5jdGlvbj4gaXRlcjEgPSBsZWZ0Lml0ZXJhdG9yKCk7IGl0ZXIxLmhhc05leHQoKTspIHsKKyAgICAgICAgICAgIEZ1bmN0aW9uIGYxID0gaXRlcjEubmV4dCgpOworLy8gICAgICAgICAgICBpZiAoZjEucHJvdG90eXBlLm1hdGNoZXMoIi4qVHJhbnNsaXRlcmF0b3I6Oi4qIikpeworLy8gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJsZWZ0OiAiICsgZjEucHJvdG90eXBlKTsKKy8vICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigibGVmdDogIiArIGYxLnN0YXR1cyk7CisvLyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoSXRlcmF0b3I8RnVuY3Rpb24+IGl0ZXIyID0gcmlnaHQuaXRlcmF0b3IoKTsgaXRlcjIuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgICAgIEZ1bmN0aW9uIGYyID0gaXRlcjIubmV4dCgpOworLy8gICAgICAgICAgICAgICAgaWYgKCBmMS5wcm90b3R5cGUubWF0Y2hlcygiLipmaWx0ZXJlZFRyYW5zbGl0ZXJhdGUuKiIpCisvLyAgICAgICAgICAgICAgICAgICYmIGYyLnByb3RvdHlwZS5tYXRjaGVzKCIuKmZpbHRlcmVkVHJhbnNsaXRlcmF0ZS4qIikpeworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigicmlnaHQ6ICIgKyBmMi5wcm90b3R5cGUpOworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigicmlnaHQ6ICIgKyBmMi5zdGF0dXMpOworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihmMS5wcm90b3R5cGUuZXF1YWxzKGYyLnByb3RvdHlwZSkpOworLy8gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihmMS5wcm90b3R5cGUuZ2V0Qnl0ZXMoKVswXSk7CisvLyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGYyLnByb3RvdHlwZS5nZXRCeXRlcygpWzBdKTsKKy8vICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZjEuZXF1YWxzKGYyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYWRkIGxlZnQgaXRlbSB0byBjb21tb24gc2V0CisgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgcmVtb3ZlIGNvbW1vbiBpdGVtcyB3aXRoIGxlZnQgc2V0IGxhdGVyCisgICAgICAgICAgICAgICAgICAgIGNvbW1vbi5hZGQoZjEpOworICAgICAgICAgICAgICAgICAgICBqb2luZWQuYWRkKEpvaW5lZEZ1bmN0aW9uLmZyb21Ud29GdW4oZjEsIGYyKSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0LnJlbW92ZShmMik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEl0ZXJhdG9yPEZ1bmN0aW9uPiBpdGVyID0gY29tbW9uLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgRnVuY3Rpb24gZiA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgbGVmdC5yZW1vdmUoZik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoSXRlcmF0b3I8RnVuY3Rpb24+IGl0ZXIgPSBsZWZ0Lml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworICAgICAgICAgICAgRnVuY3Rpb24gZiA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgam9pbmVkLmFkZChKb2luZWRGdW5jdGlvbi5mcm9tTGVmdEZ1bihmKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoSXRlcmF0b3I8RnVuY3Rpb24+IGl0ZXIgPSByaWdodC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKKyAgICAgICAgICAgIEZ1bmN0aW9uIGYgPSBpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGpvaW5lZC5hZGQoSm9pbmVkRnVuY3Rpb24uZnJvbVJpZ2h0RnVuKGYpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gam9pbmVkOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBOb2RlKE5vZGUgbikgeworICAgIAlkdW1wTm9kZShuLCIiKTsKKyAgICB9CisgICAgLyoqCisgICAgICogRHVtcCBvdXQgYSBub2RlIGZvciBkZWJ1Z2dpbmcuIFJlY3Vyc2l2ZSBmY24KKyAgICAgKiBAcGFyYW0gbgorICAgICAqIEBwYXJhbSBwcmUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXBOb2RlKE5vZGUgbiwgU3RyaW5nIHByZSkgeworICAgIAlTdHJpbmcgb3ByZSA9IHByZTsKKwkJcHJlICs9ICIgIjsKKwkJU3lzdGVtLm91dC5wcmludChvcHJlICsgIjwiICsgbi5nZXROb2RlTmFtZSgpICk7CisJCS8vIGR1bXAgYXR0cmlidXRlCisJCU5hbWVkTm9kZU1hcCBhdHRyID0gbi5nZXRBdHRyaWJ1dGVzKCk7CisJCWlmIChhdHRyICE9IG51bGwpIHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0ci5nZXRMZW5ndGgoKTsgaSsrKSB7CisJCQkJU3lzdGVtLm91dC5wcmludCgiXG4iK3ByZSsiICAgIithdHRyLml0ZW0oaSkuZ2V0Tm9kZU5hbWUoKSsiPVwiIiArIGF0dHIuaXRlbShpKS5nZXROb2RlVmFsdWUoKSsiXCIiKTsKKwkJCX0KKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIj4iKTsKKworCQkvLyBkdW1wIHZhbHVlCisJCVN0cmluZyB2ID0gcHJlICsgbi5nZXROb2RlVmFsdWUoKTsKKwkJaWYgKG4uZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKKwkJCVN5c3RlbS5vdXQucHJpbnRsbih2KTsKKworCQkvLyBkdW1wIHN1YiBub2RlcworCQlOb2RlTGlzdCBuTGlzdCA9IG4uZ2V0Q2hpbGROb2RlcygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG5MaXN0LmdldExlbmd0aCgpOyBpKyspIHsKKwkJCU5vZGUgbG4gPSBuTGlzdC5pdGVtKGkpOworCQkJZHVtcE5vZGUobG4sIHByZSArICIgIik7CisJCX0KKwkJU3lzdGVtLm91dC5wcmludGxuKG9wcmUgKyAiPC8iICsgbi5nZXROb2RlTmFtZSgpICsgIj4iKTsKKwl9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIHRoZUJ1aWxkZXIgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZGJmICA9IG51bGw7CisgICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgCWlmKHRoZUJ1aWxkZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgZGJmID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICAgICAgdGhlQnVpbGRlciA9IGRiZi5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKyAgICAJfQorICAgIAlyZXR1cm4gdGhlQnVpbGRlcjsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoRmlsZSBmaWxlKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbnsKKyAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7CisgICAgICAgIElucHV0U291cmNlIGlucHV0U291cmNlID0gbmV3IElucHV0U291cmNlKGZpcyk7CisgICAgICAgIERvY3VtZW50IGRvYyA9IGdldERvY3VtZW50QnVpbGRlcigpLnBhcnNlKGlucHV0U291cmNlKTsKKyAgICAgICAgcmV0dXJuIGRvYzsKKyAgICB9CisgICAgc3RhdGljIGJvb2xlYW4gdHJpZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgRm9ybWF0dGVyIGFGb3JtYXR0ZXIgPSBudWxsOworICAgIAorICAgIHB1YmxpYyBpbnRlcmZhY2UgRm9ybWF0dGVyIHsKKyAgICAJcHVibGljIFN0cmluZyBmb3JtYXRDb2RlKFN0cmluZyBzKTsKKyAgICB9CisgICAgCisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRfa2V5d29yZHNbXSA9IHsKKyAgICAJImVudW0iLCIjZGVmaW5lIiwic3RhdGljIgorICAgIH07CisgICAgCisgICAgLyoqCisgICAgICogQXR0ZW1wdCB0byB1c2UgYSBwcmV0dHkgZm9ybWF0dGVyCisgICAgICogQHBhcmFtIHByb3RvdHlwZTIKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZm9ybWF0Q29kZShTdHJpbmcgcHJvdG90eXBlMikgeworCQlpZighdHJpZWQpIHsKKwkJCVN0cmluZyB0aGVGb3JtYXR0ZXIgPSBTdGFibGVBUEkuY2xhc3MuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSsiLkNvZGVGb3JtYXR0ZXIiOworCQkJdHJ5IHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJCQlDbGFzczxGb3JtYXR0ZXI+IGZvcm1hdENsYXNzID0gKENsYXNzPEZvcm1hdHRlcj4pIENsYXNzLmZvck5hbWUodGhlRm9ybWF0dGVyKTsKKwkJCQlhRm9ybWF0dGVyID0gKEZvcm1hdHRlcikgZm9ybWF0Q2xhc3MubmV3SW5zdGFuY2UoKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKCJOb3RlOiBDb3VsZG4ndCBsb2FkICIgKyB0aGVGb3JtYXR0ZXIpOworCQkJCWFGb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKCkgeworCisJCQkJCXB1YmxpYyBTdHJpbmcgZm9ybWF0Q29kZShTdHJpbmcgcykgeworCQkJCQkJU3RyaW5nIHN0ciA9IEhUTUxTYWZlKHMudHJpbSgpKTsKKwkJCQkJCWZvcihTdHJpbmcga2V5d29yZCA6IGZvcm1hdF9rZXl3b3JkcykgeworCQkJCQkJCWlmKHN0ci5zdGFydHNXaXRoKGtleXdvcmQpKSB7CisJCQkJCQkJCXN0ciA9IHN0ci5yZXBsYWNlRmlyc3Qoa2V5d29yZCwgIjx0dD4iK2tleXdvcmQrIjwvdHQ+Iik7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJcmV0dXJuIHN0cjsKKwkJCQkJfQorCQkJCQkKKwkJCQl9OworCQkJfQorCQkJdHJpZWQgPSB0cnVlOworCQl9CisJCWlmKGFGb3JtYXR0ZXIgIT0gbnVsbCkgeworCQkJcmV0dXJuIGFGb3JtYXR0ZXIuZm9ybWF0Q29kZShwcm90b3R5cGUyKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBIVE1MU2FmZShwcm90b3R5cGUyKTsKKwkJfQorCX0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIEhUTUxTYWZlKFN0cmluZyBzKSB7CisgICAgICAgIGlmKHM9PW51bGwpIHJldHVybiBudWxsOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIAorICAgICAgICAgICAgcy5yZXBsYWNlQWxsKCImIiwiJmFtcDsiKQorICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCI8IiwiJmx0OyIpCisgICAgICAgICAgICAgLnJlcGxhY2VBbGwoIj4iLCImZ3Q7IikKKyAgICAgICAgICAgICAucmVwbGFjZUFsbCgiXCIiLCImcXVvdDsiKTsKKyAgICB9CisgICAgCisJCit9CmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuYy54c2x0IGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ0Z1bmMueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ0Z1bmMueHNsdApAQCAtMCwwICsxLDEwNyBAQAorPCEtLQorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVGhpcyBpcyBhbiBYU0xUIGJ1aWxkIGZpbGUgZm9yIElDVSB0b29scy4gCisqLworLS0+Cis8IS0tCisgIExpc3QgYWxsIEMgZnVuY3Rpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSAnaW5kZXgueG1sJworLS0+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iZG9jRm9sZGVyIiAvPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgorICA8bGlzdD4KKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZXNfbm9kZSIgc2VsZWN0PSIvZG94eWdlbmluZGV4L2NvbXBvdW5kW0BraW5kPSdmaWxlJ10vQHJlZmlkIiAvPgorICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRmaWxlc19ub2RlIj4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlIiBzZWxlY3Q9ImNvbmNhdCgkZG9jRm9sZGVyLCAnLycsIC4gLCAnLnhtbCcpIiAvPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImZ1bmNzX25vZGUiIHNlbGVjdD0iZG9jdW1lbnQoJGZpbGUpL2RveHlnZW4vY29tcG91bmRkZWYvc2VjdGlvbmRlZi9tZW1iZXJkZWZbQHByb3Q9J3B1YmxpYyddW0BraW5kPSdmdW5jdGlvbiddIiAvPgorICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGZ1bmNzX25vZGUiPgorICAgICAgICAgIDxjcHBmdW5jPgorICAgICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpZCIgLz4KKyAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSIvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJwcm90b3R5cGUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoZGVmaW5pdGlvbi90ZXh0KCksIGFyZ3NzdHJpbmcvdGV4dCgpKSIgLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0ibG9jYXRpb24vQGZpbGUiIC8+CisgICAgICAgICAgPC9jcHBmdW5jPgorICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgCisgICAgICAgIDwhLS0gIG5vdyBnZXQgI2RlZmluZXMgIC0tPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRlZnNfbm9kZSIgc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZi9zZWN0aW9uZGVmL21lbWJlcmRlZltAcHJvdD0ncHVibGljJ11bQGtpbmQ9J2RlZmluZSddIiAvPgorICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGRlZnNfbm9kZSI+CisgICAgICAgICAgPGNwcGZ1bmM+CisgICAgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InN0YXR1cyI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+I2RlZmluZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZS90ZXh0KCkiIC8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorICAgICAgICAgIDwvY3BwZnVuYz4KK8KgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKworCQk8IS0tICBub3cgZW51bXMgLS0+CisJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9ub2RlIgorCQkJc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZi9zZWN0aW9uZGVmL21lbWJlcmRlZltAa2luZD0nZW51bSddW0Bwcm90PSdwdWJsaWMnXSIgLz4KKwkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRlbnVtX25vZGUiPgorCisJCQk8IS0tICB1c2UgYSBuYW1lLCBlbHNlICcoYW5vbnltb3VzKScgLS0+CisJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9uYW1lIj4KKwkJCQk8eHNsOmNob29zZT4JCQkJCQorCQkJCQk8eHNsOndoZW4gdGVzdD0iY29udGFpbnMobmFtZS90ZXh0KCksICdAJykiPgorCQkJCQkJKGFub255bW91cyk8L3hzbDp3aGVuPgorCQkJCQk8eHNsOm90aGVyd2lzZT4KKwkJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lL3RleHQoKSIgLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPgorCQkJPC94c2w6dmFyaWFibGU+CisJCQorCQkJPCEtLSAgZW51bSBvYmplY3QgIC0tPgorCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJlbnVtX3N0YXR1cyIgc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPgorCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJlbnVtX3ZlcnNpb24iIHNlbGVjdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSIvPgorCQkJCisJCQkgPCEtLSAgbm8gYW5vbnltb3VzIGZpbGUgbGV2ZWwgZW51bXMgLS0+PCEtLQorCQkJPHhzbDppZiB0ZXN0PSJub3QoY29udGFpbnMobmFtZS90ZXh0KCksICdAJykpIj4KKwkJCQk8Y3BwZnVuYz4gCisJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpZCIgLz4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVudW1fc3RhdHVzIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+ZW51bSA8eHNsOnZhbHVlLW9mCisJCQkJCQlzZWxlY3Q9IiRlbnVtX25vZGVfbmFtZSIgLz4ge308L3hzbDphdHRyaWJ1dGU+CisJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCTwvY3BwZnVuYz4KKwkJCTwveHNsOmlmPgorCQkJCisJCQktLT48eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9maWxlIiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCisKKwkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9tZW1iZXIiIHNlbGVjdD0iZW51bXZhbHVlW0Bwcm90PSdwdWJsaWMnXSIvPgorCQkJCisJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGVudW1fbWVtYmVyIj4KKwkJCQk8Y3BwZnVuYz4KKwkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorCQkJCQk8IS0tICBzdGF0dXMgYW5kIHZlcnNpb246IG9ubHkgb3ZlcnJpZGUgaWYgc2V0LiAtLT4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOmNob29zZT4KKwkJCQkJCQk8eHNsOndoZW4gdGVzdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZ0aXRsZS90ZXh0KCkgIT0gJyciPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPjwveHNsOndoZW4+CisJCQkJCQkJPHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz48L3hzbDpvdGhlcndpc2U+CisJCQkJCQk8L3hzbDpjaG9vc2U+PC94c2w6YXR0cmlidXRlPgorCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOmNob29zZT4KKwkJCQkJCQk8eHNsOndoZW4gdGVzdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSAhPSAnJyI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiLz48L3hzbDp3aGVuPgorCQkJCQkJCTx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZW51bV92ZXJzaW9uIiAvPjwveHNsOm90aGVyd2lzZT4KKwkJCQkJCTwveHNsOmNob29zZT48L3hzbDphdHRyaWJ1dGU+CisJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+ZW51bSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVudW1fbm9kZV9uYW1lIi8+Ojo8eHNsOnZhbHVlLW9mCisJCQkJCQlzZWxlY3Q9Im5hbWUvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iZmlsZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX25vZGVfZmlsZSIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJPC9jcHBmdW5jPgorCQkJCisJCQk8L3hzbDpmb3ItZWFjaD4gPCEtLSAgZG9uZSB3aXRoIGVudW0gbWVtYmVyIC0tPgorCQkJCisKKwkJPC94c2w6Zm9yLWVhY2g+IDwhLS0gIGRvbmUgd2l0aCBlbnVtIC0tPgorCisKKyAgICAgIDwveHNsOmZvci1lYWNoPgorICA8L2xpc3Q+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KKworCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuY194bWwueHNsdCBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZHVtcEFsbENGdW5jX3htbC54c2x0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTBlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDRnVuY194bWwueHNsdApAQCAtMCwwICsxLDM2IEBACis8IS0tCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGlzIGlzIGFuIFhTTFQgYnVpbGQgZmlsZSBmb3IgSUNVIHRvb2xzLiAKKyovCistLT4KKzwhLS0KKyAgTGlzdCBhbGwgQyBmdW5jdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlICdpbmRleC54bWwnCistLT4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJkb2NGb2xkZXIiIC8+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CisgIDxsaXN0PgorICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlc19ub2RlIiBzZWxlY3Q9Ii9kb3h5Z2VuaW5kZXgvY29tcG91bmRbQGtpbmQ9J2ZpbGUnXS9AcmVmaWQiIC8+CisgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGZpbGVzX25vZGUiPgorICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImZpbGUiIHNlbGVjdD0iY29uY2F0KCRkb2NGb2xkZXIsICcvJywgLiAsICcueG1sJykiIC8+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZnVuY3Nfbm9kZSIgc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZi9zZWN0aW9uZGVmL21lbWJlcmRlZltAcHJvdD0ncHVibGljJ11bQGtpbmQ9J2Z1bmN0aW9uJ10iIC8+CisgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZnVuY3Nfbm9kZSI+CisgICAgICAgICAgPGNwcGZ1bmM+CisgICAgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InN0YXR1cyI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdChkZWZpbml0aW9uL3RleHQoKSwgYXJnc3N0cmluZy90ZXh0KCkpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSJsb2NhdGlvbi9AZmlsZSIgLz4KKyAgICAgICAgICA8L2NwcGZ1bmM+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgICAgPC94c2w6Zm9yLWVhY2g+CisgIDwvbGlzdD4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgorCisKZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZHVtcEFsbENwcEZ1bmMueHNsdCBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZHVtcEFsbENwcEZ1bmMueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk5MjljCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuYy54c2x0CkBAIC0wLDAgKzEsMTQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAtLT4KKzwhLS0gTGlzdCBhbGwgY3BwIHB1YmxpYyBmdW5jdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlICdpbmRleC54bWwnIC0tPgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKwl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisJPHhzbDpwYXJhbSBuYW1lPSJkb2NGb2xkZXIiIC8+CisKKwk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKwkJPGxpc3Q+CisJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImZpbGVzX25vZGUiCisJCQkJc2VsZWN0PSIvZG94eWdlbmluZGV4L2NvbXBvdW5kW0BraW5kPSdjbGFzcyddL0ByZWZpZCIgLz4KKwkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZmlsZXNfbm9kZSI+CisJCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlIgorCQkJCQlzZWxlY3Q9ImNvbmNhdCgkZG9jRm9sZGVyLCAnLycsIC4gLCAnLnhtbCcpIiAvPgorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZnVuY3Nfbm9kZSIKKwkJCQkJc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZltAcHJvdD0ncHVibGljJ10vc2VjdGlvbmRlZi9tZW1iZXJkZWZbQHByb3Q9J3B1YmxpYyddW0BraW5kPSdmdW5jdGlvbiddIiAvPgorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iY29tcG91bmRuYW1lIgorCQkJCQlzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmW0Bwcm90PSdwdWJsaWMnXS9jb21wb3VuZG5hbWUvdGV4dCgpIiAvPgorCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZnVuY3Nfbm9kZSI+CisJCQkJCTxjcHBmdW5jPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorCQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+PHhzbDp2YWx1ZS1vZgorCQkJCQkJCXNlbGVjdD0iY29uY2F0KGRlZmluaXRpb24vdGV4dCgpLCBhcmdzc3RyaW5nL3RleHQoKSkiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0ibG9jYXRpb24vQGZpbGUiIC8+CisJCQkJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSJAc3RhdGljIiAvPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlubGluZSIgLz4KKwkJCQkJPC9jcHBmdW5jPgorCQkJCTwveHNsOmZvci1lYWNoPgorCQkJCQorCQkJCTwhLS0gIG5vdyBjb25zdCBzdGF0aWMgcHVibGljcyAtLT4KKwkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9InNjb25zdF9ub2RlIgorCQkJCQlzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmW0Bwcm90PSdwdWJsaWMnXS9zZWN0aW9uZGVmL21lbWJlcmRlZltAcHJvdD0ncHVibGljJ11bQGtpbmQ9J3ZhcmlhYmxlJ11bQHN0YXRpYz0neWVzJ10iIC8+CisJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRzY29uc3Rfbm9kZSI+CisJCQkJCTxjcHBmdW5jPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQGlkIiAvPgorCQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+c3RhdGljIDx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRlZmluaXRpb24vdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQHN0YXRpYyIgLz4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpbmxpbmUiIC8+CisJCQkJCTwvY3BwZnVuYz4KKwkJCQk8L3hzbDpmb3ItZWFjaD4KKworCQk8IS0tIAorCQkJCS8vTm8gcmVhbCBub24tc3RhdGljIHZhcmlhYmxlcyAtIGFuZCBhbHNvLCBkb3h5Z2VuIGlzIGNvbmZ1c2VkIGFib3V0IG5lc3RlZCBzdHJ1Y3RzL3VuaW9ucworCQkJCQorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iY29uc3Rfbm9kZSIKKwkJCQkJc2VsZWN0PSJkb2N1bWVudCgkZmlsZSkvZG94eWdlbi9jb21wb3VuZGRlZltAcHJvdD0ncHVibGljJ10vc2VjdGlvbmRlZi9tZW1iZXJkZWZbQHByb3Q9J3B1YmxpYyddW0BraW5kPSd2YXJpYWJsZSddW0BzdGF0aWM9J25vJ10iIC8+CisJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRjb25zdF9ub2RlIj4KKwkJCQkJPGNwcGZ1bmM+CisJCQkJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSJAaWQiIC8+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPjx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iPjx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0icHJvdG90eXBlIj4vKiBub3Qgc3RhdGljICovIDx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9ImRlZmluaXRpb24vdGV4dCgpIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCQkJPHhzbDpjb3B5LW9mIHNlbGVjdD0iQHN0YXRpYyIgLz4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpbmxpbmUiIC8+CisJCQkJCTwvY3BwZnVuYz4KKwkJCQk8L3hzbDpmb3ItZWFjaD4KKwkJLS0+CisJCQkJPCEtLSAgbm93IGVudW1zIC0tPgorCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9ub2RlIgorCQkJCQlzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmW0Bwcm90PSdwdWJsaWMnXS9zZWN0aW9uZGVmL21lbWJlcmRlZltAa2luZD0nZW51bSddW0Bwcm90PSdwdWJsaWMnXSIgLz4KKwkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGVudW1fbm9kZSI+CisKKwkJCQkJPCEtLSAgdXNlIGEgbmFtZSwgZWxzZSAnKGFub255bW91cyknIC0tPgorCQkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9uYW1lIj48eHNsOmNob29zZT4JCQkJCQorCQkJCQkJCTx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhuYW1lL3RleHQoKSwgJ0AnKSI+KGFub255bW91cyk8L3hzbDp3aGVuPgorCQkJCQkJCTx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lL3RleHQoKSIgLz48L3hzbDpvdGhlcndpc2U+CisJCQkJCQk8L3hzbDpjaG9vc2U+PC94c2w6dmFyaWFibGU+CisKKwkJCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJlbnVtX3N0YXR1cyIgc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSIvPgorCQkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fdmVyc2lvbiIgc2VsZWN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZmRlc2NyaXB0aW9uL3BhcmEvdGV4dCgpIi8+CisKKwkJCQkJPGNwcGZ1bmM+CisJCQkJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSJAaWQiIC8+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPjx4c2w6dmFsdWUtb2YKKwkJCQkJCQlzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz48L3hzbDphdHRyaWJ1dGU+CisJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj48eHNsOnZhbHVlLW9mCisJCQkJCQkJc2VsZWN0PSIkZW51bV92ZXJzaW9uIiAvPjwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9InByb3RvdHlwZSI+ZW51bSAKKwkJCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGNvbXBvdW5kbmFtZSIvPjo6PHhzbDp2YWx1ZS1vZgorCQkJCQkJCXNlbGVjdD0iJGVudW1fbm9kZV9uYW1lIiAvPiB7fTwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkJCQk8L2NwcGZ1bmM+CisJCQorCQkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9ImVudW1fbm9kZV9maWxlIiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorCQkKKwkJCisJCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iZW51bV9tZW1iZXIiIHNlbGVjdD0iZW51bXZhbHVlW0Bwcm90PSdwdWJsaWMnXSIvPgorCQkJCQkKKwkJCQkJPCEtLSAgZm9yIGVhY2ggbWVtYmVyIC0tPgorCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iJGVudW1fbWVtYmVyIj4KKwkJCQkJCTxjcHBmdW5jPgorCQkJCQkJCTx4c2w6Y29weS1vZiBzZWxlY3Q9IkBpZCIgLz4KKwkJCQkJCQk8IS0tICBzdGF0dXMgYW5kIHZlcnNpb246IG9ubHkgb3ZlcnJpZGUgaWYgc2V0LiAtLT4KKwkJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiPgorCQkJCQkJCQk8eHNsOmNob29zZT4KKwkJCQkJCQkJCTx4c2w6d2hlbiB0ZXN0PSJkZXRhaWxlZGRlc2NyaXB0aW9uL3BhcmEveHJlZnNlY3QveHJlZnRpdGxlL3RleHQoKSAhPSAnJyI+CisJCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmdGl0bGUvdGV4dCgpIi8+CisJCQkJCQkJCQk8L3hzbDp3aGVuPgorCQkJCQkJCQkJPHhzbDpvdGhlcndpc2U+CisJCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRlbnVtX3N0YXR1cyIgLz4KKwkJCQkJCQkJCTwveHNsOm90aGVyd2lzZT4KKwkJCQkJCQkJPC94c2w6Y2hvb3NlPgorCQkJCQkJCTwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIj4KKwkJCQkJCQkJPHhzbDpjaG9vc2U+CisJCQkJCQkJCQk8eHNsOndoZW4gdGVzdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZkZXNjcmlwdGlvbi9wYXJhL3RleHQoKSAhPSAnJyI+CisJCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiLz4KKwkJCQkJCQkJCTwveHNsOndoZW4+CisJCQkJCQkJCQk8eHNsOm90aGVyd2lzZT4KKwkJCQkJCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVudW1fdmVyc2lvbiIgLz4KKwkJCQkJCQkJCTwveHNsOm90aGVyd2lzZT4KKwkJCQkJCQkJPC94c2w6Y2hvb3NlPgorCQkJCQkJCTwveHNsOmF0dHJpYnV0ZT4KKwkJCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJwcm90b3R5cGUiPmVudW0gCisJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjb21wb3VuZG5hbWUiLz46Ojx4c2w6dmFsdWUtb2YKKwkJCQkJCQkJc2VsZWN0PSIkZW51bV9ub2RlX25hbWUiIC8+Ojo8eHNsOnZhbHVlLW9mCisJCQkJCQkJCXNlbGVjdD0ibmFtZS90ZXh0KCkiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImZpbGUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZW51bV9ub2RlX2ZpbGUiIC8+PC94c2w6YXR0cmlidXRlPgorCQkJCQkJPC9jcHBmdW5jPgorCQkJCQkKKwkJCQkJPC94c2w6Zm9yLWVhY2g+IDwhLS0gIGRvbmUgd2l0aCBlbnVtIG1lbWJlciAtLT4KKwkJCQkJwqAKKwkJCQk8L3hzbDpmb3ItZWFjaD4gPCEtLSAgZG9uZSB3aXRoIGVudW1zIC0tPgorCisJCQk8L3hzbDpmb3ItZWFjaD4gPCEtLSAgZG9uZSB3aXRoIGZpbGUgLS0+CisKKwkJPC9saXN0PgorCTwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KKworCmRpZmYgLS1naXQgYS9yZWxlYXNlL2phdmEvc3JjL2NvbS9pYm0vaWN1L2Rldi90b29scy9kb2NzL2R1bXBBbGxDcHBGdW5jX3htbC54c2x0IGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuY194bWwueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGMzZmYzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9kdW1wQWxsQ3BwRnVuY194bWwueHNsdApAQCAtMCwwICsxLDM2IEBACis8IS0tCisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGlzIGlzIGFuIFhTTFQgZmlsZS4gCisqLworLS0+Cis8IS0tCisgIExpc3QgYWxsIGNwcCBwdWJsaWMgZnVuY3Rpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSAnaW5kZXgueG1sJworLS0+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iZG9jRm9sZGVyIiAvPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgorICA8bGlzdD4KKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZXNfbm9kZSIgc2VsZWN0PSIvZG94eWdlbmluZGV4L2NvbXBvdW5kW0BraW5kPSdjbGFzcyddL0ByZWZpZCIgLz4KKyAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkZmlsZXNfbm9kZSI+CisgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZmlsZSIgc2VsZWN0PSJjb25jYXQoJGRvY0ZvbGRlciwgJy8nLCAuICwgJy54bWwnKSIgLz4KKyAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmdW5jc19ub2RlIiBzZWxlY3Q9ImRvY3VtZW50KCRmaWxlKS9kb3h5Z2VuL2NvbXBvdW5kZGVmL3NlY3Rpb25kZWYvbWVtYmVyZGVmW0Bwcm90PSdwdWJsaWMnXVtAa2luZD0nZnVuY3Rpb24nXSIgLz4KKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRmdW5jc19ub2RlIj4KKyAgICAgICAgICA8Y3BwZnVuYz4KKyAgICAgICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSJAaWQiIC8+CisgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGV0YWlsZWRkZXNjcmlwdGlvbi9wYXJhL3hyZWZzZWN0L3hyZWZ0aXRsZS90ZXh0KCkiLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRldGFpbGVkZGVzY3JpcHRpb24vcGFyYS94cmVmc2VjdC94cmVmZGVzY3JpcHRpb24vcGFyYS90ZXh0KCkiLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0icHJvdG90eXBlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KGRlZmluaXRpb24vdGV4dCgpLCBhcmdzc3RyaW5nL3RleHQoKSkiIC8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9ImxvY2F0aW9uL0BmaWxlIiAvPgorICAgICAgICAgIDwvY3BwZnVuYz4KKyAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgPC9saXN0PgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CisKKwpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5SZXBvcnQueHNsdCBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZ2VuUmVwb3J0LnhzbHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzOGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZ2VuUmVwb3J0LnhzbHQKQEAgLTAsMCArMSwzNjEgQEAKKzwhLS0KKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAoQykgMjAwOC0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgICAgICAgICoKKyogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVGhpcyBpcyB0aGUgWFNMVCBmb3IgdGhlIEFQSSBSZXBvcnQuIAorKi8KKy0tPgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgorICA8eHNsOnBhcmFtIG5hbWU9ImxlZnRWZXIiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0icmlnaHRWZXIiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZGF0ZVRpbWUiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0icmlnaHRNaWxlc3RvbmUiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ibGVmdE1pbGVzdG9uZSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJudWwiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ib3VyWWVhciIgLz4KKworICA8eHNsOm91dHB1dCBtZXRob2Q9Imh0bWwiIHZlcnNpb249IjQuMCIgIGRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgCitkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIgorCW9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiCWVuY29kaW5nPSJ1dGYtOCIgaW5kZW50PSJ5ZXMiLz4KKyAgCisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CisgICAgPGh0bWw+CisJPHhzbDpjb21tZW50PgorCSBDb3B5cmlnaHQgKEMpICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG91clllYXIiIC8+LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uLCBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKwk8L3hzbDpjb21tZW50PgorICAgIDxoZWFkPgorICAgIDx0aXRsZT5JQ1U0QyBBUEkgQ29tcGFyaXNvbjogPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIi8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0TWlsZXN0b25lIiAvPiB3aXRoIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyaWdodE1pbGVzdG9uZSIgLz4gPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImljdTRjLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+CisgICAgPC9oZWFkPgorICAgIAorICAgIDxib2R5PgorICAgIAorICAgIDxhIG5hbWU9IiNfdG9wIj48L2E+CisgICAgCisgICAgPGgxPklDVTRDIEFQSSBDb21wYXJpc29uOiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRWZXIiLz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRNaWxlc3RvbmUiIC8+IHdpdGggPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyaWdodFZlciIgLz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0TWlsZXN0b25lIiAvPiA8L2gxPgorICAgIAorICAgIDxkaXYgaWQ9InRvYyI+CisJICAgIDx1bD4KKwkgICAgCTxsaT48YSBocmVmPSIjcmVtb3ZlZCI+UmVtb3ZlZCBmcm9tIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbGVmdFZlciIvPjwvYT48L2xpPgorCSAgICAJPGxpPjxhIGhyZWY9IiNkZXByZWNhdGVkIj5EZXByZWNhdGVkIG9yIE9ic29sZXRlZCBpbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPjwvYT48L2xpPgorCSAgICAJPGxpPjxhIGhyZWY9IiNjaGFuZ2VkIj5DaGFuZ2VkIGluICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPjwvYT48L2xpPgorCSAgICAJPGxpPjxhIGhyZWY9IiNwcm9tb3RlZCI+UHJvbW90ZWQgdG8gc3RhYmxlIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9hPjwvbGk+CisJICAgIAk8bGk+PGEgaHJlZj0iI2FkZGVkIj5BZGRlZCBpbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPjwvYT48L2xpPgorCSAgICAJPGxpPjxhIGhyZWY9IiNvdGhlciI+T3RoZXIgZXhpc3RpbmcgZHJhZnRzIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9hPjwvbGk+CisJICAgIAk8bGk+PGEgaHJlZj0iI3B1cmV2aXJ0dWFsIj5TaWduYXR1cmUgU2ltcGxpZmljYXRpb25zPC9hPiA8c3VwIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7IGZvbnQtc2l6ZTogc21hbGxlc3Q7Jz4obmV3KTwvc3VwPjwvbGk+CisJICAgIDwvdWw+CisJICAgIDxociAvPgorCTwvZGl2PgorCQorCTxhIG5hbWU9InJlbW92ZWQiPjwvYT4KKwkgICAgPGgyPlJlbW92ZWQgZnJvbSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRWZXIiLz4gPC9oMj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jW0ByaWdodFN0YXR1cz0kbnVsXSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDxQLz48YSBocmVmPSIjX3RvcCI+KGp1bXAgYmFjayB0byB0b3ApPC9hPjxoci8+CisKKwk8YSBuYW1lPSJkZXByZWNhdGVkIj48L2E+CisgICAgPGgyPkRlcHJlY2F0ZWQgb3IgT2Jzb2xldGVkIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9oMj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jWyhAcmlnaHRTdGF0dXM9J0RlcHJlY2F0ZWQnIGFuZCBAbGVmdFN0YXR1cyE9J0RlcHJlY2F0ZWQnKSBvciAoQHJpZ2h0U3RhdHVzPSdPYnNvbGV0ZScgYW5kIEBsZWZ0U3RhdHVzIT0nT2Jzb2xldGUnKV0iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8UC8+PGEgaHJlZj0iI190b3AiPihqdW1wIGJhY2sgdG8gdG9wKTwvYT48aHIvPgorCisJPGEgbmFtZT0iY2hhbmdlZCI+PC9hPgorICAgIDxoMj5DaGFuZ2VkIGluICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiAob2xkLCBuZXcpPC9oMj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jWyhAbGVmdFN0YXR1cyAhPSAkbnVsKSBhbmQgKEByaWdodFN0YXR1cyAhPSAkbnVsKSBhbmQgKCAoQGxlZnRTdGF0dXMgIT0gQHJpZ2h0U3RhdHVzKSBvciAoQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24pICkgYW5kIG5vdCAoIChAbGVmdFN0YXR1cyA9ICdEcmFmdCcpIGFuZCAoQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZScpIGFuZCAoQHJpZ2h0VmVyc2lvbiA9ICRyaWdodFZlcikgKV0iLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8UC8+PGEgaHJlZj0iI190b3AiPihqdW1wIGJhY2sgdG8gdG9wKTwvYT48aHIvPgorCisJPGEgbmFtZT0icHJvbW90ZWQiPjwvYT4KKyAgICA8aDI+UHJvbW90ZWQgdG8gc3RhYmxlIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9oMj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jW0BsZWZ0U3RhdHVzICE9ICdTdGFibGUnIGFuZCAgQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZSddIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPFAvPjxhIGhyZWY9IiNfdG9wIj4oanVtcCBiYWNrIHRvIHRvcCk8L2E+PGhyLz4KKyAgICAKKyAgICA8YSBuYW1lPSJhZGRlZCI+PC9hPgorICAgIDxoMj5BZGRlZCBpbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPjwvaDI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZW5UYWJsZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZXMiIHNlbGVjdD0iL2xpc3QvZnVuY1tAbGVmdFN0YXR1cz0kbnVsXSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDxQLz48YSBocmVmPSIjX3RvcCI+KGp1bXAgYmFjayB0byB0b3ApPC9hPjxoci8+CisgICAgCisgICAgPGEgbmFtZT0ib3RoZXIiPjwvYT4KKyAgICA8aDI+T3RoZXIgZXhpc3RpbmcgZHJhZnRzIGluIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+PC9oMj4KKyAgICA8ZGl2IGNsYXNzPSdvdGhlcic+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmZvVGFibGUiPiA8IS0tICBub3RlOiBub3RlIGdlblRhYmxlIC0tPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGVzIiBzZWxlY3Q9Ii9saXN0L2Z1bmNbQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXJdIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9kaXY+CisgICAgPFAvPjxhIGhyZWY9IiNfdG9wIj4oanVtcCBiYWNrIHRvIHRvcCk8L2E+PGhyLz4KKworICAgIDxhIG5hbWU9InB1cmV2aXJ0dWFsIj48L2E+CisgICAgPGgyPlNpZ25hdHVyZSBTaW1wbGlmaWNhdGlvbnM8L2gyPgorICAgIDxpPlRoaXMgc2VjdGlvbiBzaG93cyBjYXNlcyB3aGVyZSB0aGUgc2lnbmF0dXJlIHdhcyAic2ltcGxpZmllZCIgZm9yIHRoZSBzYWtlIG9mIGNvbXBhcmlzb24uIFRoZSBzaW1wbGlmaWVkIGZvcm0gaXMgaW4gYm9sZCwgZm9sbG93ZWQgYnkKKyAgICAJYWxsIHBvc3NpYmxlIHZhcmlhdGlvbnMgaW4gIm9yaWdpbmFsIiBmb3JtLjwvaT4KKyAgICA8ZGl2IGNsYXNzPSdvdGhlcic+CisgICAgCTx1bD4KKyAgICAJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvbGlzdC9zaW1wbGlmaWNhdGlvbnMvc2ltcGxpZmljYXRpb24iPgorICAgIAkJCTxsaT48Yj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iYmFzZSIgLz48L2I+CisgICAgCQkJPGJyIC8+CisgICAgCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJjaGFuZ2UiPgorICAgIAkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InRleHQoKSIgLz48YnIgLz4KKyAgICAJCQkJPC94c2w6Zm9yLWVhY2g+CisgICAgCQkJPC9saT4KKyAgICAJCTwveHNsOmZvci1lYWNoPgorICAgIAk8L3VsPgorICAgIDwvZGl2PgorICAgIDxQLz48YSBocmVmPSIjX3RvcCI+KGp1bXAgYmFjayB0byB0b3ApPC9hPjxoci8+Cis8IS0tICAgIAorICAgIAorLS0+ICAgIAorCisgICAgPHA+PGk+PGZvbnQgc2l6ZT0iLTEiPkNvbnRlbnRzIGdlbmVyYXRlZCBieSBTdGFibGVBUEkgdG9vbCBvbiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGRhdGVUaW1lIiAvPjxici8+Q29weXJpZ2h0IChDKSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG91clllYXIiIC8+LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uLCBBbGwgUmlnaHRzIFJlc2VydmVkLjwvZm9udD48L2k+PC9wPgorICAgIDwvYm9keT4KKyAgICA8L2h0bWw+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZ2VuVGFibGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZXMiIC8+CisgICAgPHRhYmxlIGNsYXNzPSdnZW5UYWJsZScgQk9SREVSPSIxIj4KKyAgICA8VEhFQUQ+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidGaWxlJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IidBUEknIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGxlZnRWZXIiIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiIC8+IDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgPC9USEVBRD4KKworICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iJG5vZGVzIj4KKyAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBmaWxlIiAvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3JvdyciLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iihwb3NpdGlvbigpIG1vZCAyKSIvPgorICAgICAgICAgICAgICAgICAgICA8IS0tIAorICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIocG9zaXRpb24oKSBtb2QgMikgPSAwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0icm93MCIgLz48L3hzbDp3aGVuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzEiIC8+PC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2ZpbGUnPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZpbGUiIC8+IDwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdwcm90byc+IDx4c2w6dmFsdWUtb2YgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIgc2VsZWN0PSJAcHJvdG90eXBlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRTdGF0dXMgPSAnU3RhYmxlJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInc3RhYmNoYW5nZSciIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgIAk8eHNsOmlmICB0ZXN0ID0gIkBsZWZ0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZScgYW5kIEBsZWZ0VmVyc2lvbiA9IEByaWdodFZlcnNpb24iPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiI+MjwveHNsOmF0dHJpYnV0ZT4KKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgCTwveHNsOmlmPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxlZnRTdGF0dXMiIC8+PHhzbDppZiAgdGVzdCA9ICJAbGVmdFN0YXR1cyA9ICdEcmFmdCcgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIGFuZCBAbGVmdFZlcnNpb24gPSBAcmlnaHRWZXJzaW9uIj4mI3gyMTkyO1N0YWJsZTwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBsZWZ0VmVyc2lvbiAhPSAnJyBhbmQgQGxlZnRWZXJzaW9uICE9ICcuJyI+CisJICAgICAgICAgICAgICAgICAgICA8YnIvPiAKKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFZlcnNpb24iIC8+CisJICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgIAk8eHNsOmlmICB0ZXN0ID0gIkBsZWZ0U3RhdHVzICE9ICdEcmFmdCcgb3IgQHJpZ2h0U3RhdHVzICE9ICdTdGFibGUnIG9yIEBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIj4KKyAgICAgICAgICAgICAgICA8dGQ+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRTdGF0dXMiIC8+IAorICAgICAgICAgICAgICAgICAgICA8YnIvPiAKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24gYW5kIEBsZWZ0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAnLiciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3ZlcmNoYW5nZSciIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4gICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAcmlnaHRWZXJzaW9uICE9ICcuJyI+CisJICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+ICAgICAgICAgICAgICAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByaWdodFZlcnNpb24iIC8+CisJICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiBhbmQgQGxlZnRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRTdGF0dXMgPSAnU3RhYmxlJyBhbmQgbm90ICggKEBsZWZ0U3RhdHVzID0gJ0RyYWZ0JykgYW5kIChAcmlnaHRTdGF0dXMgPSAnU3RhYmxlJykgYW5kIChAcmlnaHRWZXJzaW9uID0gJHJpZ2h0VmVyKSApIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIHN0YWJsZSBBUEkgY2hhbmdlZCB2ZXJzaW9uLicgY2xhc3M9J2JpZ3dhcm4nPihjaGFuZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+PGIgdGl0bGU9J0EgZHJhZnQgQVBJIGhhcyB0aGUgd3JvbmcgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oc2hvdWxkIGJlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiLz4pPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBsZWZ0U3RhdHVzID0gJ05vbmUnIGFuZCBAcmlnaHRWZXJzaW9uID0gJycgYW5kIEByaWdodFN0YXR1cyAhPSAnSW50ZXJuYWwnIGFuZCBAcmlnaHRTdGF0dXMgIT0gJ0RlcHJlY2F0ZWQnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIAk8YnIvPjxiIHRpdGxlPSdBIG5ldyBBUEkgd2FzIGludHJvZHVjZWQgdGhhdCB3YXMgbm90IHRhZ2dlZC4nIGNsYXNzPSdiaWd3YXJuJz4odW50YWdnZWQpPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgCTx4c2w6aWYgIHRlc3QgPSAiQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZScgYW5kIEByaWdodFZlcnNpb24gPSAkcmlnaHRWZXIiPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nYm9ybnN0YWJsZSc+CisgICAgICAgICAgICAgICAgICAgIDxiIHRpdGxlPSdBIG5ldyBBUEkgd2FzIGludHJvZHVjZWQgYXMgc3RhYmxlIGluICRyaWdodFZlci4nIGNsYXNzPSdiaWd3YXJuJz4oQm9ybiBTdGFibGUpPC9iPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgPC90YWJsZT4KKyAgPC94c2w6dGVtcGxhdGU+CisgIAorICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iaW5mb1RhYmxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGVzIiAvPgorICAgIDx0YWJsZSBjbGFzcz0nZ2VuVGFibGUnIEJPUkRFUj0iMSI+CisgICAgPFRIRUFEPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInRmlsZSciIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInQVBJJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiA8L3RoPgorICAgICAgICA8L3RyPgorICAgIDwvVEhFQUQ+CisKKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRub2RlcyI+CisgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAZmlsZSIgLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iidyb3cnIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIocG9zaXRpb24oKSBtb2QgMikiLz4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSAKKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iKHBvc2l0aW9uKCkgbW9kIDIpID0gMCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzAiIC8+PC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyb3cxIiAvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdmaWxlJz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmaWxlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ncHJvdG8nPiA8eHNsOnZhbHVlLW9mIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiIHNlbGVjdD0iQHByb3RvdHlwZSIgLz4gPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0U3RhdHVzID0gJ1N0YWJsZSciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3N0YWJjaGFuZ2UnIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCTx4c2w6aWYgIHRlc3QgPSAiQGxlZnRTdGF0dXMgPSBAcmlnaHRTdGF0dXMgYW5kIEBsZWZ0VmVyc2lvbiA9IEByaWdodFZlcnNpb24iPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiI+MjwveHNsOmF0dHJpYnV0ZT4KKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgCTwveHNsOmlmPgorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFN0YXR1cyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGJyLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9ICJAbGVmdFN0YXR1cyAhPSBAcmlnaHRTdGF0dXMgb3IgQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24iPgorICAgICAgICAgICAgICAgIDx0ZD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByaWdodFN0YXR1cyIgLz4gCisgICAgICAgICAgICAgICAgICAgIDxici8+IAorICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiBhbmQgQGxlZnRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcuJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIndmVyY2hhbmdlJyIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPiAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2w6aWYgdGVzdCA9ICJAcmlnaHRWZXJzaW9uICE9ICcuJyI+CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRWZXJzaW9uIiAvPgorCSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgIDwhLS0gCisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiBhbmQgQGxlZnRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRTdGF0dXMgPSAnU3RhYmxlJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz48YiB0aXRsZT0nQSBzdGFibGUgQVBJIGNoYW5nZWQgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oY2hhbmdlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkByaWdodFN0YXR1cyA9ICdEcmFmdCcgYW5kIEByaWdodFZlcnNpb24gIT0gJHJpZ2h0VmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIGRyYWZ0IEFQSSBoYXMgdGhlIHdyb25nIHZlcnNpb24uJyBjbGFzcz0nYmlnd2Fybic+KHNob3VsZCBiZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIi8+KTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAbGVmdFN0YXR1cyA9ICdOb25lJyBhbmQgQHJpZ2h0VmVyc2lvbiA9ICcnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIAk8YnIvPjxiIHRpdGxlPSdBIG5ldyBBUEkgd2FzIGludHJvZHVjZWQgdGhhdCB3YXMgbm90IHRhZ2dlZC4nIGNsYXNzPSdiaWd3YXJuJz4odW50YWdnZWQpPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICA8L3RhYmxlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKyAgCisgIAorICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0icHVyZVZpcnR1YWxUYWJsZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlcyIgLz4KKyAgICA8dGFibGUgY2xhc3M9J2dlblRhYmxlJyBCT1JERVI9IjEiPgorICAgIDwhLS0gCisgICAgPFRIRUFEPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInRmlsZSciIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInQVBJJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiA8L3RoPgorICAgICAgICA8L3RyPgorICAgIDwvVEhFQUQ+CisgICAgLS0+CisKKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRub2RlcyI+CisgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAZmlsZSIgLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iidyb3cnIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIocG9zaXRpb24oKSBtb2QgMikiLz4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSAKKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iKHBvc2l0aW9uKCkgbW9kIDIpID0gMCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzAiIC8+PC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyb3cxIiAvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdmaWxlJz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmaWxlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ncHJvdG8nPiA8eHNsOnZhbHVlLW9mIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiIHNlbGVjdD0iQHByb3RvdHlwZSIgLz4gPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0U3RhdHVzID0gJ1N0YWJsZSciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3N0YWJjaGFuZ2UnIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCTx4c2w6aWYgIHRlc3QgPSAiQGxlZnRTdGF0dXMgPSBAcmlnaHRTdGF0dXMgYW5kIEBsZWZ0VmVyc2lvbiA9IEByaWdodFZlcnNpb24iPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiI+MjwveHNsOmF0dHJpYnV0ZT4KKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgCTwveHNsOmlmPgorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFN0YXR1cyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGJyLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9ICJAbGVmdFN0YXR1cyAhPSBAcmlnaHRTdGF0dXMgb3IgQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24iPgorICAgICAgICAgICAgICAgIDx0ZD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByaWdodFN0YXR1cyIgLz4gCisgICAgICAgICAgICAgICAgICAgIDxici8+IAorICAgICAgICAgICAgICAgICAgICA8c3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiBhbmQgQGxlZnRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iid2ZXJjaGFuZ2UnIiAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByaWdodFZlcnNpb24iIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgPCEtLSAKKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIGFuZCBAbGVmdFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJycgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIHN0YWJsZSBBUEkgY2hhbmdlZCB2ZXJzaW9uLicgY2xhc3M9J2JpZ3dhcm4nPihjaGFuZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+PGIgdGl0bGU9J0EgZHJhZnQgQVBJIGhhcyB0aGUgd3JvbmcgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oc2hvdWxkIGJlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiLz4pPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBsZWZ0U3RhdHVzID0gJ05vbmUnIGFuZCBAcmlnaHRWZXJzaW9uID0gJyciPgorICAgICAgICAgICAgICAgICAgICAgICAgCTxici8+PGIgdGl0bGU9J0EgbmV3IEFQSSB3YXMgaW50cm9kdWNlZCB0aGF0IHdhcyBub3QgdGFnZ2VkLicgY2xhc3M9J2JpZ3dhcm4nPih1bnRhZ2dlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvdGFibGU+CisgIDwveHNsOnRlbXBsYXRlPgorICAKKzwveHNsOnN0eWxlc2hlZXQ+CisKKworCisKZGlmZiAtLWdpdCBhL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZ2VucmVwb3J0X3htbC54c2x0IGIvcmVsZWFzZS9qYXZhL3NyYy9jb20vaWJtL2ljdS9kZXYvdG9vbHMvZG9jcy9nZW5yZXBvcnRfeG1sLnhzbHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMWIxNQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvamF2YS9zcmMvY29tL2libS9pY3UvZGV2L3Rvb2xzL2RvY3MvZ2VucmVwb3J0X3htbC54c2x0CkBAIC0wLDAgKzEsMjM5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICAgICAgKgorKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGlzIGlzIHRoZSBYU0xUIGZvciB0aGUgQVBJIFJlcG9ydCwgWE1MIHN0eWxlCisqLworLS0+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Cis8IS0tCisgIDx4c2w6cGFyYW0gbmFtZT0ibGVmdFN0YXR1cyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJyaWdodFN0YXR1cyIgLz4KKy0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImxlZnRWZXIiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0icmlnaHRWZXIiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZGF0ZVRpbWUiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ibnVsIiAvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0ib3VyWWVhciIgLz4KKyAgCisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CisgICAgPHhzbDpjb21tZW50PgorICAgICAgQ29weXJpZ2h0IChDKSAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRvdXJZZWFyIiAvPiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisgICAgPC94c2w6Y29tbWVudD4KKyAgICA8Y2hhbmdlUmVwb3J0PgorICAgICAgPGlkZW50aXR5PgorCTx4c2w6YXR0cmlidXRlIG5hbWU9ImxlZnQiPgorCSAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbGVmdFZlciIvPgorCTwveHNsOmF0dHJpYnV0ZT4KKwk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJyaWdodCI+CisJICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPgorCTwveHNsOmF0dHJpYnV0ZT4KKwk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJnZW5lcmF0ZWQtZGF0ZSI+CisJICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGRhdGVUaW1lIiAvPgorCTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDwvaWRlbnRpdHk+CisKKyAgICAgIDwhLS0gPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJpY3U0Yy5jc3MiIHR5cGU9InRleHQvY3NzIiAvPiAtLT4KKworICAgICAgPGZ1bmN0aW9ucyBuYW1lPSJyZW1vdmVkIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jW0ByaWdodFN0YXR1cz0kbnVsXSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPC9mdW5jdGlvbnM+CisKKyAgICAgIDxmdW5jdGlvbnMgbmFtZT0iZGVwcmVjYXRlZCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZW5UYWJsZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZXMiIHNlbGVjdD0iL2xpc3QvZnVuY1soQHJpZ2h0U3RhdHVzPSdEZXByZWNhdGVkJyBhbmQgQGxlZnRTdGF0dXMhPSdEZXByZWNhdGVkJykgb3IgKEByaWdodFN0YXR1cz0nT2Jzb2xldGUnIGFuZCBAbGVmdFN0YXR1cyE9J09ic29sZXRlJyldIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L2Z1bmN0aW9ucz4KKworICAgICAgPGZ1bmN0aW9ucyBuYW1lPSJjaGFuZ2VkIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jWyhAbGVmdFN0YXR1cyAhPSAkbnVsKSBhbmQgKEByaWdodFN0YXR1cyAhPSAkbnVsKSBhbmQgKCAoQGxlZnRTdGF0dXMgIT0gQHJpZ2h0U3RhdHVzKSBvciAoQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24pICldIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L2Z1bmN0aW9ucz4KKworICAgICAgPGZ1bmN0aW9ucyBuYW1lPSJwcm9tb3RlZCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnZW5UYWJsZSI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZXMiIHNlbGVjdD0iL2xpc3QvZnVuY1tAbGVmdFN0YXR1cyAhPSAnU3RhYmxlJyBhbmQgIEByaWdodFN0YXR1cyA9ICdTdGFibGUnXSIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPC9mdW5jdGlvbnM+CisgICAgCisgICAgICA8ZnVuY3Rpb25zIG5hbWU9ImFkZGVkIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlcyIgc2VsZWN0PSIvbGlzdC9mdW5jW0BsZWZ0U3RhdHVzPSRudWxdIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L2Z1bmN0aW9ucz4KKworICAgICAgPGZ1bmN0aW9ucyBuYW1lPSJkcmFmdCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmZvVGFibGUiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGVzIiBzZWxlY3Q9Ii9saXN0L2Z1bmNbQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXJdIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L2Z1bmN0aW9ucz4KKworICAgIDwvY2hhbmdlUmVwb3J0PgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOnRlbXBsYXRlIG5hbWU9ImdlblRhYmxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGVzIiAvPgorICAgIDx0YWJsZSBjbGFzcz0nZ2VuVGFibGUnIEJPUkRFUj0iMSI+CisgICAgPFRIRUFEPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInRmlsZSciIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInQVBJJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiA8L3RoPgorICAgICAgICA8L3RyPgorICAgIDwvVEhFQUQ+CisKKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRub2RlcyI+CisgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAZmlsZSIgLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iidyb3cnIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIocG9zaXRpb24oKSBtb2QgMikiLz4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSAKKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iKHBvc2l0aW9uKCkgbW9kIDIpID0gMCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzAiIC8+PC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyb3cxIiAvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdmaWxlJz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmaWxlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ncHJvdG8nPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHByb3RvdHlwZSIgLz4gPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0U3RhdHVzID0gJ1N0YWJsZSciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3N0YWJjaGFuZ2UnIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAJPHhzbDppZiAgdGVzdCA9ICJAbGVmdFN0YXR1cyA9ICdEcmFmdCcgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIGFuZCBAbGVmdFZlcnNpb24gPSBAcmlnaHRWZXJzaW9uIj4KKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbHNwYW4iPgorICAgICAgIAkgICAgICAgICAgICAJCTIKKyAgICAgICAJICAgICAgICAgICAgCTwveHNsOmF0dHJpYnV0ZT4KKwkgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KKyAgICAgICAJICAgICAgICAgICAgCQljZW50ZXIKKyAgICAgICAJICAgICAgICAgICAgCTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAJPC94c2w6aWY+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFN0YXR1cyIgLz48eHNsOmlmICB0ZXN0ID0gIkBsZWZ0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0U3RhdHVzID0gJ1N0YWJsZScgYW5kIEBsZWZ0VmVyc2lvbiA9IEByaWdodFZlcnNpb24iPiZndDtTdGFibGU8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgPGJyLz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsZWZ0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAJPHhzbDppZiAgdGVzdCA9ICJAbGVmdFN0YXR1cyAhPSAnRHJhZnQnIG9yIEByaWdodFN0YXR1cyAhPSAnU3RhYmxlJyBvciBAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiI+CisgICAgICAgICAgICAgICAgPHRkPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJpZ2h0U3RhdHVzIiAvPiAKKyAgICAgICAgICAgICAgICAgICAgPGJyLz4gCisgICAgICAgICAgICAgICAgICAgIDxzcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIGFuZCBAbGVmdFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJyciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3ZlcmNoYW5nZSciIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4gICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJpZ2h0VmVyc2lvbiIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIGFuZCBAbGVmdFZlcnNpb24gIT0gJycgYW5kIEByaWdodFZlcnNpb24gIT0gJycgYW5kIEByaWdodFN0YXR1cyA9ICdTdGFibGUnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIHN0YWJsZSBBUEkgY2hhbmdlZCB2ZXJzaW9uLicgY2xhc3M9J2JpZ3dhcm4nPihjaGFuZ2VkKTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQHJpZ2h0U3RhdHVzID0gJ0RyYWZ0JyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAkcmlnaHRWZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+PGIgdGl0bGU9J0EgZHJhZnQgQVBJIGhhcyB0aGUgd3JvbmcgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oc2hvdWxkIGJlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmlnaHRWZXIiLz4pPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBsZWZ0U3RhdHVzID0gJ05vbmUnIGFuZCBAcmlnaHRWZXJzaW9uID0gJyciPgorICAgICAgICAgICAgICAgICAgICAgICAgCTxici8+PGIgdGl0bGU9J0EgbmV3IEFQSSB3YXMgaW50cm9kdWNlZCB0aGF0IHdhcyBub3QgdGFnZ2VkLicgY2xhc3M9J2JpZ3dhcm4nPih1bnRhZ2dlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgPC90YWJsZT4KKyAgPC94c2w6dGVtcGxhdGU+CisgIAorICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iaW5mb1RhYmxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGVzIiAvPgorICAgIDx0YWJsZSBjbGFzcz0nZ2VuVGFibGUnIEJPUkRFUj0iMSI+CisgICAgPFRIRUFEPgorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInRmlsZSciIC8+IDwvdGg+CisgICAgICAgICAgICA8dGg+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInQVBJJyIgLz4gPC90aD4KKyAgICAgICAgICAgIDx0aD4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRsZWZ0VmVyIiAvPiA8L3RoPgorICAgICAgICAgICAgPHRoPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIiAvPiA8L3RoPgorICAgICAgICA8L3RyPgorICAgIDwvVEhFQUQ+CisKKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRub2RlcyI+CisgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAZmlsZSIgLz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Iidyb3cnIi8+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIocG9zaXRpb24oKSBtb2QgMikiLz4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSAKKyAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iKHBvc2l0aW9uKCkgbW9kIDIpID0gMCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InJvdzAiIC8+PC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJyb3cxIiAvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdmaWxlJz4gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmaWxlIiAvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ncHJvdG8nPiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHByb3RvdHlwZSIgLz4gPC90ZD4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkBsZWZ0U3RhdHVzID0gJ1N0YWJsZSciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJ3N0YWJjaGFuZ2UnIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCTx4c2w6aWYgIHRlc3QgPSAiQGxlZnRTdGF0dXMgPSBAcmlnaHRTdGF0dXMgYW5kIEBsZWZ0VmVyc2lvbiA9IEByaWdodFZlcnNpb24iPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiI+CisgICAgICAgCSAgICAgICAgICAgIAkJMgorICAgICAgIAkgICAgICAgICAgICAJPC94c2w6YXR0cmlidXRlPgorCSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgorICAgICAgIAkgICAgICAgICAgICAJCWNlbnRlcgorICAgICAgIAkgICAgICAgICAgICAJPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgIAk8L3hzbDppZj4KKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxlZnRTdGF0dXMiIC8+CisgICAgICAgICAgICAgICAgICAgIDxici8+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGVmdFZlcnNpb24iIC8+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSAiQGxlZnRTdGF0dXMgIT0gQHJpZ2h0U3RhdHVzIG9yIEBsZWZ0VmVyc2lvbiAhPSBAcmlnaHRWZXJzaW9uIj4KKyAgICAgICAgICAgICAgICA8dGQ+IDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRTdGF0dXMiIC8+IAorICAgICAgICAgICAgICAgICAgICA8YnIvPiAKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0ID0iQGxlZnRWZXJzaW9uICE9IEByaWdodFZlcnNpb24gYW5kIEBsZWZ0VmVyc2lvbiAhPSAnJyBhbmQgQHJpZ2h0VmVyc2lvbiAhPSAnJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIndmVyY2hhbmdlJyIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6YXR0cmlidXRlPiAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmlnaHRWZXJzaW9uIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgIDwhLS0gCisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3QgPSJAbGVmdFZlcnNpb24gIT0gQHJpZ2h0VmVyc2lvbiBhbmQgQGxlZnRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRWZXJzaW9uICE9ICcnIGFuZCBAcmlnaHRTdGF0dXMgPSAnU3RhYmxlJyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz48YiB0aXRsZT0nQSBzdGFibGUgQVBJIGNoYW5nZWQgdmVyc2lvbi4nIGNsYXNzPSdiaWd3YXJuJz4oY2hhbmdlZCk8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdCA9IkByaWdodFN0YXR1cyA9ICdEcmFmdCcgYW5kIEByaWdodFZlcnNpb24gIT0gJHJpZ2h0VmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPjxiIHRpdGxlPSdBIGRyYWZ0IEFQSSBoYXMgdGhlIHdyb25nIHZlcnNpb24uJyBjbGFzcz0nYmlnd2Fybic+KHNob3VsZCBiZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJpZ2h0VmVyIi8+KTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAbGVmdFN0YXR1cyA9ICdOb25lJyBhbmQgQHJpZ2h0VmVyc2lvbiA9ICcnIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIAk8YnIvPjxiIHRpdGxlPSdBIG5ldyBBUEkgd2FzIGludHJvZHVjZWQgdGhhdCB3YXMgbm90IHRhZ2dlZC4nIGNsYXNzPSdiaWd3YXJuJz4odW50YWdnZWQpPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC94c2w6aWY+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICA8L3RhYmxlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKyAgCis8L3hzbDpzdHlsZXNoZWV0PgorCisKKworCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NweXNlYXJjaC9DcHkucG0gYi9zY3JpcHRzL2NweXNlYXJjaC9DcHkucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiOTA0MwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY3B5c2VhcmNoL0NweS5wbQpAQCAtMCwwICsxLDEwOSBAQAorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICogQ09QWVJJR0hUOgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24KKyMgICogYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCisjIENvbW1vbiBmdW5jdGlvbmFsaXR5IGJldHdlZW4gY3B5c2VhcmNoLnBsIGFuZCBjcHlzY2FuLnBsCisjCisKK3BhY2thZ2UgQ3B5OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBiYXNlICdFeHBvcnRlcic7CisKK291ciBARVhQT1JUID0gcXcoYW55IGdsb2JfdG9fcmVnZXggc2hvdWxkX2lnbm9yZSk7CisKKyMgYW55KENPREUsIExJU1QpCisjIEV2YWx1YXRlIENPREUgZm9yIGVhY2ggZWxlbWVudCBvZiBMSVNUIHRpbGwgQ09ERSgkXykgcmV0dXJucyAxLiBSZXR1cm4gMCBpZgorIyBub3QgZm91bmQuCitzdWIgYW55KCZAKSB7CisgICAgbXkgJGNvZGUgPSBzaGlmdDsKKyAgICBsb2NhbCAkXzsKKyAgICAmJGNvZGUgJiYgcmV0dXJuIDEgZm9yIEBfOworICAgIDA7Cit9CisKKyMgUGVybCBkb2Vzbid0IGhhdmUgZm5tYXRjaC4gQ2xvc2VzdCB0aGluZyBpcyBGaWxlOjpGbk1hdGNoIGJ1dCB0aGF0J3MKKyMgVU5JWC1vbmx5IChzZWUgaXRzIGNhdmVhdHMpLiBTbywgYXMgYSB3b3JrYXJvdW5kLCBjb252ZXJ0IGdsb2JzIHRvIHJlZ3VsYXIKKyMgZXhwcmVzc2lvbnMuIFRyYW5zbGF0ZWQgZnJvbSBQeXRob24ncyBmbm1hdGNoIG1vZHVsZS4KK3N1YiBnbG9iX3RvX3JlZ2V4KCQpIHsKKyAgICBteSAoJGdsb2IsICRpLCAkbGVuLCAkcmVnZXgpOworICAgICRnbG9iID0gc2hpZnQ7CisgICAgJGkgPSAwOworICAgICRsZW4gPSBsZW5ndGgoJGdsb2IpOworICAgICRyZWdleCA9ICIiOworCisgICAgIyBjaGFyYXQoU1RSLCBJRFgpCisgICAgIyBSZXR1cm4gdGhlIGNoYXJhY3RlciBpbiB0aGUgYXJndW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4LgorICAgIG15ICRjaGFyYXQgPSBzdWIoJCQpIHsgcmV0dXJuIHN1YnN0cihzaGlmdCwgc2hpZnQsIDEpIH07CisKKyAgICB3aGlsZSAoJGkgPCAkbGVuKSB7CisgICAgICAgIG15ICgkYywgJG91dCk7CisgICAgICAgICRjID0gJiRjaGFyYXQoJGdsb2IsICRpKyspOworICAgICAgICBpZiAgICAoJGMgZXEgJyonKSB7ICRvdXQgPSAnLionIH0KKyAgICAgICAgZWxzaWYgKCRjIGVxICc/JykgeyAkb3V0ID0gJy4nIH0KKyAgICAgICAgZWxzaWYgKCRjIGVxICdbJykgeyAjIGdsb2IgY2xhc3NlcworICAgICAgICAgICAgbXkgJGogPSAkaTsKKworICAgICAgICAgICAgIyBHZXQgdGhlIGNsb3NpbmcgaW5kZXggb2YgdGhlIGNsYXNzLiBdIGFwcGVhcmluZyBoZXJlIGlzIHBhcnQKKyAgICAgICAgICAgICMgb2YgdGhlIGNsYXNzLgorICAgICAgICAgICAgaWYgICAgKCRqIDwgJGxlbiAmJiAmJGNoYXJhdCgkZ2xvYiwgJGopIGVxICchJykgeyAkaisrIH0KKyAgICAgICAgICAgIGlmICAgICgkaiA8ICRsZW4gJiYgJiRjaGFyYXQoJGdsb2IsICRqKSBlcSAnXScpIHsgJGorKyB9CisgICAgICAgICAgICB3aGlsZSAoJGogPCAkbGVuICYmICYkY2hhcmF0KCRnbG9iLCAkaikgbmUgJ10nKSB7ICRqKysgfQorCisgICAgICAgICAgICAjIERpZG4ndCBmaW5kIGNsb3NpbmcgYnJhY2UuIFVzZSBsaXRlcmFsIFsKKyAgICAgICAgICAgIGlmICgkaiA+PSAkbGVuKSB7ICRvdXQgPSAiXFxbIiB9CisKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICMgVGhlIGNvbXBsZXRlIGNsYXNzIGNvbnRlbnRzIChleGNlcHQgdGhlIGJyYWNlcykKKyAgICAgICAgICAgICAgICBteSAkcyA9IHN1YnN0cigkcmVnZXgsICRpLCAkaiAtICRpKTsKKyAgICAgICAgICAgICAgICAkcyA9fiBzL1xcL1xcXFwvZzsKKyAgICAgICAgICAgICAgICAkaSA9ICRqICsgMTsgIyBjaGFuZ2UgcG9zaXRpb24gdG8gb3V0c2lkZSBjbGFzcworCisgICAgICAgICAgICAgICAgIyBOZWdhdGlvbgorICAgICAgICAgICAgICAgIGlmICgmJGNoYXJhdCgkcywgMCkgZXEgJyEnKSB7ICRzID0gJ14nLnN1YnN0cigkcywgMSk7IH0KKyAgICAgICAgICAgICAgICAjIExpdGVyYWwgXgorICAgICAgICAgICAgICAgIGVsc2lmICgmJGNoYXJhdCgkcywgMCkgZXEgJ14nKSB7ICRzID0gJ1xcJy4kczsgfQorCisgICAgICAgICAgICAgICAgJG91dCA9ICJbJHNdIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsgJG91dCA9IHF1b3RlbWV0YSgkYykgfQorICAgICAgICAkcmVnZXggLj0gJG91dDsKKyAgICB9CisgICAgcmV0dXJuICRyZWdleDsKK30KKworb3VyICRjcHlza2lwID0gJ2NweXNraXAudHh0JzsKK2RpZSAoIkNhbid0IGZpbmQgJGNweXNraXAuIFBsZWFzZSBkb3dubG9hZCBpdCBmcm9tICIuCisgICAgICJodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9jcHlza2lwLnR4dCAoc2VlICIuCisgICAgICJodHRwOi8vc2l0ZS5pY3UtcHJvamVjdC5vcmcvcHJvY2Vzc2VzL2NvcHlyaWdodC1zY2FuIGZvciBtb3JlIGRldGFpbHMpLiIpCisgICAgdW5sZXNzIC1mICRjcHlza2lwOworCitvcGVuIFNLSVAsICI8JGNweXNraXAiIG9yIGRpZSAiRXJyb3Igb3BlbmluZyAkY3B5c2tpcC4iOworb3VyIEBpZ25vcmVfZ2xvYnMgPSBtYXAgIHsgY2hvbXA7IGdsb2JfdG9fcmVnZXgoJF8pIH0KKyAgICAgICAgICAgICAgICAgICAgZ3JlcCB7ICEgbS9eXHMqIy8gfQorICAgICAgICAgICAgICAgICAgICA8U0tJUD47CitjbG9zZSBTS0lQOworCisjIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIHRvIGlnbm9yZQorb3VyIEBpZ25vcmVfZXh0ZW5zaW9ucyA9IHF3KHN2biBkbGwgaWxrIGlkYiBwZGIgZHNwIGRzdyBvcHQgbmNiIHZjcHJvaiBzbG4gc3VvCisgICAgY3ZzaWdub3JlIGNudiByZXMgaWN1IGV4ZSBvYmogYmluIGV4cCBsaWIgb3V0IHBsZyBqYXIgc3BwIHN0dWIgcG9saWN5IHR0ZgorICAgIFRURiBvdGYpOworb3VyICRpZ25vcmVfZXh0cyA9IGpvaW4gJ3wnLAorICAgICAgICAgICAgICAgICAgIG1hcCB7ICJcXC4kXyIgfQorICAgICAgICAgICAgICAgICAgIEBpZ25vcmVfZXh0ZW5zaW9uczsKKworIyBpZ25vcmUgcmVnZXgKK291ciAkaWdub3JlX3JlZ2V4ID0gImRhdGEvb3V0L2J1aWxkfENWU3xcXH58XFwjfERlYnVnfFJlbGVhc2V8cG9zaXRpb25zfHVuaWRhdGF8JGlnbm9yZV9leHRzIjsKKworIyBDaGVjayBpZiB0aGlzIGZpbGUgc2hvdWxkIGJlIGlnbm9yZWQuCitzdWIgc2hvdWxkX2lnbm9yZSgkKSB7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJGZpbGVuYW1lID1+IC8kaWdub3JlX3JlZ2V4LzsKKyAgICBmb3IgbXkgJHIgKEBpZ25vcmVfZ2xvYnMpIHsgcmV0dXJuIDEgaWYgJGZpbGVuYW1lID1+IC8kci8gfQorICAgIDA7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NweXNlYXJjaC9jcHlzY2FuLnBsIGIvc2NyaXB0cy9jcHlzZWFyY2gvY3B5c2Nhbi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZWI3NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jcHlzZWFyY2gvY3B5c2Nhbi5wbApAQCAtMCwwICsxLDMyIEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENPUFlSSUdIVDoKKyMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24KKyMgICogYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIAorIyAgU2VhcmNoIGZvciBhbmQgbGlzdCBmaWxlcyB3aGljaCBkb24ndCBoYXZlIGEgY29weXJpZ2h0IG5vdGljZSwgYW5kIHNob3VsZC4KKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRmlsZTo6RmluZDsKKwordXNlIEZpbmRCaW4gcXcoJEJpbik7Cit1c2UgbGliICRCaW47CisKK3VzZSBDcHk7CitteSAkaWN1X3NyYyA9ICRBUkdWWzBdIHx8ICIuIjsKK2RpZSAiQ2FuJ3Qgb3BlbiBJQ1UgZGlyZWN0b3J5OiAkaWN1X3NyYyIgdW5sZXNzIC1kICRpY3Vfc3JjOworZmluZCh7CisgICAgICAgIHdhbnRlZCA9PiBzdWIgeworICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAtZjsKKyAgICAgICAgICAgIHJldHVybiBpZiBzaG91bGRfaWdub3JlKCRfKTsKKworICAgICAgICAgICAgb3BlbiBGLCAiPCRfIiBvciBkaWUgIkVycm9yIG9wZW5pbmcgJyRfJy4iOworICAgICAgICAgICAgbXkgJHJlc3VsdCA9IGFueSB7ICRfID1+IC9jb3B5cmlnaHQuKihpbnRlcm5hdGlvbmFsfGlibSkvaSB9IDxGPjsKKyAgICAgICAgICAgIGNsb3NlIEY7CisKKyAgICAgICAgICAgIHByaW50ICIkX1xuIiB1bmxlc3MgJHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgbm9fY2hkaXIgPT4gMSwKKyAgICB9LCAkaWN1X3NyYyk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NweXNlYXJjaC9jcHlzZWFyY2gucGwgYi9zY3JpcHRzL2NweXNlYXJjaC9jcHlzZWFyY2gucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMyYzQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY3B5c2VhcmNoL2NweXNlYXJjaC5wbApAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENPUFlSSUdIVDoKKyMgICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24KKyMgICogYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjCisjIFNlYXJjaCBmb3IgZmlsZXMgbW9kaWZpZWQgdGhpcyB5ZWFyLCB0aGF0IG5lZWQgdG8gaGF2ZSBjb3B5cmlnaHQgaW5kaWNhdGluZworIyB0aGlzIGN1cnJlbnQgeWVhciBvbiB0aGVtLgorIwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBUaW1lOjpsb2NhbHRpbWU7Cit1c2UgRmlsZTo6c3RhdDsKK3VzZSBGaWxlOjpGaW5kOworCisjIEFkZCBzY3JpcHQgZGlyZWN0b3J5IHRvIFBlcmwgUEFUSC4KK3VzZSBGaW5kQmluIHF3KCRCaW4pOwordXNlIGxpYiAkQmluOworCit1c2UgQ3B5OworCitteSAkaWN1X3NyYyA9ICRBUkdWWzBdIHx8ICIuIjsKK2RpZSAiQ2FuJ3Qgb3BlbiBJQ1UgZGlyZWN0b3J5OiAkaWN1X3NyYyIgdW5sZXNzIC1kICRpY3Vfc3JjOworbXkgJHllYXIgPSBsb2NhbHRpbWUtPnllYXIgKyAxOTAwOworCitmaW5kKHsKKyAgICAgICAgd2FudGVkID0+IHN1YiB7ICMgJF8gaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZQorICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAtZjsKKyAgICAgICAgICAgIHJldHVybiBpZiAobG9jYWx0aW1lKHN0YXQoJF8pLT5tdGltZSktPnllYXIgKyAxOTAwKSA8ICR5ZWFyOworICAgICAgICAgICAgcmV0dXJuIGlmIHNob3VsZF9pZ25vcmUoJF8pOworICAgICAgICAgICAgIyBmaWxlIGlzIHJlY2VudCBhbmQgc2hvdWxkbid0IGJlIGlnbm9yZWQuIGZpbmQgY29weXJpZ2h0LgorCisgICAgICAgICAgICAjIGlmIGZpbGUgY29udGFpbnMgYSBsaW5lIHdpdGggImNvcHlyaWdodCIgYW5kIGN1cnJlbnQgeWVhciBvbiB0aGUKKyAgICAgICAgICAgICMgc2FtZSBsaW5lLCB3ZSdyZSBnb29kLgorICAgICAgICAgICAgb3BlbiBGLCAiPCRfIiBvciBkaWUgIkVycm9yIG9wZW5pbmcgJyRfJy4iOworICAgICAgICAgICAgbXkgJHJlc3VsdCA9IGFueSB7ICRfID1+IC9jb3B5cmlnaHQuKiR5ZWFyL2kgfSA8Rj47CisgICAgICAgICAgICBjbG9zZSBGOworCisgICAgICAgICAgICBwcmludCAiJF9cbiIgdW5sZXNzICRyZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIG5vX2NoZGlyID0+IDEsCisgICAgfSwgJGljdV9zcmMpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jcHlzZWFyY2gvcmVhZG1lLnR4dCBiL3NjcmlwdHMvY3B5c2VhcmNoL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg3ZGU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY3B5c2VhcmNoL3JlYWRtZS50eHQKQEAgLTAsMCArMSwxOCBAQAorQ29weXJpZ2h0IChjKSAyMDAyLTIwMDksIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworY3B5c2VhcmNoLnBsIGlzIGEgcGVybCBzY3JpcHQgdXNlZCB0byBkZXRlY3QgdGhlIGZpbGVzIHRoYXQgbWlnaHQgbm90IGhhdmUgdGhlIGNvcHlyaWdodCBub3RpY2UuIEJlc3Qgd2hlbiB1c2VkIG9uIHdpbmRvd3Mgb24gYSBjbGVhbiBjaGVja291dC4gRWRpdCAkaWN1U291cmNlIHRvIHlvdXIgcGF0aC4gSWYgeW91IGFyZSB3b3JraW5nIG9uIG90aGVyIHBsYXRmb3JtLCB5b3UgcHJvYmFibHkgd2FudCB0byBlZGl0ICRpZ25vcmUgdG8gcmVmbGVjdCBkaWZmZXJlbnQgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgeW91IGRvbid0IHdhbnQgaW4gdGhlIHNjYW4uIFRoZSByZXN1bHQgd2lsbCBiZSB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGRvbid0IGhhdmUgd29yZCBjb3B5cmlnaHQgKGNhc2UgaWdub3JlZCkgaW4gZmlyc3QgMTAgbGluZXMuIExvb2sgYXQgdGhlbSBhbmQgZml4IGlmIG5lZWRlZC4gCisKK2NweXNlYXJjaC5wbCAgc2VhcmNoZXMgZm9yIGZpbGVzIG1vZGlmaWVkIHRoaXMgeWVhciB0aGF0IGRvbid0IGhhdmUgdGhlCisgIGNvcnJlY3QgeWVhciBjb3B5cmlnaHQgKGkuZS4gJ2NvcHlyaWdodCAxOTk1JykgCisKK2NweXNjYW4ucGwgICAgc2VhcmNoZXMgZm9yIGFsbCBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYW55IGNvcHlyaWdodAorCitjcHlza2lwLnR4dCAgaXMgcGFydCBvZiB0aGUgaWdub3JlIGxpc3QuIERvd25sb2FkIHRoZSBsYXRlc3QgZnJvbQorICAgaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvY3B5c2tpcC50eHQKKworbW9yZSBkb2NzIG9uIGNvcHlyaWdodCBzY2FuIGF0OgorICAgaHR0cDovL3NpdGUuaWN1LXByb2plY3Qub3JnL3Byb2Nlc3Nlcy9jb3B5cmlnaHQtc2NhbgorCisKK0hhdmUgZnVuIQord2VpdgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9pY3VydW4gYi9zY3JpcHRzL2ljdXJ1bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZWFjZDZmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9pY3VydW4KQEAgLTAsMCArMSwyMDcgQEAKKyMhL2Jpbi9zaAorCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIElCTSBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBUaGlzIGlzIGRlc2lnbmVkIGZvciBidWlsZGluZyBhbmQgcnVubmluZyBzaW5nbGUtc291cmNlLWZpbGUgSUNVIHByb2dyYW1zLgorIworIyBZb3UgY2FuIGFsd2F5cyBkb3dubG9hZCB0aGUgbGF0ZXN0IGZyb20gaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L3Rvb2xzL3RydW5rL3NjcmlwdHMvaWN1cnVuCisjIE9yLCBhcyBhbiB1bm9mZmljaWFsIGxpbmssIGh0dHA6Ly9iaXQubHkvaWN1LXJ1bgorIworIyBJbiBpdHMgc2ltcGxlc3QgdXNhZ2UsICBzaW1wbHkgdHlwZToKKyMKKyMgICAgIGljdXJ1biAgeW91cnByb2dyYW0uYyAKKyMgICAgICAgKG9yIC5jcHAgaWYgaXQgaXMgYSBDKysgcHJvZ3JhbSkgCisjCisjICBUaGUgdG9vbCB3aWxsIGNvbXBpbGUgYW5kIHRoZW4gcnVuIHRoZSBwcm9ncmFtCisjCisjICBGSU5ESU5HIElDVQorIyAgVG8gZmluZCBJQ1UsIHRoZSBmb2xsb3dpbmcgc2VhcmNoIG9yZGVyIGlzIHVzZWQgYnkgcHJpb3JpdHk6CisjCisjICAxKSAgICAiLWkgPHBhdGg+IiAuLiB0aGUgPHBhdGg+IHdpbGwgYmUgc2VhcmNoZWQgZm9yIGVpdGhlciBhIGRpcmVjdCBwYXRoIHRvIGljdS1jb25maWcsCisjICAgICAgICAgICAgb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyBpdCwgb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyAnL2JpbicgY29udGFpbmluZyBpdC4KKyMgICAgICAgIEluIG90aGVyIHdvcmRzLCBpZiBpY3UtY29uZmlnIGlzICAvb3B0L2xvY2FsL2Jpbi9pY3UtY29uZmlnLCBhbnkgb2YgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6CisjICAgICAgICAgICAgICAgICAtaSAvb3B0L2xvY2FsCisjICAgICAgICAgICAgICAgICAtaSAvb3B0L2xvY2FsL2JpbgorIyAgICAgICAgICAgICAgICAgLWkgL29wdC9sb2NhbC9iaW4vaWN1LWNvbmZpZworIyAgICAgICAgIAorIyAgICAgICAgIEFkZGl0aW9uYWxseSwgL2ljdS9zb3VyY2UgaXMgYSBidWlsdCBJQ1Ugc291cmNlIGRpcmVjdG9yeSwgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgd2lsbCB3b3JrOgorIworIyAgICAgICAgICAgICAgICAgLWkgL2ljdQorIyAgICAgICAgICAgICAgICAgLWkgL2ljdS9zb3VyY2UKKyMKKyMgICAgICAgICBBbHNvLCBpZiAvYnVpbGQgaXMgYW4gb3V0LW9mLXNvdXJjZSBidWlsZCwgdGhpcyB3aWxsIHdvcms6CisjCisjICAgICAgICAgICAgICAgICAtaSAvYnVpbGQKKyMKKyMgIDIpICAgIElmIHRoZXJlIGlzIGFuIGV4ZWN1dGFibGUgfi8uaWN1cnVucmMgc2NyaXB0LCBpdCBjYW4gc2V0IHRoZSB2YXJpYWJsZSAiSUNVX0NPTkZJRyIgdG8gcG9pbnQKKyMgICAgICAgIGRpcmVjdGx5IHRvIHRoZSBpY3UtY29uZmlnIGZpbGUuCisjICAgICAgICBBbiBleGFtcGxlIH4vLmljdXJ1bnJjIHNjcmlwdCAgY29udGFpbnMganVzdCB0aGlzIGxpbmU6CisjICAgICAgICAgICAgICAgCisjICAgICAgICAgICAgICBJQ1VfQ09ORklHPS9ob21lL3NybC9FL0lJL2Jpbi9pY3UtY29uZmlnCisjCisjICAzKSAgICBJQ1VfQ09ORklHIGNhbiBiZSBzZXQgaW4gdGhlIGVudmlyb25tZW50IHRvIHBvaW50IHRvIGljdS1jb25maWcgICggaXQncyBvdmVycmlkZGVuIGJ5IHRoZSAuaWN1cnVucmMgc2NyaXB0ICkKKyMKKyMgIDQpICAgIGlmICJpY3UtY29uZmlnIiBpcyBvbiB0aGUgUEFUSCwgaXQgd2lsbCBiZSB1c2VkLgorIworIyAKKyMgIFJVTk5JTkcKKyMgICBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgZm9sbG93aW5nIHRoZSBmaWxlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyMKKyMgIFRPRE8KKyMgICAqIHNob3VsZCBzdXBwb3J0IHBrZy1jb25maWcsIHdoaWNoIGlzIHByZWZlcnJlZCBvdmVyIGljdS1jb25maWcsIGFsdGhvdWdoIGljdS1jb25maWcgbWFrZXMgdGhpcyB1c2FnZQorIyAgICAgZWFzaWVyCisjCisjICAgKiBuZWVkIHRvIHRlc3QgdGhlICRQQVRIIGFuZCAkSUNVX0NPTkZJRyB1c2FnZSBtb2RlbHMKKworU0NSSVBUVkVSPSckUmV2aXNpb24kJworCisKK0lDVV9PVkVSUklERT0iIgorCit1c2FnZSgpCit7CisgICAgZWNobyAiU2NyaXB0IFZlcnNpb24gJHtTQ1JJUFRWRVJ9IgorICAgIGVjaG8gIlVzYWdlOiAkMCBbIC1pIC9wYXRoL3RvL2ljdSB8IC1pIC9wYXRoL3RvL2ljdS1jb25maWcgXSAgZmlsZS5je3BwfSBbIHByb2dyYW0gYXJncyAuLi5dIgorfQorCitpZiBbICQjIC1sdCAxIF07Cit0aGVuCisgICAgICAgIHVzYWdlCisgICAgICAgIGV4aXQgMQorZmkKKworaWYgWyAiJDEiID0gIi0/IiAtbyAkMSA9ICItaCIgXTsKK3RoZW4KKyAgICAgICAgdXNhZ2UKKyAgICAgICAgZXhpdCAwCitmaQorCisKK2lmIFsgJDEgPSAiLWkiIF07Cit0aGVuCisgICAgICAgIHNoaWZ0CisgICAgICAgIElDVV9PVkVSUklERT0kMQorICAgICAgICBzaGlmdAorZmkKKworaWYgWyAkMSA9ICItTyIgXTsKK3RoZW4KKyAgICBzaGlmdAorICAgIFhUUkFfT1BUUz0kMQorICAgIHNoaWZ0CitmaQorCitpZiBbICEgLXggIiR7SUNVX0NPTkZJR30iIF07Cit0aGVuCisgICAgSUNVX0NPTkZJRz1gd2hpY2ggaWN1LWNvbmZpZyAyPi9kZXYvbnVsbCB8fCBlY2hvYAorZmkKKworCisjIG5vdywgc2VhcmNoCitpZiBbIC14IH4vLmljdXJ1bnJjIF07Cit0aGVuCisgICAgICAgIC4gfi8uaWN1cnVucmMKK2ZpCisKK0lOX1NPVVJDRT0KK0lDVV9DT05GSUdfT1BUUz0KKworaWYgWyAieCR7SUNVX09WRVJSSURFfSIgIT0gIngiIF07Cit0aGVuCisgICAgICAgIGlmIFsgLWYgIiR7SUNVX09WRVJSSURFfSIgLWEgLXggIiR7SUNVX09WRVJSSURFfSIgXTsKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIElDVV9DT05GSUc9IiR7SUNVX09WRVJSSURFfSIKKyAgICAgICAgZWxpZiBbIC14ICIke0lDVV9PVkVSUklERX0vaWN1LWNvbmZpZyIgXTsKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIElDVV9DT05GSUc9IiR7SUNVX09WRVJSSURFfS9pY3UtY29uZmlnIgorICAgICAgICBlbGlmIFsgLXggIiR7SUNVX09WRVJSSURFfS9iaW4vaWN1LWNvbmZpZyIgXTsKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIElDVV9DT05GSUc9IiR7SUNVX09WRVJSSURFfS9iaW4vaWN1LWNvbmZpZyIKKyAgICAgICAgZWxpZiBbIC14ICIke0lDVV9PVkVSUklERX0vc291cmNlL2NvbmZpZy9pY3UtY29uZmlnIiBdOworICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgSUNVX0NPTkZJRz0iJHtJQ1VfT1ZFUlJJREV9L3NvdXJjZS9jb25maWcvaWN1LWNvbmZpZyIKKyAgICAgICAgICAgICAgICBJTl9TT1VSQ0U9IiR7SUNVX09WRVJSSURFfS9zb3VyY2UiCisgICAgICAgIGVsaWYgWyAteCAiJHtJQ1VfT1ZFUlJJREV9L2NvbmZpZy9pY3UtY29uZmlnIiBdOworICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgSUNVX0NPTkZJRz0iJHtJQ1VfT1ZFUlJJREV9L2NvbmZpZy9pY3UtY29uZmlnIgorICAgICAgICAgICAgICAgIElOX1NPVVJDRT0iJHtJQ1VfT1ZFUlJJREV9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZWNobyAiJDA6IERvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoICRJQ1VfT1ZFUlJJREUgLSBub3QgYW4gZXhlY3V0YWJsZSBvciBhIGRpcmVjdG9yeSBjb250YWluaW5nIElDVSBzb3VyY2Ugb3IgaW5zdGFsbCIgPiYyCisgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCitmaQorCitpZiBbICEgLXggIiR7SUNVX0NPTkZJR30iIF07Cit0aGVuCisgICAgICAgIGVjaG8gIiQwOiBFcnJvcjogXCIke0lDVV9DT05GSUd9XCIgaXMgbm90IGFuIGljdS1jb25maWcgc2NyaXB0LiBCYWlsaW5nLiIgPiYyCisgICAgICAgIGV4aXQgMQorZmkKKworaWYgWyAtZCAiJHtJTl9TT1VSQ0V9IiBdOwordGhlbgorICAgIGVjaG8gIklDVSB3b3Jrc3BhY2UgZGlyOiIgIiR7SU5fU09VUkNFfSIKKyAgICAjIHJldmlzaXQKKyAgICBpZiBbIC1mICIke0lOX1NPVVJDRX0vY29tbW9uL3VuaWNvZGUvdXR5cGVzLmgiIF07CisgICAgdGhlbgorICAgICAgICB0b3Bfc3JjZGlyPSIke0lOX1NPVVJDRX0iCisgICAgZWxzZQorICAgICAgICB0b3Bfc3JjZGlyPWBzZWQgLW4gLWUgJ3MlXnRvcF9zcmNkaXIgPSBcKC4qXCklXDElcCcgPCAiJHtJTl9TT1VSQ0V9L01ha2VmaWxlImAKKyAgICAgICAgaWYgWyAhIC1kICIke3RvcF9zcmNkaXJ9IiBdOworICAgICAgICB0aGVuCisgICAgICAgICAgICBlY2hvICJTb3JyeTogY2Fubm90IGZpbmQgdG9wX3NyY2RpciBmcm9tICR7SU5fU09VUkNFfS9NYWtlZmlsZSIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCisgICAgaWYgWyAhIC1mICIke3RvcF9zcmNkaXJ9L2NvbW1vbi91bmljb2RlL3V0eXBlcy5oIiBdOworICAgIHRoZW4KKyAgICAgICAgZWNobyBTb3JyeTogY2Fubm90IGZpbmQgIiR7dG9wX3NyY2Rpcn0vY29tbW9uL3VuaWNvZGUvdXR5cGVzLmgiCisgICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZWNobyAiSUNVIHRvcCBsZXZlbCBzb3VyY2UgZGlyOiIgIiR7dG9wX3NyY2Rpcn0iCisKKyAgICBJQ1VfQ09ORklHX09QVFM9LS1ub3ZlcmlmeQorICAgIExJTktPUFRTPSItLWxkZmxhZ3MtbGlic29ubHkgLS1sZGZsYWdzLXN5c3RlbSAtLWxkZmxhZ3MtaWN1aW8iCisgICAgT1VSTElCUEFUSD0ke0lOX1NPVVJDRX0vbGliOiR7SU5fU09VUkNFfS9zdHViZGF0YToke0lOX1NPVVJDRX0vdG9vbHMvY3Rlc3RmdworICAgIFNSQ19PUFRTPSItSSR7dG9wX3NyY2Rpcn0vY29tbW9uIC1JJHt0b3Bfc3JjZGlyfS9pMThuICAtSSR7dG9wX3NyY2Rpcn0vaW8gLUkke3RvcF9zcmNkaXJ9L3Rvb2xzL2N0ZXN0ZncgLUkke3RvcF9zcmNkaXJ9L3Rvb2xzL3Rvb2x1dGlsIC1JJHtJTl9TT1VSQ0V9L2NvbW1vbiAtTCR7SU5fU09VUkNFfS9saWIgLUwke0lOX1NPVVJDRX0vc3R1YmRhdGEgLUwke0lOX1NPVVJDRX0vdG9vbHMvY3Rlc3RmdyIKKyAgICBJTlZPS0U9YCR7SUNVX0NPTkZJR30gJHtJQ1VfQ09ORklHX09QVFN9IC0taW52b2tlYDoiJHtPVVJMSUJQQVRIfSIKK2Vsc2UKKyAgICAjIG5vIGNwcGZsYWdzIGZvciBpbi1zb3VyY2UKKyAgICBDUFBPUFRTPSItLWNwcGZsYWdzIgorICAgIExJTktPUFRTPSItLWxkZmxhZ3MgLS1sZGZsYWdzLWljdWlvIgorICAgIElOVk9LRT1gJHtJQ1VfQ09ORklHfSAke0lDVV9DT05GSUdfT1BUU30gLS1pbnZva2VgCitmaQorCitlY2hvICdJQ1UgJyB2ZXJzaW9uOiBgJHtJQ1VfQ09ORklHfSAke0lDVV9DT05GSUdfT1BUU30gLS12ZXJzaW9uYCBwcmVmaXg6IGAke0lDVV9DT05GSUd9ICR7SUNVX0NPTkZJR19PUFRTfSAtLXByZWZpeGAKKworRklMRT0kMQorc2hpZnQKKworaWYgWyAhIC1mICIke0ZJTEV9IiBdOwordGhlbgorICAgIGVjaG8gIiQwOiBDYW4ndCBvcGVuICR7RklMRX0iID4mMgorICAgIHVzYWdlCisgICAgZXhpdCAxCitmaQorCisKKworY2FzZSAiJHtGSUxFfSIgaW4KKyAgICAgKi5jcHApCisgICAgICAgIENPTVA9YCR7SUNVX0NPTkZJR30gJHtJQ1VfQ09ORklHX09QVFN9IC0tY3h4IC0tY3h4ZmxhZ3MgJHtDUFBPUFRTfSAke0xJTktPUFRTfWAKKyAgICAgICAgT1VUPWBiYXNlbmFtZSAke0ZJTEV9IC5jcHBgCisgICAgIDs7CisKKyAgICAgKi5jKQorICAgICAgICBDT01QPWAke0lDVV9DT05GSUd9ICAke0lDVV9DT05GSUdfT1BUU30gLS1jYyAtLWNmbGFncyAke0NQUE9QVFN9ICR7TElOS09QVFN9YAorICAgICAgICBPVVQ9YGJhc2VuYW1lICR7RklMRX0gLmNgCisgICAgIDs7CisKKyAgICAgKikKKyAgICAgICAgZWNobyAiJDA6IGVycm9yLCBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCAke0ZJTEV9IiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgIDs7Citlc2FjCisKK2VjaG8gIiMgJHtDT01QfSIgIiR7U1JDX09QVFN9IiAtbyAiJHtPVVR9IiAiJHtGSUxFfSIgIiR7WFRSQV9PUFRTfSIKKyggJHtDT01QfSAke1NSQ19PUFRTfSAtbyAiJHtPVVR9IiAiJHtGSUxFfSIgJHtYVFJBX09QVFN9IHx8IChybSAtZiAiJHtPVVR9IiA7IGV4aXQgMSkgKSAgJiYgKCBlY2hvICIjICR7SU5WT0tFfSAuLyR7T1VUfSIgOyAiJHtTSEVMTH0iIC1jICIke0lOVk9LRX0gLi8ke09VVH0iICIkQCIpCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcmV0aWNrZXQgYi9zY3JpcHRzL3JldGlja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4NDFlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3JldGlja2V0CkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIGZvciBmaXhpbmcgbWlzdGlja2V0dGVkCisjIHNlZSBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy93aWtpL01pc1RpY2tldHRlZAorIyBUT0RPOiAgY2xlYW51cCAke1RNUEZ9KgorCisKKworcmV2PQorZnJvbT0KK3RvPQorCit1c2FnZSgpCit7CisgICAgZWNobyAiJDAgLXIgcmV2IC1mIGZyb21idWcgLXQgdG9idWciCit9CisKK3doaWxlIGdldG9wdHMgInI6Zjp0OiIgb3B0OyBkbworICAgIGNhc2UgJG9wdCBpbgorICAgICAgICByKQorICAgICAgICAgICAgcmV2PSRPUFRBUkcKKyAgICAgICAgICAgIDs7CisgICAgICAgIGYpCisgICAgICAgICAgICBmcm9tPSRPUFRBUkcKKyAgICAgICAgICAgIDs7CisgICAgICAgIHQpCisgICAgICAgICAgICB0bz0kT1BUQVJHCisgICAgICAgICAgICA7OworICAgICAgICBcPykKKyAgICAgICAgICAgIGVjaG8gIkludmFsaWQ6IC0kT1BUQVJHIiA+JjIKKyAgICAgICAgICAgIHVzYWdlCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitpZiBbWyAhICRyZXYgXV07Cit0aGVuCisgICAgZWNobyAibmVlZCAtciByZXYgb3B0aW9uIiA+JjIKKyAgICB1c2FnZQorICAgIGV4aXQgMQorZmkKKworaWYgW1sgISAkZnJvbSBdXTsKK3RoZW4KKyAgICBlY2hvICJuZWVkIC1mIG9sZGJ1ZyBvcHRpb24iID4mMgorICAgIHVzYWdlCisgICAgZXhpdCAxCitmaQorCitpZiBbWyAhICR0byBdXTsKK3RoZW4KKyAgICBlY2hvICJuZWVkIC10IG5ld2J1ZyBvcHRpb24iID4mMgorICAgIHVzYWdlCisgICAgZXhpdCAxCitmaQorCitpZiBbWyAhIC1kIC5zdm4gXV07Cit0aGVuCisgICAgZWNobyAiLnN2biBpcyBub3QgYSBkaXJlY3RvcnkuIFBsZWFzZSBjZCBzb21ld2hlcmUgZWxzZS4iID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgW1sgISAtZCAke1RNUERJUn0gXV07Cit0aGVuCisgICAgVE1QRElSPS90bXAKK2ZpCisKK1RNUEY9JHtUTVBESVJ9L3JldGlja2V0LnIke3Jldn0uZiR7ZnJvbX0udCR7dG99LnR4dAorCitlY2hvICJHZXR0aW5nIGxvZyBmb3IgciR7cmV2fSIgPiYyCisoIHN2biBwZyBzdm46bG9nIC0tcmV2cHJvcCAtciAke3Jldn0gLiB8IHRlZSAgJHtUTVBGfSB8IHNlZCAtZSAncyVeJTwgJWcnICkgfHwgZXhpdCAxCisKK2hlYWQgLTEgJHtUTVBGfSA+ICR7VE1QRn0uMQorCitpZiBncmVwIC1xICJedGlja2V0OiR7ZnJvbX1bXjAtOV0iICR7VE1QRn0uMTsKK3RoZW4KKyAgICBlY2hvICItLSBvbGQvbmV3IC0tIgorZWxzZQorICAgIGlmIGdyZXAgLXEgIl50aWNrZXQ6JHt0b31bXjAtOV0iICR7VE1QRn0uMTsKKyAgICB0aGVuCisgICAgICAgIGVjaG8gInIke3Jldn0gYWxyZWFkeSByZWZlcmVuY2VzIHRpY2tldDoke3RvfSAtIGV4aXR0aW5nLiIgPiYyCisgICAgICAgIGV4aXQgMAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRXJyb3I6IHIke3Jldn0gZG9lc24ndCBwZXJ0YWluIHRvIHRpY2tldDoke2Zyb219IC0gd2FzIHRoaXMgYWxyZWFkeSBmaXhlZD8iID4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworKCAoIHNlZCAtZSAicyVedGlja2V0OiR7ZnJvbX0ldGlja2V0OiR7dG99JSIgJHtUTVBGfS4xICYmIHRhaWwgKzIgJHtUTVBGfSApIHx8IGV4aXQgMiApIHwgdGVlICR7VE1QRn0uZml4IHwgc2VkIC1lICdzJV4lPiAlZycKKworQ01EPSJzdm4gcHMgc3ZuOmxvZyAtLXJldnByb3AgLXIgJHtyZXZ9IC1GICR7VE1QRn0uZml4IgorZWNobyAiIyAke0NNRH0iCitlY2hvICJ0eXBlIFlFUyB0byBkbywgXkMgdG8ga2lsbCIKK3JlYWQgZm9vCitpZiBbWyAkZm9vID0gIllFUyIgXV07Cit0aGVuCisgICAgZWNobyAiIyMgUmVtZW1iZXIgdGhlIHNlcnZlciBzdGlsbCBuZWVkcyB0byBiZSByZXN5bmNlZC4gU2VlIGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjL3dpa2kvRml4aW5nTWlzVGlja2V0dGVkIgorICAgIGV4ZWMgJHtDTUR9CitlbHNlCisgICAgZXhpdCAwCitmaQorCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9fX2luaXRfXy5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyZDY3NTYKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDUgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisjCisjCisjZnJvbSBpY3V0cmFjeHRuLndlYl91aSBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvZGN1dC5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL2RjdXQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGI3NDg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL2RjdXQucHkKQEAgLTAsMCArMSwxNTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworaW1wb3J0IHJlCisKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCAqCitmcm9tIHRyYWMudXRpbCBpbXBvcnQgTWFya3VwCitmcm9tIHRyYWMud2ViIGltcG9ydCBJUmVxdWVzdEhhbmRsZXIKK2Zyb20gdHJhYy53ZWIuY2hyb21lIGltcG9ydCBhZGRfc3R5bGVzaGVldCwgSU5hdmlnYXRpb25Db250cmlidXRvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElUZW1wbGF0ZVByb3ZpZGVyCitmcm9tIHRyYWMud2ViLmhyZWYgaW1wb3J0IEhyZWYKKyNmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wud2ViX3VpLmNoYW5nZXNldCBpbXBvcnQgSUNoYW5nZXNldFJhbmdlTGluaworZnJvbSB0cmFjLndpa2kgaW1wb3J0IHdpa2lfdG9faHRtbCwgd2lraV90b19vbmVsaW5lciwgSVdpa2lTeW50YXhQcm92aWRlciwgXAorICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdHRlcgorCisKK2NsYXNzIERjdXRNb2R1bGUoQ29tcG9uZW50KToKKworICAgIGltcGxlbWVudHMoSVJlcXVlc3RIYW5kbGVyKQorIyAgICBpbXBsZW1lbnRzKElSZXF1ZXN0SGFuZGxlcixJQ2hhbmdlc2V0UmFuZ2VMaW5rKQorCisgICAgZGVmIHJldmlzaW9uX3JhbmdlX2xpbmsoc2VsZiwgcmVxLCBiYXNlLCBzdGFydCwgZW5kKToKKyAgICAgICAgcmV0dXJuICgnRENVVCBIZWxwZXInLCByZXEuaHJlZignZGN1dCcsb2xkX3BhdGg9YmFzZSxuZXdfcGF0aD1iYXNlLG9sZD1zdGFydCxuZXc9ZW5kKSkKKworICAgIF9yZXF1ZXN0X3JlID0gcmUuY29tcGlsZShyIi9kY3V0KD86LyhbXi9dKykpPygvLiopPyQiKQorCisgICAgZGVmIG1hdGNoX3JlcXVlc3Qoc2VsZiwgcmVxKToKKyAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChzZWxmLl9yZXF1ZXN0X3JlLCByZXEucGF0aF9pbmZvKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcSk6CisKKyAgICAgICAgaWR4ID0gMAorICAgICAgICAjIHNybAorIyAgICAgICAgc2hvd19maWxlcyA9IHNlbGYudGltZWxpbmVfc2hvd19maWxlcworICAgICAgICBkYiA9IHNlbGYuZW52LmdldF9kYl9jbngoKQorICAgICAgICB0aWNrZXRsaXN0ID0ge30gICMgZGljdCBvZiB0aWNrZXQtPj8/PworICAgICAgICByZXZsaXN0ID0ge30gIyBkaWN0IG9mIHJldmlzaW9uLT4KKyAgICAgICAgIyB3ZWxsLiBjaGVjayBpdCBhZ2FpbiwuCisgICAgICAgICAgICAKKyAgICAgICAgc3JsZGVidWc9RmFsc2UKKyAgICAgICAgCisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkocmVxLmF1dGhuYW1lKQorICAgICAgICAKKyAgICAgICAgbmV3X3BhdGggPSByZXEuYXJncy5nZXQoJ25ld19wYXRoJykKKyAgICAgICAgbmV3X3JldiA9IHJlcS5hcmdzLmdldCgnbmV3JykKKyAgICAgICAgb2xkX3BhdGggPSByZXEuYXJncy5nZXQoJ29sZF9wYXRoJykKKyAgICAgICAgb2xkX3JldiA9IHJlcS5hcmdzLmdldCgnb2xkJykKKworICAgICAgICBuZXdfcGF0aCA9IHJlcG9zLm5vcm1hbGl6ZV9wYXRoKG5ld19wYXRoKQorICAgICAgICBuZXdfcmV2ID0gcmVwb3Mubm9ybWFsaXplX3JldihuZXdfcmV2KQorICAgICAgICBvbGRfcGF0aCA9IHJlcG9zLm5vcm1hbGl6ZV9wYXRoKG9sZF9wYXRoKQorICAgICAgICBvbGRfcmV2ID0gcmVwb3Mubm9ybWFsaXplX3JldihvbGRfcmV2KQorCisgICAgICAgIG9sZF9yZXYgPSBpbnQob2xkX3JldikKKyAgICAgICAgbmV3X3JldiA9IGludChuZXdfcmV2KQorICAgICAgICAKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0LmRpZmZfaHJlZiddID0gcmVxLmhyZWYoJ2NoYW5nZXNldCcsb2xkX3BhdGg9b2xkX3BhdGgsbmV3PW5ld19yZXYsbmV3X3BhdGg9bmV3X3BhdGgsb2xkPW9sZF9yZXYpCisKKyAgICAgICAgcmVxLmhkZlsnaXNfZGN1dCddPTEKKyAgICAgICAgCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5vbGRfcmV2J10gPSBvbGRfcmV2CisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5uZXdfcmV2J10gPSBuZXdfcmV2CisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5vbGRfcGF0aCddID0gb2xkX3BhdGgKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm5ld19wYXRoJ10gPSBuZXdfcGF0aAorCisgICAgICAgIGlmIFRydWU6CisgICAgICAgICAgICByZXEuaGRmWyd0YXJnZXRfcGF0aCddID0gJy4nOworICAgICAgICAgICAgIyBva2F5LiBtYW51YWxseSB0cm9tcCB0aHJvdWdoICdlbQorICAgICAgICAgICAgbnJldiA9IG9sZF9yZXYrMQorICAgICAgICAgICAgd2hpbGUgbnJldiA8PSBuZXdfcmV2OgorICAgICAgICAgICAgICAgIGNoZ3NldCA9IHJlcG9zLmdldF9jaGFuZ2VzZXQobnJldikKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gY2hnc2V0Lm1lc3NhZ2Ugb3IgJy0tJworICAgICAgICAgICAgICAgICMgY2FuIHdlIGxvYWQgYSB0aWNrZXQgZnJvbSBpdD8KKyAgICAgICAgICAgICAgICBzcGxpdHM9bWVzc2FnZS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZS5zdGFydHN3aXRoKCd0aWNrZXQ6JykgYW5kIGxlbihzcGxpdHMpPjI6CisgICAgICAgICAgICAgICAgICAgIHRpY2tuYW1lPXNwbGl0c1sxXQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0aWNrbnVtPWludCh0aWNrbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgICAgICAgICAgbnJldiA9IG5yZXYrMQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyB5ZXMsIHdlIGhhdmUgYSB0aWNrZXQgIworICAgICAgICAgICAgICAgICAgICBmaWxlcz1bXQorICAgICAgICAgICAgICAgICAgICBmb3IgY2hnIGluIGNoZ3NldC5nZXRfY2hhbmdlcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNoZ1swXS5zdGFydHN3aXRoKG9sZF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGNoZykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGZpbGVzKT09MDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZXYgPSBucmV2KzEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgbm8gcmVsZXZhbnQgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgdGl0ZW09KHRpY2tudW0sZmlsZXMsY2hnc2V0KQorICAgICAgICAgICAgICAgICAgICBpZiB0aWNrbnVtIGluIHRpY2tldGxpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRsaXN0W3RpY2tudW1dLmFwcGVuZCggdGl0ZW0gKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0bGlzdFt0aWNrbnVtXT1bIHRpdGVtIF0KKyAgICAgICAgICAgICAgICAgICAgcmV2bGlzdFtucmV2XT10aXRlbQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJtYWxmb3JtZWQgdGlja2V0PyAlcyBhdCAlZCIgJSAobWVzc2FnZSxucmV2KSAjIGRvbid0IGtub3cgdGhlIHN5bnRheCBmb3IgZGllLi4KKyAgICAgICAgICAgICAgICBucmV2ID0gbnJldisxCisgICAgICAgICAgICBpZiBsZW4odGlja2V0bGlzdCk6CisgICAgICAgICAgICAgICAgdGlja2V0cz10aWNrZXRsaXN0LmtleXMoKQorICAgICAgICAgICAgICAgIHRpY2tldHMuc29ydCgpCisgICAgICAgICAgICAgICAgZm9yIHRpY2tldCBpbiB0aWNrZXRzOgorICAgICAgICAgICAgICAgICAgICBhdGlja2V0PXRpY2tldGxpc3RbdGlja2V0XSAgIyAodGlja2V0LGZpbGVzLGNoZykKKyAgICAgICAgICAgICAgICAgICAgY210ID0gJ3RpY2tldDolZCAtICVkIHJldnM6ICcgJSAodGlja2V0LGxlbihhdGlja2V0KSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJldiBpbiBhdGlja2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV2biA9IHJldlsyXS5yZXYKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVjb3VudCA9IGxlbihyZXZbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBjbXQgPSBjbXQgKyAnciVkIC0gJWQgZmlsZXMgKCcgJSAocmV2bixmaWxlY291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiByZXZbMV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgZmlsZVswXSArICcgJworICAgICAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgJykgJworICAgICAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnQnICUgdGlja2V0XSA9IHdpa2lfdG9fb25lbGluZXIoY210LCBzZWxmLmVudiwgZGIsICBzaG9ydGVuPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLm51bWJlcicgJSB0aWNrZXRdID0gdGlja2V0CisgICAgICAgICAgICBpZiBsZW4ocmV2bGlzdCk6CisgICAgICAgICAgICAgICAgcmV2cz1yZXZsaXN0LmtleXMoKQorICAgICAgICAgICAgICAgIHJldnMuc29ydCgpCisgICAgICAgICAgICAgICAgZm9yIHJldiBpbiByZXZzOgorICAgICAgICAgICAgICAgICAgICBhcmV2PXJldmxpc3RbcmV2XSAgIyAodGlja2V0LGZpbGVzLGNoZykKKyAgICAgICAgICAgICAgICAgICAgY210ID0gJ3IlZCB0aWNrZXQ6JWQgJyAlIChhcmV2WzJdLnJldixhcmV2WzBdKQorICAgICAgICAgICAgICAgICAgICBmaWxlY291bnQgPSBsZW4oYXJldlsxXSkKKyAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgJyAtICVkIGZpbGVzICgnICUgZmlsZWNvdW50CisgICAgICAgICAgICAgICAgICAgIHNob3J0ZmlsZXM9JycKKyAgICAgICAgICAgICAgICAgICAgaiA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gYXJldlsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQuZmlsZXMuJWQucGF0aCcgJSAocmV2LGopXSA9IGZpbGVbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQuZmlsZXMuJWQua2luZCcgJSAocmV2LGopXSA9IGZpbGVbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQuZmlsZXMuJWQuY2hhbmdlJyAlIChyZXYsaildID0gZmlsZVsyXQorICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRwYXRoPWZpbGVbMF1bbGVuKG9sZF9wYXRoKSsxOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQuZmlsZXMuJWQuc2hvcnRwYXRoJyAlIChyZXYsaildID0gc2hvcnRwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICBjbXQgPSBjbXQgKyBmaWxlWzBdICsgJyAnCisgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGZpbGVzID0gc2hvcnRmaWxlcyArICcgJyArIHNob3J0cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgaj1qKzEKKyAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgJykgJworICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmNvbW1lbnQnICUgcmV2XSA9IHdpa2lfdG9fb25lbGluZXIoY210LCBzZWxmLmVudiwgZGIsICBzaG9ydGVuPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLm51bWJlcicgJSByZXZdID0gcmV2CisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQuc2hvcnRmaWxlcycgJSByZXZdID0gc2hvcnRmaWxlcworICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmJhY2tudW1iZXInICUgcmV2XSA9IChyZXYtMSkKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC50aWNrZXQnICUgcmV2XSA9IGFyZXZbMF0KKworCisjICAgICAgICBpZiBpc2luc3RhbmNlKHRlbXBsYXRlLCBiYXNlc3RyaW5nKToKKyMgICAgICAgICAgICByZXEuaGRmWydhZG1pbi5wYWdlX3RlbXBsYXRlJ10gPSB0ZW1wbGF0ZQorIyAgICAgICAgZWxzZToKKyMgICAgICAgICAgICByZXEuaGRmWydhZG1pbi5wYWdlX2NvbnRlbnQnXSA9IE1hcmt1cCh0ZW1wbGF0ZS5yZW5kZXIoKSkKKworICAgICAgICBjb250ZW50X3R5cGUgPSAidGV4dC9odG1sIgorICAgICAgICBhZGRfc3R5bGVzaGVldChyZXEsICdjc3MvaWN1eHRuLmNzcycpCisgICAgICAgIHJldHVybiAnZGN1dC5jcycsIGNvbnRlbnRfdHlwZQorCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9odGRvY3MvY3NzL2ljdXh0bi5jc3MgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9odGRvY3MvY3NzL2ljdXh0bi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhZTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL2h0ZG9jcy9jc3MvaWN1eHRuLmNzcwpAQCAtMCwwICsxLDUzIEBACisvKiBAb3ZlcnJpZGUgaHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvY2hyb21lL2ljdWNvZGV0b29scy9jc3MvaWN1eHRuLmNzcyAqLworCisvKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICovCisKKy8qIEBvdmVycmlkZSBodHRwOi8vdW5pY29kZS5vcmcvY2xkci90cmFjL2Nocm9tZS9pY3Vjb2RldG9vbHMvY3NzL2ljdXh0bi5jc3MgKi8KKworCit0YWJsZS5pY3VyZXZpZXcgeworCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisJYm9yZGVyOiAgMXB4IHNvbGlkIGdyYXk7Cit9CisKK3RhYmxlLmljdXJldmlldyB0aCwgdGFibGUuaWN1cmV2aWV3IHRkIHsKKwl0ZXh0LWFsaWduOiBsZWZ0OworCWJvcmRlcjogIDFweCBzb2xpZCBncmF5OworCXBhZGRpbmc6ICAycHg7Cit9CisKK3RhYmxlLmljdXJldmlldyB0aGVhZCB0aCB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3RhYmxlLmljdXJldmlldyB0ZC5jaGFuZ2VzIHsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKwordGFibGUuaWN1cmV2aWV3IHRkLm92ZXJhbGwgIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiBzaWx2ZXI7CisJZm9udC1zdHlsZTogaXRhbGljOworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCisuYnJhbmNoLXVua25vd24geworCWZvbnQtd2VpZ2h0OiBub3JtYWw7CisJZm9udC1zdHlsZTogIGl0YWxpYzsKK30KKy5icmFuY2gtdGFncyB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CisJY29sb3I6ICB3aGl0ZTsKKwliYWNrZ3JvdW5kLWNvbG9yOiBuYXZ5OworCXBhZGRpbmc6ICAxcHg7Cit9CisuYnJhbmNoLWJyYW5jaGVzIHsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWNvbG9yOiAgIzM1MzsKK30KKworLmJyYW5jaC10cnVuayB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvaHRkb2NzL2pzL3Jldmlldy5qcyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL2h0ZG9jcy9qcy9yZXZpZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkYjU3YgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL2h0ZG9jcy9qcy9yZXZpZXcuanMKQEAgLTAsMCArMSwyNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworICB2YXIgc2V0QnJhbmNoTmFtZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgdmFyIGNzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VzZXR0YWJsZSIpOworICAgICB2YXIgdHJzPWNzdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsKKyAgICAgZm9yKCBpPTEgOyBpIDwgdHJzLmxlbmd0aCA7IGkrKyApIHsKKwl2YXIgc2VjID0gdHJzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZCcpWzFdOyAvLyBbMF0gaXMgJ2F1dGhvcicsIFsxXSBpcyBzZWN0aW9uLgorICAgICAgICB2YXIgYnJrID0gc2VjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7CisgICAgICAgIGZvcihqPTA7ajxicmsubGVuZ3RoO2orKykgeworICAgICAgICAgICB2YXIgYnJpID0gYnJrW2pdOworICAgICAgICAgICB2YXIgc3RyID0gYnJpLmlubmVySFRNTDsKKyAgICAgICAgICAgaWYoc3RyLmluZGV4T2YoInRydW5rIik+LTEpIHsKKyAgICAgICAgICAgICAgYnJpLmNsYXNzTmFtZSA9ICdicmFuY2gtdHJ1bmsnOworICAgICAgICAgICB9IGVsc2UgaWYoc3RyLmluZGV4T2YoImJyYW5jaGVzIik+LTEpIHsKKyAgICAgICAgICAgICAgYnJpLmNsYXNzTmFtZSA9ICdicmFuY2gtYnJhbmNoZXMnOworICAgICAgICAgICB9IGVsc2UgaWYoc3RyLmluZGV4T2YoInRhZ3MiKT4tMSkgeworCSAgICAgIGJyaS5jbGFzc05hbWUgPSAnYnJhbmNoLXRhZ3MnOworICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgfQorICB9CisKKy8vIGh0dHA6Ly9ja29uLndvcmRwcmVzcy5jb20vMjAwOC8wNy8yNS9zdG9wLXVzaW5nLXdpbmRvd29ubG9hZC1pbi1qYXZhc2NyaXB0LworaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkge3dpbmRvdy5hdHRhY2hFdmVudCgnb25sb2FkJywgc2V0QnJhbmNoTmFtZXMpO30KK2Vsc2UgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzZXRCcmFuY2hOYW1lcywgZmFsc2UpO30KK2Vsc2Uge2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzZXRCcmFuY2hOYW1lcywgZmFsc2UpO30KKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzZDU5YWQKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy9yZXZpZXcucHkKQEAgLTAsMCArMSwzMzIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisjIFJldmlldyBtb2R1bGUuCisjIFRPRE86IHJlZmFjdG9yIHRpY2tldCBtYW5pcHVsYXRpb24gaXRlbXMgaW50byB0aWNrZXRtZ3IuCisKK2ltcG9ydCByZQorCitmcm9tIHRyYWMuY29yZSBpbXBvcnQgQ29tcG9uZW50LCBpbXBsZW1lbnRzCitmcm9tIHRyYWMuY29yZSBpbXBvcnQgQ29tcG9uZW50TWFuYWdlcgorZnJvbSB0cmFjLmNvcmUgaW1wb3J0IFRyYWNFcnJvcgorZnJvbSB0cmFjLnV0aWwgaW1wb3J0IE1hcmt1cAorZnJvbSB0cmFjLndlYiBpbXBvcnQgSVJlcXVlc3RIYW5kbGVyCitmcm9tIHRyYWMud2ViLmNocm9tZSBpbXBvcnQgYWRkX3N0eWxlc2hlZXQsIGFkZF9zY3JpcHQsIElUZW1wbGF0ZVByb3ZpZGVyLCBhZGRfY3R4dG5hdgorZnJvbSB0cmFjLnZlcnNpb25jb250cm9sIGltcG9ydCBDaGFuZ2VzZXQKK2Zyb20gdHJhYy53ZWIuYXBpIGltcG9ydCBJUmVxdWVzdEZpbHRlcgorZnJvbSB0cmFjLndpa2kgaW1wb3J0IHdpa2lfdG9faHRtbCwgd2lraV90b19vbmVsaW5lciwgSVdpa2lTeW50YXhQcm92aWRlcgorICAgICAgICAgICAgCitmcm9tIGdlbnNoaS5idWlsZGVyIGltcG9ydCB0YWcKKyNmcm9tIHRyYWMuZW52IGltcG9ydCBJRW52aXJvbm1lbnRTZXR1cFBhcnRpY2lwYW50Citmcm9tIHRyYWMucGVybSBpbXBvcnQgSVBlcm1pc3Npb25SZXF1ZXN0b3IKK2Zyb20gdHJhYy5jb25maWcgaW1wb3J0IExpc3RPcHRpb24KK2Zyb20gaWN1Y29kZXRvb2xzLnRpY2tldG1nciBpbXBvcnQgVGlja2V0TWFuYWdlcgorZnJvbSBwa2dfcmVzb3VyY2VzIGltcG9ydCByZXNvdXJjZV9maWxlbmFtZSAjQFVucmVzb2x2ZWRJbXBvcnQKKworY2xhc3MgUmV2aWV3TW9kdWxlKENvbXBvbmVudCk6CisKKyAgICBpbXBsZW1lbnRzKElUZW1wbGF0ZVByb3ZpZGVyLCBJUmVxdWVzdEZpbHRlciwgSVJlcXVlc3RIYW5kbGVyLCBJUGVybWlzc2lvblJlcXVlc3RvcikKKworICAgICMgcGF0aCB0byBtYXRjaCBmb3IgcmV2aWV3CisgICAgcGF0aF9tYXRjaCA9IHJlLmNvbXBpbGUocicvaWN1cmV2aWV3LyhbMC05XSspJykKKworICAgIHZvdGVhYmxlX3BhdGhzID0gTGlzdE9wdGlvbignaWN1Y29kZXRvb2xzJywgJ3BhdGhzJywgJy90aWNrZXQqJywKKyAgICAgICAgZG9jPSdMaXN0IG9mIFVSTCBwYXRocyB0byBzaG93IHJldmlld3Mgb24uIEdsb2JzIGFyZSBzdXBwb3J0ZWQuJykKKworICAgICMgIHNlYXJjaCBmb3IgZWFybGllc3QgbWF0Y2gsIGFuZCBob3cgbWFueSBzZWdtZW50cyB0byBpbmNsdWRlIGZvbGxvd2luZworICAgICMgICAgdHJ1bmsKKyAgICAjICAgIGJyYW5jaGVzL21haW50L21haW50LTQtOAorICAgICMgICAgdGFncy9yZWxlYXNlLTItMAorICAgIGJyYW5jaExpc3QgPSBbWyd0cnVuaycsMF0sWydicmFuY2hlcycsMl0sWyd0YWdzJywxXV0KKworICAgICMgSVBlcm1pc3Npb25SZXF1ZXN0b3IgbWV0aG9kcworICAgIGRlZiBnZXRfcGVybWlzc2lvbl9hY3Rpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gWydJQ1VSRVZJRVdfVklFVyddCisKKyAgICAjIElUZW1wbGF0ZVByb3ZpZGVyIG1ldGhvZHMKKyAgICBkZWYgZ2V0X3RlbXBsYXRlc19kaXJzKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAJcmV0dXJuIFtyZXNvdXJjZV9maWxlbmFtZShfX25hbWVfXywgJ3RlbXBsYXRlcycpXQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZTogCisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygnQ291bGQgbm90IGdldCB0ZW1wbGF0ZSBkaXI6ICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoZSksIGUpKQorCQlyZXR1cm4gIiIKKworCisgICAgZGVmIGdldF9odGRvY3NfZGlycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsoJ2ljdWNvZGV0b29scycsIHJlc291cmNlX2ZpbGVuYW1lKF9fbmFtZV9fLCAnaHRkb2NzJykpXQorCisgICAgIyBJUmVxdWVzdEZpbHRlciBtZXRob2RzCisgICAgZGVmIHByZV9wcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxLCBoYW5kbGVyKToKKyAgICAgICAgaWYgJ0lDVVJFVklFV19WSUVXJyBub3QgaW4gcmVxLnBlcm06CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlcgorCisgICAgICAgIGlmIHNlbGYubWF0Y2hfdGlja2V0cGFnZShyZXEpOgorICAgICAgICAgICAgc2VsZi5yZW5kZXJfcmV2aWV3bGluayhyZXEpCisKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIKKworICAgIGRlZiBwb3N0X3Byb2Nlc3NfcmVxdWVzdChzZWxmLCByZXEsIHRlbXBsYXRlLCBkYXRhLCBjb250ZW50X3R5cGUpOgorICAgICAgICByZXR1cm4gKHRlbXBsYXRlLCBkYXRhLCBjb250ZW50X3R5cGUpCisKKyAgICBkZWYgcmVuZGVyX3Jldmlld2xpbmsoc2VsZiwgcmVxKToKKyAgICAgICAgI2FkZF9zdHlsZXNoZWV0KHJlcSwgJ2ljdWNvZGV0b29scy9jc3MvaWN1eHRuLmNzcycpCisKKyAgICAgICAgZWxzID0gW10KKworICAgICAgICB0aWNrZXRfbWdyID0gVGlja2V0TWFuYWdlcihzZWxmLmNvbXBtZ3IpCisKKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgcmVwb3MgPSBzZWxmLmVudi5nZXRfcmVwb3NpdG9yeSgpCisgICAgICAgIGlmIG5vdCByZXBvczoKKyAgICAgICAgICAgIHJhaXNlIFRyYWNFcnJvcigiQ291bGQgbm90IGdldCByZXBvc2l0b3J5IGZvciAlcyIgJSAocmVxLmF1dGhuYW1lKSkKKworICAgICAgICByZXZzID0gdGlja2V0X21nci50a3QycmV2cyhzZWxmLmxvZywgZGIsIHJlcG9zLCByZXEsIHJlcS5hcmdzWyd0aWNrZXQnXSkKKworICAgICAgICBpZiBub3QgcmV2czoKKyAgICAgICAgICAgIHN0ciA9ICdObyBjb21taXRzLicKKyAgICAgICAgICAgIGxpID0gdGFnLmxpKHN0cikKKyAgICAgICAgICAgIGVscy5hcHBlbmQobGkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHIgPSAnICVkIGNvbW1pdHMuJyAlIGxlbihyZXZzKQorICAgICAgICAgICAgaHJlZiA9IHJlcS5ocmVmLnJldmlldyhyZXEuYXJnc1sndGlja2V0J10pCisgICAgICAgICAgICBhID0gdGFnLmEoJ1JldmlldycsIGhyZWY9aHJlZikKKyAgICAgICAgICAgIGxpID0gdGFnLmxpKGEgKyBzdHIpCisgICAgICAgICAgICBlbHMuYXBwZW5kKGxpKSAgICAgICAgICAgIAorICAgICAgICAKKyAgICAgICAgdWwgPSB0YWcudWwoZWxzLCBjbGFzc189J3JldmlldycpCisgICAgICAgIGNsYXNzTmFtZSA9ICcnCisgICAgICAgIHRpdGxlID0gIlJldmlld3MiCisgICAgICAgIGFkZF9jdHh0bmF2KHJlcSwgdGFnLnNwYW4odGFnLm9iamVjdCh1bCksIGlkPSdpY3VyZXZpZXcnLCB0aXRsZT10aXRsZSwgY2xhc3NfPWNsYXNzTmFtZSkpCisKKworICAgIGRlZiBtYXRjaF9yZXF1ZXN0KHNlbGYsIHJlcSk6CisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goJy9yZXZpZXcoPzovKFteL10rKSk/KD86LyhbXi9dKykpPyg/Oi8oLiopJCk/JywgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXEuYXJnc1sndGlja2V0J10gPSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBtYXRjaF90aWNrZXRwYWdlKHNlbGYsIHJlcSk6CisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goJy90aWNrZXQoPzovKFteL10rKSk/KD86LyhbXi9dKykpPyg/Oi8oLiopJCk/JywgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXEuYXJnc1sndGlja2V0J10gPSBtYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwYXRoVG9CcmFuY2hOYW1lKHNlbGYsIHBhdGgpOgorICAgICAgICAjcmV0dXJuICcvJy5qb2luKHBhdGguc3BsaXQoJy8nKVswOjJdKQorICAgICAgICB3aW5kZXggPSBOb25lCisgICAgICAgIHdpbiA9IE5vbmUKKyAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLmJyYW5jaExpc3Q6CisgICAgICAgICAgICBpZihwYXRoID09IGJyYW5jaFswXSk6ICAjIGNhdGNoIGNoYW5nZXMgdG8ganVzdCAndHJ1bmsnCisgICAgICAgICAgICAgICAgaWR4ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZHggPSBwYXRoLmZpbmQoYnJhbmNoWzBdKycvJykKKyAgICAgICAgICAgIGlmKGlkeCA+IC0xIGFuZCAod2luZGV4ID09IE5vbmUgb3Igd2luZGV4ID4gaWR4KSk6CisgICAgICAgICAgICAgICAgd2luZGV4ID0gaWR4CisgICAgICAgICAgICAgICAgd2luID0gYnJhbmNoCisgICAgICAgIGlmIHdpbmRleCA9PSBOb25lOgorICAgICAgICAgICAgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykKKyAgICAgICAgICAgIHJldHVybiAnLycuam9pbihzZWdtZW50c1swOjJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI3ByaW50ICJmb3VuZCAlcyBmb2xsICVzIEAgJWQiICUgKHdpblswXSx3aW5bMV0sd2luZGV4KQorICAgICAgICAgICAgc2VnbWVudHMgPSBwYXRoW3dpbmRleDpdLnNwbGl0KCcvJykKKyAgICAgICAgICAgIHJldHVybiBwYXRoWzp3aW5kZXhdICsgKCcvJy5qb2luKHNlZ21lbnRzWzA6d2luWzFdKzFdKSkgIyB1c2Ugc3BlY2lmaWVkICMgb2YgZm9sbG93aW5nIHNlZ21lbnRzCisKKyAgICBkZWYgY2hhbmdlVG9SYW5nZShzZWxmLCBjX25ldywgY2hhbmdlKToKKyAgICAgICAgIyBxOiAodSd0cnVuay9Mb2NhbGUuamF2YScsICdmaWxlJywgJ2FkZCcsIE5vbmUsIHUnLTEnKSAgZnJvbSByMworICAgICAgICAjIHE6ICh1J3RydW5rL3V0aWwuYycsICAgICAgJ2ZpbGUnLCAnZWRpdCcsIHUndHJ1bmsvdXRpbC5jJywgdScyJykgIGZyb20gcjQKKyMgICAgICAgIGNfcGF0aCA9IGNoYW5nZVswXQorIyAgICAgICAgY19pdGVtdHlwZSA9IGNoYW5nZVsxXQorICAgICAgICBjX3R5cGUgPSBjaGFuZ2VbMl0KKyAgICAgICAgY19vbGRwYXRoID0gY2hhbmdlWzNdCisgICAgICAgIGNfb2xkID0gaW50KGNoYW5nZVs0XSBvciAtMSkKKyAgICAgICAgaWYoY190eXBlIGluIChDaGFuZ2VzZXQuQ09QWSxDaGFuZ2VzZXQuTU9WRSkpOgorICAgICAgICAgICAgcmV0dXJuICgtMSwgY19uZXcsIGNfdHlwZSwgY19vbGQsIGNfb2xkcGF0aCkgIyBpZ25vcmUgT0xEIHJldiBmb3IgdGhlc2UKKyAgICAgICAgZWxpZihjX3R5cGUgaW4gKENoYW5nZXNldC5ERUxFVEUpKToKKyAgICAgICAgICAgIHJldHVybiAoY19vbGQsIC0xLCBjX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKGNfb2xkLCBjX25ldywgY190eXBlKQorICAgICAgICAKKyAgICBkZWYgZGVzY3JpYmVDaGFuZ2Uoc2VsZiwgZmlsZSwgY2hhbmdlLCByZXEsIGRiKToKKyAgICAgICAgd2hhdCA9IGNoYW5nZVsyXSBvciAnY2hhbmdlJworICAgICAgICB3aGVyZSA9ICdyJWQ6JWQnICUgKGNoYW5nZVswXSxjaGFuZ2VbMV0pCisgICAgICAgIGlmKGNoYW5nZVswXSA9PSAtMSk6CisgICAgICAgICAgICBpZihjaGFuZ2VbMV0gPT0gLTEpOgorICAgICAgICAgICAgICAgIHVybCA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGF0ID0gIm5vb3AiCisgICAgICAgICAgICAgICAgd2hlcmUgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNpZiBjaGFuZ2VbMl0gPT0gJ2FkZCtjb21taXRzJzoKKyAgICAgICAgICAgICAgICB1cmwgPSByZXEuaHJlZi5icm93c2VyKGZpbGUsIHJldj1jaGFuZ2VbMV0pICMgJ2FkZCcKKyAgICAgICAgICAgICAgICB3aGVyZSA9ICdyJWQnICUgY2hhbmdlWzFdCisgICAgICAgICAgICAgICAgd2hhdCA9IGNoYW5nZVsyXQorICAgICAgICBlbGlmKGNoYW5nZVsxXSA9PSAtMSk6CisgICAgICAgICAgICB1cmwgPSBOb25lICMgZGVsZXRlZAorICAgICAgICAgICAgd2hhdCA9ICJkZWxldGVkIgorICAgICAgICAgICAgd2hlcmUgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSByZXEuaHJlZi5jaGFuZ2VzZXQob2xkX3BhdGg9ZmlsZSwgb2xkPWNoYW5nZVswXSwgbmV3X3BhdGg9ZmlsZSwgbmV3PWNoYW5nZVsxXSkKKyAgICAgICAgaWYgdXJsOgorICAgICAgICAgICAgd2hhdCA9IE1hcmt1cCgnPGEgaHJlZj0iJXMiPiVzPC9hPicgJSAodXJsLHdoYXQpKQorICAgICAgICBpZiB3aGVyZToKKyAgICAgICAgICAgIHJldHVybiAod2hhdCwgdGFnLmEod2hlcmUsIGhyZWY9cmVxLmhyZWYuc2VhcmNoKHE9d2hlcmUpKSkKKyAgICAgICAgICAgICNyZXR1cm4gKHdoYXQsIHdoZXJlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICh3aGF0LCAnJykKKworCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXEpOgorICAgICAgICAjb2ssIHdoYXQgYXJlIHdlIGFib3V0LgorICAgICAgICAjZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgI3RpY2tldGxpc3QgPSB7fSAgIyBkaWN0IG9mIHRpY2tldC0+Pz8/CisgICAgICAgICNyZXZsaXN0ID0ge30gIyBkaWN0IG9mIHJldmlzaW9uLT4KKyAgICAgICAgcmVwb3MgPSBzZWxmLmVudi5nZXRfcmVwb3NpdG9yeSgpCisKKyAgICAgICAgbmV3X3BhdGggPSByZXEuYXJncy5nZXQoJ25ld19wYXRoJykKKyAgICAgICAgbmV3X3JldiA9IHJlcS5hcmdzLmdldCgnbmV3JykKKyAgICAgICAgb2xkX3BhdGggPSByZXEuYXJncy5nZXQoJ29sZF9wYXRoJykKKyAgICAgICAgb2xkX3JldiA9IHJlcS5hcmdzLmdldCgnb2xkJykKKworICAgICAgICBuZXdfcGF0aCA9IHJlcG9zLm5vcm1hbGl6ZV9wYXRoKG5ld19wYXRoKQorICAgICAgICBuZXdfcmV2ID0gcmVwb3Mubm9ybWFsaXplX3JldihuZXdfcmV2KQorICAgICAgICBvbGRfcGF0aCA9IHJlcG9zLm5vcm1hbGl6ZV9wYXRoKG9sZF9wYXRoKQorICAgICAgICBvbGRfcmV2ID0gcmVwb3Mubm9ybWFsaXplX3JldihvbGRfcmV2KQorICAgICAgICAKKworIyAgICAgICAgaWYgbm90IHJlcS5wZXJtLmhhc19wZXJtaXNzaW9uKCdUSUNLRVRfTU9ESUZZJyk6CisjICAgICAgICAgICAgcmV0dXJuIHJlcS5yZWRpcmVjdChyZXEuaHJlZi5icm93c2VyKCkpCisKKyAgICAgICAgb2xkX3JldiA9IGludChvbGRfcmV2KQorICAgICAgICBuZXdfcmV2ID0gaW50KG5ld19yZXYpCisgICAgICAgIAorICAgICAgICB0aWNrZXQgPSByZXEuYXJncy5nZXQoJ3RpY2tldCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpY2tldCA9IGludCh0aWNrZXQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICB0aWNrZXQgPSAwCisjICAgICAgICByZXEuaGRmWydyZXZpZXcudGlja2V0J10gPSB0aWNrZXQKKyMgICAgICAgIHJlcS5oZGZbJ3Jldmlldy50aWNrZXRodG1sJ10gPSB0YWcuYSh0aWNrZXQsIHJlcS5ocmVmLnRpY2tldCh0aWNrZXQpKQorCisgICAgICAgIGRhdGEgPSB7fQorCisgICAgICAgIGRhdGFbJ292ZXJhbGxfeSddID0gMAorICAgICAgICBkYXRhWyd0aWNrZXRfaWQnXSA9IHJlcS5hcmdzWyd0aWNrZXQnXQorICAgICAgICBkYXRhWyd0aWNrZXRfaHJlZiddID0gcmVxLmhyZWYudGlja2V0KHJlcS5hcmdzWyd0aWNrZXQnXSkKKworICAgICAgICB0aWNrZXRfbWdyID0gVGlja2V0TWFuYWdlcihzZWxmLmNvbXBtZ3IpCisKKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgcmVwb3MgPSBzZWxmLmVudi5nZXRfcmVwb3NpdG9yeSgpCisKKyAgICAgICAgcmV2cyA9IHRpY2tldF9tZ3IudGt0MnJldnMoc2VsZi5sb2csIGRiLCByZXBvcywgcmVxLCByZXEuYXJnc1sndGlja2V0J10pCisgICAgICAgIAorICAgICAgICBpZiAobm90IHJldnMgb3IgbGVuKHJldnMpPT0wKToKKyAgICAgICAgICAgICMgbm90aGluZyB0byByZXZpZXcuIHNob3VsZG4ndCBoYXBwZW4KKyAgICAgICAgICAgIHJldHVybiAoJ25vdGhpbmcuaHRtbCcsIGRhdGEsICd0ZXh0L2h0bWwnKQorICAgICAgICBlbGlmKGxlbihyZXZzKT09MSk6CisgICAgICAgICAgICAjIG9ubHkgb25lIGNoYW5nZSAtIGp1c3QgZG8gYSBjaGFuZ2VzZXQgdmlldworICAgICAgICAgICAgcmV0dXJuIHJlcS5yZWRpcmVjdChyZXEuaHJlZi5jaGFuZ2VzZXQocmV2c1swXSkpCisKKyAgICAgICAgcmV2Y291bnQgPSAwCisgICAgICAgIGJyYW5jaGVzID0ge30KKyAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICAjIG1heSBiZSAwIHJldnMuCisgICAgICAgIHJldmlzaW9ucyA9IFtdCisgICAgICAgIAorICAgICAgICBmb3IgcmV2IGluIHJldnM6CisgICAgICAgICAgICBjaGdzZXQgPSByZXBvcy5nZXRfY2hhbmdlc2V0KHJldikKKyAgICAgICAgICAgICMgcTogKHUndHJ1bmsvTG9jYWxlLmphdmEnLCAnZmlsZScsICdhZGQnLCBOb25lLCB1Jy0xJykgIGZyb20gcjMKKyAgICAgICAgICAgICMgcTogKHUndHJ1bmsvdXRpbC5jJywgJ2ZpbGUnLCAnZWRpdCcsIHUndHJ1bmsvdXRpbC5jJywgdScyJykgIGZyb20gcjQKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBjaGdzZXQubWVzc2FnZSBvciAnLS0nCisgICAgICAgICAgICByZXZjb3VudCA9IHJldmNvdW50ICsgMQorICAgICAgICAgICAgcmV2aXNpb24gPSB7fQorICAgICAgICAgICAgcmV2aXNpb25bJ3JldiddID0gIHRhZy5hKHJldiwgcmVxLmhyZWYuY2hhbmdlc2V0KHJldikpCisgICAgICAgICAgICByZXZpc2lvblsnYXV0aG9yJ10gPSBjaGdzZXQuYXV0aG9yCisgICAgICAgICAgICByZXZpc2lvblsnbnVtJ10gPSAgcmV2CisgICAgICAgICAgICByZXZpc2lvblsnY29tbWVudCddID0gIG1lc3NhZ2UgI3dpa2lfdG9fb25lbGluZXIoIG1lc3NhZ2UsIHNlbGYuZW52LCBkYiwgc2hvcnRlbj1GYWxzZSApCisgICAgICAgICAgICByYnJhbmNoZXMgPSByZXZpc2lvblsnYnJhbmNoZXMnXSA9IFtdCisgICAgICAgICAgICBmb3IgY2hnIGluIGNoZ3NldC5nZXRfY2hhbmdlcygpOgorICAgICAgICAgICAgICAgIHBhdGggPSBjaGdbMF0KKyAgICAgICAgICAgICAgICBpZiBwYXRoIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmlsZXNbcGF0aF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gW10KKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbcGF0aF0gPSBpdGVtOworICAgICAgICAgICAgICAgIGl0ZW0uYXBwZW5kKHNlbGYuY2hhbmdlVG9SYW5nZShyZXYsY2hnKSkKKyAgICAgICAgICAgICAgICBicmFuY2hfbmFtZSA9IHNlbGYucGF0aFRvQnJhbmNoTmFtZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIGJyYW5jaF9uYW1lIG5vdCBpbiByYnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIHJicmFuY2hlcy5hcHBlbmQoYnJhbmNoX25hbWUpCisgICAgICAgICAgICByZXZpc2lvbnMuYXBwZW5kKHJldmlzaW9uKQorICAgICAgICBkYXRhWydyZXZpc2lvbnMnXSA9IHJldmlzaW9ucworICAgICAgICAKKyAgICAgICAgaWYocmV2Y291bnQgPiAwKToKKyAgICAgICAgICAgIGRhdGFbJ3JldmNvdW50J10gPSByZXZjb3VudAorICAgICAgICAKKyAgICAgICAgIyBwcmludCAiZmlsZXM6ICVkIiAlIGxlbihmaWxlcykKKyAgICAgICAgIyBnbyB0aHJvdWhnIGVhY2ggZmlsZSBhbmQgY2FsY3VsYXRlIGl0cyBtaW5pbXVtIHJhbmdlCisgICAgICAgIGZpbGVsaXN0ID0gZmlsZXMua2V5cygpCisgICAgICAgIGZpbGVsaXN0LnNvcnQoKQorIyAgICAgICAgcHJpbnQgJ2JhciB0byAlZCBsZW4gb2YgJXMnICUgKGxlbihmaWxlbGlzdCksc3RyKGZpbGVsaXN0KSkKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICBjaGFuZ2VzID0gZmlsZXNbZmlsZV0KKyAgICAgICAgICAgIGkgPSAwCisjICAgICAgICAgICAgcHJpbnQgIiBsb29waW5nIGZyb20gJWQgdG8gJWQgb3ZlciAlZCAiICUgKGksbGVuKGNoYW5nZXMpLTEsbGVuKGNoYW5nZXMpKQorICAgICAgICAgICAgd2hpbGUgbGVuKGNoYW5nZXMpPjEgYW5kIGk8KGxlbihjaGFuZ2VzKS0xKToKKyAgICAgICAgICAgICAgICBpZiBjaGFuZ2VzW2ldWzFdID09IGNoYW5nZXNbaSsxXVswXToKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hhbmdlc1tpXVswXSA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNbaSsxXSA9IChjaGFuZ2VzW2ldWzBdLGNoYW5nZXNbaSsxXVsxXSwnYWRkK2NvbW1pdHMnKSAjIHJldGFpbiAnZmlyc3QnIHJldgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc1tpKzFdID0gKGNoYW5nZXNbaV1bMF0sY2hhbmdlc1tpKzFdWzFdLCdtdWx0aXBsZSBjb21taXRzJykgIyByZXRhaW4gJ2ZpcnN0JyByZXYKKworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlc1s6aV0gKyBjaGFuZ2VzW2krMTpdICMgYW5kIHNoaWZ0IGRvd24KKyMgICAgICAgICAgICAgICAgICAgIHByaW50ICJtZXJnZWQ6ICVzIiAlIHN0cihjaGFuZ2VzKQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tmaWxlXSA9IGNoYW5nZXMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgCisgICAgICAgICMgbm93LCB3cml0ZSAnZW0gb3V0CisgICAgICAgIHNlcmEgPSAwCisgICAgICAgICNmaWxlc19kYXRhID0gW10KKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICBzZXJhID0gc2VyYSsxCisgICAgICAgICAgICBmaWxlX2RhdGEgPSB7fQorICAgICAgICAgICAgZmlsZV9kYXRhWyduYW1lJ10gPSBNYXJrdXAoJzxhIGhyZWY9IiVzIj4lczwvYT4nICUgKHJlcS5ocmVmLmJyb3dzZXIoZmlsZSksZmlsZSkpCisgICAgICAgICAgICBicmFuY2hfbmFtZSA9IHNlbGYucGF0aFRvQnJhbmNoTmFtZShmaWxlKQorICAgICAgICAgICAgI3ByaW50ICJicmFuY2ggaXM6ICglcykiICUgKGJyYW5jaF9uYW1lKQorICAgICAgICAgICAgYnJhbmNoZXNfZGF0YSA9IGJyYW5jaGVzLmdldChicmFuY2hfbmFtZSwge30pCisgICAgICAgICAgICBmaWxlc19kYXRhID0gYnJhbmNoZXNfZGF0YS5nZXQoJ2ZpbGVzJyxbXSkKKworICAgICAgICAgICAgY2hhbmdlcyA9IGZpbGVzW2ZpbGVdCisgICAgICAgICAgICBjaGEgPSAwCisgICAgICAgICAgICBjaGFuZ2VzX2RhdGEgPSBbXQorICAgICAgICAgICAgZm9yIGNoYW5nZSBpbiBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIGNoYSA9IGNoYSArIDEKKyMgICAgICAgICAgICAgICAgcHJpbnQgIiVzIG91dHB1dCAlcyAiICUgKGZpbGUsIHN0cihjaGFuZ2UpKQorICAgICAgICAgICAgICAgIGNoYW5nZXNfZGF0YS5hcHBlbmQoc2VsZi5kZXNjcmliZUNoYW5nZShmaWxlLCBjaGFuZ2UsIHJlcSwgZGIpKQorICAgICAgICAgICAgZmlsZV9kYXRhWydjaGFuZ2VzJ10gPSBjaGFuZ2VzX2RhdGEKKyAgICAgICAgICAgIGlmKGxlbihjaGFuZ2VzKT4xKToKKyAgICAgICAgICAgICAgICB3aGF0aHRtbCA9IHNlbGYuZGVzY3JpYmVDaGFuZ2UoZmlsZSwgKGNoYW5nZXNbMF1bMF0sIGNoYW5nZXNbbGVuKGNoYW5nZXMpLTFdWzFdLCAnb3ZlcmFsbCcpLCByZXEsIGRiKQorICAgICAgICAgICAgICAgIGZpbGVfZGF0YVsnb3ZlcmFsbCddID0gd2hhdGh0bWwKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGFbJ292ZXJhbGxfeSddID0gMQorICAgICAgICAgICAgICAgIGRhdGFbJ292ZXJhbGxfeSddID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGFbJ292ZXJhbGxfeSddID0gMAorICAgICAgICAgICAgZmlsZXNfZGF0YS5hcHBlbmQoZmlsZV9kYXRhKQorICAgICAgICAgICAgIyBzZXRzCisgICAgICAgICAgICBicmFuY2hlc19kYXRhWydmaWxlcyddID0gZmlsZXNfZGF0YQorICAgICAgICAgICAgYnJhbmNoZXNfZGF0YVsnbGVuJ10gPSBsZW4oZmlsZXNfZGF0YSkKKyAgICAgICAgICAgIGJyYW5jaGVzX2RhdGFbJ25hbWUnXSA9IGJyYW5jaF9uYW1lCisgICAgICAgICAgICBicmFuY2hlc1ticmFuY2hfbmFtZV0gPSBicmFuY2hlc19kYXRhCisKKyAgICAgICAgIyAuLiBjb252ZXJ0IGRpY3QgdG8gYXJyYXkuCisgICAgICAgIGJyYW5jaF9saXN0ID0gW10KKyAgICAgICAgZm9yIGJyYW5jaCBpbiBicmFuY2hlczoKKyAgICAgICAgICAgIGJyYW5jaF9saXN0LmFwcGVuZChicmFuY2hlc1ticmFuY2hdKQorICAgICAgICBkYXRhWydicmFuY2hlcyddID0gYnJhbmNoX2xpc3QKKyAgICAgICAgZGF0YVsnbGFzdGJyYW5jaCddID0gYnJhbmNoCisgICAgICAgIGRhdGFbJ2JyYW5jaGNvdW50J10gPSBsZW4oYnJhbmNoZXMpCisgICAgICAgIAorICAgICAgICBjb250ZW50X3R5cGUgPSAidGV4dC9odG1sIgorICAgICAgICBhZGRfc3R5bGVzaGVldChyZXEsICdpY3Vjb2RldG9vbHMvY3NzL2ljdXh0bi5jc3MnKQorICAgICAgICBhZGRfc2NyaXB0KHJlcSwgJ2ljdWNvZGV0b29scy9qcy9yZXZpZXcuanMnKQorICAgICAgICByZXR1cm4gJ3Jldmlldy5odG1sJywgZGF0YSwgY29udGVudF90eXBlCisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9ub3RoaW5nLmh0bWwgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvbm90aGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYTllZTQKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvbm90aGluZy5odG1sCkBAIC0wLDAgKzEsMjUgQEAKKzwhRE9DVFlQRSBodG1sCisgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8IS0tCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICAgICAgeG1sbnM6cHk9Imh0dHA6Ly9nZW5zaGkuZWRnZXdhbGwub3JnLyIKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgPHhpOmluY2x1ZGUgaHJlZj0ibGF5b3V0Lmh0bWwiIC8+CisgIDxoZWFkPgorICAgIDx0aXRsZT5Ob3RoaW5nIHRvIFJldmlldyBmb3IgdGlja2V0ICMke3RpY2tldF9pZH08L3RpdGxlPgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iY3R4dG5hdiIgY2xhc3M9Im5hdiI+PC9kaXY+CisKKyAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0iaWN1Y29kZXJldmlldyI+CisgICAgICA8aDE+Tm90aGluZyB0byByZXZpZXchPC9oMT4KKyAgICAgIDxwPgorICAgICAgCU5vdGhpbmcgdG8gcmV2aWV3IC0gbm8gY2hhbmdlc2V0cyBpbiB0aWNrZXQgPGEgaHJlZj0iJHt0aWNrZXRfaHJlZn0iPiMke3RpY2tldF9pZH08L2E+CisgICAgICA8L3A+CisgICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9yZXZpZXcuaHRtbCBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9yZXZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTY0NjRiCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGVtcGxhdGVzL3Jldmlldy5odG1sCkBAIC0wLDAgKzEsMTQxIEBACis8IURPQ1RZUEUgaHRtbAorICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPCEtLQorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgICAgIHhtbG5zOnB5PSJodHRwOi8vZ2Vuc2hpLmVkZ2V3YWxsLm9yZy8iCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDx4aTppbmNsdWRlIGhyZWY9ImxheW91dC5odG1sIiAvPgorICA8aGVhZD4KKyAgICA8dGl0bGU+UmV2aWV3IGZvciB0aWNrZXQgIyR7dGlja2V0X2lkfTwvdGl0bGU+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJjdHh0bmF2IiBjbGFzcz0ibmF2Ij48L2Rpdj4KKworICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpY3Vjb2RlcmV2aWV3Ij4KKworCisgPGgxPlRpY2tldCA8YSBocmVmPScke2hyZWYudGlja2V0KHRpY2tldF9pZCl9Jz4jJHt0aWNrZXRfaWR9PC9hPjwvaDE+CisKKzxweTppZiB0ZXN0PSJyZXZjb3VudCI+CisKKyAgPGgyPiR7cmV2Y291bnR9IENoYW5nZXNldHM8L2gyPgorICA8dGFibGUgaWQ9J2NoYW5nZXNldHRhYmxlJyBjbGFzcz0naWN1cmV2aWV3Jz4KKyAgICA8dGhlYWQ+CisgICAgICA8dHI+CisJPHRoPnI8L3RoPgorCTx0aD5hdXRob3I8L3RoPgorCTx0aD5zZWN0aW9uKHMpPC90aD4KKwk8dGg+Y29tbWVudDwvdGg+CisgICAgICA8L3RyPgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PgorICAgICAgPHB5OmZvciBlYWNoPSJyZXYgaW4gcmV2aXNpb25zIj4KKwk8dHI+CisJICA8dGg+CisJICAgIDxhIGhyZWY9IiR7aHJlZi5jaGFuZ2VzZXQocmV2Lm51bSl9Ij5yJHtyZXYubnVtfTwvYT4KKwkgIDwvdGg+CisJICA8dGQ+CisJICAgICR7cmV2LmF1dGhvcn0KKwkgIDwvdGQ+CisJICA8dGQ+CisJICAgIDwhLS0gc2VjdGlvbnMgLS0+CisJICAgIDxweTpmb3IgZWFjaD0iYnJhbmNoIGluIHJldi5icmFuY2hlcyI+CisJICAgICAgPGIgY2xhc3M9J2JyYW5jaGxpc3QnPgorCQk8YSBjbGFzcz0nYnJhbmNoLXVua25vd24nIGhyZWY9IiMke2JyYW5jaH0iPiR7YnJhbmNofTwvYT4gCisJICAgICAgPC9iPgorCSAgICA8L3B5OmZvcj4KKwkgIDwvdGQ+CisJICA8dGQ+CisJICAgICR7cmV2LmNvbW1lbnR9CisJICA8L3RkPgorCTwvdHI+CisgICAgICA8L3B5OmZvcj4KKyAgICA8L3Rib2R5PgorICA8L3RhYmxlPgorICAKKzxweTppZiB0ZXN0PSJicmFuY2hjb3VudCA+IDEiPgorPGgyPkZpbGVzPC9oMj4KKzxoMz5KdW1wIHRvIFNlY3Rpb25zPC9oMz4KKzx1bD4KKzxweTpmb3IgZWFjaD0iYnJhbmNoIGluIGJyYW5jaGVzIj4KKyAgPGxpPjxhIGhyZWY9IiMke2JyYW5jaC5uYW1lfSI+JHticmFuY2gubmFtZX08L2E+ICZtZGFzaDsgJHticmFuY2gubGVufSBmaWxlczwvbGk+Cis8L3B5OmZvcj4KKzwvdWw+Cis8L3B5OmlmPgorCis8cHk6Zm9yIGVhY2g9ImJyYW5jaCBpbiBicmFuY2hlcyI+Cis8aHIvPgorPGEgbmFtZT0iJHticmFuY2gubmFtZX0iPgorICA8aDM+CisgICAgICAgIDxhIGhyZWY9IiR7aHJlZi5icm93c2VyKGJyYW5jaC5uYW1lKX0iPiR7YnJhbmNoLm5hbWV9PC9hPiAmbWRhc2g7ICgke2JyYW5jaC5sZW59IGZpbGVzIGNoYW5nZWQpCisgIDwvaDM+Cis8L2E+CisKKzxibG9ja3F1b3RlPgorCis8dGFibGUgY2xhc3M9J2ljdXJldmlldyc+Cis8dGhlYWQ+Cis8dHI+CisgPHRoPkZpbGU8L3RoPgorIDx0aD5DaGFuZ2VzPC90aD4KKyA8dGg+RGV0YWlsczwvdGg+CisgPHB5OmlmIHRlc3Q9Im92ZXJhbGxfeSA+IDAiPiAKKyAgPHRoPk92ZXJhbGw8YnIvPjxpPihpbmNsdWRpbmcgb3RoZXIgY2hhbmdlcyk8L2k+PC90aD4KKyAgPHRoPkRldGFpbHM8L3RoPgorIDwvcHk6aWY+Cis8L3RyPgorPC90aGVhZD4KKzx0Ym9keT4KKzxweTpmb3IgZWFjaD0iZmlsZSBpbiBicmFuY2guZmlsZXMiPgorIDx0cj4KKyAgICA8dGggY2xhc3M9J25hbWUnPiR7ZmlsZS5uYW1lfTwvdGg+CisgICAgPHRkIGNsYXNzPSdjaGFuZ2VzJz4KKyAgICAgIDxweTpmb3IgZWFjaD0iY2hhbmdlIGluIGZpbGUuY2hhbmdlcyI+CisgICAgICAgICR7Y2hhbmdlWzBdfTxici8+CisgICAgICA8L3B5OmZvcj4KKyAgICA8L3RkPgorICAgIDx0ZCBjbGFzcz0nZGV0YWlscyc+CisgICAgICA8cHk6Zm9yIGVhY2g9ImNoYW5nZSBpbiBmaWxlLmNoYW5nZXMiPgorICAgICAgICAke2NoYW5nZVsxXX08YnIvPgorICAgICAgPC9weTpmb3I+CisgICAgPC90ZD4KKwkgIAorICAgIDxweTppZiB0ZXN0PSJvdmVyYWxsX3kgPiAwIj4gCisgICAgIDxweTppZiB0ZXN0PSJmaWxlLm92ZXJhbGxfeSA+IDAiPgorICAgICAgPHRkIGNsYXNzPSdvdmVyYWxsJz4ke2ZpbGUub3ZlcmFsbFswXX08L3RkPgorICAgICAgPHRkIGNsYXNzPSdvdmVyYWxsJz4ke2ZpbGUub3ZlcmFsbFsxXX08L3RkPgorICAgICA8L3B5OmlmPgorICAgIDwvcHk6aWY+CisgIDwvdHI+Cis8L3B5OmZvcj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorCis8L2Jsb2NrcXVvdGU+CisKKzwvcHk6Zm9yPgorCis8aHIvPgorCis8ZGl2IHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KKzxoMj5NZXJnZSBDb21tYW5kczwvaDI+CitWZXJ5IGV4cGVyaW1lbnRhbC4gIENoYW5nZSA/Pz8gdG8gdGhlIHRvcCBvZiB0aGUgdHJlZSB5b3Ugd2FudCB0byBtZXJnZSBmcm9tIChpY3Ugb3IgaWN1NGopPGJyLz4KKzx0ZXh0YXJlYT5zdm4gbWVyZ2UgLWMgPD9jcyBlYWNoOnJldiA9IHJldmlzaW9ucyA/Pjw/Y3MgdmFyOnJldi5udW0gPz4sPD9jcyAvZWFjaCA/PiBzdm4rc3NoOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvPz8/L3RydW5rPC90ZXh0YXJlYT4KKworPGhyLz4KKzwvZGl2PgorPGhyLz4KKzxpZnJhbWUgc3JjPSJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2ljdWNvZGV0b29scy92MS9yZXZpZXciIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjgwMHB4Ij4KKzxoMT48YSBocmVmPSJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2ljdWNvZGV0b29scy92MS9yZXZpZXciPkhlbHA8L2E+PC9oMT4KKzwvaWZyYW1lPgorCis8L3B5OmlmPgorPGhyLz4KKzxpPiRJZDogJDwvaT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyZTMxYTUKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2ljdWNvZGV0b29scy90aWNrZXRtZ3IucHkKQEAgLTAsMCArMSwxNzAgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisjIEF1dGhvcjogPHNybEBpY3UtcHJvamVjdC5vcmc+CisjCisKKyMgCisjIFRpY2tldCBtYW5hZ2VtZW50LgorIyBUaGlzIGNvbXBvbmVudCBtYW5hZ2VzIHRoZSByZXZpc2lvbiB0byB0aWNrZXQgbWFwLgorCisKKworZnJvbSB0cmFjLmNvcmUgaW1wb3J0IENvbXBvbmVudCwgaW1wbGVtZW50cywgVHJhY0Vycm9yCitmcm9tIHRyYWMuZW52IGltcG9ydCBJRW52aXJvbm1lbnRTZXR1cFBhcnRpY2lwYW50Citmcm9tIHRyYWMuZGIgaW1wb3J0IFRhYmxlLCBDb2x1bW4sIEluZGV4LCBEYXRhYmFzZU1hbmFnZXIKK2Zyb20gdHJhYy5jb25maWcgaW1wb3J0IE9wdGlvbgorZnJvbSB0cmFjLnV0aWwudGV4dCBpbXBvcnQgZXhjZXB0aW9uX3RvX3VuaWNvZGUKKworaW1wb3J0IHJlCisKK3RrdG1ncl9zY2hlbWEgPSBbCisgICAgVGFibGUoJ3JldjJ0aWNrZXQnLCBrZXk9J3JldicpWyAgICAgICAgICMgbWFwIHJldi0+dGlja2V0CisgICAgICAgIENvbHVtbigncmV2JywgdHlwZT0naW50JyksICAgICAgICAgICMgY2hhbmdlc2V0IGlkCisgICAgICAgIENvbHVtbigndGlja2V0JywgdHlwZT0naW50JyksICAgICAgICMgdGlja2V0ICMKKyAgICAgICAgSW5kZXgoWyd0aWNrZXQnXSldLCAgICAgICAgICAgICAgICAgIyBpbmRleCBieSB0aWNrZXQKK10KKworY2xhc3MgVGlja2V0TWFuYWdlcihDb21wb25lbnQpOgorICAgIGltcGxlbWVudHMoSUVudmlyb25tZW50U2V0dXBQYXJ0aWNpcGFudCkKKyMgICAgaW1wbGVtZW50cyhJRW52aXJvbm1lbnRTZXR1cFBhcnRpY2lwYW50LCBJUmVwb3NpdG9yeU9ic2VydmVyKQorCisgICAgdGlja2V0X3BhdHRlcm4gPSBPcHRpb24oJ2ljdWNvZGV0b29scycsICd0aWNrZXRfcGF0dGVybicsICdedGlja2V0OihcZCspJywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiQSByZWdleCBtYXRjaGluZyB0aGUgY29tbWl0IG1lc3NhZ2VzLiBHcm91cCAxIG11c3QgcmV0dXJuIGEgbnVtYmVyLiIiIikKKyAgICAKKyAgICBkZWYgaWN1X3RrdG1ncihzZWxmKToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAga25vd25feW91bmdlc3QgPSAtMQorCisgICAgZGVmIGVudmlyb25tZW50X2NyZWF0ZWQoc2VsZik6CisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIGNvbm5lY3RvciwgXyA9IERhdGFiYXNlTWFuYWdlcihzZWxmLmVudikuX2dldF9jb25uZWN0b3IoKQorICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICBmb3IgdGFibGUgaW4gdGt0bWdyX3NjaGVtYToKKyAgICAgICAgICAgIGZvciBzdG10IGluIGNvbm5lY3Rvci50b19zcWwodGFibGUpOgorICAgICAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKHN0bXQpCisKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIklOU0VSVCBJTlRPIHN5c3RlbSAobmFtZSx2YWx1ZSkgIgorICAgICAgICAgICAgICAgICAgICAgICAiVkFMVUVTICgnaWN1X3RrdG1ncicsJXMpIiwgKHNlbGYuaWN1X3RrdG1ncigpLCkpCisgICAgICAgIGRiLmNvbW1pdCgpCisgICAgICAgIHNlbGYubG9nLmluZm8oJ0RhdGFiYXNlIHVwZGF0ZTogaWN1X3RrdG1nciB0YWJsZXMgdmVyc2lvbiAlZCAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmljdV90a3RtZ3IoKSkKKyAgICAgICAgcHJpbnQgJ2ljdWNvZGV0b29scy50aWNrZXRtZ3I6IE5vdGUsIGZpcnN0IHJldmlldyB3aWxsIHRha2UgYSB3aGlsZS5cbicKKyAgICAKKyAgICBkZWYgeW91bmdlc3RfcmV2KHNlbGYsZGIpOgorICAgICAgICBpZiAoc2VsZi5rbm93bl95b3VuZ2VzdCA8IDApOgorICAgICAgICAgICAgI3ByaW50KCdEaWQgbm90IGtub3cgeW91bmdlc3QgdmFsdWUuJykKKyAgICAgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gc3lzdGVtIFdIRVJFIG5hbWU9J2ljdV90a3RtZ3JfeW91bmdlc3QnIikKKyAgICAgICAgICAgIHJvdyA9IGN1cnNvci5mZXRjaG9uZSgpCisgICAgICAgICAgICBpZiBub3Qgcm93OgorICAgICAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKCJJTlNFUlQgSU5UTyBzeXN0ZW0gKG5hbWUsdmFsdWUpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkFMVUVTICgnaWN1X3RrdG1ncl95b3VuZ2VzdCcsJy0xJykiKQorICAgICAgICAgICAgICAgIGRiLmNvbW1pdCgpCisgICAgICAgICAgICAgICAgc2VsZi5rbm93bl95b3VuZ2VzdCA9IC0yCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGtub3duX3lvdW5nZXN0ID0gaW50KHJvd1swXSkKKyAgICAgICAgICAgICAgICBzZWxmLmtub3duX3lvdW5nZXN0ID0ga25vd25feW91bmdlc3QKKyAgICAgICAgcmV0dXJuIHNlbGYua25vd25feW91bmdlc3QKKyAgICAgICAgCisgICAgZGVmIGNoZWNrX3N5bmMoc2VsZiwgbG9nLCBkYiwgcmVwb3MpOgorICAgICAgICBvdXJZb3VuZ2VzdCA9IHNlbGYueW91bmdlc3RfcmV2KGRiKQorICAgICAgICB0aGVpcllvdW5nZXN0ID0gcmVwb3MuZ2V0X3lvdW5nZXN0X3JldigpCisgICAgICAgICNsb2cuaW5mbygiVEtUOiBjaGVja19zeW5jICVkLyVkIiAlIChvdXJZb3VuZ2VzdCx0aGVpcllvdW5nZXN0KSkKKyAgICAgICAgaWYob3VyWW91bmdlc3QgPD0gdGhlaXJZb3VuZ2VzdCk6CisgICAgICAgICAgICBzZWxmLnJlc3luYyhsb2csIGRiLCByZXBvcywgb3VyWW91bmdlc3QsIHRoZWlyWW91bmdlc3QpCisgICAgCisgICAgZGVmIGVudmlyb25tZW50X25lZWRzX3VwZ3JhZGUoc2VsZiwgZGIpOgorICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gc3lzdGVtIFdIRVJFIG5hbWU9J2ljdV90a3RtZ3InIikKKyAgICAgICAgcm93ID0gY3Vyc29yLmZldGNob25lKCkKKyAgICAgICAgaWYgbm90IHJvdyBvciBpbnQocm93WzBdKSA8IHNlbGYuaWN1X3RrdG1ncigpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB1cGdyYWRlX2Vudmlyb25tZW50KHNlbGYsIGRiKToKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NIHN5c3RlbSBXSEVSRSBuYW1lPSdpY3VfdGt0bWdyJyIpCisgICAgICAgIHJvdyA9IGN1cnNvci5mZXRjaG9uZSgpCisgICAgICAgIGlmIG5vdCByb3c6CisgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50X2NyZWF0ZWQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygnRG8gbm90IGtub3cgaG93IHRvIHVwZ3JhZGUgaWN1dHJheGN0bl90aWNrZXRtZ3IgdGFibGVzIHRvICVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pY3VfdGt0bWdyKCkpCisJY3Vyc29yLmNsb3NlKCkKKworICAgIGRlZiByZXN5bmMoc2VsZiwgbG9nLCBkYiwgcmVwb3MsIG91cllvdW5nZXN0LCB0aGVpcllvdW5nZXN0KToKKyAgICAgICAgc2VsZi5sb2cuaW5mbygncmVzeW5jOiBvdXJZb3VuZ2VzdD0lZCB0aGVpcllvdW5nZXN0PSVkJyAlIChvdXJZb3VuZ2VzdCwgdGhlaXJZb3VuZ2VzdCkpCisgICAgICAgIGlmIChvdXJZb3VuZ2VzdCA8IDApOgorICAgICAgICAgICAgIyBzdGFydCBhdCByZXYgMQorICAgICAgICAgICAgb3VyWW91bmdlc3QgPSAxCisgICAgICAgIAorICAgICAgICAjc2VsZi50aWNrZXRfcGF0dGVybiA9IHNlbGYuZW52LmNvbmZpZy5nZXQoJ2ljdWNvZGV0b29scycsICd0aWNrZXRfcGF0dGVybicsICdeY2xkcmJ1ZyAoXGQrKTonKQorCisgICAgICAgICMgICAgICAgIGxvZy5pbmZvKCJQYXQ6ICVzIiAlIChzZWxmLnRpY2tldF9wYXR0ZXJuKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50aWNrZXRfbWF0Y2ggPSByZS5jb21waWxlKHNlbGYudGlja2V0X3BhdHRlcm4pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuZW52LmNvbmZpZy5nZXQoJ2ljdWNvZGV0b29scycsICd0aWNrZXRfcGF0dGVybicsICdOb25lRm91bmQnKQorICAgICAgICAgICAgcmFpc2UgVHJhY0Vycm9yKCdDb3VsZCBub3QgY29tcGlsZSBpY3Vjb2RldG9vbHMudGlja2V0X3BhdHRlcm49LyVzLyBidXQgLyVzLzogJXMnICUgKHNlbGYudGlja2V0X3BhdHRlcm4sIGZvdW5kLCBleGNlcHRpb25fdG9fdW5pY29kZShlLCB0cmFjZWJhY2s9VHJ1ZSkpKQorCisjICAgICAgICBzZWxmLnRpY2tldF9tYXRjaCA9IHJlLmNvbXBpbGUoc2VsZi50aWNrZXRfcGF0dGVybi5nZXQoKSkKKyMgICAgICAgIHNlbGYudGlja2V0X21hdGNoID0gcmUuY29tcGlsZSgnLionKQorICAgICAgICBmb3IgaSBpbiByYW5nZShvdXJZb3VuZ2VzdCwgdGhlaXJZb3VuZ2VzdCsxKToKKyAgICAgICAgICAgICNsb2cud2FybmluZygnc3luY2luZzogJWQgWyVkLyVkKzFdJywgaSwgdGhlaXJZb3VuZ2VzdCkKKyAgICAgICAgICAgIGNzZXQgPSByZXBvcy5nZXRfY2hhbmdlc2V0KGkpCisgICAgICAgICAgICBzZWxmLnJldmlzaW9uX2NoYW5nZWQobG9nLCBjc2V0LCBpLCBkYi5jdXJzb3IoKSkKKyAgICAgICAgZGIuY29tbWl0KCkKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCk7CisgICAgICAgIGN1cnNvci5leGVjdXRlKCJ1cGRhdGUgc3lzdGVtIHNldCB2YWx1ZT0nJXMnIHdoZXJlIG5hbWU9J2ljdV90a3RtZ3JfeW91bmdlc3QnIiAlICh0aGVpcllvdW5nZXN0KSkKKyAgICAgICAgZGIuY29tbWl0KCkKKyAgICAgICAgI2xvZy53YXJuKCJzZWxmLmtub3duX3lvdW5nZXN0IHdhcyAlZCBbJWQvJWRdIiAlIChzZWxmLmtub3duX3lvdW5nZXN0LG91cllvdW5nZXN0LHRoZWlyWW91bmdlc3QpKSAKKyAgICAgICAgIyB1cGRhdGUga25vd24geW91bmdlc3QuCisgICAgICAgIHNlbGYua25vd25feW91bmdlc3QgPSB0aGVpcllvdW5nZXN0CisgICAgICAgICNsb2cud2Fybigic2VsZi5rbm93bl95b3VuZ2VzdCBub3cgJWQgWyVkLyVkXSIgJSAoc2VsZi5rbm93bl95b3VuZ2VzdCxvdXJZb3VuZ2VzdCx0aGVpcllvdW5nZXN0KSkgCisgICAgICAgIHJldHVybgorCisgICAgIyBJUmVwb3NpdG9yeU9ic2VydmVyIG1ldGhvZHMKKyAgICBkZWYgcmV2aXNpb25fY2hhbmdlZChzZWxmLCBsb2csIGNzZXQsIG5leHRfeW91bmdlc3QsIGN1cnNvcik6CisgICAgICAgICMgc3luYyB0aGUgJ3JldjJ0aWNrZXQnIHRhYmxlCisgICAgICAgIG1lc3NhZ2UgPSBjc2V0Lm1lc3NhZ2Ugb3IgJy0tJworICAgICAgICAjIGNhbiB3ZSBsb2FkIGEgdGlja2V0IGZyb20gaXQ/ICAgInRpY2tldDoxMjM0OiBNZXNzYWdlIgorICAgICAgICByZXMgPSBzZWxmLnRpY2tldF9tYXRjaC5tYXRjaChtZXNzYWdlKQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICB0aWNrbmFtZSA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGludChyZXMuZ3JvdXAoMSkpICMgc2hvdWxkIGJlIGludAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBsb2cud2FybmluZygnUmV2aXNpb24gWyVzXSBoYWQgdW5wYXJzZWFibGUgdGlja2V0IG51bWJlciBbJXNdOiBbJXNdJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV4dF95b3VuZ2VzdCwgdGlja25hbWUsIGUpKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgdHJ5OgorCQkjbG9nLndhcm5pbmcoJ3Ilcz0jJXMnICUgKHN0cihuZXh0X3lvdW5nZXN0KSwgdGlja25hbWUpKQorICAgICAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKCJJTlNFUlQgT1IgSUdOT1JFIElOVE8gcmV2MnRpY2tldCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAocmV2LHRpY2tldCkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWQUxVRVMgKCVzLCVzKSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHIobmV4dF95b3VuZ2VzdCksIHRpY2tuYW1lKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6ICMgKmFub3RoZXIqIDEuMS4gcmVzeW5jIGF0dGVtcHQgd29uIAorICAgICAgICAgICAgICAgIGxvZy53YXJuaW5nKCdyZXYydGlja2V0ICVzIGNvdWxkIG5vdCBjYWNoZTogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0X3lvdW5nZXN0LCBlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2cud2FybmluZygnUmV2aXNpb24gJXMgaGFkIHVubWF0Y2hlZCBtZXNzYWdlICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV4dF95b3VuZ2VzdCwgY3NldC5tZXNzYWdlKSkKKyAgICAKKyAgICBkZWYgcmVwb3NpdG9yeV9yZXN5bmMoc2VsZiwgY3Vyc29yKToKKyAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIkRFTEVURSBGUk9NIHJldjJ0aWNrZXQiKTsKKyAgICAgICAgCisgICAgZGVmIHRrdDJyZXZzKHNlbGYsIGxvZywgZGIsIHJlcG9zLCByZXEsIHRpY2tldCk6CisgICAgICAgICIiIkdpdmVuIGEgdGlja2V0LCByZXR1cm4gYSBsaXN0IG9mIHJldnMuCisgICAgICAgICIiIgorICAgICAgICAKKyAgICAgICAgc2VsZi5jaGVja19zeW5jKGxvZywgZGIsIHJlcG9zKQorICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgic2VsZWN0IHJ0LnJldiBmcm9tIHJldjJ0aWNrZXQgYXMgcnQgd2hlcmUgcnQudGlja2V0ID0gJWQgb3JkZXIgYnkgcnQucmV2IiAlIGludCh0aWNrZXQpKQorICAgICAgICByZXZzID0gW10KKyAgICAgICAgZm9yIHJldiwgaW4gY3Vyc29yOgorICAgICAgICAgICAgcmV2ID0gaW50KHJldikKKyAgICAgICAgICAgIHJldnMuYXBwZW5kKHJldikKKwljdXJzb3IuY2xvc2UoKQorICAgICAgICByZXR1cm4gcmV2cwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9pY3Vjb2RldG9vbHMvdGt0bGlzdC5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RrdGxpc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTdkZTQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvaWN1Y29kZXRvb2xzL3RrdGxpc3QucHkKQEAgLTAsMCArMSwxNzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworaW1wb3J0IHJlCisKK2ltcG9ydCBzeXMKKworZnJvbSB0cmFjLmNvcmUgaW1wb3J0ICoKK2Zyb20gdHJhYy51dGlsIGltcG9ydCBNYXJrdXAKK2Zyb20gdHJhYy53ZWIgaW1wb3J0IElSZXF1ZXN0SGFuZGxlcgorZnJvbSB0cmFjLndlYi5jaHJvbWUgaW1wb3J0IGFkZF9zdHlsZXNoZWV0LCBJTmF2aWdhdGlvbkNvbnRyaWJ1dG9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVRlbXBsYXRlUHJvdmlkZXIKK2Zyb20gdHJhYy53ZWIuaHJlZiBpbXBvcnQgSHJlZgorI2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC53ZWJfdWkuY2hhbmdlc2V0IGltcG9ydCBJQ2hhbmdlc2V0UmFuZ2VMaW5rCitmcm9tIHRyYWMud2lraSBpbXBvcnQgd2lraV90b19odG1sLCB3aWtpX3RvX29uZWxpbmVyLCBJV2lraVN5bnRheFByb3ZpZGVyLCBcCisgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0dGVyCitmcm9tIHRyYWMudGlja2V0IGltcG9ydCBUaWNrZXQKKworCisKK2NsYXNzIFRpY2tldGxpc3RNb2R1bGUoQ29tcG9uZW50KToKKworICAgIGltcGxlbWVudHMoSVJlcXVlc3RIYW5kbGVyKQorIyAgICBpbXBsZW1lbnRzKElSZXF1ZXN0SGFuZGxlcixJQ2hhbmdlc2V0UmFuZ2VMaW5rKQorCisgICAgZGVmIHJldmlzaW9uX3JhbmdlX2xpbmsoc2VsZiwgcmVxLCBiYXNlLCBzdGFydCwgZW5kKToKKyAgICAgICAgcmV0dXJuICgnVGlja2V0IExpc3QnLCByZXEuaHJlZigndGt0bGlzdCcsb2xkX3BhdGg9YmFzZSxuZXdfcGF0aD1iYXNlLG9sZD1zdGFydCxuZXc9ZW5kKSkKKworICAgIF9yZXF1ZXN0X3JlID0gcmUuY29tcGlsZShyIi90a3RsaXN0KD86LyhbXi9dKykpPygvLiopPyQiKQorCisgICAgZGVmIG1hdGNoX3JlcXVlc3Qoc2VsZiwgcmVxKToKKyAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChzZWxmLl9yZXF1ZXN0X3JlLCByZXEucGF0aF9pbmZvKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcSk6CisgICAgICAgICNvaywgd2hhdCBhcmUgd2UgYWJvdXQuCisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIHRpY2tldGxpc3QgPSB7fSAgIyBkaWN0IG9mIHRpY2tldC0+Pz8/CisgICAgICAgIHJldmxpc3QgPSB7fSAjIGRpY3Qgb2YgcmV2aXNpb24tPgorICAgICAgICByZXBvcyA9IHNlbGYuZW52LmdldF9yZXBvc2l0b3J5KHJlcS5hdXRobmFtZSkKKworICAgICAgICBpZiBub3QgcmVxLnBlcm0uaGFzX3Blcm1pc3Npb24oJ1RJQ0tFVF9NT0RJRlknKToKKyAgICAgICAgICAgIHJldHVybiByZXEucmVkaXJlY3QocmVxLmhyZWYuYnJvd3NlcigpKQorCisgICAgICAgICMgc2hvcnRjdXQgLSBpZiAicmV2cyIgaXMgc2V0LCBqdXN0IHVzZSB0aGF0CisgICAgICAgIHJldnMgPSByZXEuYXJncy5nZXQoJ3JldnMnKQorICAgICAgICBpZiByZXZzIGFuZCBsZW4ocmV2cyk+MDoKKyAgICAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnY3NzL2ljdXh0bi5jc3MnKQorICAgICAgICAgICByZXEuaGRmWyd0aXgucmV2cyddID0gcmV2cworICAgICAgICAgICBpdGVtcyA9IHJldnMuc3BsaXQoKQorICAgICAgICAgICBvdXRzdHIgPSAnMT0wICcKKyAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICAgICByZXYgPSBpbnQoaXRlbSkgIyBtYXkgZmFpbAorICAgICAgICAgICAgICAgb3V0c3RyID0gJ3J0LnJldj0lZCclKHJldikKKyAgICAgICAgICAgcmVxLmhkZlsnaXNfZGN1dCddPTEKKyAgICAgICAgICAgcmVxLmhkZlsndGl4LnNxbCddID0gb3V0c3RyICAKKyAgICAgICAgICAgIyB0ZXN0IC0gZ2V0IHJlbGV2YW50IHJldnMKKyAgICMgICAgICAgIHByaW50ICJvdGltZT0lcywgbnRpbWU9JXMiJSh0eXBlKG90aW1lKSx0eXBlKG50aW1lKSkKKyAgICAgICAgICAgI2N1cnNvci5leGVjdXRlKCJzZWxlY3QgZGlzdGluY3QgdC5pZCx0LnN1bW1hcnkgZnJvbSB0aWNrZXQgYXMgdCxyZXZpc2lvbiBhcyByLCByZXYydGlja2V0IGFzIHJ0ICIKKyAgICAgICAgICAgIyAgICAgICAgICAgICAgICIgd2hlcmUgdC5pZCA9IHJ0LnRpY2tldCBhbmQgKCVzKSBvcmRlciBieSB0LmlkIiUob3V0c3RyKSkKKyAgICAgICAgICAgYWxsc3FsID0gInNlbGVjdCBkaXN0aW5jdCB0aWNrZXQgZnJvbSByZXYydGlja2V0IGFzIHJ0IHdoZXJlICVzIG9yZGVyIGJ5IHJ0LnRpY2tldCIlKG91dHN0cikKKyAgICAgICAgICAgYWxsc3FsID0gInNlbGVjdCB0aWNrZXQgZnJvbSByZXYydGlja2V0IHdoZXJlIHJldj0lcyBvcmRlciBieSB0aWNrZXQiCisgICAgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgICAgIyBjdXJzb3IuZXhlY3V0ZSgic2VsZWN0IHRpY2tldCBmcm9tIHJldjJ0aWNrZXQgd2hlcmUgcmV2PSVzIG9yZGVyIGJ5IHRpY2tldCIsKCIyMjkxMyIsKSkKKyAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCBydC5yZXYgZnJvbSByZXYydGlja2V0IGFzIHJ0IHdoZXJlIHJ0LnRpY2tldCA9ICVkIG9yZGVyIGJ5IHJ0LnJldiIgJSBpbnQoNjAxMCkpCisgICAgICAgICAgIHRpY2tldCA9IDAKKyAgICAgICAgICAgcmVxLmhkZlsndGl4LnNxbCddID0gYWxsc3FsICAKKyAgICAgICAgICAgcmVxLmhkZlsndGl4LnNxbCddPSJ6ZXJvIgorICAgICAgICAgICBmb3IgdGt0IGluIGN1cnNvcjoKKyAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5zcWwnXT10a3QKKyAgICAgICAgICAgICAgIHN1bW0gPSAiIjsKKyAgICAgICAgICAgICAgICNzeXMuc3RkZXJyLndyaXRlKCIgdGt0ICVzIHN1bW0gJXMgZnJvbSAoZC1kKSIgJSAodGt0LHN1bW0pKQorICAgICAgICAgICAgICAgdGlja2V0ID0gdGlja2V0ICsgMQorICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudCcgJSB0aWNrZXRdID0gc3VtbQorICAgICAgICAgICAgICAgICAgICNyZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnRodG1sJyAlIHRpY2tldF0gPSB3aWtpX3RvX29uZWxpbmVyKCBzdW1tLCBzZWxmLmVudiwgZGIsIHNob3J0ZW49VHJ1ZSApCisgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGl4LnNxbCddPWUKKyAgICAgICAgICAgICAgICAgICAjcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50aHRtbCcgJSB0aWNrZXRdID0gJycKKyAgICAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnQnICUgdGlja2V0XSA9ICcnCisgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLm51bWJlcicgJSB0aWNrZXRdID0gdGt0CisgICAgICAgICAgICAgICAjYWEgPSBNYXJrdXAoIjxhIGNsYXNzPVwibmV3IHRpY2tldFwiIGhyZWY9XCIlc1wiIHRpdGxlPVwiVGlja2V0IHggKG5ldylcIj4jJXM8L2E+IiUocmVxLmhyZWYudGlja2V0KHRrdCksdGt0KSkKKyAgICAgICAgICAgICAgICNyZXEuaGRmWyd0aWNrZXRzLiVkLmh0bWwnICUgdGlja2V0XSA9IGFhCisgICAgICAgICAgICMgc2V0IFJERiBoZXJlCisgICAgICAgICAgIHJldHVybiAndGt0cmV2cy5jcycsIGNvbnRlbnRfdHlwZQorCisgICAgICAgIG5ld19wYXRoID0gcmVxLmFyZ3MuZ2V0KCduZXdfcGF0aCcpCisgICAgICAgIG5ld19yZXYgPSByZXEuYXJncy5nZXQoJ25ldycpCisgICAgICAgIG9sZF9wYXRoID0gcmVxLmFyZ3MuZ2V0KCdvbGRfcGF0aCcpCisgICAgICAgIG9sZF9yZXYgPSByZXEuYXJncy5nZXQoJ29sZCcpCisKKyAgICAgICAgbmV3X3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChuZXdfcGF0aCkKKyAgICAgICAgbmV3X3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYobmV3X3JldikKKyAgICAgICAgb2xkX3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChvbGRfcGF0aCkKKyAgICAgICAgb2xkX3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYob2xkX3JldikKKworCisgICAgICAgIG9sZF9yZXYgPSBpbnQob2xkX3JldikKKyAgICAgICAgbmV3X3JldiA9IGludChuZXdfcmV2KQorICAgICAgICAKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0LmRpZmZfaHJlZiddID0gcmVxLmhyZWYoJ2NoYW5nZXNldCcsb2xkX3BhdGg9b2xkX3BhdGgsbmV3PW5ld19yZXYsbmV3X3BhdGg9bmV3X3BhdGgsb2xkPW9sZF9yZXYpCisKKyAgICAgICAgcmVxLmhkZlsnaXNfZGN1dCddPTEKKyAgICAgICAgCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5vbGRfcmV2J10gPSBvbGRfcmV2CisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5uZXdfcmV2J10gPSBuZXdfcmV2CisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5vbGRfcGF0aCddID0gb2xkX3BhdGgKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm5ld19wYXRoJ10gPSBuZXdfcGF0aAorICAgICAgICBjb250ZW50X3R5cGUgPSAidGV4dC9odG1sIgorICAgICAgICBhZGRfc3R5bGVzaGVldChyZXEsICdjc3MvaWN1eHRuLmNzcycpCisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgCisgICAgICAgICMgZmlyc3QsIGdldCByZWxldmFudCBjaGFuZ2VzLgorICAgICAgICByZXEuaGRmWyd0YXJnZXRfcGF0aCddID0gJy4nOworICAgICAgICAjIG9rYXkuIG1hbnVhbGx5IHRyb21wIHRocm91Z2ggJ2VtCisgICAgICAgIG9zZXQgPSByZXBvcy5nZXRfY2hhbmdlc2V0KG9sZF9yZXYpOworICAgICAgICBuc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChuZXdfcmV2KTsKKyAgICAgICAgb3RpbWUgPSBpbnQob3NldC5kYXRlKQorICAgICAgICBudGltZSA9IGludChuc2V0LmRhdGUpCisgICAgICAgIAorICAgICAgICBub3JtX3RyPSJzdHlsZT0nYm9yZGVyOiAxcHggZGFzaGVkIGdyZWVuOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0ZDOyciCisgICAgICAgIGNsb3NlZF90cj0ic3R5bGU9J2NvbG9yOiAjNjY2OyciCisgICAgICAgIG5vcmV2X3RyPSJzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojRkREOyBib3JkZXI6IDFweCBzb2xpZCAjRjk5OyBmb250LXdlaWdodDogYm9sZDsnIgorCisgICAgICAgIHJlcS5oZGZbJ3NhbXBsZS5ub3JtLnRyJ10gPSBub3JtX3RyCisgICAgICAgIHJlcS5oZGZbJ3NhbXBsZS5jbG9zZWQudHInXSA9IGNsb3NlZF90cgorICAgICAgICByZXEuaGRmWydzYW1wbGUubm9yZXYudHInXSA9IG5vcmV2X3RyCisgICAgICAgIAorIyAgICAgICAgcHJpbnQgIiBzZWFyY2hpbmcgaW4gICglcy0lcykiICUgKG90aW1lLCBudGltZSkKKworICAgICAgICAjIHRlc3QgLSBnZXQgcmVsZXZhbnQgcmV2cworICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorIyAgICAgICAgcHJpbnQgIm90aW1lPSVzLCBudGltZT0lcyIlKHR5cGUob3RpbWUpLHR5cGUobnRpbWUpKQorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgic2VsZWN0IGRpc3RpbmN0IHQuaWQsdC5zdW1tYXJ5LHQub3duZXIsIHQubWlsZXN0b25lLCB0LnN0YXR1cyAiCisgICAgICAgICAgICAgICAgICAgICAgICIgLCBjLnZhbHVlICIgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAiIGZyb20gdGlja2V0IGFzIHQscmV2aXNpb24gYXMgciwgcmV2MnRpY2tldCBhcyBydCAiCisgICAgICAgICAgICAgICAgICAgICAgICIgbGVmdCBqb2luIHRpY2tldF9jdXN0b20gYXMgYyAiCisgICAgICAgICAgICAgICAgICAgICAgICIgb24gICggYy5uYW1lID0gJ3JldncnIEFORCBjLnRpY2tldCA9IHQuaWQgKSAiCisjICAgICAgICAgICAgICAgICAgICAgICAiICwgdGlja2V0X2N1c3RvbSBhcyBjICIKKyAgICAgICAgICAgICAgICAgICAgICAgIiB3aGVyZSB0LmlkID0gcnQudGlja2V0IGFuZCBydC5yZXYgPSByLnJldiBhbmQgci50aW1lID4gJXMgYW5kIHIudGltZSA8PSAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICJhbmQgZXhpc3RzICggc2VsZWN0IG5jLnJldiBmcm9tIG5vZGVfY2hhbmdlIGFzIG5jIHdoZXJlIG5jLnJldj1yLnJldiBhbmQgbmMucGF0aCBsaWtlICVzICkgIgorICAgICAgICAgICAgICAgICAgICAgICAib3JkZXIgYnkgdC5pZCIsIChzdHIob3RpbWUpLCBzdHIobnRpbWUpLCAob2xkX3BhdGggKyAiJSIpKSkKKyAgICAgICAgdGlja2V0ID0gMAorICAgICAgICBmb3IgdGt0LHN1bW0sb3ducixtaWxlc3RvbmUsc3RhdHVzLCByZXZ3IGluIGN1cnNvcjoKKyMgICAgICAgICAgICBwcmludCAiIHRrdCAlcyBzdW1tICVzIGZyb20gKCVkLSVkKSIgJSAodGt0LHN1bW0sIG90aW1lLCBudGltZSkKKyAgICAgICAgICAgIHRpY2tldCA9IHRpY2tldCArIDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnQnICUgdGlja2V0XSA9IHN1bW0KKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnRodG1sJyAlIHRpY2tldF0gPSB3aWtpX3RvX29uZWxpbmVyKCBzdW1tLCBzZWxmLmVudiwgZGIsIHNob3J0ZW49VHJ1ZSApCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50aHRtbCcgJSB0aWNrZXRdID0gJycKKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnQnICUgdGlja2V0XSA9ICcnCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLm51bWJlcicgJSB0aWNrZXRdID0gdGt0CisgICAgICAgICAgICBhYSA9IE1hcmt1cCgiPGEgY2xhc3M9XCJuZXcgdGlja2V0XCIgaHJlZj1cIiVzXCIgdGl0bGU9XCJUaWNrZXQgeCAobmV3KVwiPiMlczwvYT4iJShyZXEuaHJlZi50aWNrZXQodGt0KSx0a3QpKQorICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5odG1sJyAlIHRpY2tldF0gPSBhYQorICAgICAgICAgICAgYWEgPSBNYXJrdXAoIjxhIGNsYXNzPVwibmV3IHRpY2tldFwiIGhyZWY9XCIlc1wiIHRpdGxlPVwiVGlja2V0IHggKG5ldylcIj4jJXM8L2E+IiUocmVxLmhyZWYudGlja2V0KHRrdCksdGt0KSkKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQub3duZXInICUgdGlja2V0XSA9IG93bnIKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQubWlsZXN0b25lJyAlIHRpY2tldF0gPSB3aWtpX3RvX29uZWxpbmVyKCAibWlsZXN0b25lOiVzIiVtaWxlc3RvbmUgLCBzZWxmLmVudiwgZGIsIHNob3J0ZW49RmFsc2UgKQorICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5yZXZpZXdlcicgJSB0aWNrZXRdID0gcmV2dworICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5zdGF0dXNodG1sJyAlIHRpY2tldF0gPSB3aWtpX3RvX29uZWxpbmVyKCAiIyVzIiUodGt0KSwgc2VsZi5lbnYsIGRiLCBzaG9ydGVuPUZhbHNlICkKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuaHRtbCcgJSB0aWNrZXRdID0gYWEKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQudHInICUgdGlja2V0XSA9IG5vcm1fdHIKKyAgICAgICAgICAgIGlmIHN0YXR1cyBhbmQgc3RhdHVzLnN0YXJ0c3dpdGgoJ2Nsb3NlZCcpOgorICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQudHInICUgdGlja2V0XSA9IGNsb3NlZF90cgorICAgICAgICAgICAgaWYgKCBub3QgcmV2dyApIG9yIGxlbihyZXZ3KTwxOgorICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQudHInICUgdGlja2V0XSA9IG5vcmV2X3RyCisgICAgICAgIAorICAgICAgICByZXR1cm4gJ3RrdGxpc3QuY3MnLCBjb250ZW50X3R5cGUKKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9saWNlbnNlLmh0bWwgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUwMjUyCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSw1MSBAQAorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiPjwvbWV0YT4KKzx0aXRsZT5JQ1UgTGljZW5zZSAtIElDVSAxLjguMSBhbmQgbGF0ZXI8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBCR0NPTE9SPSIjZmZmZmZmIj4KKzxoMj5JQ1UgTGljZW5zZSAtIElDVSAxLjguMSBhbmQgbGF0ZXI8L2gyPgorCis8cD5DT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFPC9wPgorCis8cD4KK0NvcHlyaWdodCAoYykgMTk5NS0yMDEwIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycworPC9wPgorPHA+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorPC9wPgorPHA+CitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKK3RvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK3RoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zCit0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKzwvcD4KKzxwPgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgCitJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSE9MREVSUyBJTkNMVURFRCBJTiBUSElTIE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK09SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCis8L3A+Cis8cD4KK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbgordGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKzwvcD4KKworPGhyPgorPHA+PHNtYWxsPgorQWxsIHRyYWRlbWFya3MgYW5kIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBtZW50aW9uZWQgaGVyZWluIGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuCis8L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvcmVhZG1lLnR4dCBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQ5ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMS9yZWFkbWUudHh0CkBAIC0wLDAgKzEsNzQgQEAKK0lDVSBDb2RlIFRvb2xzIHBsdWdpbgorCitDb3B5cmlnaHQgKEMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitTZWUgbGljZW5zZS5odG1sIGZvciB0aGUgbGljZW5zZSBmaWxlLiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUKK0lDVSBwcm9qZWN0IGFuZCBpcyB1bmRlciB0aGUgc2FtZSBsaWNlbnNlLgorCitSZXF1aXJlbWVudHM6CisJVHJhYyAoMC4xMSBvciAwLjEyKz8pCisJUmVwb3NpdG9yeQorCitJbnN0YWxsaW5nOgorCTEuIGluc3RhbGwgdGhlIHBsdWdpbiAtIGF0IGxlYXN0IHRoZSB0aWNrZXRtYW5hZ2VyIGFuZCByZXZpZXcgcG9ydGlvbi4KKworICAgICAgICAgYS4gVGhlcmUgaXMgbm8gc291cmNlIHJlbGVhc2UgYXQgdGhpcyB0aW1lOiBJIHJlY29tbWVuZAorICAgICAgICAgICAgIHRoYXQgeW91IGNoZWNrIG91dCB0aGlzIGNvZGUgd2l0aCBzdm4KKyAgICAgICAgICAgICBhbmQgaW4gdGhpcyBkaXJlY3RvcnksIHJ1bjogCisgICAgICAgICAgICAgICAgInB5dGhvbiBzZXR1cC5weSBkZXZlbG9wIgorCQorCSBiLiBJbiB0cmFjLmluaSB1bmRlciAnW2NvbXBvbmVudHNdJyBhZGQ6CisJCWljdWNvZGV0b29scy5yZXZpZXcucmV2aWV3bW9kdWxlID0gZW5hYmxlZAorCQlpY3Vjb2RldG9vbHMudGlja2V0bWdyLnRpY2tldG1hbmFnZXIgPSBlbmFibGVkCisJCisJTk9URTogRENVVCBhbmQgVEtUTElTVCBwYXJ0cyBhcmUgbm90IHdvcmtpbmcgeWV0LiAKKwlEb24ndCBib3RoZXIgdG8gZW5hYmxlIHRoZW0uCisKKwkyLiBpbiB5b3VyIHRyYWMuaW5pIGRlc2NyaWJlIGhvdyB5b3VyIGNoYW5nZXNldHMgZGVzY3JpYmUgYSB0aWNrZXQuIAorCU91ciBjaGFuZ2VzZXRzIGxvb2sgbGlrZSB0aGlzOiAgInRpY2tldDoxMjM0OiBmaXhlZCB0aGUgYnJva2VuIGNvZGUiCisJV2UgdXNlIHRoaXMgcmVnZXg6CisKKwkgICBbaWN1Y29kZXRvb2xzXQorCSAgIHRpY2tldF9wYXR0ZXJuID0gXnRpY2tldDooXGQrKQorCisJMy4geW91IG1heSBuZWVkIHRvIHJ1biB0cmFjLWFkbWluIDxlbnZpcm9ubWVudD4gdXBncmFkZSAKKworCTQuIEdyYW50IHBlcm1pc3Npb24gb2YgSUNVUkVWSUVXX1ZJRVcgdG8gd2hvbWV2ZXIgeW91IHdhbnQgdG8gCisJICAgYmUgYWJsZSB0byByZXZpZXcgdGlja2V0cy4gCisKKwk1LiBOb3csIGFueSB0aWNrZXQgd2lsbCBoYXZlIHNvbWV0aGluZyBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lciB3aGljaCBzYXlzOgorCSAgICAgIk5vIGNvbW1pdHMiIC0gbm8gY29tbWl0cyBhZ2FpbnN0IHRoaXMgdGlja2V0CisKKwkgICAgICJSZXZpZXcgMSBjb21taXRzIiAgLSB0aGVyZSBpcyBvbmx5IG9uZSBjb21taXQuIENsaWNraW5nIHRoaXMgbGluaworCSAgICAgICAgICAgICB3aWxsIGp1c3QgdGFrZSB5b3UgdG8gdGhhdCBzaW5nbGUgY2hhbmdlc2V0LgorCisJICAgICAgIlJldmlldyBuIGNvbW1pdHMiICAtIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGNvbW1pdHMgYWdhaW5zdCB0aGlzCisJICAgICAgICAgICAgIHRpY2tldC4KKworIAorVHJvdWJsZXNob290aW5nOgorCitROiBNeSBjb21taXRzIGFyZW4ndCBiZWluZyBmb3VuZCEKK0E6IENoZWNrIHRoZSBkZWJ1ZyBsb2cuIEl0IHdpbGwgbm90ZSBjb21taXRzIHdpdGggdW5wYXJzZWFibGUgbWVzc2FnZXMKKworUTogSG93IGRvIEkgcmVzeW5jIHRoZSBjb21taXRzPworQTogVW50aWwgd2UgaW1wbGVtZW50IHRyYWMgMC4xMiBjaGFuZ2VzZXQgbGlzdGVuZXJzLCB5b3UgY2FuIGRvIHRoaXM6CisKKyAgICAwLiAgYmFjayB1cCB5b3VyIHBhdGgvdG8vZW52L2RiL3RyYWMuZGIKKworICAgIDEuICQgc3FsaXRlMyAgcGF0aC90by9lbnYvZGIvdHJhYy5kYgorICAgIAorICAgIDIuIHNxbGl0ZT4gZGVsZXRlIGZyb20gcmV2MnRpY2tldDsKKworICAgIDMuIHNxbGl0ZT4gdXBkYXRlIHN5c3RlbSBzZXQgdmFsdWU9Jy0xJyB3aGVyZSBuYW1lPSdpY3VfdGt0bWdyX3lvdW5nZXN0JzsKKworICAgIDQuIHNxbGl0ZT4gIC5xdWl0CisKK05vdyB0aGUgdGlja2V0IG1hbmFnZXIgd2lsbCByZS1zeW5jIHRoZSBmaXJzdCB0aW1lIHlvdSBoaXQgYSB0aWNrZXQuCisKK0ZJTElORyBCVUdTL0ZFQVRVUkUgUkVRVUVTVFM6CisgLSBVc2UgSUNVJ3MgdHJhYyByZXBvc2l0b3J5IGF0IGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjCisgLSBVc2UgdGhlICdpbmZyYXN0cnVjdHVyZScgY29tcG9uZW50IGFuZCBjbGVhcmx5IGlkZW50aWZ5IHRoZSAnSUNVIENvZGUgVG9vbHMKKyAgIGZvciBUcmFjJyB3aGVuIHlvdSBmaWxlIHRoZSBidWcuCisKKworCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLmNmZyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvc2V0dXAuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjNmMmIKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLmNmZwpAQCAtMCwwICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKK1tlZ2dfaW5mb10KK3RhZ19idWlsZCA9IGRldgordGFnX3N2bl9yZXZpc2lvbiA9IHRydWUKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTEvc2V0dXAucHkgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkYmRkMDMKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjExL3NldHVwLnB5CkBAIC0wLDAgKzEsMzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisKK2Zyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAsIGZpbmRfcGFja2FnZXMKKworUEFDS0FHRSA9ICdJY3VDb2RlVG9vbHMnCitWRVJTSU9OID0gJzAuMC4xJworCitzZXR1cCgKKyAgICBuYW1lPVBBQ0tBR0UsIHZlcnNpb249VkVSU0lPTiwKKyAgICBkZXNjcmlwdGlvbj0nTWlzY2VsbGFuZW91cyBJQ1UgRXh0ZW5zaW9ucyB0byBUcmFjJywKKyAgICBhdXRob3I9IlN0ZXZlbiBSLiBMb29taXMiLCBhdXRob3JfZW1haWw9InNybEBpY3UtcHJvamVjdC5vcmciLAorICAgIGxpY2Vuc2U9J0JTRCcsIHVybD0naHR0cDovL2ljdS1wcm9qZWN0Lm9yZycsCisgICAgcGFja2FnZXM9ZmluZF9wYWNrYWdlcyhleGNsdWRlPVsnZXpfc2V0dXAnLCAnKi50ZXN0cyonXSksCisgICAgcGFja2FnZV9kYXRhPXsKKyAgICAgICAgJ2ljdWNvZGV0b29scyc6IFsKKyAgICAgICAgICAgICdodGRvY3MvY3NzLyouY3NzJywKKyAgICAgICAgICAgICd0ZW1wbGF0ZXMvKi5odG1sJywKKyMjICAgICAgICAgICAgJ2h0ZG9jcy9pbWcvKi5wbmcnLAorICAgICAgICAgICAnaHRkb2NzL2pzLyouanMnLAorICAgICAgICBdCisgICAgfSwKKyAgICBlbnRyeV9wb2ludHMgPSB7CisgICAgICAgICd0cmFjLnBsdWdpbnMnOiBbCisgICAgICAgICAgICAnaWN1Y29kZXRvb2xzLnRpY2tldG1nciA9IGljdWNvZGV0b29scy50aWNrZXRtZ3InLAorICAgICAgICAgICAgJ2ljdWNvZGV0b29scy5yZXZpZXcgPSBpY3Vjb2RldG9vbHMucmV2aWV3JywKKyAgICAgICAgICAgICdpY3Vjb2RldG9vbHMudGt0bGlzdCA9IGljdWNvZGV0b29scy50a3RsaXN0JywKKyAgICAgICAgICAgICdpY3Vjb2RldG9vbHMuZGN1dCA9IGljdWNvZGV0b29scy5kY3V0JworICAgICAgICBdCisgICAgfQorKQpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvX19pbml0X18ucHkgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MmQ2NzU2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvX19pbml0X18ucHkKQEAgLTAsMCArMSw1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIworI2Zyb20gaWN1dHJhY3h0bi53ZWJfdWkgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2RjdXQucHkgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9kY3V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiNzQ4NmYKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9kY3V0LnB5CkBAIC0wLDAgKzEsMTUxIEBACisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK2ltcG9ydCByZQorCitmcm9tIHRyYWMuY29yZSBpbXBvcnQgKgorZnJvbSB0cmFjLnV0aWwgaW1wb3J0IE1hcmt1cAorZnJvbSB0cmFjLndlYiBpbXBvcnQgSVJlcXVlc3RIYW5kbGVyCitmcm9tIHRyYWMud2ViLmNocm9tZSBpbXBvcnQgYWRkX3N0eWxlc2hlZXQsIElOYXZpZ2F0aW9uQ29udHJpYnV0b3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVGVtcGxhdGVQcm92aWRlcgorZnJvbSB0cmFjLndlYi5ocmVmIGltcG9ydCBIcmVmCisjZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLndlYl91aS5jaGFuZ2VzZXQgaW1wb3J0IElDaGFuZ2VzZXRSYW5nZUxpbmsKK2Zyb20gdHJhYy53aWtpIGltcG9ydCB3aWtpX3RvX2h0bWwsIHdpa2lfdG9fb25lbGluZXIsIElXaWtpU3ludGF4UHJvdmlkZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZXIKKworCitjbGFzcyBEY3V0TW9kdWxlKENvbXBvbmVudCk6CisKKyAgICBpbXBsZW1lbnRzKElSZXF1ZXN0SGFuZGxlcikKKyMgICAgaW1wbGVtZW50cyhJUmVxdWVzdEhhbmRsZXIsSUNoYW5nZXNldFJhbmdlTGluaykKKworICAgIGRlZiByZXZpc2lvbl9yYW5nZV9saW5rKHNlbGYsIHJlcSwgYmFzZSwgc3RhcnQsIGVuZCk6CisgICAgICAgIHJldHVybiAoJ0RDVVQgSGVscGVyJywgcmVxLmhyZWYoJ2RjdXQnLG9sZF9wYXRoPWJhc2UsbmV3X3BhdGg9YmFzZSxvbGQ9c3RhcnQsbmV3PWVuZCkpCisKKyAgICBfcmVxdWVzdF9yZSA9IHJlLmNvbXBpbGUociIvZGN1dCg/Oi8oW14vXSspKT8oLy4qKT8kIikKKworICAgIGRlZiBtYXRjaF9yZXF1ZXN0KHNlbGYsIHJlcSk6CisgICAgICAgIG1hdGNoID0gcmUubWF0Y2goc2VsZi5fcmVxdWVzdF9yZSwgcmVxLnBhdGhfaW5mbykKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXEpOgorCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgIyBzcmwKKyMgICAgICAgIHNob3dfZmlsZXMgPSBzZWxmLnRpbWVsaW5lX3Nob3dfZmlsZXMKKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgdGlja2V0bGlzdCA9IHt9ICAjIGRpY3Qgb2YgdGlja2V0LT4/Pz8KKyAgICAgICAgcmV2bGlzdCA9IHt9ICMgZGljdCBvZiByZXZpc2lvbi0+CisgICAgICAgICMgd2VsbC4gY2hlY2sgaXQgYWdhaW4sLgorICAgICAgICAgICAgCisgICAgICAgIHNybGRlYnVnPUZhbHNlCisgICAgICAgIAorICAgICAgICByZXBvcyA9IHNlbGYuZW52LmdldF9yZXBvc2l0b3J5KHJlcS5hdXRobmFtZSkKKyAgICAgICAgCisgICAgICAgIG5ld19wYXRoID0gcmVxLmFyZ3MuZ2V0KCduZXdfcGF0aCcpCisgICAgICAgIG5ld19yZXYgPSByZXEuYXJncy5nZXQoJ25ldycpCisgICAgICAgIG9sZF9wYXRoID0gcmVxLmFyZ3MuZ2V0KCdvbGRfcGF0aCcpCisgICAgICAgIG9sZF9yZXYgPSByZXEuYXJncy5nZXQoJ29sZCcpCisKKyAgICAgICAgbmV3X3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChuZXdfcGF0aCkKKyAgICAgICAgbmV3X3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYobmV3X3JldikKKyAgICAgICAgb2xkX3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChvbGRfcGF0aCkKKyAgICAgICAgb2xkX3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYob2xkX3JldikKKworICAgICAgICBvbGRfcmV2ID0gaW50KG9sZF9yZXYpCisgICAgICAgIG5ld19yZXYgPSBpbnQobmV3X3JldikKKyAgICAgICAgCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5kaWZmX2hyZWYnXSA9IHJlcS5ocmVmKCdjaGFuZ2VzZXQnLG9sZF9wYXRoPW9sZF9wYXRoLG5ldz1uZXdfcmV2LG5ld19wYXRoPW5ld19wYXRoLG9sZD1vbGRfcmV2KQorCisgICAgICAgIHJlcS5oZGZbJ2lzX2RjdXQnXT0xCisgICAgICAgIAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3JldiddID0gb2xkX3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQubmV3X3JldiddID0gbmV3X3JldgorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQub2xkX3BhdGgnXSA9IG9sZF9wYXRoCisgICAgICAgIHJlcS5oZGZbJ2NoYW5nZXNldC5uZXdfcGF0aCddID0gbmV3X3BhdGgKKworICAgICAgICBpZiBUcnVlOgorICAgICAgICAgICAgcmVxLmhkZlsndGFyZ2V0X3BhdGgnXSA9ICcuJzsKKyAgICAgICAgICAgICMgb2theS4gbWFudWFsbHkgdHJvbXAgdGhyb3VnaCAnZW0KKyAgICAgICAgICAgIG5yZXYgPSBvbGRfcmV2KzEKKyAgICAgICAgICAgIHdoaWxlIG5yZXYgPD0gbmV3X3JldjoKKyAgICAgICAgICAgICAgICBjaGdzZXQgPSByZXBvcy5nZXRfY2hhbmdlc2V0KG5yZXYpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGNoZ3NldC5tZXNzYWdlIG9yICctLScKKyAgICAgICAgICAgICAgICAjIGNhbiB3ZSBsb2FkIGEgdGlja2V0IGZyb20gaXQ/CisgICAgICAgICAgICAgICAgc3BsaXRzPW1lc3NhZ2Uuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2Uuc3RhcnRzd2l0aCgndGlja2V0OicpIGFuZCBsZW4oc3BsaXRzKT4yOgorICAgICAgICAgICAgICAgICAgICB0aWNrbmFtZT1zcGxpdHNbMV0KKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGlja251bT1pbnQodGlja25hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5yZXYgPSBucmV2KzEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgeWVzLCB3ZSBoYXZlIGEgdGlja2V0ICMKKyAgICAgICAgICAgICAgICAgICAgZmlsZXM9W10KKyAgICAgICAgICAgICAgICAgICAgZm9yIGNoZyBpbiBjaGdzZXQuZ2V0X2NoYW5nZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaGdbMF0uc3RhcnRzd2l0aChvbGRfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChjaGcpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihmaWxlcyk9PTA6CisgICAgICAgICAgICAgICAgICAgICAgICBucmV2ID0gbnJldisxCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAjIG5vIHJlbGV2YW50IGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHRpdGVtPSh0aWNrbnVtLGZpbGVzLGNoZ3NldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGlja251bSBpbiB0aWNrZXRsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0bGlzdFt0aWNrbnVtXS5hcHBlbmQoIHRpdGVtICkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldGxpc3RbdGlja251bV09WyB0aXRlbSBdCisgICAgICAgICAgICAgICAgICAgIHJldmxpc3RbbnJldl09dGl0ZW0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAibWFsZm9ybWVkIHRpY2tldD8gJXMgYXQgJWQiICUgKG1lc3NhZ2UsbnJldikgIyBkb24ndCBrbm93IHRoZSBzeW50YXggZm9yIGRpZS4uCisgICAgICAgICAgICAgICAgbnJldiA9IG5yZXYrMQorICAgICAgICAgICAgaWYgbGVuKHRpY2tldGxpc3QpOgorICAgICAgICAgICAgICAgIHRpY2tldHM9dGlja2V0bGlzdC5rZXlzKCkKKyAgICAgICAgICAgICAgICB0aWNrZXRzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciB0aWNrZXQgaW4gdGlja2V0czoKKyAgICAgICAgICAgICAgICAgICAgYXRpY2tldD10aWNrZXRsaXN0W3RpY2tldF0gICMgKHRpY2tldCxmaWxlcyxjaGcpCisgICAgICAgICAgICAgICAgICAgIGNtdCA9ICd0aWNrZXQ6JWQgLSAlZCByZXZzOiAnICUgKHRpY2tldCxsZW4oYXRpY2tldCkpCisgICAgICAgICAgICAgICAgICAgIGZvciByZXYgaW4gYXRpY2tldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldm4gPSByZXZbMl0ucmV2CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlY291bnQgPSBsZW4ocmV2WzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgJ3IlZCAtICVkIGZpbGVzICgnICUgKHJldm4sZmlsZWNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gcmV2WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArIGZpbGVbMF0gKyAnICcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArICcpICcKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSB3aWtpX3RvX29uZWxpbmVyKGNtdCwgc2VsZi5lbnYsIGRiLCAgc2hvcnRlbj1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5udW1iZXInICUgdGlja2V0XSA9IHRpY2tldAorICAgICAgICAgICAgaWYgbGVuKHJldmxpc3QpOgorICAgICAgICAgICAgICAgIHJldnM9cmV2bGlzdC5rZXlzKCkKKyAgICAgICAgICAgICAgICByZXZzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZvciByZXYgaW4gcmV2czoKKyAgICAgICAgICAgICAgICAgICAgYXJldj1yZXZsaXN0W3Jldl0gICMgKHRpY2tldCxmaWxlcyxjaGcpCisgICAgICAgICAgICAgICAgICAgIGNtdCA9ICdyJWQgdGlja2V0OiVkICcgJSAoYXJldlsyXS5yZXYsYXJldlswXSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWNvdW50ID0gbGVuKGFyZXZbMV0pCisgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArICcgLSAlZCBmaWxlcyAoJyAlIGZpbGVjb3VudAorICAgICAgICAgICAgICAgICAgICBzaG9ydGZpbGVzPScnCisgICAgICAgICAgICAgICAgICAgIGogPSAwCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGFyZXZbMV06CisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLnBhdGgnICUgKHJldixqKV0gPSBmaWxlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLmtpbmQnICUgKHJldixqKV0gPSBmaWxlWzFdCisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLmNoYW5nZScgJSAocmV2LGopXSA9IGZpbGVbMl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0cGF0aD1maWxlWzBdW2xlbihvbGRfcGF0aCkrMTpdCisgICAgICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLmZpbGVzLiVkLnNob3J0cGF0aCcgJSAocmV2LGopXSA9IHNob3J0cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgY210ID0gY210ICsgZmlsZVswXSArICcgJworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRmaWxlcyA9IHNob3J0ZmlsZXMgKyAnICcgKyBzaG9ydHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGo9aisxCisgICAgICAgICAgICAgICAgICAgIGNtdCA9IGNtdCArICcpICcKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5jb21tZW50JyAlIHJldl0gPSB3aWtpX3RvX29uZWxpbmVyKGNtdCwgc2VsZi5lbnYsIGRiLCAgc2hvcnRlbj1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5udW1iZXInICUgcmV2XSA9IHJldgorICAgICAgICAgICAgICAgICAgICByZXEuaGRmWydyZXZzLiVkLnNob3J0ZmlsZXMnICUgcmV2XSA9IHNob3J0ZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsncmV2cy4lZC5iYWNrbnVtYmVyJyAlIHJldl0gPSAocmV2LTEpCisgICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3JldnMuJWQudGlja2V0JyAlIHJldl0gPSBhcmV2WzBdCisKKworIyAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZW1wbGF0ZSwgYmFzZXN0cmluZyk6CisjICAgICAgICAgICAgcmVxLmhkZlsnYWRtaW4ucGFnZV90ZW1wbGF0ZSddID0gdGVtcGxhdGUKKyMgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgcmVxLmhkZlsnYWRtaW4ucGFnZV9jb250ZW50J10gPSBNYXJrdXAodGVtcGxhdGUucmVuZGVyKCkpCisKKyAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnY3NzL2ljdXh0bi5jc3MnKQorICAgICAgICByZXR1cm4gJ2RjdXQuY3MnLCBjb250ZW50X3R5cGUKKwpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvaHRkb2NzL2Nzcy9pY3V4dG4uY3NzIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvaHRkb2NzL2Nzcy9pY3V4dG4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYWU0OTUKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9odGRvY3MvY3NzL2ljdXh0bi5jc3MKQEAgLTAsMCArMSw1MyBAQAorLyogQG92ZXJyaWRlIGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjL2Nocm9tZS9pY3Vjb2RldG9vbHMvY3NzL2ljdXh0bi5jc3MgKi8KKworLyogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAqLworCisvKiBAb3ZlcnJpZGUgaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdHJhYy9jaHJvbWUvaWN1Y29kZXRvb2xzL2Nzcy9pY3V4dG4uY3NzICovCisKKwordGFibGUuaWN1cmV2aWV3IHsKKwlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworCWJvcmRlcjogIDFweCBzb2xpZCBncmF5OworfQorCit0YWJsZS5pY3VyZXZpZXcgdGgsIHRhYmxlLmljdXJldmlldyB0ZCB7CisJdGV4dC1hbGlnbjogbGVmdDsKKwlib3JkZXI6ICAxcHggc29saWQgZ3JheTsKKwlwYWRkaW5nOiAgMnB4OworfQorCit0YWJsZS5pY3VyZXZpZXcgdGhlYWQgdGggeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0YWJsZS5pY3VyZXZpZXcgdGQuY2hhbmdlcyB7CisJdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3RhYmxlLmljdXJldmlldyB0ZC5vdmVyYWxsICB7CisJYmFja2dyb3VuZC1jb2xvcjogc2lsdmVyOworCWZvbnQtc3R5bGU6IGl0YWxpYzsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKworLmJyYW5jaC11bmtub3duIHsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWZvbnQtc3R5bGU6ICBpdGFsaWM7Cit9CisuYnJhbmNoLXRhZ3MgeworCWZvbnQtd2VpZ2h0OiBib2xkOworCWZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOworCWNvbG9yOiAgd2hpdGU7CisJYmFja2dyb3VuZC1jb2xvcjogbmF2eTsKKwlwYWRkaW5nOiAgMXB4OworfQorLmJyYW5jaC1icmFuY2hlcyB7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKwljb2xvcjogICMzNTM7Cit9CisKKy5icmFuY2gtdHJ1bmsgeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL2h0ZG9jcy9qcy9yZXZpZXcuanMgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9odGRvY3MvanMvcmV2aWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZGI1N2IKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy9odGRvY3MvanMvcmV2aWV3LmpzCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIElCTSBhbmQgT3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgdmFyIHNldEJyYW5jaE5hbWVzID0gZnVuY3Rpb24oKSB7CisgICAgIHZhciBjc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlc2V0dGFibGUiKTsKKyAgICAgdmFyIHRycz1jc3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyIik7CisgICAgIGZvciggaT0xIDsgaSA8IHRycy5sZW5ndGggOyBpKysgKSB7CisJdmFyIHNlYyA9IHRyc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKVsxXTsgLy8gWzBdIGlzICdhdXRob3InLCBbMV0gaXMgc2VjdGlvbi4KKyAgICAgICAgdmFyIGJyayA9IHNlYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpOworICAgICAgICBmb3Ioaj0wO2o8YnJrLmxlbmd0aDtqKyspIHsKKyAgICAgICAgICAgdmFyIGJyaSA9IGJya1tqXTsKKyAgICAgICAgICAgdmFyIHN0ciA9IGJyaS5pbm5lckhUTUw7CisgICAgICAgICAgIGlmKHN0ci5pbmRleE9mKCJ0cnVuayIpPi0xKSB7CisgICAgICAgICAgICAgIGJyaS5jbGFzc05hbWUgPSAnYnJhbmNoLXRydW5rJzsKKyAgICAgICAgICAgfSBlbHNlIGlmKHN0ci5pbmRleE9mKCJicmFuY2hlcyIpPi0xKSB7CisgICAgICAgICAgICAgIGJyaS5jbGFzc05hbWUgPSAnYnJhbmNoLWJyYW5jaGVzJzsKKyAgICAgICAgICAgfSBlbHNlIGlmKHN0ci5pbmRleE9mKCJ0YWdzIik+LTEpIHsKKwkgICAgICBicmkuY2xhc3NOYW1lID0gJ2JyYW5jaC10YWdzJzsKKyAgICAgICAgICAgfQorICAgICAgICB9CisgICAgIH0KKyAgfQorCisvLyBodHRwOi8vY2tvbi53b3JkcHJlc3MuY29tLzIwMDgvMDcvMjUvc3RvcC11c2luZy13aW5kb3dvbmxvYWQtaW4tamF2YXNjcmlwdC8KK2lmICh3aW5kb3cuYXR0YWNoRXZlbnQpIHt3aW5kb3cuYXR0YWNoRXZlbnQoJ29ubG9hZCcsIHNldEJyYW5jaE5hbWVzKTt9CitlbHNlIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikge3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc2V0QnJhbmNoTmFtZXMsIGZhbHNlKTt9CitlbHNlIHtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc2V0QnJhbmNoTmFtZXMsIGZhbHNlKTt9CisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3Jldmlldy5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3Jldmlldy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45M2Q1OWFkCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvcmV2aWV3LnB5CkBAIC0wLDAgKzEsMzMyIEBACisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworIyBSZXZpZXcgbW9kdWxlLgorIyBUT0RPOiByZWZhY3RvciB0aWNrZXQgbWFuaXB1bGF0aW9uIGl0ZW1zIGludG8gdGlja2V0bWdyLgorCitpbXBvcnQgcmUKKworZnJvbSB0cmFjLmNvcmUgaW1wb3J0IENvbXBvbmVudCwgaW1wbGVtZW50cworZnJvbSB0cmFjLmNvcmUgaW1wb3J0IENvbXBvbmVudE1hbmFnZXIKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCBUcmFjRXJyb3IKK2Zyb20gdHJhYy51dGlsIGltcG9ydCBNYXJrdXAKK2Zyb20gdHJhYy53ZWIgaW1wb3J0IElSZXF1ZXN0SGFuZGxlcgorZnJvbSB0cmFjLndlYi5jaHJvbWUgaW1wb3J0IGFkZF9zdHlsZXNoZWV0LCBhZGRfc2NyaXB0LCBJVGVtcGxhdGVQcm92aWRlciwgYWRkX2N0eHRuYXYKK2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbCBpbXBvcnQgQ2hhbmdlc2V0Citmcm9tIHRyYWMud2ViLmFwaSBpbXBvcnQgSVJlcXVlc3RGaWx0ZXIKK2Zyb20gdHJhYy53aWtpIGltcG9ydCB3aWtpX3RvX2h0bWwsIHdpa2lfdG9fb25lbGluZXIsIElXaWtpU3ludGF4UHJvdmlkZXIKKyAgICAgICAgICAgIAorZnJvbSBnZW5zaGkuYnVpbGRlciBpbXBvcnQgdGFnCisjZnJvbSB0cmFjLmVudiBpbXBvcnQgSUVudmlyb25tZW50U2V0dXBQYXJ0aWNpcGFudAorZnJvbSB0cmFjLnBlcm0gaW1wb3J0IElQZXJtaXNzaW9uUmVxdWVzdG9yCitmcm9tIHRyYWMuY29uZmlnIGltcG9ydCBMaXN0T3B0aW9uCitmcm9tIGljdWNvZGV0b29scy50aWNrZXRtZ3IgaW1wb3J0IFRpY2tldE1hbmFnZXIKK2Zyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgcmVzb3VyY2VfZmlsZW5hbWUgI0BVbnJlc29sdmVkSW1wb3J0CisKK2NsYXNzIFJldmlld01vZHVsZShDb21wb25lbnQpOgorCisgICAgaW1wbGVtZW50cyhJVGVtcGxhdGVQcm92aWRlciwgSVJlcXVlc3RGaWx0ZXIsIElSZXF1ZXN0SGFuZGxlciwgSVBlcm1pc3Npb25SZXF1ZXN0b3IpCisKKyAgICAjIHBhdGggdG8gbWF0Y2ggZm9yIHJldmlldworICAgIHBhdGhfbWF0Y2ggPSByZS5jb21waWxlKHInL2ljdXJldmlldy8oWzAtOV0rKScpCisKKyAgICB2b3RlYWJsZV9wYXRocyA9IExpc3RPcHRpb24oJ2ljdWNvZGV0b29scycsICdwYXRocycsICcvdGlja2V0KicsCisgICAgICAgIGRvYz0nTGlzdCBvZiBVUkwgcGF0aHMgdG8gc2hvdyByZXZpZXdzIG9uLiBHbG9icyBhcmUgc3VwcG9ydGVkLicpCisKKyAgICAjICBzZWFyY2ggZm9yIGVhcmxpZXN0IG1hdGNoLCBhbmQgaG93IG1hbnkgc2VnbWVudHMgdG8gaW5jbHVkZSBmb2xsb3dpbmcKKyAgICAjICAgIHRydW5rCisgICAgIyAgICBicmFuY2hlcy9tYWludC9tYWludC00LTgKKyAgICAjICAgIHRhZ3MvcmVsZWFzZS0yLTAKKyAgICBicmFuY2hMaXN0ID0gW1sndHJ1bmsnLDBdLFsnYnJhbmNoZXMnLDJdLFsndGFncycsMV1dCisKKyAgICAjIElQZXJtaXNzaW9uUmVxdWVzdG9yIG1ldGhvZHMKKyAgICBkZWYgZ2V0X3Blcm1pc3Npb25fYWN0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsnSUNVUkVWSUVXX1ZJRVcnXQorCisgICAgIyBJVGVtcGxhdGVQcm92aWRlciBtZXRob2RzCisgICAgZGVmIGdldF90ZW1wbGF0ZXNfZGlycyhzZWxmKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgCXJldHVybiBbcmVzb3VyY2VfZmlsZW5hbWUoX19uYW1lX18sICd0ZW1wbGF0ZXMnKV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6IAorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoJ0NvdWxkIG5vdCBnZXQgdGVtcGxhdGUgZGlyOiAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKGUpLCBlKSkKKwkJcmV0dXJuICIiCisKKworICAgIGRlZiBnZXRfaHRkb2NzX2RpcnMoc2VsZik6CisgICAgICAgIHJldHVybiBbKCdpY3Vjb2RldG9vbHMnLCByZXNvdXJjZV9maWxlbmFtZShfX25hbWVfXywgJ2h0ZG9jcycpKV0KKworICAgICMgSVJlcXVlc3RGaWx0ZXIgbWV0aG9kcworICAgIGRlZiBwcmVfcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcSwgaGFuZGxlcik6CisgICAgICAgIGlmICdJQ1VSRVZJRVdfVklFVycgbm90IGluIHJlcS5wZXJtOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIKKworICAgICAgICBpZiBzZWxmLm1hdGNoX3RpY2tldHBhZ2UocmVxKToKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX3Jldmlld2xpbmsocmVxKQorCisgICAgICAgIHJldHVybiBoYW5kbGVyCisKKyAgICBkZWYgcG9zdF9wcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxLCB0ZW1wbGF0ZSwgZGF0YSwgY29udGVudF90eXBlKToKKyAgICAgICAgcmV0dXJuICh0ZW1wbGF0ZSwgZGF0YSwgY29udGVudF90eXBlKQorCisgICAgZGVmIHJlbmRlcl9yZXZpZXdsaW5rKHNlbGYsIHJlcSk6CisgICAgICAgICNhZGRfc3R5bGVzaGVldChyZXEsICdpY3Vjb2RldG9vbHMvY3NzL2ljdXh0bi5jc3MnKQorCisgICAgICAgIGVscyA9IFtdCisKKyAgICAgICAgdGlja2V0X21nciA9IFRpY2tldE1hbmFnZXIoc2VsZi5jb21wbWdyKQorCisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkoKQorICAgICAgICBpZiBub3QgcmVwb3M6CisgICAgICAgICAgICByYWlzZSBUcmFjRXJyb3IoIkNvdWxkIG5vdCBnZXQgcmVwb3NpdG9yeSBmb3IgJXMiICUgKHJlcS5hdXRobmFtZSkpCisKKyAgICAgICAgcmV2cyA9IHRpY2tldF9tZ3IudGt0MnJldnMoc2VsZi5sb2csIGRiLCByZXBvcywgcmVxLCByZXEuYXJnc1sndGlja2V0J10pCisKKyAgICAgICAgaWYgbm90IHJldnM6CisgICAgICAgICAgICBzdHIgPSAnTm8gY29tbWl0cy4nCisgICAgICAgICAgICBsaSA9IHRhZy5saShzdHIpCisgICAgICAgICAgICBlbHMuYXBwZW5kKGxpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyID0gJyAlZCBjb21taXRzLicgJSBsZW4ocmV2cykKKyAgICAgICAgICAgIGhyZWYgPSByZXEuaHJlZi5yZXZpZXcocmVxLmFyZ3NbJ3RpY2tldCddKQorICAgICAgICAgICAgYSA9IHRhZy5hKCdSZXZpZXcnLCBocmVmPWhyZWYpCisgICAgICAgICAgICBsaSA9IHRhZy5saShhICsgc3RyKQorICAgICAgICAgICAgZWxzLmFwcGVuZChsaSkgICAgICAgICAgICAKKyAgICAgICAgCisgICAgICAgIHVsID0gdGFnLnVsKGVscywgY2xhc3NfPSdyZXZpZXcnKQorICAgICAgICBjbGFzc05hbWUgPSAnJworICAgICAgICB0aXRsZSA9ICJSZXZpZXdzIgorICAgICAgICBhZGRfY3R4dG5hdihyZXEsIHRhZy5zcGFuKHRhZy5vYmplY3QodWwpLCBpZD0naWN1cmV2aWV3JywgdGl0bGU9dGl0bGUsIGNsYXNzXz1jbGFzc05hbWUpKQorCisKKyAgICBkZWYgbWF0Y2hfcmVxdWVzdChzZWxmLCByZXEpOgorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKCcvcmV2aWV3KD86LyhbXi9dKykpPyg/Oi8oW14vXSspKT8oPzovKC4qKSQpPycsIHJlcS5wYXRoX2luZm8pCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmVxLmFyZ3NbJ3RpY2tldCddID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbWF0Y2hfdGlja2V0cGFnZShzZWxmLCByZXEpOgorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKCcvdGlja2V0KD86LyhbXi9dKykpPyg/Oi8oW14vXSspKT8oPzovKC4qKSQpPycsIHJlcS5wYXRoX2luZm8pCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmVxLmFyZ3NbJ3RpY2tldCddID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcGF0aFRvQnJhbmNoTmFtZShzZWxmLCBwYXRoKToKKyAgICAgICAgI3JldHVybiAnLycuam9pbihwYXRoLnNwbGl0KCcvJylbMDoyXSkKKyAgICAgICAgd2luZGV4ID0gTm9uZQorICAgICAgICB3aW4gPSBOb25lCisgICAgICAgIGZvciBicmFuY2ggaW4gc2VsZi5icmFuY2hMaXN0OgorICAgICAgICAgICAgaWYocGF0aCA9PSBicmFuY2hbMF0pOiAgIyBjYXRjaCBjaGFuZ2VzIHRvIGp1c3QgJ3RydW5rJworICAgICAgICAgICAgICAgIGlkeCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWR4ID0gcGF0aC5maW5kKGJyYW5jaFswXSsnLycpCisgICAgICAgICAgICBpZihpZHggPiAtMSBhbmQgKHdpbmRleCA9PSBOb25lIG9yIHdpbmRleCA+IGlkeCkpOgorICAgICAgICAgICAgICAgIHdpbmRleCA9IGlkeAorICAgICAgICAgICAgICAgIHdpbiA9IGJyYW5jaAorICAgICAgICBpZiB3aW5kZXggPT0gTm9uZToKKyAgICAgICAgICAgIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpCisgICAgICAgICAgICByZXR1cm4gJy8nLmpvaW4oc2VnbWVudHNbMDoyXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNwcmludCAiZm91bmQgJXMgZm9sbCAlcyBAICVkIiAlICh3aW5bMF0sd2luWzFdLHdpbmRleCkKKyAgICAgICAgICAgIHNlZ21lbnRzID0gcGF0aFt3aW5kZXg6XS5zcGxpdCgnLycpCisgICAgICAgICAgICByZXR1cm4gcGF0aFs6d2luZGV4XSArICgnLycuam9pbihzZWdtZW50c1swOndpblsxXSsxXSkpICMgdXNlIHNwZWNpZmllZCAjIG9mIGZvbGxvd2luZyBzZWdtZW50cworCisgICAgZGVmIGNoYW5nZVRvUmFuZ2Uoc2VsZiwgY19uZXcsIGNoYW5nZSk6CisgICAgICAgICMgcTogKHUndHJ1bmsvTG9jYWxlLmphdmEnLCAnZmlsZScsICdhZGQnLCBOb25lLCB1Jy0xJykgIGZyb20gcjMKKyAgICAgICAgIyBxOiAodSd0cnVuay91dGlsLmMnLCAgICAgICdmaWxlJywgJ2VkaXQnLCB1J3RydW5rL3V0aWwuYycsIHUnMicpICBmcm9tIHI0CisjICAgICAgICBjX3BhdGggPSBjaGFuZ2VbMF0KKyMgICAgICAgIGNfaXRlbXR5cGUgPSBjaGFuZ2VbMV0KKyAgICAgICAgY190eXBlID0gY2hhbmdlWzJdCisgICAgICAgIGNfb2xkcGF0aCA9IGNoYW5nZVszXQorICAgICAgICBjX29sZCA9IGludChjaGFuZ2VbNF0gb3IgLTEpCisgICAgICAgIGlmKGNfdHlwZSBpbiAoQ2hhbmdlc2V0LkNPUFksQ2hhbmdlc2V0Lk1PVkUpKToKKyAgICAgICAgICAgIHJldHVybiAoLTEsIGNfbmV3LCBjX3R5cGUsIGNfb2xkLCBjX29sZHBhdGgpICMgaWdub3JlIE9MRCByZXYgZm9yIHRoZXNlCisgICAgICAgIGVsaWYoY190eXBlIGluIChDaGFuZ2VzZXQuREVMRVRFKSk6CisgICAgICAgICAgICByZXR1cm4gKGNfb2xkLCAtMSwgY190eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChjX29sZCwgY19uZXcsIGNfdHlwZSkKKyAgICAgICAgCisgICAgZGVmIGRlc2NyaWJlQ2hhbmdlKHNlbGYsIGZpbGUsIGNoYW5nZSwgcmVxLCBkYik6CisgICAgICAgIHdoYXQgPSBjaGFuZ2VbMl0gb3IgJ2NoYW5nZScKKyAgICAgICAgd2hlcmUgPSAnciVkOiVkJyAlIChjaGFuZ2VbMF0sY2hhbmdlWzFdKQorICAgICAgICBpZihjaGFuZ2VbMF0gPT0gLTEpOgorICAgICAgICAgICAgaWYoY2hhbmdlWzFdID09IC0xKToKKyAgICAgICAgICAgICAgICB1cmwgPSBOb25lCisgICAgICAgICAgICAgICAgd2hhdCA9ICJub29wIgorICAgICAgICAgICAgICAgIHdoZXJlID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjaWYgY2hhbmdlWzJdID09ICdhZGQrY29tbWl0cyc6CisgICAgICAgICAgICAgICAgdXJsID0gcmVxLmhyZWYuYnJvd3NlcihmaWxlLCByZXY9Y2hhbmdlWzFdKSAjICdhZGQnCisgICAgICAgICAgICAgICAgd2hlcmUgPSAnciVkJyAlIGNoYW5nZVsxXQorICAgICAgICAgICAgICAgIHdoYXQgPSBjaGFuZ2VbMl0KKyAgICAgICAgZWxpZihjaGFuZ2VbMV0gPT0gLTEpOgorICAgICAgICAgICAgdXJsID0gTm9uZSAjIGRlbGV0ZWQKKyAgICAgICAgICAgIHdoYXQgPSAiZGVsZXRlZCIKKyAgICAgICAgICAgIHdoZXJlID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJsID0gcmVxLmhyZWYuY2hhbmdlc2V0KG9sZF9wYXRoPWZpbGUsIG9sZD1jaGFuZ2VbMF0sIG5ld19wYXRoPWZpbGUsIG5ldz1jaGFuZ2VbMV0pCisgICAgICAgIGlmIHVybDoKKyAgICAgICAgICAgIHdoYXQgPSBNYXJrdXAoJzxhIGhyZWY9IiVzIj4lczwvYT4nICUgKHVybCx3aGF0KSkKKyAgICAgICAgaWYgd2hlcmU6CisgICAgICAgICAgICByZXR1cm4gKHdoYXQsIHRhZy5hKHdoZXJlLCBocmVmPXJlcS5ocmVmLnNlYXJjaChxPXdoZXJlKSkpCisgICAgICAgICAgICAjcmV0dXJuICh3aGF0LCB3aGVyZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAod2hhdCwgJycpCisKKworICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxKToKKyAgICAgICAgI29rLCB3aGF0IGFyZSB3ZSBhYm91dC4KKyAgICAgICAgI2RiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgICN0aWNrZXRsaXN0ID0ge30gICMgZGljdCBvZiB0aWNrZXQtPj8/PworICAgICAgICAjcmV2bGlzdCA9IHt9ICMgZGljdCBvZiByZXZpc2lvbi0+CisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkoKQorCisgICAgICAgIG5ld19wYXRoID0gcmVxLmFyZ3MuZ2V0KCduZXdfcGF0aCcpCisgICAgICAgIG5ld19yZXYgPSByZXEuYXJncy5nZXQoJ25ldycpCisgICAgICAgIG9sZF9wYXRoID0gcmVxLmFyZ3MuZ2V0KCdvbGRfcGF0aCcpCisgICAgICAgIG9sZF9yZXYgPSByZXEuYXJncy5nZXQoJ29sZCcpCisKKyAgICAgICAgbmV3X3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChuZXdfcGF0aCkKKyAgICAgICAgbmV3X3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYobmV3X3JldikKKyAgICAgICAgb2xkX3BhdGggPSByZXBvcy5ub3JtYWxpemVfcGF0aChvbGRfcGF0aCkKKyAgICAgICAgb2xkX3JldiA9IHJlcG9zLm5vcm1hbGl6ZV9yZXYob2xkX3JldikKKyAgICAgICAgCisKKyMgICAgICAgIGlmIG5vdCByZXEucGVybS5oYXNfcGVybWlzc2lvbignVElDS0VUX01PRElGWScpOgorIyAgICAgICAgICAgIHJldHVybiByZXEucmVkaXJlY3QocmVxLmhyZWYuYnJvd3NlcigpKQorCisgICAgICAgIG9sZF9yZXYgPSBpbnQob2xkX3JldikKKyAgICAgICAgbmV3X3JldiA9IGludChuZXdfcmV2KQorICAgICAgICAKKyAgICAgICAgdGlja2V0ID0gcmVxLmFyZ3MuZ2V0KCd0aWNrZXQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aWNrZXQgPSBpbnQodGlja2V0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdGlja2V0ID0gMAorIyAgICAgICAgcmVxLmhkZlsncmV2aWV3LnRpY2tldCddID0gdGlja2V0CisjICAgICAgICByZXEuaGRmWydyZXZpZXcudGlja2V0aHRtbCddID0gdGFnLmEodGlja2V0LCByZXEuaHJlZi50aWNrZXQodGlja2V0KSkKKworICAgICAgICBkYXRhID0ge30KKworICAgICAgICBkYXRhWydvdmVyYWxsX3knXSA9IDAKKyAgICAgICAgZGF0YVsndGlja2V0X2lkJ10gPSByZXEuYXJnc1sndGlja2V0J10KKyAgICAgICAgZGF0YVsndGlja2V0X2hyZWYnXSA9IHJlcS5ocmVmLnRpY2tldChyZXEuYXJnc1sndGlja2V0J10pCisKKyAgICAgICAgdGlja2V0X21nciA9IFRpY2tldE1hbmFnZXIoc2VsZi5jb21wbWdyKQorCisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkoKQorCisgICAgICAgIHJldnMgPSB0aWNrZXRfbWdyLnRrdDJyZXZzKHNlbGYubG9nLCBkYiwgcmVwb3MsIHJlcSwgcmVxLmFyZ3NbJ3RpY2tldCddKQorICAgICAgICAKKyAgICAgICAgaWYgKG5vdCByZXZzIG9yIGxlbihyZXZzKT09MCk6CisgICAgICAgICAgICAjIG5vdGhpbmcgdG8gcmV2aWV3LiBzaG91bGRuJ3QgaGFwcGVuCisgICAgICAgICAgICByZXR1cm4gKCdub3RoaW5nLmh0bWwnLCBkYXRhLCAndGV4dC9odG1sJykKKyAgICAgICAgZWxpZihsZW4ocmV2cyk9PTEpOgorICAgICAgICAgICAgIyBvbmx5IG9uZSBjaGFuZ2UgLSBqdXN0IGRvIGEgY2hhbmdlc2V0IHZpZXcKKyAgICAgICAgICAgIHJldHVybiByZXEucmVkaXJlY3QocmVxLmhyZWYuY2hhbmdlc2V0KHJldnNbMF0pKQorCisgICAgICAgIHJldmNvdW50ID0gMAorICAgICAgICBicmFuY2hlcyA9IHt9CisgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgIyBtYXkgYmUgMCByZXZzLgorICAgICAgICByZXZpc2lvbnMgPSBbXQorICAgICAgICAKKyAgICAgICAgZm9yIHJldiBpbiByZXZzOgorICAgICAgICAgICAgY2hnc2V0ID0gcmVwb3MuZ2V0X2NoYW5nZXNldChyZXYpCisgICAgICAgICAgICAjIHE6ICh1J3RydW5rL0xvY2FsZS5qYXZhJywgJ2ZpbGUnLCAnYWRkJywgTm9uZSwgdSctMScpICBmcm9tIHIzCisgICAgICAgICAgICAjIHE6ICh1J3RydW5rL3V0aWwuYycsICdmaWxlJywgJ2VkaXQnLCB1J3RydW5rL3V0aWwuYycsIHUnMicpICBmcm9tIHI0CisgICAgICAgICAgICBtZXNzYWdlID0gY2hnc2V0Lm1lc3NhZ2Ugb3IgJy0tJworICAgICAgICAgICAgcmV2Y291bnQgPSByZXZjb3VudCArIDEKKyAgICAgICAgICAgIHJldmlzaW9uID0ge30KKyAgICAgICAgICAgIHJldmlzaW9uWydyZXYnXSA9ICB0YWcuYShyZXYsIHJlcS5ocmVmLmNoYW5nZXNldChyZXYpKQorICAgICAgICAgICAgcmV2aXNpb25bJ2F1dGhvciddID0gY2hnc2V0LmF1dGhvcgorICAgICAgICAgICAgcmV2aXNpb25bJ251bSddID0gIHJldgorICAgICAgICAgICAgcmV2aXNpb25bJ2NvbW1lbnQnXSA9ICBtZXNzYWdlICN3aWtpX3RvX29uZWxpbmVyKCBtZXNzYWdlLCBzZWxmLmVudiwgZGIsIHNob3J0ZW49RmFsc2UgKQorICAgICAgICAgICAgcmJyYW5jaGVzID0gcmV2aXNpb25bJ2JyYW5jaGVzJ10gPSBbXQorICAgICAgICAgICAgZm9yIGNoZyBpbiBjaGdzZXQuZ2V0X2NoYW5nZXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gY2hnWzBdCisgICAgICAgICAgICAgICAgaWYgcGF0aCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZpbGVzW3BhdGhdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZpbGVzW3BhdGhdID0gaXRlbTsKKyAgICAgICAgICAgICAgICBpdGVtLmFwcGVuZChzZWxmLmNoYW5nZVRvUmFuZ2UocmV2LGNoZykpCisgICAgICAgICAgICAgICAgYnJhbmNoX25hbWUgPSBzZWxmLnBhdGhUb0JyYW5jaE5hbWUocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBicmFuY2hfbmFtZSBub3QgaW4gcmJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICByYnJhbmNoZXMuYXBwZW5kKGJyYW5jaF9uYW1lKQorICAgICAgICAgICAgcmV2aXNpb25zLmFwcGVuZChyZXZpc2lvbikKKyAgICAgICAgZGF0YVsncmV2aXNpb25zJ10gPSByZXZpc2lvbnMKKyAgICAgICAgCisgICAgICAgIGlmKHJldmNvdW50ID4gMCk6CisgICAgICAgICAgICBkYXRhWydyZXZjb3VudCddID0gcmV2Y291bnQKKyAgICAgICAgCisgICAgICAgICMgcHJpbnQgImZpbGVzOiAlZCIgJSBsZW4oZmlsZXMpCisgICAgICAgICMgZ28gdGhyb3VoZyBlYWNoIGZpbGUgYW5kIGNhbGN1bGF0ZSBpdHMgbWluaW11bSByYW5nZQorICAgICAgICBmaWxlbGlzdCA9IGZpbGVzLmtleXMoKQorICAgICAgICBmaWxlbGlzdC5zb3J0KCkKKyMgICAgICAgIHByaW50ICdiYXIgdG8gJWQgbGVuIG9mICVzJyAlIChsZW4oZmlsZWxpc3QpLHN0cihmaWxlbGlzdCkpCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgY2hhbmdlcyA9IGZpbGVzW2ZpbGVdCisgICAgICAgICAgICBpID0gMAorIyAgICAgICAgICAgIHByaW50ICIgbG9vcGluZyBmcm9tICVkIHRvICVkIG92ZXIgJWQgIiAlIChpLGxlbihjaGFuZ2VzKS0xLGxlbihjaGFuZ2VzKSkKKyAgICAgICAgICAgIHdoaWxlIGxlbihjaGFuZ2VzKT4xIGFuZCBpPChsZW4oY2hhbmdlcyktMSk6CisgICAgICAgICAgICAgICAgaWYgY2hhbmdlc1tpXVsxXSA9PSBjaGFuZ2VzW2krMV1bMF06CisgICAgICAgICAgICAgICAgICAgIGlmIGNoYW5nZXNbaV1bMF0gPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzW2krMV0gPSAoY2hhbmdlc1tpXVswXSxjaGFuZ2VzW2krMV1bMV0sJ2FkZCtjb21taXRzJykgIyByZXRhaW4gJ2ZpcnN0JyByZXYKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNbaSsxXSA9IChjaGFuZ2VzW2ldWzBdLGNoYW5nZXNbaSsxXVsxXSwnbXVsdGlwbGUgY29tbWl0cycpICMgcmV0YWluICdmaXJzdCcgcmV2CisKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyA9IGNoYW5nZXNbOmldICsgY2hhbmdlc1tpKzE6XSAjIGFuZCBzaGlmdCBkb3duCisjICAgICAgICAgICAgICAgICAgICBwcmludCAibWVyZ2VkOiAlcyIgJSBzdHIoY2hhbmdlcykKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbZmlsZV0gPSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgIAorICAgICAgICAjIG5vdywgd3JpdGUgJ2VtIG91dAorICAgICAgICBzZXJhID0gMAorICAgICAgICAjZmlsZXNfZGF0YSA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgc2VyYSA9IHNlcmErMQorICAgICAgICAgICAgZmlsZV9kYXRhID0ge30KKyAgICAgICAgICAgIGZpbGVfZGF0YVsnbmFtZSddID0gTWFya3VwKCc8YSBocmVmPSIlcyI+JXM8L2E+JyAlIChyZXEuaHJlZi5icm93c2VyKGZpbGUpLGZpbGUpKQorICAgICAgICAgICAgYnJhbmNoX25hbWUgPSBzZWxmLnBhdGhUb0JyYW5jaE5hbWUoZmlsZSkKKyAgICAgICAgICAgICNwcmludCAiYnJhbmNoIGlzOiAoJXMpIiAlIChicmFuY2hfbmFtZSkKKyAgICAgICAgICAgIGJyYW5jaGVzX2RhdGEgPSBicmFuY2hlcy5nZXQoYnJhbmNoX25hbWUsIHt9KQorICAgICAgICAgICAgZmlsZXNfZGF0YSA9IGJyYW5jaGVzX2RhdGEuZ2V0KCdmaWxlcycsW10pCisKKyAgICAgICAgICAgIGNoYW5nZXMgPSBmaWxlc1tmaWxlXQorICAgICAgICAgICAgY2hhID0gMAorICAgICAgICAgICAgY2hhbmdlc19kYXRhID0gW10KKyAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gY2hhbmdlczoKKyAgICAgICAgICAgICAgICBjaGEgPSBjaGEgKyAxCisjICAgICAgICAgICAgICAgIHByaW50ICIlcyBvdXRwdXQgJXMgIiAlIChmaWxlLCBzdHIoY2hhbmdlKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzX2RhdGEuYXBwZW5kKHNlbGYuZGVzY3JpYmVDaGFuZ2UoZmlsZSwgY2hhbmdlLCByZXEsIGRiKSkKKyAgICAgICAgICAgIGZpbGVfZGF0YVsnY2hhbmdlcyddID0gY2hhbmdlc19kYXRhCisgICAgICAgICAgICBpZihsZW4oY2hhbmdlcyk+MSk6CisgICAgICAgICAgICAgICAgd2hhdGh0bWwgPSBzZWxmLmRlc2NyaWJlQ2hhbmdlKGZpbGUsIChjaGFuZ2VzWzBdWzBdLCBjaGFuZ2VzW2xlbihjaGFuZ2VzKS0xXVsxXSwgJ292ZXJhbGwnKSwgcmVxLCBkYikKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGFbJ292ZXJhbGwnXSA9IHdoYXRodG1sCisgICAgICAgICAgICAgICAgZmlsZV9kYXRhWydvdmVyYWxsX3knXSA9IDEKKyAgICAgICAgICAgICAgICBkYXRhWydvdmVyYWxsX3knXSA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhWydvdmVyYWxsX3knXSA9IDAKKyAgICAgICAgICAgIGZpbGVzX2RhdGEuYXBwZW5kKGZpbGVfZGF0YSkKKyAgICAgICAgICAgICMgc2V0cworICAgICAgICAgICAgYnJhbmNoZXNfZGF0YVsnZmlsZXMnXSA9IGZpbGVzX2RhdGEKKyAgICAgICAgICAgIGJyYW5jaGVzX2RhdGFbJ2xlbiddID0gbGVuKGZpbGVzX2RhdGEpCisgICAgICAgICAgICBicmFuY2hlc19kYXRhWyduYW1lJ10gPSBicmFuY2hfbmFtZQorICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoX25hbWVdID0gYnJhbmNoZXNfZGF0YQorCisgICAgICAgICMgLi4gY29udmVydCBkaWN0IHRvIGFycmF5LgorICAgICAgICBicmFuY2hfbGlzdCA9IFtdCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXM6CisgICAgICAgICAgICBicmFuY2hfbGlzdC5hcHBlbmQoYnJhbmNoZXNbYnJhbmNoXSkKKyAgICAgICAgZGF0YVsnYnJhbmNoZXMnXSA9IGJyYW5jaF9saXN0CisgICAgICAgIGRhdGFbJ2xhc3RicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBkYXRhWydicmFuY2hjb3VudCddID0gbGVuKGJyYW5jaGVzKQorICAgICAgICAKKyAgICAgICAgY29udGVudF90eXBlID0gInRleHQvaHRtbCIKKyAgICAgICAgYWRkX3N0eWxlc2hlZXQocmVxLCAnaWN1Y29kZXRvb2xzL2Nzcy9pY3V4dG4uY3NzJykKKyAgICAgICAgYWRkX3NjcmlwdChyZXEsICdpY3Vjb2RldG9vbHMvanMvcmV2aWV3LmpzJykKKyAgICAgICAgcmV0dXJuICdyZXZpZXcuaHRtbCcsIGRhdGEsIGNvbnRlbnRfdHlwZQorCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvbm90aGluZy5odG1sIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGVtcGxhdGVzL25vdGhpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE5ZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGVtcGxhdGVzL25vdGhpbmcuaHRtbApAQCAtMCwwICsxLDI1IEBACis8IURPQ1RZUEUgaHRtbAorICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPCEtLQorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgICAgIHhtbG5zOnB5PSJodHRwOi8vZ2Vuc2hpLmVkZ2V3YWxsLm9yZy8iCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDx4aTppbmNsdWRlIGhyZWY9ImxheW91dC5odG1sIiAvPgorICA8aGVhZD4KKyAgICA8dGl0bGU+Tm90aGluZyB0byBSZXZpZXcgZm9yIHRpY2tldCAjJHt0aWNrZXRfaWR9PC90aXRsZT4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImN0eHRuYXYiIGNsYXNzPSJuYXYiPjwvZGl2PgorCisgICAgPGRpdiBpZD0iY29udGVudCIgY2xhc3M9ImljdWNvZGVyZXZpZXciPgorICAgICAgPGgxPk5vdGhpbmcgdG8gcmV2aWV3ITwvaDE+CisgICAgICA8cD4KKyAgICAgIAlOb3RoaW5nIHRvIHJldmlldyAtIG5vIGNoYW5nZXNldHMgaW4gdGlja2V0IDxhIGhyZWY9IiR7dGlja2V0X2hyZWZ9Ij4jJHt0aWNrZXRfaWR9PC9hPgorICAgICAgPC9wPgorICAgIDwvZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90ZW1wbGF0ZXMvcmV2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2NDY0YgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RlbXBsYXRlcy9yZXZpZXcuaHRtbApAQCAtMCwwICsxLDE0MSBAQAorPCFET0NUWVBFIGh0bWwKKyAgICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzwhLS0KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgSUJNIGFuZCBPdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgICAgICB4bWxuczpweT0iaHR0cDovL2dlbnNoaS5lZGdld2FsbC5vcmcvIgorICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8eGk6aW5jbHVkZSBocmVmPSJsYXlvdXQuaHRtbCIgLz4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPlJldmlldyBmb3IgdGlja2V0ICMke3RpY2tldF9pZH08L3RpdGxlPgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iY3R4dG5hdiIgY2xhc3M9Im5hdiI+PC9kaXY+CisKKyAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0iaWN1Y29kZXJldmlldyI+CisKKworIDxoMT5UaWNrZXQgPGEgaHJlZj0nJHtocmVmLnRpY2tldCh0aWNrZXRfaWQpfSc+IyR7dGlja2V0X2lkfTwvYT48L2gxPgorCis8cHk6aWYgdGVzdD0icmV2Y291bnQiPgorCisgIDxoMj4ke3JldmNvdW50fSBDaGFuZ2VzZXRzPC9oMj4KKyAgPHRhYmxlIGlkPSdjaGFuZ2VzZXR0YWJsZScgY2xhc3M9J2ljdXJldmlldyc+CisgICAgPHRoZWFkPgorICAgICAgPHRyPgorCTx0aD5yPC90aD4KKwk8dGg+YXV0aG9yPC90aD4KKwk8dGg+c2VjdGlvbihzKTwvdGg+CisJPHRoPmNvbW1lbnQ8L3RoPgorICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIDx0Ym9keT4KKyAgICAgIDxweTpmb3IgZWFjaD0icmV2IGluIHJldmlzaW9ucyI+CisJPHRyPgorCSAgPHRoPgorCSAgICA8YSBocmVmPSIke2hyZWYuY2hhbmdlc2V0KHJldi5udW0pfSI+ciR7cmV2Lm51bX08L2E+CisJICA8L3RoPgorCSAgPHRkPgorCSAgICAke3Jldi5hdXRob3J9CisJICA8L3RkPgorCSAgPHRkPgorCSAgICA8IS0tIHNlY3Rpb25zIC0tPgorCSAgICA8cHk6Zm9yIGVhY2g9ImJyYW5jaCBpbiByZXYuYnJhbmNoZXMiPgorCSAgICAgIDxiIGNsYXNzPSdicmFuY2hsaXN0Jz4KKwkJPGEgY2xhc3M9J2JyYW5jaC11bmtub3duJyBocmVmPSIjJHticmFuY2h9Ij4ke2JyYW5jaH08L2E+IAorCSAgICAgIDwvYj4KKwkgICAgPC9weTpmb3I+CisJICA8L3RkPgorCSAgPHRkPgorCSAgICAke3Jldi5jb21tZW50fQorCSAgPC90ZD4KKwk8L3RyPgorICAgICAgPC9weTpmb3I+CisgICAgPC90Ym9keT4KKyAgPC90YWJsZT4KKyAgCis8cHk6aWYgdGVzdD0iYnJhbmNoY291bnQgPiAxIj4KKzxoMj5GaWxlczwvaDI+Cis8aDM+SnVtcCB0byBTZWN0aW9uczwvaDM+Cis8dWw+Cis8cHk6Zm9yIGVhY2g9ImJyYW5jaCBpbiBicmFuY2hlcyI+CisgIDxsaT48YSBocmVmPSIjJHticmFuY2gubmFtZX0iPiR7YnJhbmNoLm5hbWV9PC9hPiAmbWRhc2g7ICR7YnJhbmNoLmxlbn0gZmlsZXM8L2xpPgorPC9weTpmb3I+Cis8L3VsPgorPC9weTppZj4KKworPHB5OmZvciBlYWNoPSJicmFuY2ggaW4gYnJhbmNoZXMiPgorPGhyLz4KKzxhIG5hbWU9IiR7YnJhbmNoLm5hbWV9Ij4KKyAgPGgzPgorICAgICAgICA8YSBocmVmPSIke2hyZWYuYnJvd3NlcihicmFuY2gubmFtZSl9Ij4ke2JyYW5jaC5uYW1lfTwvYT4gJm1kYXNoOyAoJHticmFuY2gubGVufSBmaWxlcyBjaGFuZ2VkKQorICA8L2gzPgorPC9hPgorCis8YmxvY2txdW90ZT4KKworPHRhYmxlIGNsYXNzPSdpY3VyZXZpZXcnPgorPHRoZWFkPgorPHRyPgorIDx0aD5GaWxlPC90aD4KKyA8dGg+Q2hhbmdlczwvdGg+CisgPHRoPkRldGFpbHM8L3RoPgorIDxweTppZiB0ZXN0PSJvdmVyYWxsX3kgPiAwIj4gCisgIDx0aD5PdmVyYWxsPGJyLz48aT4oaW5jbHVkaW5nIG90aGVyIGNoYW5nZXMpPC9pPjwvdGg+CisgIDx0aD5EZXRhaWxzPC90aD4KKyA8L3B5OmlmPgorPC90cj4KKzwvdGhlYWQ+Cis8dGJvZHk+Cis8cHk6Zm9yIGVhY2g9ImZpbGUgaW4gYnJhbmNoLmZpbGVzIj4KKyA8dHI+CisgICAgPHRoIGNsYXNzPSduYW1lJz4ke2ZpbGUubmFtZX08L3RoPgorICAgIDx0ZCBjbGFzcz0nY2hhbmdlcyc+CisgICAgICA8cHk6Zm9yIGVhY2g9ImNoYW5nZSBpbiBmaWxlLmNoYW5nZXMiPgorICAgICAgICAke2NoYW5nZVswXX08YnIvPgorICAgICAgPC9weTpmb3I+CisgICAgPC90ZD4KKyAgICA8dGQgY2xhc3M9J2RldGFpbHMnPgorICAgICAgPHB5OmZvciBlYWNoPSJjaGFuZ2UgaW4gZmlsZS5jaGFuZ2VzIj4KKyAgICAgICAgJHtjaGFuZ2VbMV19PGJyLz4KKyAgICAgIDwvcHk6Zm9yPgorICAgIDwvdGQ+CisJICAKKyAgICA8cHk6aWYgdGVzdD0ib3ZlcmFsbF95ID4gMCI+IAorICAgICA8cHk6aWYgdGVzdD0iZmlsZS5vdmVyYWxsX3kgPiAwIj4KKyAgICAgIDx0ZCBjbGFzcz0nb3ZlcmFsbCc+JHtmaWxlLm92ZXJhbGxbMF19PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0nb3ZlcmFsbCc+JHtmaWxlLm92ZXJhbGxbMV19PC90ZD4KKyAgICAgPC9weTppZj4KKyAgICA8L3B5OmlmPgorICA8L3RyPgorPC9weTpmb3I+Cis8L3Rib2R5PgorPC90YWJsZT4KKworPC9ibG9ja3F1b3RlPgorCis8L3B5OmZvcj4KKworPGhyLz4KKworPGRpdiBzdHlsZT0nZGlzcGxheTpub25lOyc+Cis8aDI+TWVyZ2UgQ29tbWFuZHM8L2gyPgorVmVyeSBleHBlcmltZW50YWwuICBDaGFuZ2UgPz8/IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUgeW91IHdhbnQgdG8gbWVyZ2UgZnJvbSAoaWN1IG9yIGljdTRqKTxici8+Cis8dGV4dGFyZWE+c3ZuIG1lcmdlIC1jIDw/Y3MgZWFjaDpyZXYgPSByZXZpc2lvbnMgPz48P2NzIHZhcjpyZXYubnVtID8+LDw/Y3MgL2VhY2ggPz4gc3ZuK3NzaDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1Lz8/Py90cnVuazwvdGV4dGFyZWE+CisKKzxoci8+Cis8L2Rpdj4KKzxoci8+Cis8aWZyYW1lIHNyYz0iaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pY3Vjb2RldG9vbHMvdjEvcmV2aWV3IiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI4MDBweCI+Cis8aDE+PGEgaHJlZj0iaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9pY3Vjb2RldG9vbHMvdjEvcmV2aWV3Ij5IZWxwPC9hPjwvaDE+Cis8L2lmcmFtZT4KKworPC9weTppZj4KKzxoci8+Cis8aT4kSWQ6ICQ8L2k+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RpY2tldG1nci5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvaWN1Y29kZXRvb2xzL3RpY2tldG1nci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZWE2ZWNlCi0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGlja2V0bWdyLnB5CkBAIC0wLDAgKzEsMTk0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBBdXRob3I6IDxzcmxAaWN1LXByb2plY3Qub3JnPgorIworCisjIAorIyBUaWNrZXQgbWFuYWdlbWVudC4KKyMgVGhpcyBjb21wb25lbnQgbWFuYWdlcyB0aGUgcmV2aXNpb24gdG8gdGlja2V0IG1hcC4KKyMKKyMgMjAxMS1qYW4tMjcJc3JsCWFkZGluZyBJUmVwb3NpdG9yeUNoYW5nZUxpc3RlbmVyIGZ1bmN0aW9uYWxpdHkgKHJlcXVpcmVzIHRyYWMgMC4xMikKKworCisKK2Zyb20gdHJhYy5jb3JlIGltcG9ydCBDb21wb25lbnQsIGltcGxlbWVudHMsIFRyYWNFcnJvcgorZnJvbSB0cmFjLmVudiBpbXBvcnQgSUVudmlyb25tZW50U2V0dXBQYXJ0aWNpcGFudAorZnJvbSB0cmFjLmRiIGltcG9ydCBUYWJsZSwgQ29sdW1uLCBJbmRleCwgRGF0YWJhc2VNYW5hZ2VyCitmcm9tIHRyYWMuY29uZmlnIGltcG9ydCBPcHRpb24KK2Zyb20gdHJhYy51dGlsLnRleHQgaW1wb3J0IGV4Y2VwdGlvbl90b191bmljb2RlCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wuYXBpIGltcG9ydCBJUmVwb3NpdG9yeUNoYW5nZUxpc3RlbmVyCisKK2ltcG9ydCByZQorCit0a3RtZ3Jfc2NoZW1hID0gWworICAgIFRhYmxlKCdyZXYydGlja2V0Jywga2V5PSdyZXYnKVsgICAgICAgICAjIG1hcCByZXYtPnRpY2tldAorICAgICAgICBDb2x1bW4oJ3JldicsIHR5cGU9J2ludCcpLCAgICAgICAgICAjIGNoYW5nZXNldCBpZAorICAgICAgICBDb2x1bW4oJ3RpY2tldCcsIHR5cGU9J2ludCcpLCAgICAgICAjIHRpY2tldCAjCisgICAgICAgIEluZGV4KFsndGlja2V0J10pXSwgICAgICAgICAgICAgICAgICMgaW5kZXggYnkgdGlja2V0CitdCisKK2NsYXNzIFRpY2tldE1hbmFnZXIoQ29tcG9uZW50KToKKyAgICBpbXBsZW1lbnRzKElFbnZpcm9ubWVudFNldHVwUGFydGljaXBhbnQsIElSZXBvc2l0b3J5Q2hhbmdlTGlzdGVuZXIpCisKKyAgICB0aWNrZXRfcGF0dGVybiA9IE9wdGlvbignaWN1Y29kZXRvb2xzJywgJ3RpY2tldF9wYXR0ZXJuJywgJ150aWNrZXQ6KFxkKyknLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJBIHJlZ2V4IG1hdGNoaW5nIHRoZSBjb21taXQgbWVzc2FnZXMuIEdyb3VwIDEgbXVzdCByZXR1cm4gYSBudW1iZXIuIiIiKQorICAgIAorICAgIGRlZiBpY3VfdGt0bWdyKHNlbGYpOgorICAgICAgICByZXR1cm4gMTsKKyAgICAKKyAgICBrbm93bl95b3VuZ2VzdCA9IC0xCisKKyAgICBkZWYgZW52aXJvbm1lbnRfY3JlYXRlZChzZWxmKToKKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgY29ubmVjdG9yLCBfID0gRGF0YWJhc2VNYW5hZ2VyKHNlbGYuZW52KS5fZ2V0X2Nvbm5lY3RvcigpCisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgIGZvciB0YWJsZSBpbiB0a3RtZ3Jfc2NoZW1hOgorICAgICAgICAgICAgZm9yIHN0bXQgaW4gY29ubmVjdG9yLnRvX3NxbCh0YWJsZSk6CisgICAgICAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUoc3RtdCkKKworICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiSU5TRVJUIElOVE8gc3lzdGVtIChuYW1lLHZhbHVlKSAiCisgICAgICAgICAgICAgICAgICAgICAgICJWQUxVRVMgKCdpY3VfdGt0bWdyJywlcykiLCAoc2VsZi5pY3VfdGt0bWdyKCksKSkKKyAgICAgICAgZGIuY29tbWl0KCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnRGF0YWJhc2UgdXBkYXRlOiBpY3VfdGt0bWdyIHRhYmxlcyB2ZXJzaW9uICVkICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWN1X3RrdG1ncigpKQorICAgICAgICBwcmludCAnaWN1Y29kZXRvb2xzLnRpY2tldG1ncjogTm90ZSwgZmlyc3QgcmV2aWV3IHdpbGwgdGFrZSBhIHdoaWxlLlxuJworICAgIAorICAgIGRlZiB5b3VuZ2VzdF9yZXYoc2VsZixkYik6CisgICAgICAgIGlmIChzZWxmLmtub3duX3lvdW5nZXN0IDwgMCk6CisgICAgICAgICAgICAjcHJpbnQoJ0RpZCBub3Qga25vdyB5b3VuZ2VzdCB2YWx1ZS4nKQorICAgICAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSBzeXN0ZW0gV0hFUkUgbmFtZT0naWN1X3RrdG1ncl95b3VuZ2VzdCciKQorICAgICAgICAgICAgcm93ID0gY3Vyc29yLmZldGNob25lKCkKKyAgICAgICAgICAgIGlmIG5vdCByb3c6CisgICAgICAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIklOU0VSVCBJTlRPIHN5c3RlbSAobmFtZSx2YWx1ZSkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWQUxVRVMgKCdpY3VfdGt0bWdyX3lvdW5nZXN0JywnLTEnKSIpCisgICAgICAgICAgICAgICAgZGIuY29tbWl0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmtub3duX3lvdW5nZXN0ID0gLTIKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga25vd25feW91bmdlc3QgPSBpbnQocm93WzBdKQorICAgICAgICAgICAgICAgIHNlbGYua25vd25feW91bmdlc3QgPSBrbm93bl95b3VuZ2VzdAorICAgICAgICByZXR1cm4gc2VsZi5rbm93bl95b3VuZ2VzdAorICAgICAgICAKKyAgICBkZWYgY2hlY2tfc3luYyhzZWxmLCBsb2csIGRiLCByZXBvcyk6CisgICAgICAgIG91cllvdW5nZXN0ID0gc2VsZi55b3VuZ2VzdF9yZXYoZGIpCisgICAgICAgIHRoZWlyWW91bmdlc3QgPSByZXBvcy5nZXRfeW91bmdlc3RfcmV2KCkKKyAgICAgICAgI2xvZy5pbmZvKCJUS1Q6IGNoZWNrX3N5bmMgJWQvJWQiICUgKG91cllvdW5nZXN0LHRoZWlyWW91bmdlc3QpKQorICAgICAgICBpZihvdXJZb3VuZ2VzdCA8PSB0aGVpcllvdW5nZXN0KToKKyAgICAgICAgICAgIHNlbGYucmVzeW5jKGxvZywgZGIsIHJlcG9zLCBvdXJZb3VuZ2VzdCwgdGhlaXJZb3VuZ2VzdCkKKyAgICAKKyAgICBkZWYgZW52aXJvbm1lbnRfbmVlZHNfdXBncmFkZShzZWxmLCBkYik6CisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSBzeXN0ZW0gV0hFUkUgbmFtZT0naWN1X3RrdG1nciciKQorICAgICAgICByb3cgPSBjdXJzb3IuZmV0Y2hvbmUoKQorICAgICAgICBpZiBub3Qgcm93IG9yIGludChyb3dbMF0pIDwgc2VsZi5pY3VfdGt0bWdyKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHVwZ3JhZGVfZW52aXJvbm1lbnQoc2VsZiwgZGIpOgorICAgICAgICBjdXJzb3IgPSBkYi5jdXJzb3IoKQorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gc3lzdGVtIFdIRVJFIG5hbWU9J2ljdV90a3RtZ3InIikKKyAgICAgICAgcm93ID0gY3Vyc29yLmZldGNob25lKCkKKyAgICAgICAgaWYgbm90IHJvdzoKKyAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnRfY3JlYXRlZCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZy5pbmZvKCdEbyBub3Qga25vdyBob3cgdG8gdXBncmFkZSBpY3V0cmF4Y3RuX3RpY2tldG1nciB0YWJsZXMgdG8gJWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmljdV90a3RtZ3IoKSkKKwljdXJzb3IuY2xvc2UoKQorCisgICAgZGVmIHJlc3luYyhzZWxmLCBsb2csIGRiLCByZXBvcywgb3VyWW91bmdlc3QsIHRoZWlyWW91bmdlc3QpOgorICAgICAgICBzZWxmLmxvZy5pbmZvKCdyZXN5bmM6IG91cllvdW5nZXN0PSVkIHRoZWlyWW91bmdlc3Q9JWQnICUgKG91cllvdW5nZXN0LCB0aGVpcllvdW5nZXN0KSkKKyAgICAgICAgaWYgKG91cllvdW5nZXN0IDwgMCk6CisgICAgICAgICAgICAjIHN0YXJ0IGF0IHJldiAxCisgICAgICAgICAgICBvdXJZb3VuZ2VzdCA9IDEKKyAgICAgICAgCisgICAgICAgICNzZWxmLnRpY2tldF9wYXR0ZXJuID0gc2VsZi5lbnYuY29uZmlnLmdldCgnaWN1Y29kZXRvb2xzJywgJ3RpY2tldF9wYXR0ZXJuJywgJ15jbGRyYnVnIChcZCspOicpCisKKyAgICAgICAgI2xvZy5pbmZvKCJQYXQ6ICVzIiAlIChzZWxmLnRpY2tldF9wYXR0ZXJuKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50aWNrZXRfbWF0Y2ggPSByZS5jb21waWxlKHNlbGYudGlja2V0X3BhdHRlcm4pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuZW52LmNvbmZpZy5nZXQoJ2ljdWNvZGV0b29scycsICd0aWNrZXRfcGF0dGVybicsICdOb25lRm91bmQnKQorICAgICAgICAgICAgcmFpc2UgVHJhY0Vycm9yKCdDb3VsZCBub3QgY29tcGlsZSBpY3Vjb2RldG9vbHMudGlja2V0X3BhdHRlcm49LyVzLyBidXQgLyVzLzogJXMnICUgKHNlbGYudGlja2V0X3BhdHRlcm4sIGZvdW5kLCBleGNlcHRpb25fdG9fdW5pY29kZShlLCB0cmFjZWJhY2s9VHJ1ZSkpKQorCisjICAgICAgICBzZWxmLnRpY2tldF9tYXRjaCA9IHJlLmNvbXBpbGUoc2VsZi50aWNrZXRfcGF0dGVybi5nZXQoKSkKKyMgICAgICAgIHNlbGYudGlja2V0X21hdGNoID0gcmUuY29tcGlsZSgnLionKQorICAgICAgICBmb3IgaSBpbiByYW5nZShvdXJZb3VuZ2VzdCwgdGhlaXJZb3VuZ2VzdCsxKToKKyAgICAgICAgICAgICNsb2cud2FybmluZygnc3luY2luZzogJWQgWyVkLyVkKzFdJywgaSwgdGhlaXJZb3VuZ2VzdCkKKyAgICAgICAgICAgIGNzZXQgPSByZXBvcy5nZXRfY2hhbmdlc2V0KGkpCisgICAgICAgICAgICBzZWxmLnJldmlzaW9uX2NoYW5nZWQobG9nLCBjc2V0LCBpLCBkYi5jdXJzb3IoKSkKKyAgICAgICAgZGIuY29tbWl0KCkKKyAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCk7CisgICAgICAgIGN1cnNvci5leGVjdXRlKCJ1cGRhdGUgc3lzdGVtIHNldCB2YWx1ZT0nJXMnIHdoZXJlIG5hbWU9J2ljdV90a3RtZ3JfeW91bmdlc3QnIiAlICh0aGVpcllvdW5nZXN0KSkKKyAgICAgICAgZGIuY29tbWl0KCkKKyAgICAgICAgI2xvZy53YXJuKCJzZWxmLmtub3duX3lvdW5nZXN0IHdhcyAlZCBbJWQvJWRdIiAlIChzZWxmLmtub3duX3lvdW5nZXN0LG91cllvdW5nZXN0LHRoZWlyWW91bmdlc3QpKSAKKyAgICAgICAgIyB1cGRhdGUga25vd24geW91bmdlc3QuCisgICAgICAgIHNlbGYua25vd25feW91bmdlc3QgPSB0aGVpcllvdW5nZXN0CisgICAgICAgICNsb2cud2Fybigic2VsZi5rbm93bl95b3VuZ2VzdCBub3cgJWQgWyVkLyVkXSIgJSAoc2VsZi5rbm93bl95b3VuZ2VzdCxvdXJZb3VuZ2VzdCx0aGVpcllvdW5nZXN0KSkgCisgICAgICAgIHJldHVybgorCisgICAgIyBJUmVwb3NpdG9yeUNoYW5nZUxpc3RlbmVyIG1ldGhvZHMKKyAgICAjIE11c3QgY2FsbCB3aXRoOiB0cmFjLWFkbWluIC9ob21lL2ljdXRyYWMgY2hhbmdlc2V0IG1vZGlmaWVkICcoZGVmYXVsdCknIDI5MzMwIDI5MzMzICAtIHVnbHksIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS90cmFjLWRldkBnb29nbGVncm91cHMuY29tL21zZzA0NTY4Lmh0bWwKKyAgICBkZWYgY2hhbmdlc2V0X21vZGlmaWVkKHNlbGYsIHJlcG9zLCBjaGFuZ2VzZXQsIG9sZF9jaGFuZ2VzZXQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnRpY2tldF9tYXRjaCA9IHJlLmNvbXBpbGUoc2VsZi50aWNrZXRfcGF0dGVybikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5lbnYuY29uZmlnLmdldCgnaWN1Y29kZXRvb2xzJywgJ3RpY2tldF9wYXR0ZXJuJywgJ05vbmVGb3VuZCcpCisgICAgICAgICAgICByYWlzZSBUcmFjRXJyb3IoJ0NvdWxkIG5vdCBjb21waWxlIGljdWNvZGV0b29scy50aWNrZXRfcGF0dGVybj0vJXMvIGJ1dCAvJXMvOiAlcycgJSAoc2VsZi50aWNrZXRfcGF0dGVybiwgZm91bmQsIGV4Y2VwdGlvbl90b191bmljb2RlKGUsIHRyYWNlYmFjaz1UcnVlKSkpCisgICAgICAgIGRiID0gc2VsZi5lbnYuZ2V0X2RiX2NueCgpCisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJERUxFVEUgRlJPTSByZXYydGlja2V0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZXJlIHJldj0gJXMgIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGNoYW5nZXNldC5yZXYpKQorICAgICAgICBzZWxmLnJldmlzaW9uX2NoYW5nZWQoc2VsZi5sb2csIGNoYW5nZXNldCwgY2hhbmdlc2V0LnJldiwgZGIuY3Vyc29yKCkpCisJZGIuY29tbWl0KCkKKwkjc2VsZi5sb2cuZXJyb3IoImNoYW5nZXNldF9hZGRlZDogJXNcbiIgJSBjaGFuZ2VzZXQucmV2KQorCisgICAgZGVmIGNoYW5nZXNldF9hZGRlZChzZWxmLCByZXBvcywgY2hhbmdlc2V0KToKKyAgICAgICAgbWVzc2FnZSA9IGNoYW5nZXNldC5tZXNzYWdlIG9yICctLScKKwkjc2VsZi5sb2cuZXJyb3IoImNoYW5nZXNldF9hZGRlZDogJXNcbiIgJSBjaGFuZ2VzZXQucmV2KQorCisgICAgIyBJUmVwb3NpdG9yeU9ic2VydmVyIGZ1bmN0aW9uCisgICAgZGVmIHJldmlzaW9uX2NoYW5nZWQoc2VsZiwgbG9nLCBjc2V0LCBuZXh0X3lvdW5nZXN0LCBjdXJzb3IpOgorICAgICAgICAjIHN5bmMgdGhlICdyZXYydGlja2V0JyB0YWJsZQorICAgICAgICBtZXNzYWdlID0gY3NldC5tZXNzYWdlIG9yICctLScKKyAgICAgICAgIyBjYW4gd2UgbG9hZCBhIHRpY2tldCBmcm9tIGl0PyAgICJ0aWNrZXQ6MTIzNDogTWVzc2FnZSIKKyAgICAgICAgcmVzID0gc2VsZi50aWNrZXRfbWF0Y2gubWF0Y2gobWVzc2FnZS5zdHJpcCgpKQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICB0aWNrbmFtZSA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGludChyZXMuZ3JvdXAoMSkpICMgc2hvdWxkIGJlIGludAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCdSZXZpc2lvbiBbJXNdIGhhZCB1bnBhcnNlYWJsZSB0aWNrZXQgbnVtYmVyIFslc106IFslc10nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0X3lvdW5nZXN0LCB0aWNrbmFtZSwgZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB0cnk6CisJCSNsb2cud2FybmluZygnciVzPSMlcycgJSAoc3RyKG5leHRfeW91bmdlc3QpLCB0aWNrbmFtZSkpCisgICAgICAgICAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIklOU0VSVCBPUiBJR05PUkUgSU5UTyByZXYydGlja2V0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIChyZXYsdGlja2V0KSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZBTFVFUyAoJXMsJXMpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cihuZXh0X3lvdW5nZXN0KSwgdGlja25hbWUpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZTogIyAqYW5vdGhlciogMS4xLiByZXN5bmMgYXR0ZW1wdCB3b24gCisgICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoJ3JldjJ0aWNrZXQgJXMgY291bGQgbm90IGNhY2hlOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRfeW91bmdlc3QsIGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLndhcm5pbmcoJ1JldmlzaW9uICVzIGhhZCB1bm1hdGNoZWQgbWVzc2FnZSAiJXMiIGZvciBwYXR0ZXJuIC8lcy8nICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0X3lvdW5nZXN0LCBjc2V0Lm1lc3NhZ2UsIHNlbGYudGlja2V0X3BhdHRlcm4pKQorICAgIAorICAgIGRlZiByZXBvc2l0b3J5X3Jlc3luYyhzZWxmLCBjdXJzb3IpOgorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiREVMRVRFIEZST00gcmV2MnRpY2tldCIpOworICAgICAgICAKKyAgICBkZWYgdGt0MnJldnMoc2VsZiwgbG9nLCBkYiwgcmVwb3MsIHJlcSwgdGlja2V0KToKKyAgICAgICAgIiIiR2l2ZW4gYSB0aWNrZXQsIHJldHVybiBhIGxpc3Qgb2YgcmV2cy4KKyAgICAgICAgIiIiCisgICAgICAgIAorICAgICAgICBzZWxmLmNoZWNrX3N5bmMobG9nLCBkYiwgcmVwb3MpCisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJzZWxlY3QgcnQucmV2IGZyb20gcmV2MnRpY2tldCBhcyBydCB3aGVyZSBydC50aWNrZXQgPSAlZCBvcmRlciBieSBydC5yZXYiICUgaW50KHRpY2tldCkpCisgICAgICAgIHJldnMgPSBbXQorICAgICAgICBmb3IgcmV2LCBpbiBjdXJzb3I6CisgICAgICAgICAgICByZXYgPSBpbnQocmV2KQorICAgICAgICAgICAgcmV2cy5hcHBlbmQocmV2KQorCWN1cnNvci5jbG9zZSgpCisgICAgICAgIHJldHVybiByZXZzCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2ljdWNvZGV0b29scy90a3RsaXN0LnB5IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGt0bGlzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hN2RlNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9pY3Vjb2RldG9vbHMvdGt0bGlzdC5weQpAQCAtMCwwICsxLDE3MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitpbXBvcnQgcmUKKworaW1wb3J0IHN5cworCitmcm9tIHRyYWMuY29yZSBpbXBvcnQgKgorZnJvbSB0cmFjLnV0aWwgaW1wb3J0IE1hcmt1cAorZnJvbSB0cmFjLndlYiBpbXBvcnQgSVJlcXVlc3RIYW5kbGVyCitmcm9tIHRyYWMud2ViLmNocm9tZSBpbXBvcnQgYWRkX3N0eWxlc2hlZXQsIElOYXZpZ2F0aW9uQ29udHJpYnV0b3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVGVtcGxhdGVQcm92aWRlcgorZnJvbSB0cmFjLndlYi5ocmVmIGltcG9ydCBIcmVmCisjZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLndlYl91aS5jaGFuZ2VzZXQgaW1wb3J0IElDaGFuZ2VzZXRSYW5nZUxpbmsKK2Zyb20gdHJhYy53aWtpIGltcG9ydCB3aWtpX3RvX2h0bWwsIHdpa2lfdG9fb25lbGluZXIsIElXaWtpU3ludGF4UHJvdmlkZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICBGb3JtYXR0ZXIKK2Zyb20gdHJhYy50aWNrZXQgaW1wb3J0IFRpY2tldAorCisKKworY2xhc3MgVGlja2V0bGlzdE1vZHVsZShDb21wb25lbnQpOgorCisgICAgaW1wbGVtZW50cyhJUmVxdWVzdEhhbmRsZXIpCisjICAgIGltcGxlbWVudHMoSVJlcXVlc3RIYW5kbGVyLElDaGFuZ2VzZXRSYW5nZUxpbmspCisKKyAgICBkZWYgcmV2aXNpb25fcmFuZ2VfbGluayhzZWxmLCByZXEsIGJhc2UsIHN0YXJ0LCBlbmQpOgorICAgICAgICByZXR1cm4gKCdUaWNrZXQgTGlzdCcsIHJlcS5ocmVmKCd0a3RsaXN0JyxvbGRfcGF0aD1iYXNlLG5ld19wYXRoPWJhc2Usb2xkPXN0YXJ0LG5ldz1lbmQpKQorCisgICAgX3JlcXVlc3RfcmUgPSByZS5jb21waWxlKHIiL3RrdGxpc3QoPzovKFteL10rKSk/KC8uKik/JCIpCisKKyAgICBkZWYgbWF0Y2hfcmVxdWVzdChzZWxmLCByZXEpOgorICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHNlbGYuX3JlcXVlc3RfcmUsIHJlcS5wYXRoX2luZm8pCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxKToKKyAgICAgICAgI29rLCB3aGF0IGFyZSB3ZSBhYm91dC4KKyAgICAgICAgZGIgPSBzZWxmLmVudi5nZXRfZGJfY254KCkKKyAgICAgICAgdGlja2V0bGlzdCA9IHt9ICAjIGRpY3Qgb2YgdGlja2V0LT4/Pz8KKyAgICAgICAgcmV2bGlzdCA9IHt9ICMgZGljdCBvZiByZXZpc2lvbi0+CisgICAgICAgIHJlcG9zID0gc2VsZi5lbnYuZ2V0X3JlcG9zaXRvcnkocmVxLmF1dGhuYW1lKQorCisgICAgICAgIGlmIG5vdCByZXEucGVybS5oYXNfcGVybWlzc2lvbignVElDS0VUX01PRElGWScpOgorICAgICAgICAgICAgcmV0dXJuIHJlcS5yZWRpcmVjdChyZXEuaHJlZi5icm93c2VyKCkpCisKKyAgICAgICAgIyBzaG9ydGN1dCAtIGlmICJyZXZzIiBpcyBzZXQsIGp1c3QgdXNlIHRoYXQKKyAgICAgICAgcmV2cyA9IHJlcS5hcmdzLmdldCgncmV2cycpCisgICAgICAgIGlmIHJldnMgYW5kIGxlbihyZXZzKT4wOgorICAgICAgICAgICBjb250ZW50X3R5cGUgPSAidGV4dC9odG1sIgorICAgICAgICAgICBhZGRfc3R5bGVzaGVldChyZXEsICdjc3MvaWN1eHRuLmNzcycpCisgICAgICAgICAgIHJlcS5oZGZbJ3RpeC5yZXZzJ10gPSByZXZzCisgICAgICAgICAgIGl0ZW1zID0gcmV2cy5zcGxpdCgpCisgICAgICAgICAgIG91dHN0ciA9ICcxPTAgJworICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgIHJldiA9IGludChpdGVtKSAjIG1heSBmYWlsCisgICAgICAgICAgICAgICBvdXRzdHIgPSAncnQucmV2PSVkJyUocmV2KQorICAgICAgICAgICByZXEuaGRmWydpc19kY3V0J109MQorICAgICAgICAgICByZXEuaGRmWyd0aXguc3FsJ10gPSBvdXRzdHIgIAorICAgICAgICAgICAjIHRlc3QgLSBnZXQgcmVsZXZhbnQgcmV2cworICAgIyAgICAgICAgcHJpbnQgIm90aW1lPSVzLCBudGltZT0lcyIlKHR5cGUob3RpbWUpLHR5cGUobnRpbWUpKQorICAgICAgICAgICAjY3Vyc29yLmV4ZWN1dGUoInNlbGVjdCBkaXN0aW5jdCB0LmlkLHQuc3VtbWFyeSBmcm9tIHRpY2tldCBhcyB0LHJldmlzaW9uIGFzIHIsIHJldjJ0aWNrZXQgYXMgcnQgIgorICAgICAgICAgICAjICAgICAgICAgICAgICAgIiB3aGVyZSB0LmlkID0gcnQudGlja2V0IGFuZCAoJXMpIG9yZGVyIGJ5IHQuaWQiJShvdXRzdHIpKQorICAgICAgICAgICBhbGxzcWwgPSAic2VsZWN0IGRpc3RpbmN0IHRpY2tldCBmcm9tIHJldjJ0aWNrZXQgYXMgcnQgd2hlcmUgJXMgb3JkZXIgYnkgcnQudGlja2V0IiUob3V0c3RyKQorICAgICAgICAgICBhbGxzcWwgPSAic2VsZWN0IHRpY2tldCBmcm9tIHJldjJ0aWNrZXQgd2hlcmUgcmV2PSVzIG9yZGVyIGJ5IHRpY2tldCIKKyAgICAgICAgICAgY3Vyc29yID0gZGIuY3Vyc29yKCkKKyAgICAgICAgICAjIGN1cnNvci5leGVjdXRlKCJzZWxlY3QgdGlja2V0IGZyb20gcmV2MnRpY2tldCB3aGVyZSByZXY9JXMgb3JkZXIgYnkgdGlja2V0IiwoIjIyOTEzIiwpKQorICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgic2VsZWN0IHJ0LnJldiBmcm9tIHJldjJ0aWNrZXQgYXMgcnQgd2hlcmUgcnQudGlja2V0ID0gJWQgb3JkZXIgYnkgcnQucmV2IiAlIGludCg2MDEwKSkKKyAgICAgICAgICAgdGlja2V0ID0gMAorICAgICAgICAgICByZXEuaGRmWyd0aXguc3FsJ10gPSBhbGxzcWwgIAorICAgICAgICAgICByZXEuaGRmWyd0aXguc3FsJ109Inplcm8iCisgICAgICAgICAgIGZvciB0a3QgaW4gY3Vyc29yOgorICAgICAgICAgICAgICAgcmVxLmhkZlsndGl4LnNxbCddPXRrdAorICAgICAgICAgICAgICAgc3VtbSA9ICIiOworICAgICAgICAgICAgICAgI3N5cy5zdGRlcnIud3JpdGUoIiB0a3QgJXMgc3VtbSAlcyBmcm9tIChkLWQpIiAlICh0a3Qsc3VtbSkpCisgICAgICAgICAgICAgICB0aWNrZXQgPSB0aWNrZXQgKyAxCisgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5jb21tZW50JyAlIHRpY2tldF0gPSBzdW1tCisgICAgICAgICAgICAgICAgICAgI3JlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudGh0bWwnICUgdGlja2V0XSA9IHdpa2lfdG9fb25lbGluZXIoIHN1bW0sIHNlbGYuZW52LCBkYiwgc2hvcnRlbj1UcnVlICkKKyAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgICAgICAgICByZXEuaGRmWyd0aXguc3FsJ109ZQorICAgICAgICAgICAgICAgICAgICNyZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnRodG1sJyAlIHRpY2tldF0gPSAnJworICAgICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudCcgJSB0aWNrZXRdID0gJycKKyAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQubnVtYmVyJyAlIHRpY2tldF0gPSB0a3QKKyAgICAgICAgICAgICAgICNhYSA9IE1hcmt1cCgiPGEgY2xhc3M9XCJuZXcgdGlja2V0XCIgaHJlZj1cIiVzXCIgdGl0bGU9XCJUaWNrZXQgeCAobmV3KVwiPiMlczwvYT4iJShyZXEuaHJlZi50aWNrZXQodGt0KSx0a3QpKQorICAgICAgICAgICAgICAgI3JlcS5oZGZbJ3RpY2tldHMuJWQuaHRtbCcgJSB0aWNrZXRdID0gYWEKKyAgICAgICAgICAgIyBzZXQgUkRGIGhlcmUKKyAgICAgICAgICAgcmV0dXJuICd0a3RyZXZzLmNzJywgY29udGVudF90eXBlCisKKyAgICAgICAgbmV3X3BhdGggPSByZXEuYXJncy5nZXQoJ25ld19wYXRoJykKKyAgICAgICAgbmV3X3JldiA9IHJlcS5hcmdzLmdldCgnbmV3JykKKyAgICAgICAgb2xkX3BhdGggPSByZXEuYXJncy5nZXQoJ29sZF9wYXRoJykKKyAgICAgICAgb2xkX3JldiA9IHJlcS5hcmdzLmdldCgnb2xkJykKKworICAgICAgICBuZXdfcGF0aCA9IHJlcG9zLm5vcm1hbGl6ZV9wYXRoKG5ld19wYXRoKQorICAgICAgICBuZXdfcmV2ID0gcmVwb3Mubm9ybWFsaXplX3JldihuZXdfcmV2KQorICAgICAgICBvbGRfcGF0aCA9IHJlcG9zLm5vcm1hbGl6ZV9wYXRoKG9sZF9wYXRoKQorICAgICAgICBvbGRfcmV2ID0gcmVwb3Mubm9ybWFsaXplX3JldihvbGRfcmV2KQorCisKKyAgICAgICAgb2xkX3JldiA9IGludChvbGRfcmV2KQorICAgICAgICBuZXdfcmV2ID0gaW50KG5ld19yZXYpCisgICAgICAgIAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQuZGlmZl9ocmVmJ10gPSByZXEuaHJlZignY2hhbmdlc2V0JyxvbGRfcGF0aD1vbGRfcGF0aCxuZXc9bmV3X3JldixuZXdfcGF0aD1uZXdfcGF0aCxvbGQ9b2xkX3JldikKKworICAgICAgICByZXEuaGRmWydpc19kY3V0J109MQorICAgICAgICAKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm9sZF9yZXYnXSA9IG9sZF9yZXYKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm5ld19yZXYnXSA9IG5ld19yZXYKKyAgICAgICAgcmVxLmhkZlsnY2hhbmdlc2V0Lm9sZF9wYXRoJ10gPSBvbGRfcGF0aAorICAgICAgICByZXEuaGRmWydjaGFuZ2VzZXQubmV3X3BhdGgnXSA9IG5ld19wYXRoCisgICAgICAgIGNvbnRlbnRfdHlwZSA9ICJ0ZXh0L2h0bWwiCisgICAgICAgIGFkZF9zdHlsZXNoZWV0KHJlcSwgJ2Nzcy9pY3V4dG4uY3NzJykKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgIyBmaXJzdCwgZ2V0IHJlbGV2YW50IGNoYW5nZXMuCisgICAgICAgIHJlcS5oZGZbJ3RhcmdldF9wYXRoJ10gPSAnLic7CisgICAgICAgICMgb2theS4gbWFudWFsbHkgdHJvbXAgdGhyb3VnaCAnZW0KKyAgICAgICAgb3NldCA9IHJlcG9zLmdldF9jaGFuZ2VzZXQob2xkX3Jldik7CisgICAgICAgIG5zZXQgPSByZXBvcy5nZXRfY2hhbmdlc2V0KG5ld19yZXYpOworICAgICAgICBvdGltZSA9IGludChvc2V0LmRhdGUpCisgICAgICAgIG50aW1lID0gaW50KG5zZXQuZGF0ZSkKKyAgICAgICAgCisgICAgICAgIG5vcm1fdHI9InN0eWxlPSdib3JkZXI6IDFweCBkYXNoZWQgZ3JlZW47IGJhY2tncm91bmQtY29sb3I6ICNDRkM7JyIKKyAgICAgICAgY2xvc2VkX3RyPSJzdHlsZT0nY29sb3I6ICM2NjY7JyIKKyAgICAgICAgbm9yZXZfdHI9InN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiNGREQ7IGJvcmRlcjogMXB4IHNvbGlkICNGOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyciCisKKyAgICAgICAgcmVxLmhkZlsnc2FtcGxlLm5vcm0udHInXSA9IG5vcm1fdHIKKyAgICAgICAgcmVxLmhkZlsnc2FtcGxlLmNsb3NlZC50ciddID0gY2xvc2VkX3RyCisgICAgICAgIHJlcS5oZGZbJ3NhbXBsZS5ub3Jldi50ciddID0gbm9yZXZfdHIKKyAgICAgICAgCisjICAgICAgICBwcmludCAiIHNlYXJjaGluZyBpbiAgKCVzLSVzKSIgJSAob3RpbWUsIG50aW1lKQorCisgICAgICAgICMgdGVzdCAtIGdldCByZWxldmFudCByZXZzCisgICAgICAgIGN1cnNvciA9IGRiLmN1cnNvcigpCisjICAgICAgICBwcmludCAib3RpbWU9JXMsIG50aW1lPSVzIiUodHlwZShvdGltZSksdHlwZShudGltZSkpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCJzZWxlY3QgZGlzdGluY3QgdC5pZCx0LnN1bW1hcnksdC5vd25lciwgdC5taWxlc3RvbmUsIHQuc3RhdHVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAsIGMudmFsdWUgIiAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICIgZnJvbSB0aWNrZXQgYXMgdCxyZXZpc2lvbiBhcyByLCByZXYydGlja2V0IGFzIHJ0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgIiBsZWZ0IGpvaW4gdGlja2V0X2N1c3RvbSBhcyBjICIKKyAgICAgICAgICAgICAgICAgICAgICAgIiBvbiAgKCBjLm5hbWUgPSAncmV2dycgQU5EIGMudGlja2V0ID0gdC5pZCApICIKKyMgICAgICAgICAgICAgICAgICAgICAgICIgLCB0aWNrZXRfY3VzdG9tIGFzIGMgIgorICAgICAgICAgICAgICAgICAgICAgICAiIHdoZXJlIHQuaWQgPSBydC50aWNrZXQgYW5kIHJ0LnJldiA9IHIucmV2IGFuZCByLnRpbWUgPiAlcyBhbmQgci50aW1lIDw9ICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgImFuZCBleGlzdHMgKCBzZWxlY3QgbmMucmV2IGZyb20gbm9kZV9jaGFuZ2UgYXMgbmMgd2hlcmUgbmMucmV2PXIucmV2IGFuZCBuYy5wYXRoIGxpa2UgJXMgKSAiCisgICAgICAgICAgICAgICAgICAgICAgICJvcmRlciBieSB0LmlkIiwgKHN0cihvdGltZSksIHN0cihudGltZSksIChvbGRfcGF0aCArICIlIikpKQorICAgICAgICB0aWNrZXQgPSAwCisgICAgICAgIGZvciB0a3Qsc3VtbSxvd25yLG1pbGVzdG9uZSxzdGF0dXMsIHJldncgaW4gY3Vyc29yOgorIyAgICAgICAgICAgIHByaW50ICIgdGt0ICVzIHN1bW0gJXMgZnJvbSAoJWQtJWQpIiAlICh0a3Qsc3VtbSwgb3RpbWUsIG50aW1lKQorICAgICAgICAgICAgdGlja2V0ID0gdGlja2V0ICsgMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudCcgJSB0aWNrZXRdID0gc3VtbQorICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudGh0bWwnICUgdGlja2V0XSA9IHdpa2lfdG9fb25lbGluZXIoIHN1bW0sIHNlbGYuZW52LCBkYiwgc2hvcnRlbj1UcnVlICkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmNvbW1lbnRodG1sJyAlIHRpY2tldF0gPSAnJworICAgICAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQuY29tbWVudCcgJSB0aWNrZXRdID0gJycKKyAgICAgICAgICAgIHJlcS5oZGZbJ3RpY2tldHMuJWQubnVtYmVyJyAlIHRpY2tldF0gPSB0a3QKKyAgICAgICAgICAgIGFhID0gTWFya3VwKCI8YSBjbGFzcz1cIm5ldyB0aWNrZXRcIiBocmVmPVwiJXNcIiB0aXRsZT1cIlRpY2tldCB4IChuZXcpXCI+IyVzPC9hPiIlKHJlcS5ocmVmLnRpY2tldCh0a3QpLHRrdCkpCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLmh0bWwnICUgdGlja2V0XSA9IGFhCisgICAgICAgICAgICBhYSA9IE1hcmt1cCgiPGEgY2xhc3M9XCJuZXcgdGlja2V0XCIgaHJlZj1cIiVzXCIgdGl0bGU9XCJUaWNrZXQgeCAobmV3KVwiPiMlczwvYT4iJShyZXEuaHJlZi50aWNrZXQodGt0KSx0a3QpKQorICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5vd25lcicgJSB0aWNrZXRdID0gb3ducgorICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5taWxlc3RvbmUnICUgdGlja2V0XSA9IHdpa2lfdG9fb25lbGluZXIoICJtaWxlc3RvbmU6JXMiJW1pbGVzdG9uZSAsIHNlbGYuZW52LCBkYiwgc2hvcnRlbj1GYWxzZSApCisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnJldmlld2VyJyAlIHRpY2tldF0gPSByZXZ3CisgICAgICAgICAgICByZXEuaGRmWyd0aWNrZXRzLiVkLnN0YXR1c2h0bWwnICUgdGlja2V0XSA9IHdpa2lfdG9fb25lbGluZXIoICIjJXMiJSh0a3QpLCBzZWxmLmVudiwgZGIsIHNob3J0ZW49RmFsc2UgKQorICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC5odG1sJyAlIHRpY2tldF0gPSBhYQorICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC50cicgJSB0aWNrZXRdID0gbm9ybV90cgorICAgICAgICAgICAgaWYgc3RhdHVzIGFuZCBzdGF0dXMuc3RhcnRzd2l0aCgnY2xvc2VkJyk6CisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC50cicgJSB0aWNrZXRdID0gY2xvc2VkX3RyCisgICAgICAgICAgICBpZiAoIG5vdCByZXZ3ICkgb3IgbGVuKHJldncpPDE6CisgICAgICAgICAgICAgICAgcmVxLmhkZlsndGlja2V0cy4lZC50cicgJSB0aWNrZXRdID0gbm9yZXZfdHIKKyAgICAgICAgCisgICAgICAgIHJldHVybiAndGt0bGlzdC5jcycsIGNvbnRlbnRfdHlwZQorCmRpZmYgLS1naXQgYS90cmFjL0ljdUNvZGVUb29scy8wLjEyL2xpY2Vuc2UuaHRtbCBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvbGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTAyNTIKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDUxIEBACis8aHRtbD4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+PC9tZXRhPgorPHRpdGxlPklDVSBMaWNlbnNlIC0gSUNVIDEuOC4xIGFuZCBsYXRlcjwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IEJHQ09MT1I9IiNmZmZmZmYiPgorPGgyPklDVSBMaWNlbnNlIC0gSUNVIDEuOC4xIGFuZCBsYXRlcjwvaDI+CisKKzxwPkNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0U8L3A+CisKKzxwPgorQ29weXJpZ2h0IChjKSAxOTk1LTIwMTAgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCis8L3A+Cis8cD4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCis8L3A+Cis8cD4KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAordG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgordGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorPC9wPgorPHA+CitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCAKK0lOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMCitUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCitSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK05FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKzwvcD4KKzxwPgorRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdCBiZQordXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluCit0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLgorPC9wPgorCis8aHI+Cis8cD48c21hbGw+CitBbGwgdHJhZGVtYXJrcyBhbmQgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4KKzwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9yZWFkbWUudHh0IGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NDlkOTEKLS0tIC9kZXYvbnVsbAorKysgYi90cmFjL0ljdUNvZGVUb29scy8wLjEyL3JlYWRtZS50eHQKQEAgLTAsMCArMSw3NCBAQAorSUNVIENvZGUgVG9vbHMgcGx1Z2luCisKK0NvcHlyaWdodCAoQykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1NlZSBsaWNlbnNlLmh0bWwgZm9yIHRoZSBsaWNlbnNlIGZpbGUuIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZQorSUNVIHByb2plY3QgYW5kIGlzIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UuCisKK1JlcXVpcmVtZW50czoKKwlUcmFjICgwLjExIG9yIDAuMTIrPykKKwlSZXBvc2l0b3J5CisKK0luc3RhbGxpbmc6CisJMS4gaW5zdGFsbCB0aGUgcGx1Z2luIC0gYXQgbGVhc3QgdGhlIHRpY2tldG1hbmFnZXIgYW5kIHJldmlldyBwb3J0aW9uLgorCisgICAgICAgICBhLiBUaGVyZSBpcyBubyBzb3VyY2UgcmVsZWFzZSBhdCB0aGlzIHRpbWU6IEkgcmVjb21tZW5kCisgICAgICAgICAgICAgdGhhdCB5b3UgY2hlY2sgb3V0IHRoaXMgY29kZSB3aXRoIHN2bgorICAgICAgICAgICAgIGFuZCBpbiB0aGlzIGRpcmVjdG9yeSwgcnVuOiAKKyAgICAgICAgICAgICAgICAicHl0aG9uIHNldHVwLnB5IGRldmVsb3AiCisJCisJIGIuIEluIHRyYWMuaW5pIHVuZGVyICdbY29tcG9uZW50c10nIGFkZDoKKwkJaWN1Y29kZXRvb2xzLnJldmlldy5yZXZpZXdtb2R1bGUgPSBlbmFibGVkCisJCWljdWNvZGV0b29scy50aWNrZXRtZ3IudGlja2V0bWFuYWdlciA9IGVuYWJsZWQKKwkKKwlOT1RFOiBEQ1VUIGFuZCBUS1RMSVNUIHBhcnRzIGFyZSBub3Qgd29ya2luZyB5ZXQuIAorCURvbid0IGJvdGhlciB0byBlbmFibGUgdGhlbS4KKworCTIuIGluIHlvdXIgdHJhYy5pbmkgZGVzY3JpYmUgaG93IHlvdXIgY2hhbmdlc2V0cyBkZXNjcmliZSBhIHRpY2tldC4gCisJT3VyIGNoYW5nZXNldHMgbG9vayBsaWtlIHRoaXM6ICAidGlja2V0OjEyMzQ6IGZpeGVkIHRoZSBicm9rZW4gY29kZSIKKwlXZSB1c2UgdGhpcyByZWdleDoKKworCSAgIFtpY3Vjb2RldG9vbHNdCisJICAgdGlja2V0X3BhdHRlcm4gPSBedGlja2V0OihcZCspCisKKwkzLiB5b3UgbWF5IG5lZWQgdG8gcnVuIHRyYWMtYWRtaW4gPGVudmlyb25tZW50PiB1cGdyYWRlIAorCisJNC4gR3JhbnQgcGVybWlzc2lvbiBvZiBJQ1VSRVZJRVdfVklFVyB0byB3aG9tZXZlciB5b3Ugd2FudCB0byAKKwkgICBiZSBhYmxlIHRvIHJldmlldyB0aWNrZXRzLiAKKworCTUuIE5vdywgYW55IHRpY2tldCB3aWxsIGhhdmUgc29tZXRoaW5nIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdoaWNoIHNheXM6CisJICAgICAiTm8gY29tbWl0cyIgLSBubyBjb21taXRzIGFnYWluc3QgdGhpcyB0aWNrZXQKKworCSAgICAgIlJldmlldyAxIGNvbW1pdHMiICAtIHRoZXJlIGlzIG9ubHkgb25lIGNvbW1pdC4gQ2xpY2tpbmcgdGhpcyBsaW5rCisJICAgICAgICAgICAgIHdpbGwganVzdCB0YWtlIHlvdSB0byB0aGF0IHNpbmdsZSBjaGFuZ2VzZXQuCisKKwkgICAgICAiUmV2aWV3IG4gY29tbWl0cyIgIC0gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgY29tbWl0cyBhZ2FpbnN0IHRoaXMKKwkgICAgICAgICAgICAgdGlja2V0LgorCisgCitUcm91Ymxlc2hvb3Rpbmc6CisKK1E6IE15IGNvbW1pdHMgYXJlbid0IGJlaW5nIGZvdW5kIQorQTogQ2hlY2sgdGhlIGRlYnVnIGxvZy4gSXQgd2lsbCBub3RlIGNvbW1pdHMgd2l0aCB1bnBhcnNlYWJsZSBtZXNzYWdlcworCitROiBIb3cgZG8gSSByZXN5bmMgdGhlIGNvbW1pdHM/CitBOiBVbnRpbCB3ZSBpbXBsZW1lbnQgdHJhYyAwLjEyIGNoYW5nZXNldCBsaXN0ZW5lcnMsIHlvdSBjYW4gZG8gdGhpczoKKworICAgIDAuICBiYWNrIHVwIHlvdXIgcGF0aC90by9lbnYvZGIvdHJhYy5kYgorCisgICAgMS4gJCBzcWxpdGUzICBwYXRoL3RvL2Vudi9kYi90cmFjLmRiCisgICAgCisgICAgMi4gc3FsaXRlPiBkZWxldGUgZnJvbSByZXYydGlja2V0OworCisgICAgMy4gc3FsaXRlPiB1cGRhdGUgc3lzdGVtIHNldCB2YWx1ZT0nLTEnIHdoZXJlIG5hbWU9J2ljdV90a3RtZ3JfeW91bmdlc3QnOworCisgICAgNC4gc3FsaXRlPiAgLnF1aXQKKworTm93IHRoZSB0aWNrZXQgbWFuYWdlciB3aWxsIHJlLXN5bmMgdGhlIGZpcnN0IHRpbWUgeW91IGhpdCBhIHRpY2tldC4KKworRklMSU5HIEJVR1MvRkVBVFVSRSBSRVFVRVNUUzoKKyAtIFVzZSBJQ1UncyB0cmFjIHJlcG9zaXRvcnkgYXQgaHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMKKyAtIFVzZSB0aGUgJ2luZnJhc3RydWN0dXJlJyBjb21wb25lbnQgYW5kIGNsZWFybHkgaWRlbnRpZnkgdGhlICdJQ1UgQ29kZSBUb29scworICAgZm9yIFRyYWMnIHdoZW4geW91IGZpbGUgdGhlIGJ1Zy4KKworCisKZGlmZiAtLWdpdCBhL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAuY2ZnIGIvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9zZXR1cC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyM2YyYgotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAuY2ZnCkBAIC0wLDAgKzEsNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorW2VnZ19pbmZvXQordGFnX2J1aWxkID0gZGV2Cit0YWdfc3ZuX3JldmlzaW9uID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvdHJhYy9JY3VDb2RlVG9vbHMvMC4xMi9zZXR1cC5weSBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmRiZGQwMwotLS0gL2Rldi9udWxsCisrKyBiL3RyYWMvSWN1Q29kZVRvb2xzLzAuMTIvc2V0dXAucHkKQEAgLTAsMCArMSwzNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMiBJQk0gYW5kIE90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKworZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcworCitQQUNLQUdFID0gJ0ljdUNvZGVUb29scycKK1ZFUlNJT04gPSAnMC4wLjEnCisKK3NldHVwKAorICAgIG5hbWU9UEFDS0FHRSwgdmVyc2lvbj1WRVJTSU9OLAorICAgIGRlc2NyaXB0aW9uPSdNaXNjZWxsYW5lb3VzIElDVSBFeHRlbnNpb25zIHRvIFRyYWMnLAorICAgIGF1dGhvcj0iU3RldmVuIFIuIExvb21pcyIsIGF1dGhvcl9lbWFpbD0ic3JsQGljdS1wcm9qZWN0Lm9yZyIsCisgICAgbGljZW5zZT0nQlNEJywgdXJsPSdodHRwOi8vaWN1LXByb2plY3Qub3JnJywKKyAgICBwYWNrYWdlcz1maW5kX3BhY2thZ2VzKGV4Y2x1ZGU9Wydlel9zZXR1cCcsICcqLnRlc3RzKiddKSwKKyAgICBwYWNrYWdlX2RhdGE9eworICAgICAgICAnaWN1Y29kZXRvb2xzJzogWworICAgICAgICAgICAgJ2h0ZG9jcy9jc3MvKi5jc3MnLAorICAgICAgICAgICAgJ3RlbXBsYXRlcy8qLmh0bWwnLAorIyMgICAgICAgICAgICAnaHRkb2NzL2ltZy8qLnBuZycsCisgICAgICAgICAgICdodGRvY3MvanMvKi5qcycsCisgICAgICAgIF0KKyAgICB9LAorICAgIGVudHJ5X3BvaW50cyA9IHsKKyAgICAgICAgJ3RyYWMucGx1Z2lucyc6IFsKKyAgICAgICAgICAgICdpY3Vjb2RldG9vbHMudGlja2V0bWdyID0gaWN1Y29kZXRvb2xzLnRpY2tldG1ncicsCisgICAgICAgICAgICAnaWN1Y29kZXRvb2xzLnJldmlldyA9IGljdWNvZGV0b29scy5yZXZpZXcnLAorICAgICAgICAgICAgJ2ljdWNvZGV0b29scy50a3RsaXN0ID0gaWN1Y29kZXRvb2xzLnRrdGxpc3QnLAorICAgICAgICAgICAgJ2ljdWNvZGV0b29scy5kY3V0ID0gaWN1Y29kZXRvb2xzLmRjdXQnCisgICAgICAgIF0KKyAgICB9CispCmRpZmYgLS1naXQgYS91bmljb2RlL2MvQ01ha2VMaXN0cy50eHQgYi91bmljb2RlL2MvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmNjkyYgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDIyIEBACisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBjcmVhdGVkIG9uOiAyMDEwanVuMDMKKyMgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCitwcm9qZWN0KElDVV9VTklfVE9PTFMpCisjIFRoaXMgcmVxdWlyZXMgYW4gaWN1ZGVmcy50eHQgZmlsZSB3aXRoIGNvbnRlbnRzIGxpa2UgdGhlIGZvbGxvd2luZzoKKyMgTG9jYXRpb24gKC0tcHJlZml4KSBvZiB3aGVyZSBJQ1Ugd2FzIGluc3RhbGxlZC4KKyNzZXQoSUNVX0lOU1RfRElSIC9ob21lL21zY2hlcmVyL3N2bi5pY3UvdHJ1bmsvYmxkaW5zdCkKKyMgTG9jYXRpb24gb2YgdGhlIElDVSBzb3VyY2UgdHJlZS4KKyNzZXQoSUNVX1NSQ19ESVIgL2hvbWUvbXNjaGVyZXIvc3ZuLmljdS90cnVuay9zcmMpCitpbmNsdWRlKGljdWRlZnMudHh0KQoraW5jbHVkZV9kaXJlY3RvcmllcygKKyAgJHtJQ1VfSU5TVF9ESVJ9L2luY2x1ZGUKKyAgJHtJQ1VfU1JDX0RJUn0vc291cmNlL2NvbW1vbgorICAke0lDVV9TUkNfRElSfS9zb3VyY2UvaTE4bgorICAke0lDVV9TUkNfRElSfS9zb3VyY2UvdG9vbHMvdG9vbHV0aWwpCitsaW5rX2RpcmVjdG9yaWVzKCR7SUNVX0lOU1RfRElSfS9saWIpCithZGRfc3ViZGlyZWN0b3J5KGdlbnByb3BzKQorYWRkX3N1YmRpcmVjdG9yeShnZW51Y2EpCithZGRfc3ViZGlyZWN0b3J5KGdlbnV0czQ2KQpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL0NNYWtlTGlzdHMudHh0IGIvdW5pY29kZS9jL2dlbnByb3BzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTZiMjcKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgY3JlYXRlZCBvbjogMjAxMGp1bjAzCisjIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisjIGVkaXRlZCBvbjogMjAxMGp1bDIwCisjIGVkaXRlZCBieTogU3R1YXJ0IEcuIEdpbGwKK2FkZF9leGVjdXRhYmxlKGdlbnByb3BzIGdlbnByb3BzLmNwcAorICAgICAgICAgICAgICAgcG5hbWVzYnVpbGRlci5jcHAgY29yZXByb3BzYnVpbGRlci5jcHAKKyAgICAgICAgICAgICAgIGJpZGlwcm9wc2J1aWxkZXIuY3BwIGNhc2Vwcm9wc2J1aWxkZXIuY3BwCisgICAgICAgICAgICAgICBuYW1lc3Byb3BzYnVpbGRlci5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoZ2VucHJvcHMgaWN1dWMgaWN1dHUpCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvTWFrZWZpbGUuaW4gYi91bmljb2RlL2MvZ2VucHJvcHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1NmVkZgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDk3IEBACisjIyBNYWtlZmlsZS5pbiBmb3IgSUNVIC0gdG9vbHMvZ2VucHJvcHMKKyMjIENvcHlyaWdodCAoYykgMTk5OS0yMDA1LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorIyMgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyMgU3RldmVuIFIuIExvb21pcworCisjIyBTb3VyY2UgZGlyZWN0b3J5IGluZm9ybWF0aW9uCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCit0b3BfYnVpbGRkaXIgPSAuLi8uLgorCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9pY3VkZWZzLm1rCisKKyMjIEJ1aWxkIGRpcmVjdG9yeSBpbmZvcm1hdGlvbgorc3ViZGlyID0gdG9vbHMvZ2VucHJvcHMKKworVEFSR0VUX1NUVUJfTkFNRSA9IGdlbnByb3BzCisKK1NFQ1RJT04gPSA4CisKKyNNQU5fRklMRVMgPSAkKFRBUkdFVF9TVFVCX05BTUUpLiQoU0VDVElPTikKKworCisjIyBFeHRyYSBmaWxlcyB0byByZW1vdmUgZm9yICdtYWtlIGNsZWFuJworQ0xFQU5GSUxFUyA9ICp+ICQoREVQUykgJChNQU5fRklMRVMpCisKKyMjIFRhcmdldCBpbmZvcm1hdGlvbgorVEFSR0VUID0gJChCSU5ESVIpLyQoVEFSR0VUX1NUVUJfTkFNRSkkKEVYRUVYVCkKKworaWZuZXEgKCQodG9wX2J1aWxkZGlyKSwkKHRvcF9zcmNkaXIpKQorQ1BQRkxBR1MgKz0gLUkkKHRvcF9idWlsZGRpcikvY29tbW9uCitlbmRpZgorQ1BQRkxBR1MgKz0gLUkkKHRvcF9zcmNkaXIpL2NvbW1vbiAtSSQoc3JjZGlyKS8uLi90b29sdXRpbAorTElCUyA9ICQoTElCSUNVVE9PTFVUSUwpICQoTElCSUNVSTE4TikgJChMSUJJQ1VVQykgJChERUZBVUxUX0xJQlMpICQoTElCX00pCisKK09CSkVDVFMgPSBnZW5wcm9wcy5vIHByb3BzMi5vIHN0b3JlLm8KKworREVQUyA9ICQoT0JKRUNUUzoubz0uZCkKKworIyMgTGlzdCBvZiBwaG9ueSB0YXJnZXRzCisuUEhPTlkgOiBhbGwgYWxsLWxvY2FsIGluc3RhbGwgaW5zdGFsbC1sb2NhbCBjbGVhbiBjbGVhbi1sb2NhbAlcCitkaXN0Y2xlYW4gZGlzdGNsZWFuLWxvY2FsIGRpc3QgZGlzdC1sb2NhbCBjaGVjayBjaGVjay1sb2NhbCBpbnN0YWxsLW1hbgorCisjIyBDbGVhciBzdWZmaXggbGlzdAorLlNVRkZJWEVTIDoKKworIyMgTGlzdCBvZiBzdGFuZGFyZCB0YXJnZXRzCithbGw6IGFsbC1sb2NhbAoraW5zdGFsbDogaW5zdGFsbC1sb2NhbAorY2xlYW46IGNsZWFuLWxvY2FsCitkaXN0Y2xlYW4gOiBkaXN0Y2xlYW4tbG9jYWwKK2Rpc3Q6IGRpc3QtbG9jYWwKK2NoZWNrOiBhbGwgY2hlY2stbG9jYWwKKworYWxsLWxvY2FsOiAkKFRBUkdFVCkgJChNQU5fRklMRVMpCisKK2luc3RhbGwtbG9jYWw6IGFsbC1sb2NhbCBpbnN0YWxsLW1hbgorIwkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKHNiaW5kaXIpCisjCSQoSU5TVEFMTCkgJChUQVJHRVQpICQoREVTVERJUikkKHNiaW5kaXIpCisKK2luc3RhbGwtbWFuOiAkKE1BTl9GSUxFUykKKyMJJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChtYW5kaXIpL21hbiQoU0VDVElPTikKKyMJJChJTlNUQUxMX0RBVEEpICQ/ICQoREVTVERJUikkKG1hbmRpcikvbWFuJChTRUNUSU9OKQorCitkaXN0LWxvY2FsOgorCitjbGVhbi1sb2NhbDoKKwl0ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCAkKFJNVikgJChDTEVBTkZJTEVTKQorCSQoUk1WKSAkKFRBUkdFVCkgJChPQkpFQ1RTKQorCitkaXN0Y2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsCisJJChSTVYpIE1ha2VmaWxlCisKK2NoZWNrLWxvY2FsOiBhbGwtbG9jYWwKKworTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAgJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwljZCAkKHRvcF9idWlsZGRpcikgXAorCSAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKworJChUQVJHRVQpIDogJChPQkpFQ1RTKQorCSQoTElOSy5jYykgJChPVVRPUFQpJEAgJF4gJChMSUJTKSAKKwkkKFBPU1RfQlVJTERfU1RFUCkKKworCislLiQoU0VDVElPTik6ICQoc3JjZGlyKS8lLiQoU0VDVElPTikuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgXAorCSAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKworCitpZmVxICgsJChNQUtFQ01ER09BTFMpKQorLWluY2x1ZGUgJChERVBTKQorZWxzZQoraWZuZXEgKCQocGF0c3Vic3QgJWNsZWFuLCwkKE1BS0VDTURHT0FMUykpLCkKKy1pbmNsdWRlICQoREVQUykKK2VuZGlmCitlbmRpZgorCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvYmlkaXByb3BzYnVpbGRlci5jcHAgYi91bmljb2RlL2MvZ2VucHJvcHMvYmlkaXByb3BzYnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmYmJjZQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9iaWRpcHJvcHNidWlsZGVyLmNwcApAQCAtMCwwICsxLDUzNSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIGJpZGlwcm9wc2J1aWxkZXIuY3BwICh3YXMgZ2VuYmlkaS9zdG9yZS5jKQorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgb246IDIwMDRkZWMzMAorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisqCisqICAgU3RvcmUgVW5pY29kZSBiaWRpL3NoYXBpbmcgcHJvcGVydGllcyBlZmZpY2llbnRseSBmb3IKKyogICByYW5kb20gYWNjZXNzLgorKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJjbWVtb3J5LmgiCisjaW5jbHVkZSAiY3N0cmluZy5oIgorI2luY2x1ZGUgInBwdWNkLmgiCisjaW5jbHVkZSAidWFycnNvcnQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VkYXRhLmgiCisjaW5jbHVkZSAidW5ld2RhdGEuaCIKKyNpbmNsdWRlICJ1dHJpZTIuaCIKKyNpbmNsdWRlICJ3cml0ZXNyYy5oIgorI2luY2x1ZGUgInViaWRpX3Byb3BzLmgiCisjaW5jbHVkZSAiZ2VucHJvcHMuaCIKKworLyogVW5pY29kZSBiaWRpL3NoYXBpbmcgcHJvcGVydGllcyBmaWxlIGZvcm1hdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgZm9ybWF0IHByZXBhcmVkIGFuZCB3cml0dGVuIGhlcmUgY29udGFpbnMgc2V2ZXJhbCBkYXRhCitzdHJ1Y3R1cmVzIHRoYXQgc3RvcmUgaW5kZXhlcyBvciBkYXRhLgorCitCZWZvcmUgdGhlIGRhdGEgY29udGVudHMgZGVzY3JpYmVkIGJlbG93LCB0aGVyZSBhcmUgdGhlIGhlYWRlcnMgcmVxdWlyZWQgYnkKK3RoZSB1ZGF0YSBBUEkgZm9yIGxvYWRpbmcgSUNVIGRhdGEuIEVzcGVjaWFsbHksIGEgVURhdGFJbmZvIHN0cnVjdHVyZQorcHJlY2VkZXMgdGhlIGFjdHVhbCBkYXRhLiBJdCBjb250YWlucyBwbGF0Zm9ybSBwcm9wZXJ0aWVzIHZhbHVlcyBhbmQgdGhlCitmaWxlIGZvcm1hdCB2ZXJzaW9uLgorCitUaGUgZm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgZm9ybWF0IHZlcnNpb24gMi4wIC4KKworVGhlIGZpbGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzOgorCisgICAgY29uc3QgaW50MzJfdCBpbmRleGVzW2kwXSB3aXRoIHZhbHVlcyBpMCwgaTEsIC4uLjoKKyAgICAoc2VlIFVCSURJX0lYXy4uLiBjb25zdGFudHMgZm9yIG5hbWVzIG9mIGluZGV4ZXMpCisKKyAgICBpMCBpbmRleExlbmd0aDsgLS0gbGVuZ3RoIG9mIGluZGV4ZXNbXSAoVUJJRElfSVhfVE9QKQorICAgIGkxIGRhdGFMZW5ndGg7IC0tIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgcG9zdC1oZWFkZXIgZGF0YSAoaW5jbC4gaW5kZXhlc1tdKQorICAgIGkyIHRyaWVTaXplOyAtLSBzaXplIGluIGJ5dGVzIG9mIHRoZSBiaWRpL3NoYXBpbmcgcHJvcGVydGllcyB0cmllCisgICAgaTMgbWlycm9yTGVuZ3RoOyAtLSBsZW5ndGggaW4gdWludDMyX3Qgb2YgdGhlIGJpZGkgbWlycm9yaW5nIGFycmF5CisKKyAgICBpNCBqZ1N0YXJ0OyAtLSBmaXJzdCBjb2RlIHBvaW50IHdpdGggSm9pbmluZ19Hcm91cCBkYXRhCisgICAgaTUgamdMaW1pdDsgLS0gbGltaXQgY29kZSBwb2ludCBmb3IgSm9pbmluZ19Hcm91cCBkYXRhCisKKyAgICBpNi4uaTE0IHJlc2VydmVkSW5kZXhlczsgLS0gcmVzZXJ2ZWQgdmFsdWVzOyAwIGZvciBub3cKKworICAgIGkxNSBtYXhWYWx1ZXM7IC0tIG1heGltdW0gY29kZSB2YWx1ZXMgZm9yIGVudW1lcmF0ZWQgcHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgIGJpdHMgMjMuLjE2IGNvbnRhaW4gdGhlIG1heCB2YWx1ZSBmb3IgSm9pbmluZ19Hcm91cCwKKyAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdGhlIGJpdHMgYXJlIHVzZWQgbGlrZSBlbnVtIGZpZWxkcyBpbiB0aGUgdHJpZSB3b3JkCisKKyAgICBTZXJpYWxpemVkIHRyaWUsIHNlZSB1dHJpZTIuaDsKKworICAgIGNvbnN0IHVpbnQzMl90IG1pcnJvcnNbbWlycm9yTGVuZ3RoXTsKKworICAgIGNvbnN0IHVpbnQ4X3QgamdBcnJheVtpNS1pNF07IC0tIChpNS1pNCkgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgNAorCitUcmllIGRhdGEgd29yZDoKK0JpdHMKKzE1Li4xMyAgc2lnbmVkIGRlbHRhIHRvIGJpZGkgbWlycm9yaW5nIGNvZGUgcG9pbnQKKyAgICAgICAgKGFkZCBkZWx0YSB0byBpbnB1dCBjb2RlIHBvaW50KQorICAgICAgICAwIG5vIHN1Y2ggY29kZSBwb2ludCAoc291cmNlIG1hcHMgdG8gaXRzZWxmKQorICAgICAgICAtMy4uLTEsIDEuLjMgZGVsdGEKKyAgICAgICAgLTQgbG9vayBpbiBtaXJyb3JzIHRhYmxlCisgICAgMTIgIGlzIG1pcnJvcmVkCisgICAgMTEgIEJpZGlfQ29udHJvbAorICAgIDEwICBKb2luX0NvbnRyb2wKKyA5Li4gOCAgcmVzZXJ2ZWQgKHNldCB0byAwKQorIDcuLiA1ICBKb2luaW5nX1R5cGUKKyA0Li4gMCAgQmlEaSBjYXRlZ29yeQorCisKK01pcnJvcnM6CitTdG9yZXMgc29tZSBvZiB0aGUgYmlkaSBtaXJyb3JpbmcgZGF0YSwgd2hlcmUgZWFjaCBjb2RlIHBvaW50IG1hcHMgdG8KK2F0IG1vc3Qgb25lIG90aGVyLgorTW9zdCBjb2RlIHBvaW50cyBkbyBub3QgaGF2ZSBhIG1pcnJvcmluZyBjb2RlIHBvaW50OyBtb3N0IHRoYXQgZG8gaGF2ZSBhIHNpZ25lZAorZGVsdGEgc3RvcmVkIGluIHRoZSB0cmllIGRhdGEgdmFsdWUuIE9ubHkgdGhvc2Ugd2hlcmUgdGhlIGRlbHRhIGRvZXMgbm90IGZpdAoraW50byB0aGUgdHJpZSBkYXRhIGFyZSBzdG9yZWQgaW4gdGhpcyB0YWJsZS4KKworTG9naWNhbGx5LCB0aGlzIGlzIGEgdHdvLWNvbHVtbiB0YWJsZSB3aXRoIHNvdXJjZSBhbmQgbWlycm9yIGNvZGUgcG9pbnRzLgorCitQaHlzaWNhbGx5LCB0aGUgdGFibGUgaXMgY29tcHJlc3NlZCBieSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgZWFjaAorbWlycm9yIGNvZGUgcG9pbnQgaXMgYWxzbyBhIHNvdXJjZSBjb2RlIHBvaW50CisoZWFjaCBvZiB0aGVtIGlzIGEgbWlycm9yIG9mIHRoZSBvdGhlcikuCitUaGVyZWZvcmUsIGJvdGggbG9naWNhbCBjb2x1bW5zIGNvbnRhaW4gdGhlIHNhbWUgc2V0IG9mIGNvZGUgcG9pbnRzLCB3aGljaCBuZWVkcwordG8gYmUgc3RvcmVkIG9ubHkgb25jZS4KKworVGhlIHRhYmxlIHN0b3JlcyBzb3VyY2UgY29kZSBwb2ludHMsIGFuZCBhbHNvIGZvciBlYWNoIHRoZSBpbmRleCBvZiBpdHMgbWlycm9yCitjb2RlIHBvaW50IGluIHRoZSBzYW1lIHRhYmxlLCBpbiBhIHNpbXBsZSBhcnJheSBvZiB1aW50MzJfdC4KK0JpdHMKKzMxLi4yMSAgaW5kZXggdG8gbWlycm9yIGNvZGUgcG9pbnQgKHVuc2lnbmVkKQorMjAuLiAwICBzb3VyY2UgY29kZSBwb2ludAorCitUaGUgdGFibGUgaXMgc29ydGVkIGJ5IHNvdXJjZSBjb2RlIHBvaW50cy4KKworCitKb2luaW5nX0dyb3VwIGFycmF5OgorVGhlIEpvaW5pbmdfR3JvdXAgdmFsdWVzIGRvIG5vdCBmaXQgaW50byB0aGUgMTYtYml0IHRyaWUsIGJ1dCB0aGUgZGF0YSBpcyBhbHNvCitsaW1pdGVkIHRvIGEgc21hbGwgcmFuZ2Ugb2YgY29kZSBwb2ludHMgKEFyYWJpYyBhbmQgU3lyaWFjKSBhbmQgbm90Cit3ZWxsIGNvbXByZXNzaWJsZS4KKworVGhlIHN0YXJ0IGFuZCBsaW1pdCBjb2RlIHBvaW50cyBmb3IgdGhlIHJhbmdlIGFyZSBzdG9yZWQgaW4gdGhlIGluZGV4ZXNbXQorYXJyYXksIGFuZCB0aGUgamdBcnJheVtdIHN0b3JlcyBhIGJ5dGUgZm9yIGVhY2ggb2YgdGhlc2UgY29kZSBwb2ludHMsCitjb250YWluaW5nIHRoZSBKb2luaW5nX0dyb3VwIHZhbHVlLgorCitBbGwgY29kZSBwb2ludHMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIGhhdmUgTm9fSm9pbmluZ19Hcm91cCAoMCkuCisKKy0tLSBDaGFuZ2VzIGluIGZvcm1hdCB2ZXJzaW9uIDIgLS0tCisKK0NoYW5nZSBmcm9tIFVUcmllIHRvIFVUcmllMi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworVV9OQU1FU1BBQ0VfVVNFCisKKy8qIFVEYXRhSW5mbyBjZi4gdWRhdGEuaCAqLworc3RhdGljIFVEYXRhSW5mbyBkYXRhSW5mbz17CisgICAgc2l6ZW9mKFVEYXRhSW5mbyksCisgICAgMCwKKworICAgIFVfSVNfQklHX0VORElBTiwKKyAgICBVX0NIQVJTRVRfRkFNSUxZLAorICAgIFVfU0laRU9GX1VDSEFSLAorICAgIDAsCisKKyAgICAvKiBkYXRhRm9ybWF0PSJCaURpIiAqLworICAgIHsgVUJJRElfRk1UXzAsIFVCSURJX0ZNVF8xLCBVQklESV9GTVRfMiwgVUJJRElfRk1UXzMgfSwKKyAgICB7IDIsIDAsIDAsIDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcm1hdFZlcnNpb24gKi8KKyAgICB7IDYsIDAsIDAsIDAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhdGFWZXJzaW9uICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBCaURpUHJvcHNCdWlsZGVyIDogcHVibGljIFByb3BzQnVpbGRlciB7CitwdWJsaWM6CisgICAgQmlEaVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgfkJpRGlQcm9wc0J1aWxkZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRVbmljb2RlVmVyc2lvbihjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BzKGNvbnN0IFVuaVByb3BzICYsIGNvbnN0IFVuaWNvZGVTZXQgJm5ld1ZhbHVlcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworcHJpdmF0ZToKKyAgICBpbnQzMl90IGVuY29kZUJpZGlNaXJyb3JpbmdHbHlwaChVQ2hhcjMyIHNyYywgVUNoYXIzMiBlbmQsIFVDaGFyMzIgbWlycm9yLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZvaWQgbWFrZU1pcnJvcihVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgVW5pY29kZVNldCByZWxldmFudFByb3BzOworICAgIFVUcmllMiAqcFRyaWU7CisgICAgdWludDhfdCBqZ0FycmF5WzB4MzAwXTsgLyogYXQgbW9zdCBmb3IgVSswNjAwLi5VKzA4RkYgKi8KKyAgICBVQ2hhcjMyIGpnU3RhcnQ7ICAvLyBGaXJzdCBjb2RlIHBvaW50IHdpdGggYSBKb2luaW5nX0dyb3VwLgorICAgIFVDaGFyMzIgamdMaW1pdDsgIC8vIE9uZSBwYXN0IHRoZSBsYXN0IG9uZS4KKyAgICB1aW50MzJfdCBtaXJyb3JzW1VCSURJX01BWF9NSVJST1JfSU5ERVgrMV1bMl07CisgICAgaW50MzJfdCBtaXJyb3JUb3A7Cit9OworCitCaURpUHJvcHNCdWlsZGVyOjpCaURpUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSkKKyAgICAgICAgOiBwVHJpZShOVUxMKSwKKyAgICAgICAgICBqZ1N0YXJ0KDApLCBqZ0xpbWl0KDApLAorICAgICAgICAgIG1pcnJvclRvcCgwKSB7CisgICAgLy8gVGhpcyBidWlsZGVyIGVuY29kZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgorICAgIHJlbGV2YW50UHJvcHMuCisgICAgICAgIGFkZChVQ0hBUl9CSURJX0NPTlRST0wpLgorICAgICAgICBhZGQoVUNIQVJfQklESV9NSVJST1JFRCkuCisgICAgICAgIGFkZChVQ0hBUl9CSURJX0NMQVNTKS4KKyAgICAgICAgYWRkKFVDSEFSX0JJRElfTUlSUk9SSU5HX0dMWVBIKS4KKyAgICAgICAgYWRkKFVDSEFSX0pPSU5fQ09OVFJPTCkuCisgICAgICAgIGFkZChVQ0hBUl9KT0lOSU5HX0dST1VQKS4KKyAgICAgICAgYWRkKFVDSEFSX0pPSU5JTkdfVFlQRSk7CisgICAgcFRyaWU9dXRyaWUyX29wZW4oMCwgMCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogYmlkaXByb3BzYnVpbGRlciB1dHJpZTJfb3BlbigpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgIH0KKyAgICB1cHJ2X21lbXNldChqZ0FycmF5LCBVX0pHX05PX0pPSU5JTkdfR1JPVVAsIHNpemVvZihqZ0FycmF5KSk7Cit9CisKK0JpRGlQcm9wc0J1aWxkZXI6On5CaURpUHJvcHNCdWlsZGVyKCkgeworICAgIHV0cmllMl9jbG9zZShwVHJpZSk7Cit9CisKK3ZvaWQKK0JpRGlQcm9wc0J1aWxkZXI6OnNldFVuaWNvZGVWZXJzaW9uKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uKSB7CisgICAgdXBydl9tZW1jcHkoZGF0YUluZm8uZGF0YVZlcnNpb24sIHZlcnNpb24sIDQpOworfQorCisvKiBiaWRpIG1pcnJvcmluZyB0YWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbnQzMl90CitCaURpUHJvcHNCdWlsZGVyOjplbmNvZGVCaWRpTWlycm9yaW5nR2x5cGgoVUNoYXIzMiBzcmMsIFVDaGFyMzIgZW5kLCBVQ2hhcjMyIG1pcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSB8fCBtaXJyb3I8MCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYoc3JjIT1lbmQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgImdlbnByb3BzIGVycm9yOiByYW5nZSBVKyUwNGxYLi5VKyUwNGxYIGFsbCB3aXRoIHRoZSBzYW1lICIKKyAgICAgICAgICAgICAgICAiQmlkaV9NaXJyb3JpbmdfR2x5cGggVSslMDRsWFxuIiwKKyAgICAgICAgICAgICAgICAobG9uZylzcmMsIChsb25nKWVuZCwgKGxvbmcpbWlycm9yKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludDMyX3QgZGVsdGE9bWlycm9yLXNyYzsKKyAgICBpZihkZWx0YT09MCkgeworICAgICAgICByZXR1cm4gMDsgLyogbWFwcGluZyB0byBzZWxmPW5vIG1hcHBpbmcgKi8KKyAgICB9CisKKyAgICBpZihkZWx0YTxVQklESV9NSU5fTUlSUk9SX0RFTFRBIHx8IFVCSURJX01BWF9NSVJST1JfREVMVEE8ZGVsdGEpIHsKKyAgICAgICAgLyogZGVsdGEgZG9lcyBub3QgZml0IGludG8gdGhlIHRyaWUgcHJvcGVydGllcyB2YWx1ZSwgc3RvcmUgaW4gdGhlIG1pcnJvcnNbXSB0YWJsZSAqLworICAgICAgICBpZihtaXJyb3JUb3A9PUxFTkdUSE9GKG1pcnJvcnMpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgImdlbnByb3BzIGVycm9yOiB0b28gbWFueSBsb25nLWRpc3RhbmNlIEJpZGlfTWlycm9yaW5nX0dseXBoIG1hcHBpbmdzOyAiCisgICAgICAgICAgICAgICAgICAgICJVQklESV9NQVhfTUlSUk9SX0lOREVYIGNhbiBvbmx5IGJlIGluY3JlYXNlZCBieSAiCisgICAgICAgICAgICAgICAgICAgICJyZWRlc2lnbmluZyB0aGUgdWJpZGkuaWN1IGRhdGEgYml0IGZpZWxkc1xuIik7CisgICAgICAgICAgICBlcnJvckNvZGU9VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHBvc3NpYmxlOiBzZWFyY2ggdGhlIHRhYmxlIHNvIGZhciBhbmQgc2VlIGlmIHNyYyBpcyBhbHJlYWR5IGxpc3RlZCAqLworCisgICAgICAgIG1pcnJvcnNbbWlycm9yVG9wXVswXT0odWludDMyX3Qpc3JjOworICAgICAgICBtaXJyb3JzW21pcnJvclRvcF1bMV09KHVpbnQzMl90KW1pcnJvcjsKKyAgICAgICAgKyttaXJyb3JUb3A7CisKKyAgICAgICAgLyogc2V0IGFuIGVzY2FwZSBtYXJrZXIgaW4gc3JjJ3MgcHJvcGVydGllcyAqLworICAgICAgICBkZWx0YT1VQklESV9FU0NfTUlSUk9SX0RFTFRBOworICAgIH0KKyAgICByZXR1cm4gZGVsdGE7Cit9CisKK3ZvaWQKK0JpRGlQcm9wc0J1aWxkZXI6OnNldFByb3BzKGNvbnN0IFVuaVByb3BzICZwcm9wcywgY29uc3QgVW5pY29kZVNldCAmbmV3VmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkgfHwgbmV3VmFsdWVzLmNvbnRhaW5zTm9uZShyZWxldmFudFByb3BzKSkgeyByZXR1cm47IH0KKworICAgIFVDaGFyMzIgc3RhcnQ9cHJvcHMuc3RhcnQ7CisgICAgVUNoYXIzMiBlbmQ9cHJvcHMuZW5kOworCisgICAgaW50MzJfdCBkZWx0YT1lbmNvZGVCaWRpTWlycm9yaW5nR2x5cGgoc3RhcnQsIGVuZCwgcHJvcHMuYm1nLCBlcnJvckNvZGUpOworICAgIHVpbnQzMl90IHZhbHVlPSh1aW50MzJfdClkZWx0YTw8VUJJRElfTUlSUk9SX0RFTFRBX1NISUZUOworICAgIGlmKHByb3BzLmJpblByb3BzW1VDSEFSX0JJRElfTUlSUk9SRURdKSB7CisgICAgICAgIHZhbHVlfD1VX01BU0soVUJJRElfSVNfTUlSUk9SRURfU0hJRlQpOworICAgIH0KKyAgICBpZihwcm9wcy5iaW5Qcm9wc1tVQ0hBUl9CSURJX0NPTlRST0xdKSB7CisgICAgICAgIHZhbHVlfD1VX01BU0soVUJJRElfQklESV9DT05UUk9MX1NISUZUKTsKKyAgICB9CisgICAgaWYocHJvcHMuYmluUHJvcHNbVUNIQVJfSk9JTl9DT05UUk9MXSkgeworICAgICAgICB2YWx1ZXw9VV9NQVNLKFVCSURJX0pPSU5fQ09OVFJPTF9TSElGVCk7CisgICAgfQorICAgIHZhbHVlfD0odWludDMyX3QpcHJvcHMuZ2V0SW50UHJvcChVQ0hBUl9KT0lOSU5HX1RZUEUpPDxVQklESV9KVF9TSElGVDsKKyAgICB2YWx1ZXw9KHVpbnQzMl90KXByb3BzLmdldEludFByb3AoVUNIQVJfQklESV9DTEFTUyk7CisgICAgdXRyaWUyX3NldFJhbmdlMzIocFRyaWUsIHN0YXJ0LCBlbmQsIHZhbHVlLCBUUlVFLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBCaURpUHJvcHNCdWlsZGVyIHV0cmllMl9zZXRSYW5nZTMyKCkgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBzdG9yZSBKb2luaW5nX0dyb3VwIHZhbHVlcyBmcm9tIHZlY3RvciBjb2x1bW4gMSBpbiBhIHNpbXBsZSBieXRlIGFycmF5ICovCisgICAgaW50MzJfdCBqZz1wcm9wcy5nZXRJbnRQcm9wKFVDSEFSX0pPSU5JTkdfR1JPVVApOworICAgIGlmKGpnIT1VX0pHX05PX0pPSU5JTkdfR1JPVVApIHsKKyAgICAgICAgaWYoc3RhcnQ8MHg2MDAgfHwgMHg4ZmY8ZW5kKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBKb2luaW5nX0dyb3VwIGZvciBvdXQtb2YtcmFuZ2UgY29kZSBwb2ludHMgVSslMDRseC4uVSslMDRseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpc3RhcnQsIChsb25nKWVuZCk7CisgICAgICAgICAgICBlcnJvckNvZGU9VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmKHN0YXJ0PGpnU3RhcnQgfHwgamdTdGFydD09MCkgeyBqZ1N0YXJ0PXN0YXJ0OyB9CisgICAgICAgIGlmKGVuZD49amdMaW1pdCB8fCBqZ0xpbWl0PT0wKSB7IGpnTGltaXQ9ZW5kKzE7IH0KKyAgICB9CisgICAgLy8gT24gdGhlIG9mZi1jaGFuY2UgdGhhdCBhIGJsb2NrIGlzIGRlZmluZWQgd2l0aCBhIEpvaW5pbmdfR3JvdXAKKyAgICAvLyB0aGF0IGlzIHRoZW4gb3ZlcnJpZGRlbiBieSBOb19Kb2luaW5nX0dyb3VwLAorICAgIC8vIHdlIHNldCB0aGF0IHRvbywgYnV0IG9ubHkgaW5zaWRlIFUrMDYwMC4uVSswOEZGLgorICAgIGlmKGVuZD49MHg2MDAgJiYgc3RhcnQ8PTB4OGZmKSB7CisgICAgICAgIGlmKHN0YXJ0PDB4NjAwKSB7IHN0YXJ0PTB4NjAwOyB9CisgICAgICAgIGlmKGVuZD4weDhmZikgeyBlbmQ9MHg4ZmY7IH0KKworICAgICAgICAvKiBzZXQgSm9pbmluZ19Hcm91cCB2YWx1ZSBmb3Igc3RhcnQuLmVuZCAqLworICAgICAgICBmb3IoVUNoYXIzMiBjPXN0YXJ0OyBjPD1lbmQ7ICsrYykgeworICAgICAgICAgICAgamdBcnJheVtjLTB4NjAwXT0odWludDhfdClqZzsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogZ2VuZXJhdGUgb3V0cHV0IGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludDMyX3QgVV9DQUxMQ09OVgorY29tcGFyZU1pcnJvcihjb25zdCB2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICpsZWZ0LCBjb25zdCB2b2lkICpyaWdodCkgeworICAgIFVDaGFyMzIgbCwgcjsKKworICAgIGw9VUJJRElfR0VUX01JUlJPUl9DT0RFX1BPSU5UKCgoY29uc3QgdWludDMyX3QgKilsZWZ0KVswXSk7CisgICAgcj1VQklESV9HRVRfTUlSUk9SX0NPREVfUE9JTlQoKChjb25zdCB1aW50MzJfdCAqKXJpZ2h0KVswXSk7CisgICAgcmV0dXJuIGwtcjsKK30KKwordm9pZAorQmlEaVByb3BzQnVpbGRlcjo6bWFrZU1pcnJvcihVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICAvKiBzb3J0IHRoZSBtaXJyb3JpbmcgdGFibGUgYnkgc291cmNlIGNvZGUgcG9pbnRzICovCisgICAgdXBydl9zb3J0QXJyYXkobWlycm9ycywgbWlycm9yVG9wLCA4LAorICAgICAgICAgICAgICAgICAgIGNvbXBhcmVNaXJyb3IsIE5VTEwsIEZBTFNFLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIC8qCisgICAgICogcmVkdWNlIHRoZSAyLWNvbHVtbiB0YWJsZSB0byBhIHNpbmdsZSBjb2x1bW4KKyAgICAgKiBieSBwdXR0aW5nIHRoZSBpbmRleCB0byB0aGUgbWlycm9yIGVudHJ5IGludG8gdGhlIHNvdXJjZSBlbnRyeQorICAgICAqCisgICAgICogZmlyc3Q6CisgICAgICogZmluZCBlYWNoIG1pcnJvciBjb2RlIHBvaW50IGluIHRoZSBzb3VyY2UgY29sdW1uIGFuZCBzZXQgZWFjaCBvdGhlcidzIGluZGV4ZXMKKyAgICAgKgorICAgICAqIHNlY29uZDoKKyAgICAgKiByZWR1Y2UgdGhlIHRhYmxlLCBjb21iaW5lIHRoZSBzb3VyY2UgY29kZSBwb2ludHMgd2l0aCB0aGVpciBpbmRleGVzCisgICAgICogYW5kIHN0b3JlIGFzIGEgc2ltcGxlIGFycmF5IG9mIHVpbnQzMl90CisgICAgICovCisgICAgZm9yKGludDMyX3QgaT0wOyBpPG1pcnJvclRvcDsgKytpKSB7CisgICAgICAgIHVpbnQzMl90IGM9bWlycm9yc1tpXVsxXTsgLyogbWlycm9yIGNvZGUgcG9pbnQgKi8KKyAgICAgICAgaWYoYz4weDFmZmZmZikgeworICAgICAgICAgICAgY29udGludWU7IC8qIHRoaXMgZW50cnkgYWxyZWFkeSBoYXMgYW4gaW5kZXggKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qIHNlYXJjaCBmb3IgdGhlIG1pcnJvciBjb2RlIHBvaW50IGluIHRoZSBzb3VyY2UgY29sdW1uICovCisgICAgICAgIGludDMyX3Qgc3RhcnQsIGxpbWl0LCBzdGVwOworICAgICAgICBpZihjPG1pcnJvcnNbaV1bMF0pIHsKKyAgICAgICAgICAgIC8qIHNlYXJjaCBiZWZvcmUgaSAqLworICAgICAgICAgICAgc3RhcnQ9aS0xOworICAgICAgICAgICAgbGltaXQ9LTE7CisgICAgICAgICAgICBzdGVwPS0xOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhcnQ9aSsxOworICAgICAgICAgICAgbGltaXQ9bWlycm9yVG9wOworICAgICAgICAgICAgc3RlcD0xOworICAgICAgICB9CisKKyAgICAgICAgZm9yKGludDMyX3Qgaj1zdGFydDs7IGorPXN0ZXApIHsKKyAgICAgICAgICAgIGlmKGo9PWxpbWl0KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IGJpZGkgbWlycm9yIGRvZXMgbm90IHJvdW5kdHJpcCAtICUwNGx4LT4lMDRseC0+P1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKW1pcnJvcnNbaV1bMF0sIChsb25nKW1pcnJvcnNbaV1bMV0pOworICAgICAgICAgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihjPT1taXJyb3JzW2pdWzBdKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBmb3VuZCB0aGUgbWlycm9yIGNvZGUgcG9pbnQgYyBpbiB0aGUgc291cmNlIGNvbHVtbiwKKyAgICAgICAgICAgICAgICAgKiBzZXQgYm90aCBlbnRyaWVzJyBpbmRleGVzIHRvIGVhY2ggb3RoZXIKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZihVQklESV9HRVRfTUlSUk9SX0NPREVfUE9JTlQobWlycm9yc1tpXVswXSkhPVVCSURJX0dFVF9NSVJST1JfQ09ERV9QT0lOVChtaXJyb3JzW2pdWzFdKSkgeworICAgICAgICAgICAgICAgICAgICAvKiByb3VuZHRyaXAgY2hlY2sgZmFpbHMgKi8KKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdlbnByb3BzIGVycm9yOiBiaWRpIG1pcnJvcnMgZG8gbm90IHJvdW5kdHJpcCAtICUwNGx4LT4lMDRseC0+JTA0bHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpbWlycm9yc1tpXVswXSwgKGxvbmcpbWlycm9yc1tpXVsxXSwgKGxvbmcpbWlycm9yc1tqXVsxXSk7CisgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWlycm9yc1tpXVsxXXw9KHVpbnQzMl90KWo8PFVCSURJX01JUlJPUl9JTkRFWF9TSElGVDsKKyAgICAgICAgICAgICAgICAgICAgbWlycm9yc1tqXVsxXXw9KHVpbnQzMl90KWk8PFVCSURJX01JUlJPUl9JTkRFWF9TSElGVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBub3cgdGhlIHNlY29uZCBzdGVwLCB0aGUgYWN0dWFsIHJlZHVjdGlvbiBvZiB0aGUgdGFibGUgKi8KKyAgICB1aW50MzJfdCAqcmVkdWNlZE1pcnJvcj1taXJyb3JzWzBdOworICAgIGZvcihpbnQzMl90IGk9MDsgaTxtaXJyb3JUb3A7ICsraSkgeworICAgICAgICByZWR1Y2VkTWlycm9yW2ldPW1pcnJvcnNbaV1bMF18KG1pcnJvcnNbaV1bMV0mfjB4MWZmZmZmKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IGluZGV4ZXNbVUJJRElfSVhfVE9QXT17CisgICAgVUJJRElfSVhfVE9QLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgdWludDhfdCB0cmllQmxvY2tbNDAwMDBdOworc3RhdGljIGludDMyX3QgdHJpZVNpemU7CisKK3ZvaWQKK0JpRGlQcm9wc0J1aWxkZXI6OmJ1aWxkKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIG1ha2VNaXJyb3IoZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIHV0cmllMl9mcmVlemUocFRyaWUsIFVUUklFMl8xNl9WQUxVRV9CSVRTLCAmZXJyb3JDb2RlKTsKKyAgICB0cmllU2l6ZT11dHJpZTJfc2VyaWFsaXplKHBUcmllLCB0cmllQmxvY2ssIHNpemVvZih0cmllQmxvY2spLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiB1dHJpZTJfZnJlZXplKCkrdXRyaWUyX3NlcmlhbGl6ZSgpIGZhaWxlZDogJXMgKGxlbmd0aCAlbGQpXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSksIChsb25nKXRyaWVTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGZpbmlzaCBqZ0FycmF5LCBwYWQgdG8gbXVsdGlwbGUgb2YgNCAqLworICAgIHdoaWxlKChqZ0xpbWl0LWpnU3RhcnQpJjMpIHsKKyAgICAgICAgLy8gUHJlZmVyIHJvdW5kaW5nIGRvd24gamdTdGFydCBiZWZvcmUgcm91bmRpbmcgdXAgamdMaW1pdAorICAgICAgICAvLyBzbyB0aGF0IHdlIGFyZSBndWFyYW50ZWVkIG5vdCB0byBpbmNyZWFzZSBqZ0xpbWl0IGJleW9uZCAweDkwMAorICAgICAgICAvLyB3aGljaCAoYWZ0ZXIgdGhlIG9mZnNldCkgaXMgdGhlIGVuZCBvZiB0aGUgamdBcnJheS4KKyAgICAgICAgaWYoamdTdGFydCYzKSB7IC0tamdTdGFydDsgfSBlbHNlIHsgKytqZ0xpbWl0OyB9CisgICAgfQorICAgIGluZGV4ZXNbVUJJRElfSVhfSkdfU1RBUlRdPWpnU3RhcnQ7CisgICAgaW5kZXhlc1tVQklESV9JWF9KR19MSU1JVF09amdMaW1pdDsKKworICAgIGluZGV4ZXNbVUJJRElfSVhfVFJJRV9TSVpFXT10cmllU2l6ZTsKKyAgICBpbmRleGVzW1VCSURJX0lYX01JUlJPUl9MRU5HVEhdPW1pcnJvclRvcDsKKyAgICBpbmRleGVzW1VCSURJX0lYX0xFTkdUSF09CisgICAgICAgIChpbnQzMl90KXNpemVvZihpbmRleGVzKSsKKyAgICAgICAgdHJpZVNpemUrCisgICAgICAgIDQqbWlycm9yVG9wKworICAgICAgICAoamdMaW1pdC1qZ1N0YXJ0KTsKKworICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHB1dHMoIiogdWJpZGkuaWN1IHN0YXRzICoiKTsKKyAgICAgICAgcHJpbnRmKCJ0cmllIHNpemUgaW4gYnl0ZXM6ICAgICAgICAgICAgICAgICAgICAlNWRcbiIsIChpbnQpdHJpZVNpemUpOworICAgICAgICBwcmludGYoInNpemUgaW4gYnl0ZXMgb2YgbWlycm9yaW5nIHRhYmxlOiAgICAgICU1ZFxuIiwgKGludCkoNCptaXJyb3JUb3ApKTsKKyAgICAgICAgcHJpbnRmKCJsZW5ndGggb2YgSm9pbmluZ19Hcm91cCBhcnJheTogICAgICAgICAlNWQgKFUrJTA0eC4uVSslMDR4KVxuIiwgKGludCkoamdMaW1pdC1qZ1N0YXJ0KSwgKGludClqZ1N0YXJ0LCAoaW50KShqZ0xpbWl0LTEpKTsKKyAgICAgICAgcHJpbnRmKCJkYXRhIHNpemU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlNWRcbiIsIChpbnQpaW5kZXhlc1tVQklESV9JWF9MRU5HVEhdKTsKKyAgICB9CisKKyAgICBpbmRleGVzW1VCSURJX01BWF9WQUxVRVNfSU5ERVhdPQorICAgICAgICAoKGludDMyX3QpVV9DSEFSX0RJUkVDVElPTl9DT1VOVC0xKXwKKyAgICAgICAgKCgoaW50MzJfdClVX0pUX0NPVU5ULTEpPDxVQklESV9KVF9TSElGVCl8CisgICAgICAgICgoKGludDMyX3QpVV9KR19DT1VOVC0xKTw8VUJJRElfTUFYX0pHX1NISUZUKTsKK30KKwordm9pZAorQmlEaVByb3BzQnVpbGRlcjo6d3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIEZJTEUgKmY9dXNyY19jcmVhdGUocGF0aCwgInViaWRpX3Byb3BzX2RhdGEuaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaWN1L3Rvb2xzL3VuaWNvZGUvYy9nZW5wcm9wcy9iaWRpcHJvcHNidWlsZGVyLmNwcCIpOworICAgIGlmKGY9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfRklMRV9BQ0NFU1NfRVJST1I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZnB1dHMoIiNpZm5kZWYgSU5DTFVERURfRlJPTV9VQklESV9QUk9QU19DXG4iCisgICAgICAgICAgIiMgICBlcnJvciBUaGlzIGZpbGUgbXVzdCBiZSAjaW5jbHVkZWQgZnJvbSB1YmlkaV9wcm9wcy5jIG9ubHkuXG4iCisgICAgICAgICAgIiNlbmRpZlxuXG4iLCBmKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCBVVmVyc2lvbkluZm8gdWJpZGlfcHJvcHNfZGF0YVZlcnNpb249eyIsCisgICAgICAgIGRhdGFJbmZvLmRhdGFWZXJzaW9uLCA4LCA0LAorICAgICAgICAifTtcblxuIik7CisgICAgdXNyY193cml0ZUFycmF5KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgaW50MzJfdCB1YmlkaV9wcm9wc19pbmRleGVzW1VCSURJX0lYX1RPUF09eyIsCisgICAgICAgIGluZGV4ZXMsIDMyLCBVQklESV9JWF9UT1AsCisgICAgICAgICJ9O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlVVRyaWUyQXJyYXlzKGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgdWludDE2X3QgdWJpZGlfcHJvcHNfdHJpZUluZGV4WyVsZF09e1xuIiwgTlVMTCwKKyAgICAgICAgcFRyaWUsCisgICAgICAgICJcbn07XG5cbiIpOworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IHVpbnQzMl90IHViaWRpX3Byb3BzX21pcnJvcnNbJWxkXT17XG4iLAorICAgICAgICBtaXJyb3JzLCAzMiwgbWlycm9yVG9wLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50OF90IHViaWRpX3Byb3BzX2pnQXJyYXlbJWxkXT17XG4iLAorICAgICAgICBqZ0FycmF5KyhqZ1N0YXJ0LTB4NjAwKSwgOCwgamdMaW1pdC1qZ1N0YXJ0LAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICBmcHV0cygKKyAgICAgICAgInN0YXRpYyBjb25zdCBVQmlEaVByb3BzIHViaWRpX3Byb3BzX3NpbmdsZXRvbj17XG4iCisgICAgICAgICIgIE5VTEwsXG4iCisgICAgICAgICIgIHViaWRpX3Byb3BzX2luZGV4ZXMsXG4iCisgICAgICAgICIgIHViaWRpX3Byb3BzX21pcnJvcnMsXG4iCisgICAgICAgICIgIHViaWRpX3Byb3BzX2pnQXJyYXksXG4iLAorICAgICAgICBmKTsKKyAgICB1c3JjX3dyaXRlVVRyaWUyU3RydWN0KGYsCisgICAgICAgICIgIHtcbiIsCisgICAgICAgIHBUcmllLCAidWJpZGlfcHJvcHNfdHJpZUluZGV4IiwgTlVMTCwKKyAgICAgICAgIiAgfSxcbiIpOworICAgIHVzcmNfd3JpdGVBcnJheShmLCAiICB7ICIsIGRhdGFJbmZvLmZvcm1hdFZlcnNpb24sIDgsIDQsICIgfVxuIik7CisgICAgZnB1dHMoIn07XG4iLCBmKTsKKyAgICBmY2xvc2UoZik7Cit9CisKK3ZvaWQKK0JpRGlQcm9wc0J1aWxkZXI6OndyaXRlQmluYXJ5RGF0YShjb25zdCBjaGFyICpwYXRoLCBVQm9vbCB3aXRoQ29weXJpZ2h0LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIFVOZXdEYXRhTWVtb3J5ICpwRGF0YT11ZGF0YV9jcmVhdGUocGF0aCwgVUJJRElfREFUQV9UWVBFLCBVQklESV9EQVRBX05BTUUsICZkYXRhSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb3B5cmlnaHQgPyBVX0NPUFlSSUdIVF9TVFJJTkcgOiBOVUxMLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzOiB1ZGF0YV9jcmVhdGUoJXMsIHViaWRpLmljdSkgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgcGF0aCwgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBpbmRleGVzLCBzaXplb2YoaW5kZXhlcykpOworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIHRyaWVCbG9jaywgdHJpZVNpemUpOworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIG1pcnJvcnMsIDQqbWlycm9yVG9wKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBqZ0FycmF5KyhqZ1N0YXJ0LTB4NjAwKSwgamdMaW1pdC1qZ1N0YXJ0KTsKKworICAgIGxvbmcgZGF0YUxlbmd0aD11ZGF0YV9maW5pc2gocERhdGEsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IGJpZGlwcm9wc2J1aWxkZXIgJWQgd3JpdGluZyB0aGUgb3V0cHV0IGZpbGVcbiIsIGVycm9yQ29kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihkYXRhTGVuZ3RoIT1pbmRleGVzW1VCSURJX0lYX0xFTkdUSF0pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgInVkYXRhX2ZpbmlzaCh1YmlkaS5pY3UpIHJlcG9ydHMgJWxkIGJ5dGVzIHdyaXR0ZW4gYnV0IHNob3VsZCBiZSAlbGRcbiIsCisgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCwgKGxvbmcpaW5kZXhlc1tVQklESV9JWF9MRU5HVEhdKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUjsKKyAgICB9Cit9CisKK1Byb3BzQnVpbGRlciAqCitjcmVhdGVCaURpUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiBOVUxMOyB9CisgICAgUHJvcHNCdWlsZGVyICpwYj1uZXcgQmlEaVByb3BzQnVpbGRlcihlcnJvckNvZGUpOworICAgIGlmKHBiPT1OVUxMKSB7CisgICAgICAgIGVycm9yQ29kZT1VX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gcGI7Cit9CisKKy8qCisgKiBIZXksIEVtYWNzLCBwbGVhc2Ugc2V0IHRoZSBmb2xsb3dpbmc6CisgKgorICogTG9jYWwgVmFyaWFibGVzOgorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKgorICovCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvY2FzZXByb3BzYnVpbGRlci5jcHAgYi91bmljb2RlL2MvZ2VucHJvcHMvY2FzZXByb3BzYnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxYzVhNwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9jYXNlcHJvcHNidWlsZGVyLmNwcApAQCAtMCwwICsxLDExOTkgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICBjYXNlcHJvcHNidWlsZGVyLmNwcCAod2FzIGdlbmNhc2Uvc3RvcmUuYykKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAyMDA0YXVnMjgKKyogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKgorKiAgIFN0b3JlIFVuaWNvZGUgY2FzZSBtYXBwaW5nIHByb3BlcnRpZXMgZWZmaWNpZW50bHkgZm9yCisqICAgcmFuZG9tIGFjY2Vzcy4KKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGF0YS5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc2V0LmgiCisjaW5jbHVkZSAidW5pY29kZS91c2V0aXRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmluZy5oIgorI2luY2x1ZGUgImNtZW1vcnkuaCIKKyNpbmNsdWRlICJjc3RyaW5nLmgiCisjaW5jbHVkZSAiZ2VucHJvcHMuaCIKKyNpbmNsdWRlICJwcHVjZC5oIgorI2luY2x1ZGUgInVhc3NlcnQuaCIKKyNpbmNsdWRlICJ1YXJyc29ydC5oIgorI2luY2x1ZGUgInVjYXNlLmgiCisjaW5jbHVkZSAidW5ld2RhdGEuaCIKKyNpbmNsdWRlICJ1dHJpZTIuaCIKKyNpbmNsdWRlICJ3cml0ZXNyYy5oIgorCisvKiBVbmljb2RlIGNhc2UgbWFwcGluZyBwcm9wZXJ0aWVzIGZpbGUgZm9ybWF0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBmb3JtYXQgcHJlcGFyZWQgYW5kIHdyaXR0ZW4gaGVyZSBjb250YWlucyBzZXZlcmFsIGRhdGEKK3N0cnVjdHVyZXMgdGhhdCBzdG9yZSBpbmRleGVzIG9yIGRhdGEuCisKK0JlZm9yZSB0aGUgZGF0YSBjb250ZW50cyBkZXNjcmliZWQgYmVsb3csIHRoZXJlIGFyZSB0aGUgaGVhZGVycyByZXF1aXJlZCBieQordGhlIHVkYXRhIEFQSSBmb3IgbG9hZGluZyBJQ1UgZGF0YS4gRXNwZWNpYWxseSwgYSBVRGF0YUluZm8gc3RydWN0dXJlCitwcmVjZWRlcyB0aGUgYWN0dWFsIGRhdGEuIEl0IGNvbnRhaW5zIHBsYXRmb3JtIHByb3BlcnRpZXMgdmFsdWVzIGFuZCB0aGUKK2ZpbGUgZm9ybWF0IHZlcnNpb24uCisKK1RoZSBmb2xsb3dpbmcgaXMgYSBkZXNjcmlwdGlvbiBvZiBmb3JtYXQgdmVyc2lvbiAzLjAgLgorCitGb3JtYXQgdmVyc2lvbiAxLjEgYWRkcyBkYXRhIGZvciBjYXNlIGNsb3N1cmUuCisKK0Zvcm1hdCB2ZXJzaW9uIDEuMiBhZGRzIGFuIGV4Y2VwdGlvbiBiaXQgZm9yIGNhc2UtaWdub3JhYmxlLiBOZWVkZWQgYmVjYXVzZQordGhlIENhc2VkIGFuZCBDYXNlX0lnbm9yYWJsZSBwcm9wZXJ0aWVzIGFyZSBub3QgZGlzam9pbnQuCisKK0Zvcm1hdCB2ZXJzaW9uIDIuMCBjaGFuZ2VzIGZyb20gVVRyaWUgdG8gVVRyaWUyLgorCitGb3JtYXQgdmVyc2lvbiAzLjAgKElDVSA0OSkgc2h1ZmZsZXMgdGhlIHRyaWUgYml0cyB0byBzaW1wbGlmeSBzb21lIGJ1aWxkZXIgYW5kIHJ1bnRpbWUgY29kZS4KK0l0IG1vdmVzIHRoZSBDYXNlX0lnbm9yYWJsZSBmbGFnIGZyb20gc29tZXRpbWVzLXRyaWUtYml0IDYsIHNvbWV0aW1lcy1leGNlcHRpb24tYml0IDExCit0byBhbHdheXMtdHJpZS1iaXQgMiBhbmQgYWRqdXN0cyB0aGUgaGlnaGVyIHRyaWUgYml0cyBhY2NvcmRpbmdseS4KK0V4Y2VwdGlvbiBpbmRleCByZWR1Y2VkIGZyb20gMTIgYml0cyB0byAxMSwgc2ltcGxlIGNhc2UgbWFwcGluZyBkZWx0YSByZWR1Y2VkIGZyb20gMTAgYml0cyB0byA5LgorCitUaGUgZmlsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXM6CisKKyAgICBjb25zdCBpbnQzMl90IGluZGV4ZXNbaTBdIHdpdGggdmFsdWVzIGkwLCBpMSwgLi4uOgorICAgIChzZWUgVUNBU0VfSVhfLi4uIGNvbnN0YW50cyBmb3IgbmFtZXMgb2YgaW5kZXhlcykKKworICAgIGkwIGluZGV4TGVuZ3RoOyAtLSBsZW5ndGggb2YgaW5kZXhlc1tdIChVQ0FTRV9JWF9UT1ApCisgICAgaTEgZGF0YUxlbmd0aDsgLS0gbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBwb3N0LWhlYWRlciBkYXRhIChpbmNsLiBpbmRleGVzW10pCisgICAgaTIgdHJpZVNpemU7IC0tIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNhc2UgbWFwcGluZyBwcm9wZXJ0aWVzIHRyaWUKKyAgICBpMyBleGNlcHRpb25zTGVuZ3RoOyAtLSBsZW5ndGggaW4gdWludDE2X3Qgb2YgdGhlIGV4Y2VwdGlvbnMgYXJyYXkKKyAgICBpNCB1bmZvbGRMZW5ndGg7IC0tIGxlbmd0aCBpbiB1aW50MTZfdCBvZiB0aGUgcmV2ZXJzZS1mb2xkaW5nIGFycmF5IChuZXcgaW4gZm9ybWF0IHZlcnNpb24gMS4xKQorCisgICAgaTUuLmkxNCByZXNlcnZlZEluZGV4ZXM7IC0tIHJlc2VydmVkIHZhbHVlczsgMCBmb3Igbm93CisKKyAgICBpMTUgbWF4RnVsbExlbmd0aDsgLS0gbWF4aW11bSBsZW5ndGggb2YgYSBmdWxsIGNhc2UgbWFwcGluZy9mb2xkaW5nIHN0cmluZworCisKKyAgICBTZXJpYWxpemVkIHRyaWUsIHNlZSB1dHJpZTIuaDsKKworICAgIGNvbnN0IHVpbnQxNl90IGV4Y2VwdGlvbnNbZXhjZXB0aW9uc0xlbmd0aF07CisKKyAgICBjb25zdCBVQ2hhciB1bmZvbGRbdW5mb2xkTGVuZ3RoXTsKKworCitUcmllIGRhdGEgd29yZDoKK0JpdHMKK2lmKGV4Y2VwdGlvbikgeworICAgIDE1Li41ICAgdW5zaWduZWQgZXhjZXB0aW9uIGluZGV4Cit9IGVsc2UgeworICAgIGlmKG5vdCB1bmNhc2VkKSB7CisgICAgICAgIDE1Li43ICAgc2lnbmVkIGRlbHRhIHRvIHNpbXBsZSBjYXNlIG1hcHBpbmcgY29kZSBwb2ludAorICAgICAgICAgICAgICAgIChhZGQgZGVsdGEgdG8gaW5wdXQgY29kZSBwb2ludCkKKyAgICB9IGVsc2UgeworICAgICAgICAxNS4uNyAgIHJlc2VydmVkLCAwCisgICAgfQorICAgICA2Li41ICAgMCBub3JtYWwgY2hhcmFjdGVyIHdpdGggY2M9MAorICAgICAgICAgICAgMSBzb2Z0LWRvdHRlZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgIDIgY2M9MjMwCisgICAgICAgICAgICAzIG90aGVyIGNjCisgICAgICAgICAgICBUaGUgcnVudGltZSBjb2RlIHJlbGllcyBvbiB0aGVzZSB0d28gYml0cyB0byBiZSBhZGphY2VudCB3aXRoIHRoaXMgZW5jb2RpbmcuCit9CisgICAgNCAgIGV4Y2VwdGlvbgorICAgIDMgICBjYXNlLXNlbnNpdGl2ZQorICAgIDIgICBjYXNlLWlnbm9yYWJsZQorIDEuLjAgICAwIHVuY2FzZWQKKyAgICAgICAgMSBsb3dlcmNhc2UKKyAgICAgICAgMiB1cHBlcmNhc2UKKyAgICAgICAgMyB0aXRsZWNhc2UKKyAgICAgICAgVGhlIHJ1bnRpbWUgY29kZSByZWxpZXMgb24gdGhlIGNhc2UtaWdub3JhYmxlIGFuZCBjYXNlIHR5cGUgYml0cyAyLi4wCisgICAgICAgIHRvIGJlIHRoZSBsb3dlc3QgYml0cyB3aXRoIHRoaXMgZW5jb2RpbmcuCisKKworRXhjZXB0aW9uczoKK0Egc3ViLWFycmF5IG9mIHRoZSBleGNlcHRpb25zIGFycmF5IGlzIGluZGV4ZWQgYnkgdGhlIGV4Y2VwdGlvbiBpbmRleCBpbiBhCit0cmllIHdvcmQuCitUaGUgc3ViLWFycmF5IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICAgIHVpbnQxNl90IGV4Y1dvcmQ7CisgICAgdWludDE2X3Qgb3B0aW9uYWwgdmFsdWVzIFtdOworICAgIFVURi0xNiBzdHJpbmdzIGZvciBmdWxsIChzdHJpbmcpIG1hcHBpbmdzIGZvciBsb3dlcmNhc2UsIGNhc2UgZm9sZGluZywgdXBwZXJjYXNlLCB0aXRsZWNhc2UKKworZXhjV29yZDogKHNlZSBVQ0FTRV9FWENfLi4uKQorQml0cworICAgIDE1ICBjb25kaXRpb25hbCBjYXNlIGZvbGRpbmcKKyAgICAxNCAgY29uZGl0aW9uYWwgc3BlY2lhbCBjYXNpbmcKKzEzLi4xMiAgc2FtZSBhcyBub24tZXhjZXB0aW9uIHRyaWUgZGF0YSBiaXRzIDYuLjUKKyAgICAgICAgbW92ZWQgaGVyZSBiZWNhdXNlIHRoZSBleGNlcHRpb24gaW5kZXggbmVlZHMgbW9yZSBiaXRzIHRoYW4gdGhlIGRlbHRhCisgICAgICAgIDAgbm9ybWFsIGNoYXJhY3RlciB3aXRoIGNjPTAKKyAgICAgICAgMSBzb2Z0LWRvdHRlZCBjaGFyYWN0ZXIKKyAgICAgICAgMiBjYz0yMzAKKyAgICAgICAgMyBvdGhlciBjYworMTEgICAgICByZXNlcnZlZAorICAgICAgICAod2FzIHVzZWQgaW4gZm9ybWF0VmVyc2lvbiAxLjIuLjIuMDoKKyAgICAgICAgIGNhc2UtaWdub3JhYmxlICh1c2VkIHdoZW4gdGhlIGNoYXJhY3RlciBpcyBjYXNlZCBvciBoYXMgYW5vdGhlciBleGNlcHRpb24pKQorMTAuLiA5ICByZXNlcnZlZAorICAgICA4ICBpZiBzZXQsIHRoZW4gZm9yIGVhY2ggb3B0aW9uYWwtdmFsdWUgc2xvdCB0aGVyZSBhcmUgMiB1aW50MTZfdCB2YWx1ZXMKKyAgICAgICAgKGhpZ2ggYW5kIGxvdyBwYXJ0cyBvZiAzMi1iaXQgdmFsdWVzKQorICAgICAgICBpbnN0ZWFkIG9mIHNpbmdsZSBvbmVzCisgNy4uIDAgIGJpdHMgZm9yIHdoaWNoIG9wdGlvbmFsIHZhbHVlIGlzIHByZXNlbnQKKworT3B0aW9uYWwtdmFsdWUgc2xvdHM6CiswICAgbG93ZXJjYXNlIG1hcHBpbmcgKGNvZGUgcG9pbnQpCisxICAgY2FzZSBmb2xkaW5nIChjb2RlIHBvaW50KQorMiAgIHVwcGVyY2FzZSBtYXBwaW5nIChjb2RlIHBvaW50KQorMyAgIHRpdGxlY2FzZSBtYXBwaW5nIChjb2RlIHBvaW50KQorNCAgIHJlc2VydmVkCis1ICAgcmVzZXJ2ZWQKKzYgICBjbG9zdXJlIG1hcHBpbmdzIChuZXcgaW4gZm9ybWF0IHZlcnNpb24gMS4xKQorNyAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmdWxsIChzdHJpbmcpIGNhc2UgbWFwcGluZworICAgIHRoZSBsZW5ndGggb2YgZWFjaCBpcyBlbmNvZGVkIGluIGEgbmliYmxlIG9mIHRoaXMgb3B0aW9uYWwgdmFsdWUsCisgICAgYW5kIHRoZSBzdHJpbmdzIGZvbGxvdyB0aGlzIG9wdGlvbmFsIHZhbHVlIGluIHRoZSBzYW1lIG9yZGVyOgorICAgIGxvd2VyL2ZvbGQvdXBwZXIvdGl0bGUKKworVGhlIG9wdGlvbmFsIGNsb3N1cmUgbWFwcGluZ3MgdmFsdWUgaXMgdXNlZCBhcyBmb2xsb3dzOgorQml0cyAwLi4zIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiBhIHN0cmluZyBvZiBjb2RlIHBvaW50cyBmb3IgY2FzZSBjbG9zdXJlLgorVGhlIHN0cmluZyBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBmdWxsIGNhc2UgbWFwcGluZ3MsIG9yIHRoZSBjbG9zdXJlIHZhbHVlCitzbG90IGlmIHRoZXJlIGFyZSBubyBmdWxsIGNhc2UgbWFwcGluZ3MuCitCaXRzIDQuLjE1IGFyZSByZXNlcnZlZCBhbmQgY291bGQgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHRvIGluZGljYXRlIHRoZQorbnVtYmVyIG9mIHN0cmluZ3MgZm9yIGNhc2UgY2xvc3VyZS4KK0NvbXBsZXRlIGNhc2UgY2xvc3VyZSBmb3IgYSBjb2RlIHBvaW50IGlzIGdpdmVuIGJ5IHRoZSB1bmlvbiBvZiBhbGwgc2ltcGxlCithbmQgZnVsbCBjYXNlIG1hcHBpbmdzIGFuZCBmb2xkaW5ncywgcGx1cyB0aGUgY2FzZSBjbG9zdXJlIGNvZGUgcG9pbnRzCisoYW5kIHBvdGVudGlhbGx5LCBpbiB0aGUgZnV0dXJlLCBjYXNlIGNsb3N1cmUgc3RyaW5ncykuCisKK0ZvciBzcGFjZSBzYXZpbmcsIHNvbWUgdmFsdWVzIGFyZSBub3Qgc3RvcmVkLiBMb29rdXBzIGFyZSBhcyBmb2xsb3dzOgorLSBJZiBzcGVjaWFsIGNhc2luZyBpcyBjb25kaXRpb25hbCwgdGhlbiBubyBmdWxsIGxvd2VyL3VwcGVyL3RpdGxlIG1hcHBpbmcKKyAgc3RyaW5ncyBhcmUgc3RvcmVkLgorLSBJZiBjYXNlIGZvbGRpbmcgaXMgY29uZGl0aW9uYWwsIHRoZW4gbm8gc2ltcGxlIG9yIGZ1bGwgY2FzZSBmb2xkaW5ncyBhcmUKKyAgc3RvcmVkLgorLSBGYWxsIGJhY2sgaW4gdGhpcyBvcmRlcjoKKyAgICBmdWxsIChzdHJpbmcpIG1hcHBpbmcgLS0gaWYgZnVsbCBtYXBwaW5ncyBhcmUgdXNlZAorICAgIHNpbXBsZSAoY29kZSBwb2ludCkgbWFwcGluZyBvZiB0aGUgc2FtZSB0eXBlCisgICAgc2ltcGxlIGZvbGQtPnNpbXBsZSBsb3dlcgorICAgIHNpbXBsZSB0aXRsZS0+c2ltcGxlIHVwcGVyCisgICAgZmluYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgcG9pbnQgKG5vIG1hcHBpbmcpCisKK1RoaXMgZmFsbGJhY2sgb3JkZXIgaXMgc3RyaWN0OgorSW4gcGFydGljdWxhciwgdGhlIGZhbGxiYWNrIGZyb20gZnVsbCBjYXNlIGZvbGRpbmcgaXMgdG8gc2ltcGxlIGNhc2UgZm9sZGluZywKK25vdCB0byBmdWxsIGxvd2VyY2FzZSBtYXBwaW5nLgorCitSZXZlcnNlIGNhc2UgZm9sZGluZyBkYXRhICgidW5mb2xkIikgYXJyYXk6IChuZXcgaW4gZm9ybWF0IHZlcnNpb24gMS4xKQorCitUaGlzIGFycmF5IHN0b3JlcyBzb21lIG1pc2NlbGxhbmVvdXMgdmFsdWVzIGZvbGxvd2VkIGJ5IGEgdGFibGUuIFRoZSBkYXRhIG1hcHMKK2JhY2sgZnJvbSBtdWx0aS1jaGFyYWN0ZXIgc3RyaW5ncyB0byB0aGVpciBvcmlnaW5hbCBjb2RlIHBvaW50cywgZm9yIHVzZQoraW4gY2FzZSBjbG9zdXJlLgorCitUaGUgdGFibGUgY29udGFpbnMgdHdvIGNvbHVtbnMgb2Ygc3RyaW5ncy4KK1RoZSBzdHJpbmcgaW4gdGhlIGZpcnN0IGNvbHVtbiBpcyB0aGUgY2FzZSBmb2xkaW5nIG9mIGVhY2ggb2YgdGhlIGNvZGUgcG9pbnRzCitpbiB0aGUgc2Vjb25kIGNvbHVtbi4gVGhlIHN0cmluZ3MgYXJlIHRlcm1pbmF0ZWQgd2l0aCBOVUwgb3IgYnkgdGhlIGVuZCBvZiB0aGUKK2NvbHVtbiwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgorCitUaGUgbWlzY2VsbGFuZW91cyBkYXRhIHRha2VzIHVwIG9uZSBwc2V1ZG8tcm93IGFuZCBpbmNsdWRlczoKKy0gbnVtYmVyIG9mIHJvd3MKKy0gbnVtYmVyIG9mIFVDaGFycyBwZXIgcm93CistIG51bWJlciBvZiBVQ2hhcnMgaW4gdGhlIGxlZnQgKGZvbGRpbmcgc3RyaW5nKSBjb2x1bW4KKworVGhlIHRhYmxlIGlzIHNvcnRlZCBieSBpdHMgZmlyc3QgY29sdW1uLiBWYWx1ZXMgaW4gdGhlIGZpcnN0IGNvbHVtbiBhcmUgdW5pcXVlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitVX05BTUVTUEFDRV9VU0UKKworLyogVURhdGFJbmZvIGNmLiB1ZGF0YS5oICovCitzdGF0aWMgVURhdGFJbmZvIGRhdGFJbmZvPXsKKyAgICBzaXplb2YoVURhdGFJbmZvKSwKKyAgICAwLAorCisgICAgVV9JU19CSUdfRU5ESUFOLAorICAgIFVfQ0hBUlNFVF9GQU1JTFksCisgICAgVV9TSVpFT0ZfVUNIQVIsCisgICAgMCwKKworICAgIC8qIGRhdGFGb3JtYXQ9ImNBc0UiICovCisgICAgeyBVQ0FTRV9GTVRfMCwgVUNBU0VfRk1UXzEsIFVDQVNFX0ZNVF8yLCBVQ0FTRV9GTVRfMyB9LAorICAgIHsgMywgMCwgMCwgMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9ybWF0VmVyc2lvbiAqLworICAgIHsgNiwgMCwgMCwgMCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YVZlcnNpb24gKi8KK307CisKKyNkZWZpbmUgVUdFTkNBU0VfRVhDX1NISUZUICAgICAyMAorI2RlZmluZSBVR0VOQ0FTRV9FWENfTUFTSyAgICAgIDB4ZmZmMDAwMDAKKworZW51bSB7CisgICAgTUFYX0VYQ19DT1VOVD0oVUdFTkNBU0VfRVhDX01BU0s+PlVHRU5DQVNFX0VYQ19TSElGVCkrMQorfTsKKworc3RydWN0IEV4Y1Byb3BzIHsKKyAgICBFeGNQcm9wcygpCisgICAgICAgICAgICA6IGhhc0NvbmRpdGlvbmFsQ2FzZU1hcHBpbmdzKEZBTFNFKSwgaGFzVHVya2ljQ2FzZUZvbGRpbmcoRkFMU0UpIHt9CisgICAgRXhjUHJvcHMoY29uc3QgVW5pUHJvcHMgJm90aGVyUHJvcHMpCisgICAgICAgICAgICA6IHByb3BzKG90aGVyUHJvcHMpLAorICAgICAgICAgICAgICBoYXNDb25kaXRpb25hbENhc2VNYXBwaW5ncyhGQUxTRSksIGhhc1R1cmtpY0Nhc2VGb2xkaW5nKEZBTFNFKSB7fQorCisgICAgVW5pUHJvcHMgcHJvcHM7CisgICAgVW5pY29kZVNldCBjbG9zdXJlOworICAgIFVCb29sIGhhc0NvbmRpdGlvbmFsQ2FzZU1hcHBpbmdzOworICAgIFVCb29sIGhhc1R1cmtpY0Nhc2VGb2xkaW5nOworfTsKKworLyoKKyAqIFZhbHVlcyBmb3IgdGhlIHVjYXNlLmljdSB1bmZvbGRbXSBkYXRhIGFycmF5LgorICogVGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIHVjYXNlLmljdSBzbyB0aGF0IHRoZSBydW50aW1lIGNvZGUgd2lsbCB3b3JrIHdpdGgKKyAqIGNoYW5naW5nIHZhbHVlcywgYnV0IHRoZXkgYXJlIGhhcmRjb2RlZCBoZXJlIGZvciBzaW1wbGljaXR5LgorICogVGhleSBhcmUgb3B0aW1pemVkLCB0aGF0IGlzLCBwcm92aWRlIGZvciBtaW5pbWFsIHRhYmxlIGNvbHVtbiB3aWR0aHMsCisgKiBmb3IgdGhlIGFjdHVhbCBVbmljb2RlIGRhdGEsIHNvIHRoYXQgdGhlIHRhYmxlIHNpemUgaXMgbWluaW1pemVkLgorICogRnV0dXJlIHZlcnNpb25zIG9mIFVuaWNvZGUgbWF5IHJlcXVpcmUgaW5jcmVhc2VzIG9mIHNvbWUgb2YgdGhlc2UgdmFsdWVzLgorICovCitlbnVtIHsKKyAgICBVR0VOQ0FTRV9VTkZPTERfU1RSSU5HX1dJRFRIPTMsCisgICAgVUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIPTIsCisgICAgVUdFTkNBU0VfVU5GT0xEX1dJRFRIPVVHRU5DQVNFX1VORk9MRF9TVFJJTkdfV0lEVEgrVUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRICit9OworCitjbGFzcyBDYXNlUHJvcHNCdWlsZGVyIDogcHVibGljIFByb3BzQnVpbGRlciB7CitwdWJsaWM6CisgICAgQ2FzZVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgfkNhc2VQcm9wc0J1aWxkZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRVbmljb2RlVmVyc2lvbihjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BzKGNvbnN0IFVuaVByb3BzICYsIGNvbnN0IFVuaWNvZGVTZXQgJm5ld1ZhbHVlcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGQoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtYWtlRXhjUHJvcHMoVUNoYXIzMiBjLCB1aW50MzJfdCB2YWx1ZSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2b2lkIGFkZFVuZm9sZGluZyhVQ2hhcjMyIGMsIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnMsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdm9pZCBtYWtlVW5mb2xkRGF0YShVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZvaWQgYWRkQ2xvc3VyZU1hcHBpbmcoVUNoYXIzMiBzcmMsIFVDaGFyMzIgZGVzdCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICBVQm9vbCBhZGRDbG9zdXJlKFVDaGFyMzIgb3JpZywgVUNoYXIzMiBwcmV2MiwgVUNoYXIzMiBwcmV2LCBVQ2hhcjMyIGMsIHVpbnQzMl90IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2b2lkIG1ha2VDYXNlQ2xvc3VyZShVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIGludDMyX3QgbWFrZUV4Y2VwdGlvbihVQ2hhcjMyIGMsIHVpbnQzMl90IHZhbHVlLCBFeGNQcm9wcyAmZXAsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdm9pZCBtYWtlRXhjZXB0aW9ucyhVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCisgICAgVW5pY29kZVNldCByZWxldmFudFByb3BzOworICAgIC8qCisgICAgICogVW5pY29kZSBzZXQgY29sbGVjdGluZyB0aGUgY2FzZS1zZW5zaXRpdmUgY2hhcmFjdGVyczsKKyAgICAgKiBzZWUgdWNoYXIuaCBVQ0hBUl9DQVNFX1NFTlNJVElWRS4KKyAgICAgKiBBZGQgY29kZSBwb2ludHMgZnJvbSBjYXNlIG1hcHBpbmdzL2ZvbGRpbmdzIGluCisgICAgICogdGhlIHJvb3QgbG9jYWxlIGFuZCB3aXRoIGRlZmF1bHQgb3B0aW9ucy4KKyAgICAgKi8KKyAgICBVbmljb2RlU2V0IGNhc2VTZW5zaXRpdmU7CisgICAgLyogcmV2ZXJzZSBjYXNlIGZvbGRpbmcgKCJ1bmZvbGQiKSBkYXRhICovCisgICAgVW5pY29kZVN0cmluZyB1bmZvbGQ7CisgICAgVW5pY29kZVN0cmluZyBleGNlcHRpb25zOworICAgIEV4Y1Byb3BzICoqZXhjUHJvcHM7CisgICAgaW50MzJfdCBleGNQcm9wc0NvdW50OworICAgIC8qIGJlY29tZXMgaW5kZXhlc1tVQ0FTRV9JWF9NQVhfRlVMTF9MRU5HVEhdICovCisgICAgaW50MzJfdCBtYXhGdWxsTGVuZ3RoOworICAgIFVUcmllMiAqcFRyaWU7Cit9OworCitDYXNlUHJvcHNCdWlsZGVyOjpDYXNlUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSkKKyAgICAgICAgOiBleGNQcm9wcyhOVUxMKSwgZXhjUHJvcHNDb3VudCgwKSwgbWF4RnVsbExlbmd0aChVMTZfTUFYX0xFTkdUSCksIHBUcmllKE5VTEwpIHsKKyAgICAvLyBUaGlzIGJ1aWxkZXIgZW5jb2RlcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMuCisgICAgcmVsZXZhbnRQcm9wcy4KKyAgICAgICAgYWRkKFVDSEFSX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MpLiAgLy8gMCB2cy4gMjMwIHZzLiBvdGhlcgorICAgICAgICBhZGQoVUNIQVJfU09GVF9ET1RURUQpLgorICAgICAgICBhZGQoVUNIQVJfTE9XRVJDQVNFKS4KKyAgICAgICAgYWRkKFVDSEFSX1VQUEVSQ0FTRSkuCisgICAgICAgIGFkZChVQ0hBUl9DQVNFX0lHTk9SQUJMRSkuCisgICAgICAgIGFkZChVQ0hBUl9TSU1QTEVfQ0FTRV9GT0xESU5HKS4KKyAgICAgICAgYWRkKFVDSEFSX1NJTVBMRV9MT1dFUkNBU0VfTUFQUElORykuCisgICAgICAgIGFkZChVQ0hBUl9TSU1QTEVfVElUTEVDQVNFX01BUFBJTkcpLgorICAgICAgICBhZGQoVUNIQVJfU0lNUExFX1VQUEVSQ0FTRV9NQVBQSU5HKS4KKyAgICAgICAgYWRkKFVDSEFSX0NBU0VfRk9MRElORykuCisgICAgICAgIGFkZChVQ0hBUl9MT1dFUkNBU0VfTUFQUElORykuCisgICAgICAgIGFkZChVQ0hBUl9USVRMRUNBU0VfTUFQUElORykuCisgICAgICAgIGFkZChVQ0hBUl9VUFBFUkNBU0VfTUFQUElORykuCisgICAgICAgIGFkZChQUFVDRF9DT05ESVRJT05BTF9DQVNFX01BUFBJTkdTKS4KKyAgICAgICAgYWRkKFBQVUNEX1RVUktJQ19DQVNFX0ZPTERJTkcpOworICAgIC8vIFdyaXRlICJ1bmZvbGQiIG1ldGEgZGF0YSBpbnRvIHRoZSBmaXJzdCByb3cuIE11c3QgYmUgVUdFTkNBU0VfVU5GT0xEX1dJRFRIIFVDaGFycy4KKyAgICB1bmZvbGQuCisgICAgICAgIGFwcGVuZCgwKS4KKyAgICAgICAgYXBwZW5kKChVQ2hhcilVR0VOQ0FTRV9VTkZPTERfV0lEVEgpLgorICAgICAgICBhcHBlbmQoKFVDaGFyKVVHRU5DQVNFX1VORk9MRF9TVFJJTkdfV0lEVEgpLgorICAgICAgICBhcHBlbmQoMCkuCisgICAgICAgIGFwcGVuZCgwKTsKKyAgICBVX0FTU0VSVCh1bmZvbGQubGVuZ3RoKCk9PVVHRU5DQVNFX1VORk9MRF9XSURUSCk7CisgICAgcFRyaWU9dXRyaWUyX29wZW4oMCwgMCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogY2FzZXByb3BzYnVpbGRlciB1dHJpZTJfb3BlbigpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV4Y1Byb3BzPW5ldyBFeGNQcm9wcyAqW01BWF9FWENfQ09VTlRdOworICAgIGlmKGV4Y1Byb3BzPT1OVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogY2FzZXByb3BzYnVpbGRlciBvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgIgorICAgICAgICAgICAgICAgICJ0aGUgYXJyYXkgb2YgZXhjZXB0aW9ucyBwcm9wZXJ0aWVzXG4iKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgfQorfQorCitDYXNlUHJvcHNCdWlsZGVyOjp+Q2FzZVByb3BzQnVpbGRlcigpIHsKKyAgICB1dHJpZTJfY2xvc2UocFRyaWUpOworICAgIGZvcihpbnQzMl90IGk9MDsgaTxleGNQcm9wc0NvdW50OyArK2kpIHsKKyAgICAgICAgZGVsZXRlIGV4Y1Byb3BzW2ldOworICAgIH0KKyAgICBkZWxldGVbXSBleGNQcm9wczsKK30KKwordm9pZAorQ2FzZVByb3BzQnVpbGRlcjo6c2V0VW5pY29kZVZlcnNpb24oY29uc3QgVVZlcnNpb25JbmZvIHZlcnNpb24pIHsKKyAgICB1cHJ2X21lbWNweShkYXRhSW5mby5kYXRhVmVyc2lvbiwgdmVyc2lvbiwgNCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6OmFkZFVuZm9sZGluZyhVQ2hhcjMyIGMsIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnMsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgaW50MzJfdCBsZW5ndGg9cy5sZW5ndGgoKTsKKyAgICBpZihsZW5ndGg+VUdFTkNBU0VfVU5GT0xEX1NUUklOR19XSURUSCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBjYXNlIGZvbGRpbmcgdG9vIGxvbmcgKGxlbmd0aD0lbGQ+JWQ9VUdFTkNBU0VfVU5GT0xEX1NUUklOR19XSURUSClcbiIsCisgICAgICAgICAgICAgICAgKGxvbmcpbGVuZ3RoLCBVR0VOQ0FTRV9VTkZPTERfU1RSSU5HX1dJRFRIKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUjsKKyAgICB9CisgICAgdW5mb2xkLmFwcGVuZChzKTsKKyAgICB3aGlsZShsZW5ndGg8VUdFTkNBU0VfVU5GT0xEX1NUUklOR19XSURUSCkgeworICAgICAgICB1bmZvbGQuYXBwZW5kKDApOworICAgICAgICArK2xlbmd0aDsKKyAgICB9CisKKyAgICB1bmZvbGQuYXBwZW5kKGMpOworICAgIGlmKFUxNl9MRU5HVEgoYyk8VUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIKSB7CisgICAgICAgIHVuZm9sZC5hcHBlbmQoMCk7CisgICAgfQorCisgICAgVV9BU1NFUlQoKHVuZm9sZC5sZW5ndGgoKSVVR0VOQ0FTRV9VTkZPTERfV0lEVEgpPT0wKTsKK30KKworLyogc3RvcmUgYSBjaGFyYWN0ZXIncyBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZAorQ2FzZVByb3BzQnVpbGRlcjo6c2V0UHJvcHMoY29uc3QgVW5pUHJvcHMgJnByb3BzLCBjb25zdCBVbmljb2RlU2V0ICZuZXdWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSB8fCBuZXdWYWx1ZXMuY29udGFpbnNOb25lKHJlbGV2YW50UHJvcHMpKSB7IHJldHVybjsgfQorCisgICAgVUNoYXIzMiBzdGFydD1wcm9wcy5zdGFydDsKKyAgICBVQ2hhcjMyIGVuZD1wcm9wcy5lbmQ7CisKKyAgICAvKiBkZWZhdWx0OiBtYXAgdG8gc2VsZiAqLworICAgIGludDMyX3QgZGVsdGE9MDsKKworICAgIHVpbnQzMl90IHR5cGU7CisgICAgaWYocHJvcHMuYmluUHJvcHNbVUNIQVJfTE9XRVJDQVNFXSkgeworICAgICAgICB0eXBlPVVDQVNFX0xPV0VSOworICAgIH0gZWxzZSBpZihwcm9wcy5iaW5Qcm9wc1tVQ0hBUl9VUFBFUkNBU0VdKSB7CisgICAgICAgIHR5cGU9VUNBU0VfVVBQRVI7CisgICAgfSBlbHNlIGlmKHByb3BzLmdldEludFByb3AoVUNIQVJfR0VORVJBTF9DQVRFR09SWSk9PVVfVElUTEVDQVNFX0xFVFRFUikgeworICAgICAgICB0eXBlPVVDQVNFX1RJVExFOworICAgIH0gZWxzZSB7CisgICAgICAgIHR5cGU9VUNBU0VfTk9ORTsKKyAgICB9CisgICAgdWludDMyX3QgdmFsdWU9dHlwZTsKKworICAgIFVCb29sIGhhc01hcHBpbmc9RkFMU0U7CisgICAgaWYocHJvcHMuc3VjPj0wKSB7CisgICAgICAgIC8qIHVwcGVyY2FzZSBtYXBwaW5nIGFzIGRlbHRhIGlmIHRoZSBjaGFyYWN0ZXIgaXMgbG93ZXJjYXNlICovCisgICAgICAgIGhhc01hcHBpbmc9VFJVRTsKKyAgICAgICAgaWYodHlwZT09VUNBU0VfTE9XRVIpIHsKKyAgICAgICAgICAgIGRlbHRhPXByb3BzLnN1Yy1zdGFydDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlfD1VQ0FTRV9FWENFUFRJT047CisgICAgICAgIH0KKyAgICB9CisgICAgaWYocHJvcHMuc2xjPj0wKSB7CisgICAgICAgIC8qIGxvd2VyY2FzZSBtYXBwaW5nIGFzIGRlbHRhIGlmIHRoZSBjaGFyYWN0ZXIgaXMgdXBwZXJjYXNlIG9yIHRpdGxlY2FzZSAqLworICAgICAgICBoYXNNYXBwaW5nPVRSVUU7CisgICAgICAgIGlmKHR5cGU+PVVDQVNFX1VQUEVSKSB7CisgICAgICAgICAgICBkZWx0YT1wcm9wcy5zbGMtc3RhcnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZXw9VUNBU0VfRVhDRVBUSU9OOworICAgICAgICB9CisgICAgfQorICAgIGlmKHByb3BzLnN0Yz49MCkgeworICAgICAgICBoYXNNYXBwaW5nPVRSVUU7CisgICAgfQorICAgIGlmKHByb3BzLnN1YyE9cHJvcHMuc3RjKSB7CisgICAgICAgIHZhbHVlfD1VQ0FTRV9FWENFUFRJT047CisgICAgfQorICAgIGlmKCFwcm9wcy5sYy5pc0VtcHR5KCkgfHwgIXByb3BzLnVjLmlzRW1wdHkoKSB8fCAhcHJvcHMudGMuaXNFbXB0eSgpIHx8CisgICAgICAgIG5ld1ZhbHVlcy5jb250YWlucyhQUFVDRF9DT05ESVRJT05BTF9DQVNFX01BUFBJTkdTKQorICAgICkgeworICAgICAgICBoYXNNYXBwaW5nPVRSVUU7CisgICAgICAgIHZhbHVlfD1VQ0FTRV9FWENFUFRJT047CisgICAgfQorICAgIGlmKCAocHJvcHMuc2NmPj0wICYmIHByb3BzLnNjZiE9cHJvcHMuc2xjKSB8fAorICAgICAgICAoIXByb3BzLmNmLmlzRW1wdHkoKSAmJiBwcm9wcy5jZiE9VW5pY29kZVN0cmluZyhwcm9wcy5zY2YpKSB8fAorICAgICAgICBuZXdWYWx1ZXMuY29udGFpbnMoUFBVQ0RfVFVSS0lDX0NBU0VfRk9MRElORykKKyAgICApIHsKKyAgICAgICAgaGFzTWFwcGluZz1UUlVFOworICAgICAgICB2YWx1ZXw9VUNBU0VfRVhDRVBUSU9OOworICAgIH0KKworICAgIGlmKGRlbHRhPFVDQVNFX01JTl9ERUxUQSB8fCBVQ0FTRV9NQVhfREVMVEE8ZGVsdGEpIHsKKyAgICAgICAgdmFsdWV8PVVDQVNFX0VYQ0VQVElPTjsKKyAgICB9CisKKyAgICBpZihwcm9wcy5iaW5Qcm9wc1tVQ0hBUl9TT0ZUX0RPVFRFRF0pIHsKKyAgICAgICAgdmFsdWV8PVVDQVNFX1NPRlRfRE9UVEVEOworICAgIH0KKyAgICBpbnQzMl90IGNjPXByb3BzLmdldEludFByb3AoVUNIQVJfQ0FOT05JQ0FMX0NPTUJJTklOR19DTEFTUyk7CisgICAgaWYoY2MhPTApIHsKKyAgICAgICAgaWYocHJvcHMuYmluUHJvcHNbVUNIQVJfU09GVF9ET1RURURdKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBhIHNvZnQtZG90dGVkIGNoYXJhY3RlciBoYXMgY2NjIT0wXG4iKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYoY2M9PTIzMCkgeworICAgICAgICAgICAgdmFsdWV8PVVDQVNFX0FCT1ZFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWV8PVVDQVNFX09USEVSX0FDQ0VOVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKHByb3BzLmJpblByb3BzW1VDSEFSX0NBU0VfSUdOT1JBQkxFXSkgeworICAgICAgICB2YWx1ZXw9VUNBU0VfSUdOT1JBQkxFOworICAgIH0KKworICAgIGlmKChoYXNNYXBwaW5nIHx8ICh2YWx1ZSZVQ0FTRV9FWENFUFRJT04pKSAmJiBzdGFydCE9ZW5kKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogcmFuZ2UgJTA0bFguLiUwNGxYIGhhcyBjYXNlIG1hcHBpbmdzICIKKyAgICAgICAgICAgICAgICAib3IgcmVhc29ucyBmb3IgZGF0YSBzdHJ1Y3R1cmUgZXhjZXB0aW9uc1xuIiwKKyAgICAgICAgICAgICAgICAobG9uZylzdGFydCwgKGxvbmcpZW5kKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGhhbmRsZSBleGNlcHRpb25zICovCisgICAgaWYodmFsdWUmVUNBU0VfRVhDRVBUSU9OKSB7CisgICAgICAgIC8qIHNpbXBseSBzdG9yZSBleGNlcHRpb25zIGZvciBsYXRlciBwcm9jZXNzaW5nIGFuZCBlbmNvZGluZyAqLworICAgICAgICBpZihleGNQcm9wc0NvdW50PT1NQVhfRVhDX0NPVU5UKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBjYXNlcHJvcHNidWlsZGVyOiB0b28gbWFueSBleGNlcHRpb25zXG4iKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEV4Y1Byb3BzICpuZXdFeGNQcm9wcz1uZXcgRXhjUHJvcHMocHJvcHMpOworICAgICAgICBpZihuZXdFeGNQcm9wcz09TlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJnZW5wcm9wcyBlcnJvcjogY2FzZXByb3BzYnVpbGRlciBvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgIgorICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucyBwcm9wZXJ0aWVzXG4iKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5ld0V4Y1Byb3BzLT5oYXNDb25kaXRpb25hbENhc2VNYXBwaW5ncz1uZXdWYWx1ZXMuY29udGFpbnMoUFBVQ0RfQ09ORElUSU9OQUxfQ0FTRV9NQVBQSU5HUyk7CisgICAgICAgIG5ld0V4Y1Byb3BzLT5oYXNUdXJraWNDYXNlRm9sZGluZz1uZXdWYWx1ZXMuY29udGFpbnMoUFBVQ0RfVFVSS0lDX0NBU0VfRk9MRElORyk7CisgICAgICAgIHZhbHVlfD0odWludDMyX3QpZXhjUHJvcHNDb3VudDw8VUdFTkNBU0VfRVhDX1NISUZUOworICAgICAgICBleGNQcm9wc1tleGNQcm9wc0NvdW50KytdPW5ld0V4Y1Byb3BzOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHN0b3JlIHRoZSBzaW1wbGUgY2FzZSBtYXBwaW5nIGRlbHRhICovCisgICAgICAgIHZhbHVlfD0oKHVpbnQzMl90KWRlbHRhPDxVQ0FTRV9ERUxUQV9TSElGVCkmVUNBU0VfREVMVEFfTUFTSzsKKyAgICB9CisKKyAgICB1dHJpZTJfc2V0UmFuZ2UzMihwVHJpZSwgc3RhcnQsIGVuZCwgdmFsdWUsIFRSVUUsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHVuYWJsZSB0byBzZXQgY2FzZSBtYXBwaW5nIHZhbHVlczogJXNcbiIsCisgICAgICAgICAgICAgICAgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihoYXNNYXBwaW5nKSB7CisgICAgICAgIC8qIHVwZGF0ZSB0aGUgY2FzZS1zZW5zaXRpdmUgc2V0ICovCisgICAgICAgIGNhc2VTZW5zaXRpdmUuYWRkKHN0YXJ0KTsKKyAgICAgICAgaWYocHJvcHMuc2NmPj0wKSB7IGNhc2VTZW5zaXRpdmUuYWRkKHByb3BzLnNjZik7IH0KKyAgICAgICAgaWYocHJvcHMuc2xjPj0wKSB7IGNhc2VTZW5zaXRpdmUuYWRkKHByb3BzLnNsYyk7IH0KKyAgICAgICAgaWYocHJvcHMuc3VjPj0wKSB7IGNhc2VTZW5zaXRpdmUuYWRkKHByb3BzLnN1Yyk7IH0KKyAgICAgICAgaWYocHJvcHMuc3RjPj0wKSB7IGNhc2VTZW5zaXRpdmUuYWRkKHByb3BzLnN0Yyk7IH0KKyAgICAgICAgY2FzZVNlbnNpdGl2ZS5hZGRBbGwocHJvcHMuY2YpOworICAgICAgICBjYXNlU2Vuc2l0aXZlLmFkZEFsbChwcm9wcy5sYyk7CisgICAgICAgIGNhc2VTZW5zaXRpdmUuYWRkQWxsKHByb3BzLnVjKTsKKyAgICAgICAgY2FzZVNlbnNpdGl2ZS5hZGRBbGwocHJvcHMudGMpOworCisgICAgICAgIC8qIHVwZGF0ZSBtYXhGdWxsTGVuZ3RoICovCisgICAgICAgIGlmKHByb3BzLmNmLmxlbmd0aCgpPm1heEZ1bGxMZW5ndGgpIHsgbWF4RnVsbExlbmd0aD1wcm9wcy5jZi5sZW5ndGgoKTsgfQorICAgICAgICBpZihwcm9wcy5sYy5sZW5ndGgoKT5tYXhGdWxsTGVuZ3RoKSB7IG1heEZ1bGxMZW5ndGg9cHJvcHMubGMubGVuZ3RoKCk7IH0KKyAgICAgICAgaWYocHJvcHMudWMubGVuZ3RoKCk+bWF4RnVsbExlbmd0aCkgeyBtYXhGdWxsTGVuZ3RoPXByb3BzLnVjLmxlbmd0aCgpOyB9CisgICAgICAgIGlmKHByb3BzLnRjLmxlbmd0aCgpPm1heEZ1bGxMZW5ndGgpIHsgbWF4RnVsbExlbmd0aD1wcm9wcy50Yy5sZW5ndGgoKTsgfQorICAgIH0KKworICAgIC8qIGFkZCB0aGUgbXVsdGktY2hhcmFjdGVyIGNhc2UgZm9sZGluZyB0byB0aGUgInVuZm9sZCIgZGF0YSAqLworICAgIGlmKHByb3BzLmNmLmhhc01vcmVDaGFyMzJUaGFuKDAsIDB4N2ZmZmZmZmYsIDEpKSB7CisgICAgICAgIGFkZFVuZm9sZGluZyhzdGFydCwgcHJvcHMuY2YsIGVycm9yQ29kZSk7CisgICAgfQorfQorCit1aW50MzJfdAorQ2FzZVByb3BzQnVpbGRlcjo6bWFrZUV4Y1Byb3BzKFVDaGFyMzIgYywgdWludDMyX3QgdmFsdWUsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiAwOyB9CisgICAgaWYoZXhjUHJvcHNDb3VudD09TUFYX0VYQ19DT1VOVCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBjYXNlcHJvcHNidWlsZGVyOiB0b28gbWFueSBleGNlcHRpb25zXG4iKTsKKyAgICAgICAgZXJyb3JDb2RlPVVfSU5ERVhfT1VUT0ZCT1VORFNfRVJST1I7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBMb2NhbFBvaW50ZXI8RXhjUHJvcHM+IG5ld0V4Y1Byb3BzKG5ldyBFeGNQcm9wcyk7CisgICAgaWYobmV3RXhjUHJvcHM9PU5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgImdlbnByb3BzIGVycm9yOiBjYXNlcHJvcHNidWlsZGVyIG91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyAiCisgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMgcHJvcGVydGllc1xuIik7CisgICAgICAgIGVycm9yQ29kZT1VX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZigodmFsdWUmVUNBU0VfVFlQRV9NQVNLKT5VQ0FTRV9OT05FKSB7CisgICAgICAgIC8vIERlY29kZSB0aGUgc2ltcGxlIGNhc2UgbWFwcGluZy4KKyAgICAgICAgVUNoYXIzMiBuZXh0PWMrVUNBU0VfR0VUX0RFTFRBKHZhbHVlKTsKKyAgICAgICAgaWYobmV4dCE9YykgeworICAgICAgICAgICAgVW5pUHJvcHMgJnA9bmV3RXhjUHJvcHMtPnByb3BzOworICAgICAgICAgICAgaWYoKHZhbHVlJlVDQVNFX1RZUEVfTUFTSyk9PVVDQVNFX0xPV0VSKSB7CisgICAgICAgICAgICAgICAgcC5zdWM9cC5zdGM9bmV4dDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcC5zbGM9bmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZhbHVlJj1+KFVHRU5DQVNFX0VYQ19NQVNLfFVDQVNFX0RFTFRBX01BU0spOyAvLyByZW1vdmUgcHJldmlvdXMgc2ltcGxlIG1hcHBpbmcKKyAgICB2YWx1ZXw9KHVpbnQzMl90KWV4Y1Byb3BzQ291bnQ8PFVHRU5DQVNFX0VYQ19TSElGVDsKKyAgICB2YWx1ZXw9VUNBU0VfRVhDRVBUSU9OOworICAgIGV4Y1Byb3BzW2V4Y1Byb3BzQ291bnQrK109bmV3RXhjUHJvcHMub3JwaGFuKCk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCisvKiBmaW5hbGl6ZSByZXZlcnNlIGNhc2UgZm9sZGluZyAoInVuZm9sZCIpIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50MzJfdCBVX0NBTExDT05WCitjb21wYXJlVW5mb2xkKGNvbnN0IHZvaWQgKmNvbnRleHQsIGNvbnN0IHZvaWQgKmxlZnQsIGNvbnN0IHZvaWQgKnJpZ2h0KSB7CisgICAgcmV0dXJuIHVfbWVtY21wKChjb25zdCBVQ2hhciAqKWxlZnQsIChjb25zdCBVQ2hhciAqKXJpZ2h0LCBVR0VOQ0FTRV9VTkZPTERfV0lEVEgpOworfQorCit2b2lkCitDYXNlUHJvcHNCdWlsZGVyOjptYWtlVW5mb2xkRGF0YShVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIFVDaGFyICpwLCAqcTsKKyAgICBpbnQzMl90IGksIGosIGs7CisKKyAgICAvKiBzb3J0IHRoZSBkYXRhICovCisgICAgaW50MzJfdCB1bmZvbGRMZW5ndGg9dW5mb2xkLmxlbmd0aCgpOworICAgIGludDMyX3QgdW5mb2xkUm93cz11bmZvbGRMZW5ndGgvVUdFTkNBU0VfVU5GT0xEX1dJRFRILTE7CisgICAgVUNoYXIgKnVuZm9sZEJ1ZmZlcj11bmZvbGQuZ2V0QnVmZmVyKC0xKTsKKyAgICB1cHJ2X3NvcnRBcnJheSh1bmZvbGRCdWZmZXIrVUdFTkNBU0VfVU5GT0xEX1dJRFRILCB1bmZvbGRSb3dzLCBVR0VOQ0FTRV9VTkZPTERfV0lEVEgqMiwKKyAgICAgICAgICAgICAgICAgICBjb21wYXJlVW5mb2xkLCBOVUxMLCBGQUxTRSwgJmVycm9yQ29kZSk7CisKKyAgICAvKiBtYWtlIHVuaXF1ZS1zdHJpbmcgcm93cyBieSBtZXJnaW5nIGFkamFjZW50IG9uZXMnIGNvZGUgcG9pbnQgY29sdW1ucyAqLworCisgICAgLyogbWFrZSBwIHBvaW50IHRvIHJvdyBpLTEgKi8KKyAgICBwPXVuZm9sZEJ1ZmZlcitVR0VOQ0FTRV9VTkZPTERfV0lEVEg7CisKKyAgICBmb3IoaT0xOyBpPHVuZm9sZFJvd3M7KSB7CisgICAgICAgIGlmKDA9PXVfbWVtY21wKHAsIHArVUdFTkNBU0VfVU5GT0xEX1dJRFRILCBVR0VOQ0FTRV9VTkZPTERfU1RSSU5HX1dJRFRIKSkgeworICAgICAgICAgICAgLyogY29uY2F0ZW5hdGUgY29kZSBwb2ludCBjb2x1bW5zICovCisgICAgICAgICAgICBxPXArVUdFTkNBU0VfVU5GT0xEX1NUUklOR19XSURUSDsKKyAgICAgICAgICAgIGZvcihqPTE7IGo8VUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIICYmIHFbal0hPTA7ICsraikge30KKyAgICAgICAgICAgIGZvcihrPTA7IGs8VUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIICYmIHFbVUdFTkNBU0VfVU5GT0xEX1dJRFRIK2tdIT0wOyArK2osICsraykgeworICAgICAgICAgICAgICAgIHFbal09cVtVR0VOQ0FTRV9VTkZPTERfV0lEVEgra107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihqPlVHRU5DQVNFX1VORk9MRF9DUF9XSURUSCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHRvbyBtYW55IGNvZGUgcG9pbnRzIGluIHVuZm9sZFtdOiAlbGQ+JWQ9VUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpaiwgVUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIKTsKKyAgICAgICAgICAgICAgICBlcnJvckNvZGU9VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1I7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBtb3ZlIGZvbGxvd2luZyByb3dzIHVwIG9uZSAqLworICAgICAgICAgICAgLS11bmZvbGRSb3dzOworICAgICAgICAgICAgdV9tZW1tb3ZlKHArVUdFTkNBU0VfVU5GT0xEX1dJRFRILCBwK1VHRU5DQVNFX1VORk9MRF9XSURUSCoyLCAodW5mb2xkUm93cy1pKSpVR0VOQ0FTRV9VTkZPTERfV0lEVEgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcCs9VUdFTkNBU0VfVU5GT0xEX1dJRFRIOworICAgICAgICAgICAgKytpOworICAgICAgICB9CisgICAgfQorCisgICAgdW5mb2xkQnVmZmVyW1VDQVNFX1VORk9MRF9ST1dTXT0oVUNoYXIpdW5mb2xkUm93czsKKworICAgIGlmKGJlVmVyYm9zZSkgeworICAgICAgICBwdXRzKCJ1bmZvbGQgZGF0YToiKTsKKworICAgICAgICBwPXVuZm9sZEJ1ZmZlcjsKKyAgICAgICAgZm9yKGk9MDsgaTx1bmZvbGRSb3dzOyArK2kpIHsKKyAgICAgICAgICAgIHArPVVHRU5DQVNFX1VORk9MRF9XSURUSDsKKyAgICAgICAgICAgIHByaW50ZigiWyUyZF0gJTA0eCAlMDR4ICUwNHggPC0gJTA0eCAlMDR4XG4iLAorICAgICAgICAgICAgICAgICAgIChpbnQpaSwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bmZvbGQucmVsZWFzZUJ1ZmZlcigodW5mb2xkUm93cysxKSpVR0VOQ0FTRV9VTkZPTERfV0lEVEgpOworfQorCisvKiBjYXNlIGNsb3N1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkCitDYXNlUHJvcHNCdWlsZGVyOjphZGRDbG9zdXJlTWFwcGluZyhVQ2hhcjMyIHNyYywgVUNoYXIzMiBkZXN0LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIGlmKGJlVmVyYm9zZSkgeworICAgICAgICBwcmludGYoImFkZCBjbG9zdXJlIG1hcHBpbmcgVSslMDRseC0+VSslMDRseFxuIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylzcmMsICh1bnNpZ25lZCBsb25nKWRlc3QpOworICAgIH0KKworICAgIHVpbnQzMl90IHZhbHVlPXV0cmllMl9nZXQzMihwVHJpZSwgc3JjKTsKKyAgICBpZigodmFsdWUmVUNBU0VfRVhDRVBUSU9OKT09MCkgeworICAgICAgICAvKgorICAgICAgICAgKiBkZWNvZGUgdmFsdWUgaW50byBwMiAoZW5vdWdoIGZvciBtYWtlRXhjZXB0aW9uKCkgdG8gd29yayBwcm9wZXJseSksCisgICAgICAgICAqIGFkZCB0aGUgY2xvc3VyZSBtYXBwaW5nLAorICAgICAgICAgKiBhbmQgc2V0IHRoZSBuZXcgZXhjZXB0aW9uIGZvciBzcmMKKyAgICAgICAgICovCisgICAgICAgIHZhbHVlPW1ha2VFeGNQcm9wcyhzcmMsIHZhbHVlLCBlcnJvckNvZGUpOworICAgICAgICB1dHJpZTJfc2V0MzIocFRyaWUsIHNyYywgdmFsdWUsICZlcnJvckNvZGUpOworICAgICAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogdW5hYmxlIHRvIHNldCBjYXNlIG1hcHBpbmcgdmFsdWVzLCBjb2RlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBleGNQcm9wc1t2YWx1ZT4+VUdFTkNBU0VfRVhDX1NISUZUXS0+Y2xvc3VyZS5hZGQoZGVzdCk7Cit9CisKKy8qCisgKiBGaW5kIG1pc3NpbmcgY2FzZSBtYXBwaW5nIHJlbGF0aW9uc2hpcHMgYW5kIGFkZCBtYXBwaW5ncyBmb3IgY2FzZSBjbG9zdXJlLgorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgZnJvbSBhbiAib3JpZ2luYWwiIGNvZGUgcG9pbnQgYW5kIHJlY3Vyc2l2ZWx5CisgKiBmaW5kcyBpdHMgY2FzZSBtYXBwaW5ncyBhbmQgdGhlIGNhc2UgbWFwcGluZ3Mgb2Ygd2hlcmUgaXQgbWFwcyB0by4KKyAqCisgKiBUaGUgcmVjdXJzaW9uIGRlcHRoIGlzIGNhcHBlZCBhdCAzIG5lc3RlZCBjYWxscyBvZiB0aGlzIGZ1bmN0aW9uLgorICogSW4gZWFjaCBjYWxsLCB0aGUgY3VycmVudCBjb2RlIHBvaW50IGlzIGMsIGFuZCB0aGUgZnVuY3Rpb24gZW51bWVyYXRlcworICogYWxsIG9mIGMncyBzaW1wbGUgKHNpbmdsZS1jb2RlIHBvaW50KSBjYXNlIG1hcHBpbmdzLgorICogcHJldiBpcyB0aGUgY29kZSBwb2ludCB0aGF0IGNhc2UtbWFwcGVkIHRvIGMuCisgKiBwcmV2MiBpcyB0aGUgY29kZSBwb2ludCB0aGF0IGNhc2UtbWFwcGVkIHRvIHByZXYuCisgKgorICogVGhlIGluaXRpYWwgZnVuY3Rpb24gY2FsbCBoYXMgcHJldjI8MCwgcHJldjwwLCBhbmQgYz09b3JpZworICogKG1hcmtpbmcgbm8gY29kZSBwb2ludHMpLgorICogSXQgZW51bWVyYXRlcyBjJ3MgY2FzZSBtYXBwaW5ncyBhbmQgcmVjdXJzZXMgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbi4KKyAqCisgKiBUaGUgc2Vjb25kLWxldmVsIGZ1bmN0aW9uIGNhbGwgaGFzIHByZXYyPDAsIHByZXY9PW9yaWcsIGFuZCBjIGlzCisgKiB0aGUgZGVzdGluYXRpb24gY29kZSBwb2ludCBvZiBvbmUgb2YgcHJldidzIGNhc2UgbWFwcGluZ3MuCisgKiBUaGUgZnVuY3Rpb24gY2hlY2tzIGlmIGFueSBvZiBjJ3MgY2FzZSBtYXBwaW5ncyBnbyBiYWNrIHRvIG9yaWcKKyAqIGFuZCBhZGRzIGEgY2xvc3VyZSBtYXBwaW5nIGlmIG5vdC4KKyAqIEluIG90aGVyIHdvcmRzLCBpdCB0dXJucyBhIGNhc2UgbWFwcGluZyByZWxhdGlvbnNoaXAgb2YKKyAqICAgb3JpZy0+YworICogaW50bworICogICBvcmlnPC0+YworICoKKyAqIFRoZSB0aGlyZC1sZXZlbCBmdW5jdGlvbiBjYWxsIGhhcyBwcmV2Mj09b3JpZywgcHJldj49MCwgYW5kIGMgaXMKKyAqIHRoZSBkZXN0aW5hdGlvbiBjb2RlIHBvaW50IG9mIG9uZSBvZiBwcmV2J3MgY2FzZSBtYXBwaW5ncy4KKyAqIChBbmQgcHJldiBpcyB0aGUgZGVzdGluYXRpb24gb2Ygb25lIG9mIHByZXYyJ3MgY2FzZSBtYXBwaW5ncy4pCisgKiBUaGUgZnVuY3Rpb24gY2hlY2tzIGlmIGFueSBvZiBjJ3MgY2FzZSBtYXBwaW5ncyBnbyBiYWNrIHRvIG9yaWcKKyAqIGFuZCBhZGRzIGEgY2xvc3VyZSBtYXBwaW5nIGlmIG5vdC4KKyAqIEluIG90aGVyIHdvcmRzLCBpdCB0dXJucyBjYXNlIG1hcHBpbmcgcmVsYXRpb25zaGlwcyBvZgorICogICBvcmlnLT5wcmV2LT5jIG9yIG9yaWctPnByZXY8LT5jCisgKiBpbnRvCisgKiAgIG9yaWctPnByZXYtPmMtPm9yaWcgb3Igb3JpZy0+cHJldjwtPmMtPm9yaWcKKyAqIGV0Yy4KKyAqIChHcmFwaGljYWxseSwgdGhpcyBjbG9zZXMgYSB0cmlhbmdsZS4pCisgKgorICogV2l0aCByZXBlYXRlZCBhcHBsaWNhdGlvbiBvbiBhbGwgY29kZSBwb2ludHMgdW50aWwgbm8gbW9yZSBjbG9zdXJlIG1hcHBpbmdzCisgKiBhcmUgYWRkZWQsIGFsbCBjYXNlIGVxdWl2YWxlbmNlIGdyb3VwcyBnZXQgY29tcGxldGUgbWFwcGluZ3MuCisgKiBUaGF0IGlzLCBpbiBlYWNoIGdyb3VwIG9mIGNvZGUgcG9pbnRzIHdpdGggY2FzZSByZWxhdGlvbnNoaXBzCisgKiBlYWNoIGNvZGUgcG9pbnQgd2lsbCBpbiB0aGUgZW5kIGhhdmUgc29tZSBtYXBwaW5nIHRvIGVhY2ggb3RoZXIKKyAqIGNvZGUgcG9pbnQgaW4gdGhlIGdyb3VwLgorICoKKyAqIEByZXR1cm4gVFJVRSBpZiBhIGNsb3N1cmUgbWFwcGluZyB3YXMgYWRkZWQKKyAqLworVUJvb2wKK0Nhc2VQcm9wc0J1aWxkZXI6OmFkZENsb3N1cmUoVUNoYXIzMiBvcmlnLCBVQ2hhcjMyIHByZXYyLCBVQ2hhcjMyIHByZXYsIFVDaGFyMzIgYywgdWludDMyX3QgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiBGQUxTRTsgfQorCisgICAgVUNoYXIzMiBuZXh0OworICAgIFVCb29sIHNvbWVNYXBwaW5nc0FkZGVkPUZBTFNFOworCisgICAgaWYoYyE9b3JpZykgeworICAgICAgICAvKiBnZXQgdGhlIHByb3BlcnRpZXMgZm9yIGMgKi8KKyAgICAgICAgdmFsdWU9dXRyaWUyX2dldDMyKHBUcmllLCBjKTsKKyAgICB9CisgICAgLyogZWxzZSBpZiBjPT1vcmlnIHRoZW4gYydzIHZhbHVlIHdhcyBwYXNzZWQgaW4gKi8KKworICAgIGlmKHZhbHVlJlVDQVNFX0VYQ0VQVElPTikgeworICAgICAgICBVbmljb2RlU2V0IHNldDsKKworICAgICAgICBFeGNQcm9wcyAmZXA9KmV4Y1Byb3BzW3ZhbHVlPj5VR0VOQ0FTRV9FWENfU0hJRlRdOworICAgICAgICBVbmlQcm9wcyAmcD1lcC5wcm9wczsKKworICAgICAgICAvKgorICAgICAgICAgKiBtYXJrZXIgZm9yIHdoZXRoZXIgYW55IG9mIGMncyBtYXBwaW5ncyBnb2VzIHRvIG9yaWcKKyAgICAgICAgICogYz09b3JpZzogcHJldmVudCBhZGRpbmcgYSBjbG9zdXJlIG1hcHBpbmcgd2hlbiBnZXR0aW5nIG9yaWcncyBvd24sIGRpcmVjdCBtYXBwaW5ncworICAgICAgICAgKi8KKyAgICAgICAgVUJvb2wgbWFwc1RvT3JpZz0oVUJvb2wpKGM9PW9yaWcpOworCisgICAgICAgIC8qIGNvbGxlY3QgYydzIGNhc2UgbWFwcGluZyBkZXN0aW5hdGlvbnMgaW4gc2V0W10gKi8KKyAgICAgICAgaWYoKG5leHQ9cC5zdWMpPj0wICYmIG5leHQhPWMpIHsKKyAgICAgICAgICAgIHNldC5hZGQobmV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoKG5leHQ9cC5zbGMpPj0wICYmIG5leHQhPWMpIHsKKyAgICAgICAgICAgIHNldC5hZGQobmV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYocC5zdWMhPShuZXh0PXAuc3RjKSAmJiBuZXh0IT1jKSB7CisgICAgICAgICAgICBzZXQuYWRkKG5leHQpOworICAgICAgICB9CisgICAgICAgIGlmKChuZXh0PXAuc2NmKT49MCAmJiBuZXh0IT1jKSB7CisgICAgICAgICAgICBzZXQuYWRkKG5leHQpOworICAgICAgICB9CisKKyAgICAgICAgLyogYWRkIGMncyBjdXJyZW50IGNsb3N1cmUgbWFwcGluZ3MgdG8gc2V0ICovCisgICAgICAgIHNldC5hZGRBbGwoZXAuY2xvc3VyZSk7CisKKyAgICAgICAgLyogcHJvY2VzcyBhbGwgY29kZSBwb2ludHMgdG8gd2hpY2ggYyBjYXNlLW1hcHMgKi8KKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIoc2V0KTsKKyAgICAgICAgd2hpbGUoaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgIG5leHQ9aXRlci5nZXRDb2RlcG9pbnQoKTsgLyogbmV4dCE9YyAqLworCisgICAgICAgICAgICBpZihuZXh0PT1vcmlnKSB7CisgICAgICAgICAgICAgICAgbWFwc1RvT3JpZz1UUlVFOyAvKiByZW1lbWJlciB0aGF0IHdlIG1hcCB0byBvcmlnICovCisgICAgICAgICAgICB9IGVsc2UgaWYocHJldjI8MCAmJiBuZXh0IT1wcmV2KSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByZWN1cnNlIHVubGVzcworICAgICAgICAgICAgICAgICAqIHdlIGhhdmUgcmVhY2hlZCBtYXhpbXVtIGRlcHRoIChwcmV2Mj49MCkgb3IKKyAgICAgICAgICAgICAgICAgKiB0aGlzIGlzIGEgbWFwcGluZyB0byBvbmUgb2YgdGhlIHByZXZpb3VzIGNvZGUgcG9pbnRzIChvcmlnLCBwcmV2LCBjKQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNvbWVNYXBwaW5nc0FkZGVkfD1hZGRDbG9zdXJlKG9yaWcsIHByZXYsIGMsIG5leHQsIDAsIGVycm9yQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZighbWFwc1RvT3JpZykgeworICAgICAgICAgICAgYWRkQ2xvc3VyZU1hcHBpbmcoYywgb3JpZywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYoKHZhbHVlJlVDQVNFX1RZUEVfTUFTSyk+VUNBU0VfTk9ORSkgeworICAgICAgICAgICAgLyogb25lIHNpbXBsZSBjYXNlIG1hcHBpbmcsIGRvbid0IGNhcmUgd2hpY2ggb25lICovCisgICAgICAgICAgICBuZXh0PWMrVUNBU0VfR0VUX0RFTFRBKHZhbHVlKTsKKyAgICAgICAgICAgIGlmKG5leHQhPWMpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHJlY3Vyc2UgdW5sZXNzCisgICAgICAgICAgICAgICAgICogd2UgaGF2ZSByZWFjaGVkIG1heGltdW0gZGVwdGggKHByZXYyPj0wKSBvcgorICAgICAgICAgICAgICAgICAqIHRoaXMgaXMgYSBtYXBwaW5nIHRvIG9uZSBvZiB0aGUgcHJldmlvdXMgY29kZSBwb2ludHMgKG9yaWcsIHByZXYsIGMpCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYocHJldjI8MCAmJiBuZXh0IT1vcmlnICYmIG5leHQhPXByZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgc29tZU1hcHBpbmdzQWRkZWR8PWFkZENsb3N1cmUob3JpZywgcHJldiwgYywgbmV4dCwgMCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZihjIT1vcmlnICYmIG5leHQhPW9yaWcpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogYyBkb2VzIG5vdCBtYXAgdG8gb3JpZywgYWRkIGEgY2xvc3VyZSBtYXBwaW5nIGMtPm9yaWcgKi8KKyAgICAgICAgICAgICAgICAgICAgYWRkQ2xvc3VyZU1hcHBpbmcoYywgb3JpZywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNvbWVNYXBwaW5nc0FkZGVkOworfQorCit2b2lkCitDYXNlUHJvcHNCdWlsZGVyOjptYWtlQ2FzZUNsb3N1cmUoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICAvKgorICAgICAqIGZpbmFsaXplIHRoZSAidW5mb2xkIiBkYXRhIGJlY2F1c2Ugd2UgbmVlZCB0byB1c2UgaXQgdG8gYWRkIGNsb3N1cmUgbWFwcGluZ3MKKyAgICAgKiBmb3Igc2l0dWF0aW9ucyBsaWtlIEZCMDUtPiJzdCI8LUZCMDYKKyAgICAgKiB3aGVyZSB3ZSB3b3VsZCBvdGhlcndpc2UgbWlzcyB0aGUgRkIwNTwtPkZCMDYgcmVsYXRpb25zaGlwCisgICAgICovCisgICAgbWFrZVVuZm9sZERhdGEoZXJyb3JDb2RlKTsKKworICAgIC8qIHVzZSB0aGUgInVuZm9sZCIgZGF0YSB0byBhZGQgbWFwcGluZ3MgKi8KKworICAgIC8qIHAgYWx3YXlzIHBvaW50cyB0byB0aGUgY29kZSBwb2ludHM7IHRoaXMgbG9vcCBpZ25vcmVzIHRoZSBzdHJpbmdzIGNvbXBsZXRlbHkgKi8KKyAgICBjb25zdCBVQ2hhciAqcD11bmZvbGQuZ2V0QnVmZmVyKCkrVUdFTkNBU0VfVU5GT0xEX1dJRFRIK1VHRU5DQVNFX1VORk9MRF9TVFJJTkdfV0lEVEg7CisgICAgaW50MzJfdCB1bmZvbGRSb3dzPXVuZm9sZC5sZW5ndGgoKS9VR0VOQ0FTRV9VTkZPTERfV0lEVEgtMTsKKworICAgIGZvcihpbnQzMl90IGk9MDsgaTx1bmZvbGRSb3dzOyBwKz1VR0VOQ0FTRV9VTkZPTERfV0lEVEgsICsraSkgeworICAgICAgICBpbnQzMl90IGo9MDsKKyAgICAgICAgVUNoYXIzMiBjOworICAgICAgICBVMTZfTkVYVF9VTlNBRkUocCwgaiwgYyk7CisgICAgICAgIHdoaWxlKGo8VUdFTkNBU0VfVU5GT0xEX0NQX1dJRFRIICYmIHBbal0hPTApIHsKKyAgICAgICAgICAgIFVDaGFyMzIgYzI7CisgICAgICAgICAgICBVMTZfTkVYVF9VTlNBRkUocCwgaiwgYzIpOworICAgICAgICAgICAgYWRkQ2xvc3VyZShjLCBVX1NFTlRJTkVMLCBjLCBjMiwgMCwgZXJyb3JDb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKGJlVmVyYm9zZSkgeworICAgICAgICBwdXRzKCItLS0tIC0tLS0gLS0tLSAtLS0tIChkb25lIHdpdGggY2xvc3VyZXMgZnJvbSB1bmZvbGRpbmcpIik7CisgICAgfQorCisgICAgLyogYWRkIGZ1cnRoZXIgY2xvc3VyZSBtYXBwaW5ncyBmcm9tIGFuYWx5emluZyBzaW1wbGUgbWFwcGluZ3MgKi8KKyAgICBVQm9vbCBzb21lTWFwcGluZ3NBZGRlZDsKKyAgICBkbyB7CisgICAgICAgIHNvbWVNYXBwaW5nc0FkZGVkPUZBTFNFOworCisgICAgICAgIGZvcihVQ2hhcjMyIGM9MDsgYzw9MHgxMGZmZmY7ICsrYykgeworICAgICAgICAgICAgdWludDMyX3QgdmFsdWU9dXRyaWUyX2dldDMyKHBUcmllLCBjKTsKKyAgICAgICAgICAgIGlmKHZhbHVlIT0wKSB7CisgICAgICAgICAgICAgICAgc29tZU1hcHBpbmdzQWRkZWR8PWFkZENsb3N1cmUoYywgVV9TRU5USU5FTCwgVV9TRU5USU5FTCwgYywgdmFsdWUsIGVycm9yQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihiZVZlcmJvc2UgJiYgc29tZU1hcHBpbmdzQWRkZWQpIHsKKyAgICAgICAgICAgIHB1dHMoIi0tLS0gLS0tLSAtLS0tIC0tLS0iKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUoc29tZU1hcHBpbmdzQWRkZWQpOworfQorCisvKiBleGNlcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgVUJvb2wKK2Z1bGxNYXBwaW5nRXF1YWxzU2ltcGxlKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnMsIFVDaGFyMzIgc2ltcGxlLCBVQ2hhcjMyIGMpIHsKKyAgICBpZihzaW1wbGU8PTApIHsKKyAgICAgICAgc2ltcGxlPWM7IC8qIFVDRCBoYXMgbm8gc2ltcGxlIG1hcHBpbmcgaWYgaXQncyB0aGUgc2FtZSBhcyB0aGUgY29kZSBwb2ludCBpdHNlbGYgKi8KKyAgICB9CisgICAgcmV0dXJuIHMubGVuZ3RoKCk9PVUxNl9MRU5HVEgoc2ltcGxlKSAmJiBzLmNoYXIzMkF0KDApPT1zaW1wbGU7Cit9CisKK2ludDMyX3QKK0Nhc2VQcm9wc0J1aWxkZXI6Om1ha2VFeGNlcHRpb24oVUNoYXIzMiBjLCB1aW50MzJfdCB2YWx1ZSwgRXhjUHJvcHMgJmVwLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm4gMDsgfQorCisgICAgLyogZXhjZXB0aW9ucy5sZW5ndGgoKSBtaWdodCBiZSByZXR1cm5lZCBmb3Igc3RvcmluZyBpbiB0aGUgdHJpZSB3b3JkICovCisgICAgaWYoZXhjZXB0aW9ucy5sZW5ndGgoKT49VUNBU0VfTUFYX0VYQ0VQVElPTlMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogY2FzZXByb3BzYnVpbGRlcjogdG9vIG1hbnkgZXhjZXB0aW9ucyB3b3Jkc1xuIik7CisgICAgICAgIGVycm9yQ29kZT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogY29weSBhbmQgc2hpZnQgdGhlIHNvZnQtZG90dGVkIGJpdHMgKi8KKyAgICBVQ2hhciBleGNXb3JkPShVQ2hhcikoKHZhbHVlJlVDQVNFX0RPVF9NQVNLKTw8VUNBU0VfRVhDX0RPVF9TSElGVCk7CisKKyAgICBVbmlQcm9wcyAmcD1lcC5wcm9wczsKKworICAgIC8qIHNldCB0aGUgYml0cyBmb3IgY29uZGl0aW9uYWwgbWFwcGluZ3MgKi8KKyAgICBpZihlcC5oYXNDb25kaXRpb25hbENhc2VNYXBwaW5ncykgeworICAgICAgICBleGNXb3JkfD1VQ0FTRV9FWENfQ09ORElUSU9OQUxfU1BFQ0lBTDsKKyAgICAgICAgcC5sYy5yZW1vdmUoKTsKKyAgICAgICAgcC51Yy5yZW1vdmUoKTsKKyAgICAgICAgcC50Yy5yZW1vdmUoKTsKKyAgICB9CisgICAgaWYoZXAuaGFzVHVya2ljQ2FzZUZvbGRpbmcpIHsKKyAgICAgICAgZXhjV29yZHw9VUNBU0VfRVhDX0NPTkRJVElPTkFMX0ZPTEQ7CisgICAgICAgIHAuY2YucmVtb3ZlKCk7CisgICAgfQorCisgICAgLyogcmVtb3ZlIHJlZHVuZGFudCBkYXRhICovCisgICAgLyogZG8gbm90IHN0b3JlIGZ1bGwgbWFwcGluZ3MgaWYgdGhleSBhcmUgdGhlIHNhbWUgYXMgdGhlIHNpbXBsZSBvbmVzICovCisgICAgaWYoZnVsbE1hcHBpbmdFcXVhbHNTaW1wbGUocC5sYywgcC5zbGMsIGMpKSB7CisgICAgICAgIHAubGMucmVtb3ZlKCk7CisgICAgfQorICAgIGlmKGZ1bGxNYXBwaW5nRXF1YWxzU2ltcGxlKHAudWMsIHAuc3VjLCBjKSkgeworICAgICAgICBwLnVjLnJlbW92ZSgpOworICAgIH0KKyAgICBpZihmdWxsTWFwcGluZ0VxdWFsc1NpbXBsZShwLnRjLCBwLnN0YywgYykpIHsKKyAgICAgICAgcC50Yy5yZW1vdmUoKTsKKyAgICB9CisgICAgaWYoZnVsbE1hcHBpbmdFcXVhbHNTaW1wbGUocC5jZiwgcC5zY2YsIGMpKSB7CisgICAgICAgIHAuY2YucmVtb3ZlKCk7CisgICAgfQorCisgICAgLyogd3JpdGUgdGhlIG9wdGlvbmFsIHNsb3RzICovCisgICAgdWludDMyX3Qgc2xvdHNbOF07CisgICAgdWludDMyX3Qgc2xvdEJpdHM9MDsKKyAgICBpbnQzMl90IGNvdW50PTA7CisKKyAgICBpZihwLnNsYz49MCkgeworICAgICAgICBzbG90c1tjb3VudF09KHVpbnQzMl90KXAuc2xjOworICAgICAgICBzbG90Qml0c3w9c2xvdHNbY291bnRdOworICAgICAgICArK2NvdW50OworICAgICAgICBleGNXb3JkfD1VX01BU0soVUNBU0VfRVhDX0xPV0VSKTsKKyAgICB9CisgICAgaWYoIHAuc2NmPj0wICYmCisgICAgICAgIChwLnNsYz49MCA/CisgICAgICAgICAgICBwLnNsYyE9cC5zbGMgOgorICAgICAgICAgICAgcC5zbGMhPWMpCisgICAgKSB7CisgICAgICAgIHNsb3RzW2NvdW50XT0odWludDMyX3QpcC5zY2Y7CisgICAgICAgIHNsb3RCaXRzfD1zbG90c1tjb3VudF07CisgICAgICAgICsrY291bnQ7CisgICAgICAgIGV4Y1dvcmR8PVVfTUFTSyhVQ0FTRV9FWENfRk9MRCk7CisgICAgfQorICAgIGlmKHAuc3VjPj0wKSB7CisgICAgICAgIHNsb3RzW2NvdW50XT0odWludDMyX3QpcC5zdWM7CisgICAgICAgIHNsb3RCaXRzfD1zbG90c1tjb3VudF07CisgICAgICAgICsrY291bnQ7CisgICAgICAgIGV4Y1dvcmR8PVVfTUFTSyhVQ0FTRV9FWENfVVBQRVIpOworICAgIH0KKyAgICBpZihwLnN1YyE9cC5zdGMpIHsKKyAgICAgICAgaWYocC5zdGM+PTApIHsKKyAgICAgICAgICAgIHNsb3RzW2NvdW50XT0odWludDMyX3QpcC5zdGM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG90c1tjb3VudF09KHVpbnQzMl90KWM7CisgICAgICAgIH0KKyAgICAgICAgc2xvdEJpdHN8PXNsb3RzW2NvdW50XTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgZXhjV29yZHw9VV9NQVNLKFVDQVNFX0VYQ19USVRMRSk7CisgICAgfQorCisgICAgLyogbGVuZ3RoIG9mIGNhc2UgY2xvc3VyZSAqLworICAgIFVuaWNvZGVTdHJpbmcgY2xvc3VyZVN0cmluZzsKKyAgICBpZighZXAuY2xvc3VyZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIoZXAuY2xvc3VyZSk7CisgICAgICAgIHdoaWxlKGl0ZXIubmV4dCgpKSB7IGNsb3N1cmVTdHJpbmcuYXBwZW5kKGl0ZXIuZ2V0Q29kZXBvaW50KCkpOyB9CisgICAgICAgIGludDMyX3QgbGVuZ3RoPWNsb3N1cmVTdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIGlmKGxlbmd0aD5VQ0FTRV9DTE9TVVJFX01BWF9MRU5HVEgpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IGNhc2UgY2xvc3VyZSBmb3IgVSslMDRsWCBoYXMgbGVuZ3RoICVkICIKKyAgICAgICAgICAgICAgICAgICAgIndoaWNoIGV4Y2VlZHMgVUNBU0VfQ0xPU1VSRV9NQVhfTEVOR1RIPSVkXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZyljLCAoaW50KWxlbmd0aCwgKGludClVQ0FTRV9DTE9TVVJFX01BWF9MRU5HVEgpOworICAgICAgICAgICAgZXJyb3JDb2RlPVVfQlVGRkVSX09WRVJGTE9XX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgc2xvdHNbY291bnRdPSh1aW50MzJfdClsZW5ndGg7IC8qIG11c3QgYmUgMS4uVUNBU0VfQ0xPU1VSRV9NQVhfTEVOR1RIICovCisgICAgICAgIHNsb3RCaXRzfD1zbG90c1tjb3VudF07CisgICAgICAgICsrY291bnQ7CisgICAgICAgIGV4Y1dvcmR8PVVfTUFTSyhVQ0FTRV9FWENfQ0xPU1VSRSk7CisgICAgfQorCisgICAgLyogbGVuZ3RocyBvZiBmdWxsIGNhc2UgbWFwcGluZyBzdHJpbmdzLCBzdG9yZWQgaW4gdGhlIGxhc3Qgc2xvdCAqLworICAgIGludDMyX3QgZnVsbExlbmd0aHM9CisgICAgICAgIHAubGMubGVuZ3RoKCl8CisgICAgICAgIChwLmNmLmxlbmd0aCgpPDw0KXwKKyAgICAgICAgKHAudWMubGVuZ3RoKCk8PDgpfAorICAgICAgICAocC50Yy5sZW5ndGgoKTw8MTIpOworICAgIGlmKGZ1bGxMZW5ndGhzIT0wKSB7CisgICAgICAgIHNsb3RzW2NvdW50XT0odWludDMyX3QpZnVsbExlbmd0aHM7CisgICAgICAgIHNsb3RCaXRzfD1zbG90c1tjb3VudF07CisgICAgICAgICsrY291bnQ7CisgICAgICAgIGV4Y1dvcmR8PVVfTUFTSyhVQ0FTRV9FWENfRlVMTF9NQVBQSU5HUyk7CisgICAgfQorCisgICAgaWYoY291bnQ9PTApIHsKKyAgICAgICAgLyogTm8gb3B0aW9uYWwgc2xvdHM6IFRyeSB0byBzaGFyZSBleGNXb3JkIGVudHJpZXMuICovCisgICAgICAgIGludDMyX3QgZXhjSW5kZXg9ZXhjZXB0aW9ucy5pbmRleE9mKChVQ2hhcilleGNXb3JkKTsKKyAgICAgICAgaWYoZXhjSW5kZXg+PTApIHsKKyAgICAgICAgICAgIHJldHVybiBleGNJbmRleDsKKyAgICAgICAgfQorICAgICAgICAvKiBub3QgZm91bmQgKi8KKyAgICAgICAgZXhjSW5kZXg9ZXhjZXB0aW9ucy5sZW5ndGgoKTsKKyAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoKFVDaGFyKWV4Y1dvcmQpOworICAgICAgICByZXR1cm4gZXhjSW5kZXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogd3JpdGUgc2xvdHMgKi8KKyAgICAgICAgaW50MzJfdCBleGNJbmRleD1leGNlcHRpb25zLmxlbmd0aCgpOworICAgICAgICBleGNlcHRpb25zLmFwcGVuZCgoVUNoYXIpMCk7ICAvKiBwbGFjZWhvbGRlciBmb3IgZXhjV29yZCB3aGljaCB3aWxsIGJlIHN0b3JlZCBhdCBleGNJbmRleCAqLworCisgICAgICAgIGlmKHNsb3RCaXRzPD0weGZmZmYpIHsKKyAgICAgICAgICAgIGZvcihpbnQzMl90IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoKFVDaGFyKXNsb3RzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4Y1dvcmR8PVVDQVNFX0VYQ19ET1VCTEVfU0xPVFM7CisgICAgICAgICAgICBmb3IoaW50MzJfdCBpPTA7IGk8Y291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKChVQ2hhcikoc2xvdHNbaV0+PjE2KSk7CisgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoKFVDaGFyKXNsb3RzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIHdyaXRlIHRoZSBmdWxsIGNhc2UgbWFwcGluZyBzdHJpbmdzICovCisgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKHAubGMpOworICAgICAgICBleGNlcHRpb25zLmFwcGVuZChwLmNmKTsKKyAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQocC51Yyk7CisgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKHAudGMpOworCisgICAgICAgIC8qIHdyaXRlIHRoZSBjbG9zdXJlIGRhdGEgKi8KKyAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoY2xvc3VyZVN0cmluZyk7CisKKyAgICAgICAgLyogd3JpdGUgdGhlIG1haW4gZXhjZXB0aW9ucyB3b3JkICovCisgICAgICAgIGV4Y2VwdGlvbnMuc2V0Q2hhckF0KGV4Y0luZGV4LCAoVUNoYXIpZXhjV29yZCk7CisKKyAgICAgICAgcmV0dXJuIGV4Y0luZGV4OworICAgIH0KK30KKwordm9pZAorQ2FzZVByb3BzQnVpbGRlcjo6bWFrZUV4Y2VwdGlvbnMoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICAvKgorICAgICAqIEVuY29kZSBjYXNlLWlnbm9yYWJsZSBhcyBkZWx0YT09MSBvbiB1bmNhc2VkIGNoYXJhY3RlcnMsCisgICAgICogYW5kIHdpdGggYW4gZXhjZXB0aW9uIGJpdCBvbiBjYXNlZCBjaGFyYWN0ZXJzIGFuZCBjaGFyYWN0ZXJzIHdpdGggYW5vdGhlciBleGNlcHRpb24uCisgICAgICoKKyAgICAgKiBDaGFuZ2UgZnJvbSB0ZW1wb3JhcnkgVUdFTkNBU0VfRVhDX1NISUZUJ2VkIGluZGV4IGludG8gZXhjUHJvcHNbXQorICAgICAqIHRvIFVDQVNFX0VYQ19TSElGVCdlZCBpbmRleCBpbnRvIGVuY29kZWQgZXhjZXB0aW9uc1tdLgorICAgICAqLworICAgIGZvcihVQ2hhcjMyIGM9MDsgYzw9MHgxMGZmZmY7ICsrYykgeworICAgICAgICB1aW50MzJfdCB2YWx1ZT11dHJpZTJfZ2V0MzIocFRyaWUsIGMpOworICAgICAgICBpZih2YWx1ZSZVQ0FTRV9FWENFUFRJT04pIHsKKyAgICAgICAgICAgIGludDMyX3QgZXhjSW5kZXg9bWFrZUV4Y2VwdGlvbihjLCB2YWx1ZSwgKmV4Y1Byb3BzW3ZhbHVlPj5VR0VOQ0FTRV9FWENfU0hJRlRdLCBlcnJvckNvZGUpOworICAgICAgICAgICAgdmFsdWU9KHZhbHVlJn4oVUdFTkNBU0VfRVhDX01BU0t8VUNBU0VfRVhDX01BU0spKXwoKHVpbnQzMl90KWV4Y0luZGV4PDxVQ0FTRV9FWENfU0hJRlQpOworICAgICAgICAgICAgdXRyaWUyX3NldDMyKHBUcmllLCBjLCB2YWx1ZSwgJmVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIGdlbmVyYXRlIG91dHB1dCBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQzMl90IGluZGV4ZXNbVUNBU0VfSVhfVE9QXT17CisgICAgVUNBU0VfSVhfVE9QLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgdWludDhfdCB0cmllQmxvY2tbNDAwMDBdOworc3RhdGljIGludDMyX3QgdHJpZVNpemU7CisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6OmJ1aWxkKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHB1dHMoIiogdWNhc2UuaWN1IHN0YXRzICoiKTsKKyAgICB9CisKKyAgICBtYWtlQ2FzZUNsb3N1cmUoZXJyb3JDb2RlKTsKKyAgICBtYWtlRXhjZXB0aW9ucyhlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgLyoKKyAgICAgKiBBZGQgb25lIGNvbXBsZXggbWFwcGluZyB0byBjYXNlU2Vuc2l0aXZlIHRoYXQgd2FzIGZpbHRlcmVkIG91dCBhYm92ZToKKyAgICAgKiBHcmVlayBmaW5hbCBTaWdtYSBoYXMgYSBjb25kaXRpb25hbCBtYXBwaW5nIGJ1dCBub3QgbG9jYWxlLXNlbnNpdGl2ZSwKKyAgICAgKiBhbmQgaXQgaXMgdGFrZW4gd2hlbiBsb3dlcmNhc2luZyBqdXN0IFUrMDNBMyBhbG9uZS4KKyAgICAgKiAwM0EzOyAwM0MyOyAwM0EzOyAwM0EzOyBGaW5hbF9TaWdtYTsgIyBHUkVFSyBDQVBJVEFMIExFVFRFUiBTSUdNQQorICAgICAqLworICAgIGNhc2VTZW5zaXRpdmUuYWRkKDB4M2MyKTsKKworICAgIFVuaWNvZGVTZXRJdGVyYXRvciBpdGVyKGNhc2VTZW5zaXRpdmUpOworICAgIHdoaWxlKGl0ZXIubmV4dCgpKSB7CisgICAgICAgIFVDaGFyMzIgYz1pdGVyLmdldENvZGVwb2ludCgpOworICAgICAgICB1aW50MzJfdCB2YWx1ZT11dHJpZTJfZ2V0MzIocFRyaWUsIGMpOworICAgICAgICBpZigodmFsdWUmVUNBU0VfU0VOU0lUSVZFKT09MCkgeworICAgICAgICAgICAgdXRyaWUyX3NldDMyKHBUcmllLCBjLCB2YWx1ZXxVQ0FTRV9TRU5TSVRJVkUsICZlcnJvckNvZGUpOworICAgICAgICB9CisgICAgfQorICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHVuYWJsZSB0byBzZXQgVUNBU0VfU0VOU0lUSVZFOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHV0cmllMl9mcmVlemUocFRyaWUsIFVUUklFMl8xNl9WQUxVRV9CSVRTLCAmZXJyb3JDb2RlKTsKKyAgICB0cmllU2l6ZT11dHJpZTJfc2VyaWFsaXplKHBUcmllLCB0cmllQmxvY2ssIHNpemVvZih0cmllQmxvY2spLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiB1dHJpZTJfZnJlZXplKCkrdXRyaWUyX3NlcmlhbGl6ZSgpIGZhaWxlZDogJXMgKGxlbmd0aCAlbGQpXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSksIChsb25nKXRyaWVTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGluZGV4ZXNbVUNBU0VfSVhfRVhDX0xFTkdUSF09ZXhjZXB0aW9ucy5sZW5ndGgoKTsKKyAgICBpbmRleGVzW1VDQVNFX0lYX1RSSUVfU0laRV09dHJpZVNpemU7CisgICAgaW5kZXhlc1tVQ0FTRV9JWF9VTkZPTERfTEVOR1RIXT11bmZvbGQubGVuZ3RoKCk7CisgICAgaW5kZXhlc1tVQ0FTRV9JWF9MRU5HVEhdPShpbnQzMl90KXNpemVvZihpbmRleGVzKSt0cmllU2l6ZSsyKmV4Y2VwdGlvbnMubGVuZ3RoKCkrMip1bmZvbGQubGVuZ3RoKCk7CisKKyAgICBpbmRleGVzW1VDQVNFX0lYX01BWF9GVUxMX0xFTkdUSF09bWF4RnVsbExlbmd0aDsKKworICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHByaW50ZigidHJpZSBzaXplIGluIGJ5dGVzOiAgICAgICAgICAgICAgICAgICAgJTVkXG4iLCAoaW50KXRyaWVTaXplKTsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2YgY29kZSBwb2ludHMgd2l0aCBleGNlcHRpb25zOiAlNWRcbiIsIGV4Y1Byb3BzQ291bnQpOworICAgICAgICBwcmludGYoInNpemUgaW4gYnl0ZXMgb2YgZXhjZXB0aW9uczogICAgICAgICAgICU1ZFxuIiwgMipleGNlcHRpb25zLmxlbmd0aCgpKTsKKyAgICAgICAgcHJpbnRmKCJzaXplIGluIGJ5dGVzIG9mIHJldmVyc2UgZm9sZGluZ3M6ICAgICAlNWRcbiIsIDIqdW5mb2xkLmxlbmd0aCgpKTsKKyAgICAgICAgcHJpbnRmKCJkYXRhIHNpemU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlNWRcbiIsIChpbnQpaW5kZXhlc1tVQ0FTRV9JWF9MRU5HVEhdKTsKKyAgICB9Cit9CisKK3ZvaWQKK0Nhc2VQcm9wc0J1aWxkZXI6OndyaXRlQ1NvdXJjZUZpbGUoY29uc3QgY2hhciAqcGF0aCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBGSUxFICpmPXVzcmNfY3JlYXRlKHBhdGgsICJ1Y2FzZV9wcm9wc19kYXRhLmgiLAorICAgICAgICAgICAgICAgICAgICAgICAgImljdS90b29scy91bmljb2RlL2MvZ2VucHJvcHMvY2FzZXByb3BzYnVpbGRlci5jcHAiKTsKKyAgICBpZihmPT1OVUxMKSB7CisgICAgICAgIGVycm9yQ29kZT1VX0ZJTEVfQUNDRVNTX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZwdXRzKCIjaWZuZGVmIElOQ0xVREVEX0ZST01fVUNBU0VfQ1BQXG4iCisgICAgICAgICAgIiMgICBlcnJvciBUaGlzIGZpbGUgbXVzdCBiZSAjaW5jbHVkZWQgZnJvbSB1Y2FzZS5jcHAgb25seS5cbiIKKyAgICAgICAgICAiI2VuZGlmXG5cbiIsIGYpOworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IFVWZXJzaW9uSW5mbyB1Y2FzZV9wcm9wc19kYXRhVmVyc2lvbj17IiwKKyAgICAgICAgZGF0YUluZm8uZGF0YVZlcnNpb24sIDgsIDQsCisgICAgICAgICJ9O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCBpbnQzMl90IHVjYXNlX3Byb3BzX2luZGV4ZXNbVUNBU0VfSVhfVE9QXT17IiwKKyAgICAgICAgaW5kZXhlcywgMzIsIFVDQVNFX0lYX1RPUCwKKyAgICAgICAgIn07XG5cbiIpOworICAgIHVzcmNfd3JpdGVVVHJpZTJBcnJheXMoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50MTZfdCB1Y2FzZV9wcm9wc190cmllSW5kZXhbJWxkXT17XG4iLCBOVUxMLAorICAgICAgICBwVHJpZSwKKyAgICAgICAgIlxufTtcblxuIik7CisgICAgdXNyY193cml0ZUFycmF5KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgdWludDE2X3QgdWNhc2VfcHJvcHNfZXhjZXB0aW9uc1slbGRdPXtcbiIsCisgICAgICAgIGV4Y2VwdGlvbnMuZ2V0QnVmZmVyKCksIDE2LCBleGNlcHRpb25zLmxlbmd0aCgpLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50MTZfdCB1Y2FzZV9wcm9wc191bmZvbGRbJWxkXT17XG4iLAorICAgICAgICB1bmZvbGQuZ2V0QnVmZmVyKCksIDE2LCB1bmZvbGQubGVuZ3RoKCksCisgICAgICAgICJcbn07XG5cbiIpOworICAgIGZwdXRzKAorICAgICAgICAic3RhdGljIGNvbnN0IFVDYXNlUHJvcHMgdWNhc2VfcHJvcHNfc2luZ2xldG9uPXtcbiIKKyAgICAgICAgIiAgTlVMTCxcbiIKKyAgICAgICAgIiAgdWNhc2VfcHJvcHNfaW5kZXhlcyxcbiIKKyAgICAgICAgIiAgdWNhc2VfcHJvcHNfZXhjZXB0aW9ucyxcbiIKKyAgICAgICAgIiAgdWNhc2VfcHJvcHNfdW5mb2xkLFxuIiwKKyAgICAgICAgZik7CisgICAgdXNyY193cml0ZVVUcmllMlN0cnVjdChmLAorICAgICAgICAiICB7XG4iLAorICAgICAgICBwVHJpZSwgInVjYXNlX3Byb3BzX3RyaWVJbmRleCIsIE5VTEwsCisgICAgICAgICIgIH0sXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwgIiAgeyAiLCBkYXRhSW5mby5mb3JtYXRWZXJzaW9uLCA4LCA0LCAiIH1cbiIpOworICAgIGZwdXRzKCJ9O1xuIiwgZik7CisgICAgZmNsb3NlKGYpOworfQorCit2b2lkCitDYXNlUHJvcHNCdWlsZGVyOjp3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBVTmV3RGF0YU1lbW9yeSAqcERhdGE9dWRhdGFfY3JlYXRlKHBhdGgsICJpY3UiLCAidWNhc2UiLCAmZGF0YUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29weXJpZ2h0ID8gVV9DT1BZUklHSFRfU1RSSU5HIDogTlVMTCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogdWRhdGFfY3JlYXRlKCVzLCB1Y2FzZS5pY3UpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHBhdGgsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgaW5kZXhlcywgc2l6ZW9mKGluZGV4ZXMpKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCB0cmllQmxvY2ssIHRyaWVTaXplKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBleGNlcHRpb25zLmdldEJ1ZmZlcigpLCAyKmV4Y2VwdGlvbnMubGVuZ3RoKCkpOworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIHVuZm9sZC5nZXRCdWZmZXIoKSwgMip1bmZvbGQubGVuZ3RoKCkpOworCisgICAgLyogZmluaXNoIHVwICovCisgICAgbG9uZyBkYXRhTGVuZ3RoPXVkYXRhX2ZpbmlzaChwRGF0YSwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogY2FzZXByb3BzYnVpbGRlciBlcnJvciAlZCB3cml0aW5nIHRoZSBvdXRwdXQgZmlsZVxuIiwgZXJyb3JDb2RlKTsKKyAgICAgICAgZXhpdChlcnJvckNvZGUpOworICAgIH0KKworICAgIGlmKGRhdGFMZW5ndGghPWluZGV4ZXNbVUNBU0VfSVhfTEVOR1RIXSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAidWRhdGFfZmluaXNoKHVjYXNlLmljdSkgcmVwb3J0cyAlbGQgYnl0ZXMgd3JpdHRlbiBidXQgc2hvdWxkIGJlICVsZFxuIiwKKyAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoLCAobG9uZylpbmRleGVzW1VDQVNFX0lYX0xFTkdUSF0pOworICAgICAgICBlcnJvckNvZGU9VV9JTlRFUk5BTF9QUk9HUkFNX0VSUk9SOworICAgIH0KK30KKworUHJvcHNCdWlsZGVyICoKK2NyZWF0ZUNhc2VQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICBQcm9wc0J1aWxkZXIgKnBiPW5ldyBDYXNlUHJvcHNCdWlsZGVyKGVycm9yQ29kZSk7CisgICAgaWYocGI9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgfQorICAgIHJldHVybiBwYjsKK30KKworLyoKKyAqIEhleSwgRW1hY3MsIHBsZWFzZSBzZXQgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBMb2NhbCBWYXJpYWJsZXM6CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqCisgKi8KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9jb3JlcHJvcHNidWlsZGVyLmNwcCBiL3VuaWNvZGUvYy9nZW5wcm9wcy9jb3JlcHJvcHNidWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQ3NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL2NvcmVwcm9wc2J1aWxkZXIuY3BwCkBAIC0wLDAgKzEsODYwIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgY29yZXByb3BzYnVpbGRlci5jcHAgKHdhcyBzdG9yZS5jICYgcHJvcHMyLmNwcCkKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAxOTk5ZGVjMTEKKyogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKgorKiAgIFN0b3JlIFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgZWZmaWNpZW50bHkgZm9yCisqICAgcmFuZG9tIGFjY2Vzcy4KKyovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2hhci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWRhdGEuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXNldC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc3RyLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2V0aXRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNjcmlwdC5oIgorI2luY2x1ZGUgImNtZW1vcnkuaCIKKyNpbmNsdWRlICJjc3RyaW5nLmgiCisjaW5jbHVkZSAiZ2VucHJvcHMuaCIKKyNpbmNsdWRlICJwcm9wc3ZlYy5oIgorI2luY2x1ZGUgInVhc3NlcnQuaCIKKyNpbmNsdWRlICJ1bmV3ZGF0YS5oIgorI2luY2x1ZGUgInVwcm9wcy5oIgorI2luY2x1ZGUgInV0cmllMi5oIgorI2luY2x1ZGUgIndyaXRlc3JjLmgiCisKKy8qIFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgZmlsZSBmb3JtYXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaWxlIGZvcm1hdCBwcmVwYXJlZCBhbmQgd3JpdHRlbiBoZXJlIGNvbnRhaW5zIHNldmVyYWwgZGF0YQorc3RydWN0dXJlcyB0aGF0IHN0b3JlIGluZGV4ZXMgb3IgZGF0YS4KKworQmVmb3JlIHRoZSBkYXRhIGNvbnRlbnRzIGRlc2NyaWJlZCBiZWxvdywgdGhlcmUgYXJlIHRoZSBoZWFkZXJzIHJlcXVpcmVkIGJ5Cit0aGUgdWRhdGEgQVBJIGZvciBsb2FkaW5nIElDVSBkYXRhLiBFc3BlY2lhbGx5LCBhIFVEYXRhSW5mbyBzdHJ1Y3R1cmUKK3ByZWNlZGVzIHRoZSBhY3R1YWwgZGF0YS4gSXQgY29udGFpbnMgcGxhdGZvcm0gcHJvcGVydGllcyB2YWx1ZXMgYW5kIHRoZQorZmlsZSBmb3JtYXQgdmVyc2lvbi4KKworVGhlIGZvbGxvd2luZyBpcyBhIGRlc2NyaXB0aW9uIG9mIGZvcm1hdCB2ZXJzaW9uIDcuMSAuCisKK0RhdGEgY29udGVudHM6CisKK1RoZSBjb250ZW50cyBpcyBhIHBhcnNlZCwgYmluYXJ5IGZvcm0gb2Ygc2V2ZXJhbCBVbmljb2RlIGNoYXJhY3RlcgorZGF0YWJhc2UgZmlsZXMsIG1vc3QgcHJvbWluZW50bHkgVW5pY29kZURhdGEudHh0LgorCitBbnkgVW5pY29kZSBjb2RlIHBvaW50IGZyb20gMCB0byAweDEwZmZmZiBjYW4gYmUgbG9va2VkIHVwIHRvIGdldAordGhlIHByb3BlcnRpZXMsIGlmIGFueSwgZm9yIHRoYXQgY29kZSBwb2ludC4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbnB1dAordG8gdGhlIGxvb2t1cCBhcmUgMjEtYml0IHVuc2lnbmVkIGludGVnZXJzLCB3aXRoIG5vdCBhbGwgb2YgdGhlCisyMS1iaXQgcmFuZ2UgdXNlZC4KKworSXQgaXMgYXNzdW1lZCB0aGF0IGNsaWVudCBjb2RlIGtlZXBzIGEgdWludDMyX3QgcG9pbnRlcgordG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YToKKworICAgIGNvbnN0IHVpbnQzMl90ICpwMzI7CisKK0Zvcm1hbGx5LCB0aGUgZmlsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZXM6CisKKyAgICBjb25zdCBpbnQzMl90IGluZGV4ZXNbMTZdIHdpdGggdmFsdWVzIGkwLi5pMTU6CisKKyAgaTAgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgdGhlIG1haW4gdHJpZS4KKyAgaTAuLmkzIGFsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGluIGZvcm1hdCB2ZXJzaW9ucyA0LjAgYW5kIGhpZ2hlcjsKKyAgICAgICAgIHRoZSByZWxhdGVkIHByb3BzMzJbXSBhbmQgZXhjZXB0aW9uc1tdIGFuZCB1Y2hhcnNbXSB3ZXJlIHVzZWQgaW4gZm9ybWF0IHZlcnNpb24gMworCisgICAgaTAgcHJvcHNJbmRleDsgLS0gMzItYml0IHVuaXQgaW5kZXggdG8gdGhlIHRhYmxlIG9mIDMyLWJpdCBwcm9wZXJ0aWVzIHdvcmRzCisgICAgaTEgZXhjZXB0aW9uc0luZGV4OyAgLS0gMzItYml0IHVuaXQgaW5kZXggdG8gdGhlIHRhYmxlIG9mIDMyLWJpdCBleGNlcHRpb24gd29yZHMKKyAgICBpMiBleGNlcHRpb25zVG9wSW5kZXg7IC0tIDMyLWJpdCB1bml0IGluZGV4IHRvIHRoZSBhcnJheSBvZiBVQ2hhcnMgZm9yIHNwZWNpYWwgbWFwcGluZ3MKKworICAgIGkzIGFkZGl0aW9uYWxUcmllSW5kZXg7IC0tIDMyLWJpdCB1bml0IGluZGV4IHRvIHRoZSBhZGRpdGlvbmFsIHRyaWUgZm9yIG1vcmUgcHJvcGVydGllcworICAgIGk0IGFkZGl0aW9uYWxWZWN0b3JzSW5kZXg7IC0tIDMyLWJpdCB1bml0IGluZGV4IHRvIHRoZSB0YWJsZSBvZiBwcm9wZXJ0aWVzIHZlY3RvcnMKKyAgICBpNSBhZGRpdGlvbmFsVmVjdG9yc0NvbHVtbnM7IC0tIG51bWJlciBvZiAzMi1iaXQgd29yZHMgcGVyIHByb3BlcnRpZXMgdmVjdG9yCisKKyAgICBpNiBzY3JpcHRFeHRlbnNpb25zSW5kZXg7IC0tIDMyLWJpdCB1bml0IGluZGV4IHRvIHRoZSBTY3JpcHRfRXh0ZW5zaW9ucyBkYXRhCisgICAgaTcgcmVzZXJ2ZWRJbmRleDc7IC0tIDMyLWJpdCB1bml0IGluZGV4IHRvIHRoZSB0b3Agb2YgdGhlIFNjcmlwdF9FeHRlbnNpb25zIGRhdGEKKyAgICBpOCByZXNlcnZlZEluZGV4ODsgLS0gZm9yIG5vdzogaTcsIGk4IGFuZCBpOSBoYXZlIHRoZSBzYW1lIHZhbHVlcworICAgIGk5IGRhdGFUb3BJbmRleDsgLS0gc2l6ZSBvZiB0aGUgZGF0YSBmaWxlIChudW1iZXIgb2YgMzItYml0IHVuaXRzIGFmdGVyIHRoZSBoZWFkZXIpCisKKyAgICBpMTAgbWF4VmFsdWVzOyAtLSBtYXhpbXVtIGNvZGUgdmFsdWVzIGZvciB2ZWN0b3Igd29yZCAwLCBzZWUgdXByb3BzLmggKG5ldyBpbiBmb3JtYXQgdmVyc2lvbiAzLjErKQorICAgIGkxMSBtYXhWYWx1ZXMyOyAtLSBtYXhpbXVtIGNvZGUgdmFsdWVzIGZvciB2ZWN0b3Igd29yZCAyLCBzZWUgdXByb3BzLmggKG5ldyBpbiBmb3JtYXQgdmVyc2lvbiAzLjIpCisgICAgaTEyLi5pMTUgcmVzZXJ2ZWRJbmRleGVzOyAtLSByZXNlcnZlZCB2YWx1ZXM7IDAgZm9yIG5vdworCisgICAgUFQgc2VyaWFsaXplZCBwcm9wZXJ0aWVzIHRyaWUsIHNlZSB1dHJpZTIuaCAoYnl0ZSBzaXplOiA0KihpMC0xNikpCisKKyAgUCwgRSwgYW5kIFUgYXJlIG5vdCB1c2VkIChlbXB0eSkgaW4gZm9ybWF0IHZlcnNpb25zIDQgYW5kIGFib3ZlCisKKyAgICBQICBjb25zdCB1aW50MzJfdCBwcm9wczMyW2kxLWkwXTsKKyAgICBFICBjb25zdCB1aW50MzJfdCBleGNlcHRpb25zW2kyLWkxXTsKKyAgICBVICBjb25zdCBVQ2hhciB1Y2hhcnNbMiooaTMtaTIpXTsKKworICAgIEFUIHNlcmlhbGl6ZWQgdHJpZSBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIChieXRlIHNpemU6IDQqKGk0LWkzKSkKKyAgICBQViBjb25zdCB1aW50MzJfdCBwcm9wc1ZlY3RvcnNbKGk2LWk0KS9pNV1baTVdPT11aW50MzJfdCBwcm9wc1ZlY3RvcnNbaTYtaTRdOworCisgICAgU0NYIGNvbnN0IHVpbnQxNl90IHNjcmlwdEV4dGVuc2lvbnNbMiooaTctaTYpXTsKKworICAgICAgU0NYIGNvbnRhaW5zIFNjcmlwdF9FeHRlbnNpb25zIGxpc3RzIGFuZCAoU2NyaXB0IGNvZGUsIFNjcmlwdF9FeHRlbnNpb25zIGluZGV4KSBwYWlycy4KKyAgICAgIEEgU2NyaXB0X0V4dGVuc2lvbnMgbGlzdCBpcyBhIHNlcXVlbmNlIG9mIFVTY3JpcHRDb2RlIHZhbHVlcyBpbiBhc2NlbmRpbmcgb3JkZXIsCisgICAgICB3aXRoIHRoZSBsYXN0IGNvZGUgaGF2aW5nIGJpdCAxNSBzZXQgZm9yIHRlcm1pbmF0aW9uLgorICAgICAgQSAoU2NyaXB0IGNvZGUsIFNjcmlwdF9FeHRlbnNpb25zIGluZGV4KSBwYWlyIGlzIHRoZSBtYWluIFVTY3JpcHRDb2RlIChTY3JpcHQgdmFsdWUpCisgICAgICBmb2xsb3dlZCBieSB0aGUgaW5kZXggb2YgdGhlIFNjcmlwdF9FeHRlbnNpb25zIGxpc3QuCisgICAgICBJZiB0aGUgcHJvcHNWZWN0b3JzW10gY29sdW1uIDAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIFNjcmlwdF9FeHRlbnNpb25zLAorICAgICAgdGhlbiB0aGUgVVBST1BTX1NDUklQVF9NQVNLIGJpdCBmaWVsZCBpcyBhbiBpbmRleCB0byBlaXRoZXIgYSBsaXN0IG9yIGEgcGFpciBpbiBTQ1gsCisgICAgICByYXRoZXIgdGhhbiB0aGUgU2NyaXB0IGl0c2VsZi4gVGhlIGhpZ2ggYml0cyBpbiB0aGUgVVBST1BTX1NDUklQVF9YX01BU0sgZmllbGRzCisgICAgICBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBtYWluIFNjcmlwdCB2YWx1ZSBpcyBDb21tb24gb3IgSW5oZXJpdGVkIChhbmQgdGhlIGluZGV4IGlzIHRvIGEgbGlzdCkKKyAgICAgIHZzLiBhbm90aGVyIHZhbHVlIChhbmQgdGhlIGluZGV4IGlzIHRvIGEgcGFpcikuCisgICAgICAoU2VlIFVQUk9QU19TQ1JJUFRfWF9XSVRIX0NPTU1PTiBldGMuIGluIHVwcm9wcy5oLikKKworVHJpZSBsb29rdXAgYW5kIHByb3BlcnRpZXM6CisKK0luIG9yZGVyIHRvIGNvbmRlbnNlIHRoZSBkYXRhIGZvciB0aGUgMjEtYml0IGNvZGUgc3BhY2UsIHNldmVyYWwgcHJvcGVydGllcyBvZgordGhlIFVuaWNvZGUgY29kZSBhc3NpZ25tZW50IGFyZSBleHBsb2l0ZWQ6CistIFRoZSBjb2RlIHNwYWNlIGlzIHNwYXJzZS4KKy0gVGhlcmUgYXJlIHNldmVyYWwgMTBrIG9mIGNvbnNlY3V0aXZlIGNvZGVzIHdpdGggdGhlIHNhbWUgcHJvcGVydGllcy4KKy0gQ2hhcmFjdGVycyBhbmQgc2NyaXB0cyBhcmUgYWxsb2NhdGVkIGluIGdyb3VwcyBvZiAxNiBjb2RlIHBvaW50cy4KKy0gSW5zaWRlIGJsb2NrcyBmb3Igc2NyaXB0cyB0aGUgcHJvcGVydGllcyBhcmUgb2Z0ZW4gcmVwZXRpdGl2ZS4KKy0gVGhlIDIxLWJpdCBzcGFjZSBpcyBub3QgZnVsbHkgdXNlZCBmb3IgVW5pY29kZS4KKworVGhlIGxvb2t1cCBvZiBwcm9wZXJ0aWVzIGZvciBhIGdpdmVuIGNvZGUgcG9pbnQgaXMgZG9uZSB3aXRoIGEgdHJpZSBsb29rdXAsCit1c2luZyB0aGUgVVRyaWUgaW1wbGVtZW50YXRpb24uCitUaGUgdHJpZSBsb29rdXAgcmVzdWx0IGlzIGEgMTYtYml0IHByb3BlcnRpZXMgd29yZC4KKworV2l0aCBhIGdpdmVuIFVuaWNvZGUgY29kZSBwb2ludAorCisgICAgVUNoYXIzMiBjOworCithbmQgMDw9YzwweDExMDAwMCwgdGhlIGxvb2t1cCBpcyBkb25lIGxpa2UgdGhpczoKKworICAgIHVpbnQxNl90IHByb3BzOworICAgIFVUUklFX0dFVDE2KHRyaWUsIGMsIHByb3BzKTsKKworRWFjaCAxNi1iaXQgcHJvcGVydGllcyB3b3JkIGNvbnRhaW5zOgorCisgMC4uIDQgIGdlbmVyYWwgY2F0ZWdvcnkKKyAgICAgNSAgcmVzZXJ2ZWQKKyA2Li4xNSAgbnVtZXJpYyB0eXBlIGFuZCB2YWx1ZSAobnR2KQorCitFbmNvZGluZyBvZiBudW1lcmljIHR5cGUgYW5kIHZhbHVlIGluIHRoZSAxMC1iaXQgbnR2IGZpZWxkOgorICAgIG50diAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgdmFsdWUKKyAgICAwICAgICAgICAgICAgICAgVV9OVF9OT05FICAgICAgIDAKKyAgICAxLi4xMCAgICAgICAgICAgVV9OVF9ERUNJTUFMICAgIDAuLjkKKyAgICAxMS4uMjAgICAgICAgICAgVV9OVF9ESUdJVCAgICAgIDAuLjkKKyAgICAyMS4uMHgyZmYgICAgICAgVV9OVF9OVU1FUklDICAgIHNlZSBiZWxvdworICAgIDB4MzAwLi4weDNmZiAgICByZXNlcnZlZAorCisgICAgRm9yIFVfTlRfTlVNRVJJQzoKKyAgICBudHYgICAgICAgICAgICAgdmFsdWUKKyAgICAyMS4uMHhhZiAgICAgICAgaW50ZWdlciAgICAgMC4uMTU0CisgICAgMHhiMC4uMHgxZGYgICAgIGZyYWN0aW9uICAgICgobnR2Pj40KS0xMikgLyAoKG50diYweGYpKzEpID0gLTEuLjE3IC8gMS4uMTYKKyAgICAweDFlMC4uMHgyZmYgICAgbGFyZ2UgaW50ICAgKChudHY+PjUpLTE0KSAqIDEwXigobnR2JjB4MWYpKzIpID0gKDEuLjkpKigxMF4yLi4xMF4zMykKKyAgICAgICAgICAgICAgICAgICAgKG9ubHkgb25lIHNpZ25pZmljYW50IGRlY2ltYWwgZGlnaXQpCisgICAgMHgzMDAuLjB4MzIzICAgIGJhc2UtNjAgKHNleGFnZXNpbWFsKSBpbnRlZ2VyIChuZXcgaW4gZm9ybWF0IHZlcnNpb24gNy4xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG50dj4+MiktMHhiZikgKiA2MF4oKG50diYzKSsxKSA9ICgxLi45KSooNjBeMS4uNjBeNCkKKworLS0tIEFkZGl0aW9uYWwgcHJvcGVydGllcyAobmV3IGluIGZvcm1hdCB2ZXJzaW9uIDIuMSkgLS0tCisKK1RoZSBzZWNvbmQgdHJpZSBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIChBVCkgaXMgYWxzbyBhIFVUcmllIHdpdGggMTYtYml0IGRhdGEuCitUaGUgZGF0YSB3b3JkcyBjb25zaXN0IG9mIDMyLWJpdCB1bml0IGluZGV4ZXMgKG5vdCByb3cgaW5kZXhlcyEpIGludG8gdGhlCit0YWJsZSBvZiB1bmlxdWUgcHJvcGVydGllcyB2ZWN0b3JzIChQVikuCitFYWNoIHZlY3RvciBjb250YWlucyBhIHNldCBvZiBwcm9wZXJ0aWVzLgorVGhlIHdpZHRoIG9mIGEgdmVjdG9yIChudW1iZXIgb2YgdWludDMyX3QgcGVyIHJvdykgbWF5IGNoYW5nZQord2l0aCB0aGUgZm9ybWF0VmVyc2lvbiwgaXQgaXMgc3RvcmVkIGluIGk1LgorCitDdXJyZW50IHByb3BlcnRpZXM6IHNlZSBpY3Uvc291cmNlL2NvbW1vbi91cHJvcHMuaAorCistLS0gQ2hhbmdlcyBpbiBmb3JtYXQgdmVyc2lvbiAzLjEgLS0tCisKK1NlZSBpMTAgbWF4VmFsdWVzIGFib3ZlLCBjb250YWlucyBvbmx5IFVCTE9DS19DT1VOVCBhbmQgVVNDUklQVF9DT0RFX0xJTUlULgorCistLS0gQ2hhbmdlcyBpbiBmb3JtYXQgdmVyc2lvbiAzLjIgLS0tCisKKy0gVGhlIHRyaWVzIHVzZSBsaW5lYXIgTGF0aW4tMSByYW5nZXMuCistIFRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYml0cyBzdG9yZSBmdWxsIHByb3BlcnRpZXMgWFlaIGluc3RlYWQKKyAgb2YgcGFydGlhbCBPdGhlcl9YWVosIHNvIHRoYXQgY2hhbmdlcyBpbiB0aGUgZGVyaXZhdGlvbiBmb3JtdWxhcworICBuZWVkIG5vdCBiZSB0cmFja2VkIGluIHJ1bnRpbWUgbGlicmFyeSBjb2RlLgorLSBKb2luaW5nIFR5cGUgYW5kIExpbmUgQnJlYWsgYXJlIGFsc28gc3RvcmVkIGNvbXBsZXRlbHksIHNvIHRoYXQgdXByb3BzLmMKKyAgbmVlZHMgbm8gcnVudGltZSBmb3JtdWxhcyBmb3IgZW51bWVyYXRlZCBwcm9wZXJ0aWVzIGVpdGhlci4KKy0gU3RvcmUgdGhlIGNhc2Utc2Vuc2l0aXZlIGZsYWcgaW4gdGhlIG1haW4gcHJvcGVydGllcyB3b3JkLgorLSBpMTAgYWxzbyBjb250YWlucyBVX0xCX0NPVU5UIGFuZCBVX0VBX0NPVU5ULgorLSBpMTEgY29udGFpbnMgbWF4VmFsdWVzMiBmb3IgdmVjdG9yIHdvcmQgMi4KKworLS0tIENoYW5nZXMgaW4gZm9ybWF0IHZlcnNpb24gNCAtLS0KKworVGhlIGZvcm1hdCBjaGFuZ2VzIGJldHdlZW4gdmVyc2lvbiAzIGFuZCA0IGJlY2F1c2UgdGhlIHByb3BlcnRpZXMgcmVsYXRlZCB0bworY2FzZSBtYXBwaW5ncyBhbmQgYmlkaS9zaGFwaW5nIGFyZSBwdWxsZWQgb3V0IGludG8gc2VwYXJhdGUgZmlsZXMKK2ZvciBtb2R1bGFyaXphdGlvbi4KK0luIG9yZGVyIHRvIHJlZHVjZSB0aGUgbmVlZCBmb3IgY29kZSBjaGFuZ2VzLCBzb21lIG9mIHRoZSBwcmV2aW91cyBkYXRhCitzdHJ1Y3R1cmVzIGFyZSBvbWl0dGVkLCByYXRoZXIgdGhhbiByZWFycmFuZ2luZyBldmVyeXRoaW5nLgorCisoVGhlIGNoYW5nZSB0byBmb3JtYXQgdmVyc2lvbiA0IGlzIGZvciBJQ1UgMy40LiBUaGUgbGFzdCBDVlMgcmV2aXNpb24gb2YKK2dlbnByb3BzL3N0b3JlLmMgZm9yIGZvcm1hdCB2ZXJzaW9uIDMuMiBpcyAxLjQ4LikKKworVGhlIG1haW4gdHJpZSdzIGRhdGEgaXMgc2lnbmlmaWNhbnRseSBzaW1wbGlmaWVkOgorLSBUaGUgdHJpZSdzIDE2LWJpdCBkYXRhIHdvcmQgaXMgdXNlZCBkaXJlY3RseSBpbnN0ZWFkIG9mIGFzIGFuIGluZGV4CisgIGludG8gcHJvcHMzMltdLgorLSBUaGUgdHJpZSB1c2VzIHRoZSBkZWZhdWx0IHRyaWUgZm9sZGluZyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjdXN0b20gb25lcy4KKy0gTnVtZXJpYyB2YWx1ZXMgYXJlIHN0b3JlZCBkaXJlY3RseSBpbiB0aGUgdHJpZSBkYXRhIHdvcmQsIHdpdGggc3BlY2lhbAorICBlbmNvZGluZ3MuCistIE5vIG1vcmUgZXhjZXB0aW9uIGRhdGEgKHRoZSBkYXRhIHRoYXQgbmVlZGVkIGl0IHdhcyBwdWxsZWQgb3V0LCBvciwgaW4gdGhlCisgIGNhc2Ugb2YgbnVtZXJpYyB2YWx1ZXMsIGVuY29kZWQgZGlmZmVyZW50bHkpLgorLSBObyBtb3JlIHN0cmluZyBkYXRhIChwdWxsZWQgb3V0IC0gd2FzIGZvciBjYXNlIG1hcHBpbmdzKS4KKworQWxzbywgc29tZSBvZiB0aGUgcHJldmlvdXNseSB1c2VkIHByb3BlcnRpZXMgdmVjdG9yIGJpdHMgYXJlIHJlc2VydmVkIGFnYWluLgorCitUaGUgaW5kZXhlc1tdIHZhbHVlcyBmb3IgdGhlIG9taXR0ZWQgc3RydWN0dXJlcyBhcmUgc3RpbGwgZmlsbGVkIGluCisoaW5kaWNhdGluZyB6ZXJvLWxlbmd0aCBhcnJheXMpIHNvIHRoYXQgdGhlIHN3YXBwZXIgY29kZSByZW1haW5zIHVuY2hhbmdlZC4KKworLS0tIENoYW5nZXMgaW4gZm9ybWF0IHZlcnNpb24gNSAtLS0KKworRm9ybWF0IHZlcnNpb24gNSBiZWNhbWUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGJpdCBmaWVsZCBmb3Igc2NyaXB0IGNvZGVzCitvdmVyZmxvd2VkLiBUaGUgY2hhbmdlcyBhcmUgaW5jb21wYXRpYmxlIGJlY2F1c2UKK29sZCBjb2RlIHdvdWxkIGhhdmUgc2VlbiBub25zZW5zaWNhbGx5IGxvdyB2YWx1ZXMgZm9yIG5ldywgaGlnaGVyIHNjcmlwdCBjb2Rlcy4KKworUmVhcnJhbmdlZCBiaXQgZmllbGRzIGluIHRoZSBzZWNvbmQgdHJpZSAoQVQpIGFuZCB3aWRlbmVkIHRocmVlIChTY3JpcHQsIEJsb2NrLAorV29yZF9CcmVhaykgYnkgb25lIGJpdCBlYWNoLgorCitNb2RpZmllZCBiaXQgZmllbGRzIGluIGljdS9zb3VyY2UvY29tbW9uL3Vwcm9wcy5oCisKKy0tLSBDaGFuZ2VzIGluIGZvcm1hdCB2ZXJzaW9uIDYgLS0tCisKK0Zvcm1hdCB2ZXJzaW9uIDYgYmVjYW1lIG5lY2Vzc2FyeSBiZWNhdXNlIFVuaWNvZGUgNS4yIGFkZHMgZnJhY3Rpb25zIHdpdGgKK2Rlbm9taW5hdG9ycyA5LCAxMCBhbmQgMTYsIGFuZCBpdCB3YXMgZWFzaWVyIHRvIHJlZGVzaWduIHRoZSBlbmNvZGluZyBvZiBudW1lcmljCit0eXBlcyBhbmQgdmFsdWVzIHJhdGhlciB0aGFuIGFkZCBhbm90aGVyIHZhcmlhbnQgdG8gdGhlIHByZXZpb3VzIGZvcm1hdC4KKworLS0tIENoYW5nZXMgaW4gZm9ybWF0IHZlcnNpb24gNyAtLS0KKworVW5pY29kZSA2LjAgYWRkcyBTY3JpcHRfRXh0ZW5zaW9ucy4gRm9yIGNoYXJhY3RlcnMgd2l0aCBzY3JpcHQgZXh0ZW5zaW9ucyBkYXRhLAordGhlIHNjcmlwdCBjb2RlIGJpdHMgYXJlIGFuIGluZGV4IGludG8gdGhlIG5ldyBTY3JpcHRfRXh0ZW5zaW9ucyBhcnJheSByYXRoZXIKK3RoYW4gYSBzY3JpcHQgY29kZS4KKworQ2hhbmdlIGZyb20gVVRyaWUgdG8gVVRyaWUyLgorCistLS0gQ2hhbmdlcyBpbiBmb3JtYXQgdmVyc2lvbiA3LjEgLS0tCisKK1VuaWNvZGUgNi4yIGFkZHMgc2V4YWdlc2ltYWwgKGJhc2UtNjApIG51bWVyaWMgdmFsdWVzOgorICAgIGNwOzEyNDMyO25hPUNVTkVJRk9STSBOVU1FUklDIFNJR04gU0hBUjIgVElNRVMgR0FMIFBMVVMgRElTSDtudj0yMTYwMDAKKyAgICBjcDsxMjQzMztuYT1DVU5FSUZPUk0gTlVNRVJJQyBTSUdOIFNIQVIyIFRJTUVTIEdBTCBQTFVTIE1JTjtudj00MzIwMDAKKworVGhlIGVuY29kaW5nIG9mIG51bWVyaWMgdmFsdWVzIHdhcyBleHRlbmRlZCB0byBoYW5kbGUgc3VjaCB2YWx1ZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK1VfTkFNRVNQQUNFX1VTRQorCisvKiBVRGF0YUluZm8gY2YuIHVkYXRhLmggKi8KK3N0YXRpYyBVRGF0YUluZm8gZGF0YUluZm89eworICAgIHNpemVvZihVRGF0YUluZm8pLAorICAgIDAsCisKKyAgICBVX0lTX0JJR19FTkRJQU4sCisgICAgVV9DSEFSU0VUX0ZBTUlMWSwKKyAgICBVX1NJWkVPRl9VQ0hBUiwKKyAgICAwLAorCisgICAgeyAweDU1LCAweDUwLCAweDcyLCAweDZmIH0sICAgICAgICAgICAgICAgICAvKiBkYXRhRm9ybWF0PSJVUHJvIiAqLworICAgIHsgNywgMSwgMCwgMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9ybWF0VmVyc2lvbiAqLworICAgIHsgNiwgMiwgMCwgMCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YVZlcnNpb24gKi8KK307CisKK2NsYXNzIENvcmVQcm9wc0J1aWxkZXIgOiBwdWJsaWMgUHJvcHNCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBDb3JlUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB+Q29yZVByb3BzQnVpbGRlcigpOworCisgICAgdmlydHVhbCB2b2lkIHNldFVuaWNvZGVWZXJzaW9uKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcHMoY29uc3QgVW5pUHJvcHMgJiwgY29uc3QgVW5pY29kZVNldCAmbmV3VmFsdWVzLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBidWlsZChVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUNTb3VyY2VGaWxlKGNvbnN0IGNoYXIgKnBhdGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlQmluYXJ5RGF0YShjb25zdCBjaGFyICpwYXRoLCBVQm9vbCB3aXRoQ29weXJpZ2h0LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0R2NBbmROdW1lcmljKGNvbnN0IFVuaVByb3BzICYsIGNvbnN0IFVuaWNvZGVTZXQgJm5ld1ZhbHVlcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworICAgIFVUcmllMiAqcFRyaWU7CisgICAgVVRyaWUyICpwcm9wczJUcmllOworICAgIFVQcm9wc1ZlY3RvcnMgKnB2OworICAgIFVuaWNvZGVTdHJpbmcgc2NyaXB0RXh0ZW5zaW9uczsKK307CisKK0NvcmVQcm9wc0J1aWxkZXI6OkNvcmVQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKQorICAgICAgICA6IHBUcmllKE5VTEwpLCBwcm9wczJUcmllKE5VTEwpLCBwdihOVUxMKSB7CisgICAgcFRyaWU9dXRyaWUyX29wZW4oMCwgMCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogY29yZXByb3BzYnVpbGRlciB1dHJpZTJfb3BlbigpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgIH0KKyAgICBwdj11cHZlY19vcGVuKFVQUk9QU19WRUNUT1JfV09SRFMsICZlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IGNvcmVwcm9wc2J1aWxkZXIgdXB2ZWNfb3BlbigpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgIH0KK30KKworQ29yZVByb3BzQnVpbGRlcjo6fkNvcmVQcm9wc0J1aWxkZXIoKSB7CisgICAgdXRyaWUyX2Nsb3NlKHBUcmllKTsKKyAgICB1dHJpZTJfY2xvc2UocHJvcHMyVHJpZSk7CisgICAgdXB2ZWNfY2xvc2UocHYpOworfQorCit2b2lkCitDb3JlUHJvcHNCdWlsZGVyOjpzZXRVbmljb2RlVmVyc2lvbihjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbikgeworICAgIHVwcnZfbWVtY3B5KGRhdGFJbmZvLmRhdGFWZXJzaW9uLCB2ZXJzaW9uLCA0KTsKK30KKworLy8gRm9yIG50PVVfTlRfTlVNRVJJQy4KK3N0YXRpYyBpbnQzMl90CitlbmNvZGVOdW1lcmljVmFsdWUoVUNoYXIzMiBzdGFydCwgY29uc3QgY2hhciAqcywgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgY29uc3QgY2hhciAqb3JpZ2luYWw7CisgICAgLyogZ2V0IGEgcG9zc2libGUgbWludXMgc2lnbiAqLworICAgIFVCb29sIGlzTmVnYXRpdmU7CisgICAgaWYoKnM9PSctJykgeworICAgICAgICBpc05lZ2F0aXZlPVRSVUU7CisgICAgICAgICsrczsKKyAgICB9IGVsc2UgeworICAgICAgICBpc05lZ2F0aXZlPUZBTFNFOworICAgIH0KKworICAgIGludDMyX3QgdmFsdWU9MCwgZGVuPTAsIGV4cD0wLCBudHY9MDsKKyAgICBjaGFyICpudW1iZXJMaW1pdDsKKyAgICAvKiB0cnkgbGFyZ2UsIHNpbmdsZS1zaWduaWZpY2FudC1kaWdpdCBudW1iZXJzLCBtYXkgb3RoZXJ3aXNlIG92ZXJmbG93IHN0cnRvdWwoKSAqLworICAgIGlmKCcxJzw9c1swXSAmJiBzWzBdPD0nOScgJiYgc1sxXT09JzAnICYmIHNbMl09PScwJykgeworICAgICAgICB2YWx1ZT1zWzBdLScwJzsKKyAgICAgICAgbnVtYmVyTGltaXQ9Y29uc3RfY2FzdDxjaGFyICo+KHMpOworICAgICAgICB3aGlsZSgqKCsrbnVtYmVyTGltaXQpPT0nMCcpIHsKKyAgICAgICAgICAgICsrZXhwOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbm9ybWFsIG51bWJlciBwYXJzaW5nICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdWw9dXBydl9zdHJ0b3VsKHMsICZudW1iZXJMaW1pdCwgMTApOworICAgICAgICBpZihzPT1udW1iZXJMaW1pdCB8fCAoKm51bWJlckxpbWl0IT0wICYmICpudW1iZXJMaW1pdCE9Jy8nKSB8fCB1bD4weDdmZmZmZmZmKSB7CisgICAgICAgICAgICBudHY9LTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZT0oaW50MzJfdCl1bDsKKyAgICAgICAgfQorICAgICAgICBpZihudHY+PTAgJiYgKm51bWJlckxpbWl0PT0nLycpIHsKKyAgICAgICAgICAgIC8qIGZyYWN0aW9uYWwgdmFsdWUsIGdldCB0aGUgZGVub21pbmF0b3IgKi8KKyAgICAgICAgICAgIHM9bnVtYmVyTGltaXQrMTsKKyAgICAgICAgICAgIHVsPXVwcnZfc3RydG91bChzLCAmbnVtYmVyTGltaXQsIDEwKTsKKyAgICAgICAgICAgIGlmKHM9PW51bWJlckxpbWl0IHx8ICpudW1iZXJMaW1pdCE9MCB8fCB1bD09MCB8fCB1bD4weDdmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgbnR2PS0xOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZW49KGludDMyX3QpdWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoaXNOZWdhdGl2ZSkgeworICAgICAgICB2YWx1ZT0tKGludDMyX3QpdmFsdWU7CisgICAgfQorCisgICAgaWYobnR2PDApIHsKKyAgICAgICAgLy8gcGFzcworICAgIH0gZWxzZSBpZihkZW49PTAgJiYgdmFsdWU+PTApIHsKKyAgICAgICAgaWYoZXhwPT0yICYmICh2YWx1ZSoxMDApPD1VUFJPUFNfTlRWX01BWF9TTUFMTF9JTlQpIHsKKyAgICAgICAgICAgIC8qIHNtYWxsIGludGVnZXIgcGFyc2VkIGxpa2UgYSBsYXJnZSBvbmUgKi8KKyAgICAgICAgICAgIG50dj1VUFJPUFNfTlRWX05VTUVSSUNfU1RBUlQrdmFsdWUqMTAwOworICAgICAgICB9IGVsc2UgaWYoZXhwPT0wKSB7CisgICAgICAgICAgICBpZih2YWx1ZTw9VVBST1BTX05UVl9NQVhfU01BTExfSU5UKSB7CisgICAgICAgICAgICAgICAgLyogc21hbGwgaW50ZWdlciAqLworICAgICAgICAgICAgICAgIG50dj1VUFJPUFNfTlRWX05VTUVSSUNfU1RBUlQrdmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGxhcmdlIGludGVnZXIgcGFyc2VkIGxpa2UgYSBzbWFsbCBvbmUgKi8KKyAgICAgICAgICAgICAgICAvKiBzcGxpdCB0aGUgdmFsdWUgaW50byBtYW50aXNzYSBhbmQgZXhwb25lbnQsIGJhc2UgMTAgKi8KKyAgICAgICAgICAgICAgICBpbnQzMl90IG1hbnQ9dmFsdWU7CisgICAgICAgICAgICAgICAgd2hpbGUoKG1hbnQlMTApPT0wKSB7CisgICAgICAgICAgICAgICAgICAgIG1hbnQvPTEwOworICAgICAgICAgICAgICAgICAgICArK2V4cDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gTm90ZTogdmFsdWU8PTB4N2ZmZmZmZmYgZ3VhcmFudGVlcyBleHA8PTMzCisgICAgICAgICAgICAgICAgaWYobWFudDw9OSkgeworICAgICAgICAgICAgICAgICAgICBudHY9KChtYW50KzE0KTw8NSkrKGV4cC0yKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUcnkgc2V4YWdlc2ltYWwgKGJhc2UgNjApIG51bWJlcnMuCisgICAgICAgICAgICAgICAgICAgIG1hbnQ9dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGV4cD0wOworICAgICAgICAgICAgICAgICAgICB3aGlsZSgobWFudCU2MCk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbnQvPTYwOworICAgICAgICAgICAgICAgICAgICAgICAgKytleHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYobWFudDw9OSAmJiBleHA8PTQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG50dj0oKG1hbnQrMHhiZik8PDIpKyhleHAtMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBudHY9LTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZigyPD1leHAgJiYgZXhwPD0zMyAmJiAxPD12YWx1ZSAmJiB2YWx1ZTw9OSkgeworICAgICAgICAgICAgLyogbGFyZ2UsIHNpbmdsZS1zaWduaWZpY2FudC1kaWdpdCBpbnRlZ2VyICovCisgICAgICAgICAgICBudHY9KCh2YWx1ZSsxNCk8PDUpKyhleHAtMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBudHY9LTE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYoZXhwPT0wICYmIC0xPD12YWx1ZSAmJiB2YWx1ZTw9MTcgJiYgMTw9ZGVuICYmIGRlbjw9MTYpIHsKKyAgICAgICAgLyogZnJhY3Rpb24gKi8KKyAgICAgICAgbnR2PSgodmFsdWUrMTIpPDw0KSsoZGVuLTEpOworICAgIH0gZWxzZSBpZihleHA9PTAgJiYgdmFsdWU9PS0xICYmIGRlbj09MCkgeworICAgICAgICAvKiAtMSBwYXJzZWQgd2l0aCBkZW49MCwgZW5jb2RlZCBhcyBwc2V1ZG8tZnJhY3Rpb24gLTEvMSAqLworICAgICAgICBudHY9KCh2YWx1ZSsxMik8PDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG50dj0tMTsKKyAgICB9CisgICAgaWYobnR2PDAgfHwgKm51bWJlckxpbWl0IT0wKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHVuYWJsZSB0byBlbmNvZGUgbnVtZXJpYyB2YWx1ZSBudj0lc1xuIiwgb3JpZ2luYWwpOworICAgICAgICBlcnJvckNvZGU9VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gbnR2OworfQorCit2b2lkCitDb3JlUHJvcHNCdWlsZGVyOjpzZXRHY0FuZE51bWVyaWMoY29uc3QgVW5pUHJvcHMgJnByb3BzLCBjb25zdCBVbmljb2RlU2V0ICZuZXdWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisgICAgVUNoYXIzMiBzdGFydD1wcm9wcy5zdGFydDsKKyAgICBVQ2hhcjMyIGVuZD1wcm9wcy5lbmQ7CisKKyAgICBpbnQzMl90IHR5cGU9cHJvcHMuZ2V0SW50UHJvcChVQ0hBUl9OVU1FUklDX1RZUEUpOworICAgIGNvbnN0IGNoYXIgKm52U3RyaW5nPXByb3BzLm51bWVyaWNWYWx1ZTsKKyAgICBpZih0eXBlIT1VX05UX05PTkUgJiYgbnZTdHJpbmc9PU5VTEwgJiYgc3RhcnQ9PWVuZCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBjcCBsaW5lIGhhcyBOdW1lcmljX1R5cGUgYnV0IG5vIE51bWVyaWNfVmFsdWVcbiIpOworICAgICAgICBlcnJvckNvZGU9VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoIW5ld1ZhbHVlcy5jb250YWlucyhVQ0hBUl9HRU5FUkFMX0NBVEVHT1JZKSAmJiAhbmV3VmFsdWVzLmNvbnRhaW5zKFVDSEFSX05VTUVSSUNfVkFMVUUpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQzMl90IG50dj1VUFJPUFNfTlRWX05PTkU7ICAvLyBudW1lcmljIHR5cGUgJiB2YWx1ZQorICAgIGlmKG52U3RyaW5nIT1OVUxMKSB7CisgICAgICAgIGludDMyX3QgZGlnaXRWYWx1ZT1wcm9wcy5kaWdpdFZhbHVlOworICAgICAgICBpZiggdHlwZTw9VV9OVF9OT05FIHx8IFVfTlRfTlVNRVJJQzx0eXBlIHx8CisgICAgICAgICAgICAoKHR5cGU9PVVfTlRfREVDSU1BTCB8fCB0eXBlPT1VX05UX0RJR0lUKSAmJiBkaWdpdFZhbHVlPDApCisgICAgICAgICkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogbnQ9JWQgYnV0IG52PSVzXG4iLAorICAgICAgICAgICAgICAgICAgICAoaW50KXR5cGUsIG52U3RyaW5nPT1OVUxMID8gIk5VTEwiIDogbnZTdHJpbmcpOworICAgICAgICAgICAgZXJyb3JDb2RlPVVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCh0eXBlKSB7CisgICAgICAgIGNhc2UgVV9OVF9OT05FOgorICAgICAgICAgICAgbnR2PVVQUk9QU19OVFZfTk9ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfTlRfREVDSU1BTDoKKyAgICAgICAgICAgIG50dj1VUFJPUFNfTlRWX0RFQ0lNQUxfU1RBUlQrZGlnaXRWYWx1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVfTlRfRElHSVQ6CisgICAgICAgICAgICBudHY9VVBST1BTX05UVl9ESUdJVF9TVEFSVCtkaWdpdFZhbHVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVV9OVF9OVU1FUklDOgorICAgICAgICAgICAgaWYoZGlnaXRWYWx1ZT49MCkgeworICAgICAgICAgICAgICAgIG50dj1VUFJPUFNfTlRWX05VTUVSSUNfU1RBUlQrZGlnaXRWYWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbnR2PWVuY29kZU51bWVyaWNWYWx1ZShzdGFydCwgbnZTdHJpbmcsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOyAgLy8gdW5yZWFjaGFibGUKKyAgICAgICAgfQorICAgIH0KKworICAgIHVpbnQzMl90IHZhbHVlPQorICAgICAgICAodWludDMyX3QpcHJvcHMuZ2V0SW50UHJvcChVQ0hBUl9HRU5FUkFMX0NBVEVHT1JZKSB8CisgICAgICAgIChudHY8PFVQUk9QU19OVU1FUklDX1RZUEVfVkFMVUVfU0hJRlQpOworICAgIGlmKHN0YXJ0PT1lbmQpIHsKKyAgICAgICAgdXRyaWUyX3NldDMyKHBUcmllLCBzdGFydCwgdmFsdWUsICZlcnJvckNvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHV0cmllMl9zZXRSYW5nZTMyKHBUcmllLCBzdGFydCwgZW5kLCB2YWx1ZSwgVFJVRSwgJmVycm9yQ29kZSk7CisgICAgfQorICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHV0cmllMl9zZXRSYW5nZTMyKHByb3BlcnRpZXMgdHJpZSAlMDRsWC4uJTA0bFgpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIChsb25nKXN0YXJ0LCAobG9uZyllbmQsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgIH0KK30KKworc3RydWN0IFByb3BUb0JpbmFyeSB7CisgICAgaW50MzJfdCBwcm9wOyAgLy8gVVByb3BlcnR5CisgICAgaW50MzJfdCB2ZWNXb3JkLCB2ZWNTaGlmdDsKK307CisKK3N0YXRpYyBjb25zdCBQcm9wVG9CaW5hcnkKK3Byb3BUb0JpbmFyaWVzW109eworICAgIHsgVUNIQVJfV0hJVEVfU1BBQ0UsICAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfV0hJVEVfU1BBQ0UgfSwKKyAgICB7IFVDSEFSX0RBU0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0RBU0ggfSwKKyAgICAvLyBOb3RlOiBUaGUgSHlwaGVuIHByb3BlcnR5IGlzIHN0YWJpbGl6ZWQgc2luY2UgVW5pY29kZSA0LjAKKyAgICAvLyBhbmQgZGVwcmVjYXRlZCBzaW5jZSBVbmljb2RlIDYuMC4KKyAgICB7IFVDSEFSX0hZUEhFTiwgICAgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0hZUEhFTiB9LAorICAgIHsgVUNIQVJfUVVPVEFUSU9OX01BUkssICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfUVVPVEFUSU9OX01BUksgfSwKKyAgICB7IFVDSEFSX1RFUk1JTkFMX1BVTkNUVUFUSU9OLCAgICAgICAgICAgMSwgVVBST1BTX1RFUk1JTkFMX1BVTkNUVUFUSU9OIH0sCisgICAgLy8gTm90ZTogVGhlIEhleF9EaWdpdCBhbmQgQVNDSUlfSGV4X0RpZ2l0IHByb3BlcnRpZXMgYXJlIHByb2JhYmx5IHN0YWJsZSBlbm91Z2gKKyAgICAvLyBzbyB0aGF0IHRoZXkgY291bGQgYmUgaGFyZGNvZGVkLgorICAgIHsgVUNIQVJfSEVYX0RJR0lULCAgICAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfSEVYX0RJR0lUIH0sCisgICAgeyBVQ0hBUl9BU0NJSV9IRVhfRElHSVQsICAgICAgICAgICAgICAgIDEsIFVQUk9QU19BU0NJSV9IRVhfRElHSVQgfSwKKyAgICB7IFVDSEFSX0lERU9HUkFQSElDLCAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0lERU9HUkFQSElDIH0sCisgICAgeyBVQ0hBUl9ESUFDUklUSUMsICAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19ESUFDUklUSUMgfSwKKyAgICB7IFVDSEFSX0VYVEVOREVSLCAgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0VYVEVOREVSIH0sCisgICAgLy8gTm90ZTogVGhlIE5vbmNoYXJhY3Rlcl9Db2RlX1BvaW50IHByb3BlcnR5IGlzIHByb2JhYmx5IHN0YWJsZSBlbm91Z2gKKyAgICAvLyBzbyB0aGF0IGl0IGNvdWxkIGJlIGhhcmRjb2RlZC4KKyAgICB7IFVDSEFSX05PTkNIQVJBQ1RFUl9DT0RFX1BPSU5ULCAgICAgICAgMSwgVVBST1BTX05PTkNIQVJBQ1RFUl9DT0RFX1BPSU5UIH0sCisgICAgLy8gTm90ZTogVGhlIEdyYXBoZW1lX0xpbmsgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBzaW5jZSBVbmljb2RlIDUuMAorICAgIC8vIGJlY2F1c2UgaXQgaXMgYSAiRHVwbGljYXRpb24gb2YgY2NjPTkiIChVQVggIzQ0KS4KKyAgICB7IFVDSEFSX0dSQVBIRU1FX0xJTkssICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0dSQVBIRU1FX0xJTksgfSwKKyAgICB7IFVDSEFSX0lEU19CSU5BUllfT1BFUkFUT1IsICAgICAgICAgICAgMSwgVVBST1BTX0lEU19CSU5BUllfT1BFUkFUT1IgfSwKKyAgICB7IFVDSEFSX0lEU19UUklOQVJZX09QRVJBVE9SLCAgICAgICAgICAgMSwgVVBST1BTX0lEU19UUklOQVJZX09QRVJBVE9SIH0sCisgICAgeyBVQ0hBUl9SQURJQ0FMLCAgICAgICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19SQURJQ0FMIH0sCisgICAgeyBVQ0hBUl9VTklGSUVEX0lERU9HUkFQSCwgICAgICAgICAgICAgIDEsIFVQUk9QU19VTklGSUVEX0lERU9HUkFQSCB9LAorICAgIHsgVUNIQVJfREVQUkVDQVRFRCwgICAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfREVQUkVDQVRFRCB9LAorICAgIHsgVUNIQVJfTE9HSUNBTF9PUkRFUl9FWENFUFRJT04sICAgICAgICAxLCBVUFJPUFNfTE9HSUNBTF9PUkRFUl9FWENFUFRJT04gfSwKKyAgICB7IFVDSEFSX1NfVEVSTSwgICAgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX1NfVEVSTSB9LAorICAgIHsgVUNIQVJfVkFSSUFUSU9OX1NFTEVDVE9SLCAgICAgICAgICAgICAxLCBVUFJPUFNfVkFSSUFUSU9OX1NFTEVDVE9SIH0sCisgICAgLy8gTm90ZTogUGF0dGVybl9TeW50YXggJiBQYXR0ZXJuX1doaXRlX1NwYWNlIGFyZSBhdmFpbGFibGUgdmlhCisgICAgLy8gdGhlIGludGVybmFsIFBhdHRlcm5Qcm9wcyBjbGFzcyBhbmQgbmVlZCBub3QgYmUgc3RvcmVkIGhlcmUgYW55IG1vcmUuCisgICAgeyBVQ0hBUl9QQVRURVJOX1NZTlRBWCwgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19QQVRURVJOX1NZTlRBWCB9LAorICAgIHsgVUNIQVJfUEFUVEVSTl9XSElURV9TUEFDRSwgICAgICAgICAgICAxLCBVUFJPUFNfUEFUVEVSTl9XSElURV9TUEFDRSB9LAorICAgIHsgVUNIQVJfWElEX1NUQVJULCAgICAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfWElEX1NUQVJUIH0sCisgICAgeyBVQ0hBUl9YSURfQ09OVElOVUUsICAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19YSURfQ09OVElOVUUgfSwKKyAgICB7IFVDSEFSX01BVEgsICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX01BVEggfSwKKyAgICB7IFVDSEFSX0FMUEhBQkVUSUMsICAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0FMUEhBQkVUSUMgfSwKKyAgICB7IFVDSEFSX0dSQVBIRU1FX0VYVEVORCwgICAgICAgICAgICAgICAgMSwgVVBST1BTX0dSQVBIRU1FX0VYVEVORCB9LAorICAgIHsgVUNIQVJfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lOVCwgICAxLCBVUFJPUFNfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lOVCB9LAorICAgIHsgVUNIQVJfSURfU1RBUlQsICAgICAgICAgICAgICAgICAgICAgICAxLCBVUFJPUFNfSURfU1RBUlQgfSwKKyAgICB7IFVDSEFSX0lEX0NPTlRJTlVFLCAgICAgICAgICAgICAgICAgICAgMSwgVVBST1BTX0lEX0NPTlRJTlVFIH0sCisgICAgeyBVQ0hBUl9HUkFQSEVNRV9CQVNFLCAgICAgICAgICAgICAgICAgIDEsIFVQUk9QU19HUkFQSEVNRV9CQVNFIH0sCit9OworCitzdHJ1Y3QgUHJvcFRvRW51bSB7CisgICAgaW50MzJfdCBwcm9wOyAgLy8gVVByb3BlcnR5CisgICAgaW50MzJfdCB2ZWNXb3JkLCB2ZWNTaGlmdDsKKyAgICB1aW50MzJfdCB2ZWNNYXNrOworfTsKKworc3RhdGljIGNvbnN0IFByb3BUb0VudW0KK3Byb3BUb0VudW1zW109eworICAgIC8vIFVzZSBVUFJPUFNfU0NSSVBUX1hfTUFTSyBub3QgVVBST1BTX1NDUklQVF9NQVNLOgorICAgIC8vIFdoZW4gd3JpdGluZyBhIFNjcmlwdCBjb2RlLCByZW1vdmUgU2NyaXB0X0V4dGVuc2lvbnMgYml0cyBhcyB3ZWxsLgorICAgIC8vIElmIG5lZWRlZCwgdGhleSB3aWxsIGdldCB3cml0dGVuIGFnYWluLgorICAgIHsgVUNIQVJfU0NSSVBULCAgICAgICAgICAgICAgICAgICAgIDAsIDAsIFVQUk9QU19TQ1JJUFRfWF9NQVNLIH0sCisgICAgeyBVQ0hBUl9CTE9DSywgICAgICAgICAgICAgICAgICAgICAgMCwgVVBST1BTX0JMT0NLX1NISUZULCBVUFJPUFNfQkxPQ0tfTUFTSyB9LAorICAgIHsgVUNIQVJfRUFTVF9BU0lBTl9XSURUSCwgICAgICAgICAgIDAsIFVQUk9QU19FQV9TSElGVCwgVVBST1BTX0VBX01BU0sgfSwKKyAgICB7IFVDSEFSX0RFQ09NUE9TSVRJT05fVFlQRSwgICAgICAgICAyLCAwLCBVUFJPUFNfRFRfTUFTSyB9LAorICAgIHsgVUNIQVJfR1JBUEhFTUVfQ0xVU1RFUl9CUkVBSywgICAgIDIsIFVQUk9QU19HQ0JfU0hJRlQsIFVQUk9QU19HQ0JfTUFTSyB9LAorICAgIHsgVUNIQVJfV09SRF9CUkVBSywgICAgICAgICAgICAgICAgIDIsIFVQUk9QU19XQl9TSElGVCwgVVBST1BTX1dCX01BU0sgfSwKKyAgICB7IFVDSEFSX1NFTlRFTkNFX0JSRUFLLCAgICAgICAgICAgICAyLCBVUFJPUFNfU0JfU0hJRlQsIFVQUk9QU19TQl9NQVNLIH0sCisgICAgeyBVQ0hBUl9MSU5FX0JSRUFLLCAgICAgICAgICAgICAgICAgMiwgVVBST1BTX0xCX1NISUZULCBVUFJPUFNfTEJfTUFTSyB9LAorfTsKKwordm9pZAorQ29yZVByb3BzQnVpbGRlcjo6c2V0UHJvcHMoY29uc3QgVW5pUHJvcHMgJnByb3BzLCBjb25zdCBVbmljb2RlU2V0ICZuZXdWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBzZXRHY0FuZE51bWVyaWMocHJvcHMsIG5ld1ZhbHVlcywgZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIFVDaGFyMzIgc3RhcnQ9cHJvcHMuc3RhcnQ7CisgICAgVUNoYXIzMiBlbmQ9cHJvcHMuZW5kOworICAgIGlmKHN0YXJ0PT0wICYmIGVuZD09MHgxMGZmZmYpIHsKKyAgICAgICAgLy8gQWxzbyBzZXQgYml0cyBmb3IgaW5pdGlhbFZhbHVlIGFuZCBlcnJvclZhbHVlLgorICAgICAgICBlbmQ9VVBWRUNfTUFYX0NQOworICAgIH0KKyAgICBpZihuZXdWYWx1ZXMuY29udGFpbnNTb21lKDAsIFVDSEFSX0JJTkFSWV9MSU1JVC0xKSkgeworICAgICAgICBmb3IoaW50MzJfdCBpPTA7IGk8TEVOR1RIT0YocHJvcFRvQmluYXJpZXMpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFByb3BUb0JpbmFyeSAmcDJiPXByb3BUb0JpbmFyaWVzW2ldOworICAgICAgICAgICAgVV9BU1NFUlQocDJiLnZlY1NoaWZ0PDMyKTsKKyAgICAgICAgICAgIGlmKG5ld1ZhbHVlcy5jb250YWlucyhwMmIucHJvcCkpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBtYXNrPVVfTUFTSyhwMmIudmVjU2hpZnQpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlPSBwcm9wcy5iaW5Qcm9wc1twMmIucHJvcF0gPyBtYXNrIDogMDsKKyAgICAgICAgICAgICAgICB1cHZlY19zZXRWYWx1ZShwdiwgc3RhcnQsIGVuZCwgcDJiLnZlY1dvcmQsIHZhbHVlLCBtYXNrLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZihuZXdWYWx1ZXMuY29udGFpbnNTb21lKFVDSEFSX0lOVF9TVEFSVCwgVUNIQVJfSU5UX0xJTUlULTEpKSB7CisgICAgICAgIGZvcihpbnQzMl90IGk9MDsgaTxMRU5HVEhPRihwcm9wVG9FbnVtcyk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgUHJvcFRvRW51bSAmcDJlPXByb3BUb0VudW1zW2ldOworICAgICAgICAgICAgVV9BU1NFUlQocDJlLnZlY1NoaWZ0PDMyKTsKKyAgICAgICAgICAgIGlmKG5ld1ZhbHVlcy5jb250YWlucyhwMmUucHJvcCkpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBtYXNrPXAyZS52ZWNNYXNrOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlPSh1aW50MzJfdCkocHJvcHMuZ2V0SW50UHJvcChwMmUucHJvcCk8PHAyZS52ZWNTaGlmdCk7CisgICAgICAgICAgICAgICAgVV9BU1NFUlQoKHZhbHVlJm1hc2spPT12YWx1ZSk7CisgICAgICAgICAgICAgICAgdXB2ZWNfc2V0VmFsdWUocHYsIHN0YXJ0LCBlbmQsIHAyZS52ZWNXb3JkLCB2YWx1ZSwgbWFzaywgJmVycm9yQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYobmV3VmFsdWVzLmNvbnRhaW5zKFVDSEFSX0FHRSkpIHsKKyAgICAgICAgaWYocHJvcHMuYWdlWzBdPjE1IHx8IHByb3BzLmFnZVsxXT4xNSB8fCBwcm9wcy5hZ2VbMl0hPTAgfHwgcHJvcHMuYWdlWzNdIT0wKSB7CisgICAgICAgICAgICBjaGFyIGJ1ZmZlcltVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOworICAgICAgICAgICAgdV92ZXJzaW9uVG9TdHJpbmcocHJvcHMuYWdlLCBidWZmZXIpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogYWdlICVzIGNhbm5vdCBiZSBlbmNvZGVkXG4iLCBidWZmZXIpOworICAgICAgICAgICAgZXJyb3JDb2RlPVVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB1aW50MzJfdCB2ZXJzaW9uPShwcm9wcy5hZ2VbMF08PDQpfHByb3BzLmFnZVsxXTsKKyAgICAgICAgdXB2ZWNfc2V0VmFsdWUocHYsIHN0YXJ0LCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIHZlcnNpb248PFVQUk9QU19BR0VfU0hJRlQsIFVQUk9QU19BR0VfTUFTSywKKyAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yQ29kZSk7CisgICAgfQorICAgIC8vIFdyaXRlIGEgbmV3IChTY3JpcHQsIFNjcmlwdF9FeHRlbnNpb25zKSB2YWx1ZSBpZiB0aGVyZSBhcmUgU2NyaXB0X0V4dGVuc2lvbnMKKyAgICAvLyBhbmQgZWl0aGVyIFNjcmlwdCBvciBTY3JpcHRfRXh0ZW5zaW9ucyBhcmUgbmV3IG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgLy8gKElmIG9ubHkgU2NyaXB0IGlzIG5ldywgdGhlbiBpdCBqdXN0IGNsb2JiZXJlZCB0aGUgcmVsZXZhbnQgYml0cy4pCisgICAgaWYoICFwcm9wcy5zY3guaXNFbXB0eSgpICYmCisgICAgICAgIChuZXdWYWx1ZXMuY29udGFpbnMoVUNIQVJfU0NSSVBUKSB8fCBuZXdWYWx1ZXMuY29udGFpbnMoVUNIQVJfU0NSSVBUX0VYVEVOU0lPTlMpKQorICAgICkgeworICAgICAgICBVbmljb2RlU3RyaW5nIGNvZGVzOyAgLy8gdmVjdG9yIG9mIDE2LWJpdCBVU2NyaXB0Q29kZSB2YWx1ZXMKKyAgICAgICAgVW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIocHJvcHMuc2N4KTsKKyAgICAgICAgd2hpbGUoaXRlci5uZXh0KCkpIHsgY29kZXMuYXBwZW5kKChVQ2hhcilpdGVyLmdldENvZGVwb2ludCgpKTsgfQorCisgICAgICAgIC8vIFNldCBiaXQgMTUgb24gdGhlIGxhc3Qgc2NyaXB0IGNvZGUsIGZvciB0ZXJtaW5hdGlvbi4KKyAgICAgICAgaW50MzJfdCBsZW5ndGg9Y29kZXMubGVuZ3RoKCk7CisgICAgICAgIGNvZGVzLnNldENoYXJBdChsZW5ndGgtMSwgKFVDaGFyKShjb2Rlc1tsZW5ndGgtMV18MHg4MDAwKSk7CisgICAgICAgIC8vIEZpbmQgdGhpcyBsaXN0IG9mIGNvZGVzIGluIHRoZSBTY3JpcHRfRXh0ZW5zaW9ucyBkYXRhIHNvIGZhciwgb3IgYWRkIHRoaXMgbGlzdC4KKyAgICAgICAgaW50MzJfdCBpbmRleD1zY3JpcHRFeHRlbnNpb25zLmluZGV4T2YoY29kZXMpOworICAgICAgICBpZihpbmRleDwwKSB7CisgICAgICAgICAgICBpbmRleD1zY3JpcHRFeHRlbnNpb25zLmxlbmd0aCgpOworICAgICAgICAgICAgc2NyaXB0RXh0ZW5zaW9ucy5hcHBlbmQoY29kZXMpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRW5jb2RlIHRoZSAoU2NyaXB0LCBTY3JpcHRfRXh0ZW5zaW9ucyBpbmRleCkgcGFpci4KKyAgICAgICAgaW50MzJfdCBzY3JpcHQ9cHJvcHMuZ2V0SW50UHJvcChVQ0hBUl9TQ1JJUFQpOworICAgICAgICB1aW50MzJfdCBzY3JpcHRYOworICAgICAgICBpZihzY3JpcHQ9PVVTQ1JJUFRfQ09NTU9OKSB7CisgICAgICAgICAgICBzY3JpcHRYPVVQUk9QU19TQ1JJUFRfWF9XSVRIX0NPTU1PTnwodWludDMyX3QpaW5kZXg7CisgICAgICAgIH0gZWxzZSBpZihzY3JpcHQ9PVVTQ1JJUFRfSU5IRVJJVEVEKSB7CisgICAgICAgICAgICBzY3JpcHRYPVVQUk9QU19TQ1JJUFRfWF9XSVRIX0lOSEVSSVRFRHwodWludDMyX3QpaW5kZXg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTdG9yZSBhbiBhZGRpdGlvbmFsIHBhaXIgb2YgMTYtYml0IHVuaXRzIGZvciBhbiB1bnVzdWFsIG1haW4gU2NyaXB0IGNvZGUKKyAgICAgICAgICAgIC8vIHRvZ2V0aGVyIHdpdGggdGhlIFNjcmlwdF9FeHRlbnNpb25zIGluZGV4LgorICAgICAgICAgICAgVW5pY29kZVN0cmluZyBjb2RlSW5kZXhQYWlyOworICAgICAgICAgICAgY29kZUluZGV4UGFpci5hcHBlbmQoKFVDaGFyKXNjcmlwdCkuYXBwZW5kKChVQ2hhcilpbmRleCk7CisgICAgICAgICAgICBpbmRleD1zY3JpcHRFeHRlbnNpb25zLmluZGV4T2YoY29kZUluZGV4UGFpcik7CisgICAgICAgICAgICBpZihpbmRleDwwKSB7CisgICAgICAgICAgICAgICAgaW5kZXg9c2NyaXB0RXh0ZW5zaW9ucy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBzY3JpcHRFeHRlbnNpb25zLmFwcGVuZChjb2RlSW5kZXhQYWlyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjcmlwdFg9VVBST1BTX1NDUklQVF9YX1dJVEhfT1RIRVJ8KHVpbnQzMl90KWluZGV4OworICAgICAgICB9CisgICAgICAgIGlmKGluZGV4PlVQUk9QU19TQ1JJUFRfTUFTSykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogU2NyaXB0X0V4dGVuc2lvbnMgaW5kZXhlcyBvdmVyZmxvdyBiaXQgZmllbGRcbiIpOworICAgICAgICAgICAgZXJyb3JDb2RlPVVfQlVGRkVSX09WRVJGTE9XX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHVwdmVjX3NldFZhbHVlKHB2LCBzdGFydCwgZW5kLCAwLCBzY3JpcHRYLCBVUFJPUFNfU0NSSVBUX1hfTUFTSywgJmVycm9yQ29kZSk7CisgICAgfQorICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHMgZXJyb3I6IHVuYWJsZSB0byBzZXQgcHJvcHMyIHZhbHVlcyBmb3IgJTA0bFguLiUwNGxYOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAobG9uZylzdGFydCwgKGxvbmcpZW5kLCB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IGluZGV4ZXNbVVBST1BTX0lOREVYX0NPVU5UXT17CisgICAgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMAorfTsKKworc3RhdGljIHVpbnQ4X3QgdHJpZUJsb2NrWzQwMDAwXTsKK3N0YXRpYyBpbnQzMl90IHRyaWVTaXplOworc3RhdGljIHVpbnQ4X3QgcHJvcHMyVHJpZUJsb2NrWzEwMDAwMF07CitzdGF0aWMgaW50MzJfdCBwcm9wczJUcmllU2l6ZTsKKworc3RhdGljIGludDMyX3QgdG90YWxTaXplOworCit2b2lkCitDb3JlUHJvcHNCdWlsZGVyOjpidWlsZChVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIHV0cmllMl9mcmVlemUocFRyaWUsIFVUUklFMl8xNl9WQUxVRV9CSVRTLCAmZXJyb3JDb2RlKTsKKyAgICB0cmllU2l6ZT11dHJpZTJfc2VyaWFsaXplKHBUcmllLCB0cmllQmxvY2ssIHNpemVvZih0cmllQmxvY2spLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IHV0cmllMl9mcmVlemUobWFpbiB0cmllKSt1dHJpZTJfc2VyaWFsaXplKCkgIgorICAgICAgICAgICAgICAgICJmYWlsZWQ6ICVzIChsZW5ndGggJWxkKVxuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpLCAobG9uZyl0cmllU2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcm9wczJUcmllPXVwdmVjX2NvbXBhY3RUb1VUcmllMldpdGhSb3dJbmRleGVzKHB2LCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiB1bmFibGUgdG8gYnVpbGQgdHJpZSBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByb3BzMlRyaWVTaXplPXV0cmllMl9zZXJpYWxpemUocHJvcHMyVHJpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzMlRyaWVCbG9jaywgKGludDMyX3Qpc2l6ZW9mKHByb3BzMlRyaWVCbG9jayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IHV0cmllMl9mcmVlemUoYWRkaXRpb25hbCBwcm9wZXJ0aWVzKSt1dHJpZTJfc2VyaWFsaXplKCkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludDMyX3QgcHZSb3dzOworICAgIGNvbnN0IHVpbnQzMl90ICpwdkFycmF5PXVwdmVjX2dldEFycmF5KHB2LCAmcHZSb3dzLCBOVUxMKTsKKyAgICBpbnQzMl90IHB2Q291bnQ9cHZSb3dzKlVQUk9QU19WRUNUT1JfV09SRFM7CisKKyAgICAvKiByb3VuZCB1cCBzY3JpcHRFeHRlbnNpb25zIHRvIG11bHRpcGxlIG9mIDQgYnl0ZXMgKi8KKyAgICBpZihzY3JpcHRFeHRlbnNpb25zLmxlbmd0aCgpJjEpIHsKKyAgICAgICAgc2NyaXB0RXh0ZW5zaW9ucy5hcHBlbmQoKFVDaGFyKTApOworICAgIH0KKworICAgIC8qIHNldCBpbmRleGVzICovCisgICAgaW50MzJfdCBvZmZzZXQ9c2l6ZW9mKGluZGV4ZXMpLzQ7ICAgICAgIC8qIHVpbnQzMl90IG9mZnNldCB0byB0aGUgcHJvcGVydGllcyB0cmllICovCisgICAgb2Zmc2V0Kz10cmllU2l6ZT4+MjsKKyAgICBpbmRleGVzW1VQUk9QU19QUk9QUzMyX0lOREVYXT0gICAgICAgICAgLyogc2V0IGluZGV4ZXMgdG8gdGhlIHNhbWUgb2Zmc2V0cyBmb3IgZW1wdHkgKi8KKyAgICBpbmRleGVzW1VQUk9QU19FWENFUFRJT05TX0lOREVYXT0gICAgICAgLyogc3RydWN0dXJlcyBmcm9tIHRoZSBvbGQgZm9ybWF0IHZlcnNpb24gMyAqLworICAgIGluZGV4ZXNbVVBST1BTX0VYQ0VQVElPTlNfVE9QX0lOREVYXT0gICAvKiBzbyB0aGF0IGxlc3MgcnVudGltZSBjb2RlIGhhcyB0byBiZSBjaGFuZ2VkICovCisgICAgaW5kZXhlc1tVUFJPUFNfQURESVRJT05BTF9UUklFX0lOREVYXT1vZmZzZXQ7CisKKyAgICBvZmZzZXQrPXByb3BzMlRyaWVTaXplLzQ7CisgICAgaW5kZXhlc1tVUFJPUFNfQURESVRJT05BTF9WRUNUT1JTX0lOREVYXT1vZmZzZXQ7CisgICAgaW5kZXhlc1tVUFJPUFNfQURESVRJT05BTF9WRUNUT1JTX0NPTFVNTlNfSU5ERVhdPVVQUk9QU19WRUNUT1JfV09SRFM7CisgICAgb2Zmc2V0Kz1wdkNvdW50OworICAgIGluZGV4ZXNbVVBST1BTX1NDUklQVF9FWFRFTlNJT05TX0lOREVYXT1vZmZzZXQ7CisgICAgb2Zmc2V0Kz1zY3JpcHRFeHRlbnNpb25zLmxlbmd0aCgpLzI7CisgICAgaW5kZXhlc1tVUFJPUFNfUkVTRVJWRURfSU5ERVhfN109b2Zmc2V0OworICAgIGluZGV4ZXNbVVBST1BTX1JFU0VSVkVEX0lOREVYXzhdPW9mZnNldDsKKyAgICBpbmRleGVzW1VQUk9QU19EQVRBX1RPUF9JTkRFWF09b2Zmc2V0OworICAgIHRvdGFsU2l6ZT00Km9mZnNldDsKKworICAgIGluZGV4ZXNbVVBST1BTX01BWF9WQUxVRVNfSU5ERVhdPQorICAgICAgICAoKChpbnQzMl90KVVfRUFfQ09VTlQtMSk8PFVQUk9QU19FQV9TSElGVCl8CisgICAgICAgICgoKGludDMyX3QpVUJMT0NLX0NPVU5ULTEpPDxVUFJPUFNfQkxPQ0tfU0hJRlQpfAorICAgICAgICAoKChpbnQzMl90KVVTQ1JJUFRfQ09ERV9MSU1JVC0xKSZVUFJPUFNfU0NSSVBUX01BU0spOworICAgIGluZGV4ZXNbVVBST1BTX01BWF9WQUxVRVNfMl9JTkRFWF09CisgICAgICAgICgoKGludDMyX3QpVV9MQl9DT1VOVC0xKTw8VVBST1BTX0xCX1NISUZUKXwKKyAgICAgICAgKCgoaW50MzJfdClVX1NCX0NPVU5ULTEpPDxVUFJPUFNfU0JfU0hJRlQpfAorICAgICAgICAoKChpbnQzMl90KVVfV0JfQ09VTlQtMSk8PFVQUk9QU19XQl9TSElGVCl8CisgICAgICAgICgoKGludDMyX3QpVV9HQ0JfQ09VTlQtMSk8PFVQUk9QU19HQ0JfU0hJRlQpfAorICAgICAgICAoKGludDMyX3QpVV9EVF9DT1VOVC0xKTsKKworICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHB1dHMoIiogdXByb3BzLmljdSBzdGF0cyAqIik7CisgICAgICAgIHByaW50ZigidHJpZSBzaXplIGluIGJ5dGVzOiAgICAgICAgICAgICAgICAgICAgJTV1XG4iLCAoaW50KXRyaWVTaXplKTsKKyAgICAgICAgcHJpbnRmKCJzaXplIGluIGJ5dGVzIG9mIGFkZGl0aW9uYWwgcHJvcHMgdHJpZTolNXVcbiIsIChpbnQpcHJvcHMyVHJpZVNpemUpOworICAgICAgICBwcmludGYoIm51bWJlciBvZiBhZGRpdGlvbmFsIHByb3BzIHZlY3RvcnM6ICAgICU1dVxuIiwgKGludClwdlJvd3MpOworICAgICAgICBwcmludGYoIm51bWJlciBvZiAzMi1iaXQgd29yZHMgcGVyIHZlY3RvcjogICAgICU1dVxuIiwgVVBST1BTX1ZFQ1RPUl9XT1JEUyk7CisgICAgICAgIHByaW50ZigibnVtYmVyIG9mIDE2LWJpdCBzY3JpcHRFeHRlbnNpb25zOiAgICAgJTV1XG4iLCAoaW50KXNjcmlwdEV4dGVuc2lvbnMubGVuZ3RoKCkpOworICAgICAgICBwcmludGYoImRhdGEgc2l6ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgJTZsZFxuIiwgKGxvbmcpdG90YWxTaXplKTsKKyAgICB9Cit9CisKK3ZvaWQKK0NvcmVQcm9wc0J1aWxkZXI6OndyaXRlQ1NvdXJjZUZpbGUoY29uc3QgY2hhciAqcGF0aCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBpbnQzMl90IHB2Um93czsKKyAgICBjb25zdCB1aW50MzJfdCAqcHZBcnJheT11cHZlY19nZXRBcnJheShwdiwgJnB2Um93cywgTlVMTCk7CisgICAgaW50MzJfdCBwdkNvdW50PXB2Um93cypVUFJPUFNfVkVDVE9SX1dPUkRTOworCisgICAgRklMRSAqZj11c3JjX2NyZWF0ZShwYXRoLCAidWNoYXJfcHJvcHNfZGF0YS5oIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpY3UvdG9vbHMvdW5pY29kZS9jL2dlbnByb3BzL2NvcmVwcm9wc2J1aWxkZXIuY3BwIik7CisgICAgaWYoZj09TlVMTCkgeworICAgICAgICBlcnJvckNvZGU9VV9GSUxFX0FDQ0VTU19FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmcHV0cygiI2lmbmRlZiBJTkNMVURFRF9GUk9NX1VDSEFSX0NcbiIKKyAgICAgICAgICAiIyAgIGVycm9yIFRoaXMgZmlsZSBtdXN0IGJlICNpbmNsdWRlZCBmcm9tIHVjaGFyLmMgb25seS5cbiIKKyAgICAgICAgICAiI2VuZGlmXG5cbiIsIGYpOworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IFVWZXJzaW9uSW5mbyBkYXRhVmVyc2lvbj17IiwKKyAgICAgICAgZGF0YUluZm8uZGF0YVZlcnNpb24sIDgsIDQsCisgICAgICAgICJ9O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlVVRyaWUyQXJyYXlzKGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgdWludDE2X3QgcHJvcHNUcmllX2luZGV4WyVsZF09e1xuIiwgTlVMTCwKKyAgICAgICAgcFRyaWUsCisgICAgICAgICJcbn07XG5cbiIpOworICAgIHVzcmNfd3JpdGVVVHJpZTJTdHJ1Y3QoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCBVVHJpZTIgcHJvcHNUcmllPXtcbiIsCisgICAgICAgIHBUcmllLCAicHJvcHNUcmllX2luZGV4IiwgTlVMTCwKKyAgICAgICAgIn07XG5cbiIpOworCisgICAgdXNyY193cml0ZVVUcmllMkFycmF5cyhmLAorICAgICAgICAic3RhdGljIGNvbnN0IHVpbnQxNl90IHByb3BzVmVjdG9yc1RyaWVfaW5kZXhbJWxkXT17XG4iLCBOVUxMLAorICAgICAgICBwcm9wczJUcmllLAorICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlVVRyaWUyU3RydWN0KGYsCisgICAgICAgICJzdGF0aWMgY29uc3QgVVRyaWUyIHByb3BzVmVjdG9yc1RyaWU9e1xuIiwKKyAgICAgICAgcHJvcHMyVHJpZSwgInByb3BzVmVjdG9yc1RyaWVfaW5kZXgiLCBOVUxMLAorICAgICAgICAifTtcblxuIik7CisKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50MzJfdCBwcm9wc1ZlY3RvcnNbJWxkXT17XG4iLAorICAgICAgICBwdkFycmF5LCAzMiwgcHZDb3VudCwKKyAgICAgICAgIn07XG5cbiIpOworICAgIGZwcmludGYoZiwgInN0YXRpYyBjb25zdCBpbnQzMl90IGNvdW50UHJvcHNWZWN0b3JzPSVsZDtcbiIsIChsb25nKXB2Q291bnQpOworICAgIGZwcmludGYoZiwgInN0YXRpYyBjb25zdCBpbnQzMl90IHByb3BzVmVjdG9yc0NvbHVtbnM9JWxkO1xuIiwgKGxvbmcpVVBST1BTX1ZFQ1RPUl9XT1JEUyk7CisKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwKKyAgICAgICAgInN0YXRpYyBjb25zdCB1aW50MTZfdCBzY3JpcHRFeHRlbnNpb25zWyVsZF09e1xuIiwKKyAgICAgICAgc2NyaXB0RXh0ZW5zaW9ucy5nZXRCdWZmZXIoKSwgMTYsIHNjcmlwdEV4dGVuc2lvbnMubGVuZ3RoKCksCisgICAgICAgICJ9O1xuXG4iKTsKKworICAgIHVzcmNfd3JpdGVBcnJheShmLAorICAgICAgICAic3RhdGljIGNvbnN0IGludDMyX3QgaW5kZXhlc1tVUFJPUFNfSU5ERVhfQ09VTlRdPXsiLAorICAgICAgICBpbmRleGVzLCAzMiwgVVBST1BTX0lOREVYX0NPVU5ULAorICAgICAgICAifTtcblxuIik7CisgICAgZmNsb3NlKGYpOworfQorCit2b2lkCitDb3JlUHJvcHNCdWlsZGVyOjp3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsgcmV0dXJuOyB9CisKKyAgICBpbnQzMl90IHB2Um93czsKKyAgICBjb25zdCB1aW50MzJfdCAqcHZBcnJheT11cHZlY19nZXRBcnJheShwdiwgJnB2Um93cywgTlVMTCk7CisgICAgaW50MzJfdCBwdkNvdW50PXB2Um93cypVUFJPUFNfVkVDVE9SX1dPUkRTOworCisgICAgVU5ld0RhdGFNZW1vcnkgKnBEYXRhPXVkYXRhX2NyZWF0ZShwYXRoLCAiaWN1IiwgInVwcm9wcyIsICZkYXRhSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb3B5cmlnaHQgPyBVX0NPUFlSSUdIVF9TVFJJTkcgOiBOVUxMLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzOiB1ZGF0YV9jcmVhdGUoJXMsIHVwcm9wcy5pY3UpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHBhdGgsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgaW5kZXhlcywgc2l6ZW9mKGluZGV4ZXMpKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCB0cmllQmxvY2ssIHRyaWVTaXplKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBwcm9wczJUcmllQmxvY2ssIHByb3BzMlRyaWVTaXplKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBwdkFycmF5LCBwdkNvdW50KjQpOworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIHNjcmlwdEV4dGVuc2lvbnMuZ2V0QnVmZmVyKCksIHNjcmlwdEV4dGVuc2lvbnMubGVuZ3RoKCkqMik7CisKKyAgICBsb25nIGRhdGFMZW5ndGg9dWRhdGFfZmluaXNoKHBEYXRhLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzOiBlcnJvciAlcyB3cml0aW5nIHRoZSBvdXRwdXQgZmlsZVxuIiwgdV9lcnJvck5hbWUoZXJyb3JDb2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihkYXRhTGVuZ3RoIT0obG9uZyl0b3RhbFNpemUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgInVkYXRhX2ZpbmlzaCh1cHJvcHMuaWN1KSByZXBvcnRzICVsZCBieXRlcyB3cml0dGVuIGJ1dCBzaG91bGQgYmUgJWxkXG4iLAorICAgICAgICAgICAgICAgIGRhdGFMZW5ndGgsIChsb25nKXRvdGFsU2l6ZSk7CisgICAgICAgIGVycm9yQ29kZT1VX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgfQorfQorCitQcm9wc0J1aWxkZXIgKgorY3JlYXRlQ29yZVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm4gTlVMTDsgfQorICAgIFByb3BzQnVpbGRlciAqcGI9bmV3IENvcmVQcm9wc0J1aWxkZXIoZXJyb3JDb2RlKTsKKyAgICBpZihwYj09TlVMTCkgeworICAgICAgICBlcnJvckNvZGU9VV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIHBiOworfQorCisvKgorICogSGV5LCBFbWFjcywgcGxlYXNlIHNldCB0aGUgZm9sbG93aW5nOgorICoKKyAqIExvY2FsIFZhcmlhYmxlczoKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL2dlbnByb3BzLmNwcCBiL3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlODQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy5jcHAKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICBnZW5wcm9wcy5jcHAKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAxOTk5ZGVjMDgKKyogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKgorKiAgIFRoaXMgcHJvZ3JhbSBwYXJzZXMgdGhlIHBwdWNkLnR4dCBwcmVwYXJzZWQgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgZmlsZQorKiAgIGFuZCB3cml0ZXMgc2V2ZXJhbCBzb3VyY2UgYW5kIGJpbmFyeSBmaWxlcyBpbnRvIHRoZSBJQ1Ugc291cmNlIHRyZWUuCisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgorI2luY2x1ZGUgImNoYXJzdHIuaCIKKyNpbmNsdWRlICJnZW5wcm9wcy5oIgorI2luY2x1ZGUgInBwdWNkLmgiCisjaW5jbHVkZSAidG9vbHV0aWwuaCIKKyNpbmNsdWRlICJ1b3B0aW9ucy5oIgorCitVX05BTUVTUEFDRV9VU0UKKworVUJvb2wgYmVWZXJib3NlPUZBTFNFOworVUJvb2wgYmVRdWlldD1GQUxTRTsKKworUHJvcHNCdWlsZGVyOjpQcm9wc0J1aWxkZXIoKSB7fQorUHJvcHNCdWlsZGVyOjp+UHJvcHNCdWlsZGVyKCkge30KK3ZvaWQgUHJvcHNCdWlsZGVyOjpzZXRVbmljb2RlVmVyc2lvbihjb25zdCBVVmVyc2lvbkluZm8pIHt9Cit2b2lkIFByb3BzQnVpbGRlcjo6c2V0QWxnTmFtZXNSYW5nZShVQ2hhcjMyLCBVQ2hhcjMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIFVFcnJvckNvZGUgJikge30KK3ZvaWQgUHJvcHNCdWlsZGVyOjpzZXRQcm9wcyhjb25zdCBVbmlQcm9wcyAmLCBjb25zdCBVbmljb2RlU2V0ICYsIFVFcnJvckNvZGUgJikge30KK3ZvaWQgUHJvcHNCdWlsZGVyOjpidWlsZChVRXJyb3JDb2RlICYpIHt9Cit2b2lkIFByb3BzQnVpbGRlcjo6d3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICosIFVFcnJvckNvZGUgJikge30KK3ZvaWQgUHJvcHNCdWlsZGVyOjp3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqLCBVQm9vbCwgVUVycm9yQ29kZSAmKSB7fQorCitlbnVtIHsKKyAgICBIRUxQX0gsCisgICAgSEVMUF9RVUVTVElPTl9NQVJLLAorICAgIFZFUkJPU0UsCisgICAgUVVJRVQsCisgICAgQ09QWVJJR0hUCit9OworCisvKiBLZWVwIHRoZXNlIHZhbHVlcyBpbiBzeW5jIHdpdGggdGhlIGFib3ZlIGVudW1zICovCitzdGF0aWMgVU9wdGlvbiBvcHRpb25zW109eworICAgIFVPUFRJT05fSEVMUF9ILAorICAgIFVPUFRJT05fSEVMUF9RVUVTVElPTl9NQVJLLAorICAgIFVPUFRJT05fVkVSQk9TRSwKKyAgICBVT1BUSU9OX1FVSUVULAorICAgIFVPUFRJT05fQ09QWVJJR0hUCit9OworCitleHRlcm4gaW50CittYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKKyAgICBVX01BSU5fSU5JVF9BUkdTKGFyZ2MsIGFyZ3YpOworICAgIGFyZ2M9dV9wYXJzZUFyZ3MoYXJnYywgYXJndiwgTEVOR1RIT0Yob3B0aW9ucyksIG9wdGlvbnMpOworCisgICAgLyogZXJyb3IgaGFuZGxpbmcsIHByaW50aW5nIHVzYWdlIG1lc3NhZ2UgKi8KKyAgICBpZihhcmdjPDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiZXJyb3IgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50IFwiJXNcIlxuIiwKKyAgICAgICAgICAgIGFyZ3ZbLWFyZ2NdKTsKKyAgICB9CisgICAgaWYoYXJnYzwyIHx8IG9wdGlvbnNbSEVMUF9IXS5kb2VzT2NjdXIgfHwgb3B0aW9uc1tIRUxQX1FVRVNUSU9OX01BUktdLmRvZXNPY2N1cikgeworICAgICAgICAvKgorICAgICAgICAgKiBCcm9rZW4gaW50byBjaHVua3MgYmVjYXVzZSB0aGUgQzg5IHN0YW5kYXJkIHNheXMgdGhlIG1pbmltdW0KKyAgICAgICAgICogcmVxdWlyZWQgc3VwcG9ydGVkIHN0cmluZyBsZW5ndGggaXMgNTA5IGJ5dGVzLgorICAgICAgICAgKi8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiVXNhZ2U6ICVzIFstb3B0aW9uc10gcGF0aC90by9JQ1Uvc3JjL3Jvb3RcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJSZWFkcyB0aGUgcHJlcGFyc2VkIFVDRCBmaWxlIHBhdGgvdG8vSUNVL3NyYy9yb290L3NvdXJjZS9kYXRhL3VuaWRhdGEvcHB1Y2QudHh0IGFuZFxuIgorICAgICAgICAgICAgIndyaXRlcyBzb3VyY2UgYW5kIGJpbmFyeSBkYXRhIGZpbGVzIHdpdGggdGhlIGNoYXJhY3RlciBwcm9wZXJ0aWVzLlxuIgorICAgICAgICAgICAgIihVQ0Q9VW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UpXG4iCisgICAgICAgICAgICAiXG4iLAorICAgICAgICAgICAgYXJndlswXSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIk9wdGlvbnM6XG4iCisgICAgICAgICAgICAiXHQtaCBvciAtPyBvciAtLWhlbHAgIHRoaXMgdXNhZ2UgdGV4dFxuIgorICAgICAgICAgICAgIlx0LXYgb3IgLS12ZXJib3NlICAgICB2ZXJib3NlIG91dHB1dFxuIgorICAgICAgICAgICAgIlx0LXEgb3IgLS1xdWlldCAgICAgICBubyBvdXRwdXRcbiIKKyAgICAgICAgICAgICJcdC1jIG9yIC0tY29weXJpZ2h0ICAgaW5jbHVkZSBhIGNvcHlyaWdodCBub3RpY2VcbiIpOworICAgICAgICByZXR1cm4gYXJnYzwyID8gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SIDogVV9aRVJPX0VSUk9SOworICAgIH0KKworICAgIC8qIGdldCB0aGUgb3B0aW9ucyB2YWx1ZXMgKi8KKyAgICBiZVZlcmJvc2U9b3B0aW9uc1tWRVJCT1NFXS5kb2VzT2NjdXI7CisgICAgYmVRdWlldD1vcHRpb25zW1FVSUVUXS5kb2VzT2NjdXI7CisKKyAgICAvKiBpbml0aWFsaXplICovCisgICAgSWN1VG9vbEVycm9yQ29kZSBlcnJvckNvZGUoImdlbnByb3BzIik7CisgICAgTG9jYWxQb2ludGVyPFBOYW1lc0J1aWxkZXI+IHBuYW1lc0J1aWxkZXIoY3JlYXRlUE5hbWVzQnVpbGRlcihlcnJvckNvZGUpKTsKKyAgICBMb2NhbFBvaW50ZXI8UHJvcHNCdWlsZGVyPiBjb3JlUHJvcHNCdWlsZGVyKGNyZWF0ZUNvcmVQcm9wc0J1aWxkZXIoZXJyb3JDb2RlKSk7CisgICAgTG9jYWxQb2ludGVyPFByb3BzQnVpbGRlcj4gYmlkaVByb3BzQnVpbGRlcihjcmVhdGVCaURpUHJvcHNCdWlsZGVyKGVycm9yQ29kZSkpOworICAgIExvY2FsUG9pbnRlcjxQcm9wc0J1aWxkZXI+IGNhc2VQcm9wc0J1aWxkZXIoY3JlYXRlQ2FzZVByb3BzQnVpbGRlcihlcnJvckNvZGUpKTsKKyAgICBMb2NhbFBvaW50ZXI8UHJvcHNCdWlsZGVyPiBuYW1lc1Byb3BzQnVpbGRlcihjcmVhdGVOYW1lc1Byb3BzQnVpbGRlcihlcnJvckNvZGUpKTsKKyAgICBpZihlcnJvckNvZGUuaXNGYWlsdXJlKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogdW5hYmxlIHRvIGNyZWF0ZSBQcm9wc0J1aWxkZXJzIC0gJXNcbiIsIGVycm9yQ29kZS5lcnJvck5hbWUoKSk7CisgICAgICAgIHJldHVybiBlcnJvckNvZGUucmVzZXQoKTsKKyAgICB9CisKKyAgICBDaGFyU3RyaW5nIGljdVNyY1Jvb3QoYXJndlsxXSwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgaWN1U291cmNlKGljdVNyY1Jvb3QsIGVycm9yQ29kZSk7CisgICAgaWN1U291cmNlLmFwcGVuZFBhdGhQYXJ0KCJzb3VyY2UiLCBlcnJvckNvZGUpOworCisgICAgQ2hhclN0cmluZyBpY3VTb3VyY2VEYXRhKGljdVNvdXJjZSwgZXJyb3JDb2RlKTsKKyAgICBpY3VTb3VyY2VEYXRhLmFwcGVuZFBhdGhQYXJ0KCJkYXRhIiwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgcHB1Y2RQYXRoKGljdVNvdXJjZURhdGEsIGVycm9yQ29kZSk7CisgICAgcHB1Y2RQYXRoLmFwcGVuZFBhdGhQYXJ0KCJ1bmlkYXRhIiwgZXJyb3JDb2RlKTsKKyAgICBwcHVjZFBhdGguYXBwZW5kUGF0aFBhcnQoInBwdWNkLnR4dCIsIGVycm9yQ29kZSk7CisKKyAgICBQcmVwYXJzZWRVQ0QgcHB1Y2QocHB1Y2RQYXRoLmRhdGEoKSwgZXJyb3JDb2RlKTsKKyAgICBpZihlcnJvckNvZGUuaXNGYWlsdXJlKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogdW5hYmxlIHRvIG9wZW4gJXMgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICBwcHVjZFBhdGguZGF0YSgpLCBlcnJvckNvZGUuZXJyb3JOYW1lKCkpOworICAgICAgICByZXR1cm4gZXJyb3JDb2RlLnJlc2V0KCk7CisgICAgfQorCisgICAgLy8gVGhlIFBOYW1lc0J1aWxkZXIgdXNlcyBwcmVwYXJzZWQgcG5hbWVzX2RhdGEuaC4KKyAgICBwbmFtZXNCdWlsZGVyLT5idWlsZChlcnJvckNvZGUpOworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VucHJvcHM6IFBOYW1lc0J1aWxkZXI6OmJ1aWxkKCkgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgZXJyb3JDb2RlLmVycm9yTmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIGVycm9yQ29kZS5yZXNldCgpOworICAgIH0KKyAgICBwcHVjZC5zZXRQcm9wZXJ0eU5hbWVzKHBuYW1lc0J1aWxkZXItPmdldFByb3BlcnR5TmFtZXMoKSk7CisKKyAgICBQcmVwYXJzZWRVQ0Q6OkxpbmVUeXBlIGxpbmVUeXBlOworICAgIFVuaWNvZGVTZXQgbmV3VmFsdWVzOworICAgIHdoaWxlKChsaW5lVHlwZT1wcHVjZC5yZWFkTGluZShlcnJvckNvZGUpKSE9UHJlcGFyc2VkVUNEOjpOT19MSU5FKSB7CisgICAgICAgIGlmKHBwdWNkLmxpbmVIYXNQcm9wZXJ0eVZhbHVlcygpKSB7CisgICAgICAgICAgICBjb25zdCBVbmlQcm9wcyAqcHJvcHM9cHB1Y2QuZ2V0UHJvcHMobmV3VmFsdWVzLCBlcnJvckNvZGUpOworICAgICAgICAgICAgY29yZVByb3BzQnVpbGRlci0+c2V0UHJvcHMoKnByb3BzLCBuZXdWYWx1ZXMsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBiaWRpUHJvcHNCdWlsZGVyLT5zZXRQcm9wcygqcHJvcHMsIG5ld1ZhbHVlcywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIGNhc2VQcm9wc0J1aWxkZXItPnNldFByb3BzKCpwcm9wcywgbmV3VmFsdWVzLCBlcnJvckNvZGUpOworICAgICAgICAgICAgbmFtZXNQcm9wc0J1aWxkZXItPnNldFByb3BzKCpwcm9wcywgbmV3VmFsdWVzLCBlcnJvckNvZGUpOworICAgICAgICB9IGVsc2UgaWYobGluZVR5cGU9PVByZXBhcnNlZFVDRDo6VU5JQ09ERV9WRVJTSU9OX0xJTkUpIHsKKyAgICAgICAgICAgIGNvbnN0IFVWZXJzaW9uSW5mbyAmdmVyc2lvbj1wcHVjZC5nZXRVbmljb2RlVmVyc2lvbigpOworICAgICAgICAgICAgY29yZVByb3BzQnVpbGRlci0+c2V0VW5pY29kZVZlcnNpb24odmVyc2lvbik7CisgICAgICAgICAgICBiaWRpUHJvcHNCdWlsZGVyLT5zZXRVbmljb2RlVmVyc2lvbih2ZXJzaW9uKTsKKyAgICAgICAgICAgIGNhc2VQcm9wc0J1aWxkZXItPnNldFVuaWNvZGVWZXJzaW9uKHZlcnNpb24pOworICAgICAgICAgICAgbmFtZXNQcm9wc0J1aWxkZXItPnNldFVuaWNvZGVWZXJzaW9uKHZlcnNpb24pOworICAgICAgICB9IGVsc2UgaWYobGluZVR5cGU9PVByZXBhcnNlZFVDRDo6QUxHX05BTUVTX1JBTkdFX0xJTkUpIHsKKyAgICAgICAgICAgIFVDaGFyMzIgc3RhcnQsIGVuZDsKKyAgICAgICAgICAgIGlmKHBwdWNkLmdldFJhbmdlRm9yQWxnTmFtZXMoc3RhcnQsIGVuZCwgZXJyb3JDb2RlKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGU9cHB1Y2QubmV4dEZpZWxkKCk7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4PXBwdWNkLm5leHRGaWVsZCgpOyAgLy8gTlVMTCBpZiB0eXBlPT1oYW5ndWwKKyAgICAgICAgICAgICAgICBuYW1lc1Byb3BzQnVpbGRlci0+c2V0QWxnTmFtZXNSYW5nZShzdGFydCwgZW5kLCB0eXBlLCBwcmVmaXgsIGVycm9yQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYoZXJyb3JDb2RlLmlzRmFpbHVyZSgpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgImdlbnByb3BzOiBlcnJvciBwYXJzaW5nIG9yIHNldHRpbmcgdmFsdWVzIGZyb20gcHB1Y2QudHh0IGxpbmUgJWxkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIChsb25nKXBwdWNkLmdldExpbmVOdW1iZXIoKSwgZXJyb3JDb2RlLmVycm9yTmFtZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvckNvZGUucmVzZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvcmVQcm9wc0J1aWxkZXItPmJ1aWxkKGVycm9yQ29kZSk7CisgICAgYmlkaVByb3BzQnVpbGRlci0+YnVpbGQoZXJyb3JDb2RlKTsKKyAgICBjYXNlUHJvcHNCdWlsZGVyLT5idWlsZChlcnJvckNvZGUpOworICAgIG5hbWVzUHJvcHNCdWlsZGVyLT5idWlsZChlcnJvckNvZGUpOworICAgIGlmKGVycm9yQ29kZS5pc0ZhaWx1cmUoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzIGVycm9yOiBmYWlsdXJlIGZpbmFsaXppbmcgdGhlIGRhdGEgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICBlcnJvckNvZGUuZXJyb3JOYW1lKCkpOworICAgICAgICByZXR1cm4gZXJyb3JDb2RlLnJlc2V0KCk7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIGZpbGVzIHdpdGggdGhlIGdlbmVyYXRlZCBkYXRhLgorICAgIENoYXJTdHJpbmcgc291cmNlQ29tbW9uKGljdVNvdXJjZSwgZXJyb3JDb2RlKTsKKyAgICBzb3VyY2VDb21tb24uYXBwZW5kUGF0aFBhcnQoImNvbW1vbiIsIGVycm9yQ29kZSk7CisKKyAgICBDaGFyU3RyaW5nIHNvdXJjZURhdGFJbihpY3VTb3VyY2VEYXRhLCBlcnJvckNvZGUpOworICAgIHNvdXJjZURhdGFJbi5hcHBlbmRQYXRoUGFydCgiaW4iLCBlcnJvckNvZGUpOworCisgICAgVUJvb2wgd2l0aENvcHlyaWdodD1vcHRpb25zW0NPUFlSSUdIVF0uZG9lc09jY3VyOworCisgICAgcG5hbWVzQnVpbGRlci0+d3JpdGVDU291cmNlRmlsZShzb3VyY2VDb21tb24uZGF0YSgpLCBlcnJvckNvZGUpOworICAgIHBuYW1lc0J1aWxkZXItPndyaXRlQmluYXJ5RGF0YShzb3VyY2VEYXRhSW4uZGF0YSgpLCB3aXRoQ29weXJpZ2h0LCBlcnJvckNvZGUpOworICAgIGNvcmVQcm9wc0J1aWxkZXItPndyaXRlQ1NvdXJjZUZpbGUoc291cmNlQ29tbW9uLmRhdGEoKSwgZXJyb3JDb2RlKTsKKyAgICBjb3JlUHJvcHNCdWlsZGVyLT53cml0ZUJpbmFyeURhdGEoc291cmNlRGF0YUluLmRhdGEoKSwgd2l0aENvcHlyaWdodCwgZXJyb3JDb2RlKTsKKyAgICBiaWRpUHJvcHNCdWlsZGVyLT53cml0ZUNTb3VyY2VGaWxlKHNvdXJjZUNvbW1vbi5kYXRhKCksIGVycm9yQ29kZSk7CisgICAgYmlkaVByb3BzQnVpbGRlci0+d3JpdGVCaW5hcnlEYXRhKHNvdXJjZURhdGFJbi5kYXRhKCksIHdpdGhDb3B5cmlnaHQsIGVycm9yQ29kZSk7CisgICAgY2FzZVByb3BzQnVpbGRlci0+d3JpdGVDU291cmNlRmlsZShzb3VyY2VDb21tb24uZGF0YSgpLCBlcnJvckNvZGUpOworICAgIGNhc2VQcm9wc0J1aWxkZXItPndyaXRlQmluYXJ5RGF0YShzb3VyY2VEYXRhSW4uZGF0YSgpLCB3aXRoQ29weXJpZ2h0LCBlcnJvckNvZGUpOworICAgIG5hbWVzUHJvcHNCdWlsZGVyLT53cml0ZUJpbmFyeURhdGEoc291cmNlRGF0YUluLmRhdGEoKSwgd2l0aENvcHlyaWdodCwgZXJyb3JDb2RlKTsKKworICAgIHJldHVybiBlcnJvckNvZGU7Cit9CisKKy8qCisgKiBIZXksIEVtYWNzLCBwbGVhc2Ugc2V0IHRoZSBmb2xsb3dpbmc6CisgKgorICogTG9jYWwgVmFyaWFibGVzOgorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKgorICovCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMuaCBiL3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZWYwYzgKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvZ2VucHJvcHMuaApAQCAtMCwwICsxLDU2IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgZ2VucHJvcHMuaAorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgb246IDE5OTlkZWMxMworKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisqLworCisjaWZuZGVmIF9fR0VOUFJPUFNfSF9fCisjZGVmaW5lIF9fR0VOUFJPUFNfSF9fCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJwcHVjZC5oIgorI2luY2x1ZGUgInVuZXdkYXRhLmgiCisKKyNkZWZpbmUgTEVOR1RIT0YoYXJyYXkpIChpbnQzMl90KShzaXplb2YoYXJyYXkpL3NpemVvZigoYXJyYXkpWzBdKSkKKworY2xhc3MgUHJvcHNCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBQcm9wc0J1aWxkZXIoKTsKKyAgICB2aXJ0dWFsIH5Qcm9wc0J1aWxkZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VW5pY29kZVZlcnNpb24oY29uc3QgVVZlcnNpb25JbmZvIHZlcnNpb24pOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbGdOYW1lc1JhbmdlKFVDaGFyMzIgc3RhcnQsIFVDaGFyMzIgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnByZWZpeCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcHMoY29uc3QgaWN1OjpVbmlQcm9wcyAmcHJvcHMsIGNvbnN0IGljdTo6VW5pY29kZVNldCAmbmV3VmFsdWVzLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBidWlsZChVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUNTb3VyY2VGaWxlKGNvbnN0IGNoYXIgKnBhdGgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlQmluYXJ5RGF0YShjb25zdCBjaGFyICpwYXRoLCBVQm9vbCB3aXRoQ29weXJpZ2h0LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworfTsKKworY2xhc3MgUE5hbWVzQnVpbGRlciA6IHB1YmxpYyBQcm9wc0J1aWxkZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgUHJvcGVydHlOYW1lcyAqZ2V0UHJvcGVydHlOYW1lcygpID0gMDsKK307CisKK1BOYW1lc0J1aWxkZXIgKmNyZWF0ZVBOYW1lc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKK1Byb3BzQnVpbGRlciAqY3JlYXRlQ29yZVByb3BzQnVpbGRlcihVRXJyb3JDb2RlICZlcnJvckNvZGUpOworUHJvcHNCdWlsZGVyICpjcmVhdGVCaURpUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CitQcm9wc0J1aWxkZXIgKmNyZWF0ZUNhc2VQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKK1Byb3BzQnVpbGRlciAqY3JlYXRlTmFtZXNQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworLyogZ2xvYmFsIGZsYWdzICovCitleHRlcm4gVUJvb2wgYmVWZXJib3NlOworZXh0ZXJuIFVCb29sIGJlUXVpZXQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL2dlbnByb3BzLnZjcHJvaiBiL3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxYWJmMwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9nZW5wcm9wcy52Y3Byb2oKQEAgLTAsMCArMSw0MjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI5LjAwIgorCU5hbWU9ImdlbnByb3BzIgorCVByb2plY3RHVUlEPSJ7NkY3NDQ2NDgtRDE1Ri00NzhBLTkwQzYtNThFMzUzQjVEREIzfSIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0ieDY0IgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlx4ODZcUmVsZWFzZSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODZcUmVsZWFzZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IC4uXC4uXC4uXGJpbiYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW5cJChUYXJnZXRGaWxlTmFtZSkiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUeXBlTGlicmFyeU5hbWU9Ii5ceDg2XFJlbGVhc2UvZ2VucHJvcHMudGxiIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxjb21tb247Li5cdG9vbHV0aWwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIgorCQkJCVRyZWF0V0NoYXJfdEFzQnVpbHRJblR5cGU9InRydWUiCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXHg4NlxSZWxlYXNlL2dlbnByb3BzLnBjaCIKKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5ceDg2XFJlbGVhc2UvIgorCQkJCU9iamVjdEZpbGU9Ii5ceDg2XFJlbGVhc2UvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg4NlxSZWxlYXNlLyIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4ODZcUmVsZWFzZS9nZW5wcm9wcy5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXHg4NlxSZWxlYXNlL2dlbnByb3BzLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5ceDg2XERlYnVnIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4NlxEZWJ1ZyIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IC4uXC4uXC4uXGJpbiYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW5cJChUYXJnZXRGaWxlTmFtZSkiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUeXBlTGlicmFyeU5hbWU9Ii5ceDg2XERlYnVnL2dlbnByb3BzLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXGNvbW1vbjsuLlx0b29sdXRpbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0idHJ1ZSIKKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIgorCQkJCVRyZWF0V0NoYXJfdEFzQnVpbHRJblR5cGU9InRydWUiCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXHg4NlxEZWJ1Zy9nZW5wcm9wcy5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg4NlxEZWJ1Zy8iCisJCQkJT2JqZWN0RmlsZT0iLlx4ODZcRGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg4NlxEZWJ1Zy8iCisJCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4ODZcRGVidWcvZ2VucHJvcHMuZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5ceDg2XERlYnVnL2dlbnByb3BzLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCQlVc2VGQVQzMldvcmthcm91bmQ9InRydWUiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXHg2NFxSZWxlYXNlIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg2NFxSZWxlYXNlIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJjb3B5ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgLi5cLi5cLi5cYmluNjQmI3gwRDsmI3gwQTsiCisJCQkJT3V0cHV0cz0iLi5cLi5cLi5cYmluNjRcJChUYXJnZXRGaWxlTmFtZSkiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCQlUeXBlTGlicmFyeU5hbWU9Ii5ceDY0XFJlbGVhc2UvZ2VucHJvcHMudGxiIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxjb21tb247Li5cdG9vbHV0aWwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjY0O1dJTjMyO05ERUJVRztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIgorCQkJCVRyZWF0V0NoYXJfdEFzQnVpbHRJblR5cGU9InRydWUiCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXHg2NFxSZWxlYXNlL2dlbnByb3BzLnBjaCIKKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5ceDY0XFJlbGVhc2UvIgorCQkJCU9iamVjdEZpbGU9Ii5ceDY0XFJlbGVhc2UvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg2NFxSZWxlYXNlLyIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4NjRcUmVsZWFzZS9nZW5wcm9wcy5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXHg2NFxSZWxlYXNlL2dlbnByb3BzLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMTciCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXHg2NFxEZWJ1ZyIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4NjRcRGVidWciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyAuLlwuLlwuLlxiaW42NCYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW42NFwkKFRhcmdldEZpbGVOYW1lKSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlx4NjRcRGVidWcvZ2VucHJvcHMudGxiIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cY29tbW9uOy4uXHRvb2x1dGlsIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU42NDtXSU4zMjtfREVCVUc7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJ0cnVlIgorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiCisJCQkJVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZT0idHJ1ZSIKKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5ceDY0XERlYnVnL2dlbnByb3BzLnBjaCIKKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5ceDY0XERlYnVnLyIKKwkJCQlPYmplY3RGaWxlPSIuXHg2NFxEZWJ1Zy8iCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9Ii5ceDY0XERlYnVnLyIKKwkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkJQ29tcGlsZUFzPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciCisJCQkJQ3VsdHVyZT0iMTAzMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlPdXRwdXRGaWxlPSIuXHg2NFxEZWJ1Zy9nZW5wcm9wcy5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlx4NjRcRGVidWcvZ2VucHJvcHMucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkJVXNlRkFUMzJXb3JrYXJvdW5kPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPFJlZmVyZW5jZXM+CisJPC9SZWZlcmVuY2VzPgorCTxGaWxlcz4KKwkJPEZpbHRlcgorCQkJTmFtZT0iU291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJjO2NwcDtyYyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXGdlbnByb3BzLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5ccHJvcHMyLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cc3RvcmUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiCisJCQlGaWx0ZXI9ImgiCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW5wcm9wcy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisJCQk+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkY29weS5weSBiL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZGNvcHkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjA3ZjU0MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZGNvcHkucHkKQEAgLTAsMCArMSwxODIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMi40CisjIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICBmaWxlIG5hbWU6ICB1Y2Rjb3B5LnB5CisjICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyMgICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyMgICBpbmRlbnRhdGlvbjo0CisjCisjICAgY3JlYXRlZCBvbjogMjAwOWF1ZzA0CisjICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyMKKyMgQ29weSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAodWNkKSBmaWxlcyBmcm9tIGEgdHJlZQorIyBvZiBmaWxlcyBkb3dubG9hZGVkIGZyb20gZnRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy81LjIuMC8KKyMgdG8gYSBmb2xkZXIgbGlrZSBJQ1UncyBzb3VyY2UvZGF0YS91bmlkYXRhLworIyBhbmQgbW9kaWZ5IHNvbWUgb2YgdGhlIGZpbGVzIHRvIG1ha2UgdGhlbSBtb3JlIGNvbXBhY3QuCisjCisjIEludm9rZSB3aXRoIHR3byBjb21tYW5kLWxpbmUgcGFyYW1ldGVycywgZm9yIHRoZSBzb3VyY2UKKyMgYW5kIGRlc3RpbmF0aW9uIGZvbGRlcnMuCisKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworCitfc3RyaXBfcmUgPSByZS5jb21waWxlKCJeKFswLTlhLWZBLUZdKy4rPykgKiMuKiIpCitfY29kZV9wb2ludF9yZSA9IHJlLmNvbXBpbGUoIlxzKihbMC05YS1mQS1GXSspXHMqOyIpCisKK2RlZiBDb3B5QW5kU3RyaXBXaXRoT3B0aW9uYWxNZXJnZShzLCB0LCBkb19tZXJnZSk6CisgIGluX2ZpbGUgPSBvcGVuKHMsICJyIikKKyAgb3V0X2ZpbGUgPSBvcGVuKHQsICJ3IikKKyAgZmlyc3QgPSAtMSAgIyBGaXJzdCBjb2RlIHBvaW50IHdpdGggZmlyc3RfZGF0YS4KKyAgbGFzdCA9IC0xICAjIExhc3QgY29kZSBwb2ludCB3aXRoIGZpcnN0X2RhdGEuCisgIGZpcnN0X2RhdGEgPSAiIiAgIyBDb21tb24gZGF0YSBmb3IgY29kZSBwb2ludHMgW2ZpcnN0Li5sYXN0XS4KKyAgZm9yIGxpbmUgaW4gaW5fZmlsZToKKyAgICBtYXRjaCA9IF9zdHJpcF9yZS5tYXRjaChsaW5lKQorICAgIGlmIG1hdGNoOgorICAgICAgbGluZSA9IG1hdGNoLmdyb3VwKDEpCisgICAgZWxzZToKKyAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgaWYgZG9fbWVyZ2U6CisgICAgICBtYXRjaCA9IF9jb2RlX3BvaW50X3JlLm1hdGNoKGxpbmUpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgYyA9IGludChtYXRjaC5ncm91cCgxKSwgMTYpCisgICAgICAgIGRhdGEgPSBsaW5lW21hdGNoLmVuZCgpIC0gMTpdCisgICAgICBlbHNlOgorICAgICAgICBjID0gLTEKKyAgICAgICAgZGF0YSA9ICIiCisgICAgICBpZiBsYXN0ID49IDAgYW5kIChjICE9IChsYXN0ICsgMSkgb3IgZGF0YSAhPSBmaXJzdF9kYXRhKToKKyAgICAgICAgIyBvdXRwdXQgdGhlIGN1cnJlbnQgcmFuZ2UKKyAgICAgICAgaWYgZmlyc3QgPT0gbGFzdDoKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WCVzXG4iICUgKGZpcnN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WC4uJTA0WCVzXG4iICUgKGZpcnN0LCBsYXN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgZmlyc3QgPSAtMQorICAgICAgICBsYXN0ID0gLTEKKyAgICAgICAgZmlyc3RfZGF0YSA9ICIiCisgICAgICBpZiBjIDwgMDoKKyAgICAgICAgIyBubyBkYXRhIG9uIHRoaXMgbGluZSwgb3V0cHV0IGFzIGlzCisgICAgICAgIG91dF9maWxlLndyaXRlKGxpbmUpCisgICAgICAgIG91dF9maWxlLndyaXRlKCJcbiIpCisgICAgICBlbHNlOgorICAgICAgICAjIGRhdGEgb24gdGhpcyBsaW5lLCBzdG9yZSBmb3IgcG9zc2libGUgcmFuZ2UgY29tcGFjdGlvbgorICAgICAgICBpZiBsYXN0IDwgMDoKKyAgICAgICAgICAjIHNldCBhcyB0aGUgZmlyc3QgbGluZSBpbiBhIHBvc3NpYmxlIHJhbmdlCisgICAgICAgICAgZmlyc3QgPSBjCisgICAgICAgICAgbGFzdCA9IGMKKyAgICAgICAgICBmaXJzdF9kYXRhID0gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICMgbXVzdCBiZSBjID09IChsYXN0ICsgMSkgYW5kIGRhdGEgPT0gZmlyc3RfZGF0YQorICAgICAgICAgICMgYmVjYXVzZSBvZiBwcmV2aW91cyBjb25kaXRpb25zCisgICAgICAgICAgIyBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgICAgbGFzdCA9IGMKKyAgICBlbHNlOgorICAgICAgIyBPbmx5IHN0cmlwLCBkb24ndCBtZXJnZToganVzdCBvdXRwdXQgdGhlIHN0cmlwcGVkIGxpbmUuCisgICAgICBvdXRfZmlsZS53cml0ZShsaW5lKQorICAgICAgb3V0X2ZpbGUud3JpdGUoIlxuIikKKyAgaWYgZG9fbWVyZ2UgYW5kIGxhc3QgPj0gMDoKKyAgICAjIG91dHB1dCB0aGUgbGFzdCByYW5nZSBpbiB0aGUgZmlsZQorICAgIGlmIGZpcnN0ID09IGxhc3Q6CisgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WCVzXG4iICUgKGZpcnN0LCBmaXJzdF9kYXRhKSkKKyAgICBlbHNlOgorICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFguLiUwNFglc1xuIiAlIChmaXJzdCwgbGFzdCwgZmlyc3RfZGF0YSkpCisgICAgZmlyc3QgPSAtMQorICAgIGxhc3QgPSAtMQorICAgIGZpcnN0X2RhdGEgPSAiIgorICBpbl9maWxlLmNsb3NlKCkKKyAgb3V0X2ZpbGUuZmx1c2goKQorICBvdXRfZmlsZS5jbG9zZSgpCisKKworZGVmIENvcHlBbmRTdHJpcChzLCB0KToKKyAgIiIiQ29waWVzIGEgZmlsZSBhbmQgcmVtb3ZlcyBjb21tZW50cyBiZWhpbmQgZGF0YSBsaW5lcyBidXQgbm90IGluIG90aGVycy4iIiIKKyAgQ29weUFuZFN0cmlwV2l0aE9wdGlvbmFsTWVyZ2UocywgdCwgRmFsc2UpCisKKworZGVmIENvcHlBbmRTdHJpcEFuZE1lcmdlKHMsIHQpOgorICAiIiJDb3BpZXMgYW5kIHN0cmlwcyBhIGZpbGUgYW5kIG1lcmdlcyBsaW5lcy4KKworICBDb3BpZXMgYSBmaWxlLCByZW1vdmVzIGNvbW1lbnRzLCBhbmQKKyAgbWVyZ2VzIGxpbmVzIHdpdGggYWRqYWNlbnQgY29kZSBwb2ludCByYW5nZXMgYW5kIGlkZW50aWNhbCBwZXItY29kZSBwb2ludAorICBkYXRhIGxpbmVzIGludG8gb25lIGxpbmUgd2l0aCByYW5nZSBzeW50YXguCisgICIiIgorICBDb3B5QW5kU3RyaXBXaXRoT3B0aW9uYWxNZXJnZShzLCB0LCBUcnVlKQorCisKK19maWxlcyA9IHsKKyAgIyBTaW1wbHkgY29weSB0aGVzZSBmaWxlcy4KKyAgIkJpZGlNaXJyb3JpbmcudHh0Ijogc2h1dGlsLmNvcHksCisgICJCaWRpVGVzdC50eHQiOiAoc2h1dGlsLmNvcHksICJ0ZXN0ZGF0YSIpLAorICAiQmxvY2tzLnR4dCI6IHNodXRpbC5jb3B5LAorICAiQ2FzZUZvbGRpbmcudHh0Ijogc2h1dGlsLmNvcHksCisgICJEZXJpdmVkQWdlLnR4dCI6IHNodXRpbC5jb3B5LAorICAiRGVyaXZlZEJpZGlDbGFzcy50eHQiOiBzaHV0aWwuY29weSwKKyAgIkRlcml2ZWRKb2luaW5nR3JvdXAudHh0Ijogc2h1dGlsLmNvcHksCisgICJEZXJpdmVkSm9pbmluZ1R5cGUudHh0Ijogc2h1dGlsLmNvcHksCisgICJEZXJpdmVkTnVtZXJpY1ZhbHVlcy50eHQiOiBzaHV0aWwuY29weSwKKyAgIkdyYXBoZW1lQnJlYWtUZXN0LnR4dCI6IChzaHV0aWwuY29weSwgInRlc3RkYXRhIiksCisgICJMaW5lQnJlYWtUZXN0LnR4dCI6IChzaHV0aWwuY29weSwgInRlc3RkYXRhIiksCisgICJOYW1lQWxpYXNlcy50eHQiOiBzaHV0aWwuY29weSwKKyAgIk5vcm1hbGl6YXRpb25Db3JyZWN0aW9ucy50eHQiOiBzaHV0aWwuY29weSwKKyAgIlByb3BlcnR5QWxpYXNlcy50eHQiOiBzaHV0aWwuY29weSwKKyAgIlByb3BlcnR5VmFsdWVBbGlhc2VzLnR4dCI6IHNodXRpbC5jb3B5LAorICAiU2VudGVuY2VCcmVha1Rlc3QudHh0IjogKHNodXRpbC5jb3B5LCAidGVzdGRhdGEiKSwKKyAgIlNjcmlwdEV4dGVuc2lvbnMudHh0Ijogc2h1dGlsLmNvcHksCisgICJTcGVjaWFsQ2FzaW5nLnR4dCI6IHNodXRpbC5jb3B5LAorICAiVW5pY29kZURhdGEudHh0Ijogc2h1dGlsLmNvcHksCisgICJXb3JkQnJlYWtUZXN0LnR4dCI6IChzaHV0aWwuY29weSwgInRlc3RkYXRhIiksCisKKyAgIyBDb3B5IHRoZXNlIGZpbGVzIGFuZCByZW1vdmUgY29tbWVudHMgYmVoaW5kIGRhdGEgbGluZXMgYnV0IG5vdCBpbiBvdGhlcnMuCisgICJEZXJpdmVkQ29yZVByb3BlcnRpZXMudHh0IjogQ29weUFuZFN0cmlwLAorICAiRGVyaXZlZE5vcm1hbGl6YXRpb25Qcm9wcy50eHQiOiBDb3B5QW5kU3RyaXAsCisgICJHcmFwaGVtZUJyZWFrUHJvcGVydHkudHh0IjogQ29weUFuZFN0cmlwLAorICAiTm9ybWFsaXphdGlvblRlc3QudHh0IjogQ29weUFuZFN0cmlwLAorICAiUHJvcExpc3QudHh0IjogQ29weUFuZFN0cmlwLAorICAiU2NyaXB0cy50eHQiOiBDb3B5QW5kU3RyaXAsCisgICJTZW50ZW5jZUJyZWFrUHJvcGVydHkudHh0IjogQ29weUFuZFN0cmlwLAorICAiV29yZEJyZWFrUHJvcGVydHkudHh0IjogQ29weUFuZFN0cmlwLAorCisgICMgQWxzbyBtZXJnZSBsaW5lcyB3aXRoIGFkamFjZW50IGNvZGUgcG9pbnQgcmFuZ2VzLgorICAiRWFzdEFzaWFuV2lkdGgudHh0IjogQ29weUFuZFN0cmlwQW5kTWVyZ2UsCisgICJMaW5lQnJlYWsudHh0IjogQ29weUFuZFN0cmlwQW5kTWVyZ2UKK30KKworX2ZpbGVfdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoIl4oW2EtekEtWjAtOV0rKSIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1bMC05XSg/OlxcLlswLTldKSooPzpkWzAtOV0rKT8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoXFwuW2Etel0rKSQiKQorCitkZWYgbWFpbigpOgorICBzb3VyY2Vfcm9vdCA9IHN5cy5hcmd2WzFdCisgIGRlc3Rfcm9vdCA9IHN5cy5hcmd2WzJdCisgIHNvdXJjZV9maWxlcyA9IFtdCisgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNvdXJjZV9yb290KToKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgIHNvdXJjZV9maWxlcy5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsIGZpbGUpKQorICBmaWxlc19wcm9jZXNzZWQgPSBzZXQoKQorICBmb3Igc291cmNlX2ZpbGUgaW4gc291cmNlX2ZpbGVzOgorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzb3VyY2VfZmlsZSkKKyAgICBtYXRjaCA9IF9maWxlX3ZlcnNpb25fcmUubWF0Y2goYmFzZW5hbWUpCisgICAgaWYgbWF0Y2g6CisgICAgICBiYXNlbmFtZSA9IG1hdGNoLmdyb3VwKDEpICsgbWF0Y2guZ3JvdXAoMikKKyAgICAgIHByaW50IGJhc2VuYW1lCisgICAgaWYgYmFzZW5hbWUgaW4gX2ZpbGVzOgorICAgICAgaWYgYmFzZW5hbWUgaW4gZmlsZXNfcHJvY2Vzc2VkOgorICAgICAgICBwcmludCAiZHVwbGljYXRlIGZpbGUgYmFzZW5hbWUgJXMhIiAlIGJhc2VuYW1lCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgICBmaWxlc19wcm9jZXNzZWQuYWRkKGJhc2VuYW1lKQorICAgICAgYWN0aW9uID0gX2ZpbGVzW2Jhc2VuYW1lXQorICAgICAgaWYgaXNpbnN0YW5jZShhY3Rpb24sIHR1cGxlKToKKyAgICAgICAgZGVzdF9mb2xkZXIgPSBhY3Rpb25bMV0KKyAgICAgICAgYWN0aW9uID0gYWN0aW9uWzBdCisgICAgICBlbHNlOgorICAgICAgICBkZXN0X2ZvbGRlciA9ICJ1bmlkYXRhIgorICAgICAgZGVzdF9wYXRoID0gb3MucGF0aC5qb2luKGRlc3Rfcm9vdCwgZGVzdF9mb2xkZXIpCisgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdF9wYXRoKTogb3MubWFrZWRpcnMoZGVzdF9wYXRoKQorICAgICAgZGVzdF9maWxlID0gb3MucGF0aC5qb2luKGRlc3RfcGF0aCwgYmFzZW5hbWUpCisgICAgICBhY3Rpb24oc291cmNlX2ZpbGUsIGRlc3RfZmlsZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICBtYWluKCkKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW5wcm9wcy9taXNjL3VjZG1lcmdlLmMgYi91bmljb2RlL2MvZ2VucHJvcHMvbWlzYy91Y2RtZXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZjY4NTAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VucHJvcHMvbWlzYy91Y2RtZXJnZS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIHVjZG1lcmdlLmMKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAyMDAzZmViMjAKKyogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKgorKiAgIFNpbXBsZSB0b29sIGZvciBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSBmaWxlcyB3aXRoIHNlbWljb2xvbi1kZWxpbWl0ZWQgZmllbGRzLgorKiAgIE1lcmdlcyBhZGphY2VudCwgaWRlbnRpY2FsIHBlci1jb2RlIHBvaW50IGRhdGEgbGluZXMgaW50byBvbmUgbGluZSB3aXRoIHJhbmdlIHN5bnRheC4KKyoKKyogICBUbyBjb21waWxlLCBqdXN0IGNhbGwgYSBDIGNvbXBpbGVyL2xpbmtlciB3aXRoIHRoaXMgc291cmNlIGZpbGUuCisqICAgT24gV2luZG93czogY2wgdWNkbWVyZ2UuYworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NraXBXaGl0ZXNwYWNlKGNvbnN0IGNoYXIgKnMpIHsKKyAgICB3aGlsZSgqcz09JyAnIHx8ICpzPT0nXHQnKSB7CisgICAgICAgICsrczsKKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CisKKy8qIHJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIHBvc2l0aW9uIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGRhdGEgKi8KK3N0YXRpYyBjaGFyICoKK2VuZE9mRGF0YShjb25zdCBjaGFyICpsKSB7CisgICAgY2hhciAqZW5kOworICAgIGNoYXIgYzsKKworICAgIGVuZD1zdHJjaHIobCwgJyMnKTsKKyAgICBpZihlbmQhPU5VTEwpIHsKKyAgICAgICAgLyogaWdub3JlIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBjb21tZW50ICovCisgICAgICAgIHdoaWxlKGwhPWVuZCAmJiAoKGM9KihlbmQtMSkpPT0nICcgfHwgYz09J1x0JykpIHsKKyAgICAgICAgICAgIC0tZW5kOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5kPXN0cmNocihsLCAwKTsKKyAgICB9CisgICAgcmV0dXJuIGVuZDsKK30KKworc3RhdGljIGludAorc2FtZURhdGEoY29uc3QgY2hhciAqbDEsIGNvbnN0IGNoYXIgKmwyKSB7CisgICAgY2hhciAqZW5kMSwgKmVuZDI7CisgICAgaW50IGxlbmd0aDsKKworICAgIC8qIGZpbmQgdGhlIGZpcnN0IHNlbWljb2xvbiBpbiBlYWNoIGxpbmUgLSB0aGVyZSBtdXN0IGJlIG9uZSAqLworICAgIGwxPXN0cmNocihsMSwgJzsnKSsxOworICAgIGwyPXN0cmNocihsMiwgJzsnKSsxOworCisgICAgLyogZmluZCB0aGUgZW5kIG9mIGRhdGE6IGVuZCBvZiBzdHJpbmcgb3Igc3RhcnQgb2YgY29tbWVudCAqLworICAgIGVuZDE9ZW5kT2ZEYXRhKGwxKTsKKyAgICBlbmQyPWVuZE9mRGF0YShsMik7CisKKyAgICAvKiBjb21wYXJlIHRoZSBsaW5lIGRhdGEgcG9ydGlvbnMgKi8KKyAgICBsZW5ndGg9ZW5kMS1sMTsKKyAgICByZXR1cm4gbGVuZ3RoPT0oZW5kMi1sMikgJiYgMD09bWVtY21wKGwxLCBsMiwgbGVuZ3RoKTsKK30KKworZXh0ZXJuIGludAorbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKSB7CisgICAgc3RhdGljIGNoYXIgbGluZVsyMDAwXSwgZmlyc3RMaW5lWzIwMDBdLCBsYXN0TGluZVsyMDAwXTsKKyAgICBjaGFyICplbmQ7CisgICAgbG9uZyBmaXJzdCwgbGFzdCwgYzsKKyAgICBpbnQgZmluaXNoZWQ7CisKKyAgICBmaXJzdD1sYXN0PS0xOworICAgIGZpbmlzaGVkPTA7CisKKyAgICBmb3IoOzspIHsKKyAgICAgICAgaWYoZ2V0cyhsaW5lKSE9TlVMTCkgeworICAgICAgICAgICAgLyogcGFyc2UgdGhlIGluaXRpYWwgY29kZSBwb2ludCwgaWYgYW55ICovCisgICAgICAgICAgICBjPXN0cnRvbChsaW5lLCAmZW5kLCAxNik7CisgICAgICAgICAgICBpZihlbmQhPWxpbmUgJiYgKnNraXBXaGl0ZXNwYWNlKGVuZCk9PSc7JykgeworICAgICAgICAgICAgICAgIC8qIHNpbmdsZSBjb2RlIHBvaW50IGZvbGxvd2VkIGJ5IHNlbWljb2xvbiBhbmQgZGF0YSwga2VlcCBjICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGM9LTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5lWzBdPTA7CisgICAgICAgICAgICBjPS0xOworICAgICAgICAgICAgZmluaXNoZWQ9MTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGxhc3Q+PTAgJiYgKGMhPShsYXN0KzEpIHx8ICFzYW1lRGF0YShmaXJzdExpbmUsIGxpbmUpKSkgeworICAgICAgICAgICAgLyogb3V0cHV0IHRoZSBjdXJyZW50IHJhbmdlICovCisgICAgICAgICAgICBpZihmaXJzdD09bGFzdCkgeworICAgICAgICAgICAgICAgIC8qIHRoZXJlIHdhcyBubyByYW5nZSwganVzdCBvdXRwdXQgdGhlIG9uZSBsaW5lIHdlIGZvdW5kICovCisgICAgICAgICAgICAgICAgcHV0cyhmaXJzdExpbmUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiB0aGVyZSB3YXMgYSByZWFsIHJhbmdlLCBtZXJnZSB0aGVpciBsaW5lcyAqLworICAgICAgICAgICAgICAgIGVuZD1zdHJjaHIobGFzdExpbmUsICcjJyk7CisgICAgICAgICAgICAgICAgaWYoZW5kPT1OVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNvbW1lbnQgaW4gc2Vjb25kIGxpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlMDRsWC4uJTA0bFglc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCwgbGFzdCwgICAgICAgICAgICAvKiBjb2RlIHBvaW50IHJhbmdlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2hyKGZpcnN0TGluZSwgJzsnKSk7LyogZmlyc3QgbGluZSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCA7ICovCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmNocihmaXJzdExpbmUsICcjJyk9PU5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogbm8gY29tbWVudCBpbiBmaXJzdCBsaW5lICovCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTA0bFguLiUwNGxYJXMlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCwgbGFzdCwgICAgICAgICAgICAvKiBjb2RlIHBvaW50IHJhbmdlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2hyKGZpcnN0TGluZSwgJzsnKSwgLyogZmlyc3QgbGluZSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCA7ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kKTsgICAgICAgICAgICAgICAgICAgLyogY29tbWVudCBmcm9tIHNlY29uZCBsaW5lICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2UgY29tbWVudHMgZnJvbSBib3RoIGxpbmVzICovCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTA0bFguLiUwNGxYJXMuLiVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LCBsYXN0LCAgICAgICAgICAgIC8qIGNvZGUgcG9pbnQgcmFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjaHIoZmlyc3RMaW5lLCAnOycpLCAvKiBmaXJzdCBsaW5lIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IDsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwV2hpdGVzcGFjZShlbmQrMSkpOyAvKiBjb21tZW50IGZyb20gc2Vjb25kIGxpbmUsIGFmdGVyICMgYW5kIHNwYWNlcyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpcnN0PWxhc3Q9LTE7CisgICAgICAgIH0KKworICAgICAgICBpZihjPDApIHsKKyAgICAgICAgICAgIGlmKGZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIG5vIGRhdGEgb24gdGhpcyBsaW5lLCBvdXRwdXQgYXMgaXMgKi8KKyAgICAgICAgICAgIHB1dHMobGluZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBkYXRhIG9uIHRoaXMgbGluZSwgc3RvcmUgZm9yIHBvc3NpYmxlIHJhbmdlIGNvbXBhY3Rpb24gKi8KKyAgICAgICAgICAgIGlmKGxhc3Q8MCkgeworICAgICAgICAgICAgICAgIC8qIHNldCBhcyB0aGUgZmlyc3QgbGluZSBpbiBhIHBvc3NpYmxlIHJhbmdlICovCisgICAgICAgICAgICAgICAgZmlyc3Q9bGFzdD1jOworICAgICAgICAgICAgICAgIHN0cmNweShmaXJzdExpbmUsIGxpbmUpOworICAgICAgICAgICAgICAgIGxhc3RMaW5lWzBdPTA7CisgICAgICAgICAgICB9IGVsc2UgLyogbXVzdCBiZSBjPT0obGFzdCsxKSAmJiBzYW1lRGF0YSgpIGJlY2F1c2Ugb2YgcHJldmlvdXMgY29uZGl0aW9ucyAqLyB7CisgICAgICAgICAgICAgICAgLyogY29udGludWUgd2l0aCB0aGUgY3VycmVudCByYW5nZSAqLworICAgICAgICAgICAgICAgIGxhc3Q9YzsKKyAgICAgICAgICAgICAgICBzdHJjcHkobGFzdExpbmUsIGxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvbWlzYy91Y2RzdHJpcC5jIGIvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkc3RyaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2E4Njc2Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkc3RyaXAuYwpAQCAtMCwwICsxLDUzIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAwMy0yMDEzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgdWNkc3RyaXAuYworKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgb246IDIwMDNmZWIyMAorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisqCisqICAgU2ltcGxlIHRvb2wgZm9yIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGZpbGVzIHdpdGggc2VtaWNvbG9uLWRlbGltaXRlZCBmaWVsZHMuCisqICAgUmVtb3ZlcyBjb21tZW50cyBiZWhpbmQgZGF0YSBsaW5lcyBidXQgbm90IGluIG90aGVycy4KKyoKKyogICBUbyBjb21waWxlLCBqdXN0IGNhbGwgYSBDIGNvbXBpbGVyL2xpbmtlciB3aXRoIHRoaXMgc291cmNlIGZpbGUuCisqICAgT24gV2luZG93czogY2wgdWNkc3RyaXAuYworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2V4dGVybiBpbnQKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgeworICAgIHN0YXRpYyBjaGFyIGxpbmVbMjAwMF07CisKKyAgICAvKgorICAgICAqIENhcmVmdWw6IERvIG5vdCBzdHJpcCBhIGNvbW1lbnQgcmlnaHQgYWZ0ZXIgdGhlCisgICAgICogVVRGLTggc2lnbmF0dXJlIGJ5dGUgc2VxdWVuY2UgRUYgQkIgQkYgKFUrRkVGRiAiQk9NIikKKyAgICAgKiB3aGljaCBjYW4gb2NjdXIgb24gdGhlIGZpcnN0IGxpbmUgb2YgYSBVVEYtOCB0ZXh0IGZpbGUuCisgICAgICovCisgICAgd2hpbGUoZ2V0cyhsaW5lKSE9TlVMTCkgeworICAgICAgICBjaGFyICplbmQ9c3RycmNocihsaW5lLCAnIycpOworICAgICAgICBjaGFyIGM7CisgICAgICAgIC8qCisgICAgICAgICAqIEFzc3VtZSB0aGF0IGEgZGF0YSBsaW5lIGNvbW1lbnQgaXMgcHJlY2VkZWQgYnkgc29tZSB3aGl0ZSBzcGFjZS4KKyAgICAgICAgICogVGhpcyBhbHNvIHByb3RlY3RzIGRhdGEgbGlrZSAnIycgaW4gVUNBX1J1bGVzLnR4dC4KKyAgICAgICAgICovCisgICAgICAgIGlmKGVuZCE9TlVMTCAmJiBlbmQhPWxpbmUgJiYgKChjPSooZW5kLTEpKT09JyAnIHx8IGM9PSdcdCcpKSB7CisgICAgICAgICAgICAvKiBpZ25vcmUgd2hpdGVzcGFjZSBiZWZvcmUgdGhlIGNvbW1lbnQgKi8KKyAgICAgICAgICAgIHdoaWxlKGVuZCE9bGluZSAmJiAoKGM9KihlbmQtMSkpPT0nICcgfHwgYz09J1x0JykpIHsKKyAgICAgICAgICAgICAgICAtLWVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICplbmQ9MDsKKyAgICAgICAgfQorICAgICAgICBwdXRzKGxpbmUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkc3RyaXAucGwgYi91bmljb2RlL2MvZ2VucHJvcHMvbWlzYy91Y2RzdHJpcC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTA5NzcwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL21pc2MvdWNkc3RyaXAucGwKQEAgLTAsMCArMSw3IEBACisjIS91c3IvbGliL3BlcmwgLXAKKyMgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBTaW1wbGUgdG9vbCBmb3IgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgZmlsZXMgd2l0aCBzZW1pY29sb24tZGVsaW1pdGVkIGZpZWxkcy4KKyMgUmVtb3ZlcyBjb21tZW50cyBiZWhpbmQgZGF0YSBsaW5lcyBidXQgbm90IGluIG90aGVycy4KKyMgVGhlIFBlcmwgb3B0aW9uIC1wIGFib3ZlIHJ1bnMgYSB3aGlsZSg8PikgbG9vcCBhbmQgcHJpbnRzIHRoZSBleHByZXNzaW9uIG91dHB1dC4KK3MvXihbMC05YS1mQS1GXSsuKz8pICojLiovXDEvOwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL25hbWVzcHJvcHNidWlsZGVyLmNwcCBiL3VuaWNvZGUvYy9nZW5wcm9wcy9uYW1lc3Byb3BzYnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2NThlZgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9uYW1lc3Byb3BzYnVpbGRlci5jcHAKQEAgLTAsMCArMSwxMTM3IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgbmFtZXNwcm9wc2J1aWxkZXIuY3BwICh3YXMgZ2VubmFtZXMvZ2VubmFtZXMuYykKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAxOTk5c2VwMzAKKyogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKgorKiAgIFRoaXMgYnVpbGRlciByZWFkcyBVbmljb2RlIGNoYXJhY3RlciBuYW1lcyBhbmQgYWxpYXNlcywKKyogICB0b2tlbml6ZXMgYW5kIGNvbXByZXNzZXMgdGhlbSwgYW5kIGJ1aWxkcworKiAgIGNvbXBhY3QgYmluYXJ5IHRhYmxlcyBmb3IgcmFuZG9tLWFjY2VzcyBsb29rdXAKKyogICBpbiBhIHVfY2hhck5hbWUoKSBBUEkgZnVuY3Rpb24uCisqCisqIHVuYW1lcy5pY3UgZmlsZSBmb3JtYXQgKGFmdGVyIFVEYXRhSW5mbyBoZWFkZXIgZXRjLiAtIHNlZSB1ZGF0YS5jKQorKiAoYWxsIGRhdGEgaXMgc3RhdGljIGNvbnN0KQorKgorKiBVRGF0YUluZm8gZmllbGRzOgorKiAgIGRhdGFGb3JtYXQgInVuYW0iCisqICAgZm9ybWF0VmVyc2lvbiAxLjAKKyogICBkYXRhVmVyc2lvbiA9IFVuaWNvZGUgdmVyc2lvbiBmcm9tIC11IG9yIC0tdW5pY29kZSBjb21tYW5kIGxpbmUgb3B0aW9uLCBkZWZhdWx0cyB0byAzLjAuMAorKgorKiAtLSBkYXRhLWJhc2VkIG5hbWVzCisqIHVpbnQzMl90IHRva2VuU3RyaW5nT2Zmc2V0LAorKiAgICAgICAgICBncm91cHNPZmZzZXQsCisqICAgICAgICAgIGdyb3VwU3RyaW5nT2Zmc2V0LAorKiAgICAgICAgICBhbGdOYW1lc09mZnNldDsKKyoKKyogdWludDE2X3QgdG9rZW5Db3VudDsKKyogdWludDE2X3QgdG9rZW5UYWJsZVt0b2tlbkNvdW50XTsKKyoKKyogY2hhciAgICAgdG9rZW5TdHJpbmdzW107IC0tIHBhZGRlZCB0byBldmVuIGNvdW50CisqCisqIC0tIHN0cmluZ3MgKGdyb3VwU3RyaW5ncykgYXJlIHRva2VuaXplZCBhcyBmb2xsb3dzOgorKiAgIGZvciBlYWNoIGNoYXJhY3RlciBjCisqICAgICAgIGlmKGM+PXRva2VuQ291bnQpIHdyaXRlIHRoYXQgY2hhcmFjdGVyIGMgZGlyZWN0bHkKKyogICBlbHNlCisqICAgICAgIHRva2VuPXRva2VuVGFibGVbY107CisqICAgICAgIGlmKHRva2VuPT0weGZmZmUpIC0tIGxlYWQgYnl0ZSBvZiBkb3VibGUtYnl0ZSB0b2tlbgorKiAgICAgICAgICAgdG9rZW49dG9rZW5UYWJsZVtjPDw4fG5leHQgY2hhcmFjdGVyXTsKKyogICAgICAgaWYodG9rZW49PS0xKQorKiAgICAgICAgICAgd3JpdGUgYyBkaXJlY3RseQorKiAgICAgICBlbHNlCisqICAgICAgICAgICB0b2tlblN0cmluZz10b2tlblN0cmluZ3MrdG9rZW47ICh0b2tlblN0cmluZ3M9c3RhcnQgb2YgbmFtZXMgZGF0YSArIHRva2VuU3RyaW5nT2Zmc2V0OykKKyogICAgICAgICAgIGFwcGVuZCB6ZXJvLXRlcm1pbmF0ZWQgdG9rZW5TdHJpbmc7CisqCisqICAgIERpZmZlcmVudCBzdHJpbmdzIGZvciBhIGNvZGUgcG9pbnQgLSBub3JtYWwgbmFtZSwgMS4wIG5hbWUsIGFuZCBJU08gY29tbWVudCAtCisqICAgIGFyZSBzZXBhcmF0ZWQgYnkgJzsnLgorKgorKiB1aW50MTZfdCBncm91cENvdW50OworKiBzdHJ1Y3QgeworKiAgIHVpbnQxNl90IGdyb3VwTVNCOyAtLSBmb3IgYSBncm91cCBvZiAzMiBjaGFyYWN0ZXIgbmFtZXMgc3RvcmVkLCB0aGlzIGlzIGNvZGUgcG9pbnQ+PjUKKyogICB1aW50MTZfdCBvZmZzZXRIaWdoOyAtLSBncm91cCBzdHJpbmdzIGFyZSBhdCBzdGFydCBvZiBuYW1lcyBkYXRhICsgZ3JvdXBTdHJpbmdzT2Zmc2V0ICsgdGhpcyAzMiBiaXQtb2Zmc2V0CisqICAgdWludDE2X3Qgb2Zmc2V0TG93OworKiB9IGdyb3VwVGFibGVbZ3JvdXBDb3VudF07CisqCisqIGNoYXIgICAgIGdyb3VwU3RyaW5nc1tdOyAtLSBwYWRkZWQgdG8gNC1jb3VudAorKgorKiAtLSBUaGUgYWN0dWFsLCB0b2tlbml6ZWQgZ3JvdXAgc3RyaW5ncyBhcmUgbm90IHplcm8tdGVybWluYXRlZCBiZWNhdXNlCisqICAgdGhhdCB3b3VsZCB0YWtlIHVwIHRvbyBtdWNoIHNwYWNlLgorKiAgIEluc3RlYWQsIHRoZXkgYXJlIHByZWNlZWRlZCBieSB0aGVpciBsZW5ndGgsIHdyaXR0ZW4gaW4gYSB2YXJpYWJsZS1sZW5ndGggc2VxdWVuY2U6CisqICAgRm9yIGVhY2ggb2YgdGhlIDMyIGdyb3VwIHN0cmluZ3MsIG9uZSBvciB0d28gbmliYmxlcyBhcmUgc3RvcmVkIGZvciBpdHMgbGVuZ3RoLgorKiAgIE5pYmJsZXMgKDQtYml0IHZhbHVlcywgaGFsZi1ieXRlcykgYXJlIHJlYWQgTVNCIGZpcnN0LgorKiAgIEEgbmliYmxlIHdpdGggYSB2YWx1ZSBvZiAwLi4xMSBkaXJlY3RseSBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZSBzdHJpbmcuCisqICAgQSBuaWJibGUgbiB3aXRoIGEgdmFsdWUgb2YgMTIuLjE1IGlzIGEgbGVhZCBuaWJibGUgYW5kIGZvcm1zIGEgdmFsdWUgd2l0aCB0aGUgZm9sbG93aW5nIG5pYmJsZSBtCisqICAgYnkgKCgobi0xMik8PDQpfG0pKzEyLCByZWFjaGluZyB2YWx1ZXMgb2YgMTIuLjc1LgorKiAgIFRoZXNlIGxlbmd0aHMgYXJlIHNlcXVlbnRpYWxseSBmb3IgZWFjaCB0b2tlbml6ZWQgc3RyaW5nLCBub3QgZm9yIHRoZSBkZS10b2tlbml6ZWQgcmVzdWx0LgorKiAgIEZvciB0aGUgZGUtdG9rZW5pemluZywgc2VlIHRva2VuIGRlc2NyaXB0aW9uIGFib3ZlOyB0aGUgc3RyaW5ncyBpbW1lZGlhdGVseSBmb2xsb3cgdGhlCisqICAgMzIgbGVuZ3Rocy4KKyoKKyogLS0gYWxnb3JpdGhtaWMgbmFtZXMKKyoKKyogdHlwZWRlZiBzdHJ1Y3QgQWxnb3JpdGhtaWNSYW5nZSB7CisqICAgICB1aW50MzJfdCByYW5nZVN0YXJ0LCByYW5nZUVuZDsKKyogICAgIHVpbnQ4X3QgYWxnb3JpdGhtVHlwZSwgYWxnb3JpdGhtVmFyaWFudDsKKyogICAgIHVpbnQxNl90IHJhbmdlU2l6ZTsKKyogfSBBbGdvcml0aG1pY1JhbmdlOworKgorKiB1aW50MzJfdCBhbGdSYW5nZXNDb3VudDsgLS0gbnVtYmVyIG9mIGRhdGEgYmxvY2tzIGZvciByYW5nZXMgb2YKKyogICAgICAgICAgICAgICBhbGdvcml0aG1pYyBuYW1lcyAoVW5pY29kZSAzLjAuMDogMywgaGFyZGNvZGVkIGluIGdlbm5hbWVzKQorKgorKiBzdHJ1Y3QgeworKiAgICAgQWxnb3JpdGhtaWNSYW5nZSBhbGdSYW5nZTsKKyogICAgIHVpbnQ4X3QgYWxnUmFuZ2VEYXRhW107IC0tIHBhZGRlZCB0byA0LWNvdW50IGV4Y2VwdCBpbiBsYXN0IHJhbmdlCisqIH0gYWxnUmFuZ2VzW2FsZ05hbWVzQ291bnRdOworKiAtLSBub3QgYSByZWFsIGFycmF5IGJlY2F1c2UgZWFjaCBwYXJ0IGhhcyBhIGRpZmZlcmVudCBzaXplCisqICAgIG9mIGFsZ1JhbmdlLnJhbmdlU2l6ZSAoaW5jbHVkaW5nIEFsZ29yaXRobWljUmFuZ2UpCisqCisqIC0tIGFsZ29yaXRobWljIHJhbmdlIHR5cGVzOgorKgorKiAwIE5hbWVzIGFyZSBmb3JtZWQgZnJvbSBhIHN0cmluZyBwcmVmaXggdGhhdCBpcyBzdG9yZWQgaW4KKyogICB0aGUgYWxnUmFuZ2VEYXRhICh6ZXJvLXRlcm1pbmF0ZWQpLCBmb2xsb3dlZCBieSB0aGUgVW5pY29kZSBjb2RlIHBvaW50CisqICAgb2YgdGhlIGNoYXJhY3RlciBpbiBoZXhhZGVjaW1hbCBkaWdpdHM7CisqICAgYWxnUmFuZ2UuYWxnb3JpdGhtVmFyaWFudCBkaWdpdHMgYXJlIHdyaXR0ZW4KKyoKKyogMSBOYW1lcyBhcmUgZm9ybWVkIGJ5IGNhbGN1bGF0aW5nIG1vZHVsby1mYWN0b3JzIG9mIHRoZSBjb2RlIHBvaW50IHZhbHVlIGFzIGZvbGxvd3M6CisqICAgYWxnUmFuZ2UuYWxnb3JpdGhtVmFyaWFudCBpcyB0aGUgY291bnQgb2YgbW9kdWxvIGZhY3RvcnMKKyogICBhbGdSYW5nZURhdGEgY29udGFpbnMKKyogICAgICAgdWludDE2X3QgZmFjdG9yc1thbGdSYW5nZS5hbGdvcml0aG1WYXJpYW50XTsKKyogICAgICAgY2hhciBzdHJpbmdzW107CisqICAgdGhlIGZpcnN0IHplcm8tdGVybWluYXRlZCBzdHJpbmcgaXMgd3JpdHRlbiBhcyB0aGUgcHJlZml4OyB0aGVuOgorKgorKiAgIFRoZSByYW5nZVN0YXJ0IGlzIHN1YnRyYWN0ZWQ7IHdpdGggdGhlIGRpZmZlcmVuY2UsIGhlcmUgImNvZGUiOgorKiAgIGZvcihpPWFsZ1JhbmdlLmFsZ29yaXRobVZhcmlhbnQtMSB0byAwIHN0ZXAgLTEpCisqICAgICAgIGluZGV4W2ldPWNvZGUlZmFjdG9yW2ldOworKiAgICAgICBjb2RlLz1mYWN0b3JbaV07CisqCisqICAgVGhlIHN0cmluZ3MgYWZ0ZXIgdGhlIHByZWZpeCBhcmUgc2hvcnQgcGllY2VzIHRoYXQgYXJlIHRoZW4gYXBwZW5kZWQgdG8gdGhlIHJlc3VsdAorKiAgIGFjY29yZGluZyB0byBpbmRleFswLi5hbGdSYW5nZS5hbGdvcml0aG1WYXJpYW50LTFdLgorKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3B1dGlsLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGF0YS5oIgorI2luY2x1ZGUgImNoYXJzdHIuaCIKKyNpbmNsdWRlICJjbWVtb3J5LmgiCisjaW5jbHVkZSAiY3N0cmluZy5oIgorI2luY2x1ZGUgImdlbnByb3BzLmgiCisjaW5jbHVkZSAicHB1Y2QuaCIKKyNpbmNsdWRlICJ1YXJyc29ydC5oIgorI2luY2x1ZGUgInVhc3NlcnQuaCIKKyNpbmNsdWRlICJ1bmV3ZGF0YS5oIgorI2luY2x1ZGUgInVvcHRpb25zLmgiCisKKyNkZWZpbmUgU1RSSU5HX1NUT1JFX1NJWkUgMTAwMDAwMAorI2RlZmluZSBHUk9VUF9TVE9SRV9TSVpFIDUwMDAKKworI2RlZmluZSBHUk9VUF9TSElGVCA1CisjZGVmaW5lIExJTkVTX1BFUl9HUk9VUCAoMVVMPDxHUk9VUF9TSElGVCkKKyNkZWZpbmUgR1JPVVBfTUFTSyAoTElORVNfUEVSX0dST1VQLTEpCisKKyNkZWZpbmUgTUFYX0xJTkVfQ09VTlQgNTAwMDAKKyNkZWZpbmUgTUFYX1dPUkRfQ09VTlQgMjAwMDAKKyNkZWZpbmUgTUFYX0dST1VQX0NPVU5UIDUwMDAKKworI2RlZmluZSBOQU1FX1NFUEFSQVRPUl9DSEFSICc7JworCisvKiBnZW5lcmF0b3IgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitVX05BTUVTUEFDRV9VU0UKKworLyogVURhdGFJbmZvIGNmLiB1ZGF0YS5oICovCitzdGF0aWMgVURhdGFJbmZvIGRhdGFJbmZvPXsKKyAgICBzaXplb2YoVURhdGFJbmZvKSwKKyAgICAwLAorCisgICAgVV9JU19CSUdfRU5ESUFOLAorICAgIFVfQ0hBUlNFVF9GQU1JTFksCisgICAgc2l6ZW9mKFVDaGFyKSwKKyAgICAwLAorCisgICAgezB4NzUsIDB4NmUsIDB4NjEsIDB4NmR9LCAgICAgLyogZGF0YUZvcm1hdD0idW5hbSIgKi8KKyAgICB7MSwgMCwgMCwgMH0sICAgICAgICAgICAgICAgICAvKiBmb3JtYXRWZXJzaW9uICovCisgICAgezMsIDAsIDAsIDB9ICAgICAgICAgICAgICAgICAgLyogZGF0YVZlcnNpb24gKi8KK307CisKK3N0YXRpYyB1aW50OF90IHN0cmluZ1N0b3JlW1NUUklOR19TVE9SRV9TSVpFXSwKKyAgICAgICAgICAgICAgIGdyb3VwU3RvcmVbR1JPVVBfU1RPUkVfU0laRV0sCisgICAgICAgICAgICAgICBsaW5lTGVuZ3Roc1tMSU5FU19QRVJfR1JPVVBdOworCitzdGF0aWMgdWludDMyX3QgbGluZVRvcD0wLCBncm91cEJvdHRvbSwgd29yZEJvdHRvbT1TVFJJTkdfU1RPUkVfU0laRSwgbGluZUxlbmd0aHNUb3A7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50MzJfdCBjb2RlOworICAgIGludDE2X3QgbGVuZ3RoOworICAgIHVpbnQ4X3QgKnM7Cit9IExpbmU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQzMl90IHdlaWdodDsgLyogLShjb3N0IGZvciB0b2tlbikgKyAobnVtYmVyIG9mIG9jY3VyZW5jZXMpICogKGxlbmd0aC0xKSAqLworICAgIGludDE2X3QgY291bnQ7CisgICAgaW50MTZfdCBsZW5ndGg7CisgICAgdWludDhfdCAqczsKK30gV29yZDsKKworc3RhdGljIExpbmUgbGluZXNbTUFYX0xJTkVfQ09VTlRdOworc3RhdGljIFdvcmQgd29yZHNbTUFYX1dPUkRfQ09VTlRdOworCitzdGF0aWMgdWludDMyX3QgbGluZUNvdW50PTAsIHdvcmRDb3VudD0wOworCitzdGF0aWMgaW50MTZfdCBsZWFkQnl0ZUNvdW50OworCisjZGVmaW5lIExFQURCWVRFX0xJTUlUIDE2CisKK3N0YXRpYyBpbnQxNl90IHRva2Vuc1tMRUFEQllURV9MSU1JVCoyNTZdOworc3RhdGljIHVpbnQzMl90IHRva2VuQ291bnQ7CisKKy8qIHRoZSBzdHJ1Y3R1cmUgZm9yIGFsZ29yaXRobWljIG5hbWVzIG5lZWRzIHRvIGJlIDQtYWxpZ25lZCAqLworc3RydWN0IEFsZ29yaXRobWljUmFuZ2UgeworICAgIFVDaGFyMzIgc3RhcnQsIGVuZDsKKyAgICB1aW50OF90IHR5cGUsIHZhcmlhbnQ7CisgICAgdWludDE2X3Qgc2l6ZTsKK307CisKK2NsYXNzIE5hbWVzUHJvcHNCdWlsZGVyIDogcHVibGljIFByb3BzQnVpbGRlciB7CitwdWJsaWM6CisgICAgTmFtZXNQcm9wc0J1aWxkZXIoVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIH5OYW1lc1Byb3BzQnVpbGRlcigpOworCisgICAgdmlydHVhbCB2b2lkIHNldFVuaWNvZGVWZXJzaW9uKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcHMoY29uc3QgVW5pUHJvcHMgJiwgY29uc3QgVW5pY29kZVNldCAmbmV3VmFsdWVzLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCBidWlsZChVRXJyb3JDb2RlICZlcnJvckNvZGUpOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJpbmFyeURhdGEoY29uc3QgY2hhciAqcGF0aCwgVUJvb2wgd2l0aENvcHlyaWdodCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWxnTmFtZXNSYW5nZShVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpwcmVmaXgsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKKyAgICBDaGFyU3RyaW5nIGFsZ1JhbmdlczsKKyAgICBpbnQzMl90IGNvdW50QWxnUmFuZ2VzOworfTsKKworTmFtZXNQcm9wc0J1aWxkZXI6Ok5hbWVzUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSkKKyAgICAgICAgOiBjb3VudEFsZ1JhbmdlcygwKSB7CisgICAgZm9yKGludCBpPTA7IGk8MjU2OyArK2kpIHsKKyAgICAgICAgdG9rZW5zW2ldPTA7CisgICAgfQorfQorCitOYW1lc1Byb3BzQnVpbGRlcjo6fk5hbWVzUHJvcHNCdWlsZGVyKCkgeworfQorCit2b2lkCitOYW1lc1Byb3BzQnVpbGRlcjo6c2V0VW5pY29kZVZlcnNpb24oY29uc3QgVVZlcnNpb25JbmZvIHZlcnNpb24pIHsKKyAgICB1cHJ2X21lbWNweShkYXRhSW5mby5kYXRhVmVyc2lvbiwgdmVyc2lvbiwgNCk7Cit9CisKKy8qIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkCitwYXJzZU5hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50MTZfdCBsZW5ndGgpOworCitzdGF0aWMgaW50MTZfdAorc2tpcE5vaXNlKGNvbnN0IGNoYXIgKmxpbmUsIGludDE2X3Qgc3RhcnQsIGludDE2X3QgbGltaXQpOworCitzdGF0aWMgaW50MTZfdAorZ2V0V29yZChjb25zdCBjaGFyICpsaW5lLCBpbnQxNl90IHN0YXJ0LCBpbnQxNl90IGxpbWl0KTsKKworc3RhdGljIHZvaWQKK2NvbXByZXNzKFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKK3N0YXRpYyB2b2lkCitjb21wcmVzc0xpbmVzKHZvaWQpOworCitzdGF0aWMgaW50MTZfdAorY29tcHJlc3NMaW5lKHVpbnQ4X3QgKnMsIGludDE2X3QgbGVuZ3RoLCBpbnQxNl90ICpwR3JvdXBUb3ApOworCitzdGF0aWMgaW50MzJfdAorY29tcGFyZVdvcmRzKGNvbnN0IHZvaWQgKmNvbnRleHQsIGNvbnN0IHZvaWQgKndvcmQxLCBjb25zdCB2b2lkICp3b3JkMik7CisKK3N0YXRpYyBpbnQxNl90CitmaW5kVG9rZW4odWludDhfdCAqcywgaW50MTZfdCBsZW5ndGgpOworCitzdGF0aWMgV29yZCAqCitmaW5kV29yZChjb25zdCBjaGFyICpzLCBpbnQxNl90IGxlbmd0aCk7CisKK3N0YXRpYyBXb3JkICoKK2FkZFdvcmQoY29uc3QgY2hhciAqcywgaW50MTZfdCBsZW5ndGgpOworCitzdGF0aWMgdm9pZAorY291bnRXb3JkKFdvcmQgKndvcmQpOworCitzdGF0aWMgdm9pZAorYWRkTGluZShVQ2hhcjMyIGNvZGUsIGNvbnN0IGNoYXIgKm5hbWVzW10sIGludDE2X3QgbGVuZ3Roc1tdLCBpbnQxNl90IGNvdW50KTsKKworc3RhdGljIHZvaWQKK2FkZEdyb3VwKHVpbnQzMl90IGdyb3VwTVNCLCB1aW50OF90ICpzdHJpbmdzLCBpbnQxNl90IGxlbmd0aCk7CisKK3N0YXRpYyB1aW50MzJfdAorYWRkVG9rZW4odWludDhfdCAqcywgaW50MTZfdCBsZW5ndGgpOworCitzdGF0aWMgdm9pZAorYXBwZW5kTGluZUxlbmd0aChpbnQxNl90IGxlbmd0aCk7CisKK3N0YXRpYyB2b2lkCithcHBlbmRMaW5lTGVuZ3RoTmliYmxlKHVpbnQ4X3QgbmliYmxlKTsKKworc3RhdGljIHVpbnQ4X3QgKgorYWxsb2NMaW5lKGludDMyX3QgbGVuZ3RoKTsKKworc3RhdGljIHVpbnQ4X3QgKgorYWxsb2NXb3JkKHVpbnQzMl90IGxlbmd0aCk7CisKKy8qIHBhcnNpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQKK05hbWVzUHJvcHNCdWlsZGVyOjpzZXRQcm9wcyhjb25zdCBVbmlQcm9wcyAmcHJvcHMsIGNvbnN0IFVuaWNvZGVTZXQgJm5ld1ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKyAgICBpZighbmV3VmFsdWVzLmNvbnRhaW5zKFVDSEFSX05BTUUpICYmICFuZXdWYWx1ZXMuY29udGFpbnMoUFBVQ0RfTkFNRV9BTElBUykpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFVfQVNTRVJUKHByb3BzLnN0YXJ0PT1wcm9wcy5lbmQpOworCisgICAgY29uc3QgY2hhciAqbmFtZXNbNF09eyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgICAgaW50MTZfdCBsZW5ndGhzWzRdPXsgMCwgMCwgMCwgMCB9OworCisgICAgLyogZ2V0IHRoZSBjaGFyYWN0ZXIgbmFtZSAqLworICAgIGlmKHByb3BzLm5hbWUhPU5VTEwpIHsKKyAgICAgICAgbmFtZXNbMF09cHJvcHMubmFtZTsKKyAgICAgICAgbGVuZ3Roc1swXT0oaW50MTZfdCl1cHJ2X3N0cmxlbihwcm9wcy5uYW1lKTsKKyAgICAgICAgcGFyc2VOYW1lKG5hbWVzWzBdLCBsZW5ndGhzWzBdKTsKKyAgICB9CisKKyAgICBDaGFyU3RyaW5nIGJ1ZmZlcjsKKyAgICBpZihwcm9wcy5uYW1lQWxpYXMhPU5VTEwpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogT25seSB1c2UgImNvcnJlY3Rpb24iIGFsaWFzZXMgZm9yIG5vdywgZnJvbSBVbmljb2RlIDYuMSBOYW1lQWxpYXNlcy50eHQgd2l0aCAzIGZpZWxkcyBwZXIgbGluZS4KKyAgICAgICAgICogVE9ETzogV29yayBvbiB0aWNrZXQgIzg5NjMgdG8gZGVhbCB3aXRoIG11bHRpcGxlIHR5cGU6YWxpYXMgcGFpcnMgcGVyIGNoYXJhY3Rlci4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IGNoYXIgKmNvcnI9dXBydl9zdHJzdHIocHJvcHMubmFtZUFsaWFzLCAiY29ycmVjdGlvbj0iKTsKKyAgICAgICAgaWYoY29yciE9TlVMTCkgeworICAgICAgICAgICAgY29ycis9MTE7ICAvLyBza2lwICJjb3JyZWN0aW9uPSIKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpbWl0PXVwcnZfc3RyY2hyKGNvcnIsICcsJyk7CisgICAgICAgICAgICBpZihsaW1pdCE9TlVMTCkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY29yciwgbGltaXQtY29yciwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICBuYW1lc1szXT1idWZmZXIuZGF0YSgpOworICAgICAgICAgICAgICAgIGxlbmd0aHNbM109KGludDE2X3QpKGxpbWl0LWNvcnIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuYW1lc1szXT1jb3JyOworICAgICAgICAgICAgICAgIGxlbmd0aHNbM109KGludDE2X3QpdXBydl9zdHJsZW4oY29ycik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJzZU5hbWUobmFtZXNbM10sIGxlbmd0aHNbM10pOworICAgICAgICB9CisgICAgfQorCisgICAgYWRkTGluZShwcm9wcy5zdGFydCwgbmFtZXMsIGxlbmd0aHMsIExFTkdUSE9GKG5hbWVzKSk7Cit9CisKK3N0YXRpYyB2b2lkCitwYXJzZU5hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50MTZfdCBsZW5ndGgpIHsKKyAgICBpbnQxNl90IHN0YXJ0PTAsIGxpbWl0LCB3b3JkTGVuZ3RoLyosIHByZXZTdGFydD0tMSovOworICAgIFdvcmQgKndvcmQ7CisKKyAgICB3aGlsZShzdGFydDxsZW5ndGgpIHsKKyAgICAgICAgLyogc2tpcCBhbnkgIm5vaXNlIiBjaGFyYWN0ZXJzICovCisgICAgICAgIGxpbWl0PXNraXBOb2lzZShuYW1lLCBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgaWYoc3RhcnQ8bGltaXQpIHsKKyAgICAgICAgICAgIC8qcHJldlN0YXJ0PS0xOyovCisgICAgICAgICAgICBzdGFydD1saW1pdDsKKyAgICAgICAgfQorICAgICAgICBpZihzdGFydD09bGVuZ3RoKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGdldCBhIHdvcmQgYW5kIGFkZCBpdCBpZiBpdCBpcyBsb25nZXIgdGhhbiAxICovCisgICAgICAgIGxpbWl0PWdldFdvcmQobmFtZSwgc3RhcnQsIGxlbmd0aCk7CisgICAgICAgIHdvcmRMZW5ndGg9KGludDE2X3QpKGxpbWl0LXN0YXJ0KTsKKyAgICAgICAgaWYod29yZExlbmd0aD4xKSB7CisgICAgICAgICAgICB3b3JkPWZpbmRXb3JkKG5hbWUrc3RhcnQsIHdvcmRMZW5ndGgpOworICAgICAgICAgICAgaWYod29yZD09TlVMTCkgeworICAgICAgICAgICAgICAgIHdvcmQ9YWRkV29yZChuYW1lK3N0YXJ0LCB3b3JkTGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvdW50V29yZCh3b3JkKTsKKyAgICAgICAgfQorCisjaWYgMAorICAgICAgICAvKgorICAgICAgICAgKiBpZiB0aGVyZSB3YXMgYSB3b3JkIGJlZm9yZSB0aGlzCisgICAgICAgICAqICh3aXRoIG5vIG5vaXNlIGluIGJldHdlZW4pLCB0aGVuIGFkZCB0aGUgcGFpciBvZiB3b3JkcywgdG9vCisgICAgICAgICAqLworICAgICAgICBpZihwcmV2U3RhcnQhPS0xKSB7CisgICAgICAgICAgICB3b3JkTGVuZ3RoPWxpbWl0LXByZXZTdGFydDsKKyAgICAgICAgICAgIHdvcmQ9ZmluZFdvcmQobmFtZStwcmV2U3RhcnQsIHdvcmRMZW5ndGgpOworICAgICAgICAgICAgaWYod29yZD09TlVMTCkgeworICAgICAgICAgICAgICAgIHdvcmQ9YWRkV29yZChuYW1lK3ByZXZTdGFydCwgd29yZExlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudFdvcmQod29yZCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qcHJldlN0YXJ0PXN0YXJ0OyovCisgICAgICAgIHN0YXJ0PWxpbWl0OworICAgIH0KK30KKworc3RhdGljIFVCb29sCitpc1dvcmRDaGFyKGNoYXIgYykgeworICAgIHJldHVybiAoJ0EnPD1jICYmIGM8PSdJJykgfHwgLyogRUJDRElDLXNhZmUgY2hlY2sgZm9yIGxldHRlcnMgKi8KKyAgICAgICAgICAgKCdKJzw9YyAmJiBjPD0nUicpIHx8CisgICAgICAgICAgICgnUyc8PWMgJiYgYzw9J1onKSB8fAorCisgICAgICAgICAgICgnMCc8PWMgJiYgYzw9JzknKTsKK30KKworc3RhdGljIGludDE2X3QKK3NraXBOb2lzZShjb25zdCBjaGFyICpsaW5lLCBpbnQxNl90IHN0YXJ0LCBpbnQxNl90IGxpbWl0KSB7CisgICAgLyogc2tpcCBhbnl0aGluZyB0aGF0IGlzIG5vdCBwYXJ0IG9mIGEgd29yZCBpbiB0aGlzIHNlbnNlICovCisgICAgd2hpbGUoc3RhcnQ8bGltaXQgJiYgIWlzV29yZENoYXIobGluZVtzdGFydF0pKSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgaW50MTZfdAorZ2V0V29yZChjb25zdCBjaGFyICpsaW5lLCBpbnQxNl90IHN0YXJ0LCBpbnQxNl90IGxpbWl0KSB7CisgICAgY2hhciBjPTA7IC8qIGluaXRpYWxpemUgdG8gYXZvaWQgYSBjb21waWxlciB3YXJuaW5nIGFsdGhvdWdoIHRoZSBjb2RlIHdhcyBzYWZlICovCisKKyAgICAvKiBhIHVuaWNvZGUgY2hhcmFjdGVyIG5hbWUgd29yZCBjb25zaXN0cyBvZiBBLVowLTkgKi8KKyAgICB3aGlsZShzdGFydDxsaW1pdCAmJiBpc1dvcmRDaGFyKGxpbmVbc3RhcnRdKSkgeworICAgICAgICArK3N0YXJ0OworICAgIH0KKworICAgIC8qIGluY2x1ZGUgYSBmb2xsb3dpbmcgc3BhY2Ugb3IgZGFzaCAqLworICAgIGlmKHN0YXJ0PGxpbWl0ICYmICgoYz1saW5lW3N0YXJ0XSk9PScgJyB8fCBjPT0nLScpKSB7CisgICAgICAgICsrc3RhcnQ7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXJ0OworfQorCit2b2lkCitOYW1lc1Byb3BzQnVpbGRlcjo6c2V0QWxnTmFtZXNSYW5nZShVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsICAvLyBudW1iZXIgb2YgaGV4IGRpZ2l0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgLyogbW9kdWxvIGZhY3RvcnMsIG1heGltdW0gOCAqLworICAgIC8qIDMgZmFjdG9yczogMTksIDIxLCAyOCwgbW9zdC10by1sZWFzdC1zaWduaWZpY2FudCAqLworICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBoYW5ndWxGYWN0b3JzWzNdPXsKKyAgICAgICAgMTksIDIxLCAyOAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciBqYW1vW109CisgICAgICAgICJIQU5HVUwgU1lMTEFCTEUgXDAiCisKKyAgICAgICAgIkdcMEdHXDBOXDBEXDBERFwwUlwwTVwwQlwwQkJcMCIKKyAgICAgICAgIlNcMFNTXDBcMEpcMEpKXDBDXDBLXDBUXDBQXDBIXDAiCisKKyAgICAgICAgIkFcMEFFXDBZQVwwWUFFXDBFT1wwRVwwWUVPXDBZRVwwT1wwIgorICAgICAgICAiV0FcMFdBRVwwT0VcMFlPXDBVXDBXRU9cMFdFXDBXSVwwIgorICAgICAgICAiWVVcMEVVXDBZSVwwSVwwIgorCisgICAgICAgICJcMEdcMEdHXDBHU1wwTlwwTkpcME5IXDBEXDBMXDBMR1wwTE1cMCIKKyAgICAgICAgIkxCXDBMU1wwTFRcMExQXDBMSFwwTVwwQlwwQlNcMCIKKyAgICAgICAgIlNcMFNTXDBOR1wwSlwwQ1wwS1wwVFwwUFwwSCI7CisKKyAgICBpbnQzMl90IHByZWZpeExlbmd0aD0wOworICAgIEFsZ29yaXRobWljUmFuZ2UgcmFuZ2U7CisgICAgdXBydl9tZW1zZXQoJnJhbmdlLCAwLCBzaXplb2YoQWxnb3JpdGhtaWNSYW5nZSkpOworICAgIGludDMyX3QgcmFuZ2VTaXplPShpbnQzMl90KXNpemVvZihBbGdvcml0aG1pY1JhbmdlKTsKKyAgICByYW5nZS5zdGFydD1zdGFydDsKKyAgICByYW5nZS5lbmQ9ZW5kOworICAgIGlmKDA9PXVwcnZfc3RyY21wKHR5cGUsICJoYW4iKSkgeworICAgICAgICByYW5nZS50eXBlPTA7CisgICAgICAgIHJhbmdlLnZhcmlhbnQ9IGVuZDw9MHhmZmZmID8gNCA6IDU7CisgICAgICAgIHByZWZpeExlbmd0aD11cHJ2X3N0cmxlbihwcmVmaXgpKzE7CisgICAgICAgIHJhbmdlU2l6ZSs9cHJlZml4TGVuZ3RoOworICAgIH0gZWxzZSBpZigwPT11cHJ2X3N0cmNtcCh0eXBlLCAiaGFuZ3VsIikpIHsKKyAgICAgICAgcmFuZ2UudHlwZT0xOworICAgICAgICByYW5nZS52YXJpYW50PSh1aW50OF90KUxFTkdUSE9GKGhhbmd1bEZhY3RvcnMpOworICAgICAgICByYW5nZVNpemUrPShpbnQzMl90KXNpemVvZihoYW5ndWxGYWN0b3JzKTsKKyAgICAgICAgcmFuZ2VTaXplKz0oaW50MzJfdClzaXplb2YoamFtbyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wcyBlcnJvcjogdW5rbm93biBhbGduYW1lc3JhbmdlIHR5cGUgJyVzJ1xuIiwgcHJlZml4KTsKKyAgICAgICAgZXJyb3JDb2RlPVVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQzMl90IHBhZGRpbmdMZW5ndGg9cGFkZGluZ0xlbmd0aD1yYW5nZVNpemUmMzsKKyAgICBpZihwYWRkaW5nTGVuZ3RoKSB7CisgICAgICAgIHBhZGRpbmdMZW5ndGg9NC1wYWRkaW5nTGVuZ3RoOworICAgICAgICByYW5nZVNpemUrPXBhZGRpbmdMZW5ndGg7CisgICAgfQorICAgIHJhbmdlLnNpemU9KHVpbnQxNl90KXJhbmdlU2l6ZTsKKyAgICBhbGdSYW5nZXMuYXBwZW5kKChjaGFyICopJnJhbmdlLCAoaW50MzJfdClzaXplb2YoQWxnb3JpdGhtaWNSYW5nZSksIGVycm9yQ29kZSk7CisgICAgaWYocmFuZ2UudHlwZT09MCkgeyAgLy8gaGFuCisgICAgICAgIGFsZ1Jhbmdlcy5hcHBlbmQocHJlZml4LCBwcmVmaXhMZW5ndGgsIGVycm9yQ29kZSk7CisgICAgfSBlbHNlIC8qIHR5cGU9PTEgKi8geyAgLy8gaGFuZ3VsCisgICAgICAgIGFsZ1Jhbmdlcy5hcHBlbmQoKGNoYXIgKiloYW5ndWxGYWN0b3JzLCAoaW50MzJfdClzaXplb2YoaGFuZ3VsRmFjdG9ycyksIGVycm9yQ29kZSk7CisgICAgICAgIGFsZ1Jhbmdlcy5hcHBlbmQoamFtbywgKGludDMyX3Qpc2l6ZW9mKGphbW8pLCBlcnJvckNvZGUpOworICAgIH0KKyAgICB3aGlsZShwYWRkaW5nTGVuZ3RoKSB7CisgICAgICAgIGFsZ1Jhbmdlcy5hcHBlbmQoKGNoYXIpMHhhYSwgZXJyb3JDb2RlKTsKKyAgICAgICAgLS1wYWRkaW5nTGVuZ3RoOworICAgIH0KKyAgICArK2NvdW50QWxnUmFuZ2VzOworfQorCisvKiBjb21wcmVzc2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZAorY29tcHJlc3MoVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgdWludDMyX3QgaSwgbGV0dGVyQ291bnQ7CisgICAgaW50MTZfdCB3b3JkTnVtYmVyOworCisgICAgLyogc29ydCB0aGUgd29yZHMgaW4gcmV2ZXJzZSBvcmRlciBieSB3ZWlnaHQgKi8KKyAgICB1cHJ2X3NvcnRBcnJheSh3b3Jkcywgd29yZENvdW50LCBzaXplb2YoV29yZCksCisgICAgICAgICAgICAgICAgICAgY29tcGFyZVdvcmRzLCBOVUxMLCBGQUxTRSwgJmVycm9yQ29kZSk7CisKKyAgICAvKiByZW1vdmUgdGhlIHdvcmRzIHRoYXQgZG8gbm90IHNhdmUgYW55dGhpbmcgKi8KKyAgICB3aGlsZSh3b3JkQ291bnQ+MCAmJiB3b3Jkc1t3b3JkQ291bnQtMV0ud2VpZ2h0PDEpIHsKKyAgICAgICAgLS13b3JkQ291bnQ7CisgICAgfQorCisgICAgLyogY291bnQgdGhlIGxldHRlcnMgaW4gdGhlIHRva2VuIHJhbmdlICovCisgICAgbGV0dGVyQ291bnQ9MDsKKyAgICBmb3IoaT1MRUFEQllURV9MSU1JVDsgaTwyNTY7ICsraSkgeworICAgICAgICBpZih0b2tlbnNbaV09PS0xKSB7CisgICAgICAgICAgICArK2xldHRlckNvdW50OworICAgICAgICB9CisgICAgfQorICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHByaW50ZigibnVtYmVyIG9mIGxldHRlcnMgdXNlZCBpbiB0aGUgbmFtZXM6ICVkXG4iLCAoaW50KWxldHRlckNvdW50KTsKKyAgICB9CisKKyAgICAvKiBkbyB3ZSBuZWVkIGRvdWJsZS1ieXRlIHRva2Vucz8gKi8KKyAgICBpZih3b3JkQ291bnQrbGV0dGVyQ291bnQ8PTI1NikgeworICAgICAgICAvKiBubywgc2luZ2xlLWJ5dGUgdG9rZW5zIGFyZSBlbm91Z2ggKi8KKyAgICAgICAgbGVhZEJ5dGVDb3VudD0wOworICAgICAgICBmb3IoaT0wLCB3b3JkTnVtYmVyPTA7IHdvcmROdW1iZXI8KGludDE2X3Qpd29yZENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmKHRva2Vuc1tpXSE9LTEpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnNbaV09d29yZE51bWJlcjsKKyAgICAgICAgICAgICAgICBpZihiZVZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0b2tlbnNbMHglMDN4XTogd29yZCU4bGQgXCIlLipzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClpLCAobG9uZyl3b3Jkc1t3b3JkTnVtYmVyXS53ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbd29yZE51bWJlcl0ubGVuZ3RoLCB3b3Jkc1t3b3JkTnVtYmVyXS5zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyt3b3JkTnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRva2VuQ291bnQ9aTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgdG9rZW5zIHRoYXQgbmVlZCB0d28gdG9rZW4gYnl0ZXMKKyAgICAgICAgICogZ2V0IHRoZWlyIHdlaWdodCByZWR1Y2VkIGJ5IHRoZWlyIGNvdW50CisgICAgICAgICAqIGJlY2F1c2UgdGhleSBzYXZlIGxlc3MuCisgICAgICAgICAqLworICAgICAgICB0b2tlbkNvdW50PTI1Ni1sZXR0ZXJDb3VudDsKKyAgICAgICAgZm9yKGk9dG9rZW5Db3VudDsgaTx3b3JkQ291bnQ7ICsraSkgeworICAgICAgICAgICAgd29yZHNbaV0ud2VpZ2h0LT13b3Jkc1tpXS5jb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNvcnQgdGhlc2Ugd29yZHMgaW4gcmV2ZXJzZSBvcmRlciBieSB3ZWlnaHQgKi8KKyAgICAgICAgZXJyb3JDb2RlPVVfWkVST19FUlJPUjsKKyAgICAgICAgdXBydl9zb3J0QXJyYXkod29yZHMrdG9rZW5Db3VudCwgd29yZENvdW50LXRva2VuQ291bnQsIHNpemVvZihXb3JkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVXb3JkcywgTlVMTCwgRkFMU0UsICZlcnJvckNvZGUpOworCisgICAgICAgIC8qIHJlbW92ZSB0aGUgd29yZHMgdGhhdCBkbyBub3Qgc2F2ZSBhbnl0aGluZyAqLworICAgICAgICB3aGlsZSh3b3JkQ291bnQ+MCAmJiB3b3Jkc1t3b3JkQ291bnQtMV0ud2VpZ2h0PDEpIHsKKyAgICAgICAgICAgIC0td29yZENvdW50OworICAgICAgICB9CisKKyAgICAgICAgLyogaG93IG1hbnkgdG9rZW5zIGFuZCBsZWFkIGJ5dGVzIGRvIHdlIGhhdmUgbm93PyAqLworICAgICAgICB0b2tlbkNvdW50PXdvcmRDb3VudCtsZXR0ZXJDb3VudCsoTEVBREJZVEVfTElNSVQtMSk7CisgICAgICAgIC8qCisgICAgICAgICAqIGFkanVzdCB1cHdhcmRzIHRvIHRha2UgaW50byBhY2NvdW50IHRoYXQKKyAgICAgICAgICogZG91YmxlLWJ5dGUgdG9rZW5zIG11c3Qgbm90CisgICAgICAgICAqIHVzZSBOQU1FX1NFUEFSQVRPUl9DSEFSIGFzIGEgc2Vjb25kIGJ5dGUKKyAgICAgICAgICovCisgICAgICAgIHRva2VuQ291bnQrPSh0b2tlbkNvdW50LTI1NisyNTQpLzI1NTsKKworICAgICAgICBsZWFkQnl0ZUNvdW50PShpbnQxNl90KSh0b2tlbkNvdW50Pj44KTsKKyAgICAgICAgaWYobGVhZEJ5dGVDb3VudDxMRUFEQllURV9MSU1JVCkgeworICAgICAgICAgICAgLyogYWRqdXN0IGZvciB0aGUgcmVhbCBudW1iZXIgb2YgbGVhZCBieXRlcyAqLworICAgICAgICAgICAgdG9rZW5Db3VudC09KExFQURCWVRFX0xJTUlULTEpLWxlYWRCeXRlQ291bnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBsaW1pdCB0aGUgbnVtYmVyIG9mIGxlYWQgYnl0ZXMgKi8KKyAgICAgICAgICAgIGxlYWRCeXRlQ291bnQ9TEVBREJZVEVfTElNSVQtMTsKKyAgICAgICAgICAgIHRva2VuQ291bnQ9TEVBREJZVEVfTElNSVQqMjU2OworICAgICAgICAgICAgd29yZENvdW50PXRva2VuQ291bnQtbGV0dGVyQ291bnQtKExFQURCWVRFX0xJTUlULTEpOworICAgICAgICAgICAgLyogYWRqdXN0IGFnYWluIHRvIHNraXAgZG91YmxlLWJ5dGUgdG9rZW5zIHdpdGggJzsnICovCisgICAgICAgICAgICB3b3JkQ291bnQtPSh0b2tlbkNvdW50LTI1NisyNTQpLzI1NTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldCB0b2tlbiAwIHRvIHdvcmQgMCAqLworICAgICAgICB0b2tlbnNbMF09MDsKKyAgICAgICAgaWYoYmVWZXJib3NlKSB7CisgICAgICAgICAgICBwcmludGYoInRva2Vuc1sweDAwMF06IHdvcmQlOGxkIFwiJS4qc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZyl3b3Jkc1swXS53ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIHdvcmRzWzBdLmxlbmd0aCwgd29yZHNbMF0ucyk7CisgICAgICAgIH0KKyAgICAgICAgd29yZE51bWJlcj0xOworCisgICAgICAgIC8qIHNldCB0aGUgbGVhZCBieXRlIHRva2VucyAqLworICAgICAgICBmb3IoaT0xOyAoaW50MTZfdClpPD1sZWFkQnl0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHRva2Vuc1tpXT0tMjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldCB0aGUgdG9rZW5zICovCisgICAgICAgIGZvcig7IGk8MjU2OyArK2kpIHsKKyAgICAgICAgICAgIC8qIGlmIHN0b3JlMTBOYW1lcyB0aGVuIHRoZSBwYXJzZXIgc2V0IHRva2Vuc1tOQU1FX1NFUEFSQVRPUl9DSEFSXT0tMSAqLworICAgICAgICAgICAgaWYodG9rZW5zW2ldIT0tMSkgeworICAgICAgICAgICAgICAgIHRva2Vuc1tpXT13b3JkTnVtYmVyOworICAgICAgICAgICAgICAgIGlmKGJlVmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoInRva2Vuc1sweCUwM3hdOiB3b3JkJThsZCBcIiUuKnNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWksIChsb25nKXdvcmRzW3dvcmROdW1iZXJdLndlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1t3b3JkTnVtYmVyXS5sZW5ndGgsIHdvcmRzW3dvcmROdW1iZXJdLnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK3dvcmROdW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBjb250aW51ZSBhYm92ZSAyNTUgd2hlcmUgdGhlcmUgYXJlIG5vIGxldHRlcnMgKi8KKyAgICAgICAgZm9yKDsgKHVpbnQzMl90KXdvcmROdW1iZXI8d29yZENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmKChpJjB4ZmYpPT1OQU1FX1NFUEFSQVRPUl9DSEFSKSB7CisgICAgICAgICAgICAgICAgdG9rZW5zW2ldPS0xOyAvKiBkbyBub3QgdXNlIE5BTUVfU0VQQVJBVE9SX0NIQVIgYXMgYSBzZWNvbmQgdG9rZW4gYnl0ZSAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0b2tlbnNbaV09d29yZE51bWJlcjsKKyAgICAgICAgICAgICAgICBpZihiZVZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJ0b2tlbnNbMHglMDN4XTogd29yZCU4bGQgXCIlLipzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClpLCAobG9uZyl3b3Jkc1t3b3JkTnVtYmVyXS53ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbd29yZE51bWJlcl0ubGVuZ3RoLCB3b3Jkc1t3b3JkTnVtYmVyXS5zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyt3b3JkTnVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRva2VuQ291bnQ9aTsgLyogc2hvdWxkIGJlIGFscmVhZHkgdG9rZW5Db3VudD17aSBvciBpKzF9ICovCisgICAgfQorCisgICAgaWYoIWJlUXVpZXQpIHsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2YgbGVhZCBieXRlczogJWRcbiIsIGxlYWRCeXRlQ291bnQpOworICAgICAgICBwcmludGYoIm51bWJlciBvZiBzaW5nbGUtYnl0ZSB0b2tlbnM6ICVsdVxuIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKTI1Ni1sZXR0ZXJDb3VudC1sZWFkQnl0ZUNvdW50KTsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2YgdG9rZW5zOiAlbHVcbiIsICh1bnNpZ25lZCBsb25nKXRva2VuQ291bnQpOworICAgIH0KKworICAgIGNvbXByZXNzTGluZXMoKTsKK30KKworc3RhdGljIHZvaWQKK2NvbXByZXNzTGluZXMoKSB7CisgICAgTGluZSAqbGluZT1OVUxMOworICAgIHVpbnQzMl90IGk9MCwgaW5MaW5lLCBvdXRMaW5lPTB4ZmZmZmZmZmYgLyogKHVpbnQzMl90KSgtMSkgKi8sCisgICAgICAgICAgICAgZ3JvdXBNU0I9MHhmZmZmLCBsaW5lQ291bnQyOworICAgIGludDE2X3QgZ3JvdXBUb3A9MDsKKworICAgIC8qIHN0b3JlIHRoZSBncm91cHMgbGlrZSBsaW5lcywgd2l0aCBjb21wcmVzc2VkIGRhdGEgYWZ0ZXIgcmF3IHN0cmluZ3MgKi8KKyAgICBncm91cEJvdHRvbT1saW5lVG9wOworICAgIGxpbmVDb3VudDI9bGluZUNvdW50OworICAgIGxpbmVDb3VudD0wOworCisgICAgLyogbG9vcCBvdmVyIGFsbCBsaW5lcyAqLworICAgIHdoaWxlKGk8bGluZUNvdW50MikgeworICAgICAgICBsaW5lPWxpbmVzK2krKzsKKyAgICAgICAgaW5MaW5lPWxpbmUtPmNvZGU7CisKKyAgICAgICAgLyogc2VnbWVudCB0aGUgbGluZXMgdG8gZ3JvdXBzIG9mIDMyICovCisgICAgICAgIGlmKGluTGluZT4+R1JPVVBfU0hJRlQhPWdyb3VwTVNCKSB7CisgICAgICAgICAgICAvKiBmaW5pc2ggdGhlIGN1cnJlbnQgZ3JvdXAgd2l0aCBlbXB0eSBsaW5lcyAqLworICAgICAgICAgICAgd2hpbGUoKCsrb3V0TGluZSZHUk9VUF9NQVNLKSE9MCkgeworICAgICAgICAgICAgICAgIGFwcGVuZExpbmVMZW5ndGgoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHN0b3JlIHRoZSBncm91cCBsaWtlIGEgbGluZSAqLworICAgICAgICAgICAgaWYoZ3JvdXBUb3A+MCkgeworICAgICAgICAgICAgICAgIGlmKGdyb3VwVG9wPkdST1VQX1NUT1JFX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lczogZ3JvdXAgc3RvcmUgb3ZlcmZsb3dcbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkR3JvdXAoZ3JvdXBNU0IsIGdyb3VwU3RvcmUsIGdyb3VwVG9wKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc3RhcnQgdGhlIG5ldyBncm91cCAqLworICAgICAgICAgICAgbGluZUxlbmd0aHNUb3A9MDsKKyAgICAgICAgICAgIGdyb3VwVG9wPTA7CisgICAgICAgICAgICBncm91cE1TQj1pbkxpbmU+PkdST1VQX1NISUZUOworICAgICAgICAgICAgb3V0TGluZT0oaW5MaW5lJn5HUk9VUF9NQVNLKS0xOworICAgICAgICB9CisKKyAgICAgICAgLyogd3JpdGUgZW1wdHkgbGluZXMgYmV0d2VlbiB0aGUgcHJldmlvdXMgbGluZSBpbiB0aGUgZ3JvdXAgYW5kIHRoaXMgb25lICovCisgICAgICAgIHdoaWxlKCsrb3V0TGluZTxpbkxpbmUpIHsKKyAgICAgICAgICAgIGFwcGVuZExpbmVMZW5ndGgoMCk7CisgICAgICAgIH0KKworICAgICAgICAvKiB3cml0ZSBjaGFyYWN0ZXJzIGFuZCB0b2tlbnMgZm9yIHRoaXMgbGluZSAqLworICAgICAgICBhcHBlbmRMaW5lTGVuZ3RoKGNvbXByZXNzTGluZShsaW5lLT5zLCBsaW5lLT5sZW5ndGgsICZncm91cFRvcCkpOworICAgIH0KKworICAgIC8qIGZpbmlzaCBhbmQgc3RvcmUgdGhlIGxhc3QgZ3JvdXAgKi8KKyAgICBpZihsaW5lICYmIGdyb3VwTVNCIT0weGZmZmYpIHsKKyAgICAgICAgLyogZmluaXNoIHRoZSBjdXJyZW50IGdyb3VwIHdpdGggZW1wdHkgbGluZXMgKi8KKyAgICAgICAgd2hpbGUoKCsrb3V0TGluZSZHUk9VUF9NQVNLKSE9MCkgeworICAgICAgICAgICAgYXBwZW5kTGluZUxlbmd0aCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHN0b3JlIHRoZSBncm91cCBsaWtlIGEgbGluZSAqLworICAgICAgICBpZihncm91cFRvcD4wKSB7CisgICAgICAgICAgICBpZihncm91cFRvcD5HUk9VUF9TVE9SRV9TSVpFKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lczogZ3JvdXAgc3RvcmUgb3ZlcmZsb3dcbiIpOworICAgICAgICAgICAgICAgIGV4aXQoVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkR3JvdXAoZ3JvdXBNU0IsIGdyb3VwU3RvcmUsIGdyb3VwVG9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHByaW50ZigibnVtYmVyIG9mIGdyb3VwczogJWx1XG4iLCAodW5zaWduZWQgbG9uZylsaW5lQ291bnQpOworICAgIH0KK30KKworc3RhdGljIGludDE2X3QKK2NvbXByZXNzTGluZSh1aW50OF90ICpzLCBpbnQxNl90IGxlbmd0aCwgaW50MTZfdCAqcEdyb3VwVG9wKSB7CisgICAgaW50MTZfdCBzdGFydCwgbGltaXQsIHRva2VuLCBncm91cFRvcD0qcEdyb3VwVG9wOworCisgICAgc3RhcnQ9MDsKKyAgICBkbyB7CisgICAgICAgIC8qIHdyaXRlIGFueSAibm9pc2UiIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgbGltaXQ9c2tpcE5vaXNlKChjaGFyICopcywgc3RhcnQsIGxlbmd0aCk7CisgICAgICAgIHdoaWxlKHN0YXJ0PGxpbWl0KSB7CisgICAgICAgICAgICBncm91cFN0b3JlW2dyb3VwVG9wKytdPXNbc3RhcnQrK107CisgICAgICAgIH0KKworICAgICAgICBpZihzdGFydD09bGVuZ3RoKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdyaXRlIGEgd29yZCwgYXMgdG9rZW4gb3IgZGlyZWN0bHkgKi8KKyAgICAgICAgbGltaXQ9Z2V0V29yZCgoY2hhciAqKXMsIHN0YXJ0LCBsZW5ndGgpOworICAgICAgICBpZihsaW1pdC1zdGFydD09MSkgeworICAgICAgICAgICAgZ3JvdXBTdG9yZVtncm91cFRvcCsrXT1zW3N0YXJ0KytdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9rZW49ZmluZFRva2VuKHMrc3RhcnQsIChpbnQxNl90KShsaW1pdC1zdGFydCkpOworICAgICAgICAgICAgaWYodG9rZW4hPS0xKSB7CisgICAgICAgICAgICAgICAgaWYodG9rZW4+MHhmZikgeworICAgICAgICAgICAgICAgICAgICBncm91cFN0b3JlW2dyb3VwVG9wKytdPSh1aW50OF90KSh0b2tlbj4+OCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdyb3VwU3RvcmVbZ3JvdXBUb3ArK109KHVpbnQ4X3QpdG9rZW47CisgICAgICAgICAgICAgICAgc3RhcnQ9bGltaXQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlKHN0YXJ0PGxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIGdyb3VwU3RvcmVbZ3JvdXBUb3ArK109c1tzdGFydCsrXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlKHN0YXJ0PGxlbmd0aCk7CisKKyAgICBsZW5ndGg9KGludDE2X3QpKGdyb3VwVG9wLSpwR3JvdXBUb3ApOworICAgICpwR3JvdXBUb3A9Z3JvdXBUb3A7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIGludDMyX3QKK2NvbXBhcmVXb3Jkcyhjb25zdCB2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICp3b3JkMSwgY29uc3Qgdm9pZCAqd29yZDIpIHsKKyAgICAvKiByZXZlcnNlIHNvcnQgYnkgd29yZCB3ZWlnaHQgKi8KKyAgICByZXR1cm4gKChXb3JkICopd29yZDIpLT53ZWlnaHQtKChXb3JkICopd29yZDEpLT53ZWlnaHQ7Cit9CisKK3ZvaWQKK05hbWVzUHJvcHNCdWlsZGVyOjpidWlsZChVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKworICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgIHB1dHMoIiogdW5hbWVzLmljdSBzdGF0cyAqIik7CisgICAgICAgIHByaW50Zigic2l6ZSBvZiBhbGwgbmFtZXMgaW4gdGhlIGRhdGFiYXNlOiAlbHVcbiIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsaW5lVG9wKTsKKyAgICAgICAgcHJpbnRmKCJudW1iZXIgb2YgbmFtZWQgVW5pY29kZSBjaGFyYWN0ZXJzOiAlbHVcbiIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsaW5lQ291bnQpOworICAgICAgICBwcmludGYoIm51bWJlciBvZiB3b3JkcyBpbiB0aGUgZGljdGlvbmFyeSBmcm9tIHRoZXNlIG5hbWVzOiAlbHVcbiIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZyl3b3JkQ291bnQpOworICAgIH0KKyAgICBjb21wcmVzcyhlcnJvckNvZGUpOworfQorCisvKiBnZW5lcmF0ZSBvdXRwdXQgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkCitOYW1lc1Byb3BzQnVpbGRlcjo6d3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKnBhdGgsIFVCb29sIHdpdGhDb3B5cmlnaHQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybjsgfQorCisgICAgVU5ld0RhdGFNZW1vcnkgKnBEYXRhPXVkYXRhX2NyZWF0ZShwYXRoLCAiaWN1IiwgInVuYW1lcyIsICZkYXRhSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb3B5cmlnaHQgPyBVX0NPUFlSSUdIVF9TVFJJTkcgOiBOVUxMLCAmZXJyb3JDb2RlKTsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnByb3BzOiB1ZGF0YV9jcmVhdGUoJXMsIHVuYW1lcy5pY3UpIGZhaWxlZCAtICVzXG4iLAorICAgICAgICAgICAgICAgIHBhdGgsIHVfZXJyb3JOYW1lKGVycm9yQ29kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDE2X3QgZ3JvdXBXb3Jkc1szXTsKKyAgICB1aW50MzJfdCBpLCBncm91cFRvcD1saW5lVG9wLCBzaXplLAorICAgICAgICAgICAgIHRva2VuU3RyaW5nT2Zmc2V0LCBncm91cHNPZmZzZXQsIGdyb3VwU3RyaW5nT2Zmc2V0LCBhbGdOYW1lc09mZnNldDsKKyAgICBsb25nIGRhdGFMZW5ndGg7CisgICAgaW50MTZfdCB0b2tlbjsKKworICAgIC8qIGZpcnN0LCBzZWUgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCwgYW5kIHByZXBhcmUgdGhlIHRva2VuIHN0cmluZ3MgKi8KKyAgICBmb3IoaT0wOyBpPHRva2VuQ291bnQ7ICsraSkgeworICAgICAgICB0b2tlbj10b2tlbnNbaV07CisgICAgICAgIGlmKHRva2VuIT0tMSAmJiB0b2tlbiE9LTIpIHsKKyAgICAgICAgICAgIHRva2Vuc1tpXT0oaW50MTZfdCkoYWRkVG9rZW4od29yZHNbdG9rZW5dLnMsIHdvcmRzW3Rva2VuXS5sZW5ndGgpLWdyb3VwVG9wKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogUmVxdWlyZWQgcGFkZGluZyBmb3IgZGF0YSBzd2FwcGluZzoKKyAgICAgKiBUaGUgdG9rZW4gdGFibGUgdW5kZXJnb2VzIGEgcGVybXV0YXRpb24gZHVyaW5nIGRhdGEgc3dhcHBpbmcgd2hlbiB0aGUKKyAgICAgKiBpbnB1dCBhbmQgb3V0cHV0IGNoYXJzZXRzIGFyZSBkaWZmZXJlbnQuCisgICAgICogVGhlIHRva2VuIHRhYmxlIGNhbm5vdCBncm93IGR1cmluZyBzd2FwcGluZywgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAqIHRoZSB0YWJsZSBpcyBsb25nIGVub3VnaCBmb3Igc3VjY2Vzc2Z1bCBpbi1wbGFjZSBwZXJtdXRhdGlvbi4KKyAgICAgKgorICAgICAqIFdlIHNpbXBseSByb3VuZCB1cCB0b2tlbkNvdW50IHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDI1NiB0byBhY2NvdW50IGZvcgorICAgICAqIGFsbCBwb3NzaWJsZSBwZXJtdXRhdGlvbnMuCisgICAgICoKKyAgICAgKiBBbiBvcHRpbWl6YXRpb24gaXMgcG9zc2libGUgaWYgd2Ugb25seSBldmVyIHN3YXAgYmV0d2VlbiBBU0NJSSBhbmQgRUJDRElDOgorICAgICAqCisgICAgICogSWYgdG9rZW5Db3VudD4yNTYsIHRoZW4gYSBzZW1pY29sb24gKE5BTUVfU0VQQVJBVE9SX0NIQVIpIGlzIHVzZWQKKyAgICAgKiBhbmQgd2lsbCBiZSBzd2FwcGVkIGJldHdlZW4gQVNDSUkgYW5kIEVCQ0RJQyBiZXR3ZWVuCisgICAgICogcG9zaXRpb25zIDB4M2IgKEFTQ0lJIHNlbWljb2xvbikgYW5kIDB4NWUgKEVCQ0RJQyBzZW1pY29sb24pLgorICAgICAqIFRoaXMgc2hvdWxkIGJlIHRoZSBvbmx5IC0xIGVudHJ5IGluIHRva2Vuc1syNTYuLjUxMV0gb24gd2hpY2ggdGhlIGRhdGEKKyAgICAgKiBzd2FwcGVyIGJhc2VzIGl0cyB0cmFpbCBieXRlIHBlcm11dGF0aW9uIG1hcCAodHJhaWxNYXBbXSkuCisgICAgICoKKyAgICAgKiBJdCB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIGluY3JlYXNlIHRva2VuQ291bnQgc28gdGhhdCBpdHMgbG93ZXIgOCBiaXRzCisgICAgICogYXJlIGF0IGxlYXN0IDB4NWUrMSB0byBtYWtlIHJvb20gZm9yIHN3YXBwaW5nIGJldHdlZW4gdGhlIHR3byBzZW1pY29sb25zLgorICAgICAqIEZvciB2YWx1ZXMgaGlnaGVyIHRoYW4gMHg1ZSwgdGhlIHRyYWlsIGJ5dGUgcGVybXV0YXRpb24gbWFwICh0cmFpbE1hcFtdKQorICAgICAqIHNob3VsZCBhbHdheXMgYmUgYW4gaWRlbnRpdHkgbWFwLCB3aGVyZSB3ZSBkbyBub3QgbmVlZCBhZGRpdGlvbmFsIHJvb20uCisgICAgICovCisgICAgaT10b2tlbkNvdW50OworICAgIHRva2VuQ291bnQ9KHRva2VuQ291bnQrMHhmZikmfjB4ZmY7CisgICAgaWYoIWJlUXVpZXQgJiYgaTx0b2tlbkNvdW50KSB7CisgICAgICAgIHByaW50ZigibnVtYmVyIG9mIHRva2Vuc1tdIHBhZGRpbmcgZW50cmllcyBmb3IgZGF0YSBzd2FwcGluZzogJWx1XG4iLCAodW5zaWduZWQgbG9uZykodG9rZW5Db3VudC1pKSk7CisgICAgfQorICAgIGZvcig7IGk8dG9rZW5Db3VudDsgKytpKSB7CisgICAgICAgIGlmKChpJjB4ZmYpPT1OQU1FX1NFUEFSQVRPUl9DSEFSKSB7CisgICAgICAgICAgICB0b2tlbnNbaV09LTE7IC8qIGRvIG5vdCB1c2UgTkFNRV9TRVBBUkFUT1JfQ0hBUiBhcyBhIHNlY29uZCB0b2tlbiBieXRlICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0b2tlbnNbaV09MDsgLyogdW51c2VkIHRva2VuIGZvciBwYWRkaW5nICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIENhbGN1bGF0ZSB0aGUgdG90YWwgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZGF0YSBpbmNsdWRpbmc6CisgICAgICogLSB0aGUgb2Zmc2V0IHRvIHRoZSB0b2tlbiBzdHJpbmdzLCB1aW50MzJfdCAoNCkKKyAgICAgKiAtIHRoZSBvZmZzZXQgdG8gdGhlIGdyb3VwIHRhYmxlLCB1aW50MzJfdCAoNCkKKyAgICAgKiAtIHRoZSBvZmZzZXQgdG8gdGhlIGdyb3VwIHN0cmluZ3MsIHVpbnQzMl90ICg0KQorICAgICAqIC0gdGhlIG9mZnNldCB0byB0aGUgYWxnb3JpdGhtaWMgbmFtZXMsIHVpbnQzMl90ICg0KQorICAgICAqCisgICAgICogLSB0aGUgbnVtYmVyIG9mIHRva2VucywgdWludDE2X3QgKDIpCisgICAgICogLSB0aGUgdG9rZW4gdGFibGUsIHVpbnQxNl90W3Rva2VuQ291bnRdICgyKnRva2VuQ291bnQpCisgICAgICoKKyAgICAgKiAtIHRoZSB0b2tlbiBzdHJpbmdzLCBlYWNoIHplcm8tdGVybWluYXRlZCAodG9rZW5TaXplPShsaW5lVG9wLWdyb3VwVG9wKSksIDItcGFkZGVkCisgICAgICoKKyAgICAgKiAtIHRoZSBudW1iZXIgb2YgZ3JvdXBzLCB1aW50MTZfdCAoMikKKyAgICAgKiAtIHRoZSBncm91cCB0YWJsZSwgeyB1aW50MTZfdCBncm91cE1TQiwgdWludDE2X3Qgb2Zmc2V0SGlnaCwgdWludDE2X3Qgb2Zmc2V0TG93IH1bNipncm91cENvdW50XQorICAgICAqCisgICAgICogLSB0aGUgZ3JvdXAgc3RyaW5ncyAoZ3JvdXBUb3AtZ3JvdXBCb3R0b20pLCAyLXBhZGRlZAorICAgICAqCisgICAgICogLSB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBmb3IgdGhlIGFsZ29yaXRobWljIG5hbWVzCisgICAgICovCisgICAgdG9rZW5TdHJpbmdPZmZzZXQ9NCs0KzQrNCsyKzIqdG9rZW5Db3VudDsKKyAgICBncm91cHNPZmZzZXQ9KHRva2VuU3RyaW5nT2Zmc2V0KyhsaW5lVG9wLWdyb3VwVG9wKSsxKSZ+MTsKKyAgICBncm91cFN0cmluZ09mZnNldD1ncm91cHNPZmZzZXQrMis2KmxpbmVDb3VudDsKKyAgICBhbGdOYW1lc09mZnNldD0oZ3JvdXBTdHJpbmdPZmZzZXQrKGdyb3VwVG9wLWdyb3VwQm90dG9tKSszKSZ+MzsKKworICAgIHNpemU9YWxnTmFtZXNPZmZzZXQrNCthbGdSYW5nZXMubGVuZ3RoKCk7CisKKyAgICBpZighYmVRdWlldCkgeworICAgICAgICBwcmludGYoInNpemUgb2YgdGhlIFVuaWNvZGUgTmFtZXMgZGF0YTpcbiIKKyAgICAgICAgICAgICAgICJ0b3RhbCBkYXRhIGxlbmd0aCAlbHUsIHRva2VuIHN0cmluZ3MgJWx1LCBjb21wcmVzc2VkIHN0cmluZ3MgJWx1LCBhbGdvcml0aG1pYyBuYW1lcyAlbHVcbiIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZSwgKHVuc2lnbmVkIGxvbmcpKGxpbmVUb3AtZ3JvdXBUb3ApLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShncm91cFRvcC1ncm91cEJvdHRvbSksICh1bnNpZ25lZCBsb25nKSg0K2FsZ1Jhbmdlcy5sZW5ndGgoKSkpOworICAgIH0KKworICAgIC8qIHdyaXRlIHRoZSBkYXRhIHRvIHRoZSBmaWxlICovCisgICAgLyogb2Zmc2V0cyAqLworICAgIHVkYXRhX3dyaXRlMzIocERhdGEsIHRva2VuU3RyaW5nT2Zmc2V0KTsKKyAgICB1ZGF0YV93cml0ZTMyKHBEYXRhLCBncm91cHNPZmZzZXQpOworICAgIHVkYXRhX3dyaXRlMzIocERhdGEsIGdyb3VwU3RyaW5nT2Zmc2V0KTsKKyAgICB1ZGF0YV93cml0ZTMyKHBEYXRhLCBhbGdOYW1lc09mZnNldCk7CisKKyAgICAvKiB0b2tlbiB0YWJsZSAqLworICAgIHVkYXRhX3dyaXRlMTYocERhdGEsICh1aW50MTZfdCl0b2tlbkNvdW50KTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCB0b2tlbnMsIDIqdG9rZW5Db3VudCk7CisKKyAgICAvKiB0b2tlbiBzdHJpbmdzICovCisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgc3RyaW5nU3RvcmUrZ3JvdXBUb3AsIGxpbmVUb3AtZ3JvdXBUb3ApOworICAgIGlmKChsaW5lVG9wLWdyb3VwVG9wKSYxKSB7CisgICAgICAgIC8qIDItcGFkZGluZyAqLworICAgICAgICB1ZGF0YV93cml0ZVBhZGRpbmcocERhdGEsIDEpOworICAgIH0KKworICAgIC8qIGdyb3VwIHRhYmxlICovCisgICAgdWRhdGFfd3JpdGUxNihwRGF0YSwgKHVpbnQxNl90KWxpbmVDb3VudCk7CisgICAgZm9yKGk9MDsgaTxsaW5lQ291bnQ7ICsraSkgeworICAgICAgICAvKiBncm91cE1TQiAqLworICAgICAgICBncm91cFdvcmRzWzBdPSh1aW50MTZfdClsaW5lc1tpXS5jb2RlOworCisgICAgICAgIC8qIG9mZnNldCAqLworICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSAodWludDMyX3QpKChsaW5lc1tpXS5zIC0gc3RyaW5nU3RvcmUpLWdyb3VwQm90dG9tKTsKKyAgICAgICAgZ3JvdXBXb3Jkc1sxXT0odWludDE2X3QpKG9mZnNldD4+MTYpOworICAgICAgICBncm91cFdvcmRzWzJdPSh1aW50MTZfdCkob2Zmc2V0KTsKKyAgICAgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgZ3JvdXBXb3JkcywgNik7CisgICAgfQorCisgICAgLyogZ3JvdXAgc3RyaW5ncyAqLworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIHN0cmluZ1N0b3JlK2dyb3VwQm90dG9tLCBncm91cFRvcC1ncm91cEJvdHRvbSk7CisKKyAgICAvKiA0LWFsaWduIHRoZSBhbGdvcml0aG1pYyBuYW1lcyBkYXRhICovCisgICAgdWRhdGFfd3JpdGVQYWRkaW5nKHBEYXRhLCBhbGdOYW1lc09mZnNldC0oZ3JvdXBTdHJpbmdPZmZzZXQrKGdyb3VwVG9wLWdyb3VwQm90dG9tKSkpOworCisgICAgdWRhdGFfd3JpdGUzMihwRGF0YSwgY291bnRBbGdSYW5nZXMpOworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGFsZ1Jhbmdlcy5kYXRhKCksIGFsZ1Jhbmdlcy5sZW5ndGgoKSk7CisKKyAgICAvKiBmaW5pc2ggdXAgKi8KKyAgICBkYXRhTGVuZ3RoPXVkYXRhX2ZpbmlzaChwRGF0YSwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lczogZXJyb3IgJWQgd3JpdGluZyB0aGUgb3V0cHV0IGZpbGVcbiIsIGVycm9yQ29kZSk7CisgICAgICAgIGV4aXQoZXJyb3JDb2RlKTsKKyAgICB9CisKKyAgICBpZihkYXRhTGVuZ3RoIT0obG9uZylzaXplKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VubmFtZXM6IGRhdGEgbGVuZ3RoICVsZCAhPSBjYWxjdWxhdGVkIHNpemUgJWx1XG4iLAorZGF0YUxlbmd0aCwgKHVuc2lnbmVkIGxvbmcpc2l6ZSk7CisgICAgICAgIGV4aXQoVV9JTlRFUk5BTF9QUk9HUkFNX0VSUk9SKTsKKyAgICB9Cit9CisKKy8qIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQxNl90CitmaW5kVG9rZW4odWludDhfdCAqcywgaW50MTZfdCBsZW5ndGgpIHsKKyAgICBpbnQxNl90IGksIHRva2VuOworCisgICAgZm9yKGk9MDsgaTwoaW50MTZfdCl0b2tlbkNvdW50OyArK2kpIHsKKyAgICAgICAgdG9rZW49dG9rZW5zW2ldOworICAgICAgICBpZih0b2tlbj49MCAmJiBsZW5ndGg9PXdvcmRzW3Rva2VuXS5sZW5ndGggJiYgMD09dXBydl9tZW1jbXAocywgd29yZHNbdG9rZW5dLnMsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgV29yZCAqCitmaW5kV29yZChjb25zdCBjaGFyICpzLCBpbnQxNl90IGxlbmd0aCkgeworICAgIHVpbnQzMl90IGk7CisKKyAgICBmb3IoaT0wOyBpPHdvcmRDb3VudDsgKytpKSB7CisgICAgICAgIGlmKGxlbmd0aD09d29yZHNbaV0ubGVuZ3RoICYmIDA9PXVwcnZfbWVtY21wKHMsIHdvcmRzW2ldLnMsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIHJldHVybiB3b3JkcytpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBXb3JkICoKK2FkZFdvcmQoY29uc3QgY2hhciAqcywgaW50MTZfdCBsZW5ndGgpIHsKKyAgICB1aW50OF90ICpzdHJpbmdTdGFydDsKKyAgICBXb3JkICp3b3JkOworCisgICAgaWYod29yZENvdW50PT1NQVhfV09SRF9DT1VOVCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbm5hbWVzOiB0b28gbWFueSB3b3Jkc1xuIik7CisgICAgICAgIGV4aXQoVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOworICAgIH0KKworICAgIHN0cmluZ1N0YXJ0PWFsbG9jV29yZChsZW5ndGgpOworICAgIHVwcnZfbWVtY3B5KHN0cmluZ1N0YXJ0LCBzLCBsZW5ndGgpOworCisgICAgd29yZD13b3Jkcyt3b3JkQ291bnQ7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemUgdGhlIHdlaWdodCB3aXRoIHRoZSBjb3N0cyBmb3IgdGhpcyB0b2tlbjoKKyAgICAgKiBhIHplcm8tdGVybWluYXRlZCBzdHJpbmcgYW5kIGEgMTYtYml0IG9mZnNldC4KKyAgICAgKi8KKyAgICB3b3JkLT53ZWlnaHQ9LShsZW5ndGgrMSsyKTsKKyAgICB3b3JkLT5jb3VudD0wOworICAgIHdvcmQtPmxlbmd0aD1sZW5ndGg7CisgICAgd29yZC0+cz1zdHJpbmdTdGFydDsKKworICAgICsrd29yZENvdW50OworCisgICAgcmV0dXJuIHdvcmQ7Cit9CisKK3N0YXRpYyB2b2lkCitjb3VudFdvcmQoV29yZCAqd29yZCkgeworICAgIC8qIGFkZCB0byB0aGUgd2VpZ2h0IHRoZSBzYXZpbmdzOiB0aGUgbGVuZ3RoIG9mIHRoZSB3b3JkIG1pbnVzIDEgYnl0ZSBmb3IgdGhlIHRva2VuICovCisgICAgd29yZC0+d2VpZ2h0Kz13b3JkLT5sZW5ndGgtMTsKKyAgICArK3dvcmQtPmNvdW50OworfQorCitzdGF0aWMgdm9pZAorYWRkTGluZShVQ2hhcjMyIGNvZGUsIGNvbnN0IGNoYXIgKm5hbWVzW10sIGludDE2X3QgbGVuZ3Roc1tdLCBpbnQxNl90IGNvdW50KSB7CisgICAgdWludDhfdCAqc3RyaW5nU3RhcnQ7CisgICAgTGluZSAqbGluZTsKKyAgICBpbnQxNl90IGksIGxlbmd0aDsKKworICAgIGlmKGxpbmVDb3VudD09TUFYX0xJTkVfQ09VTlQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5uYW1lczogdG9vIG1hbnkgbGluZXNcbiIpOworICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICB9CisKKyAgICAvKiBmaW5kIHRoZSBsYXN0IG5vbi1lbXB0eSBuYW1lICovCisgICAgd2hpbGUoY291bnQ+MCAmJiBsZW5ndGhzW2NvdW50LTFdPT0wKSB7CisgICAgICAgIC0tY291bnQ7CisgICAgfQorICAgIGlmKGNvdW50PT0wKSB7CisgICAgICAgIHJldHVybjsgLyogc2hvdWxkIG5vdCBvY2N1cjogY2FsbGVyIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgKi8KKyAgICB9CisKKyAgICAvKiB0aGVyZSB3aWxsIGJlIChjb3VudC0xKSBzZXBhcmF0b3IgY2hhcmFjdGVycyAqLworICAgIGk9Y291bnQ7CisgICAgbGVuZ3RoPWNvdW50LTE7CisKKyAgICAvKiBhZGQgbGVuZ3RocyBvZiBzdHJpbmdzICovCisgICAgd2hpbGUoaT4wKSB7CisgICAgICAgIGxlbmd0aCs9bGVuZ3Roc1stLWldOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIGxpbmUgbWVtb3J5ICovCisgICAgc3RyaW5nU3RhcnQ9YWxsb2NMaW5lKGxlbmd0aCk7CisKKyAgICAvKiBjb3B5IGFsbCBzdHJpbmdzIGludG8gdGhlIGxpbmUgbWVtb3J5ICovCisgICAgbGVuZ3RoPTA7IC8qIG51bWJlciBvZiBjaGFycyBjb3BpZWQgc28gZmFyICovCisgICAgZm9yKGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgIGlmKGk+MCkgeworICAgICAgICAgICAgc3RyaW5nU3RhcnRbbGVuZ3RoKytdPU5BTUVfU0VQQVJBVE9SX0NIQVI7CisgICAgICAgIH0KKyAgICAgICAgaWYobGVuZ3Roc1tpXT4wKSB7CisgICAgICAgICAgICB1cHJ2X21lbWNweShzdHJpbmdTdGFydCtsZW5ndGgsIG5hbWVzW2ldLCBsZW5ndGhzW2ldKTsKKyAgICAgICAgICAgIGxlbmd0aCs9bGVuZ3Roc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpbmU9bGluZXMrbGluZUNvdW50OworCisgICAgbGluZS0+Y29kZT1jb2RlOworICAgIGxpbmUtPmxlbmd0aD1sZW5ndGg7CisgICAgbGluZS0+cz1zdHJpbmdTdGFydDsKKworICAgICsrbGluZUNvdW50OworCisgICAgLyogcHJldmVudCBhIGNoYXJhY3RlciB2YWx1ZSB0aGF0IGlzIGFjdHVhbGx5IGluIGEgbmFtZSBmcm9tIGJlY29taW5nIGEgdG9rZW4gKi8KKyAgICB3aGlsZShsZW5ndGg+MCkgeworICAgICAgICB0b2tlbnNbc3RyaW5nU3RhcnRbLS1sZW5ndGhdXT0tMTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCithZGRHcm91cCh1aW50MzJfdCBncm91cE1TQiwgdWludDhfdCAqc3RyaW5ncywgaW50MTZfdCBsZW5ndGgpIHsKKyAgICB1aW50OF90ICpzdHJpbmdTdGFydDsKKyAgICBMaW5lICpsaW5lOworCisgICAgaWYobGluZUNvdW50PT1NQVhfTElORV9DT1VOVCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbm5hbWVzOiB0b28gbWFueSBncm91cHNcbiIpOworICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICB9CisKKyAgICAvKiBzdG9yZSB0aGUgbGluZSBsZW5ndGhzIGZpcnN0LCB0aGVuIHRoZSBzdHJpbmdzICovCisgICAgbGluZUxlbmd0aHNUb3A9KGxpbmVMZW5ndGhzVG9wKzEpLzI7CisgICAgc3RyaW5nU3RhcnQ9YWxsb2NMaW5lKGxpbmVMZW5ndGhzVG9wK2xlbmd0aCk7CisgICAgdXBydl9tZW1jcHkoc3RyaW5nU3RhcnQsIGxpbmVMZW5ndGhzLCBsaW5lTGVuZ3Roc1RvcCk7CisgICAgdXBydl9tZW1jcHkoc3RyaW5nU3RhcnQrbGluZUxlbmd0aHNUb3AsIHN0cmluZ3MsIGxlbmd0aCk7CisKKyAgICBsaW5lPWxpbmVzK2xpbmVDb3VudDsKKworICAgIGxpbmUtPmNvZGU9Z3JvdXBNU0I7CisgICAgbGluZS0+bGVuZ3RoPWxlbmd0aDsKKyAgICBsaW5lLT5zPXN0cmluZ1N0YXJ0OworCisgICAgKytsaW5lQ291bnQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorYWRkVG9rZW4odWludDhfdCAqcywgaW50MTZfdCBsZW5ndGgpIHsKKyAgICB1aW50OF90ICpzdHJpbmdTdGFydDsKKworICAgIHN0cmluZ1N0YXJ0PWFsbG9jTGluZShsZW5ndGgrMSk7CisgICAgdXBydl9tZW1jcHkoc3RyaW5nU3RhcnQsIHMsIGxlbmd0aCk7CisgICAgc3RyaW5nU3RhcnRbbGVuZ3RoXT0wOworCisgICAgcmV0dXJuICh1aW50MzJfdCkoc3RyaW5nU3RhcnQgLSBzdHJpbmdTdG9yZSk7Cit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRMaW5lTGVuZ3RoKGludDE2X3QgbGVuZ3RoKSB7CisgICAgaWYobGVuZ3RoPj03NikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbm5hbWVzOiBjb21wcmVzc2VkIGxpbmUgdG9vIGxvbmdcbiIpOworICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICB9CisgICAgaWYobGVuZ3RoPj0xMikgeworICAgICAgICBsZW5ndGgtPTEyOworICAgICAgICBhcHBlbmRMaW5lTGVuZ3RoTmliYmxlKCh1aW50OF90KSgobGVuZ3RoPj40KXwxMikpOworICAgIH0KKyAgICBhcHBlbmRMaW5lTGVuZ3RoTmliYmxlKCh1aW50OF90KWxlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRMaW5lTGVuZ3RoTmliYmxlKHVpbnQ4X3QgbmliYmxlKSB7CisgICAgaWYoKGxpbmVMZW5ndGhzVG9wJjEpPT0wKSB7CisgICAgICAgIGxpbmVMZW5ndGhzW2xpbmVMZW5ndGhzVG9wLzJdPSh1aW50OF90KShuaWJibGU8PDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxpbmVMZW5ndGhzW2xpbmVMZW5ndGhzVG9wLzJdfD1uaWJibGUmMHhmOworICAgIH0KKyAgICArK2xpbmVMZW5ndGhzVG9wOworfQorCitzdGF0aWMgdWludDhfdCAqCithbGxvY0xpbmUoaW50MzJfdCBsZW5ndGgpIHsKKyAgICB1aW50MzJfdCB0b3A9bGluZVRvcCtsZW5ndGg7CisgICAgdWludDhfdCAqcDsKKworICAgIGlmKHRvcD53b3JkQm90dG9tKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2VubmFtZXM6IG91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICBleGl0KFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1IpOworICAgIH0KKyAgICBwPXN0cmluZ1N0b3JlK2xpbmVUb3A7CisgICAgbGluZVRvcD10b3A7CisgICAgcmV0dXJuIHA7Cit9CisKK3N0YXRpYyB1aW50OF90ICoKK2FsbG9jV29yZCh1aW50MzJfdCBsZW5ndGgpIHsKKyAgICB1aW50MzJfdCBib3R0b209d29yZEJvdHRvbS1sZW5ndGg7CisKKyAgICBpZihsaW5lVG9wPmJvdHRvbSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbm5hbWVzOiBvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgZXhpdChVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SKTsKKyAgICB9CisgICAgd29yZEJvdHRvbT1ib3R0b207CisgICAgcmV0dXJuIHN0cmluZ1N0b3JlK2JvdHRvbTsKK30KKworUHJvcHNCdWlsZGVyICoKK2NyZWF0ZU5hbWVzUHJvcHNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiBOVUxMOyB9CisgICAgUHJvcHNCdWlsZGVyICpwYj1uZXcgTmFtZXNQcm9wc0J1aWxkZXIoZXJyb3JDb2RlKTsKKyAgICBpZihwYj09TlVMTCkgeworICAgICAgICBlcnJvckNvZGU9VV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIHBiOworfQorCisvKgorICogSGV5LCBFbWFjcywgcGxlYXNlIHNldCB0aGUgZm9sbG93aW5nOgorICoKKyAqIExvY2FsIFZhcmlhYmxlczoKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICoKKyAqLwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnByb3BzL3BuYW1lc19kYXRhLmggYi91bmljb2RlL2MvZ2VucHJvcHMvcG5hbWVzX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGJhMDlmCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnByb3BzL3BuYW1lc19kYXRhLmgKQEAgLTAsMCArMSwxMDA2IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIG1hY2hpbmUtZ2VuZXJhdGVkIGJ5OiBpY3UvdG9vbHMvdW5pY29kZS9weS9wcmVwYXJzZXVjZC5weQorICovCisKKyNkZWZpbmUgVU5JQ09ERV9WRVJTSU9OIHsgNiwgMiwgMCwgMCB9CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfYmlucHJvcFsyXSA9IHsKKyAgICBWYWx1ZSgwLCAiTiBObyBGIEZhbHNlIiksCisgICAgVmFsdWUoMSwgIlkgWWVzIFQgVHJ1ZSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19iY1sxOV0gPSB7CisgICAgVmFsdWUoVV9MRUZUX1RPX1JJR0hULCAiTCBMZWZ0X1RvX1JpZ2h0IiksCisgICAgVmFsdWUoVV9SSUdIVF9UT19MRUZULCAiUiBSaWdodF9Ub19MZWZ0IiksCisgICAgVmFsdWUoVV9FVVJPUEVBTl9OVU1CRVIsICJFTiBFdXJvcGVhbl9OdW1iZXIiKSwKKyAgICBWYWx1ZShVX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1IsICJFUyBFdXJvcGVhbl9TZXBhcmF0b3IiKSwKKyAgICBWYWx1ZShVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SLCAiRVQgRXVyb3BlYW5fVGVybWluYXRvciIpLAorICAgIFZhbHVlKFVfQVJBQklDX05VTUJFUiwgIkFOIEFyYWJpY19OdW1iZXIiKSwKKyAgICBWYWx1ZShVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SLCAiQ1MgQ29tbW9uX1NlcGFyYXRvciIpLAorICAgIFZhbHVlKFVfQkxPQ0tfU0VQQVJBVE9SLCAiQiBQYXJhZ3JhcGhfU2VwYXJhdG9yIiksCisgICAgVmFsdWUoVV9TRUdNRU5UX1NFUEFSQVRPUiwgIlMgU2VnbWVudF9TZXBhcmF0b3IiKSwKKyAgICBWYWx1ZShVX1dISVRFX1NQQUNFX05FVVRSQUwsICJXUyBXaGl0ZV9TcGFjZSIpLAorICAgIFZhbHVlKFVfT1RIRVJfTkVVVFJBTCwgIk9OIE90aGVyX05ldXRyYWwiKSwKKyAgICBWYWx1ZShVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HLCAiTFJFIExlZnRfVG9fUmlnaHRfRW1iZWRkaW5nIiksCisgICAgVmFsdWUoVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFLCAiTFJPIExlZnRfVG9fUmlnaHRfT3ZlcnJpZGUiKSwKKyAgICBWYWx1ZShVX1JJR0hUX1RPX0xFRlRfQVJBQklDLCAiQUwgQXJhYmljX0xldHRlciIpLAorICAgIFZhbHVlKFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcsICJSTEUgUmlnaHRfVG9fTGVmdF9FbWJlZGRpbmciKSwKKyAgICBWYWx1ZShVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUsICJSTE8gUmlnaHRfVG9fTGVmdF9PdmVycmlkZSIpLAorICAgIFZhbHVlKFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCwgIlBERiBQb3BfRGlyZWN0aW9uYWxfRm9ybWF0IiksCisgICAgVmFsdWUoVV9ESVJfTk9OX1NQQUNJTkdfTUFSSywgIk5TTSBOb25zcGFjaW5nX01hcmsiKSwKKyAgICBWYWx1ZShVX0JPVU5EQVJZX05FVVRSQUwsICJCTiBCb3VuZGFyeV9OZXV0cmFsIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2Jsa1syMjFdID0geworICAgIFZhbHVlKFVCTE9DS19OT19CTE9DSywgIk5CIE5vX0Jsb2NrIiksCisgICAgVmFsdWUoVUJMT0NLX0JBU0lDX0xBVElOLCAiQVNDSUkgQmFzaWNfTGF0aW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEFUSU5fMV9TVVBQTEVNRU5ULCAiTGF0aW5fMV9TdXAgTGF0aW5fMV9TdXBwbGVtZW50IExhdGluXzEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEFUSU5fRVhURU5ERURfQSwgIkxhdGluX0V4dF9BIExhdGluX0V4dGVuZGVkX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEFUSU5fRVhURU5ERURfQiwgIkxhdGluX0V4dF9CIExhdGluX0V4dGVuZGVkX0IiKSwKKyAgICBWYWx1ZShVQkxPQ0tfSVBBX0VYVEVOU0lPTlMsICJJUEFfRXh0IElQQV9FeHRlbnNpb25zIiksCisgICAgVmFsdWUoVUJMT0NLX1NQQUNJTkdfTU9ESUZJRVJfTEVUVEVSUywgIk1vZGlmaWVyX0xldHRlcnMgU3BhY2luZ19Nb2RpZmllcl9MZXR0ZXJzIiksCisgICAgVmFsdWUoVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUywgIkRpYWNyaXRpY2FscyBDb21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MiKSwKKyAgICBWYWx1ZShVQkxPQ0tfR1JFRUssICJHcmVlayBHcmVla19BbmRfQ29wdGljIiksCisgICAgVmFsdWUoVUJMT0NLX0NZUklMTElDLCAiQ3lyaWxsaWMgQ3lyaWxsaWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQVJNRU5JQU4sICJBcm1lbmlhbiBBcm1lbmlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19IRUJSRVcsICJIZWJyZXcgSGVicmV3IiksCisgICAgVmFsdWUoVUJMT0NLX0FSQUJJQywgIkFyYWJpYyBBcmFiaWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU1lSSUFDLCAiU3lyaWFjIFN5cmlhYyIpLAorICAgIFZhbHVlKFVCTE9DS19USEFBTkEsICJUaGFhbmEgVGhhYW5hIiksCisgICAgVmFsdWUoVUJMT0NLX0RFVkFOQUdBUkksICJEZXZhbmFnYXJpIERldmFuYWdhcmkiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQkVOR0FMSSwgIkJlbmdhbGkgQmVuZ2FsaSIpLAorICAgIFZhbHVlKFVCTE9DS19HVVJNVUtISSwgIkd1cm11a2hpIEd1cm11a2hpIiksCisgICAgVmFsdWUoVUJMT0NLX0dVSkFSQVRJLCAiR3VqYXJhdGkgR3VqYXJhdGkiKSwKKyAgICBWYWx1ZShVQkxPQ0tfT1JJWUEsICJPcml5YSBPcml5YSIpLAorICAgIFZhbHVlKFVCTE9DS19UQU1JTCwgIlRhbWlsIFRhbWlsIiksCisgICAgVmFsdWUoVUJMT0NLX1RFTFVHVSwgIlRlbHVndSBUZWx1Z3UiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FOTkFEQSwgIkthbm5hZGEgS2FubmFkYSIpLAorICAgIFZhbHVlKFVCTE9DS19NQUxBWUFMQU0sICJNYWxheWFsYW0gTWFsYXlhbGFtIiksCisgICAgVmFsdWUoVUJMT0NLX1NJTkhBTEEsICJTaW5oYWxhIFNpbmhhbGEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfVEhBSSwgIlRoYWkgVGhhaSIpLAorICAgIFZhbHVlKFVCTE9DS19MQU8sICJMYW8gTGFvIiksCisgICAgVmFsdWUoVUJMT0NLX1RJQkVUQU4sICJUaWJldGFuIFRpYmV0YW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfTVlBTk1BUiwgIk15YW5tYXIgTXlhbm1hciIpLAorICAgIFZhbHVlKFVCTE9DS19HRU9SR0lBTiwgIkdlb3JnaWFuIEdlb3JnaWFuIiksCisgICAgVmFsdWUoVUJMT0NLX0hBTkdVTF9KQU1PLCAiSmFtbyBIYW5ndWxfSmFtbyIpLAorICAgIFZhbHVlKFVCTE9DS19FVEhJT1BJQywgIkV0aGlvcGljIEV0aGlvcGljIiksCisgICAgVmFsdWUoVUJMT0NLX0NIRVJPS0VFLCAiQ2hlcm9rZWUgQ2hlcm9rZWUiKSwKKyAgICBWYWx1ZShVQkxPQ0tfVU5JRklFRF9DQU5BRElBTl9BQk9SSUdJTkFMX1NZTExBQklDUywgIlVDQVMgVW5pZmllZF9DYW5hZGlhbl9BYm9yaWdpbmFsX1N5bGxhYmljcyBDYW5hZGlhbl9TeWxsYWJpY3MiKSwKKyAgICBWYWx1ZShVQkxPQ0tfT0dIQU0sICJPZ2hhbSBPZ2hhbSIpLAorICAgIFZhbHVlKFVCTE9DS19SVU5JQywgIlJ1bmljIFJ1bmljIiksCisgICAgVmFsdWUoVUJMT0NLX0tITUVSLCAiS2htZXIgS2htZXIiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTU9OR09MSUFOLCAiTW9uZ29saWFuIE1vbmdvbGlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19MQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMLCAiTGF0aW5fRXh0X0FkZGl0aW9uYWwgTGF0aW5fRXh0ZW5kZWRfQWRkaXRpb25hbCIpLAorICAgIFZhbHVlKFVCTE9DS19HUkVFS19FWFRFTkRFRCwgIkdyZWVrX0V4dCBHcmVla19FeHRlbmRlZCIpLAorICAgIFZhbHVlKFVCTE9DS19HRU5FUkFMX1BVTkNUVUFUSU9OLCAiUHVuY3R1YXRpb24gR2VuZXJhbF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBFUlNDUklQVFNfQU5EX1NVQlNDUklQVFMsICJTdXBlcl9BbmRfU3ViIFN1cGVyc2NyaXB0c19BbmRfU3Vic2NyaXB0cyIpLAorICAgIFZhbHVlKFVCTE9DS19DVVJSRU5DWV9TWU1CT0xTLCAiQ3VycmVuY3lfU3ltYm9scyBDdXJyZW5jeV9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NPTUJJTklOR19NQVJLU19GT1JfU1lNQk9MUywgIkRpYWNyaXRpY2Fsc19Gb3JfU3ltYm9scyBDb21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfRm9yX1N5bWJvbHMgQ29tYmluaW5nX01hcmtzX0Zvcl9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0xFVFRFUkxJS0VfU1lNQk9MUywgIkxldHRlcmxpa2VfU3ltYm9scyBMZXR0ZXJsaWtlX1N5bWJvbHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTlVNQkVSX0ZPUk1TLCAiTnVtYmVyX0Zvcm1zIE51bWJlcl9Gb3JtcyIpLAorICAgIFZhbHVlKFVCTE9DS19BUlJPV1MsICJBcnJvd3MgQXJyb3dzIiksCisgICAgVmFsdWUoVUJMT0NLX01BVEhFTUFUSUNBTF9PUEVSQVRPUlMsICJNYXRoX09wZXJhdG9ycyBNYXRoZW1hdGljYWxfT3BlcmF0b3JzIiksCisgICAgVmFsdWUoVUJMT0NLX01JU0NFTExBTkVPVVNfVEVDSE5JQ0FMLCAiTWlzY19UZWNobmljYWwgTWlzY2VsbGFuZW91c19UZWNobmljYWwiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ09OVFJPTF9QSUNUVVJFUywgIkNvbnRyb2xfUGljdHVyZXMgQ29udHJvbF9QaWN0dXJlcyIpLAorICAgIFZhbHVlKFVCTE9DS19PUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTiwgIk9DUiBPcHRpY2FsX0NoYXJhY3Rlcl9SZWNvZ25pdGlvbiIpLAorICAgIFZhbHVlKFVCTE9DS19FTkNMT1NFRF9BTFBIQU5VTUVSSUNTLCAiRW5jbG9zZWRfQWxwaGFudW0gRW5jbG9zZWRfQWxwaGFudW1lcmljcyIpLAorICAgIFZhbHVlKFVCTE9DS19CT1hfRFJBV0lORywgIkJveF9EcmF3aW5nIEJveF9EcmF3aW5nIiksCisgICAgVmFsdWUoVUJMT0NLX0JMT0NLX0VMRU1FTlRTLCAiQmxvY2tfRWxlbWVudHMgQmxvY2tfRWxlbWVudHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfR0VPTUVUUklDX1NIQVBFUywgIkdlb21ldHJpY19TaGFwZXMgR2VvbWV0cmljX1NoYXBlcyIpLAorICAgIFZhbHVlKFVCTE9DS19NSVNDRUxMQU5FT1VTX1NZTUJPTFMsICJNaXNjX1N5bWJvbHMgTWlzY2VsbGFuZW91c19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0RJTkdCQVRTLCAiRGluZ2JhdHMgRGluZ2JhdHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQlJBSUxMRV9QQVRURVJOUywgIkJyYWlsbGUgQnJhaWxsZV9QYXR0ZXJucyIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfUkFESUNBTFNfU1VQUExFTUVOVCwgIkNKS19SYWRpY2Fsc19TdXAgQ0pLX1JhZGljYWxzX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FOR1hJX1JBRElDQUxTLCAiS2FuZ3hpIEthbmd4aV9SYWRpY2FscyIpLAorICAgIFZhbHVlKFVCTE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTLCAiSURDIElkZW9ncmFwaGljX0Rlc2NyaXB0aW9uX0NoYXJhY3RlcnMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OLCAiQ0pLX1N5bWJvbHMgQ0pLX1N5bWJvbHNfQW5kX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoVUJMT0NLX0hJUkFHQU5BLCAiSGlyYWdhbmEgSGlyYWdhbmEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FUQUtBTkEsICJLYXRha2FuYSBLYXRha2FuYSIpLAorICAgIFZhbHVlKFVCTE9DS19CT1BPTU9GTywgIkJvcG9tb2ZvIEJvcG9tb2ZvIiksCisgICAgVmFsdWUoVUJMT0NLX0hBTkdVTF9DT01QQVRJQklMSVRZX0pBTU8sICJDb21wYXRfSmFtbyBIYW5ndWxfQ29tcGF0aWJpbGl0eV9KYW1vIiksCisgICAgVmFsdWUoVUJMT0NLX0tBTkJVTiwgIkthbmJ1biBLYW5idW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQsICJCb3BvbW9mb19FeHQgQm9wb21vZm9fRXh0ZW5kZWQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRU5DTE9TRURfQ0pLX0xFVFRFUlNfQU5EX01PTlRIUywgIkVuY2xvc2VkX0NKSyBFbmNsb3NlZF9DSktfTGV0dGVyc19BbmRfTW9udGhzIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19DT01QQVRJQklMSVRZLCAiQ0pLX0NvbXBhdCBDSktfQ29tcGF0aWJpbGl0eSIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9BLCAiQ0pLX0V4dF9BIENKS19VbmlmaWVkX0lkZW9ncmFwaHNfRXh0ZW5zaW9uX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIUywgIkNKSyBDSktfVW5pZmllZF9JZGVvZ3JhcGhzIiksCisgICAgVmFsdWUoVUJMT0NLX1lJX1NZTExBQkxFUywgIllpX1N5bGxhYmxlcyBZaV9TeWxsYWJsZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfWUlfUkFESUNBTFMsICJZaV9SYWRpY2FscyBZaV9SYWRpY2FscyIpLAorICAgIFZhbHVlKFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTLCAiSGFuZ3VsIEhhbmd1bF9TeWxsYWJsZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfSElHSF9TVVJST0dBVEVTLCAiSGlnaF9TdXJyb2dhdGVzIEhpZ2hfU3Vycm9nYXRlcyIpLAorICAgIFZhbHVlKFVCTE9DS19ISUdIX1BSSVZBVEVfVVNFX1NVUlJPR0FURVMsICJIaWdoX1BVX1N1cnJvZ2F0ZXMgSGlnaF9Qcml2YXRlX1VzZV9TdXJyb2dhdGVzIiksCisgICAgVmFsdWUoVUJMT0NLX0xPV19TVVJST0dBVEVTLCAiTG93X1N1cnJvZ2F0ZXMgTG93X1N1cnJvZ2F0ZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfUFJJVkFURV9VU0VfQVJFQSwgIlBVQSBQcml2YXRlX1VzZV9BcmVhIFByaXZhdGVfVXNlIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFMsICJDSktfQ29tcGF0X0lkZW9ncmFwaHMgQ0pLX0NvbXBhdGliaWxpdHlfSWRlb2dyYXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19BTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUywgIkFscGhhYmV0aWNfUEYgQWxwaGFiZXRpY19QcmVzZW50YXRpb25fRm9ybXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19BLCAiQXJhYmljX1BGX0EgQXJhYmljX1ByZXNlbnRhdGlvbl9Gb3Jtc19BIEFyYWJpY19QcmVzZW50YXRpb25fRm9ybXMtQSIpLAorICAgIFZhbHVlKFVCTE9DS19DT01CSU5JTkdfSEFMRl9NQVJLUywgIkhhbGZfTWFya3MgQ29tYmluaW5nX0hhbGZfTWFya3MiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVMsICJDSktfQ29tcGF0X0Zvcm1zIENKS19Db21wYXRpYmlsaXR5X0Zvcm1zIiksCisgICAgVmFsdWUoVUJMT0NLX1NNQUxMX0ZPUk1fVkFSSUFOVFMsICJTbWFsbF9Gb3JtcyBTbWFsbF9Gb3JtX1ZhcmlhbnRzIiksCisgICAgVmFsdWUoVUJMT0NLX0FSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQiwgIkFyYWJpY19QRl9CIEFyYWJpY19QcmVzZW50YXRpb25fRm9ybXNfQiIpLAorICAgIFZhbHVlKFVCTE9DS19TUEVDSUFMUywgIlNwZWNpYWxzIFNwZWNpYWxzIiksCisgICAgVmFsdWUoVUJMT0NLX0hBTEZXSURUSF9BTkRfRlVMTFdJRFRIX0ZPUk1TLCAiSGFsZl9BbmRfRnVsbF9Gb3JtcyBIYWxmd2lkdGhfQW5kX0Z1bGx3aWR0aF9Gb3JtcyIpLAorICAgIFZhbHVlKFVCTE9DS19PTERfSVRBTElDLCAiT2xkX0l0YWxpYyBPbGRfSXRhbGljIiksCisgICAgVmFsdWUoVUJMT0NLX0dPVEhJQywgIkdvdGhpYyBHb3RoaWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfREVTRVJFVCwgIkRlc2VyZXQgRGVzZXJldCIpLAorICAgIFZhbHVlKFVCTE9DS19CWVpBTlRJTkVfTVVTSUNBTF9TWU1CT0xTLCAiQnl6YW50aW5lX011c2ljIEJ5emFudGluZV9NdXNpY2FsX1N5bWJvbHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTVVTSUNBTF9TWU1CT0xTLCAiTXVzaWMgTXVzaWNhbF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX01BVEhFTUFUSUNBTF9BTFBIQU5VTUVSSUNfU1lNQk9MUywgIk1hdGhfQWxwaGFudW0gTWF0aGVtYXRpY2FsX0FscGhhbnVtZXJpY19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0IsICJDSktfRXh0X0IgQ0pLX1VuaWZpZWRfSWRlb2dyYXBoc19FeHRlbnNpb25fQiIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQsICJDSktfQ29tcGF0X0lkZW9ncmFwaHNfU3VwIENKS19Db21wYXRpYmlsaXR5X0lkZW9ncmFwaHNfU3VwcGxlbWVudCIpLAorICAgIFZhbHVlKFVCTE9DS19UQUdTLCAiVGFncyBUYWdzIiksCisgICAgVmFsdWUoVUJMT0NLX0NZUklMTElDX1NVUFBMRU1FTlQsICJDeXJpbGxpY19TdXAgQ3lyaWxsaWNfU3VwcGxlbWVudCBDeXJpbGxpY19TdXBwbGVtZW50YXJ5IiksCisgICAgVmFsdWUoVUJMT0NLX1RBR0FMT0csICJUYWdhbG9nIFRhZ2Fsb2ciKSwKKyAgICBWYWx1ZShVQkxPQ0tfSEFOVU5PTywgIkhhbnVub28gSGFudW5vbyIpLAorICAgIFZhbHVlKFVCTE9DS19CVUhJRCwgIkJ1aGlkIEJ1aGlkIiksCisgICAgVmFsdWUoVUJMT0NLX1RBR0JBTldBLCAiVGFnYmFud2EgVGFnYmFud2EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUlTQ0VMTEFORU9VU19NQVRIRU1BVElDQUxfU1lNQk9MU19BLCAiTWlzY19NYXRoX1N5bWJvbHNfQSBNaXNjZWxsYW5lb3VzX01hdGhlbWF0aWNhbF9TeW1ib2xzX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU1VQUExFTUVOVEFMX0FSUk9XU19BLCAiU3VwX0Fycm93c19BIFN1cHBsZW1lbnRhbF9BcnJvd3NfQSIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBQTEVNRU5UQUxfQVJST1dTX0IsICJTdXBfQXJyb3dzX0IgU3VwcGxlbWVudGFsX0Fycm93c19CIiksCisgICAgVmFsdWUoVUJMT0NLX01JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQiwgIk1pc2NfTWF0aF9TeW1ib2xzX0IgTWlzY2VsbGFuZW91c19NYXRoZW1hdGljYWxfU3ltYm9sc19CIiksCisgICAgVmFsdWUoVUJMT0NLX1NVUFBMRU1FTlRBTF9NQVRIRU1BVElDQUxfT1BFUkFUT1JTLCAiU3VwX01hdGhfT3BlcmF0b3JzIFN1cHBsZW1lbnRhbF9NYXRoZW1hdGljYWxfT3BlcmF0b3JzIiksCisgICAgVmFsdWUoVUJMT0NLX0tBVEFLQU5BX1BIT05FVElDX0VYVEVOU0lPTlMsICJLYXRha2FuYV9FeHQgS2F0YWthbmFfUGhvbmV0aWNfRXh0ZW5zaW9ucyIpLAorICAgIFZhbHVlKFVCTE9DS19WQVJJQVRJT05fU0VMRUNUT1JTLCAiVlMgVmFyaWF0aW9uX1NlbGVjdG9ycyIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQSwgIlN1cF9QVUFfQSBTdXBwbGVtZW50YXJ5X1ByaXZhdGVfVXNlX0FyZWFfQSIpLAorICAgIFZhbHVlKFVCTE9DS19TVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQiwgIlN1cF9QVUFfQiBTdXBwbGVtZW50YXJ5X1ByaXZhdGVfVXNlX0FyZWFfQiIpLAorICAgIFZhbHVlKFVCTE9DS19MSU1CVSwgIkxpbWJ1IExpbWJ1IiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9MRSwgIlRhaV9MZSBUYWlfTGUiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0hNRVJfU1lNQk9MUywgIktobWVyX1N5bWJvbHMgS2htZXJfU3ltYm9scyIpLAorICAgIFZhbHVlKFVCTE9DS19QSE9ORVRJQ19FWFRFTlNJT05TLCAiUGhvbmV0aWNfRXh0IFBob25ldGljX0V4dGVuc2lvbnMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9BUlJPV1MsICJNaXNjX0Fycm93cyBNaXNjZWxsYW5lb3VzX1N5bWJvbHNfQW5kX0Fycm93cyIpLAorICAgIFZhbHVlKFVCTE9DS19ZSUpJTkdfSEVYQUdSQU1fU1lNQk9MUywgIllpamluZyBZaWppbmdfSGV4YWdyYW1fU3ltYm9scyIpLAorICAgIFZhbHVlKFVCTE9DS19MSU5FQVJfQl9TWUxMQUJBUlksICJMaW5lYXJfQl9TeWxsYWJhcnkgTGluZWFyX0JfU3lsbGFiYXJ5IiksCisgICAgVmFsdWUoVUJMT0NLX0xJTkVBUl9CX0lERU9HUkFNUywgIkxpbmVhcl9CX0lkZW9ncmFtcyBMaW5lYXJfQl9JZGVvZ3JhbXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQUVHRUFOX05VTUJFUlMsICJBZWdlYW5fTnVtYmVycyBBZWdlYW5fTnVtYmVycyIpLAorICAgIFZhbHVlKFVCTE9DS19VR0FSSVRJQywgIlVnYXJpdGljIFVnYXJpdGljIiksCisgICAgVmFsdWUoVUJMT0NLX1NIQVZJQU4sICJTaGF2aWFuIFNoYXZpYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfT1NNQU5ZQSwgIk9zbWFueWEgT3NtYW55YSIpLAorICAgIFZhbHVlKFVCTE9DS19DWVBSSU9UX1NZTExBQkFSWSwgIkN5cHJpb3RfU3lsbGFiYXJ5IEN5cHJpb3RfU3lsbGFiYXJ5IiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9YVUFOX0pJTkdfU1lNQk9MUywgIlRhaV9YdWFuX0ppbmcgVGFpX1h1YW5fSmluZ19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX1ZBUklBVElPTl9TRUxFQ1RPUlNfU1VQUExFTUVOVCwgIlZTX1N1cCBWYXJpYXRpb25fU2VsZWN0b3JzX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQU5DSUVOVF9HUkVFS19NVVNJQ0FMX05PVEFUSU9OLCAiQW5jaWVudF9HcmVla19NdXNpYyBBbmNpZW50X0dyZWVrX011c2ljYWxfTm90YXRpb24iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQU5DSUVOVF9HUkVFS19OVU1CRVJTLCAiQW5jaWVudF9HcmVla19OdW1iZXJzIEFuY2llbnRfR3JlZWtfTnVtYmVycyIpLAorICAgIFZhbHVlKFVCTE9DS19BUkFCSUNfU1VQUExFTUVOVCwgIkFyYWJpY19TdXAgQXJhYmljX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQlVHSU5FU0UsICJCdWdpbmVzZSBCdWdpbmVzZSIpLAorICAgIFZhbHVlKFVCTE9DS19DSktfU1RST0tFUywgIkNKS19TdHJva2VzIENKS19TdHJva2VzIiksCisgICAgVmFsdWUoVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLU19TVVBQTEVNRU5ULCAiRGlhY3JpdGljYWxzX1N1cCBDb21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfU3VwcGxlbWVudCIpLAorICAgIFZhbHVlKFVCTE9DS19DT1BUSUMsICJDb3B0aWMgQ29wdGljIiksCisgICAgVmFsdWUoVUJMT0NLX0VUSElPUElDX0VYVEVOREVELCAiRXRoaW9waWNfRXh0IEV0aGlvcGljX0V4dGVuZGVkIiksCisgICAgVmFsdWUoVUJMT0NLX0VUSElPUElDX1NVUFBMRU1FTlQsICJFdGhpb3BpY19TdXAgRXRoaW9waWNfU3VwcGxlbWVudCIpLAorICAgIFZhbHVlKFVCTE9DS19HRU9SR0lBTl9TVVBQTEVNRU5ULCAiR2VvcmdpYW5fU3VwIEdlb3JnaWFuX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfR0xBR09MSVRJQywgIkdsYWdvbGl0aWMgR2xhZ29saXRpYyIpLAorICAgIFZhbHVlKFVCTE9DS19LSEFST1NIVEhJLCAiS2hhcm9zaHRoaSBLaGFyb3NodGhpIiksCisgICAgVmFsdWUoVUJMT0NLX01PRElGSUVSX1RPTkVfTEVUVEVSUywgIk1vZGlmaWVyX1RvbmVfTGV0dGVycyBNb2RpZmllcl9Ub25lX0xldHRlcnMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTkVXX1RBSV9MVUUsICJOZXdfVGFpX0x1ZSBOZXdfVGFpX0x1ZSIpLAorICAgIFZhbHVlKFVCTE9DS19PTERfUEVSU0lBTiwgIk9sZF9QZXJzaWFuIE9sZF9QZXJzaWFuIiksCisgICAgVmFsdWUoVUJMT0NLX1BIT05FVElDX0VYVEVOU0lPTlNfU1VQUExFTUVOVCwgIlBob25ldGljX0V4dF9TdXAgUGhvbmV0aWNfRXh0ZW5zaW9uc19TdXBwbGVtZW50IiksCisgICAgVmFsdWUoVUJMT0NLX1NVUFBMRU1FTlRBTF9QVU5DVFVBVElPTiwgIlN1cF9QdW5jdHVhdGlvbiBTdXBwbGVtZW50YWxfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZShVQkxPQ0tfU1lMT1RJX05BR1JJLCAiU3lsb3RpX05hZ3JpIFN5bG90aV9OYWdyaSIpLAorICAgIFZhbHVlKFVCTE9DS19USUZJTkFHSCwgIlRpZmluYWdoIFRpZmluYWdoIiksCisgICAgVmFsdWUoVUJMT0NLX1ZFUlRJQ0FMX0ZPUk1TLCAiVmVydGljYWxfRm9ybXMgVmVydGljYWxfRm9ybXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTktPLCAiTktvIE5LbyIpLAorICAgIFZhbHVlKFVCTE9DS19CQUxJTkVTRSwgIkJhbGluZXNlIEJhbGluZXNlIiksCisgICAgVmFsdWUoVUJMT0NLX0xBVElOX0VYVEVOREVEX0MsICJMYXRpbl9FeHRfQyBMYXRpbl9FeHRlbmRlZF9DIiksCisgICAgVmFsdWUoVUJMT0NLX0xBVElOX0VYVEVOREVEX0QsICJMYXRpbl9FeHRfRCBMYXRpbl9FeHRlbmRlZF9EIiksCisgICAgVmFsdWUoVUJMT0NLX1BIQUdTX1BBLCAiUGhhZ3NfUGEgUGhhZ3NfUGEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfUEhPRU5JQ0lBTiwgIlBob2VuaWNpYW4gUGhvZW5pY2lhbiIpLAorICAgIFZhbHVlKFVCTE9DS19DVU5FSUZPUk0sICJDdW5laWZvcm0gQ3VuZWlmb3JtIiksCisgICAgVmFsdWUoVUJMT0NLX0NVTkVJRk9STV9OVU1CRVJTX0FORF9QVU5DVFVBVElPTiwgIkN1bmVpZm9ybV9OdW1iZXJzIEN1bmVpZm9ybV9OdW1iZXJzX0FuZF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVCTE9DS19DT1VOVElOR19ST0RfTlVNRVJBTFMsICJDb3VudGluZ19Sb2QgQ291bnRpbmdfUm9kX051bWVyYWxzIiksCisgICAgVmFsdWUoVUJMT0NLX1NVTkRBTkVTRSwgIlN1bmRhbmVzZSBTdW5kYW5lc2UiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTEVQQ0hBLCAiTGVwY2hhIExlcGNoYSIpLAorICAgIFZhbHVlKFVCTE9DS19PTF9DSElLSSwgIk9sX0NoaWtpIE9sX0NoaWtpIiksCisgICAgVmFsdWUoVUJMT0NLX0NZUklMTElDX0VYVEVOREVEX0EsICJDeXJpbGxpY19FeHRfQSBDeXJpbGxpY19FeHRlbmRlZF9BIiksCisgICAgVmFsdWUoVUJMT0NLX1ZBSSwgIlZhaSBWYWkiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ1lSSUxMSUNfRVhURU5ERURfQiwgIkN5cmlsbGljX0V4dF9CIEN5cmlsbGljX0V4dGVuZGVkX0IiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU0FVUkFTSFRSQSwgIlNhdXJhc2h0cmEgU2F1cmFzaHRyYSIpLAorICAgIFZhbHVlKFVCTE9DS19LQVlBSF9MSSwgIktheWFoX0xpIEtheWFoX0xpIiksCisgICAgVmFsdWUoVUJMT0NLX1JFSkFORywgIlJlamFuZyBSZWphbmciKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0hBTSwgIkNoYW0gQ2hhbSIpLAorICAgIFZhbHVlKFVCTE9DS19BTkNJRU5UX1NZTUJPTFMsICJBbmNpZW50X1N5bWJvbHMgQW5jaWVudF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX1BIQUlTVE9TX0RJU0MsICJQaGFpc3RvcyBQaGFpc3Rvc19EaXNjIiksCisgICAgVmFsdWUoVUJMT0NLX0xZQ0lBTiwgIkx5Y2lhbiBMeWNpYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfQ0FSSUFOLCAiQ2FyaWFuIENhcmlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19MWURJQU4sICJMeWRpYW4gTHlkaWFuIiksCisgICAgVmFsdWUoVUJMT0NLX01BSEpPTkdfVElMRVMsICJNYWhqb25nIE1haGpvbmdfVGlsZXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRE9NSU5PX1RJTEVTLCAiRG9taW5vIERvbWlub19UaWxlcyIpLAorICAgIFZhbHVlKFVCTE9DS19TQU1BUklUQU4sICJTYW1hcml0YW4gU2FtYXJpdGFuIiksCisgICAgVmFsdWUoVUJMT0NLX1VOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1NfRVhURU5ERUQsICJVQ0FTX0V4dCBVbmlmaWVkX0NhbmFkaWFuX0Fib3JpZ2luYWxfU3lsbGFiaWNzX0V4dGVuZGVkIiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9USEFNLCAiVGFpX1RoYW0gVGFpX1RoYW0iKSwKKyAgICBWYWx1ZShVQkxPQ0tfVkVESUNfRVhURU5TSU9OUywgIlZlZGljX0V4dCBWZWRpY19FeHRlbnNpb25zIiksCisgICAgVmFsdWUoVUJMT0NLX0xJU1UsICJMaXN1IExpc3UiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQkFNVU0sICJCYW11bSBCYW11bSIpLAorICAgIFZhbHVlKFVCTE9DS19DT01NT05fSU5ESUNfTlVNQkVSX0ZPUk1TLCAiSW5kaWNfTnVtYmVyX0Zvcm1zIENvbW1vbl9JbmRpY19OdW1iZXJfRm9ybXMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfREVWQU5BR0FSSV9FWFRFTkRFRCwgIkRldmFuYWdhcmlfRXh0IERldmFuYWdhcmlfRXh0ZW5kZWQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQSwgIkphbW9fRXh0X0EgSGFuZ3VsX0phbW9fRXh0ZW5kZWRfQSIpLAorICAgIFZhbHVlKFVCTE9DS19KQVZBTkVTRSwgIkphdmFuZXNlIEphdmFuZXNlIiksCisgICAgVmFsdWUoVUJMT0NLX01ZQU5NQVJfRVhURU5ERURfQSwgIk15YW5tYXJfRXh0X0EgTXlhbm1hcl9FeHRlbmRlZF9BIiksCisgICAgVmFsdWUoVUJMT0NLX1RBSV9WSUVULCAiVGFpX1ZpZXQgVGFpX1ZpZXQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUVFVEVJX01BWUVLLCAiTWVldGVpX01heWVrIE1lZXRlaV9NYXllayIpLAorICAgIFZhbHVlKFVCTE9DS19IQU5HVUxfSkFNT19FWFRFTkRFRF9CLCAiSmFtb19FeHRfQiBIYW5ndWxfSmFtb19FeHRlbmRlZF9CIiksCisgICAgVmFsdWUoVUJMT0NLX0lNUEVSSUFMX0FSQU1BSUMsICJJbXBlcmlhbF9BcmFtYWljIEltcGVyaWFsX0FyYW1haWMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfT0xEX1NPVVRIX0FSQUJJQU4sICJPbGRfU291dGhfQXJhYmlhbiBPbGRfU291dGhfQXJhYmlhbiIpLAorICAgIFZhbHVlKFVCTE9DS19BVkVTVEFOLCAiQXZlc3RhbiBBdmVzdGFuIiksCisgICAgVmFsdWUoVUJMT0NLX0lOU0NSSVBUSU9OQUxfUEFSVEhJQU4sICJJbnNjcmlwdGlvbmFsX1BhcnRoaWFuIEluc2NyaXB0aW9uYWxfUGFydGhpYW4iKSwKKyAgICBWYWx1ZShVQkxPQ0tfSU5TQ1JJUFRJT05BTF9QQUhMQVZJLCAiSW5zY3JpcHRpb25hbF9QYWhsYXZpIEluc2NyaXB0aW9uYWxfUGFobGF2aSIpLAorICAgIFZhbHVlKFVCTE9DS19PTERfVFVSS0lDLCAiT2xkX1R1cmtpYyBPbGRfVHVya2ljIiksCisgICAgVmFsdWUoVUJMT0NLX1JVTUlfTlVNRVJBTF9TWU1CT0xTLCAiUnVtaSBSdW1pX051bWVyYWxfU3ltYm9scyIpLAorICAgIFZhbHVlKFVCTE9DS19LQUlUSEksICJLYWl0aGkgS2FpdGhpIiksCisgICAgVmFsdWUoVUJMT0NLX0VHWVBUSUFOX0hJRVJPR0xZUEhTLCAiRWd5cHRpYW5fSGllcm9nbHlwaHMgRWd5cHRpYW5fSGllcm9nbHlwaHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRU5DTE9TRURfQUxQSEFOVU1FUklDX1NVUFBMRU1FTlQsICJFbmNsb3NlZF9BbHBoYW51bV9TdXAgRW5jbG9zZWRfQWxwaGFudW1lcmljX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRU5DTE9TRURfSURFT0dSQVBISUNfU1VQUExFTUVOVCwgIkVuY2xvc2VkX0lkZW9ncmFwaGljX1N1cCBFbmNsb3NlZF9JZGVvZ3JhcGhpY19TdXBwbGVtZW50IiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0MsICJDSktfRXh0X0MgQ0pLX1VuaWZpZWRfSWRlb2dyYXBoc19FeHRlbnNpb25fQyIpLAorICAgIFZhbHVlKFVCTE9DS19NQU5EQUlDLCAiTWFuZGFpYyBNYW5kYWljIiksCisgICAgVmFsdWUoVUJMT0NLX0JBVEFLLCAiQmF0YWsgQmF0YWsiKSwKKyAgICBWYWx1ZShVQkxPQ0tfRVRISU9QSUNfRVhURU5ERURfQSwgIkV0aGlvcGljX0V4dF9BIEV0aGlvcGljX0V4dGVuZGVkX0EiKSwKKyAgICBWYWx1ZShVQkxPQ0tfQlJBSE1JLCAiQnJhaG1pIEJyYWhtaSIpLAorICAgIFZhbHVlKFVCTE9DS19CQU1VTV9TVVBQTEVNRU5ULCAiQmFtdW1fU3VwIEJhbXVtX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfS0FOQV9TVVBQTEVNRU5ULCAiS2FuYV9TdXAgS2FuYV9TdXBwbGVtZW50IiksCisgICAgVmFsdWUoVUJMT0NLX1BMQVlJTkdfQ0FSRFMsICJQbGF5aW5nX0NhcmRzIFBsYXlpbmdfQ2FyZHMiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9QSUNUT0dSQVBIUywgIk1pc2NfUGljdG9ncmFwaHMgTWlzY2VsbGFuZW91c19TeW1ib2xzX0FuZF9QaWN0b2dyYXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19FTU9USUNPTlMsICJFbW90aWNvbnMgRW1vdGljb25zIiksCisgICAgVmFsdWUoVUJMT0NLX1RSQU5TUE9SVF9BTkRfTUFQX1NZTUJPTFMsICJUcmFuc3BvcnRfQW5kX01hcCBUcmFuc3BvcnRfQW5kX01hcF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0FMQ0hFTUlDQUxfU1lNQk9MUywgIkFsY2hlbWljYWwgQWxjaGVtaWNhbF9TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0QsICJDSktfRXh0X0QgQ0pLX1VuaWZpZWRfSWRlb2dyYXBoc19FeHRlbnNpb25fRCIpLAorICAgIFZhbHVlKFVCTE9DS19BUkFCSUNfRVhURU5ERURfQSwgIkFyYWJpY19FeHRfQSBBcmFiaWNfRXh0ZW5kZWRfQSIpLAorICAgIFZhbHVlKFVCTE9DS19BUkFCSUNfTUFUSEVNQVRJQ0FMX0FMUEhBQkVUSUNfU1lNQk9MUywgIkFyYWJpY19NYXRoIEFyYWJpY19NYXRoZW1hdGljYWxfQWxwaGFiZXRpY19TeW1ib2xzIiksCisgICAgVmFsdWUoVUJMT0NLX0NIQUtNQSwgIkNoYWttYSBDaGFrbWEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUVFVEVJX01BWUVLX0VYVEVOU0lPTlMsICJNZWV0ZWlfTWF5ZWtfRXh0IE1lZXRlaV9NYXlla19FeHRlbnNpb25zIiksCisgICAgVmFsdWUoVUJMT0NLX01FUk9JVElDX0NVUlNJVkUsICJNZXJvaXRpY19DdXJzaXZlIE1lcm9pdGljX0N1cnNpdmUiKSwKKyAgICBWYWx1ZShVQkxPQ0tfTUVST0lUSUNfSElFUk9HTFlQSFMsICJNZXJvaXRpY19IaWVyb2dseXBocyBNZXJvaXRpY19IaWVyb2dseXBocyIpLAorICAgIFZhbHVlKFVCTE9DS19NSUFPLCAiTWlhbyBNaWFvIiksCisgICAgVmFsdWUoVUJMT0NLX1NIQVJBREEsICJTaGFyYWRhIFNoYXJhZGEiKSwKKyAgICBWYWx1ZShVQkxPQ0tfU09SQV9TT01QRU5HLCAiU29yYV9Tb21wZW5nIFNvcmFfU29tcGVuZyIpLAorICAgIFZhbHVlKFVCTE9DS19TVU5EQU5FU0VfU1VQUExFTUVOVCwgIlN1bmRhbmVzZV9TdXAgU3VuZGFuZXNlX1N1cHBsZW1lbnQiKSwKKyAgICBWYWx1ZShVQkxPQ0tfVEFLUkksICJUYWtyaSBUYWtyaSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19jY2NbNTddID0geworICAgIFZhbHVlKDAsICJOUiBOb3RfUmVvcmRlcmVkIiksCisgICAgVmFsdWUoMSwgIk9WIE92ZXJsYXkiKSwKKyAgICBWYWx1ZSg3LCAiTksgTnVrdGEiKSwKKyAgICBWYWx1ZSg4LCAiS1YgS2FuYV9Wb2ljaW5nIiksCisgICAgVmFsdWUoOSwgIlZSIFZpcmFtYSIpLAorICAgIFZhbHVlKDEwLCAiQ0NDMTAgQ0NDMTAiKSwKKyAgICBWYWx1ZSgxMSwgIkNDQzExIENDQzExIiksCisgICAgVmFsdWUoMTIsICJDQ0MxMiBDQ0MxMiIpLAorICAgIFZhbHVlKDEzLCAiQ0NDMTMgQ0NDMTMiKSwKKyAgICBWYWx1ZSgxNCwgIkNDQzE0IENDQzE0IiksCisgICAgVmFsdWUoMTUsICJDQ0MxNSBDQ0MxNSIpLAorICAgIFZhbHVlKDE2LCAiQ0NDMTYgQ0NDMTYiKSwKKyAgICBWYWx1ZSgxNywgIkNDQzE3IENDQzE3IiksCisgICAgVmFsdWUoMTgsICJDQ0MxOCBDQ0MxOCIpLAorICAgIFZhbHVlKDE5LCAiQ0NDMTkgQ0NDMTkiKSwKKyAgICBWYWx1ZSgyMCwgIkNDQzIwIENDQzIwIiksCisgICAgVmFsdWUoMjEsICJDQ0MyMSBDQ0MyMSIpLAorICAgIFZhbHVlKDIyLCAiQ0NDMjIgQ0NDMjIiKSwKKyAgICBWYWx1ZSgyMywgIkNDQzIzIENDQzIzIiksCisgICAgVmFsdWUoMjQsICJDQ0MyNCBDQ0MyNCIpLAorICAgIFZhbHVlKDI1LCAiQ0NDMjUgQ0NDMjUiKSwKKyAgICBWYWx1ZSgyNiwgIkNDQzI2IENDQzI2IiksCisgICAgVmFsdWUoMjcsICJDQ0MyNyBDQ0MyNyIpLAorICAgIFZhbHVlKDI4LCAiQ0NDMjggQ0NDMjgiKSwKKyAgICBWYWx1ZSgyOSwgIkNDQzI5IENDQzI5IiksCisgICAgVmFsdWUoMzAsICJDQ0MzMCBDQ0MzMCIpLAorICAgIFZhbHVlKDMxLCAiQ0NDMzEgQ0NDMzEiKSwKKyAgICBWYWx1ZSgzMiwgIkNDQzMyIENDQzMyIiksCisgICAgVmFsdWUoMzMsICJDQ0MzMyBDQ0MzMyIpLAorICAgIFZhbHVlKDM0LCAiQ0NDMzQgQ0NDMzQiKSwKKyAgICBWYWx1ZSgzNSwgIkNDQzM1IENDQzM1IiksCisgICAgVmFsdWUoMzYsICJDQ0MzNiBDQ0MzNiIpLAorICAgIFZhbHVlKDg0LCAiQ0NDODQgQ0NDODQiKSwKKyAgICBWYWx1ZSg5MSwgIkNDQzkxIENDQzkxIiksCisgICAgVmFsdWUoMTAzLCAiQ0NDMTAzIENDQzEwMyIpLAorICAgIFZhbHVlKDEwNywgIkNDQzEwNyBDQ0MxMDciKSwKKyAgICBWYWx1ZSgxMTgsICJDQ0MxMTggQ0NDMTE4IiksCisgICAgVmFsdWUoMTIyLCAiQ0NDMTIyIENDQzEyMiIpLAorICAgIFZhbHVlKDEyOSwgIkNDQzEyOSBDQ0MxMjkiKSwKKyAgICBWYWx1ZSgxMzAsICJDQ0MxMzAgQ0NDMTMwIiksCisgICAgVmFsdWUoMTMyLCAiQ0NDMTMyIENDQzEzMiIpLAorICAgIFZhbHVlKDEzMywgIkNDQzEzMyBDQ0MxMzMiKSwKKyAgICBWYWx1ZSgyMDAsICJBVEJMIEF0dGFjaGVkX0JlbG93X0xlZnQiKSwKKyAgICBWYWx1ZSgyMDIsICJBVEIgQXR0YWNoZWRfQmVsb3ciKSwKKyAgICBWYWx1ZSgyMTQsICJBVEEgQXR0YWNoZWRfQWJvdmUiKSwKKyAgICBWYWx1ZSgyMTYsICJBVEFSIEF0dGFjaGVkX0Fib3ZlX1JpZ2h0IiksCisgICAgVmFsdWUoMjE4LCAiQkwgQmVsb3dfTGVmdCIpLAorICAgIFZhbHVlKDIyMCwgIkIgQmVsb3ciKSwKKyAgICBWYWx1ZSgyMjIsICJCUiBCZWxvd19SaWdodCIpLAorICAgIFZhbHVlKDIyNCwgIkwgTGVmdCIpLAorICAgIFZhbHVlKDIyNiwgIlIgUmlnaHQiKSwKKyAgICBWYWx1ZSgyMjgsICJBTCBBYm92ZV9MZWZ0IiksCisgICAgVmFsdWUoMjMwLCAiQSBBYm92ZSIpLAorICAgIFZhbHVlKDIzMiwgIkFSIEFib3ZlX1JpZ2h0IiksCisgICAgVmFsdWUoMjMzLCAiREIgRG91YmxlX0JlbG93IiksCisgICAgVmFsdWUoMjM0LCAiREEgRG91YmxlX0Fib3ZlIiksCisgICAgVmFsdWUoMjQwLCAiSVMgSW90YV9TdWJzY3JpcHQiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfZHRbMThdID0geworICAgIFZhbHVlKFVfRFRfTk9ORSwgIk5vbmUgTm9uZSBub25lIiksCisgICAgVmFsdWUoVV9EVF9DQU5PTklDQUwsICJDYW4gQ2Fub25pY2FsIGNhbiIpLAorICAgIFZhbHVlKFVfRFRfQ09NUEFULCAiQ29tIENvbXBhdCBjb20iKSwKKyAgICBWYWx1ZShVX0RUX0NJUkNMRSwgIkVuYyBDaXJjbGUgZW5jIiksCisgICAgVmFsdWUoVV9EVF9GSU5BTCwgIkZpbiBGaW5hbCBmaW4iKSwKKyAgICBWYWx1ZShVX0RUX0ZPTlQsICJGb250IEZvbnQgZm9udCIpLAorICAgIFZhbHVlKFVfRFRfRlJBQ1RJT04sICJGcmEgRnJhY3Rpb24gZnJhIiksCisgICAgVmFsdWUoVV9EVF9JTklUSUFMLCAiSW5pdCBJbml0aWFsIGluaXQiKSwKKyAgICBWYWx1ZShVX0RUX0lTT0xBVEVELCAiSXNvIElzb2xhdGVkIGlzbyIpLAorICAgIFZhbHVlKFVfRFRfTUVESUFMLCAiTWVkIE1lZGlhbCBtZWQiKSwKKyAgICBWYWx1ZShVX0RUX05BUlJPVywgIk5hciBOYXJyb3cgbmFyIiksCisgICAgVmFsdWUoVV9EVF9OT0JSRUFLLCAiTmIgTm9icmVhayBuYiIpLAorICAgIFZhbHVlKFVfRFRfU01BTEwsICJTbWwgU21hbGwgc21sIiksCisgICAgVmFsdWUoVV9EVF9TUVVBUkUsICJTcXIgU3F1YXJlIHNxciIpLAorICAgIFZhbHVlKFVfRFRfU1VCLCAiU3ViIFN1YiBzdWIiKSwKKyAgICBWYWx1ZShVX0RUX1NVUEVSLCAiU3VwIFN1cGVyIHN1cCIpLAorICAgIFZhbHVlKFVfRFRfVkVSVElDQUwsICJWZXJ0IFZlcnRpY2FsIHZlcnQiKSwKKyAgICBWYWx1ZShVX0RUX1dJREUsICJXaWRlIFdpZGUgd2lkZSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19lYVs2XSA9IHsKKyAgICBWYWx1ZShVX0VBX05FVVRSQUwsICJOIE5ldXRyYWwiKSwKKyAgICBWYWx1ZShVX0VBX0FNQklHVU9VUywgIkEgQW1iaWd1b3VzIiksCisgICAgVmFsdWUoVV9FQV9IQUxGV0lEVEgsICJIIEhhbGZ3aWR0aCIpLAorICAgIFZhbHVlKFVfRUFfRlVMTFdJRFRILCAiRiBGdWxsd2lkdGgiKSwKKyAgICBWYWx1ZShVX0VBX05BUlJPVywgIk5hIE5hcnJvdyIpLAorICAgIFZhbHVlKFVfRUFfV0lERSwgIlcgV2lkZSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19nY1szMF0gPSB7CisgICAgVmFsdWUoVV9HRU5FUkFMX09USEVSX1RZUEVTLCAiQ24gVW5hc3NpZ25lZCIpLAorICAgIFZhbHVlKFVfVVBQRVJDQVNFX0xFVFRFUiwgIkx1IFVwcGVyY2FzZV9MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX0xPV0VSQ0FTRV9MRVRURVIsICJMbCBMb3dlcmNhc2VfTGV0dGVyIiksCisgICAgVmFsdWUoVV9USVRMRUNBU0VfTEVUVEVSLCAiTHQgVGl0bGVjYXNlX0xldHRlciIpLAorICAgIFZhbHVlKFVfTU9ESUZJRVJfTEVUVEVSLCAiTG0gTW9kaWZpZXJfTGV0dGVyIiksCisgICAgVmFsdWUoVV9PVEhFUl9MRVRURVIsICJMbyBPdGhlcl9MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX05PTl9TUEFDSU5HX01BUkssICJNbiBOb25zcGFjaW5nX01hcmsiKSwKKyAgICBWYWx1ZShVX0VOQ0xPU0lOR19NQVJLLCAiTWUgRW5jbG9zaW5nX01hcmsiKSwKKyAgICBWYWx1ZShVX0NPTUJJTklOR19TUEFDSU5HX01BUkssICJNYyBTcGFjaW5nX01hcmsiKSwKKyAgICBWYWx1ZShVX0RFQ0lNQUxfRElHSVRfTlVNQkVSLCAiTmQgRGVjaW1hbF9OdW1iZXIgZGlnaXQiKSwKKyAgICBWYWx1ZShVX0xFVFRFUl9OVU1CRVIsICJObCBMZXR0ZXJfTnVtYmVyIiksCisgICAgVmFsdWUoVV9PVEhFUl9OVU1CRVIsICJObyBPdGhlcl9OdW1iZXIiKSwKKyAgICBWYWx1ZShVX1NQQUNFX1NFUEFSQVRPUiwgIlpzIFNwYWNlX1NlcGFyYXRvciIpLAorICAgIFZhbHVlKFVfTElORV9TRVBBUkFUT1IsICJabCBMaW5lX1NlcGFyYXRvciIpLAorICAgIFZhbHVlKFVfUEFSQUdSQVBIX1NFUEFSQVRPUiwgIlpwIFBhcmFncmFwaF9TZXBhcmF0b3IiKSwKKyAgICBWYWx1ZShVX0NPTlRST0xfQ0hBUiwgIkNjIENvbnRyb2wgY250cmwiKSwKKyAgICBWYWx1ZShVX0ZPUk1BVF9DSEFSLCAiQ2YgRm9ybWF0IiksCisgICAgVmFsdWUoVV9QUklWQVRFX1VTRV9DSEFSLCAiQ28gUHJpdmF0ZV9Vc2UiKSwKKyAgICBWYWx1ZShVX1NVUlJPR0FURSwgIkNzIFN1cnJvZ2F0ZSIpLAorICAgIFZhbHVlKFVfREFTSF9QVU5DVFVBVElPTiwgIlBkIERhc2hfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZShVX1NUQVJUX1BVTkNUVUFUSU9OLCAiUHMgT3Blbl9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVfRU5EX1BVTkNUVUFUSU9OLCAiUGUgQ2xvc2VfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZShVX0NPTk5FQ1RPUl9QVU5DVFVBVElPTiwgIlBjIENvbm5lY3Rvcl9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVfT1RIRVJfUFVOQ1RVQVRJT04sICJQbyBPdGhlcl9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVfTUFUSF9TWU1CT0wsICJTbSBNYXRoX1N5bWJvbCIpLAorICAgIFZhbHVlKFVfQ1VSUkVOQ1lfU1lNQk9MLCAiU2MgQ3VycmVuY3lfU3ltYm9sIiksCisgICAgVmFsdWUoVV9NT0RJRklFUl9TWU1CT0wsICJTayBNb2RpZmllcl9TeW1ib2wiKSwKKyAgICBWYWx1ZShVX09USEVSX1NZTUJPTCwgIlNvIE90aGVyX1N5bWJvbCIpLAorICAgIFZhbHVlKFVfSU5JVElBTF9QVU5DVFVBVElPTiwgIlBpIEluaXRpYWxfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZShVX0ZJTkFMX1BVTkNUVUFUSU9OLCAiUGYgRmluYWxfUHVuY3R1YXRpb24iKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfamdbNThdID0geworICAgIFZhbHVlKFVfSkdfTk9fSk9JTklOR19HUk9VUCwgIk5vX0pvaW5pbmdfR3JvdXAgTm9fSm9pbmluZ19Hcm91cCIpLAorICAgIFZhbHVlKFVfSkdfQUlOLCAiQWluIEFpbiIpLAorICAgIFZhbHVlKFVfSkdfQUxBUEgsICJBbGFwaCBBbGFwaCIpLAorICAgIFZhbHVlKFVfSkdfQUxFRiwgIkFsZWYgQWxlZiIpLAorICAgIFZhbHVlKFVfSkdfQkVILCAiQmVoIEJlaCIpLAorICAgIFZhbHVlKFVfSkdfQkVUSCwgIkJldGggQmV0aCIpLAorICAgIFZhbHVlKFVfSkdfREFMLCAiRGFsIERhbCIpLAorICAgIFZhbHVlKFVfSkdfREFMQVRIX1JJU0gsICJEYWxhdGhfUmlzaCBEYWxhdGhfUmlzaCIpLAorICAgIFZhbHVlKFVfSkdfRSwgIkUgRSIpLAorICAgIFZhbHVlKFVfSkdfRkVILCAiRmVoIEZlaCIpLAorICAgIFZhbHVlKFVfSkdfRklOQUxfU0VNS0FUSCwgIkZpbmFsX1NlbWthdGggRmluYWxfU2Vta2F0aCIpLAorICAgIFZhbHVlKFVfSkdfR0FGLCAiR2FmIEdhZiIpLAorICAgIFZhbHVlKFVfSkdfR0FNQUwsICJHYW1hbCBHYW1hbCIpLAorICAgIFZhbHVlKFVfSkdfSEFILCAiSGFoIEhhaCIpLAorICAgIFZhbHVlKFVfSkdfVEVIX01BUkJVVEFfR09BTCwgIlRlaF9NYXJidXRhX0dvYWwgSGFtemFfT25fSGVoX0dvYWwiKSwKKyAgICBWYWx1ZShVX0pHX0hFLCAiSGUgSGUiKSwKKyAgICBWYWx1ZShVX0pHX0hFSCwgIkhlaCBIZWgiKSwKKyAgICBWYWx1ZShVX0pHX0hFSF9HT0FMLCAiSGVoX0dvYWwgSGVoX0dvYWwiKSwKKyAgICBWYWx1ZShVX0pHX0hFVEgsICJIZXRoIEhldGgiKSwKKyAgICBWYWx1ZShVX0pHX0tBRiwgIkthZiBLYWYiKSwKKyAgICBWYWx1ZShVX0pHX0tBUEgsICJLYXBoIEthcGgiKSwKKyAgICBWYWx1ZShVX0pHX0tOT1RURURfSEVILCAiS25vdHRlZF9IZWggS25vdHRlZF9IZWgiKSwKKyAgICBWYWx1ZShVX0pHX0xBTSwgIkxhbSBMYW0iKSwKKyAgICBWYWx1ZShVX0pHX0xBTUFESCwgIkxhbWFkaCBMYW1hZGgiKSwKKyAgICBWYWx1ZShVX0pHX01FRU0sICJNZWVtIE1lZW0iKSwKKyAgICBWYWx1ZShVX0pHX01JTSwgIk1pbSBNaW0iKSwKKyAgICBWYWx1ZShVX0pHX05PT04sICJOb29uIE5vb24iKSwKKyAgICBWYWx1ZShVX0pHX05VTiwgIk51biBOdW4iKSwKKyAgICBWYWx1ZShVX0pHX1BFLCAiUGUgUGUiKSwKKyAgICBWYWx1ZShVX0pHX1FBRiwgIlFhZiBRYWYiKSwKKyAgICBWYWx1ZShVX0pHX1FBUEgsICJRYXBoIFFhcGgiKSwKKyAgICBWYWx1ZShVX0pHX1JFSCwgIlJlaCBSZWgiKSwKKyAgICBWYWx1ZShVX0pHX1JFVkVSU0VEX1BFLCAiUmV2ZXJzZWRfUGUgUmV2ZXJzZWRfUGUiKSwKKyAgICBWYWx1ZShVX0pHX1NBRCwgIlNhZCBTYWQiKSwKKyAgICBWYWx1ZShVX0pHX1NBREhFLCAiU2FkaGUgU2FkaGUiKSwKKyAgICBWYWx1ZShVX0pHX1NFRU4sICJTZWVuIFNlZW4iKSwKKyAgICBWYWx1ZShVX0pHX1NFTUtBVEgsICJTZW1rYXRoIFNlbWthdGgiKSwKKyAgICBWYWx1ZShVX0pHX1NISU4sICJTaGluIFNoaW4iKSwKKyAgICBWYWx1ZShVX0pHX1NXQVNIX0tBRiwgIlN3YXNoX0thZiBTd2FzaF9LYWYiKSwKKyAgICBWYWx1ZShVX0pHX1NZUklBQ19XQVcsICJTeXJpYWNfV2F3IFN5cmlhY19XYXciKSwKKyAgICBWYWx1ZShVX0pHX1RBSCwgIlRhaCBUYWgiKSwKKyAgICBWYWx1ZShVX0pHX1RBVywgIlRhdyBUYXciKSwKKyAgICBWYWx1ZShVX0pHX1RFSF9NQVJCVVRBLCAiVGVoX01hcmJ1dGEgVGVoX01hcmJ1dGEiKSwKKyAgICBWYWx1ZShVX0pHX1RFVEgsICJUZXRoIFRldGgiKSwKKyAgICBWYWx1ZShVX0pHX1dBVywgIldhdyBXYXciKSwKKyAgICBWYWx1ZShVX0pHX1lFSCwgIlllaCBZZWgiKSwKKyAgICBWYWx1ZShVX0pHX1lFSF9CQVJSRUUsICJZZWhfQmFycmVlIFllaF9CYXJyZWUiKSwKKyAgICBWYWx1ZShVX0pHX1lFSF9XSVRIX1RBSUwsICJZZWhfV2l0aF9UYWlsIFllaF9XaXRoX1RhaWwiKSwKKyAgICBWYWx1ZShVX0pHX1lVREgsICJZdWRoIFl1ZGgiKSwKKyAgICBWYWx1ZShVX0pHX1lVREhfSEUsICJZdWRoX0hlIFl1ZGhfSGUiKSwKKyAgICBWYWx1ZShVX0pHX1pBSU4sICJaYWluIFphaW4iKSwKKyAgICBWYWx1ZShVX0pHX0ZFLCAiRmUgRmUiKSwKKyAgICBWYWx1ZShVX0pHX0tIQVBILCAiS2hhcGggS2hhcGgiKSwKKyAgICBWYWx1ZShVX0pHX1pIQUlOLCAiWmhhaW4gWmhhaW4iKSwKKyAgICBWYWx1ZShVX0pHX0JVUlVTSEFTS0lfWUVIX0JBUlJFRSwgIkJ1cnVzaGFza2lfWWVoX0JhcnJlZSBCdXJ1c2hhc2tpX1llaF9CYXJyZWUiKSwKKyAgICBWYWx1ZShVX0pHX0ZBUlNJX1lFSCwgIkZhcnNpX1llaCBGYXJzaV9ZZWgiKSwKKyAgICBWYWx1ZShVX0pHX05ZQSwgIk55YSBOeWEiKSwKKyAgICBWYWx1ZShVX0pHX1JPSElOR1lBX1lFSCwgIlJvaGluZ3lhX1llaCBSb2hpbmd5YV9ZZWgiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfanRbNl0gPSB7CisgICAgVmFsdWUoVV9KVF9OT05fSk9JTklORywgIlUgTm9uX0pvaW5pbmciKSwKKyAgICBWYWx1ZShVX0pUX0pPSU5fQ0FVU0lORywgIkMgSm9pbl9DYXVzaW5nIiksCisgICAgVmFsdWUoVV9KVF9EVUFMX0pPSU5JTkcsICJEIER1YWxfSm9pbmluZyIpLAorICAgIFZhbHVlKFVfSlRfTEVGVF9KT0lOSU5HLCAiTCBMZWZ0X0pvaW5pbmciKSwKKyAgICBWYWx1ZShVX0pUX1JJR0hUX0pPSU5JTkcsICJSIFJpZ2h0X0pvaW5pbmciKSwKKyAgICBWYWx1ZShVX0pUX1RSQU5TUEFSRU5ULCAiVCBUcmFuc3BhcmVudCIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19sYls0MF0gPSB7CisgICAgVmFsdWUoVV9MQl9VTktOT1dOLCAiWFggVW5rbm93biIpLAorICAgIFZhbHVlKFVfTEJfQU1CSUdVT1VTLCAiQUkgQW1iaWd1b3VzIiksCisgICAgVmFsdWUoVV9MQl9BTFBIQUJFVElDLCAiQUwgQWxwaGFiZXRpYyIpLAorICAgIFZhbHVlKFVfTEJfQlJFQUtfQk9USCwgIkIyIEJyZWFrX0JvdGgiKSwKKyAgICBWYWx1ZShVX0xCX0JSRUFLX0FGVEVSLCAiQkEgQnJlYWtfQWZ0ZXIiKSwKKyAgICBWYWx1ZShVX0xCX0JSRUFLX0JFRk9SRSwgIkJCIEJyZWFrX0JlZm9yZSIpLAorICAgIFZhbHVlKFVfTEJfTUFOREFUT1JZX0JSRUFLLCAiQksgTWFuZGF0b3J5X0JyZWFrIiksCisgICAgVmFsdWUoVV9MQl9DT05USU5HRU5UX0JSRUFLLCAiQ0IgQ29udGluZ2VudF9CcmVhayIpLAorICAgIFZhbHVlKFVfTEJfQ0xPU0VfUFVOQ1RVQVRJT04sICJDTCBDbG9zZV9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKFVfTEJfQ09NQklOSU5HX01BUkssICJDTSBDb21iaW5pbmdfTWFyayIpLAorICAgIFZhbHVlKFVfTEJfQ0FSUklBR0VfUkVUVVJOLCAiQ1IgQ2FycmlhZ2VfUmV0dXJuIiksCisgICAgVmFsdWUoVV9MQl9FWENMQU1BVElPTiwgIkVYIEV4Y2xhbWF0aW9uIiksCisgICAgVmFsdWUoVV9MQl9HTFVFLCAiR0wgR2x1ZSIpLAorICAgIFZhbHVlKFVfTEJfSFlQSEVOLCAiSFkgSHlwaGVuIiksCisgICAgVmFsdWUoVV9MQl9JREVPR1JBUEhJQywgIklEIElkZW9ncmFwaGljIiksCisgICAgVmFsdWUoVV9MQl9JTlNFUEFSQUJMRSwgIklOIEluc2VwYXJhYmxlIEluc2VwZXJhYmxlIiksCisgICAgVmFsdWUoVV9MQl9JTkZJWF9OVU1FUklDLCAiSVMgSW5maXhfTnVtZXJpYyIpLAorICAgIFZhbHVlKFVfTEJfTElORV9GRUVELCAiTEYgTGluZV9GZWVkIiksCisgICAgVmFsdWUoVV9MQl9OT05TVEFSVEVSLCAiTlMgTm9uc3RhcnRlciIpLAorICAgIFZhbHVlKFVfTEJfTlVNRVJJQywgIk5VIE51bWVyaWMiKSwKKyAgICBWYWx1ZShVX0xCX09QRU5fUFVOQ1RVQVRJT04sICJPUCBPcGVuX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoVV9MQl9QT1NURklYX05VTUVSSUMsICJQTyBQb3N0Zml4X051bWVyaWMiKSwKKyAgICBWYWx1ZShVX0xCX1BSRUZJWF9OVU1FUklDLCAiUFIgUHJlZml4X051bWVyaWMiKSwKKyAgICBWYWx1ZShVX0xCX1FVT1RBVElPTiwgIlFVIFF1b3RhdGlvbiIpLAorICAgIFZhbHVlKFVfTEJfQ09NUExFWF9DT05URVhULCAiU0EgQ29tcGxleF9Db250ZXh0IiksCisgICAgVmFsdWUoVV9MQl9TVVJST0dBVEUsICJTRyBTdXJyb2dhdGUiKSwKKyAgICBWYWx1ZShVX0xCX1NQQUNFLCAiU1AgU3BhY2UiKSwKKyAgICBWYWx1ZShVX0xCX0JSRUFLX1NZTUJPTFMsICJTWSBCcmVha19TeW1ib2xzIiksCisgICAgVmFsdWUoVV9MQl9aV1NQQUNFLCAiWlcgWldTcGFjZSIpLAorICAgIFZhbHVlKFVfTEJfTkVYVF9MSU5FLCAiTkwgTmV4dF9MaW5lIiksCisgICAgVmFsdWUoVV9MQl9XT1JEX0pPSU5FUiwgIldKIFdvcmRfSm9pbmVyIiksCisgICAgVmFsdWUoVV9MQl9IMiwgIkgyIEgyIiksCisgICAgVmFsdWUoVV9MQl9IMywgIkgzIEgzIiksCisgICAgVmFsdWUoVV9MQl9KTCwgIkpMIEpMIiksCisgICAgVmFsdWUoVV9MQl9KVCwgIkpUIEpUIiksCisgICAgVmFsdWUoVV9MQl9KViwgIkpWIEpWIiksCisgICAgVmFsdWUoVV9MQl9DTE9TRV9QQVJFTlRIRVNJUywgIkNQIENsb3NlX1BhcmVudGhlc2lzIiksCisgICAgVmFsdWUoVV9MQl9DT05ESVRJT05BTF9KQVBBTkVTRV9TVEFSVEVSLCAiQ0ogQ29uZGl0aW9uYWxfSmFwYW5lc2VfU3RhcnRlciIpLAorICAgIFZhbHVlKFVfTEJfSEVCUkVXX0xFVFRFUiwgIkhMIEhlYnJld19MZXR0ZXIiKSwKKyAgICBWYWx1ZShVX0xCX1JFR0lPTkFMX0lORElDQVRPUiwgIlJJIFJlZ2lvbmFsX0luZGljYXRvciIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19udFs0XSA9IHsKKyAgICBWYWx1ZShVX05UX05PTkUsICJOb25lIE5vbmUiKSwKKyAgICBWYWx1ZShVX05UX0RFQ0lNQUwsICJEZSBEZWNpbWFsIiksCisgICAgVmFsdWUoVV9OVF9ESUdJVCwgIkRpIERpZ2l0IiksCisgICAgVmFsdWUoVV9OVF9OVU1FUklDLCAiTnUgTnVtZXJpYyIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19zY1sxNTldID0geworICAgIFZhbHVlKFVTQ1JJUFRfQ09NTU9OLCAiWnl5eSBDb21tb24iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0lOSEVSSVRFRCwgIlppbmggSW5oZXJpdGVkIFFhYWkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0FSQUJJQywgIkFyYWIgQXJhYmljIiksCisgICAgVmFsdWUoVVNDUklQVF9BUk1FTklBTiwgIkFybW4gQXJtZW5pYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JFTkdBTEksICJCZW5nIEJlbmdhbGkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JPUE9NT0ZPLCAiQm9wbyBCb3BvbW9mbyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQ0hFUk9LRUUsICJDaGVyIENoZXJva2VlIiksCisgICAgVmFsdWUoVVNDUklQVF9DT1BUSUMsICJDb3B0IENvcHRpYyBRYWFjIiksCisgICAgVmFsdWUoVVNDUklQVF9DWVJJTExJQywgIkN5cmwgQ3lyaWxsaWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0RFU0VSRVQsICJEc3J0IERlc2VyZXQiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0RFVkFOQUdBUkksICJEZXZhIERldmFuYWdhcmkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0VUSElPUElDLCAiRXRoaSBFdGhpb3BpYyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfR0VPUkdJQU4sICJHZW9yIEdlb3JnaWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9HT1RISUMsICJHb3RoIEdvdGhpYyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfR1JFRUssICJHcmVrIEdyZWVrIiksCisgICAgVmFsdWUoVVNDUklQVF9HVUpBUkFUSSwgIkd1anIgR3VqYXJhdGkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0dVUk1VS0hJLCAiR3VydSBHdXJtdWtoaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSEFOLCAiSGFuaSBIYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0hBTkdVTCwgIkhhbmcgSGFuZ3VsIiksCisgICAgVmFsdWUoVVNDUklQVF9IRUJSRVcsICJIZWJyIEhlYnJldyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSElSQUdBTkEsICJIaXJhIEhpcmFnYW5hIiksCisgICAgVmFsdWUoVVNDUklQVF9LQU5OQURBLCAiS25kYSBLYW5uYWRhIiksCisgICAgVmFsdWUoVVNDUklQVF9LQVRBS0FOQSwgIkthbmEgS2F0YWthbmEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tITUVSLCAiS2htciBLaG1lciIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTEFPLCAiTGFvbyBMYW8iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xBVElOLCAiTGF0biBMYXRpbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUFMQVlBTEFNLCAiTWx5bSBNYWxheWFsYW0iKSwKKyAgICBWYWx1ZShVU0NSSVBUX01PTkdPTElBTiwgIk1vbmcgTW9uZ29saWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9NWUFOTUFSLCAiTXltciBNeWFubWFyIiksCisgICAgVmFsdWUoVVNDUklQVF9PR0hBTSwgIk9nYW0gT2doYW0iKSwKKyAgICBWYWx1ZShVU0NSSVBUX09MRF9JVEFMSUMsICJJdGFsIE9sZF9JdGFsaWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX09SSVlBLCAiT3J5YSBPcml5YSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfUlVOSUMsICJSdW5yIFJ1bmljIiksCisgICAgVmFsdWUoVVNDUklQVF9TSU5IQUxBLCAiU2luaCBTaW5oYWxhIiksCisgICAgVmFsdWUoVVNDUklQVF9TWVJJQUMsICJTeXJjIFN5cmlhYyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVEFNSUwsICJUYW1sIFRhbWlsIiksCisgICAgVmFsdWUoVVNDUklQVF9URUxVR1UsICJUZWx1IFRlbHVndSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVEhBQU5BLCAiVGhhYSBUaGFhbmEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RIQUksICJUaGFpIFRoYWkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RJQkVUQU4sICJUaWJ0IFRpYmV0YW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NBTkFESUFOX0FCT1JJR0lOQUwsICJDYW5zIENhbmFkaWFuX0Fib3JpZ2luYWwiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1lJLCAiWWlpaSBZaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVEFHQUxPRywgIlRnbGcgVGFnYWxvZyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSEFOVU5PTywgIkhhbm8gSGFudW5vbyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQlVISUQsICJCdWhkIEJ1aGlkIiksCisgICAgVmFsdWUoVVNDUklQVF9UQUdCQU5XQSwgIlRhZ2IgVGFnYmFud2EiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JSQUlMTEUsICJCcmFpIEJyYWlsbGUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NZUFJJT1QsICJDcHJ0IEN5cHJpb3QiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xJTUJVLCAiTGltYiBMaW1idSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTElORUFSX0IsICJMaW5iIExpbmVhcl9CIiksCisgICAgVmFsdWUoVVNDUklQVF9PU01BTllBLCAiT3NtYSBPc21hbnlhIiksCisgICAgVmFsdWUoVVNDUklQVF9TSEFWSUFOLCAiU2hhdyBTaGF2aWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9UQUlfTEUsICJUYWxlIFRhaV9MZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVUdBUklUSUMsICJVZ2FyIFVnYXJpdGljIiksCisgICAgVmFsdWUoVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSwgIkhya3QgS2F0YWthbmFfT3JfSGlyYWdhbmEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JVR0lORVNFLCAiQnVnaSBCdWdpbmVzZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfR0xBR09MSVRJQywgIkdsYWcgR2xhZ29saXRpYyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfS0hBUk9TSFRISSwgIktoYXIgS2hhcm9zaHRoaSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU1lMT1RJX05BR1JJLCAiU3lsbyBTeWxvdGlfTmFncmkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX05FV19UQUlfTFVFLCAiVGFsdSBOZXdfVGFpX0x1ZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVElGSU5BR0gsICJUZm5nIFRpZmluYWdoIiksCisgICAgVmFsdWUoVVNDUklQVF9PTERfUEVSU0lBTiwgIlhwZW8gT2xkX1BlcnNpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JBTElORVNFLCAiQmFsaSBCYWxpbmVzZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQkFUQUssICJCYXRrIEJhdGFrIiksCisgICAgVmFsdWUoVVNDUklQVF9CTElTU1lNQk9MUywgIkJsaXMgQmxpcyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQlJBSE1JLCAiQnJhaCBCcmFobWkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NIQU0sICJDaGFtIENoYW0iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NJUlRILCAiQ2lydCBDaXJ0IiksCisgICAgVmFsdWUoVVNDUklQVF9PTERfQ0hVUkNIX1NMQVZPTklDX0NZUklMTElDLCAiQ3lycyBDeXJzIiksCisgICAgVmFsdWUoVVNDUklQVF9ERU1PVElDX0VHWVBUSUFOLCAiRWd5ZCBFZ3lkIiksCisgICAgVmFsdWUoVVNDUklQVF9ISUVSQVRJQ19FR1lQVElBTiwgIkVneWggRWd5aCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfRUdZUFRJQU5fSElFUk9HTFlQSFMsICJFZ3lwIEVneXB0aWFuX0hpZXJvZ2x5cGhzIiksCisgICAgVmFsdWUoVVNDUklQVF9LSFVUU1VSSSwgIkdlb2sgR2VvayIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU0lNUExJRklFRF9IQU4sICJIYW5zIEhhbnMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RSQURJVElPTkFMX0hBTiwgIkhhbnQgSGFudCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfUEFIQVdIX0hNT05HLCAiSG1uZyBIbW5nIiksCisgICAgVmFsdWUoVVNDUklQVF9PTERfSFVOR0FSSUFOLCAiSHVuZyBIdW5nIiksCisgICAgVmFsdWUoVVNDUklQVF9IQVJBUFBBTl9JTkRVUywgIkluZHMgSW5kcyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfSkFWQU5FU0UsICJKYXZhIEphdmFuZXNlIiksCisgICAgVmFsdWUoVVNDUklQVF9LQVlBSF9MSSwgIkthbGkgS2F5YWhfTGkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xBVElOX0ZSQUtUVVIsICJMYXRmIExhdGYiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xBVElOX0dBRUxJQywgIkxhdGcgTGF0ZyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTEVQQ0hBLCAiTGVwYyBMZXBjaGEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xJTkVBUl9BLCAiTGluYSBMaW5hIiksCisgICAgVmFsdWUoVVNDUklQVF9NQU5EQUlDLCAiTWFuZCBNYW5kYWljIiksCisgICAgVmFsdWUoVVNDUklQVF9NQVlBTl9ISUVST0dMWVBIUywgIk1heWEgTWF5YSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUVST0lUSUNfSElFUk9HTFlQSFMsICJNZXJvIE1lcm9pdGljX0hpZXJvZ2x5cGhzIiksCisgICAgVmFsdWUoVVNDUklQVF9OS08sICJOa29vIE5rbyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfT1JLSE9OLCAiT3JraCBPbGRfVHVya2ljIiksCisgICAgVmFsdWUoVVNDUklQVF9PTERfUEVSTUlDLCAiUGVybSBQZXJtIiksCisgICAgVmFsdWUoVVNDUklQVF9QSEFHU19QQSwgIlBoYWcgUGhhZ3NfUGEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1BIT0VOSUNJQU4sICJQaG54IFBob2VuaWNpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX1BIT05FVElDX1BPTExBUkQsICJQbHJkIE1pYW8iKSwKKyAgICBWYWx1ZShVU0NSSVBUX1JPTkdPUk9OR08sICJSb3JvIFJvcm8iKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NBUkFUSSwgIlNhcmEgU2FyYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfRVNUUkFOR0VMT19TWVJJQUMsICJTeXJlIFN5cmUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1dFU1RFUk5fU1lSSUFDLCAiU3lyaiBTeXJqIiksCisgICAgVmFsdWUoVVNDUklQVF9FQVNURVJOX1NZUklBQywgIlN5cm4gU3lybiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVEVOR1dBUiwgIlRlbmcgVGVuZyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVkFJLCAiVmFpaSBWYWkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1ZJU0lCTEVfU1BFRUNILCAiVmlzcCBWaXNwIiksCisgICAgVmFsdWUoVVNDUklQVF9DVU5FSUZPUk0sICJYc3V4IEN1bmVpZm9ybSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVU5XUklUVEVOX0xBTkdVQUdFUywgIlp4eHggWnh4eCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVU5LTk9XTiwgIlp6enogVW5rbm93biIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQ0FSSUFOLCAiQ2FyaSBDYXJpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0pBUEFORVNFLCAiSnBhbiBKcGFuIiksCisgICAgVmFsdWUoVVNDUklQVF9MQU5OQSwgIkxhbmEgVGFpX1RoYW0iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0xZQ0lBTiwgIkx5Y2kgTHljaWFuIiksCisgICAgVmFsdWUoVVNDUklQVF9MWURJQU4sICJMeWRpIEx5ZGlhbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfT0xfQ0hJS0ksICJPbGNrIE9sX0NoaWtpIiksCisgICAgVmFsdWUoVVNDUklQVF9SRUpBTkcsICJSam5nIFJlamFuZyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU0FVUkFTSFRSQSwgIlNhdXIgU2F1cmFzaHRyYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU0lHTl9XUklUSU5HLCAiU2dudyBTZ253IiksCisgICAgVmFsdWUoVVNDUklQVF9TVU5EQU5FU0UsICJTdW5kIFN1bmRhbmVzZSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTU9PTiwgIk1vb24gTW9vbiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUVJVEVJX01BWUVLLCAiTXRlaSBNZWV0ZWlfTWF5ZWsiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0lNUEVSSUFMX0FSQU1BSUMsICJBcm1pIEltcGVyaWFsX0FyYW1haWMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0FWRVNUQU4sICJBdnN0IEF2ZXN0YW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0NIQUtNQSwgIkNha20gQ2hha21hIiksCisgICAgVmFsdWUoVVNDUklQVF9LT1JFQU4sICJLb3JlIEtvcmUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tBSVRISSwgIkt0aGkgS2FpdGhpIiksCisgICAgVmFsdWUoVVNDUklQVF9NQU5JQ0hBRUFOLCAiTWFuaSBNYW5pIiksCisgICAgVmFsdWUoVVNDUklQVF9JTlNDUklQVElPTkFMX1BBSExBVkksICJQaGxpIEluc2NyaXB0aW9uYWxfUGFobGF2aSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfUFNBTFRFUl9QQUhMQVZJLCAiUGhscCBQaGxwIiksCisgICAgVmFsdWUoVVNDUklQVF9CT09LX1BBSExBVkksICJQaGx2IFBobHYiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0lOU0NSSVBUSU9OQUxfUEFSVEhJQU4sICJQcnRpIEluc2NyaXB0aW9uYWxfUGFydGhpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NBTUFSSVRBTiwgIlNhbXIgU2FtYXJpdGFuIiksCisgICAgVmFsdWUoVVNDUklQVF9UQUlfVklFVCwgIlRhdnQgVGFpX1ZpZXQiKSwKKyAgICBWYWx1ZShVU0NSSVBUX01BVEhFTUFUSUNBTF9OT1RBVElPTiwgIlptdGggWm10aCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU1lNQk9MUywgIlpzeW0gWnN5bSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQkFNVU0sICJCYW11IEJhbXVtIiksCisgICAgVmFsdWUoVVNDUklQVF9MSVNVLCAiTGlzdSBMaXN1IiksCisgICAgVmFsdWUoVVNDUklQVF9OQUtISV9HRUJBLCAiTmtnYiBOa2diIiksCisgICAgVmFsdWUoVVNDUklQVF9PTERfU09VVEhfQVJBQklBTiwgIlNhcmIgT2xkX1NvdXRoX0FyYWJpYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0JBU1NBX1ZBSCwgIkJhc3MgQmFzcyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfRFVQTE9ZQU5fU0hPUlRBTkQsICJEdXBsIER1cGwiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0VMQkFTQU4sICJFbGJhIEVsYmEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0dSQU5USEEsICJHcmFuIEdyYW4iKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tQRUxMRSwgIktwZWwgS3BlbCIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTE9NQSwgIkxvbWEgTG9tYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTUVOREUsICJNZW5kIE1lbmQiKSwKKyAgICBWYWx1ZShVU0NSSVBUX01FUk9JVElDX0NVUlNJVkUsICJNZXJjIE1lcm9pdGljX0N1cnNpdmUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX09MRF9OT1JUSF9BUkFCSUFOLCAiTmFyYiBOYXJiIiksCisgICAgVmFsdWUoVVNDUklQVF9OQUJBVEFFQU4sICJOYmF0IE5iYXQiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1BBTE1ZUkVORSwgIlBhbG0gUGFsbSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfU0lOREhJLCAiU2luZCBTaW5kIiksCisgICAgVmFsdWUoVVNDUklQVF9XQVJBTkdfQ0lUSSwgIldhcmEgV2FyYSIpLAorICAgIFZhbHVlKFVTQ1JJUFRfQUZBS0EsICJBZmFrIEFmYWsiKSwKKyAgICBWYWx1ZShVU0NSSVBUX0pVUkNIRU4sICJKdXJjIEp1cmMiKSwKKyAgICBWYWx1ZShVU0NSSVBUX01STywgIk1yb28gTXJvbyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfTlVTSFUsICJOc2h1IE5zaHUiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NIQVJBREEsICJTaHJkIFNoYXJhZGEiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1NPUkFfU09NUEVORywgIlNvcmEgU29yYV9Tb21wZW5nIiksCisgICAgVmFsdWUoVVNDUklQVF9UQUtSSSwgIlRha3IgVGFrcmkiKSwKKyAgICBWYWx1ZShVU0NSSVBUX1RBTkdVVCwgIlRhbmcgVGFuZyIpLAorICAgIFZhbHVlKFVTQ1JJUFRfV09MRUFJLCAiV29sZSBXb2xlIiksCisgICAgVmFsdWUoVVNDUklQVF9BTkFUT0xJQU5fSElFUk9HTFlQSFMsICJIbHV3IEhsdXciKSwKKyAgICBWYWx1ZShVU0NSSVBUX0tIT0pLSSwgIktob2ogS2hvaiIpLAorICAgIFZhbHVlKFVTQ1JJUFRfVElSSFVUQSwgIlRpcmggVGlyaCIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19oc3RbNl0gPSB7CisgICAgVmFsdWUoVV9IU1RfTk9UX0FQUExJQ0FCTEUsICJOQSBOb3RfQXBwbGljYWJsZSIpLAorICAgIFZhbHVlKFVfSFNUX0xFQURJTkdfSkFNTywgIkwgTGVhZGluZ19KYW1vIiksCisgICAgVmFsdWUoVV9IU1RfVk9XRUxfSkFNTywgIlYgVm93ZWxfSmFtbyIpLAorICAgIFZhbHVlKFVfSFNUX1RSQUlMSU5HX0pBTU8sICJUIFRyYWlsaW5nX0phbW8iKSwKKyAgICBWYWx1ZShVX0hTVF9MVl9TWUxMQUJMRSwgIkxWIExWX1N5bGxhYmxlIiksCisgICAgVmFsdWUoVV9IU1RfTFZUX1NZTExBQkxFLCAiTFZUIExWVF9TeWxsYWJsZSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19ORkRfUUNbMl0gPSB7CisgICAgVmFsdWUoVU5PUk1fTk8sICJOIE5vIiksCisgICAgVmFsdWUoVU5PUk1fWUVTLCAiWSBZZXMiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfTkZLRF9RQ1syXSA9IHsKKyAgICBWYWx1ZShVTk9STV9OTywgIk4gTm8iKSwKKyAgICBWYWx1ZShVTk9STV9ZRVMsICJZIFllcyIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19ORkNfUUNbM10gPSB7CisgICAgVmFsdWUoVU5PUk1fTk8sICJOIE5vIiksCisgICAgVmFsdWUoVU5PUk1fWUVTLCAiWSBZZXMiKSwKKyAgICBWYWx1ZShVTk9STV9NQVlCRSwgIk0gTWF5YmUiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfTkZLQ19RQ1szXSA9IHsKKyAgICBWYWx1ZShVTk9STV9OTywgIk4gTm8iKSwKKyAgICBWYWx1ZShVTk9STV9ZRVMsICJZIFllcyIpLAorICAgIFZhbHVlKFVOT1JNX01BWUJFLCAiTSBNYXliZSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19sY2NjWzU3XSA9IHsKKyAgICBWYWx1ZSgwLCAiTlIgTm90X1Jlb3JkZXJlZCIpLAorICAgIFZhbHVlKDEsICJPViBPdmVybGF5IiksCisgICAgVmFsdWUoNywgIk5LIE51a3RhIiksCisgICAgVmFsdWUoOCwgIktWIEthbmFfVm9pY2luZyIpLAorICAgIFZhbHVlKDksICJWUiBWaXJhbWEiKSwKKyAgICBWYWx1ZSgxMCwgIkNDQzEwIENDQzEwIiksCisgICAgVmFsdWUoMTEsICJDQ0MxMSBDQ0MxMSIpLAorICAgIFZhbHVlKDEyLCAiQ0NDMTIgQ0NDMTIiKSwKKyAgICBWYWx1ZSgxMywgIkNDQzEzIENDQzEzIiksCisgICAgVmFsdWUoMTQsICJDQ0MxNCBDQ0MxNCIpLAorICAgIFZhbHVlKDE1LCAiQ0NDMTUgQ0NDMTUiKSwKKyAgICBWYWx1ZSgxNiwgIkNDQzE2IENDQzE2IiksCisgICAgVmFsdWUoMTcsICJDQ0MxNyBDQ0MxNyIpLAorICAgIFZhbHVlKDE4LCAiQ0NDMTggQ0NDMTgiKSwKKyAgICBWYWx1ZSgxOSwgIkNDQzE5IENDQzE5IiksCisgICAgVmFsdWUoMjAsICJDQ0MyMCBDQ0MyMCIpLAorICAgIFZhbHVlKDIxLCAiQ0NDMjEgQ0NDMjEiKSwKKyAgICBWYWx1ZSgyMiwgIkNDQzIyIENDQzIyIiksCisgICAgVmFsdWUoMjMsICJDQ0MyMyBDQ0MyMyIpLAorICAgIFZhbHVlKDI0LCAiQ0NDMjQgQ0NDMjQiKSwKKyAgICBWYWx1ZSgyNSwgIkNDQzI1IENDQzI1IiksCisgICAgVmFsdWUoMjYsICJDQ0MyNiBDQ0MyNiIpLAorICAgIFZhbHVlKDI3LCAiQ0NDMjcgQ0NDMjciKSwKKyAgICBWYWx1ZSgyOCwgIkNDQzI4IENDQzI4IiksCisgICAgVmFsdWUoMjksICJDQ0MyOSBDQ0MyOSIpLAorICAgIFZhbHVlKDMwLCAiQ0NDMzAgQ0NDMzAiKSwKKyAgICBWYWx1ZSgzMSwgIkNDQzMxIENDQzMxIiksCisgICAgVmFsdWUoMzIsICJDQ0MzMiBDQ0MzMiIpLAorICAgIFZhbHVlKDMzLCAiQ0NDMzMgQ0NDMzMiKSwKKyAgICBWYWx1ZSgzNCwgIkNDQzM0IENDQzM0IiksCisgICAgVmFsdWUoMzUsICJDQ0MzNSBDQ0MzNSIpLAorICAgIFZhbHVlKDM2LCAiQ0NDMzYgQ0NDMzYiKSwKKyAgICBWYWx1ZSg4NCwgIkNDQzg0IENDQzg0IiksCisgICAgVmFsdWUoOTEsICJDQ0M5MSBDQ0M5MSIpLAorICAgIFZhbHVlKDEwMywgIkNDQzEwMyBDQ0MxMDMiKSwKKyAgICBWYWx1ZSgxMDcsICJDQ0MxMDcgQ0NDMTA3IiksCisgICAgVmFsdWUoMTE4LCAiQ0NDMTE4IENDQzExOCIpLAorICAgIFZhbHVlKDEyMiwgIkNDQzEyMiBDQ0MxMjIiKSwKKyAgICBWYWx1ZSgxMjksICJDQ0MxMjkgQ0NDMTI5IiksCisgICAgVmFsdWUoMTMwLCAiQ0NDMTMwIENDQzEzMCIpLAorICAgIFZhbHVlKDEzMiwgIkNDQzEzMiBDQ0MxMzIiKSwKKyAgICBWYWx1ZSgxMzMsICJDQ0MxMzMgQ0NDMTMzIiksCisgICAgVmFsdWUoMjAwLCAiQVRCTCBBdHRhY2hlZF9CZWxvd19MZWZ0IiksCisgICAgVmFsdWUoMjAyLCAiQVRCIEF0dGFjaGVkX0JlbG93IiksCisgICAgVmFsdWUoMjE0LCAiQVRBIEF0dGFjaGVkX0Fib3ZlIiksCisgICAgVmFsdWUoMjE2LCAiQVRBUiBBdHRhY2hlZF9BYm92ZV9SaWdodCIpLAorICAgIFZhbHVlKDIxOCwgIkJMIEJlbG93X0xlZnQiKSwKKyAgICBWYWx1ZSgyMjAsICJCIEJlbG93IiksCisgICAgVmFsdWUoMjIyLCAiQlIgQmVsb3dfUmlnaHQiKSwKKyAgICBWYWx1ZSgyMjQsICJMIExlZnQiKSwKKyAgICBWYWx1ZSgyMjYsICJSIFJpZ2h0IiksCisgICAgVmFsdWUoMjI4LCAiQUwgQWJvdmVfTGVmdCIpLAorICAgIFZhbHVlKDIzMCwgIkEgQWJvdmUiKSwKKyAgICBWYWx1ZSgyMzIsICJBUiBBYm92ZV9SaWdodCIpLAorICAgIFZhbHVlKDIzMywgIkRCIERvdWJsZV9CZWxvdyIpLAorICAgIFZhbHVlKDIzNCwgIkRBIERvdWJsZV9BYm92ZSIpLAorICAgIFZhbHVlKDI0MCwgIklTIElvdGFfU3Vic2NyaXB0IiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX3RjY2NbNTddID0geworICAgIFZhbHVlKDAsICJOUiBOb3RfUmVvcmRlcmVkIiksCisgICAgVmFsdWUoMSwgIk9WIE92ZXJsYXkiKSwKKyAgICBWYWx1ZSg3LCAiTksgTnVrdGEiKSwKKyAgICBWYWx1ZSg4LCAiS1YgS2FuYV9Wb2ljaW5nIiksCisgICAgVmFsdWUoOSwgIlZSIFZpcmFtYSIpLAorICAgIFZhbHVlKDEwLCAiQ0NDMTAgQ0NDMTAiKSwKKyAgICBWYWx1ZSgxMSwgIkNDQzExIENDQzExIiksCisgICAgVmFsdWUoMTIsICJDQ0MxMiBDQ0MxMiIpLAorICAgIFZhbHVlKDEzLCAiQ0NDMTMgQ0NDMTMiKSwKKyAgICBWYWx1ZSgxNCwgIkNDQzE0IENDQzE0IiksCisgICAgVmFsdWUoMTUsICJDQ0MxNSBDQ0MxNSIpLAorICAgIFZhbHVlKDE2LCAiQ0NDMTYgQ0NDMTYiKSwKKyAgICBWYWx1ZSgxNywgIkNDQzE3IENDQzE3IiksCisgICAgVmFsdWUoMTgsICJDQ0MxOCBDQ0MxOCIpLAorICAgIFZhbHVlKDE5LCAiQ0NDMTkgQ0NDMTkiKSwKKyAgICBWYWx1ZSgyMCwgIkNDQzIwIENDQzIwIiksCisgICAgVmFsdWUoMjEsICJDQ0MyMSBDQ0MyMSIpLAorICAgIFZhbHVlKDIyLCAiQ0NDMjIgQ0NDMjIiKSwKKyAgICBWYWx1ZSgyMywgIkNDQzIzIENDQzIzIiksCisgICAgVmFsdWUoMjQsICJDQ0MyNCBDQ0MyNCIpLAorICAgIFZhbHVlKDI1LCAiQ0NDMjUgQ0NDMjUiKSwKKyAgICBWYWx1ZSgyNiwgIkNDQzI2IENDQzI2IiksCisgICAgVmFsdWUoMjcsICJDQ0MyNyBDQ0MyNyIpLAorICAgIFZhbHVlKDI4LCAiQ0NDMjggQ0NDMjgiKSwKKyAgICBWYWx1ZSgyOSwgIkNDQzI5IENDQzI5IiksCisgICAgVmFsdWUoMzAsICJDQ0MzMCBDQ0MzMCIpLAorICAgIFZhbHVlKDMxLCAiQ0NDMzEgQ0NDMzEiKSwKKyAgICBWYWx1ZSgzMiwgIkNDQzMyIENDQzMyIiksCisgICAgVmFsdWUoMzMsICJDQ0MzMyBDQ0MzMyIpLAorICAgIFZhbHVlKDM0LCAiQ0NDMzQgQ0NDMzQiKSwKKyAgICBWYWx1ZSgzNSwgIkNDQzM1IENDQzM1IiksCisgICAgVmFsdWUoMzYsICJDQ0MzNiBDQ0MzNiIpLAorICAgIFZhbHVlKDg0LCAiQ0NDODQgQ0NDODQiKSwKKyAgICBWYWx1ZSg5MSwgIkNDQzkxIENDQzkxIiksCisgICAgVmFsdWUoMTAzLCAiQ0NDMTAzIENDQzEwMyIpLAorICAgIFZhbHVlKDEwNywgIkNDQzEwNyBDQ0MxMDciKSwKKyAgICBWYWx1ZSgxMTgsICJDQ0MxMTggQ0NDMTE4IiksCisgICAgVmFsdWUoMTIyLCAiQ0NDMTIyIENDQzEyMiIpLAorICAgIFZhbHVlKDEyOSwgIkNDQzEyOSBDQ0MxMjkiKSwKKyAgICBWYWx1ZSgxMzAsICJDQ0MxMzAgQ0NDMTMwIiksCisgICAgVmFsdWUoMTMyLCAiQ0NDMTMyIENDQzEzMiIpLAorICAgIFZhbHVlKDEzMywgIkNDQzEzMyBDQ0MxMzMiKSwKKyAgICBWYWx1ZSgyMDAsICJBVEJMIEF0dGFjaGVkX0JlbG93X0xlZnQiKSwKKyAgICBWYWx1ZSgyMDIsICJBVEIgQXR0YWNoZWRfQmVsb3ciKSwKKyAgICBWYWx1ZSgyMTQsICJBVEEgQXR0YWNoZWRfQWJvdmUiKSwKKyAgICBWYWx1ZSgyMTYsICJBVEFSIEF0dGFjaGVkX0Fib3ZlX1JpZ2h0IiksCisgICAgVmFsdWUoMjE4LCAiQkwgQmVsb3dfTGVmdCIpLAorICAgIFZhbHVlKDIyMCwgIkIgQmVsb3ciKSwKKyAgICBWYWx1ZSgyMjIsICJCUiBCZWxvd19SaWdodCIpLAorICAgIFZhbHVlKDIyNCwgIkwgTGVmdCIpLAorICAgIFZhbHVlKDIyNiwgIlIgUmlnaHQiKSwKKyAgICBWYWx1ZSgyMjgsICJBTCBBYm92ZV9MZWZ0IiksCisgICAgVmFsdWUoMjMwLCAiQSBBYm92ZSIpLAorICAgIFZhbHVlKDIzMiwgIkFSIEFib3ZlX1JpZ2h0IiksCisgICAgVmFsdWUoMjMzLCAiREIgRG91YmxlX0JlbG93IiksCisgICAgVmFsdWUoMjM0LCAiREEgRG91YmxlX0Fib3ZlIiksCisgICAgVmFsdWUoMjQwLCAiSVMgSW90YV9TdWJzY3JpcHQiKSwKK307CisKK3N0YXRpYyBjb25zdCBWYWx1ZSBWQUxVRVNfR0NCWzEzXSA9IHsKKyAgICBWYWx1ZShVX0dDQl9PVEhFUiwgIlhYIE90aGVyIiksCisgICAgVmFsdWUoVV9HQ0JfQ09OVFJPTCwgIkNOIENvbnRyb2wiKSwKKyAgICBWYWx1ZShVX0dDQl9DUiwgIkNSIENSIiksCisgICAgVmFsdWUoVV9HQ0JfRVhURU5ELCAiRVggRXh0ZW5kIiksCisgICAgVmFsdWUoVV9HQ0JfTCwgIkwgTCIpLAorICAgIFZhbHVlKFVfR0NCX0xGLCAiTEYgTEYiKSwKKyAgICBWYWx1ZShVX0dDQl9MViwgIkxWIExWIiksCisgICAgVmFsdWUoVV9HQ0JfTFZULCAiTFZUIExWVCIpLAorICAgIFZhbHVlKFVfR0NCX1QsICJUIFQiKSwKKyAgICBWYWx1ZShVX0dDQl9WLCAiViBWIiksCisgICAgVmFsdWUoVV9HQ0JfU1BBQ0lOR19NQVJLLCAiU00gU3BhY2luZ01hcmsiKSwKKyAgICBWYWx1ZShVX0dDQl9QUkVQRU5ELCAiUFAgUHJlcGVuZCIpLAorICAgIFZhbHVlKFVfR0NCX1JFR0lPTkFMX0lORElDQVRPUiwgIlJJIFJlZ2lvbmFsX0luZGljYXRvciIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19TQlsxNV0gPSB7CisgICAgVmFsdWUoVV9TQl9PVEhFUiwgIlhYIE90aGVyIiksCisgICAgVmFsdWUoVV9TQl9BVEVSTSwgIkFUIEFUZXJtIiksCisgICAgVmFsdWUoVV9TQl9DTE9TRSwgIkNMIENsb3NlIiksCisgICAgVmFsdWUoVV9TQl9GT1JNQVQsICJGTyBGb3JtYXQiKSwKKyAgICBWYWx1ZShVX1NCX0xPV0VSLCAiTE8gTG93ZXIiKSwKKyAgICBWYWx1ZShVX1NCX05VTUVSSUMsICJOVSBOdW1lcmljIiksCisgICAgVmFsdWUoVV9TQl9PTEVUVEVSLCAiTEUgT0xldHRlciIpLAorICAgIFZhbHVlKFVfU0JfU0VQLCAiU0UgU2VwIiksCisgICAgVmFsdWUoVV9TQl9TUCwgIlNQIFNwIiksCisgICAgVmFsdWUoVV9TQl9TVEVSTSwgIlNUIFNUZXJtIiksCisgICAgVmFsdWUoVV9TQl9VUFBFUiwgIlVQIFVwcGVyIiksCisgICAgVmFsdWUoVV9TQl9DUiwgIkNSIENSIiksCisgICAgVmFsdWUoVV9TQl9FWFRFTkQsICJFWCBFeHRlbmQiKSwKKyAgICBWYWx1ZShVX1NCX0xGLCAiTEYgTEYiKSwKKyAgICBWYWx1ZShVX1NCX1NDT05USU5VRSwgIlNDIFNDb250aW51ZSIpLAorfTsKKworc3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19XQlsxNF0gPSB7CisgICAgVmFsdWUoVV9XQl9PVEhFUiwgIlhYIE90aGVyIiksCisgICAgVmFsdWUoVV9XQl9BTEVUVEVSLCAiTEUgQUxldHRlciIpLAorICAgIFZhbHVlKFVfV0JfRk9STUFULCAiRk8gRm9ybWF0IiksCisgICAgVmFsdWUoVV9XQl9LQVRBS0FOQSwgIktBIEthdGFrYW5hIiksCisgICAgVmFsdWUoVV9XQl9NSURMRVRURVIsICJNTCBNaWRMZXR0ZXIiKSwKKyAgICBWYWx1ZShVX1dCX01JRE5VTSwgIk1OIE1pZE51bSIpLAorICAgIFZhbHVlKFVfV0JfTlVNRVJJQywgIk5VIE51bWVyaWMiKSwKKyAgICBWYWx1ZShVX1dCX0VYVEVORE5VTUxFVCwgIkVYIEV4dGVuZE51bUxldCIpLAorICAgIFZhbHVlKFVfV0JfQ1IsICJDUiBDUiIpLAorICAgIFZhbHVlKFVfV0JfRVhURU5ELCAiRXh0ZW5kIEV4dGVuZCIpLAorICAgIFZhbHVlKFVfV0JfTEYsICJMRiBMRiIpLAorICAgIFZhbHVlKFVfV0JfTUlETlVNTEVULCAiTUIgTWlkTnVtTGV0IiksCisgICAgVmFsdWUoVV9XQl9ORVdMSU5FLCAiTkwgTmV3bGluZSIpLAorICAgIFZhbHVlKFVfV0JfUkVHSU9OQUxfSU5ESUNBVE9SLCAiUkkgUmVnaW9uYWxfSW5kaWNhdG9yIiksCit9OworCitzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTX2djbVszOF0gPSB7CisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19DX01BU0ssICJDIE90aGVyIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19DQ19NQVNLLCAiQ2MgQ29udHJvbCBjbnRybCIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfQ0ZfTUFTSywgIkNmIEZvcm1hdCIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfQ05fTUFTSywgIkNuIFVuYXNzaWduZWQiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0NPX01BU0ssICJDbyBQcml2YXRlX1VzZSIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfQ1NfTUFTSywgIkNzIFN1cnJvZ2F0ZSIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTF9NQVNLLCAiTCBMZXR0ZXIiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0xDX01BU0ssICJMQyBDYXNlZF9MZXR0ZXIiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX0xMX01BU0ssICJMbCBMb3dlcmNhc2VfTGV0dGVyIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19MTV9NQVNLLCAiTG0gTW9kaWZpZXJfTGV0dGVyIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19MT19NQVNLLCAiTG8gT3RoZXJfTGV0dGVyIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19MVF9NQVNLLCAiTHQgVGl0bGVjYXNlX0xldHRlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTFVfTUFTSywgIkx1IFVwcGVyY2FzZV9MZXR0ZXIiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX01fTUFTSywgIk0gTWFyayBDb21iaW5pbmdfTWFyayIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTUNfTUFTSywgIk1jIFNwYWNpbmdfTWFyayIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTUVfTUFTSywgIk1lIEVuY2xvc2luZ19NYXJrIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19NTl9NQVNLLCAiTW4gTm9uc3BhY2luZ19NYXJrIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19OX01BU0ssICJOIE51bWJlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTkRfTUFTSywgIk5kIERlY2ltYWxfTnVtYmVyIGRpZ2l0IiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19OTF9NQVNLLCAiTmwgTGV0dGVyX051bWJlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfTk9fTUFTSywgIk5vIE90aGVyX051bWJlciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfUF9NQVNLLCAiUCBQdW5jdHVhdGlvbiBwdW5jdCIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfUENfTUFTSywgIlBjIENvbm5lY3Rvcl9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfUERfTUFTSywgIlBkIERhc2hfUHVuY3R1YXRpb24iKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1BFX01BU0ssICJQZSBDbG9zZV9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfUEZfTUFTSywgIlBmIEZpbmFsX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19QSV9NQVNLLCAiUGkgSW5pdGlhbF9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfUE9fTUFTSywgIlBvIE90aGVyX1B1bmN0dWF0aW9uIiksCisgICAgVmFsdWUoKGludDMyX3QpVV9HQ19QU19NQVNLLCAiUHMgT3Blbl9QdW5jdHVhdGlvbiIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfU19NQVNLLCAiUyBTeW1ib2wiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1NDX01BU0ssICJTYyBDdXJyZW5jeV9TeW1ib2wiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1NLX01BU0ssICJTayBNb2RpZmllcl9TeW1ib2wiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1NNX01BU0ssICJTbSBNYXRoX1N5bWJvbCIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfU09fTUFTSywgIlNvIE90aGVyX1N5bWJvbCIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfWl9NQVNLLCAiWiBTZXBhcmF0b3IiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1pMX01BU0ssICJabCBMaW5lX1NlcGFyYXRvciIpLAorICAgIFZhbHVlKChpbnQzMl90KVVfR0NfWlBfTUFTSywgIlpwIFBhcmFncmFwaF9TZXBhcmF0b3IiKSwKKyAgICBWYWx1ZSgoaW50MzJfdClVX0dDX1pTX01BU0ssICJacyBTcGFjZV9TZXBhcmF0b3IiKSwKK307CisKK3N0YXRpYyBjb25zdCBQcm9wZXJ0eSBQUk9QRVJUSUVTWzk0XSA9IHsKKyAgICBQcm9wZXJ0eShVQ0hBUl9BTFBIQUJFVElDLCAiQWxwaGEgQWxwaGFiZXRpYyIpLAorICAgIFByb3BlcnR5KFVDSEFSX0FTQ0lJX0hFWF9ESUdJVCwgIkFIZXggQVNDSUlfSGV4X0RpZ2l0IiksCisgICAgUHJvcGVydHkoVUNIQVJfQklESV9DT05UUk9MLCAiQmlkaV9DIEJpZGlfQ29udHJvbCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0JJRElfTUlSUk9SRUQsICJCaWRpX00gQmlkaV9NaXJyb3JlZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0RBU0gsICJEYXNoIERhc2giKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BPSU5ULCAiREkgRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0RFUFJFQ0FURUQsICJEZXAgRGVwcmVjYXRlZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0RJQUNSSVRJQywgIkRpYSBEaWFjcml0aWMiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9FWFRFTkRFUiwgIkV4dCBFeHRlbmRlciIpLAorICAgIFByb3BlcnR5KFVDSEFSX0ZVTExfQ09NUE9TSVRJT05fRVhDTFVTSU9OLCAiQ29tcF9FeCBGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbiIpLAorICAgIFByb3BlcnR5KFVDSEFSX0dSQVBIRU1FX0JBU0UsICJHcl9CYXNlIEdyYXBoZW1lX0Jhc2UiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9HUkFQSEVNRV9FWFRFTkQsICJHcl9FeHQgR3JhcGhlbWVfRXh0ZW5kIiksCisgICAgUHJvcGVydHkoVUNIQVJfR1JBUEhFTUVfTElOSywgIkdyX0xpbmsgR3JhcGhlbWVfTGluayIpLAorICAgIFByb3BlcnR5KFVDSEFSX0hFWF9ESUdJVCwgIkhleCBIZXhfRGlnaXQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9IWVBIRU4sICJIeXBoZW4gSHlwaGVuIiksCisgICAgUHJvcGVydHkoVUNIQVJfSURfQ09OVElOVUUsICJJREMgSURfQ29udGludWUiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9JRF9TVEFSVCwgIklEUyBJRF9TdGFydCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0lERU9HUkFQSElDLCAiSWRlbyBJZGVvZ3JhcGhpYyIpLAorICAgIFByb3BlcnR5KFVDSEFSX0lEU19CSU5BUllfT1BFUkFUT1IsICJJRFNCIElEU19CaW5hcnlfT3BlcmF0b3IiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9JRFNfVFJJTkFSWV9PUEVSQVRPUiwgIklEU1QgSURTX1RyaW5hcnlfT3BlcmF0b3IiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9KT0lOX0NPTlRST0wsICJKb2luX0MgSm9pbl9Db250cm9sIiksCisgICAgUHJvcGVydHkoVUNIQVJfTE9HSUNBTF9PUkRFUl9FWENFUFRJT04sICJMT0UgTG9naWNhbF9PcmRlcl9FeGNlcHRpb24iKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9MT1dFUkNBU0UsICJMb3dlciBMb3dlcmNhc2UiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9NQVRILCAiTWF0aCBNYXRoIiksCisgICAgUHJvcGVydHkoVUNIQVJfTk9OQ0hBUkFDVEVSX0NPREVfUE9JTlQsICJOQ2hhciBOb25jaGFyYWN0ZXJfQ29kZV9Qb2ludCIpLAorICAgIFByb3BlcnR5KFVDSEFSX1FVT1RBVElPTl9NQVJLLCAiUU1hcmsgUXVvdGF0aW9uX01hcmsiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9SQURJQ0FMLCAiUmFkaWNhbCBSYWRpY2FsIiksCisgICAgUHJvcGVydHkoVUNIQVJfU09GVF9ET1RURUQsICJTRCBTb2Z0X0RvdHRlZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX1RFUk1JTkFMX1BVTkNUVUFUSU9OLCAiVGVybSBUZXJtaW5hbF9QdW5jdHVhdGlvbiIpLAorICAgIFByb3BlcnR5KFVDSEFSX1VOSUZJRURfSURFT0dSQVBILCAiVUlkZW8gVW5pZmllZF9JZGVvZ3JhcGgiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9VUFBFUkNBU0UsICJVcHBlciBVcHBlcmNhc2UiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9XSElURV9TUEFDRSwgIldTcGFjZSBXaGl0ZV9TcGFjZSBzcGFjZSIpLAorICAgIFByb3BlcnR5KFVDSEFSX1hJRF9DT05USU5VRSwgIlhJREMgWElEX0NvbnRpbnVlIiksCisgICAgUHJvcGVydHkoVUNIQVJfWElEX1NUQVJULCAiWElEUyBYSURfU3RhcnQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DQVNFX1NFTlNJVElWRSwgIlNlbnNpdGl2ZSBDYXNlX1NlbnNpdGl2ZSIpLAorICAgIFByb3BlcnR5KFVDSEFSX1NfVEVSTSwgIlNUZXJtIFNUZXJtIiksCisgICAgUHJvcGVydHkoVUNIQVJfVkFSSUFUSU9OX1NFTEVDVE9SLCAiVlMgVmFyaWF0aW9uX1NlbGVjdG9yIiksCisgICAgUHJvcGVydHkoVUNIQVJfTkZEX0lORVJULCAibmZkaW5lcnQgTkZEX0luZXJ0IiksCisgICAgUHJvcGVydHkoVUNIQVJfTkZLRF9JTkVSVCwgIm5ma2RpbmVydCBORktEX0luZXJ0IiksCisgICAgUHJvcGVydHkoVUNIQVJfTkZDX0lORVJULCAibmZjaW5lcnQgTkZDX0luZXJ0IiksCisgICAgUHJvcGVydHkoVUNIQVJfTkZLQ19JTkVSVCwgIm5ma2NpbmVydCBORktDX0luZXJ0IiksCisgICAgUHJvcGVydHkoVUNIQVJfU0VHTUVOVF9TVEFSVEVSLCAic2Vnc3RhcnQgU2VnbWVudF9TdGFydGVyIiksCisgICAgUHJvcGVydHkoVUNIQVJfUEFUVEVSTl9TWU5UQVgsICJQYXRfU3luIFBhdHRlcm5fU3ludGF4IiksCisgICAgUHJvcGVydHkoVUNIQVJfUEFUVEVSTl9XSElURV9TUEFDRSwgIlBhdF9XUyBQYXR0ZXJuX1doaXRlX1NwYWNlIiksCisgICAgUHJvcGVydHkoVUNIQVJfUE9TSVhfQUxOVU0sICIgYWxudW0iKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9QT1NJWF9CTEFOSywgIiBibGFuayIpLAorICAgIFByb3BlcnR5KFVDSEFSX1BPU0lYX0dSQVBILCAiIGdyYXBoIiksCisgICAgUHJvcGVydHkoVUNIQVJfUE9TSVhfUFJJTlQsICIgcHJpbnQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9QT1NJWF9YRElHSVQsICIgeGRpZ2l0IiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0FTRUQsICJDYXNlZCBDYXNlZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0NBU0VfSUdOT1JBQkxFLCAiQ0kgQ2FzZV9JZ25vcmFibGUiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DSEFOR0VTX1dIRU5fTE9XRVJDQVNFRCwgIkNXTCBDaGFuZ2VzX1doZW5fTG93ZXJjYXNlZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0NIQU5HRVNfV0hFTl9VUFBFUkNBU0VELCAiQ1dVIENoYW5nZXNfV2hlbl9VcHBlcmNhc2VkIiksCisgICAgUHJvcGVydHkoVUNIQVJfQ0hBTkdFU19XSEVOX1RJVExFQ0FTRUQsICJDV1QgQ2hhbmdlc19XaGVuX1RpdGxlY2FzZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DSEFOR0VTX1dIRU5fQ0FTRUZPTERFRCwgIkNXQ0YgQ2hhbmdlc19XaGVuX0Nhc2Vmb2xkZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DSEFOR0VTX1dIRU5fQ0FTRU1BUFBFRCwgIkNXQ00gQ2hhbmdlc19XaGVuX0Nhc2VtYXBwZWQiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9DSEFOR0VTX1dIRU5fTkZLQ19DQVNFRk9MREVELCAiQ1dLQ0YgQ2hhbmdlc19XaGVuX05GS0NfQ2FzZWZvbGRlZCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0JJRElfQ0xBU1MsICJiYyBCaWRpX0NsYXNzIiwgVkFMVUVTX2JjLCAxOSksCisgICAgUHJvcGVydHkoVUNIQVJfQkxPQ0ssICJibGsgQmxvY2siLCBWQUxVRVNfYmxrLCAyMjEpLAorICAgIFByb3BlcnR5KFVDSEFSX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MsICJjY2MgQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzcyIsIFZBTFVFU19jY2MsIDU3KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ERUNPTVBPU0lUSU9OX1RZUEUsICJkdCBEZWNvbXBvc2l0aW9uX1R5cGUiLCBWQUxVRVNfZHQsIDE4KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9FQVNUX0FTSUFOX1dJRFRILCAiZWEgRWFzdF9Bc2lhbl9XaWR0aCIsIFZBTFVFU19lYSwgNiksCisgICAgUHJvcGVydHkoVUNIQVJfR0VORVJBTF9DQVRFR09SWSwgImdjIEdlbmVyYWxfQ2F0ZWdvcnkiLCBWQUxVRVNfZ2MsIDMwKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9KT0lOSU5HX0dST1VQLCAiamcgSm9pbmluZ19Hcm91cCIsIFZBTFVFU19qZywgNTgpLAorICAgIFByb3BlcnR5KFVDSEFSX0pPSU5JTkdfVFlQRSwgImp0IEpvaW5pbmdfVHlwZSIsIFZBTFVFU19qdCwgNiksCisgICAgUHJvcGVydHkoVUNIQVJfTElORV9CUkVBSywgImxiIExpbmVfQnJlYWsiLCBWQUxVRVNfbGIsIDQwKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9OVU1FUklDX1RZUEUsICJudCBOdW1lcmljX1R5cGUiLCBWQUxVRVNfbnQsIDQpLAorICAgIFByb3BlcnR5KFVDSEFSX1NDUklQVCwgInNjIFNjcmlwdCIsIFZBTFVFU19zYywgMTU5KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9IQU5HVUxfU1lMTEFCTEVfVFlQRSwgImhzdCBIYW5ndWxfU3lsbGFibGVfVHlwZSIsIFZBTFVFU19oc3QsIDYpLAorICAgIFByb3BlcnR5KFVDSEFSX05GRF9RVUlDS19DSEVDSywgIk5GRF9RQyBORkRfUXVpY2tfQ2hlY2siLCBWQUxVRVNfTkZEX1FDLCAyKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ORktEX1FVSUNLX0NIRUNLLCAiTkZLRF9RQyBORktEX1F1aWNrX0NoZWNrIiwgVkFMVUVTX05GS0RfUUMsIDIpLAorICAgIFByb3BlcnR5KFVDSEFSX05GQ19RVUlDS19DSEVDSywgIk5GQ19RQyBORkNfUXVpY2tfQ2hlY2siLCBWQUxVRVNfTkZDX1FDLCAzKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9ORktDX1FVSUNLX0NIRUNLLCAiTkZLQ19RQyBORktDX1F1aWNrX0NoZWNrIiwgVkFMVUVTX05GS0NfUUMsIDMpLAorICAgIFByb3BlcnR5KFVDSEFSX0xFQURfQ0FOT05JQ0FMX0NPTUJJTklOR19DTEFTUywgImxjY2MgTGVhZF9DYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzIiwgVkFMVUVTX2xjY2MsIDU3KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9UUkFJTF9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTLCAidGNjYyBUcmFpbF9DYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzIiwgVkFMVUVTX3RjY2MsIDU3KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9HUkFQSEVNRV9DTFVTVEVSX0JSRUFLLCAiR0NCIEdyYXBoZW1lX0NsdXN0ZXJfQnJlYWsiLCBWQUxVRVNfR0NCLCAxMyksCisgICAgUHJvcGVydHkoVUNIQVJfU0VOVEVOQ0VfQlJFQUssICJTQiBTZW50ZW5jZV9CcmVhayIsIFZBTFVFU19TQiwgMTUpLAorICAgIFByb3BlcnR5KFVDSEFSX1dPUkRfQlJFQUssICJXQiBXb3JkX0JyZWFrIiwgVkFMVUVTX1dCLCAxNCksCisgICAgUHJvcGVydHkoVUNIQVJfR0VORVJBTF9DQVRFR09SWV9NQVNLLCAiZ2NtIEdlbmVyYWxfQ2F0ZWdvcnlfTWFzayIsIFZBTFVFU19nY20sIDM4KSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9OVU1FUklDX1ZBTFVFLCAibnYgTnVtZXJpY19WYWx1ZSIpLAorICAgIFByb3BlcnR5KFVDSEFSX0FHRSwgImFnZSBBZ2UiKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9CSURJX01JUlJPUklOR19HTFlQSCwgImJtZyBCaWRpX01pcnJvcmluZ19HbHlwaCIpLAorICAgIFByb3BlcnR5KFVDSEFSX0NBU0VfRk9MRElORywgImNmIENhc2VfRm9sZGluZyIpLAorICAgIFByb3BlcnR5KFVDSEFSX0lTT19DT01NRU5ULCAiaXNjIElTT19Db21tZW50IiksCisgICAgUHJvcGVydHkoVUNIQVJfTE9XRVJDQVNFX01BUFBJTkcsICJsYyBMb3dlcmNhc2VfTWFwcGluZyIpLAorICAgIFByb3BlcnR5KFVDSEFSX05BTUUsICJuYSBOYW1lIiksCisgICAgUHJvcGVydHkoVUNIQVJfU0lNUExFX0NBU0VfRk9MRElORywgInNjZiBTaW1wbGVfQ2FzZV9Gb2xkaW5nIHNmYyIpLAorICAgIFByb3BlcnR5KFVDSEFSX1NJTVBMRV9MT1dFUkNBU0VfTUFQUElORywgInNsYyBTaW1wbGVfTG93ZXJjYXNlX01hcHBpbmciKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9TSU1QTEVfVElUTEVDQVNFX01BUFBJTkcsICJzdGMgU2ltcGxlX1RpdGxlY2FzZV9NYXBwaW5nIiksCisgICAgUHJvcGVydHkoVUNIQVJfU0lNUExFX1VQUEVSQ0FTRV9NQVBQSU5HLCAic3VjIFNpbXBsZV9VcHBlcmNhc2VfTWFwcGluZyIpLAorICAgIFByb3BlcnR5KFVDSEFSX1RJVExFQ0FTRV9NQVBQSU5HLCAidGMgVGl0bGVjYXNlX01hcHBpbmciKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9VTklDT0RFXzFfTkFNRSwgIm5hMSBVbmljb2RlXzFfTmFtZSIpLAorICAgIFByb3BlcnR5KFVDSEFSX1VQUEVSQ0FTRV9NQVBQSU5HLCAidWMgVXBwZXJjYXNlX01hcHBpbmciKSwKKyAgICBQcm9wZXJ0eShVQ0hBUl9TQ1JJUFRfRVhURU5TSU9OUywgInNjeCBTY3JpcHRfRXh0ZW5zaW9ucyIpLAorfTsKKworY29uc3QgaW50MzJfdCBNQVhfQUxJQVNFUyA9IDQ7CmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VucHJvcHMvcG5hbWVzYnVpbGRlci5jcHAgYi91bmljb2RlL2MvZ2VucHJvcHMvcG5hbWVzYnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgzODA4NwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW5wcm9wcy9wbmFtZXNidWlsZGVyLmNwcApAQCAtMCwwICsxLDYwMCBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMTAvMTEvMDIgICAgYWxpdSAgICAgICAgQ3JlYXRpb24uCisqICAgMjAxMG5vdjE5ICAgTWFya3VzIFNjaGVyZXIgIFJld3JpdGUgZm9yIGZvcm1hdFZlcnNpb24gMi4KKyogICAyMDExZGVjMTggICBNYXJrdXMgU2NoZXJlciAgTW92ZWQgZ2VucG5hbWUvZ2VucG5hbWUuY3BwIHRvIGdlbnByb3BzL3BuYW1lc2J1aWxkZXIuY3BwLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS9ieXRlc3RyaWUuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2J5dGVzdHJpZWJ1aWxkZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3B1dGlsLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2xlYW4uaCIKKyNpbmNsdWRlICJjaGFyc3RyLmgiCisjaW5jbHVkZSAiY3N0cmluZy5oIgorI2luY2x1ZGUgImRlbnNlcmFuZ2VzLmgiCisjaW5jbHVkZSAiZ2VucHJvcHMuaCIKKyNpbmNsdWRlICJwcm9wbmFtZS5oIgorI2luY2x1ZGUgInRvb2x1dGlsLmgiCisjaW5jbHVkZSAidWhhc2guaCIKKyNpbmNsdWRlICJ1aW52Y2hhci5oIgorI2luY2x1ZGUgInVuZXdkYXRhLmgiCisjaW5jbHVkZSAidXZlY3RyMzIuaCIKKyNpbmNsdWRlICJ3cml0ZXNyYy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLy8gV2UgdGVzdCBmb3IgQVNDSUkgZGVsaW1pdGVycyBhbmQgV2hpdGVfU3BhY2UsIGFuZCBidWlsZCBBU0NJSSBzdHJpbmcgQnl0ZXNUcmllcy4KKyNpZiBVX0NIQVJTRVRfRkFNSUxZIT1VX0FTQ0lJX0ZBTUlMWQorIyAgIGVycm9yIFRoaXMgYnVpbGRlciByZXF1aXJlcyBVX0NIQVJTRVRfRkFNSUxZPT1VX0FTQ0lJX0ZBTUlMWS4KKyNlbmRpZgorCitVX05BTUVTUEFDRV9VU0UKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCRUdJTiBEQVRBCisvLyAKKy8vIFRoaXMgaXMgdGhlIHJhdyBkYXRhIHRvIGJlIG91dHB1dC4gIFdlIGRlZmluZSB0aGUgZGF0YSBzdHJ1Y3R1cmUsCisvLyB0aGVuIGluY2x1ZGUgYSBtYWNoaW5lLWdlbmVyYXRlZCBoZWFkZXIgdGhhdCBjb250YWlucyB0aGUgYWN0dWFsCisvLyBkYXRhLgorCisjaW5jbHVkZSAidW5pY29kZS91Y2hhci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5vcm0yLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2NyaXB0LmgiCisKKy8vIERpbGVtbWE6IFdlIHdhbnQgdG8gdXNlIE1BWF9BTElBU0VTIHRvIGRlZmluZSBmaWVsZHMgaW4gdGhlIFZhbHVlIGNsYXNzLgorLy8gSG93ZXZlciwgd2UgbmVlZCB0byBkZWZpbmUgdGhlIGNsYXNzIGJlZm9yZSBpbmNsdWRpbmcgdGhlIGRhdGEgaGVhZGVyCisvLyBhbmQgd2UgY2FuIHVzZSBNQVhfQUxJQVNFUyBvbmx5IGFmdGVyIGluY2x1ZGluZyBpdC4KKy8vIFNvIHdlIGRlZmluZSBhIHNlY29uZCBjb25zdGFudCBhbmQgYXQgcnVudGltZSBjaGVjayB0aGF0IGl0J3MgPj1NQVhfQUxJQVNFUy4KK3N0YXRpYyBjb25zdCBpbnQzMl90IFZBTFVFX01BWF9BTElBU0VTPTQ7CisKK3N0YXRpYyBjb25zdCBpbnQzMl90IEpPSU5FRF9BTElBU0VTX0NBUEFDSVRZPTEwMDsKKworY2xhc3MgVmFsdWUgeworcHVibGljOgorICAgIFZhbHVlKGludDMyX3QgZW51bVZhbHVlLCBjb25zdCBjaGFyICpqb2luZWRBbGlhc2VzKQorICAgICAgICAgICAgOiBlbnVtVmFsdWUoZW51bVZhbHVlKSwgam9pbmVkQWxpYXNlcyhqb2luZWRBbGlhc2VzKSwgY291bnQoMCkgeworICAgICAgICBpZih1cHJ2X3N0cmxlbihqb2luZWRBbGlhc2VzKT49Sk9JTkVEX0FMSUFTRVNfQ0FQQUNJVFkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IHBuYW1lc2J1aWxkZXIuY3BwIFZhbHVlOjpWYWx1ZSglbGQsIFwiJXNcIik6ICIKKyAgICAgICAgICAgICAgICAgICAgImpvaW5lZCBhbGlhc2VzIHRvbyBsb25nOiAiCisgICAgICAgICAgICAgICAgICAgICJpbmNyZWFzZSBKT0lORURfQUxJQVNFU19DQVBBQ0lUWSwgdG8gYXQgbGVhc3QgJWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZyllbnVtVmFsdWUsIGpvaW5lZEFsaWFzZXMsIHVwcnZfc3RybGVuKGpvaW5lZEFsaWFzZXMpKzEpOworICAgICAgICAgICAgZXhpdChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ29weSB0aGUgc3BhY2Utc2VwYXJhdGVkIGFsaWFzZXMgaW50byBOVUwtc2VwYXJhdGVkIG9uZXMgYW5kIGNvdW50IHRoZW0uCisgICAgICAgIC8vIFdyaXRlIGEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIGVhY2ggb25lLgorICAgICAgICBjb25zdCBjaGFyICpqPWpvaW5lZEFsaWFzZXM7CisgICAgICAgIGNoYXIgKmE9YWxpYXNlc0J1ZmZlcjsKKyAgICAgICAgY2hhciAqbj1ub3JtYWxpemVkQnVmZmVyOworICAgICAgICBjaGFyIGM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGFsaWFzZXNbY291bnRdPWE7CisgICAgICAgICAgICBub3JtYWxpemVkW2NvdW50KytdPW47CisgICAgICAgICAgICB3aGlsZSgoYz0qaisrKSE9JyAnICYmIGMhPTApIHsKKyAgICAgICAgICAgICAgICAqYSsrPWM7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlIGRlbGltaXRlcnMgJy0nIGFuZCAnXycuCisgICAgICAgICAgICAgICAgaWYoIShjPT0nLScgfHwgYz09J18nKSkgeworICAgICAgICAgICAgICAgICAgICAqbisrPXVwcnZfdG9sb3dlcihjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqYSsrPTA7CisgICAgICAgICAgICAqbisrPTA7CisgICAgICAgIH0gd2hpbGUoYyE9MCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV3JpdGVzIGF0IG1vc3QgTUFYX0FMSUFTRVMgcG9pbnRlcnMgZm9yIHVuaXF1ZSBub3JtYWxpemVkIGFsaWFzZXMKKyAgICAgKiAobm8gZW1wdHkgc3RyaW5ncykgdG8gZGVzdCBhbmQgcmV0dXJucyBob3cgbWFueSB0aGVyZSBhcmUuCisgICAgICovCisgICAgaW50MzJfdCBnZXRVbmlxdWVOb3JtYWxpemVkQWxpYXNlcyhjb25zdCBjaGFyICpkZXN0W10pIGNvbnN0IHsKKyAgICAgICAgaW50MzJfdCBudW1VbmlxdWU9MDsKKyAgICAgICAgZm9yKGludDMyX3QgaT0wOyBpPGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnM9bm9ybWFsaXplZFtpXTsKKyAgICAgICAgICAgIGlmKCpzIT0wKSB7ICAvLyBPbWl0IGVtcHR5IHN0cmluZ3MuCisgICAgICAgICAgICAgICAgZm9yKGludDMyX3Qgaj0wOzsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKGo9PW51bVVuaXF1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcyBpcyBhIG5ldyB1bmlxdWUgYWxpYXMuCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W251bVVuaXF1ZSsrXT1zOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoMD09dXBydl9zdHJjbXAocywgZGVzdFtqXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHMgaXMgZXF1YWwgb3IgZXF1aXZhbGVudCB0byBhbiBlYXJsaWVyIGFsaWFzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bVVuaXF1ZTsKKyAgICB9CisKKyAgICBpbnQzMl90IGVudW1WYWx1ZTsKKyAgICBjb25zdCBjaGFyICpqb2luZWRBbGlhc2VzOworICAgIGNoYXIgYWxpYXNlc0J1ZmZlcltKT0lORURfQUxJQVNFU19DQVBBQ0lUWV07CisgICAgY2hhciBub3JtYWxpemVkQnVmZmVyW0pPSU5FRF9BTElBU0VTX0NBUEFDSVRZXTsKKyAgICBjb25zdCBjaGFyICphbGlhc2VzW1ZBTFVFX01BWF9BTElBU0VTXTsKKyAgICBjb25zdCBjaGFyICpub3JtYWxpemVkW1ZBTFVFX01BWF9BTElBU0VTXTsKKyAgICBpbnQzMl90IGNvdW50OworfTsKKworY2xhc3MgUHJvcGVydHkgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIC8vIEEgcHJvcGVydHkgd2l0aCBhIHZhbHVlcyBhcnJheS4KKyAgICBQcm9wZXJ0eShpbnQzMl90IGVudW1WYWx1ZSwgY29uc3QgY2hhciAqam9pbmVkQWxpYXNlcywKKyAgICAgICAgICAgICBjb25zdCBWYWx1ZSAqdmFsdWVzLCBpbnQzMl90IHZhbHVlQ291bnQpCisgICAgICAgICAgICA6IFZhbHVlKGVudW1WYWx1ZSwgam9pbmVkQWxpYXNlcyksCisgICAgICAgICAgICAgIHZhbHVlcyh2YWx1ZXMpLCB2YWx1ZUNvdW50KHZhbHVlQ291bnQpIHt9CisgICAgLy8gQSBiaW5hcnkgcHJvcGVydHkgKGVudW1WYWx1ZTxVQ0hBUl9CSU5BUllfTElNSVQpLCBvciBvbmUgd2l0aG91dCB2YWx1ZXMuCisgICAgUHJvcGVydHkoaW50MzJfdCBlbnVtVmFsdWUsIGNvbnN0IGNoYXIgKmpvaW5lZEFsaWFzZXMpOworCisgICAgY29uc3QgVmFsdWUgKnZhbHVlczsKKyAgICBpbnQzMl90IHZhbHVlQ291bnQ7Cit9OworCisvLyAqKiogSW5jbHVkZSB0aGUgZGF0YSBoZWFkZXIgKioqCisjaW5jbHVkZSAicG5hbWVzX2RhdGEuaCIKKworUHJvcGVydHk6OlByb3BlcnR5KGludDMyX3QgZW51bVZhbHVlLCBjb25zdCBjaGFyICpqb2luZWRBbGlhc2VzKQorICAgICAgICA6IFZhbHVlKGVudW1WYWx1ZSwgam9pbmVkQWxpYXNlcyksCisgICAgICAgICAgdmFsdWVzKGVudW1WYWx1ZTxVQ0hBUl9CSU5BUllfTElNSVQgPyBWQUxVRVNfYmlucHJvcCA6IE5VTEwpLAorICAgICAgICAgIHZhbHVlQ291bnQoZW51bVZhbHVlPFVDSEFSX0JJTkFSWV9MSU1JVCA/IDIgOiAwKSB7fQorCisvLyBFTkQgREFUQQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFBOYW1lc1Byb3BlcnR5TmFtZXMgOiBwdWJsaWMgUHJvcGVydHlOYW1lcyB7CitwdWJsaWM6CisgICAgUE5hbWVzUHJvcGVydHlOYW1lcygpCisgICAgICAgICAgICA6IHZhbHVlTWFwcyhOVUxMKSwgYnl0ZXNUcmllcyhOVUxMKSB7fQorICAgIHZvaWQgaW5pdChjb25zdCBpbnQzMl90ICp2bSwgY29uc3QgdWludDhfdCAqYnQpIHsKKyAgICAgICAgdmFsdWVNYXBzPXZtOworICAgICAgICBieXRlc1RyaWVzPWJ0OworICAgIH0KKyAgICB2aXJ0dWFsIGludDMyX3QgZ2V0UHJvcGVydHlFbnVtKGNvbnN0IGNoYXIgKm5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgaW50MzJfdCBnZXRQcm9wZXJ0eVZhbHVlRW51bShpbnQzMl90IHByb3BlcnR5LCBjb25zdCBjaGFyICpuYW1lKSBjb25zdDsKK3ByaXZhdGU6CisgICAgaW50MzJfdCBmaW5kUHJvcGVydHkoaW50MzJfdCBwcm9wZXJ0eSkgY29uc3Q7CisgICAgVUJvb2wgY29udGFpbnNOYW1lKEJ5dGVzVHJpZSAmdHJpZSwgY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CisgICAgaW50MzJfdCBnZXRQcm9wZXJ0eU9yVmFsdWVFbnVtKGludDMyX3QgYnl0ZXNUcmllT2Zmc2V0LCBjb25zdCBjaGFyICphbGlhcykgY29uc3Q7CisKKyAgICBjb25zdCBpbnQzMl90ICp2YWx1ZU1hcHM7CisgICAgY29uc3QgdWludDhfdCAqYnl0ZXNUcmllczsKK307CisKK2NsYXNzIFBOYW1lc0J1aWxkZXJJbXBsIDogcHVibGljIFBOYW1lc0J1aWxkZXIgeworcHVibGljOgorICAgIFBOYW1lc0J1aWxkZXJJbXBsKFVFcnJvckNvZGUgJmVycm9yQ29kZSkKKyAgICAgICAgICAgIDogdmFsdWVNYXBzKGVycm9yQ29kZSksIGJ0YihlcnJvckNvZGUpLCBtYXhOYW1lTGVuZ3RoKDApLAorICAgICAgICAgICAgICBuYW1lR3JvdXBUb09mZnNldChOVUxMKSB7fQorCisgICAgflBOYW1lc0J1aWxkZXJJbXBsKCkgeworICAgICAgICB1aGFzaF9jbG9zZShuYW1lR3JvdXBUb09mZnNldCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJ1aWxkKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgICAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKyAgICAgICAgaWYoVkFMVUVfTUFYX0FMSUFTRVM8TUFYX0FMSUFTRVMpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZ2VucHJvcHMgZXJyb3I6IHBuYW1lc2J1aWxkZXIuY3BwIFZBTFVFX01BWF9BTElBU0VTPSVkPCVkPU1BWF9BTElBU0VTIC0tICIKKyAgICAgICAgICAgICAgICAgICAgIm5lZWQgdG8gY2hhbmdlIFZBTFVFX01BWF9BTElBU0VTIHRvIGF0IGxlYXN0ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAoaW50KVZBTFVFX01BWF9BTElBU0VTLCAoaW50KU1BWF9BTElBU0VTLCAoaW50KU1BWF9BTElBU0VTKTsKKyAgICAgICAgICAgIGVycm9yQ29kZT1VX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbmFtZUdyb3VwVG9PZmZzZXQ9dWhhc2hfb3Blbih1aGFzaF9oYXNoQ2hhcnMsIHVoYXNoX2NvbXBhcmVDaGFycywgTlVMTCwgJmVycm9yQ29kZSk7CisgICAgICAgIC8vIEJ1aWxkIG1haW4gcHJvcGVydHkgYWxpYXNlcyB2YWx1ZSBtYXAgYXQgdmFsdWUgbWFwIG9mZnNldCAwLAorICAgICAgICAvLyBzbyB0aGF0IHdlIG5lZWQgbm90IHN0b3JlIGFub3RoZXIgb2Zmc2V0IGZvciBpdC4KKyAgICAgICAgVVZlY3RvcjMyIHByb3BFbnVtcyhlcnJvckNvZGUpOworICAgICAgICBpbnQzMl90IHByb3BJbmRleDsKKyAgICAgICAgZm9yKHByb3BJbmRleD0wOyBwcm9wSW5kZXg8TEVOR1RIT0YoUFJPUEVSVElFUyk7ICsrcHJvcEluZGV4KSB7CisgICAgICAgICAgICBwcm9wRW51bXMuc29ydGVkSW5zZXJ0KFBST1BFUlRJRVNbcHJvcEluZGV4XS5lbnVtVmFsdWUsIGVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICAgICAgaW50MzJfdCByYW5nZXNbMTBdWzJdOworICAgICAgICBpbnQzMl90IG51bVByb3BSYW5nZXM9dXBydl9tYWtlRGVuc2VSYW5nZXMocHJvcEVudW1zLmdldEJ1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOR1RIT0YoUFJPUEVSVElFUyksIDB4MTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLCBMRU5HVEhPRihyYW5nZXMpKTsKKyAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQobnVtUHJvcFJhbmdlcywgZXJyb3JDb2RlKTsKKyAgICAgICAgaW50MzJfdCBpLCBqOworICAgICAgICBmb3IoaT0wOyBpPG51bVByb3BSYW5nZXM7ICsraSkgeworICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQocmFuZ2VzW2ldWzBdLCBlcnJvckNvZGUpOworICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQocmFuZ2VzW2ldWzFdKzEsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBmb3Ioaj1yYW5nZXNbaV1bMF07IGo8PXJhbmdlc1tpXVsxXTsgKytqKSB7CisgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZSB0d28gc2xvdHMgcGVyIHByb3BlcnR5IGZvciB0aGUgbmFtZSBncm91cCBvZmZzZXQgYW5kIHRoZSB2YWx1ZS1tYXAgb2Zmc2V0LgorICAgICAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KDAsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQoMCwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEJ1aWxkIHRoZSBwcm9wZXJ0aWVzIHRyaWUgZmlyc3QsIGF0IEJ5dGVzVHJpZSBvZmZzZXQgMCwKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBuZWVkIG5vdCBzdG9yZSBhbm90aGVyIG9mZnNldCBmb3IgaXQuCisgICAgICAgIGJ1aWxkUHJvcGVydGllc0J5dGVzVHJpZShQUk9QRVJUSUVTLCBMRU5HVEhPRihQUk9QRVJUSUVTKSwgZXJyb3JDb2RlKTsKKworICAgICAgICAvLyBCdWlsZCB0aGUgbmFtZSBncm91cCBmb3IgdGhlIGZpcnN0IHByb3BlcnR5LCBhdCBuYW1lR3JvdXBzIG9mZnNldCAwLgorICAgICAgICAvLyBOYW1lIGdyb3VwcyBmb3IgKnZhbHVlKiBhbGlhc2VzIG11c3Qgbm90IHN0YXJ0IGF0IG9mZnNldCAwCisgICAgICAgIC8vIGJlY2F1c2UgdGhhdCBpcyBhIG1pc3NpbmctdmFsdWUgbWFya2VyIGZvciBzcGFyc2UgdmFsdWUgcmFuZ2VzLgorICAgICAgICBzZXRQcm9wZXJ0eUludChQUk9QRVJUSUVTWzBdLmVudW1WYWx1ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVWYWx1ZUFsaWFzZXMoUFJPUEVSVElFU1swXSwgZXJyb3JDb2RlKSk7CisKKyAgICAgICAgLy8gQnVpbGQgdGhlIGtub3duLXJlcGVhdGVkIGJpbmFyeSBwcm9wZXJ0aWVzIG9uY2UuCisgICAgICAgIGludDMyX3QgYmluUHJvcHNWYWx1ZU1hcE9mZnNldD12YWx1ZU1hcHMuc2l6ZSgpOworICAgICAgICBpbnQzMl90IGJ5dGVzVHJpZU9mZnNldD1idWlsZFZhbHVlc0J5dGVzVHJpZShWQUxVRVNfYmlucHJvcCwgMiwgZXJyb3JDb2RlKTsKKyAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQoYnl0ZXNUcmllT2Zmc2V0LCBlcnJvckNvZGUpOworICAgICAgICBidWlsZFZhbHVlTWFwKFZBTFVFU19iaW5wcm9wLCAyLCBlcnJvckNvZGUpOworCisgICAgICAgIC8vIE5vdGU6IEl0IGlzIHNsaWdodGx5IHdhc3RlZnVsIHRvIHN0b3JlIGJpbmFyeSBwcm9wZXJ0aWVzIGxpa2UgYWxsIG90aGVycy4KKyAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGF0IHRoZXkgYXJlIGluIHRoZSBsb3dlc3QgcmFuZ2Ugb2YgcHJvcGVydHkgZW51bSB2YWx1ZXMKKyAgICAgICAgLy8gYW5kIHNoYXJlIHRoZSBzYW1lIG5hbWUgZ3JvdXAgYW5kIEJ5dGVzVHJpZSwKKyAgICAgICAgLy8gd2UgY291bGQganVzdCBzdG9yZSB0aG9zZSB0d28gaW5kZXhlcyBvbmNlLgorICAgICAgICAvLyAoVGhpcyB3b3VsZCBzYXZlIDggYnl0ZXMgcGVyIGJpbmFyeSBwcm9wZXJ0eSwgb3IgYWJvdXQgaGFsZiBhIGtpbG9ieXRlLikKKworICAgICAgICAvLyBCdWlsZCB0aGUga25vd24tcmVwZWF0ZWQgY2Fub25pY2FsIGNvbWJpbmluZyBjbGFzcyBwcm9wZXJ0aWVzIG9uY2UuCisgICAgICAgIGludDMyX3QgY2NjVmFsdWVNYXBPZmZzZXQ9dmFsdWVNYXBzLnNpemUoKTsKKyAgICAgICAgYnl0ZXNUcmllT2Zmc2V0PWJ1aWxkVmFsdWVzQnl0ZXNUcmllKFZBTFVFU19jY2MsIExFTkdUSE9GKFZBTFVFU19jY2MpLCBlcnJvckNvZGUpOworICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChieXRlc1RyaWVPZmZzZXQsIGVycm9yQ29kZSk7CisgICAgICAgIGJ1aWxkVmFsdWVNYXAoVkFMVUVTX2NjYywgTEVOR1RIT0YoVkFMVUVTX2NjYyksIGVycm9yQ29kZSk7CisKKyAgICAgICAgLy8gQnVpbGQgdGhlIHJlc3Qgb2YgdGhlIGRhdGEuCisgICAgICAgIGZvcihwcm9wSW5kZXg9MDsgcHJvcEluZGV4PExFTkdUSE9GKFBST1BFUlRJRVMpOyArK3Byb3BJbmRleCkgeworICAgICAgICAgICAgaWYocHJvcEluZGV4PjApIHsKKyAgICAgICAgICAgICAgICAvLyB3cml0ZVZhbHVlQWxpYXNlcyhQUk9QRVJUSUVTWzBdLCAuLi4pIGFscmVhZHkgZG9uZQorICAgICAgICAgICAgICAgIHNldFByb3BlcnR5SW50KFBST1BFUlRJRVNbcHJvcEluZGV4XS5lbnVtVmFsdWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVWYWx1ZUFsaWFzZXMoUFJPUEVSVElFU1twcm9wSW5kZXhdLCBlcnJvckNvZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludDMyX3QgdmFsdWVDb3VudD1QUk9QRVJUSUVTW3Byb3BJbmRleF0udmFsdWVDb3VudDsKKyAgICAgICAgICAgIGlmKHZhbHVlQ291bnQ+MCkgeworICAgICAgICAgICAgICAgIGludDMyX3QgdmFsdWVNYXBPZmZzZXQ7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWUgKnZhbHVlcz1QUk9QRVJUSUVTW3Byb3BJbmRleF0udmFsdWVzOworICAgICAgICAgICAgICAgIGlmKHZhbHVlcz09VkFMVUVTX2JpbnByb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVNYXBPZmZzZXQ9YmluUHJvcHNWYWx1ZU1hcE9mZnNldDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYodmFsdWVzPT1WQUxVRVNfY2NjIHx8IHZhbHVlcz09VkFMVUVTX2xjY2MgfHwgdmFsdWVzPT1WQUxVRVNfdGNjYykgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZU1hcE9mZnNldD1jY2NWYWx1ZU1hcE9mZnNldDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZU1hcE9mZnNldD12YWx1ZU1hcHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBieXRlc1RyaWVPZmZzZXQ9YnVpbGRWYWx1ZXNCeXRlc1RyaWUodmFsdWVzLCB2YWx1ZUNvdW50LCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChieXRlc1RyaWVPZmZzZXQsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkVmFsdWVNYXAodmFsdWVzLCB2YWx1ZUNvdW50LCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXRQcm9wZXJ0eUludChQUk9QRVJUSUVTW3Byb3BJbmRleF0uZW51bVZhbHVlLCAxLCB2YWx1ZU1hcE9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXcml0ZSB0aGUgaW5kZXhlcy4KKyAgICAgICAgaW50MzJfdCBvZmZzZXQ9KGludDMyX3Qpc2l6ZW9mKGluZGV4ZXMpOworICAgICAgICBpbmRleGVzW1Byb3BOYW1lRGF0YTo6SVhfVkFMVUVfTUFQU19PRkZTRVRdPW9mZnNldDsKKyAgICAgICAgb2Zmc2V0Kz12YWx1ZU1hcHMuc2l6ZSgpKjQ7CisgICAgICAgIGluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9CWVRFX1RSSUVTX09GRlNFVF09b2Zmc2V0OworICAgICAgICBvZmZzZXQrPWJ5dGVzVHJpZXMubGVuZ3RoKCk7CisgICAgICAgIGluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9OQU1FX0dST1VQU19PRkZTRVRdPW9mZnNldDsKKyAgICAgICAgb2Zmc2V0Kz1uYW1lR3JvdXBzLmxlbmd0aCgpOworICAgICAgICBmb3IoaT1Qcm9wTmFtZURhdGE6OklYX1JFU0VSVkVEM19PRkZTRVQ7IGk8PVByb3BOYW1lRGF0YTo6SVhfVE9UQUxfU0laRTsgKytpKSB7CisgICAgICAgICAgICBpbmRleGVzW2ldPW9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBpbmRleGVzW1Byb3BOYW1lRGF0YTo6SVhfTUFYX05BTUVfTEVOR1RIXT1tYXhOYW1lTGVuZ3RoOworICAgICAgICBmb3IoaT1Qcm9wTmFtZURhdGE6OklYX1JFU0VSVkVENzsgaTxQcm9wTmFtZURhdGE6OklYX0NPVU5UOyArK2kpIHsKKyAgICAgICAgICAgIGluZGV4ZXNbaV09MDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCFiZVF1aWV0KSB7CisgICAgICAgICAgICBwdXRzKCIqIHBuYW1lcy5pY3Ugc3RhdHMgKiIpOworICAgICAgICAgICAgcHJpbnRmKCJsZW5ndGggb2YgYWxsIHZhbHVlIG1hcHM6ICAlNmxkXG4iLCAobG9uZyl2YWx1ZU1hcHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHByaW50ZigibGVuZ3RoIG9mIGFsbCBCeXRlc1RyaWVzOiAgJTZsZFxuIiwgKGxvbmcpYnl0ZXNUcmllcy5sZW5ndGgoKSk7CisgICAgICAgICAgICBwcmludGYoImxlbmd0aCBvZiBhbGwgbmFtZSBncm91cHM6ICU2bGRcbiIsIChsb25nKW5hbWVHcm91cHMubGVuZ3RoKCkpOworICAgICAgICAgICAgcHJpbnRmKCJsZW5ndGggb2YgcG5hbWVzLmljdSBkYXRhOiAlNmxkXG4iLCAobG9uZylpbmRleGVzW1Byb3BOYW1lRGF0YTo6SVhfVE9UQUxfU0laRV0pOworICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHdyaXRlQ1NvdXJjZUZpbGUoY29uc3QgY2hhciAqcGF0aCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCaW5hcnlEYXRhKGNvbnN0IGNoYXIgKnBhdGgsIFVCb29sIHdpdGhDb3B5cmlnaHQsIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7CisKKyAgICBpbnQzMl90IHdyaXRlVmFsdWVBbGlhc2VzKGNvbnN0IFZhbHVlICZ2YWx1ZSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgICAgIGludDMyX3QgbmFtZU9mZnNldD11aGFzaF9nZXRpKG5hbWVHcm91cFRvT2Zmc2V0LCAodm9pZCAqKXZhbHVlLmpvaW5lZEFsaWFzZXMpOworICAgICAgICBpZihuYW1lT2Zmc2V0IT0wKSB7CisgICAgICAgICAgICAvLyBUaGUgc2FtZSBsaXN0IG9mIGFsaWFzZXMgaGFzIGJlZW4gd3JpdHRlbiBhbHJlYWR5LgorICAgICAgICAgICAgcmV0dXJuIG5hbWVPZmZzZXQtMTsgIC8vIFdhcyBpbmNyZW1lbnRlZCB0byByZXNlcnZlIDAgZm9yICJub3QgZm91bmQiLgorICAgICAgICB9CisgICAgICAgIC8vIFdyaXRlIHRoaXMgbm90LXlldC1zZWVuIGxpc3Qgb2YgYWxpYXNlcy4KKyAgICAgICAgbmFtZU9mZnNldD1uYW1lR3JvdXBzLmxlbmd0aCgpOworICAgICAgICB1aGFzaF9wdXRpKG5hbWVHcm91cFRvT2Zmc2V0LCAodm9pZCAqKXZhbHVlLmpvaW5lZEFsaWFzZXMsCisgICAgICAgICAgICAgICAgICAgbmFtZU9mZnNldCsxLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgLy8gVGhlIGZpcnN0IGJ5dGUgdGVsbHMgdXMgaG93IG1hbnkgYWxpYXNlcyB0aGVyZSBhcmUuCisgICAgICAgIC8vIFdlIHVzZSBvbmx5IHZhbHVlcyAwLi4weDFmIGluIHRoZSBmaXJzdCBieXRlIGJlY2F1c2Ugd2hlbiB3ZSB3cml0ZQorICAgICAgICAvLyB0aGUgbmFtZSBncm91cHMgYXMgYW4gaW52YXJpYW50LWNoYXJhY3RlciBzdHJpbmcgaW50byBhIHNvdXJjZSBmaWxlLAorICAgICAgICAvLyB0aG9zZSB2YWx1ZXMgKEMwIGNvbnRyb2wgY29kZXMpIGFyZSB3cml0dGVuIGFzIG51bWJlcnMgcmF0aGVyIHRoYW4gYXMgY2hhcmFjdGVycy4KKyAgICAgICAgaW50MzJfdCBjb3VudD12YWx1ZS5jb3VudDsKKyAgICAgICAgaWYoY291bnQ+PTB4MjApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IFRvbyBtYW55IGFsaWFzZXMgaW4gXCIlc1wiXG4iLCB2YWx1ZS5qb2luZWRBbGlhc2VzKTsKKyAgICAgICAgICAgIGV4aXQoVV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUik7CisgICAgICAgIH0KKyAgICAgICAgbmFtZUdyb3Vwcy5hcHBlbmQoKGNoYXIpY291bnQsIGVycm9yQ29kZSk7CisgICAgICAgIC8vIFRoZXJlIGlzIGF0IGxlYXN0IGEgc2hvcnQgbmFtZSAoc29tZXRpbWVzIGVtcHR5KSBhbmQgYSBsb25nIG5hbWUuIChjb3VudD49MikKKyAgICAgICAgLy8gTm90ZTogU29tZXRpbWVzIHRoZSBzaG9ydCBhbmQgbG9uZyBuYW1lcyBhcmUgdGhlIHNhbWUuCisgICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBjb3VsZCBzZXQgYSBmbGFnIGFuZCBvbWl0IHRoZSBkdXBsaWNhdGUsCisgICAgICAgIC8vIGJ1dCB0aGF0IHdvdWxkIHNhdmUgb25seSBhYm91dCAxLjM1JSBvZiB0b3RhbCBkYXRhIHNpemUgKFVuaWNvZGUgNi4wL0lDVSA0LjYpCisgICAgICAgIC8vIHdoaWNoIGlzIG5vdCB3b3J0aCB0aGUgdHJvdWJsZS4KKyAgICAgICAgLy8gTm90ZTogSW4gVW5pY29kZSA2LjEsIHRoZXJlIGFyZSBtb3JlIGR1cGxpY2F0ZXMgZHVlIHRvIG5ld2x5IGFkZGVkCisgICAgICAgIC8vIHNob3J0IG5hbWVzIGZvciBibG9ja3MgYW5kIG90aGVyIHByb3BlcnRpZXMuCisgICAgICAgIC8vIEl0IG1pZ2h0IG5vdyBiZSB3b3J0aCBjaGFuZ2luZyB0aGUgZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAgIGZvcihpbnQzMl90IGk9MDsgaTxjb3VudDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpzPXZhbHVlLmFsaWFzZXNbaV07CisgICAgICAgICAgICBpbnQzMl90IHNMZW5ndGg9dXBydl9zdHJsZW4ocykrMTsKKyAgICAgICAgICAgIGlmKHNMZW5ndGg+bWF4TmFtZUxlbmd0aCkgeworICAgICAgICAgICAgICAgIG1heE5hbWVMZW5ndGg9c0xlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWVHcm91cHMuYXBwZW5kKHMsIHNMZW5ndGgsIGVycm9yQ29kZSk7ICAvLyBpbmNsdWRpbmcgTlVMCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWVPZmZzZXQ7CisgICAgfQorCisgICAgdm9pZCBidWlsZFZhbHVlTWFwKGNvbnN0IFZhbHVlIHZhbHVlc1tdLCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgICAgIFVWZWN0b3IzMiBzb3J0ZWRWYWx1ZXMoZXJyb3JDb2RlKTsKKyAgICAgICAgVVZlY3RvcjMyIG5hbWVPZmZzZXRzKGVycm9yQ29kZSk7ICAvLyBQYXJhbGxlbCB0byB2YWx1ZXNbXS4KKyAgICAgICAgaW50MzJfdCBpOworICAgICAgICBmb3IoaT0wOyBpPGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBzb3J0ZWRWYWx1ZXMuc29ydGVkSW5zZXJ0KHZhbHVlc1tpXS5lbnVtVmFsdWUsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBuYW1lT2Zmc2V0cy5hZGRFbGVtZW50KHdyaXRlVmFsdWVBbGlhc2VzKHZhbHVlc1tpXSwgZXJyb3JDb2RlKSwgZXJyb3JDb2RlKTsKKyAgICAgICAgfQorICAgICAgICBpbnQzMl90IHJhbmdlc1sxMF1bMl07CisgICAgICAgIGludDMyX3QgbnVtUmFuZ2VzPXVwcnZfbWFrZURlbnNlUmFuZ2VzKHNvcnRlZFZhbHVlcy5nZXRCdWZmZXIoKSwgbGVuZ3RoLCAweGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMsIExFTkdUSE9GKHJhbmdlcykpOworICAgICAgICBpZihudW1SYW5nZXM+MCkgeworICAgICAgICAgICAgdmFsdWVNYXBzLmFkZEVsZW1lbnQobnVtUmFuZ2VzLCBlcnJvckNvZGUpOworICAgICAgICAgICAgZm9yKGk9MDsgaTxudW1SYW5nZXM7ICsraSkgeworICAgICAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KHJhbmdlc1tpXVswXSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChyYW5nZXNbaV1bMV0rMSwgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICBmb3IoaW50MzJfdCBqPXJhbmdlc1tpXVswXTsgajw9cmFuZ2VzW2ldWzFdOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJhbmdlIG1pZ2h0IG5vdCBiZSBjb21wbGV0ZWx5IGRlbnNlLCBzbyBqIG1pZ2h0IG5vdCBoYXZlIGFuIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIHdyaXRlIGEgbmFtZU9mZnNldCBvZiAwLgorICAgICAgICAgICAgICAgICAgICAvLyBSZWFsIG5hbWVPZmZzZXRzIGZvciBwcm9wZXJ0eSB2YWx1ZXMgYXJlIG5ldmVyIDAuCisgICAgICAgICAgICAgICAgICAgIC8vIChUaGUgZmlyc3QgbmFtZSBncm91cCBpcyBmb3IgdGhlIGZpcnN0IHByb3BlcnR5IG5hbWUuKQorICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlSW5kZXg9dmFsdWVzSW5kZXhPZih2YWx1ZXMsIGxlbmd0aCwgaik7CisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbmFtZU9mZnNldD0gdmFsdWVJbmRleD49MCA/IG5hbWVPZmZzZXRzLmVsZW1lbnRBdGkodmFsdWVJbmRleCkgOiAwOworICAgICAgICAgICAgICAgICAgICB2YWx1ZU1hcHMuYWRkRWxlbWVudChuYW1lT2Zmc2V0LCBlcnJvckNvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIGRlbnNlIHJhbmdlcy4KKyAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KDB4MTArbGVuZ3RoLCBlcnJvckNvZGUpOworICAgICAgICAgICAgZm9yKGk9MDsgaTxsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KHNvcnRlZFZhbHVlcy5lbGVtZW50QXRpKGkpLCBlcnJvckNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yKGk9MDsgaTxsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhbHVlTWFwcy5hZGRFbGVtZW50KAorICAgICAgICAgICAgICAgICAgICBuYW1lT2Zmc2V0cy5lbGVtZW50QXRpKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzSW5kZXhPZih2YWx1ZXMsIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZFZhbHVlcy5lbGVtZW50QXRpKGkpKSksIGVycm9yQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCB2YWx1ZXNJbmRleE9mKGNvbnN0IFZhbHVlIHZhbHVlc1tdLCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCB2YWx1ZSkgeworICAgICAgICBmb3IoaW50MzJfdCBpPTA7OyArK2kpIHsKKyAgICAgICAgICAgIGlmKHZhbHVlc1tpXS5lbnVtVmFsdWU9PXZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZvaWQgc2V0UHJvcGVydHlJbnQoaW50MzJfdCBwcm9wLCBpbnQzMl90IHN1YkluZGV4LCBpbnQzMl90IHZhbHVlKSB7CisgICAgICAgIC8vIEFzc3VtZSB0aGF0IHByb3AgaXMgaW4gdGhlIHZhbHVlTWFwcy5lbGVtZW50QXRpKDApIHJhbmdlcy4KKyAgICAgICAgaW50MzJfdCBpbmRleD0xOworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgIGludDMyX3QgcmFuZ2VTdGFydD12YWx1ZU1hcHMuZWxlbWVudEF0aShpbmRleCk7CisgICAgICAgICAgICBpbnQzMl90IHJhbmdlTGltaXQ9dmFsdWVNYXBzLmVsZW1lbnRBdGkoaW5kZXgrMSk7CisgICAgICAgICAgICBpbmRleCs9MjsKKyAgICAgICAgICAgIGlmKHJhbmdlU3RhcnQ8PXByb3AgJiYgcHJvcDxyYW5nZUxpbWl0KSB7CisgICAgICAgICAgICAgICAgdmFsdWVNYXBzLnNldEVsZW1lbnRBdCh2YWx1ZSwgaW5kZXgrMioocHJvcC1yYW5nZVN0YXJ0KStzdWJJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCs9MioocmFuZ2VMaW1pdC1yYW5nZVN0YXJ0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYWRkVmFsdWVUb0J5dGVzVHJpZShjb25zdCBWYWx1ZSAmdmFsdWUsIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgICAgICBjb25zdCBjaGFyICphbGlhc2VzW01BWF9BTElBU0VTXTsKKyAgICAgICAgaW50MzJfdCBudW1BbGlhc2VzPXZhbHVlLmdldFVuaXF1ZU5vcm1hbGl6ZWRBbGlhc2VzKGFsaWFzZXMpOworICAgICAgICBmb3IoaW50MzJfdCBpPTA7IGk8bnVtQWxpYXNlczsgKytpKSB7CisgICAgICAgICAgICBidGIuYWRkKGFsaWFzZXNbaV0sIHZhbHVlLmVudW1WYWx1ZSwgZXJyb3JDb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludDMyX3QgYnVpbGRWYWx1ZXNCeXRlc1RyaWUoY29uc3QgVmFsdWUgdmFsdWVzW10sIGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICAgICAgYnRiLmNsZWFyKCk7CisgICAgICAgIGZvcihpbnQzMl90IGk9MDsgaTxsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgYWRkVmFsdWVUb0J5dGVzVHJpZSh2YWx1ZXNbaV0sIGVycm9yQ29kZSk7CisgICAgICAgIH0KKyAgICAgICAgaW50MzJfdCBieXRlc1RyaWVPZmZzZXQ9Ynl0ZXNUcmllcy5sZW5ndGgoKTsKKyAgICAgICAgYnl0ZXNUcmllcy5hcHBlbmQoYnRiLmJ1aWxkU3RyaW5nUGllY2UoVVNUUklOR1RSSUVfQlVJTERfU01BTEwsIGVycm9yQ29kZSksIGVycm9yQ29kZSk7CisgICAgICAgIHJldHVybiBieXRlc1RyaWVPZmZzZXQ7CisgICAgfQorCisgICAgLy8gVmFyaWFudCBvZiBidWlsZFZhbHVlc0J5dGVzVHJpZSgpIGZvciBQcm9wZXJ0eS4KKyAgICAvLyBQcm9wZXJ0eSBpcy1hIFZhbHVlLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGlzIHRoZSBzYW1lLAorICAgIC8vIGJ1dCB3aGVuIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkgd2UgbmVlZCB0byBpbmNyZW1lbnQgYnkgdGhlIHJpZ2h0IG9iamVjdCBzaXplLgorICAgIGludDMyX3QgYnVpbGRQcm9wZXJ0aWVzQnl0ZXNUcmllKGNvbnN0IFByb3BlcnR5IHByb3BlcnRpZXNbXSwgaW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSB7CisgICAgICAgIGJ0Yi5jbGVhcigpOworICAgICAgICBmb3IoaW50MzJfdCBpPTA7IGk8bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGFkZFZhbHVlVG9CeXRlc1RyaWUocHJvcGVydGllc1tpXSwgZXJyb3JDb2RlKTsKKyAgICAgICAgfQorICAgICAgICBpbnQzMl90IGJ5dGVzVHJpZU9mZnNldD1ieXRlc1RyaWVzLmxlbmd0aCgpOworICAgICAgICBieXRlc1RyaWVzLmFwcGVuZChidGIuYnVpbGRTdHJpbmdQaWVjZShVU1RSSU5HVFJJRV9CVUlMRF9TTUFMTCwgZXJyb3JDb2RlKSwgZXJyb3JDb2RlKTsKKyAgICAgICAgcmV0dXJuIGJ5dGVzVHJpZU9mZnNldDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFByb3BlcnR5TmFtZXMgKmdldFByb3BlcnR5TmFtZXMoKSB7CisgICAgICAgIHBuYW1lcy5pbml0KHZhbHVlTWFwcy5nZXRCdWZmZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGJ5dGVzVHJpZXMuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiAmcG5hbWVzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQzMl90IGluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9DT1VOVF07CisgICAgVVZlY3RvcjMyIHZhbHVlTWFwczsKKyAgICBCeXRlc1RyaWVCdWlsZGVyIGJ0YjsKKyAgICBDaGFyU3RyaW5nIGJ5dGVzVHJpZXM7CisgICAgQ2hhclN0cmluZyBuYW1lR3JvdXBzOworICAgIGludDMyX3QgbWF4TmFtZUxlbmd0aDsKKyAgICBQTmFtZXNQcm9wZXJ0eU5hbWVzIHBuYW1lczsKKyAgICBVSGFzaHRhYmxlICpuYW1lR3JvdXBUb09mZnNldDsKK307CisKKy8qIFVEYXRhSW5mbyBjZi4gdWRhdGEuaCAqLworc3RhdGljIGNvbnN0IFVEYXRhSW5mbyBkYXRhSW5mbyA9IHsKKyAgICBzaXplb2YoVURhdGFJbmZvKSwKKyAgICAwLAorCisgICAgVV9JU19CSUdfRU5ESUFOLAorICAgIFVfQ0hBUlNFVF9GQU1JTFksCisgICAgc2l6ZW9mKFVDaGFyKSwKKyAgICAwLAorCisgICAgeyBQTkFNRV9TSUdfMCwgUE5BTUVfU0lHXzEsIFBOQU1FX1NJR18yLCBQTkFNRV9TSUdfMyB9LAorICAgIHsgMiwgMCwgMCwgMCB9LCAgICAgICAgICAgICAgICAgLyogZm9ybWF0VmVyc2lvbiAqLworICAgIFVOSUNPREVfVkVSU0lPTgorfTsKKwordm9pZAorUE5hbWVzQnVpbGRlckltcGw6OndyaXRlQmluYXJ5RGF0YShjb25zdCBjaGFyICpwYXRoLCBVQm9vbCB3aXRoQ29weXJpZ2h0LCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKyAgICBVTmV3RGF0YU1lbW9yeSAqcGRhdGE9dWRhdGFfY3JlYXRlKHBhdGgsIFBOQU1FX0RBVEFfVFlQRSwgUE5BTUVfREFUQV9OQU1FLCAmZGF0YUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29weXJpZ2h0ID8gVV9DT1BZUklHSFRfU1RSSU5HIDogMCwgJmVycm9yQ29kZSk7CisgICAgaWYoVV9GQUlMVVJFKGVycm9yQ29kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZW5wcm9wczogdWRhdGFfY3JlYXRlKCVzLCBwbmFtZXMuaWN1KSBmYWlsZWQgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICBwYXRoLCB1X2Vycm9yTmFtZShlcnJvckNvZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVkYXRhX3dyaXRlQmxvY2socGRhdGEsIGluZGV4ZXMsIFByb3BOYW1lRGF0YTo6SVhfQ09VTlQqNCk7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwZGF0YSwgdmFsdWVNYXBzLmdldEJ1ZmZlcigpLCB2YWx1ZU1hcHMuc2l6ZSgpKjQpOworICAgIHVkYXRhX3dyaXRlQmxvY2socGRhdGEsIGJ5dGVzVHJpZXMuZGF0YSgpLCBieXRlc1RyaWVzLmxlbmd0aCgpKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBkYXRhLCBuYW1lR3JvdXBzLmRhdGEoKSwgbmFtZUdyb3Vwcy5sZW5ndGgoKSk7CisKKyAgICBpbnQzMl90IGRhdGFMZW5ndGg9KGludDMyX3QpdWRhdGFfZmluaXNoKHBkYXRhLCAmZXJyb3JDb2RlKTsKKyAgICBpZihkYXRhTGVuZ3RoIT1pbmRleGVzW1Byb3BOYW1lRGF0YTo6SVhfVE9UQUxfU0laRV0pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgInVkYXRhX2ZpbmlzaChwbmFtZXMuaWN1KSByZXBvcnRzICVsZCBieXRlcyB3cml0dGVuIGJ1dCBzaG91bGQgYmUgJWxkXG4iLAorICAgICAgICAgICAgICAgIChsb25nKWRhdGFMZW5ndGgsIChsb25nKWluZGV4ZXNbUHJvcE5hbWVEYXRhOjpJWF9UT1RBTF9TSVpFXSk7CisgICAgICAgIGVycm9yQ29kZT1VX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgfQorfQorCit2b2lkCitQTmFtZXNCdWlsZGVySW1wbDo6d3JpdGVDU291cmNlRmlsZShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsKKyAgICBpZihVX0ZBSUxVUkUoZXJyb3JDb2RlKSkgeyByZXR1cm47IH0KKyAgICBGSUxFICpmPXVzcmNfY3JlYXRlKHBhdGgsICJwcm9wbmFtZV9kYXRhLmgiLAorICAgICAgICAgICAgICAgICAgICAgICAgImljdS90b29scy91bmljb2RlL2MvZ2VucHJvcHMvcG5hbWVzYnVpbGRlci5jcHAiKTsKKyAgICBpZihmPT1OVUxMKSB7CisgICAgICAgIGVycm9yQ29kZT1VX0ZJTEVfQUNDRVNTX0VSUk9SOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnB1dHMoIiNpZm5kZWYgSU5DTFVERURfRlJPTV9QUk9QTkFNRV9DUFBcbiIKKyAgICAgICAgICAiIyAgIGVycm9yIFRoaXMgZmlsZSBtdXN0IGJlICNpbmNsdWRlZCBmcm9tIHByb3BuYW1lLmNwcCBvbmx5LlxuIgorICAgICAgICAgICIjZW5kaWZcblxuIiwgZik7CisKKyAgICBmcHV0cygiVV9OQU1FU1BBQ0VfQkVHSU5cblxuIiwgZik7CisKKyAgICB1c3JjX3dyaXRlQXJyYXkoZiwgImNvbnN0IGludDMyX3QgUHJvcE5hbWVEYXRhOjppbmRleGVzWyVsZF09eyIsCisgICAgICAgICAgICAgICAgICAgIGluZGV4ZXMsIDMyLCBQcm9wTmFtZURhdGE6OklYX0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAifTtcblxuIik7CisgICAgdXNyY193cml0ZUFycmF5KGYsICJjb25zdCBpbnQzMl90IFByb3BOYW1lRGF0YTo6dmFsdWVNYXBzWyVsZF09e1xuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVNYXBzLmdldEJ1ZmZlcigpLCAzMiwgdmFsdWVNYXBzLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgIlxufTtcblxuIik7CisgICAgdXNyY193cml0ZUFycmF5KGYsICJjb25zdCB1aW50OF90IFByb3BOYW1lRGF0YTo6Ynl0ZXNUcmllc1slbGRdPXtcbiIsCisgICAgICAgICAgICAgICAgICAgIGJ5dGVzVHJpZXMuZGF0YSgpLCA4LCBieXRlc1RyaWVzLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAiXG59O1xuXG4iKTsKKyAgICB1c3JjX3dyaXRlQXJyYXlPZk1vc3RseUludkNoYXJzKAorICAgICAgICBmLCAiY29uc3QgY2hhciBQcm9wTmFtZURhdGE6Om5hbWVHcm91cHNbJWxkXT17XG4iLAorICAgICAgICBuYW1lR3JvdXBzLmRhdGEoKSwgbmFtZUdyb3Vwcy5sZW5ndGgoKSwKKyAgICAgICAgIlxufTtcblxuIik7CisKKyAgICBmcHV0cygiVV9OQU1FU1BBQ0VfRU5EXG4iLCBmKTsKKworICAgIGZjbG9zZShmKTsKK30KKworUE5hbWVzQnVpbGRlciAqCitjcmVhdGVQTmFtZXNCdWlsZGVyKFVFcnJvckNvZGUgJmVycm9yQ29kZSkgeworICAgIGlmKFVfRkFJTFVSRShlcnJvckNvZGUpKSB7IHJldHVybiBOVUxMOyB9CisgICAgUE5hbWVzQnVpbGRlciAqcGI9bmV3IFBOYW1lc0J1aWxkZXJJbXBsKGVycm9yQ29kZSk7CisgICAgaWYocGI9PU5VTEwpIHsKKyAgICAgICAgZXJyb3JDb2RlPVVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgfQorICAgIHJldHVybiBwYjsKK30KKworLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBhIHBhcnRpYWwgY29weSBvZiBydW50aW1lIHByb3BuYW1lLmNwcCBjb2RlLgorLy8gQ29uc2lkZXIgY2hhbmdpbmcgdGhhdCBpbnRvIGEgc2VtaS1wdWJsaWMgQVBJIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgorCitpbnQzMl90IFBOYW1lc1Byb3BlcnR5TmFtZXM6OmZpbmRQcm9wZXJ0eShpbnQzMl90IHByb3BlcnR5KSBjb25zdCB7CisgICAgaW50MzJfdCBpPTE7ICAvLyB2YWx1ZU1hcHMgaW5kZXgsIGluaXRpYWxseSBhZnRlciBudW1SYW5nZXMKKyAgICBmb3IoaW50MzJfdCBudW1SYW5nZXM9dmFsdWVNYXBzWzBdOyBudW1SYW5nZXM+MDsgLS1udW1SYW5nZXMpIHsKKyAgICAgICAgLy8gUmVhZCBhbmQgc2tpcCB0aGUgc3RhcnQgYW5kIGxpbWl0IG9mIHRoaXMgcmFuZ2UuCisgICAgICAgIGludDMyX3Qgc3RhcnQ9dmFsdWVNYXBzW2ldOworICAgICAgICBpbnQzMl90IGxpbWl0PXZhbHVlTWFwc1tpKzFdOworICAgICAgICBpKz0yOworICAgICAgICBpZihwcm9wZXJ0eTxzdGFydCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocHJvcGVydHk8bGltaXQpIHsKKyAgICAgICAgICAgIHJldHVybiBpKyhwcm9wZXJ0eS1zdGFydCkqMjsKKyAgICAgICAgfQorICAgICAgICBpKz0obGltaXQtc3RhcnQpKjI7ICAvLyBTa2lwIGFsbCBlbnRyaWVzIGZvciB0aGlzIHJhbmdlLgorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworVUJvb2wgUE5hbWVzUHJvcGVydHlOYW1lczo6Y29udGFpbnNOYW1lKEJ5dGVzVHJpZSAmdHJpZSwgY29uc3QgY2hhciAqbmFtZSkgY29uc3QgeworICAgIGlmKG5hbWU9PU5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBVU3RyaW5nVHJpZVJlc3VsdCByZXN1bHQ9VVNUUklOR1RSSUVfTk9fVkFMVUU7CisgICAgY2hhciBjOworICAgIHdoaWxlKChjPSpuYW1lKyspIT0wKSB7CisgICAgICAgIGM9dXBydl9pbnZDaGFyVG9Mb3dlcmNhc2VBc2NpaShjKTsKKyAgICAgICAgLy8gSWdub3JlIGRlbGltaXRlcnMgJy0nLCAnXycsIGFuZCBBU0NJSSBXaGl0ZV9TcGFjZS4KKyAgICAgICAgaWYoYz09MHgyZCB8fCBjPT0weDVmIHx8IGM9PTB4MjAgfHwgKDB4MDk8PWMgJiYgYzw9MHgwZCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKCFVU1RSSU5HVFJJRV9IQVNfTkVYVChyZXN1bHQpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0PXRyaWUubmV4dCgodWludDhfdCljKTsKKyAgICB9CisgICAgcmV0dXJuIFVTVFJJTkdUUklFX0hBU19WQUxVRShyZXN1bHQpOworfQorCitpbnQzMl90IFBOYW1lc1Byb3BlcnR5TmFtZXM6OmdldFByb3BlcnR5T3JWYWx1ZUVudW0oaW50MzJfdCBieXRlc1RyaWVPZmZzZXQsIGNvbnN0IGNoYXIgKmFsaWFzKSBjb25zdCB7CisgICAgQnl0ZXNUcmllIHRyaWUoYnl0ZXNUcmllcytieXRlc1RyaWVPZmZzZXQpOworICAgIGlmKGNvbnRhaW5zTmFtZSh0cmllLCBhbGlhcykpIHsKKyAgICAgICAgcmV0dXJuIHRyaWUuZ2V0VmFsdWUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gVUNIQVJfSU5WQUxJRF9DT0RFOworICAgIH0KK30KKworaW50MzJfdAorUE5hbWVzUHJvcGVydHlOYW1lczo6Z2V0UHJvcGVydHlFbnVtKGNvbnN0IGNoYXIgKmFsaWFzKSBjb25zdCB7CisgICAgcmV0dXJuIGdldFByb3BlcnR5T3JWYWx1ZUVudW0oMCwgYWxpYXMpOworfQorCitpbnQzMl90CitQTmFtZXNQcm9wZXJ0eU5hbWVzOjpnZXRQcm9wZXJ0eVZhbHVlRW51bShpbnQzMl90IHByb3BlcnR5LCBjb25zdCBjaGFyICphbGlhcykgY29uc3QgeworICAgIGludDMyX3QgdmFsdWVNYXBJbmRleD1maW5kUHJvcGVydHkocHJvcGVydHkpOworICAgIGlmKHZhbHVlTWFwSW5kZXg9PTApIHsKKyAgICAgICAgcmV0dXJuIFVDSEFSX0lOVkFMSURfQ09ERTsgIC8vIE5vdCBhIGtub3duIHByb3BlcnR5LgorICAgIH0KKyAgICB2YWx1ZU1hcEluZGV4PXZhbHVlTWFwc1t2YWx1ZU1hcEluZGV4KzFdOworICAgIGlmKHZhbHVlTWFwSW5kZXg9PTApIHsKKyAgICAgICAgcmV0dXJuIFVDSEFSX0lOVkFMSURfQ09ERTsgIC8vIFRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIG5hbWVkIHZhbHVlcy4KKyAgICB9CisgICAgLy8gdmFsdWVNYXBJbmRleCBpcyB0aGUgc3RhcnQgb2YgdGhlIHByb3BlcnR5J3MgdmFsdWVNYXAsCisgICAgLy8gd2hlcmUgdGhlIGZpcnN0IHdvcmQgaXMgdGhlIEJ5dGVzVHJpZSBvZmZzZXQuCisgICAgcmV0dXJuIGdldFByb3BlcnR5T3JWYWx1ZUVudW0odmFsdWVNYXBzW3ZhbHVlTWFwSW5kZXhdLCBhbGlhcyk7Cit9CmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VudWNhL0NNYWtlTGlzdHMudHh0IGIvdW5pY29kZS9jL2dlbnVjYS9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmQ3NTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBjcmVhdGVkIG9uOiAyMDEwanVuMDMKKyMgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyMgZWRpdGVkIG9uOiAyMDEwanVsMjAKKyMgZWRpdGVkIGJ5OiBTdHVhcnQgRy4gR2lsbAorYWRkX2V4ZWN1dGFibGUoZ2VudWNhIGdlbnVjYS5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoZ2VudWNhIGljdXVjIGljdWkxOG4gaWN1dHUpCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VudWNhL01ha2VmaWxlLmluIGIvdW5pY29kZS9jL2dlbnVjYS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjEzOGUyCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDk2IEBACisjIyBNYWtlZmlsZS5pbiBmb3IgSUNVIC0gdG9vbHMvZ2VudWNhCisjIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyMjIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworIyMgU291cmNlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbgorc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKwordG9wX2J1aWxkZGlyID0gLi4vLi4KKworaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvaWN1ZGVmcy5taworCisjIyBCdWlsZCBkaXJlY3RvcnkgaW5mb3JtYXRpb24KK3N1YmRpciA9IHRvb2xzL2dlbnVjYQorCitUQVJHRVRfU1RVQl9OQU1FID0gZ2VudWNhCisKK1NFQ1RJT04gPSA4CisKK01BTl9GSUxFUyA9ICQoVEFSR0VUX1NUVUJfTkFNRSkuJChTRUNUSU9OKQorCisKKyMjIEV4dHJhIGZpbGVzIHRvIHJlbW92ZSBmb3IgJ21ha2UgY2xlYW4nCitDTEVBTkZJTEVTID0gKn4gJChERVBTKSAkKE1BTl9GSUxFUykKKworIyMgVGFyZ2V0IGluZm9ybWF0aW9uCitUQVJHRVQgPSAkKEJJTkRJUikvJChUQVJHRVRfU1RVQl9OQU1FKSQoRVhFRVhUKQorCitpZm5lcSAoJCh0b3BfYnVpbGRkaXIpLCQodG9wX3NyY2RpcikpCitDUFBGTEFHUyArPSAtSSQodG9wX2J1aWxkZGlyKS9jb21tb24KK2VuZGlmCitDUFBGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvY29tbW9uIC1JJCh0b3Bfc3JjZGlyKS9pMThuIC1JJChzcmNkaXIpLy4uL3Rvb2x1dGlsCitMSUJTID0gJChMSUJJQ1VUT09MVVRJTCkgJChMSUJJQ1VJMThOKSAkKExJQklDVVVDKSAkKERFRkFVTFRfTElCUykgJChMSUJfTSkKKworT0JKRUNUUyA9IGdlbnVjYS5vIAorCitERVBTID0gJChPQkpFQ1RTOi5vPS5kKQorCisjIyBMaXN0IG9mIHBob255IHRhcmdldHMKKy5QSE9OWSA6IGFsbCBhbGwtbG9jYWwgaW5zdGFsbCBpbnN0YWxsLWxvY2FsIGNsZWFuIGNsZWFuLWxvY2FsCVwKK2Rpc3RjbGVhbiBkaXN0Y2xlYW4tbG9jYWwgZGlzdCBkaXN0LWxvY2FsIGNoZWNrIGNoZWNrLWxvY2FsIGluc3RhbGwtbWFuCisKKyMjIENsZWFyIHN1ZmZpeCBsaXN0CisuU1VGRklYRVMgOgorCisjIyBMaXN0IG9mIHN0YW5kYXJkIHRhcmdldHMKK2FsbDogYWxsLWxvY2FsCitpbnN0YWxsOiBpbnN0YWxsLWxvY2FsCitjbGVhbjogY2xlYW4tbG9jYWwKK2Rpc3RjbGVhbiA6IGRpc3RjbGVhbi1sb2NhbAorZGlzdDogZGlzdC1sb2NhbAorY2hlY2s6IGFsbCBjaGVjay1sb2NhbAorCithbGwtbG9jYWw6ICQoVEFSR0VUKSAkKE1BTl9GSUxFUykKKworaW5zdGFsbC1sb2NhbDogYWxsLWxvY2FsIGluc3RhbGwtbWFuCisJJChNS0lOU1RBTExESVJTKSAkKERFU1RESVIpJChzYmluZGlyKQorCSQoSU5TVEFMTCkgJChUQVJHRVQpICQoREVTVERJUikkKHNiaW5kaXIpCisKK2luc3RhbGwtbWFuOiAkKE1BTl9GSUxFUykKKwkkKE1LSU5TVEFMTERJUlMpICQoREVTVERJUikkKG1hbmRpcikvbWFuJChTRUNUSU9OKQorCSQoSU5TVEFMTF9EQVRBKSAkPyAkKERFU1RESVIpJChtYW5kaXIpL21hbiQoU0VDVElPTikKKworZGlzdC1sb2NhbDoKKworY2xlYW4tbG9jYWw6CisJdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgJChSTVYpICQoQ0xFQU5GSUxFUykKKwkkKFJNVikgJChUQVJHRVQpICQoT0JKRUNUUykKKworZGlzdGNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbAorCSQoUk1WKSBNYWtlZmlsZQorCitjaGVjay1sb2NhbDogYWxsLWxvY2FsCisKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisKKyQoVEFSR0VUKSA6ICQoT0JKRUNUUykKKwkkKExJTksuY2MpICQoT1VUT1BUKSRAICReICQoTElCUykgCisJJChQT1NUX0JVSUxEX1NURVApCisKKworJS4kKFNFQ1RJT04pOiAkKHNyY2RpcikvJS4kKFNFQ1RJT04pLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisKKworaWZlcSAoLCQoTUFLRUNNREdPQUxTKSkKKy1pbmNsdWRlICQoREVQUykKK2Vsc2UKK2lmbmVxICgkKHBhdHN1YnN0ICVjbGVhbiwsJChNQUtFQ01ER09BTFMpKSwpCistaW5jbHVkZSAkKERFUFMpCitlbmRpZgorZW5kaWYKKwpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnVjYS9nZW50ZXN0c3R1Yi5weSBiL3VuaWNvZGUvYy9nZW51Y2EvZ2VudGVzdHN0dWIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNmZGU4NQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGUvYy9nZW51Y2EvZ2VudGVzdHN0dWIucHkKQEAgLTAsMCArMSw1MyBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDksIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyMgICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgICBmaWxlIG5hbWU6ICBnZW50ZXN0c3R1Yi5weQorIyAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisjICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisjICAgaW5kZW50YXRpb246MgorCitfX2F1dGhvcl9fID0gIkNsYWlyZSBIbyIKKworaW1wb3J0IHN5cworCisjIHJlYWQgZmlsZQorcHJpbnQgImNvbW1hbmQ6ICBweXRob24gZ2VudGVzdHN0dWIucHkgPGlucHV0RmlsZU5hbWUudHh0PiAgPG91dHB1dEZpbGVOYW1lLnR4dD4iCitwcmludCAiaWYgdGhlIGZpbGVOYW1lLnR4dCBpcyBvbWl0dGVkLCB0aGUgZGVmYXVsdCBkYXRhIGZpbGUgaXMgQ29sbGF0aW9uVGVzdF9OT05fSUdOT1JBQkxFX1NIT1JULnR4dCIKK2lmIGxlbihzeXMuYXJndikgPj0gMjoKKyAgZm5hbWU9c3lzLmFyZ3ZbMV0KK2Vsc2UgOgorICBmbmFtZT0iQ29sbGF0aW9uVGVzdF9OT05fSUdOT1JBQkxFX1NIT1JULnR4dCIKK29wZW5maWxlID0gb3BlbihmbmFtZSwgJ3InKTsKKworI291dHB1dCBmaWxlIG5hbWUKK2V4dD1mbmFtZS5maW5kKCIudHh0Iik7CitpZiBsZW4oc3lzLmFyZ3YpID49MyA6CisgIHdGbmFtZSA9IHN5cy5hcmd2WzJdCitlbGlmIChleHQ+MCkgOgorICB3Rm5hbWUgPSBmbmFtZVs6ZXh0KzFdKyJfU1RVQi50eHQiCitlbHNlIDoKKyAgd0ZuYW1lID0gIm91dC50eHQiCit3cmZpbGUgPSBvcGVuKHdGbmFtZSwndycpCisKK3ByaW50ICJSZWFkaW5nIGZpbGU6ICIrZm5hbWUrIiAuLi4iCitwcmludCAiV3JpdGluZyBmaWxlOiAiK3dGbmFtZSsiIC4uLiIKK2NvdW50PTEwCitmb3IgbGluZSBpbiBvcGVuZmlsZS5yZWFkbGluZXMoKToKKyAgcG9zID0gbGluZS5maW5kKCIjIikKKyAgaWYgcG9zID09IDA6CisgICAgIyBwcmludCB0aGUgaGVhZGVyCisgICAgd3JmaWxlLndyaXRlKGxpbmUucnN0cmlwKCkrIlxuIikKKyAgICBjb250aW51ZQorICBpZiBwb3MgPj0gMDogbGluZSA9IGxpbmVbOnBvc10KKyAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgaWYgbGluZToKKyAgICBpZiAoY291bnQ9PTEwKToKKyAgICAgIHdyZmlsZS53cml0ZShsaW5lKyJcbiIpCisgICAgICBjb3VudD0wCisgICAgY291bnQ9Y291bnQrMQoraWYgY291bnQhPTE6CisgIGlmIGxpbmU6CisgICAgd3JmaWxlLndyaXRlKGxpbmUrIlxuIikgICMgd3JpdGUgdGhlIGxhc3QgY2FzZQord3JmaWxlLmNsb3NlKCkKK29wZW5maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLjguaW4gYi91bmljb2RlL2MvZ2VudWNhL2dlbnVjYS44LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YWIyN2QKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudWNhL2dlbnVjYS44LmluCkBAIC0wLDAgKzEsOTQgQEAKKy5cIiBIZXksIEVtYWNzISBUaGlzIGlzIC0qLW5yb2ZmLSotIHlvdSBrbm93Li4uCisuXCIKKy5cIiBnZW51Y2EuODogbWFudWFsIHBhZ2UgZm9yIHRoZSBnZW51Y2EgdXRpbGl0eQorLlwiCisuXCIgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNLCBJbmMuIGFuZCBvdGhlcnMuCisuXCIKKy5USCBHRU5VQ0EgOCAiMjIgRmVicnVhcnkgMjAwMSIgIklDVSBNQU5QQUdFIiAiSUNVIEBWRVJTSU9OQCBNYW51YWwiCisuU0ggTkFNRQorLkIgZ2VudWNhCitcLSBjcmVhdGUgdGhlIFVDQSBkYXRhIHRhYmxlCisuU0ggU1lOT1BTSVMKKy5CIGdlbnVjYQorWworLkJSICJcLWhcZlAsIFxmQlwtP1xmUCwgXGZCXC1cLWhlbHAiCitdCitbCisuQlIgIlwtVlxmUCwgXGZCXC1cLXZlcnNpb24iCitdCitbCisuQlIgIlwtdlxmUCwgXGZCXC1cLXZlcmJvc2UiCitdCitbCisuQkkgIlwtY1xmUCwgXGZCXC1cLWNvcHlyaWdodCIKK10KK1sKKy5CSSAiXC1zXGZQLCBcZkJcLVwtc291cmNlZGlyIiAiIHNvdXJjZSIKK10KK1sKKy5CSSAiXC1kXGZQLCBcZkJcLVwtZGVzdGRpciIgIiBkZXN0aW5hdGlvbiIKK10KK1sKKy5JUiBmaWxlCitdCisuU0ggREVTQ1JJUFRJT04KKy5CIGdlbnVjYQorY29tcGlsZXMgdGhlIFVuaWNvZGUgQ29sbGF0aW9uIEFsZ29yaXRobSAoVUNBKSBkYXRhIGZyb20KKy5JIGZpbGUKKyhvciBmcm9tCisuQiBGcmFjdGlvbmFsVUNBLnR4dAoraWYKKy5JIGZpbGUKK2lzIG9taXR0ZWQpIGludG8gaXRzIGJpbmFyeSBmb3JtLCB0aGUgZmlsZXMKKy5CIHVjYWRhdGEuZGF0CithbmQKKy5CUiBpbnZ1Y2EuZGF0IC4KK1RoZXNlIGJpbmFyeSBmaWxlcyBjYW4gdGhlbiBiZSByZWFkIGRpcmVjdGx5IGJ5IElDVSwgb3IgdXNlZCBieQorLkJSIHBrZ2RhdGEgKDgpCitmb3IgaW5jb3Jwb3JhdGlvbiBpbnRvIGEgbGFyZ2VyIGFyY2hpdmUgb3IgbGlicmFyeS4KKy5TSCBPUFRJT05TCisuVFAKKy5CUiAiXC1oXGZQLCBcZkJcLT9cZlAsIFxmQlwtXC1oZWxwIgorUHJpbnQgaGVscCBhYm91dCB1c2FnZSBhbmQgZXhpdC4KKy5UUAorLkJSICJcLVZcZlAsIFxmQlwtXC12ZXJzaW9uIgorUHJpbnQgdGhlIHZlcnNpb24gb2YKKy5CIGdlbnVjYQorYW5kIGV4aXQuCisuVFAKKy5CUiAiXC12XGZQLCBcZkJcLVwtdmVyYm9zZSIKK0Rpc3BsYXkgZXh0cmEgaW5mb3JtYXRpdmUgbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4KKy5UUAorLkJJICJcLWNcZlAsIFxmQlwtXC1jb3B5cmlnaHQiCitJbmNsdWRlIGEgY29weXJpZ2h0IG5vdGljZSBpbnRvIHRoZSBiaW5hcnkgZGF0YS4KKy5UUAorLkJJICJcLXNcZlAsIFxmQlwtXC1zb3VyY2VkaXIiICIgc291cmNlIgorU2V0IHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvCisuSVIgc291cmNlIC4KK1RoZSBkZWZhdWx0IHNvdXJjZSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorLkJSIElDVV9EQVRBIC4KKy5UUAorLkJJICJcLWRcZlAsIFxmQlwtXC1kZXN0ZGlyIiAiIGRlc3RpbmF0aW9uIgorU2V0IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgdG8KKy5JUiBkZXN0aW5hdGlvbiAuCitUaGUgZGVmYXVsdCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorLkJSIElDVV9EQVRBIC4KKy5TSCBFTlZJUk9OTUVOVAorLlRQIDEwCisuQiBJQ1VfREFUQQorU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBJQ1UgZGF0YS4gRGVmYXVsdHMgdG8KKy5CUiBAdGhlcGtnaWN1ZGF0YWRpckAvQFBBQ0tBR0VAL0BWRVJTSU9OQC8gLgorU29tZSB0b29scyBpbiBJQ1UgZGVwZW5kIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgdHJhaWxpbmcgc2xhc2guIEl0IGlzIHRodXMKK2ltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBwcmVzZW50IGlmCisuQiBJQ1VfREFUQQoraXMgc2V0LgorLlNIIEZJTEVTCisuVFAgMTUKKy5CIEZyYWN0aW9uYWxVQ0EudHh0CitNYWNoaW5lLXJlYWRhYmxlIGZpbGUgY29udGFpbmluZyBkYXRhIGZvciB0aGUgVW5pY29kZSBjb2xsYXRpb24gYWxnb3JpdGhtLgorLlNIIFZFUlNJT04KK0BWRVJTSU9OQAorLlNIIENPUFlSSUdIVAorQ29weXJpZ2h0IChDKSAyMDAxIElCTSwgSW5jLiBhbmQgb3RoZXJzLgorLlNIIFNFRSBBTFNPCisuQlIgcGtnZGF0YSAoOCkKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLmNwcCBiL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODU0MTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9nZW51Y2EuY3BwCkBAIC0wLDAgKzEsMTYzMiBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIGdlbnVjYS5jcHAKKyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIGF0IHRoZSBlbmQgb2YgWFggY2VudHVyeQorKiAgIGNyZWF0ZWQgYnk6IFZsYWRpbWlyIFdlaW5zdGVpbgorKgorKiAgIFRoaXMgcHJvZ3JhbSByZWFkcyB0aGUgRnJhbmN0aW9uYWwgVUNBIHRhYmxlIGFuZCBnZW5lcmF0ZXMKKyogICBpbnRlcm5hbCBmb3JtYXQgZm9yIFVDQSB0YWJsZSBhcyB3ZWxsIGFzIGludmVyc2UgVUNBIHRhYmxlLgorKiAgIEl0IHRoZW4gd3JpdGVzIGJpbmFyeSBmaWxlcyBjb250YWluaW5nIHRoZSBkYXRhOiB1Y2FkYXRhLmRhdCAKKyogICAmIGludnVjYS5kYXQKKyogICBDaGFuZ2UgaGlzdG9yeToKKyogICAwMi8yMy8yMDAxICBncmhvdGVuICAgICAgICAgICAgICAgICBNYWRlIGl0IGludG8gYSB0b29sCisqICAgMDIvMjMvMjAwMSAgd2VpdiAgICAgICAgICAgICAgICAgICAgTW92ZWQgZWxlbWVudCAmIHRhYmxlIGhhbmRsaW5nIGNvZGUgdG8gaTE4bgorKiAgIDA1LzA5LzIwMDEgIHdlaXYgICAgICAgICAgICAgICAgICAgIENhc2UgYml0cyBhcmUgbm93IGluIHRoZSBDRXMsIG5vdCBpbiBmcm9udAorKiAgIDEwLzI2LzIwMTAgIHNnaWxsICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHJlb3JkZXJpbmcgY29kZXMKKyovCisKKyNkZWZpbmUgVV9OT19ERUZBVUxUX0lOQ0xVREVfVVRGX0hFQURFUlMgMQorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3B1dGlsLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZGF0YS5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNsZWFuLmgiCisjaW5jbHVkZSAidW5pY29kZS91c2NyaXB0LmgiCisjaW5jbHVkZSAidW5pY29kZS91c3RyaW5nLmgiCisjaW5jbHVkZSAidW5pY29kZS91dGYxNi5oIgorI2luY2x1ZGUgImNoYXJzdHIuaCIKKyNpbmNsdWRlICJ1Y29sX2JsZC5oIgorI2luY2x1ZGUgInVjb2xfaW1wLmgiCisjaW5jbHVkZSAiZ2VudWNhLmgiCisjaW5jbHVkZSAidW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1cGFyc2UuaCIKKyNpbmNsdWRlICJ0b29sdXRpbC5oIgorI2luY2x1ZGUgInVuZXdkYXRhLmgiCisjaW5jbHVkZSAiY3N0cmluZy5oIgorI2luY2x1ZGUgImNtZW1vcnkuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgTEVOR1RIT0YoYXJyYXkpIChpbnQzMl90KShzaXplb2YoYXJyYXkpL3NpemVvZigoYXJyYXkpWzBdKSkKKworLyoqIFRoZSBtYXhpbXVtIFVURi0xNiBsZW5ndGggKG51bWJlciBvZiBVQ2hhcnMpIGluIGEgVUNBIGNvbnRyYWN0aW9uLiAqLworc3RhdGljIGNvbnN0IGludDMyX3QgTUFYX1VDQV9DT05UUkFDVElPTl9MRU5HVEg9NDsKKworLy8gc2NyaXB0IHJlb3JkZXJpbmcgc3RydWN0dXJlcwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVpbnQxNl90IHJlb3JkZXJDb2RlOworICAgIHVpbnQxNl90IG9mZnNldDsKK30gUmVvcmRlckluZGV4OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdWludDE2X3QgTEVBRF9CWVRFX1RPX1NDUklQVFNfSU5ERVhfTEVOR1RIOworICAgIHVpbnQxNl90KiBMRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWDsKKyAgICB1aW50MTZfdCBMRUFEX0JZVEVfVE9fU0NSSVBUU19EQVRBX0xFTkdUSDsKKyAgICB1aW50MTZfdCogTEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQTsKKyAgICB1aW50MTZfdCBMRUFEX0JZVEVfVE9fU0NSSVBUU19EQVRBX09GRlNFVDsKKyAgICAKKyAgICB1aW50MTZfdCBTQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWF9MRU5HVEg7CisgICAgUmVvcmRlckluZGV4KiBTQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWDsKKyAgICB1aW50MTZfdCBTQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWF9DT1VOVDsKKyAgICB1aW50MTZfdCBTQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBX0xFTkdUSDsKKyAgICB1aW50MTZfdCogU0NSSVBUX1RPX0xFQURfQllURVNfREFUQTsKKyAgICB1aW50MTZfdCBTQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBX09GRlNFVDsKK30gTGVhZEJ5dGVDb25zdGFudHM7CisKK2ludCBSZW9yZGVySW5kZXhDb21wYXJlcihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUmVvcmRlckluZGV4Kj4oYSktPnJlb3JkZXJDb2RlIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBSZW9yZGVySW5kZXgqPihiKS0+cmVvcmRlckNvZGU7ICAgIAorfQorCisvKgorICogR2xvYmFsIC0gdmVyYm9zaXR5CisgKi8KK1VCb29sIGJlVmVyYm9zZSA9IEZBTFNFOworCitzdGF0aWMgVVZlcnNpb25JbmZvIFVDQVZlcnNpb247CisKKyNpZiBVQ09ORklHX05PX0NPTExBVElPTgorCisvKiBkdW1teSBVRGF0YUluZm8gY2YuIHVkYXRhLmggKi8KK3N0YXRpYyBVRGF0YUluZm8gZHVtbXlEYXRhSW5mbyA9IHsKKyAgICBzaXplb2YoVURhdGFJbmZvKSwKKyAgICAwLAorCisgICAgVV9JU19CSUdfRU5ESUFOLAorICAgIFVfQ0hBUlNFVF9GQU1JTFksCisgICAgVV9TSVpFT0ZfVUNIQVIsCisgICAgMCwKKworICAgIHsgMCwgMCwgMCwgMCB9LCAgICAgICAgICAgICAgICAgLyogZHVtbXkgZGF0YUZvcm1hdCAqLworICAgIHsgMCwgMCwgMCwgMCB9LCAgICAgICAgICAgICAgICAgLyogZHVtbXkgZm9ybWF0VmVyc2lvbiAqLworICAgIHsgMCwgMCwgMCwgMCB9ICAgICAgICAgICAgICAgICAgLyogZHVtbXkgZGF0YVZlcnNpb24gKi8KK307CisKKyNlbHNlCisKK3N0YXRpYyBjb25zdCBVRGF0YUluZm8gdWNhRGF0YUluZm89eworICAgIHNpemVvZihVRGF0YUluZm8pLAorICAgIDAsCisKKyAgICBVX0lTX0JJR19FTkRJQU4sCisgICAgVV9DSEFSU0VUX0ZBTUlMWSwKKyAgICBzaXplb2YoVUNoYXIpLAorICAgIDAsCisKKyAgICB7VUNBX0RBVEFfRk9STUFUXzAsIFVDQV9EQVRBX0ZPUk1BVF8xLCBVQ0FfREFUQV9GT1JNQVRfMiwgVUNBX0RBVEFfRk9STUFUXzN9LCAgICAgLyogZGF0YUZvcm1hdD0iVUNvbCIgICAgICAgICAgICAqLworICAgIC8qIDAzLzI2LzIwMDIgYnVtcGVkIHVwIHZlcnNpb24gc2luY2UgZm9ybWF0IGhhcyBjaGFuZ2VkICovCisgICAgLyogMDkvMTYvMjAwMiBidW1wZWQgdXAgdmVyc2lvbiBzaW5jZSB3ZSB3ZW50IGZyb20gVUNvbEF0dHJpYnV0ZVZhbHVlICovCisgICAgLyogICAgICAgICAgICB0byBpbnQzMl90IGluIFVDb2xPcHRpb25TZXQgKi8KKyAgICAvKiAwNS8xMy8yMDAzIFRoaXMgb25lIGFsc28gdXBkYXRlZCBzaW5jZSB3ZSBhZGRlZCBVQ0EgYW5kIFVDRCB2ZXJzaW9ucyAqLworICAgIC8qICAgICAgICAgICAgdG8gaGVhZGVyICovCisgICAgLyogMDkvMTEvMjAwMyBBZGRpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgZGF0YSBzd2FwcGVyICovCisgICAge1VDQV9GT1JNQVRfVkVSU0lPTl8wLCBVQ0FfRk9STUFUX1ZFUlNJT05fMSwgVUNBX0ZPUk1BVF9WRVJTSU9OXzIsIFVDQV9GT1JNQVRfVkVSU0lPTl8zfSwgICAgICAgICAgICAgICAgIC8qIGZvcm1hdFZlcnNpb24gICAgICAgICAgICAgICAgKi8KKyAgICB7MCwgMCwgMCwgMH0gICAgICAgICAgICAgICAgICAvKiBkYXRhVmVyc2lvbiA9IFVuaWNvZGUgVmVyc2lvbiovCit9OworCitzdGF0aWMgY29uc3QgVURhdGFJbmZvIGludlVjYURhdGFJbmZvPXsKKyAgICBzaXplb2YoVURhdGFJbmZvKSwKKyAgICAwLAorCisgICAgVV9JU19CSUdfRU5ESUFOLAorICAgIFVfQ0hBUlNFVF9GQU1JTFksCisgICAgc2l6ZW9mKFVDaGFyKSwKKyAgICAwLAorCisgICAge0lOVlVDQV9EQVRBX0ZPUk1BVF8wLCBJTlZVQ0FfREFUQV9GT1JNQVRfMSwgSU5WVUNBX0RBVEFfRk9STUFUXzIsIElOVlVDQV9EQVRBX0ZPUk1BVF8zfSwgICAgIC8qIGRhdGFGb3JtYXQ9IkludkMiICAgICAgICAgICAgKi8KKyAgICAvKiAwMy8yNi8yMDAyIGJ1bXBlZCB1cCB2ZXJzaW9uIHNpbmNlIGZvcm1hdCBoYXMgY2hhbmdlZCAqLworICAgIC8qIDA0LzI5LzIwMDMgMi4xIGZvcm1hdCAtIHdlIGhhdmUgYWRkZWQgVUNBIHZlcnNpb24gdG8gaGVhZGVyICovCisgICAge0lOVlVDQV9GT1JNQVRfVkVSU0lPTl8wLCBJTlZVQ0FfRk9STUFUX1ZFUlNJT05fMSwgSU5WVUNBX0ZPUk1BVF9WRVJTSU9OXzIsIElOVlVDQV9GT1JNQVRfVkVSU0lPTl8zfSwgICAgICAgICAgICAgICAgIC8qIGZvcm1hdFZlcnNpb24gICAgICAgICAgICAgICAgKi8KKyAgICB7MCwgMCwgMCwgMH0gICAgICAgICAgICAgICAgICAvKiBkYXRhVmVyc2lvbiA9IFVuaWNvZGUgVmVyc2lvbiovCit9OworCitVQ0FFbGVtZW50cyBsZTsKKworLy8gcmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkCitpbnQzMl90IHJlYWRFbGVtZW50KGNoYXIgKipmcm9tLCBjaGFyICp0bywgY2hhciBzZXBhcmF0b3IsIFVFcnJvckNvZGUgKnN0YXR1cykgeworICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgaW50MzJfdCBpID0gMDsKKyAgICBmb3IoOzspIHsKKyAgICAgICAgY2hhciBjID0gKipmcm9tOworICAgICAgICBpZihjID09IHNlcGFyYXRvciB8fCAoc2VwYXJhdG9yID09ICcgJyAmJiBjID09ICdcdCcpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoYyA9PSAnXDAnKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZihjICE9ICcgJykgeworICAgICAgICAgICAgKihidWZmZXIraSsrKSA9IGM7CisgICAgICAgIH0KKyAgICAgICAgKCpmcm9tKSsrOworICAgIH0KKyAgICAoKmZyb20pKys7CisgICAgKihidWZmZXIgKyBpKSA9IDA7CisgICAgLy8qdG8gPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oYnVmZmVyKSsxKTsKKyAgICBzdHJjcHkodG8sIGJ1ZmZlcik7CisgICAgcmV0dXJuIGk7Cit9CisKK2ludDMyX3Qgc2tpcFVudGlsV2hpdGVTcGFjZShjaGFyICoqZnJvbSwgVUVycm9yQ29kZSAqc3RhdHVzKSB7CisgICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50MzJfdCBjb3VudCA9IDA7CisgICAgd2hpbGUgKCoqZnJvbSAhPSAnICcgJiYgKipmcm9tICE9ICdcdCcgJiYgKipmcm9tICE9ICdcMCcpIHsKKyAgICAgICAgKCpmcm9tKSsrOworICAgICAgICBjb3VudCsrOworICAgIH0KKyAgICByZXR1cm4gY291bnQ7Cit9CisKK2ludDMyX3Qgc2tpcFdoaXRlU3BhY2UoY2hhciAqKmZyb20sIFVFcnJvckNvZGUgKnN0YXR1cykgeworICAgIGlmIChVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludDMyX3QgY291bnQgPSAwOworICAgIHdoaWxlICgqKmZyb20gPT0gJyAnIHx8ICoqZnJvbSA9PSAnXHQnKSB7CisgICAgICAgICgqZnJvbSkrKzsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCit1aW50MzJfdCBnZXRTaW5nbGVDRVZhbHVlKGNoYXIgKnByaW1hcnksIGNoYXIgKnNlY29uZGFyeSwgY2hhciAqdGVydGlhcnksIFVFcnJvckNvZGUgKnN0YXR1cykgeworICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdWludDMyX3QgdmFsdWUgPSAwOworICAgIGNoYXIgcHJpbXNhdmUgPSAnXDAnOworICAgIGNoYXIgc2Vjc2F2ZSA9ICdcMCc7CisgICAgY2hhciB0ZXJzYXZlID0gJ1wwJzsKKyAgICBjaGFyICpwcmltZW5kID0gcHJpbWFyeSs0OworICAgIGlmKHN0cmxlbihwcmltYXJ5KSA+IDQpIHsKKyAgICAgICAgcHJpbXNhdmUgPSAqcHJpbWVuZDsKKyAgICAgICAgKnByaW1lbmQgPSAnXDAnOworICAgIH0KKyAgICBjaGFyICpzZWNlbmQgPSBzZWNvbmRhcnkrMjsKKyAgICBpZihzdHJsZW4oc2Vjb25kYXJ5KSA+IDIpIHsKKyAgICAgICAgc2Vjc2F2ZSA9ICpzZWNlbmQ7CisgICAgICAgICpzZWNlbmQgPSAnXDAnOworICAgIH0KKyAgICBjaGFyICp0ZXJlbmQgPSB0ZXJ0aWFyeSsyOworICAgIGlmKHN0cmxlbih0ZXJ0aWFyeSkgPiAyKSB7CisgICAgICAgIHRlcnNhdmUgPSAqdGVyZW5kOworICAgICAgICAqdGVyZW5kID0gJ1wwJzsKKyAgICB9CisgICAgdWludDMyX3QgcHJpbXZhbHVlID0gKHVpbnQzMl90KSgoKnByaW1hcnkhPSdcMCcpP3N0cnRvdWwocHJpbWFyeSwgJnByaW1lbmQsIDE2KTowKTsKKyAgICB1aW50MzJfdCBzZWN2YWx1ZSA9ICh1aW50MzJfdCkoKCpzZWNvbmRhcnkhPSdcMCcpP3N0cnRvdWwoc2Vjb25kYXJ5LCAmc2VjZW5kLCAxNik6MCk7CisgICAgdWludDMyX3QgdGVydmFsdWUgPSAodWludDMyX3QpKCgqdGVydGlhcnkhPSdcMCcpP3N0cnRvdWwodGVydGlhcnksICZ0ZXJlbmQsIDE2KTowKTsKKyAgICBpZihwcmltdmFsdWUgPD0gMHhGRikgeworICAgICAgcHJpbXZhbHVlIDw8PSA4OworICAgIH0KKworICAgIHZhbHVlID0gKChwcmltdmFsdWU8PFVDT0xfUFJJTUFSWU9SREVSU0hJRlQpJlVDT0xfUFJJTUFSWU9SREVSTUFTSyl8CisgICAgICAgICgoc2VjdmFsdWU8PFVDT0xfU0VDT05EQVJZT1JERVJTSElGVCkmVUNPTF9TRUNPTkRBUllPUkRFUk1BU0spfAorICAgICAgICAodGVydmFsdWUmVUNPTF9URVJUSUFSWU9SREVSTUFTSyk7CisKKyAgICBpZihwcmltc2F2ZSE9J1wwJykgeworICAgICAgICAqcHJpbWVuZCA9IHByaW1zYXZlOworICAgIH0KKyAgICBpZihzZWNzYXZlIT0nXDAnKSB7CisgICAgICAgICpzZWNlbmQgPSBzZWNzYXZlOworICAgIH0KKyAgICBpZih0ZXJzYXZlIT0nXDAnKSB7CisgICAgICAgICp0ZXJlbmQgPSB0ZXJzYXZlOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBpbnZlcnNlVGFibGVbMHhGRkZGXVszXTsKK3N0YXRpYyB1aW50MzJfdCBpbnZlcnNlUG9zID0gMDsKK3N0YXRpYyBVQ2hhciBzdHJpbmdDb250aW51ZVsweEZGRkZdOworc3RhdGljIHVpbnQzMl90IHNDb250UG9zID0gMDsKKworc3RhdGljIHZvaWQgYWRkTmV3SW52ZXJzZShVQ0FFbGVtZW50cyAqZWxlbWVudCwgVUVycm9yQ29kZSAqc3RhdHVzKSB7CisgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgIHJldHVybjsKKyAgfQorICBpZihiZVZlcmJvc2UgJiYgaXNDb250aW51YXRpb24oZWxlbWVudC0+Q0VzWzFdKSkgeworICAgIC8vcHJpbnRmKCIrIik7CisgIH0KKyAgaW52ZXJzZVBvcysrOworICBpbnZlcnNlVGFibGVbaW52ZXJzZVBvc11bMF0gPSBlbGVtZW50LT5DRXNbMF07CisgIGlmKGVsZW1lbnQtPm5vT2ZDRXMgPiAxICYmIGlzQ29udGludWF0aW9uKGVsZW1lbnQtPkNFc1sxXSkpIHsKKyAgICBpbnZlcnNlVGFibGVbaW52ZXJzZVBvc11bMV0gPSBlbGVtZW50LT5DRXNbMV07CisgIH0gZWxzZSB7CisgICAgaW52ZXJzZVRhYmxlW2ludmVyc2VQb3NdWzFdID0gMDsKKyAgfQorICBpZihlbGVtZW50LT5jU2l6ZSA8IDIpIHsKKyAgICBpbnZlcnNlVGFibGVbaW52ZXJzZVBvc11bMl0gPSBlbGVtZW50LT5jUG9pbnRzWzBdOworICB9IGVsc2UgeyAvKiBhZGQgYSBuZXcgc3RvcmUgb2YgY3J1ZnQgKi8KKyAgICBpbnZlcnNlVGFibGVbaW52ZXJzZVBvc11bMl0gPSAoKGVsZW1lbnQtPmNTaXplKzEpIDw8IFVDT0xfSU5WX1NISUZUVkFMVUUpIHwgc0NvbnRQb3M7CisgICAgbWVtY3B5KHN0cmluZ0NvbnRpbnVlK3NDb250UG9zLCBlbGVtZW50LT5jUG9pbnRzLCBlbGVtZW50LT5jU2l6ZSpzaXplb2YoVUNoYXIpKTsKKyAgICBzQ29udFBvcyArPSBlbGVtZW50LT5jU2l6ZSsxOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydEludmVyc2UoVUNBRWxlbWVudHMgKmVsZW1lbnQsIHVpbnQzMl90IHBvc2l0aW9uLCBVRXJyb3JDb2RlICpzdGF0dXMpIHsKKyAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYoYmVWZXJib3NlICYmIGlzQ29udGludWF0aW9uKGVsZW1lbnQtPkNFc1sxXSkpIHsKKyAgICAvL3ByaW50ZigiKyIpOworICB9CisgIGlmKHBvc2l0aW9uIDw9IGludmVyc2VQb3MpIHsKKyAgICAvKm1vdmUgc3R1ZmYgYXJvdW5kICovCisgICAgdWludDMyX3QgYW1vdW50VG9Nb3ZlID0gKGludmVyc2VQb3MgLSBwb3NpdGlvbisxKSpzaXplb2YoaW52ZXJzZVRhYmxlWzBdKTsKKyAgICB1cHJ2X21lbW1vdmUoaW52ZXJzZVRhYmxlW3Bvc2l0aW9uKzFdLCBpbnZlcnNlVGFibGVbcG9zaXRpb25dLCBhbW91bnRUb01vdmUpOworICB9CisgIGludmVyc2VUYWJsZVtwb3NpdGlvbl1bMF0gPSBlbGVtZW50LT5DRXNbMF07CisgIGlmKGVsZW1lbnQtPm5vT2ZDRXMgPiAxICYmIGlzQ29udGludWF0aW9uKGVsZW1lbnQtPkNFc1sxXSkpIHsKKyAgICBpbnZlcnNlVGFibGVbcG9zaXRpb25dWzFdID0gZWxlbWVudC0+Q0VzWzFdOworICB9IGVsc2UgeworICAgIGludmVyc2VUYWJsZVtwb3NpdGlvbl1bMV0gPSAwOworICB9CisgIGlmKGVsZW1lbnQtPmNTaXplIDwgMikgeworICAgIGludmVyc2VUYWJsZVtwb3NpdGlvbl1bMl0gPSBlbGVtZW50LT5jUG9pbnRzWzBdOworICB9IGVsc2UgeyAvKiBhZGQgYSBuZXcgc3RvcmUgb2YgY3J1ZnQgKi8KKyAgICBpbnZlcnNlVGFibGVbcG9zaXRpb25dWzJdID0gKChlbGVtZW50LT5jU2l6ZSsxKSA8PCBVQ09MX0lOVl9TSElGVFZBTFVFKSB8IHNDb250UG9zOworICAgIG1lbWNweShzdHJpbmdDb250aW51ZStzQ29udFBvcywgZWxlbWVudC0+Y1BvaW50cywgZWxlbWVudC0+Y1NpemUqc2l6ZW9mKFVDaGFyKSk7CisgICAgc0NvbnRQb3MgKz0gZWxlbWVudC0+Y1NpemUrMTsKKyAgfQorICBpbnZlcnNlUG9zKys7Cit9CisKK3N0YXRpYyB2b2lkIGFkZFRvRXhpc3RpbmdJbnZlcnNlKFVDQUVsZW1lbnRzICplbGVtZW50LCB1aW50MzJfdCBwb3NpdGlvbiwgVUVycm9yQ29kZSAqc3RhdHVzKSB7CisKKyAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgICAgIGlmKChpbnZlcnNlVGFibGVbcG9zaXRpb25dWzJdICYgVUNPTF9JTlZfU0laRU1BU0spID09IDApIHsgLyogc2luZ2xlIGVsZW1lbnQsIGhhdmUgdG8gbWFrZSBuZXcgZXh0ZW5zaW9uIHBsYWNlIGFuZCBwdXQgYm90aCBndXlzIHRoZXJlICovCisgICAgICAgIHN0cmluZ0NvbnRpbnVlW3NDb250UG9zXSA9IChVQ2hhcilpbnZlcnNlVGFibGVbcG9zaXRpb25dWzJdOworICAgICAgICBpbnZlcnNlVGFibGVbcG9zaXRpb25dWzJdID0gKChlbGVtZW50LT5jU2l6ZSszKSA8PCBVQ09MX0lOVl9TSElGVFZBTFVFKSB8IHNDb250UG9zOworICAgICAgICBzQ29udFBvcysrOworICAgICAgICBzdHJpbmdDb250aW51ZVtzQ29udFBvcysrXSA9IDB4RkZGRjsKKyAgICAgICAgbWVtY3B5KHN0cmluZ0NvbnRpbnVlK3NDb250UG9zLCBlbGVtZW50LT5jUG9pbnRzLCBlbGVtZW50LT5jU2l6ZSpzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgc0NvbnRQb3MgKz0gZWxlbWVudC0+Y1NpemU7CisgICAgICAgIHN0cmluZ0NvbnRpbnVlW3NDb250UG9zKytdID0gMHhGRkZFOworICAgICAgfSBlbHNlIHsgLyogYWRkaW5nIHRvIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGNvbnRpbnVpbmcgdGFibGUgKi8KKyAgICAgICAgdWludDMyX3QgY29udEluZGV4ID0gaW52ZXJzZVRhYmxlW3Bvc2l0aW9uXVsyXSAmIFVDT0xfSU5WX09GRlNFVE1BU0s7CisgICAgICAgIHVpbnQzMl90IGNvbnRTaXplID0gKGludmVyc2VUYWJsZVtwb3NpdGlvbl1bMl0gJiBVQ09MX0lOVl9TSVpFTUFTSykgPj4gVUNPTF9JTlZfU0hJRlRWQUxVRTsKKworICAgICAgICBpZihjb250SW5kZXgrY29udFNpemUgPCBzQ29udFBvcykgeworICAgICAgICAgIC8qZnByaW50ZihzdGRlcnIsICIuIiwgc0NvbnRQb3MsIGNvbnRJbmRleCtjb250U2l6ZSk7Ki8KKyAgICAgICAgICBtZW1jcHkoc3RyaW5nQ29udGludWUrY29udEluZGV4K2NvbnRTaXplK2VsZW1lbnQtPmNTaXplKzEsIHN0cmluZ0NvbnRpbnVlK2NvbnRJbmRleCtjb250U2l6ZSwgKGVsZW1lbnQtPmNTaXplKzEpKnNpemVvZihVQ2hhcikpOworICAgICAgICB9CisKKyAgICAgICAgc3RyaW5nQ29udGludWVbY29udEluZGV4K2NvbnRTaXplLTFdID0gMHhGRkZGOworICAgICAgICBtZW1jcHkoc3RyaW5nQ29udGludWUrY29udEluZGV4K2NvbnRTaXplLCBlbGVtZW50LT5jUG9pbnRzLCBlbGVtZW50LT5jU2l6ZSpzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgc0NvbnRQb3MgKz0gZWxlbWVudC0+Y1NpemUrMTsKKyAgICAgICAgc3RyaW5nQ29udGludWVbY29udEluZGV4K2NvbnRTaXplK2VsZW1lbnQtPmNTaXplXSA9IDB4RkZGRTsKKworICAgICAgICBpbnZlcnNlVGFibGVbcG9zaXRpb25dWzJdID0gKChjb250U2l6ZStlbGVtZW50LT5jU2l6ZSsxKSA8PCBVQ09MX0lOVl9TSElGVFZBTFVFKSB8IGNvbnRJbmRleDsKKyAgICAgIH0KK30KKworLyogCisgKiBUYWtlcyB0d28gQ0VzIChsZWFkIGFuZCBjb250aW51YXRpb24pIGFuZCAKKyAqIGNvbXBhcmVzIHRoZW0gYXMgQ0VzIHNob3VsZCBiZSBjb21wYXJlZDoKKyAqIHByaW1hcnkgdnMuIHByaW1hcnksIHNlY29uZGFyeSB2cy4gc2Vjb25kYXJ5CisgKiB0ZXJ0aWFyeSB2cy4gdGVydGlhcnkKKyAqLworc3RhdGljIGludDMyX3QgY29tcGFyZUNFcyh1aW50MzJfdCAqc291cmNlLCB1aW50MzJfdCAqdGFyZ2V0KSB7CisgIHVpbnQzMl90IHMxID0gc291cmNlWzBdLCBzMiwgdDEgPSB0YXJnZXRbMF0sIHQyOworICBpZihpc0NvbnRpbnVhdGlvbihzb3VyY2VbMV0pKSB7CisgICAgczIgPSBzb3VyY2VbMV07CisgIH0gZWxzZSB7CisgICAgczIgPSAwOworICB9CisgIGlmKGlzQ29udGludWF0aW9uKHRhcmdldFsxXSkpIHsKKyAgICB0MiA9IHRhcmdldFsxXTsKKyAgfSBlbHNlIHsKKyAgICB0MiA9IDA7CisgIH0KKyAgCisgIHVpbnQzMl90IHMgPSAwLCB0ID0gMDsKKyAgaWYoczEgPT0gdDEgJiYgczIgPT0gdDIpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBzID0gKHMxICYgMHhGRkZGMDAwMCl8KChzMiAmIDB4RkZGRjAwMDApPj4xNik7IAorICB0ID0gKHQxICYgMHhGRkZGMDAwMCl8KCh0MiAmIDB4RkZGRjAwMDApPj4xNik7IAorICBpZihzIDwgdCkgeworICAgIHJldHVybiAtMTsKKyAgfSBlbHNlIGlmKHMgPiB0KSB7CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSB7CisgICAgcyA9IChzMSAmIDB4MDAwMEZGMDApIHwgKHMyICYgMHgwMDAwRkYwMCk+Pjg7CisgICAgdCA9ICh0MSAmIDB4MDAwMEZGMDApIHwgKHQyICYgMHgwMDAwRkYwMCk+Pjg7CisgICAgaWYocyA8IHQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYocyA+IHQpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisgICAgICBzID0gKHMxICYgMHgwMDAwMDBGRik8PDggfCAoczIgJiAweDAwMDAwMEZGKTsKKyAgICAgIHQgPSAodDEgJiAweDAwMDAwMEZGKTw8OCB8ICh0MiAmIDB4MDAwMDAwRkYpOworICAgICAgaWYocyA8IHQpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhZGRUb0ludmVyc2UoVUNBRWxlbWVudHMgKmVsZW1lbnQsIFVFcnJvckNvZGUgKnN0YXR1cykgeworICB1aW50MzJfdCBwb3NpdGlvbiA9IGludmVyc2VQb3M7CisgIHVpbnQzMl90IHNhdmVFbGVtZW50ID0gZWxlbWVudC0+Q0VzWzBdOworICBpbnQzMl90IGNvbXBSZXN1bHQgPSAwOworICBlbGVtZW50LT5DRXNbMF0gJj0gMHhGRkZGRkYzRjsKKyAgaWYoZWxlbWVudC0+bm9PZkNFcyA9PSAxKSB7CisgICAgZWxlbWVudC0+Q0VzWzFdID0gMDsKKyAgfQorICBpZihpbnZlcnNlUG9zID09IDApIHsKKyAgICBpbnZlcnNlVGFibGVbMF1bMF0gPSBpbnZlcnNlVGFibGVbMF1bMV0gPSBpbnZlcnNlVGFibGVbMF1bMl0gPSAwOworICAgIGFkZE5ld0ludmVyc2UoZWxlbWVudCwgc3RhdHVzKTsKKyAgfSBlbHNlIGlmKGNvbXBhcmVDRXMoaW52ZXJzZVRhYmxlW2ludmVyc2VQb3NdLCBlbGVtZW50LT5DRXMpID4gMCkgeworICAgIHdoaWxlKChjb21wUmVzdWx0ID0gY29tcGFyZUNFcyhpbnZlcnNlVGFibGVbLS1wb3NpdGlvbl0sIGVsZW1lbnQtPkNFcykpID4gMCk7CisgICAgaWYoYmVWZXJib3NlKSB7IHByaW50ZigicDoldSAiLCAoaW50KXBvc2l0aW9uKTsgfQorICAgIGlmKGNvbXBSZXN1bHQgPT0gMCkgeworICAgICAgYWRkVG9FeGlzdGluZ0ludmVyc2UoZWxlbWVudCwgcG9zaXRpb24sIHN0YXR1cyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGluc2VydEludmVyc2UoZWxlbWVudCwgcG9zaXRpb24rMSwgc3RhdHVzKTsKKyAgICB9CisgIH0gZWxzZSBpZihjb21wYXJlQ0VzKGludmVyc2VUYWJsZVtpbnZlcnNlUG9zXSwgZWxlbWVudC0+Q0VzKSA9PSAwKSB7CisgICAgYWRkVG9FeGlzdGluZ0ludmVyc2UoZWxlbWVudCwgaW52ZXJzZVBvcywgc3RhdHVzKTsKKyAgfSBlbHNlIHsKKyAgICBhZGROZXdJbnZlcnNlKGVsZW1lbnQsIHN0YXR1cyk7CisgIH0KKyAgZWxlbWVudC0+Q0VzWzBdID0gc2F2ZUVsZW1lbnQ7CisgIGlmKGJlVmVyYm9zZSkgeyBwcmludGYoIisiKTsgfQorICByZXR1cm4gaW52ZXJzZVBvczsKK30KKworc3RhdGljIEludmVyc2VVQ0FUYWJsZUhlYWRlciAqYXNzZW1ibGVJbnZlcnNlVGFibGUoVUVycm9yQ29kZSAqc3RhdHVzKQoreworICBJbnZlcnNlVUNBVGFibGVIZWFkZXIgKnJlc3VsdCA9IE5VTEw7CisgIHVpbnQzMl90IGhlYWRlckJ5dGVTaXplID0gcGFkZGVkc2l6ZShzaXplb2YoSW52ZXJzZVVDQVRhYmxlSGVhZGVyKSk7CisgIHVpbnQzMl90IGludmVyc2VUYWJsZUJ5dGVTaXplID0gKGludmVyc2VQb3MrMikqc2l6ZW9mKHVpbnQzMl90KSozOworICB1aW50MzJfdCBjb250c0J5dGVTaXplID0gc0NvbnRQb3MgKiBzaXplb2YoVUNoYXIpOworICB1aW50MzJfdCBpID0gMDsKKworICByZXN1bHQgPSAoSW52ZXJzZVVDQVRhYmxlSGVhZGVyICopdXBydl9tYWxsb2MoaGVhZGVyQnl0ZVNpemUgKyBpbnZlcnNlVGFibGVCeXRlU2l6ZSArIGNvbnRzQnl0ZVNpemUpOworICB1cHJ2X21lbXNldChyZXN1bHQsIDAsIGhlYWRlckJ5dGVTaXplICsgaW52ZXJzZVRhYmxlQnl0ZVNpemUgKyBjb250c0J5dGVTaXplKTsKKyAgaWYocmVzdWx0ICE9IE5VTEwpIHsKKyAgICByZXN1bHQtPmJ5dGVTaXplID0gaGVhZGVyQnl0ZVNpemUgKyBpbnZlcnNlVGFibGVCeXRlU2l6ZSArIGNvbnRzQnl0ZVNpemU7CisKKyAgICBpbnZlcnNlUG9zKys7CisgICAgaW52ZXJzZVRhYmxlW2ludmVyc2VQb3NdWzBdID0gMHhGRkZGRkZGRjsKKyAgICBpbnZlcnNlVGFibGVbaW52ZXJzZVBvc11bMV0gPSAweEZGRkZGRkZGOworICAgIGludmVyc2VUYWJsZVtpbnZlcnNlUG9zXVsyXSA9IDB4MDAwMEZGRkY7CisgICAgaW52ZXJzZVBvcysrOworCisgICAgZm9yKGkgPSAyOyBpPGludmVyc2VQb3M7IGkrKykgeworICAgICAgaWYoY29tcGFyZUNFcyhpbnZlcnNlVGFibGVbaS0xXSwgaW52ZXJzZVRhYmxlW2ldKSA+IDApIHsgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYXQgJWk6ICUwOFggJiAlMDhYXG4iLCAoaW50KWksIChpbnQpaW52ZXJzZVRhYmxlW2ktMV1bMF0sIChpbnQpaW52ZXJzZVRhYmxlW2ldWzBdKTsKKyAgICAgIH0gZWxzZSBpZihpbnZlcnNlVGFibGVbaS0xXVswXSA9PSBpbnZlcnNlVGFibGVbaV1bMF0gJiYgIShpbnZlcnNlVGFibGVbaS0xXVsxXSA8IGludmVyc2VUYWJsZVtpXVsxXSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb250aW51YXRpb24gZXJyb3IgYXQgJWk6ICUwOFggJTA4WCAmICUwOFggJTA4WFxuIiwgKGludClpLCAoaW50KWludmVyc2VUYWJsZVtpLTFdWzBdLCAoaW50KWludmVyc2VUYWJsZVtpLTFdWzFdLCAoaW50KWludmVyc2VUYWJsZVtpXVswXSwgKGludClpbnZlcnNlVGFibGVbaV1bMV0pOworICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdC0+dGFibGVTaXplID0gaW52ZXJzZVBvczsKKyAgICByZXN1bHQtPmNvbnRzU2l6ZSA9IHNDb250UG9zOworCisgICAgcmVzdWx0LT50YWJsZSA9IGhlYWRlckJ5dGVTaXplOworICAgIHJlc3VsdC0+Y29udHMgPSBoZWFkZXJCeXRlU2l6ZSArIGludmVyc2VUYWJsZUJ5dGVTaXplOworCisgICAgbWVtY3B5KCh1aW50OF90ICopcmVzdWx0ICsgcmVzdWx0LT50YWJsZSwgaW52ZXJzZVRhYmxlLCBpbnZlcnNlVGFibGVCeXRlU2l6ZSk7CisgICAgbWVtY3B5KCh1aW50OF90ICopcmVzdWx0ICsgcmVzdWx0LT5jb250cywgc3RyaW5nQ29udGludWUsIGNvbnRzQnl0ZVNpemUpOworCisgIH0gZWxzZSB7CisgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gcmVzdWx0OyAKK30KKworCitzdGF0aWMgdm9pZCB3cml0ZU91dEludmVyc2VEYXRhKEludmVyc2VVQ0FUYWJsZUhlYWRlciAqZGF0YSwgCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvdXRwdXREaXIsIAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29weXJpZ2h0LAorICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKQoreworICAgIFVOZXdEYXRhTWVtb3J5ICpwRGF0YTsKKyAgICAKKyAgICBsb25nIGRhdGFMZW5ndGg7CisKKyAgICBVRGF0YUluZm8gaW52VWNhSW5mbzsKKyAgICB1cHJ2X21lbWNweSgmaW52VWNhSW5mbywgJmludlVjYURhdGFJbmZvLCBzaXplb2YoVURhdGFJbmZvKSk7CisgICAgdXBydl9tZW1jcHkoaW52VWNhSW5mby5kYXRhVmVyc2lvbiwgVUNBVmVyc2lvbiwgVV9NQVhfVkVSU0lPTl9MRU5HVEgpOworCisgICAgcERhdGE9dWRhdGFfY3JlYXRlKG91dHB1dERpciwgSU5WQ19EQVRBX1RZUEUsIElOVkNfREFUQV9OQU1FLCAmaW52VWNhSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgY29weXJpZ2h0LCBzdGF0dXMpOworCisgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHVuYWJsZSB0byBjcmVhdGUgJXMiSU5WQ19EQVRBX05BTUUiLCBlcnJvciAlc1xuIiwgb3V0cHV0RGlyLCB1X2Vycm9yTmFtZSgqc3RhdHVzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiB3cml0ZSB0aGUgZGF0YSB0byB0aGUgZmlsZSAqLworICAgIGlmIChiZVZlcmJvc2UpIHsKKyAgICAgICAgcHJpbnRmKCJXcml0aW5nIG91dCBpbnZlcnNlIFVDQSB0YWJsZTogJXMlYyVzLiVzXG4iLCBvdXRwdXREaXIsIFVfRklMRV9TRVBfQ0hBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZDX0RBVEFfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZDX0RBVEFfVFlQRSk7CisgICAgfQorICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGRhdGEsIGRhdGEtPmJ5dGVTaXplKTsKKworICAgIC8qIGZpbmlzaCB1cCAqLworICAgIGRhdGFMZW5ndGg9dWRhdGFfZmluaXNoKHBEYXRhLCBzdGF0dXMpOworICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBlcnJvciAlZCB3cml0aW5nIHRoZSBvdXRwdXQgZmlsZVxuIiwgKnN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IGhleDJudW0oY2hhciBoZXgpIHsKKyAgICBpZihoZXg+PScwJyAmJiBoZXggPD0nOScpIHsKKyAgICAgICAgcmV0dXJuIGhleC0nMCc7CisgICAgfSBlbHNlIGlmKGhleD49J2EnICYmIGhleDw9J2YnKSB7CisgICAgICAgIHJldHVybiBoZXgtJ2EnKzEwOworICAgIH0gZWxzZSBpZihoZXg+PSdBJyAmJiBoZXg8PSdGJykgeworICAgICAgICByZXR1cm4gaGV4LSdBJysxMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIHN0YXRpYyBjaGFyKiBDSEFSQUNURVJfQ0FURUdPUllfUkVPUkRFUl9DT0RFU1tdID0geworLy8gICAgICJacyIsICJOZCIsICJTYyIKKy8vIH07CisvLyBzdGF0aWMgY29uc3QgdWludDE2X3QgQ0hBUkFDVEVSX0NBVEVHT1JZX1JFT1JERVJfQ09ERV9PRkZTRVQgPSAweDEwMDA7CisvLyBzdGF0aWMgdWludDE2X3QgQ0hBUkFDVEVSX0NBVEVHT1JZX1JFT1JERVJfQ09ERVNfVkFMVUVbXSA9IHsKKy8vICAgICBVX1NQQUNFX1NFUEFSQVRPUiArIENIQVJBQ1RFUl9DQVRFR09SWV9SRU9SREVSX0NPREVfT0ZGU0VULAorLy8gICAgIFVfREVDSU1BTF9ESUdJVF9OVU1CRVIgKyBDSEFSQUNURVJfQ0FURUdPUllfUkVPUkRFUl9DT0RFX09GRlNFVCwgCisvLyAgICAgVV9DVVJSRU5DWV9TWU1CT0wgKyBDSEFSQUNURVJfQ0FURUdPUllfUkVPUkRFUl9DT0RFX09GRlNFVAorLy8gfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBpbnQzMl90IGNvZGU7Cit9IHNwZWNpYWxSZW9yZGVyVG9rZW5zW10gPSB7CisgICAgeyAiVEVSTUlOQVRPUiIsIC0yIH0sICAvLyAtMiBtZWFucyAiaWdub3JlIgorICAgIHsgIkxFVkVMLVNFUEFSQVRPUiIsIC0yIH0sCisgICAgeyAiRklFTEQtU0VQQVJBVE9SIiwgLTIgfSwKKyAgICB7ICJDT01QUkVTUyIsIC0yIH0sICAvLyBUT0RPOiBXZSBzaG91bGQgcGFyc2Uvc3RvcmUgd2hpY2ggbGVhZCBieXRlcyBhcmUgY29tcHJlc3NpYmxlOyB0aGVyZSBpcyBhIHRpY2tldCBmb3IgdGhhdC4KKyAgICB7ICJQVU5DVFVBVElPTiIsIFVDT0xfUkVPUkRFUl9DT0RFX1BVTkNUVUFUSU9OIH0sCisgICAgeyAiSU1QTElDSVQiLCBVU0NSSVBUX0hBTiB9LCAgLy8gSW1wbGljaXQgd2VpZ2h0cyBhcmUgdXN1YWxseSBmb3IgSGFuIGNoYXJhY3RlcnMuIEhhbiAmIHVuYXNzaWduZWQgc2hhcmUgYSBsZWFkIGJ5dGUuCisgICAgeyAiVFJBSUxJTkciLCAtMiB9LCAgLy8gV2UgZG8gbm90IHJlb3JkZXIgdHJhaWxpbmcgd2VpZ2h0cyAodGhvc2UgYWZ0ZXIgaW1wbGljaXRzKS4KKyAgICB7ICJTUEVDSUFMIiwgLTIgfSAgLy8gV2UgbXVzdCBuZXZlciByZW9yZGVyIGludGVybmFsLCBzcGVjaWFsIENFIGxlYWQgYnl0ZXMuCit9OworCitpbnQzMl90IGdldFJlb3JkZXJDb2RlKGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgICBpbnQzMl90IGNvZGUgPSB1Y29sX2ZpbmRSZW9yZGVyaW5nRW50cnkobmFtZSk7CisgICAgaWYgKGNvZGUgPj0gMCkgeworICAgICAgICByZXR1cm4gY29kZTsKKyAgICB9CisgICAgY29kZSA9IHVfZ2V0UHJvcGVydHlWYWx1ZUVudW0oVUNIQVJfU0NSSVBULCBuYW1lKTsKKyAgICBpZiAoY29kZSA+PSAwKSB7CisgICAgICAgIHJldHVybiBjb2RlOworICAgIH0KKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBMRU5HVEhPRihzcGVjaWFsUmVvcmRlclRva2Vucyk7ICsraSkgeworICAgICAgICBpZiAoMCA9PSBzdHJjbXAobmFtZSwgc3BlY2lhbFJlb3JkZXJUb2tlbnNbaV0ubmFtZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsUmVvcmRlclRva2Vuc1tpXS5jb2RlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsgIC8vIFNhbWUgYXMgVUNIQVJfSU5WQUxJRF9DT0RFIG9yIFVTQ1JJUFRfSU5WQUxJRF9DT0RFLgorfQorCitVQ0FFbGVtZW50cyAqcmVhZEFuRWxlbWVudChGSUxFICpkYXRhLCB0ZW1wVUNBVGFibGUgKnQsIFVDQUNvbnN0YW50cyAqY29uc3RzLCBMZWFkQnl0ZUNvbnN0YW50cyAqbGVhZEJ5dGVDb25zdGFudHMsIFVFcnJvckNvZGUgKnN0YXR1cykgeworICAgIHN0YXRpYyBpbnQgaXRlbXNUb0RhdGFCbG9jayA9IDA7CisgICAgc3RhdGljIGludCBzY3JpcHREYXRhV3JpdHRlbiA9IDA7CisgICAgY2hhciBidWZmZXJbMjA0OF0sIHByaW1hcnlbMTAwXSwgc2Vjb25kYXJ5WzEwMF0sIHRlcnRpYXJ5WzEwMF07CisgICAgVUNoYXIgdUJ1ZmZlclsyMDQ4XTsKKyAgICBVQ2hhciB1QnVmZmVyMlsyMDQ4XTsKKyAgICBVQ2hhciBsZWFkQnl0ZVsxMDBdLCBzY3JpcHRDb2RlWzEwMF07CisgICAgaW50MzJfdCBpID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdGhlVmFsdWU7CisgICAgY2hhciAqcG9pbnRlciA9IE5VTEw7CisgICAgY2hhciAqY29tbWVudFN0YXJ0ID0gTlVMTDsKKyAgICBjaGFyICpzdGFydENvZGVQb2ludCA9IE5VTEw7CisgICAgY2hhciAqZW5kQ29kZVBvaW50ID0gTlVMTDsKKyAgICBjaGFyICpyZXN1bHQgPSBmZ2V0cyhidWZmZXIsIDIwNDgsIGRhdGEpOworICAgIGludDMyX3QgYnVmbGVuID0gKGludDMyX3QpdXBydl9zdHJsZW4oYnVmZmVyKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICpwcmltYXJ5ID0gKnNlY29uZGFyeSA9ICp0ZXJ0aWFyeSA9ICdcMCc7CisgICAgKmxlYWRCeXRlID0gKnNjcmlwdENvZGUgPSAnXDAnOworICAgIGlmKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIGlmKGZlb2YoZGF0YSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlbXB0eSBsaW5lIGJ1dCBubyBFT0YhXG4iKTsKKyAgICAgICAgICAgICpzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUoYnVmbGVuPjAgJiYgKGJ1ZmZlcltidWZsZW4tMV0gPT0gJ1xyJyB8fCBidWZmZXJbYnVmbGVuLTFdID09ICdcbicpKSB7CisgICAgICBidWZmZXJbLS1idWZsZW5dID0gMDsKKyAgICB9CisKKyAgICBpZihidWZmZXJbMF0gPT0gMCB8fCBidWZmZXJbMF0gPT0gJyMnKSB7CisgICAgICAgIHJldHVybiBOVUxMOyAvLyBqdXN0IGEgY29tbWVudCwgc2tpcCB3aG9sZSBsaW5lCisgICAgfQorCisgICAgVUNBRWxlbWVudHMgKmVsZW1lbnQgPSAmbGU7CisgICAgbWVtc2V0KGVsZW1lbnQsIDAsIHNpemVvZigqZWxlbWVudCkpOworCisgICAgZW51bSBBY3Rpb25UeXBlIHsKKyAgICAgIFJFQURDRSwKKyAgICAgIFJFQURIRVgxLAorICAgICAgUkVBREhFWDIsCisgICAgICBSRUFEVUNBVkVSU0lPTiwKKyAgICAgIFJFQURMRUFEQllURVRPU0NSSVBUUywKKyAgICAgIFJFQURTQ1JJUFRUT0xFQURCWVRFUywKKyAgICAgIElHTk9SRSwKKyAgICB9OworCisgICAgLy8gRGlyZWN0aXZlcy4KKyAgICBpZihidWZmZXJbMF0gPT0gJ1snKSB7CisgICAgICB1aW50MzJfdCBjbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNoYXIgbmFtZVsxMjhdOworICAgICAgICB1aW50MzJfdCAqd2hhdDsKKyAgICAgICAgQWN0aW9uVHlwZSB3aGF0X3RvX2RvOworICAgICAgfSB2dFtdICA9IHsgeyJbZmlyc3QgdGVydGlhcnkgaWdub3JhYmxlIiwgIGNvbnN0cy0+VUNBX0ZJUlNUX1RFUlRJQVJZX0lHTk9SQUJMRSwgIFJFQURDRX0sCisgICAgICAgICAgICAgICAgICB7IltsYXN0IHRlcnRpYXJ5IGlnbm9yYWJsZSIsICAgY29uc3RzLT5VQ0FfTEFTVF9URVJUSUFSWV9JR05PUkFCTEUsICAgUkVBRENFfSwKKyAgICAgICAgICAgICAgICAgIHsiW2ZpcnN0IHNlY29uZGFyeSBpZ25vcmFibGUiLCBjb25zdHMtPlVDQV9GSVJTVF9TRUNPTkRBUllfSUdOT1JBQkxFLCBSRUFEQ0V9LAorICAgICAgICAgICAgICAgICAgeyJbbGFzdCBzZWNvbmRhcnkgaWdub3JhYmxlIiwgIGNvbnN0cy0+VUNBX0xBU1RfU0VDT05EQVJZX0lHTk9SQUJMRSwgIFJFQURDRX0sCisgICAgICAgICAgICAgICAgICB7IltmaXJzdCBwcmltYXJ5IGlnbm9yYWJsZSIsICAgY29uc3RzLT5VQ0FfRklSU1RfUFJJTUFSWV9JR05PUkFCTEUsICAgUkVBRENFfSwKKyAgICAgICAgICAgICAgICAgIHsiW2xhc3QgcHJpbWFyeSBpZ25vcmFibGUiLCAgICBjb25zdHMtPlVDQV9MQVNUX1BSSU1BUllfSUdOT1JBQkxFLCAgICBSRUFEQ0V9LAorICAgICAgICAgICAgICAgICAgeyJbZmlyc3QgdmFyaWFibGUiLCAgICAgICAgICAgIGNvbnN0cy0+VUNBX0ZJUlNUX1ZBUklBQkxFLCAgICAgICAgICAgIFJFQURDRX0sCisgICAgICAgICAgICAgICAgICB7IltsYXN0IHZhcmlhYmxlIiwgICAgICAgICAgICAgY29uc3RzLT5VQ0FfTEFTVF9WQVJJQUJMRSwgICAgICAgICAgICAgUkVBRENFfSwKKyAgICAgICAgICAgICAgICAgIHsiW2ZpcnN0IHJlZ3VsYXIiLCAgICAgICAgICAgICBjb25zdHMtPlVDQV9GSVJTVF9OT05fVkFSSUFCTEUsICAgICAgICBSRUFEQ0V9LAorICAgICAgICAgICAgICAgICAgeyJbbGFzdCByZWd1bGFyIiwgICAgICAgICAgICAgIGNvbnN0cy0+VUNBX0xBU1RfTk9OX1ZBUklBQkxFLCAgICAgICAgIFJFQURDRX0sCisgICAgICAgICAgICAgICAgICB7IltmaXJzdCBpbXBsaWNpdCIsICAgICAgICAgICAgY29uc3RzLT5VQ0FfRklSU1RfSU1QTElDSVQsICAgICAgICAgICAgUkVBRENFfSwKKyAgICAgICAgICAgICAgICAgIHsiW2xhc3QgaW1wbGljaXQiLCAgICAgICAgICAgICBjb25zdHMtPlVDQV9MQVNUX0lNUExJQ0lULCAgICAgICAgICAgICBSRUFEQ0V9LAorICAgICAgICAgICAgICAgICAgeyJbZmlyc3QgdHJhaWxpbmciLCAgICAgICAgICAgIGNvbnN0cy0+VUNBX0ZJUlNUX1RSQUlMSU5HLCAgICAgICAgICAgIFJFQURDRX0sCisgICAgICAgICAgICAgICAgICB7IltsYXN0IHRyYWlsaW5nIiwgICAgICAgICAgICAgY29uc3RzLT5VQ0FfTEFTVF9UUkFJTElORywgICAgICAgICAgICAgUkVBRENFfSwKKworICAgICAgICAgICAgICAgICAgeyJbZml4ZWQgdG9wIiwgICAgICAgICAgICAgICAgICAgICZjb25zdHMtPlVDQV9QUklNQVJZX1RPUF9NSU4sICAgICAgIFJFQURIRVgxfSwKKyAgICAgICAgICAgICAgICAgIHsiW2ZpeGVkIGZpcnN0IGltcGxpY2l0IGJ5dGUiLCAgICAmY29uc3RzLT5VQ0FfUFJJTUFSWV9JTVBMSUNJVF9NSU4sICBSRUFESEVYMX0sCisgICAgICAgICAgICAgICAgICB7IltmaXhlZCBsYXN0IGltcGxpY2l0IGJ5dGUiLCAgICAgJmNvbnN0cy0+VUNBX1BSSU1BUllfSU1QTElDSVRfTUFYLCAgUkVBREhFWDF9LAorICAgICAgICAgICAgICAgICAgeyJbZml4ZWQgZmlyc3QgdHJhaWwgYnl0ZSIsICAgICAgICZjb25zdHMtPlVDQV9QUklNQVJZX1RSQUlMSU5HX01JTiwgIFJFQURIRVgxfSwKKyAgICAgICAgICAgICAgICAgIHsiW2ZpeGVkIGxhc3QgdHJhaWwgYnl0ZSIsICAgICAgICAmY29uc3RzLT5VQ0FfUFJJTUFSWV9UUkFJTElOR19NQVgsICBSRUFESEVYMX0sCisgICAgICAgICAgICAgICAgICB7IltmaXhlZCBmaXJzdCBzcGVjaWFsIGJ5dGUiLCAgICAgJmNvbnN0cy0+VUNBX1BSSU1BUllfU1BFQ0lBTF9NSU4sICAgUkVBREhFWDF9LAorICAgICAgICAgICAgICAgICAgeyJbZml4ZWQgbGFzdCBzcGVjaWFsIGJ5dGUiLCAgICAgICZjb25zdHMtPlVDQV9QUklNQVJZX1NQRUNJQUxfTUFYLCAgIFJFQURIRVgxfSwKKyAgICAgICAgICAgICAgICAgIHsiW3ZhcmlhYmxlIHRvcCA9ICIsICAgICAgICAgICAgICAmdC0+b3B0aW9ucy0+dmFyaWFibGVUb3BWYWx1ZSwgICAgICBSRUFESEVYMn0sCisgICAgICAgICAgICAgICAgICB7IltVQ0EgdmVyc2lvbiA9ICIsICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRFVDQVZFUlNJT059LAorICAgICAgICAgICAgICAgICAgeyJbdG9wX2J5dGUiLCAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQURMRUFEQllURVRPU0NSSVBUU30sCisgICAgICAgICAgICAgICAgICB7IltyZW9yZGVyaW5nVG9rZW5zIiwgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRFNDUklQVFRPTEVBREJZVEVTfSwKKyAgICAgICAgICAgICAgICAgIHsiW2NhdGVnb3JpZXMiLCAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR05PUkV9LAorICAgICAgICAgICAgICAgICAgeyJbZmlyc3QgdGVydGlhcnkgaW4gc2Vjb25kYXJ5IG5vbi1pZ25vcmFibGUiLCAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFfSwKKyAgICAgICAgICAgICAgICAgIHsiW2xhc3QgdGVydGlhcnkgaW4gc2Vjb25kYXJ5IG5vbi1pZ25vcmFibGUiLCAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFfSwKKyAgICAgICAgICAgICAgICAgIHsiW2ZpcnN0IHNlY29uZGFyeSBpbiBwcmltYXJ5IG5vbi1pZ25vcmFibGUiLCAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdOT1JFfSwKKyAgICAgICAgICAgICAgICAgIHsiW2xhc3Qgc2Vjb25kYXJ5IGluIHByaW1hcnkgbm9uLWlnbm9yYWJsZSIsICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR05PUkV9LAorICAgICAgfTsKKyAgICAgIGZvciAoY250ID0gMDsgY250PHNpemVvZih2dCkvc2l6ZW9mKHZ0WzBdKTsgY250KyspIHsKKyAgICAgICAgdWludDMyX3QgdnRMZW4gPSAodWludDMyX3QpdXBydl9zdHJsZW4odnRbY250XS5uYW1lKTsKKyAgICAgICAgaWYodXBydl9zdHJuY21wKGJ1ZmZlciwgdnRbY250XS5uYW1lLCB2dExlbikgPT0gMCkgeworICAgICAgICAgICAgQWN0aW9uVHlwZSB3aGF0X3RvX2RvID0gdnRbY250XS53aGF0X3RvX2RvOworICAgICAgICAgICAgaWYgKHdoYXRfdG9fZG8gPT0gSUdOT1JFKSB7IC8vdnRbY250XS53aGF0X3RvX2RvID09IElHTk9SRQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfSBlbHNlIGlmKHdoYXRfdG9fZG8gPT0gUkVBREhFWDEgfHwgd2hhdF90b19kbyA9PSBSRUFESEVYMikgeworICAgICAgICAgICAgICBwb2ludGVyID0gYnVmZmVyK3Z0TGVuOworICAgICAgICAgICAgICBpbnQzMl90IG51bUJ5dGVzID0gcmVhZEVsZW1lbnQoJnBvaW50ZXIsIHByaW1hcnksICddJywgc3RhdHVzKSAvIDI7CisgICAgICAgICAgICAgIGlmKG51bUJ5dGVzICE9ICh3aGF0X3RvX2RvID09IFJFQURIRVgxID8gMSA6IDIpKSB7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlZhbHVlIG9mIFwiJXNcIiBoYXMgdW5leHBlY3RlZCBudW1iZXIgb2YgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgKGludCludW1CeXRlcyk7CisgICAgICAgICAgICAgICAgICAvLypzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgKih2dFtjbnRdLndoYXQpID0gKHVpbnQzMl90KXVwcnZfc3RydG91bChwcmltYXJ5LCAmcG9pbnRlciwgMTYpOworICAgICAgICAgICAgICBpZigqcG9pbnRlciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlZhbHVlIG9mIFwiJXNcIiBpcyBub3QgYSBoZXhhZGVjaW1hbCBudW1iZXJcbiIsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAvLypzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAod2hhdF90b19kbyA9PSBSRUFEQ0UpIHsKKyAgICAgICAgICAgICAgLy8gVE9ETzogY29tYmluZSAmIGNsZWFuIHVwIHRoZSB0d28gQ0UgcGFyc2VycworICAgICAgICAgICAgICBwb2ludGVyID0gc3RyY2hyKGJ1ZmZlcit2dExlbiwgJ1snKTsKKyAgICAgICAgICAgICAgaWYocG9pbnRlcikgeworICAgICAgICAgICAgICAgIHBvaW50ZXIrKzsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5zaXplUHJpbVswXT1yZWFkRWxlbWVudCgmcG9pbnRlciwgcHJpbWFyeSwgJywnLCBzdGF0dXMpIC8gMjsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5zaXplU2VjWzBdPXJlYWRFbGVtZW50KCZwb2ludGVyLCBzZWNvbmRhcnksICcsJywgc3RhdHVzKSAvIDI7CisgICAgICAgICAgICAgICAgZWxlbWVudC0+c2l6ZVRlclswXT1yZWFkRWxlbWVudCgmcG9pbnRlciwgdGVydGlhcnksICddJywgc3RhdHVzKSAvIDI7CisgICAgICAgICAgICAgICAgdnRbY250XS53aGF0WzBdID0gZ2V0U2luZ2xlQ0VWYWx1ZShwcmltYXJ5LCBzZWNvbmRhcnksIHRlcnRpYXJ5LCBzdGF0dXMpOworICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQtPnNpemVQcmltWzBdID4gMiB8fCBlbGVtZW50LT5zaXplU2VjWzBdID4gMSB8fCBlbGVtZW50LT5zaXplVGVyWzBdID4gMSkgeworICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ0VpID0gMTsKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlID0gVUNPTF9DT05USU5VQVRJT05fTUFSS0VSOyAvKiBDb250aW51YXRpb24gbWFya2VyICovCisgICAgICAgICAgICAgICAgICAgIGlmKDIqQ0VpPGVsZW1lbnQtPnNpemVQcmltW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSAoKGhleDJudW0oKihwcmltYXJ5KzQqQ0VpKSkmMHhGKTw8MjgpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gKChoZXgybnVtKCoocHJpbWFyeSs0KkNFaSsxKSkmMHhGKTw8MjQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoMipDRWkrMTxlbGVtZW50LT5zaXplUHJpbVtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gKChoZXgybnVtKCoocHJpbWFyeSs0KkNFaSsyKSkmMHhGKTw8MjApOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gKChoZXgybnVtKCoocHJpbWFyeSs0KkNFaSszKSkmMHhGKTw8MTYpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoQ0VpPGVsZW1lbnQtPnNpemVTZWNbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9ICgoaGV4Mm51bSgqKHNlY29uZGFyeSsyKkNFaSkpJjB4Rik8PDEyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9ICgoaGV4Mm51bSgqKHNlY29uZGFyeSsyKkNFaSsxKSkmMHhGKTw8OCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZihDRWk8ZWxlbWVudC0+c2l6ZVRlcltpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gKChoZXgybnVtKCoodGVydGlhcnkrMipDRWkpKSYweDMpPDw0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IChoZXgybnVtKCoodGVydGlhcnkrMipDRWkrMSkpJjB4Rik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBDRWkrKzsKKworICAgICAgICAgICAgICAgICAgICB2dFtjbnRdLndoYXRbMV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy9lbGVtZW50LT5DRXNbQ0VpbmRleCsrXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICB2dFtjbnRdLndoYXRbMV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byByZWFkIGEgQ0UgZnJvbSBsaW5lICVzXG4iLCBidWZmZXIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXRfdG9fZG8gPT0gUkVBRFVDQVZFUlNJT04pIHsgLy92dFtjbnRdLndoYXRfdG9fZG8gPT0gUkVBRFVDQVZFUlNJT04KKyAgICAgICAgICAgICAgdV92ZXJzaW9uRnJvbVN0cmluZyhVQ0FWZXJzaW9uLCBidWZmZXIrdnRMZW4pOworICAgICAgICAgICAgICBpZihiZVZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBjaGFyIHVjYVtVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOworICAgICAgICAgICAgICAgIHVfdmVyc2lvblRvU3RyaW5nKFVDQVZlcnNpb24sIHVjYSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJVQ0EgdmVyc2lvbiAlc1xuIiwgdWNhKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBVVmVyc2lvbkluZm8gVUNEVmVyc2lvbjsKKyAgICAgICAgICAgICAgdV9nZXRVbmljb2RlVmVyc2lvbihVQ0RWZXJzaW9uKTsKKyAgICAgICAgICAgICAgaWYgKFVDQVZlcnNpb25bMF0gIT0gVUNEVmVyc2lvblswXSB8fCBVQ0FWZXJzaW9uWzFdICE9IFVDRFZlcnNpb25bMV0pIHsKKyAgICAgICAgICAgICAgICBjaGFyIHVjYVtVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOworICAgICAgICAgICAgICAgIGNoYXIgdWNkW1VfTUFYX1ZFUlNJT05fU1RSSU5HX0xFTkdUSF07CisgICAgICAgICAgICAgICAgdV92ZXJzaW9uVG9TdHJpbmcoVUNBVmVyc2lvbiwgdWNhKTsKKyAgICAgICAgICAgICAgICB1X3ZlcnNpb25Ub1N0cmluZyhVQ0RWZXJzaW9uLCB1Y2QpOworICAgICAgICAgICAgICAgIC8vIFdhcm5pbmcsIG5vdCBlcnJvciwgdG8gcGVybWl0IGJvb3RzdHJhcHBpbmcgZHVyaW5nIGEgdmVyc2lvbiB1cGdyYWRlLgorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2FybmluZzogVUNBIHZlcnNpb24gJXMgIT0gVUNEIHZlcnNpb24gJXMgKHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgRnJhY3Rpb25hbFVDQS50eHQgVUNBIHZlcnNpb24gZHVyaW5nIFVuaWNvZGUgdmVyc2lvbiB1cGdyYWRlKVxuIiwgdWNhLCB1Y2QpOworICAgICAgICAgICAgICAgIC8vICpzdGF0dXMgPSBVX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgICAgICAgICAgICAgIC8vIHJldHVybiBOVUxMOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXRfdG9fZG8gPT0gUkVBRExFQURCWVRFVE9TQ1JJUFRTKSB7IC8vdnRbY250XS53aGF0X3RvX2RvID09IFJFQURMRUFEQllURVRPU0NSSVBUUworICAgICAgICAgICAgICAgIHBvaW50ZXIgPSBidWZmZXIgKyB2dExlbjsKKyAgICAgICAgICAgICAgICBza2lwV2hpdGVTcGFjZSgmcG9pbnRlciwgc3RhdHVzKTsKKworICAgICAgICAgICAgICAgIHVpbnQxNl90IGxlYWRCeXRlID0gKGhleDJudW0oKnBvaW50ZXIrKykgKiAxNikgKyBoZXgybnVtKCpwb2ludGVyKyspOworICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJ+fn5+IHByb2Nlc3NpbmcgbGVhZCBieXRlID0gJTAyeFxuIiwgbGVhZEJ5dGUpOworICAgICAgICAgICAgICAgIGlmIChsZWFkQnl0ZSA+PSBsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfSU5ERVhfTEVOR1RIKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGVhZCBieXRlIGxhcmdlciB0aGFuIGFsbG9jYXRlZCB0YWJsZSEiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHN0YXR1cyBhbmQgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICpzdGF0dXMgPSBVX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBza2lwV2hpdGVTcGFjZSgmcG9pbnRlciwgc3RhdHVzKTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgcmVvcmRlckNvZGVBcnJheVsxMDBdOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlb3JkZXJDb2RlQXJyYXlDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgY2hhciBzY3JpcHROYW1lWzEwMF07CisgICAgICAgICAgICAgICAgaW50MzJfdCBlbGVtZW50TGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKGVsZW1lbnRMZW5ndGggPSByZWFkRWxlbWVudCgmcG9pbnRlciwgc2NyaXB0TmFtZSwgJyAnLCBzdGF0dXMpKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5hbWVbMF0gPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlb3JkZXJDb2RlID0gZ2V0UmVvcmRlckNvZGUoc2NyaXB0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZW9yZGVyQ29kZSA9PSAtMikgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAvLyBJZ25vcmUgIlRFUk1JTkFUT1IiIGV0Yy4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVvcmRlckNvZGUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlN5bnRheCBlcnJvcjogdW5hYmxlIHRvIHBhcnNlIHJlb3JkZXIgY29kZSBmcm9tICclcydcbiIsIHNjcmlwdE5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmVvcmRlckNvZGVBcnJheUNvdW50ID49IExFTkdUSE9GKHJlb3JkZXJDb2RlQXJyYXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInJlb3JkZXIgY29kZSBhcnJheSBjb3VudCBpcyBncmVhdGVyIHRoYW4gYWxsb2NhdGVkIHNpemUhXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXMgPSBVX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZW9yZGVyQ29kZUFycmF5W3Jlb3JkZXJDb2RlQXJyYXlDb3VudCsrXSA9IHJlb3JkZXJDb2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL3ByaW50ZigicmVvcmRlckNvZGVBcnJheUNvdW50ID0gJWRcbiIsIHJlb3JkZXJDb2RlQXJyYXlDb3VudCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZW9yZGVyQ29kZUFycmF5Q291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYW2xlYWRCeXRlXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyA9IG1vdmUgMHg4MDAwIGludG8gZGVmaW5lZCBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYW2xlYWRCeXRlXSA9IDB4ODAwMCB8IHJlb3JkZXJDb2RlQXJyYXlbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW9yZGVyQ29kZUFycmF5Q291bnQgKyBsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9PRkZTRVQgPiBsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9MRU5HVEgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBjb25kaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWFtsZWFkQnl0ZV0gPSBsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9PRkZTRVQ7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQVtsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9PRkZTRVQrK10gPSByZW9yZGVyQ29kZUFycmF5Q291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByZW9yZGVyQ29kZUluZGV4ID0gMDsgcmVvcmRlckNvZGVJbmRleCA8IHJlb3JkZXJDb2RlQXJyYXlDb3VudDsgcmVvcmRlckNvZGVJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0RBVEFbbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0RBVEFfT0ZGU0VUKytdID0gcmVvcmRlckNvZGVBcnJheVtyZW9yZGVyQ29kZUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHdoYXRfdG9fZG8gPT0gUkVBRFNDUklQVFRPTEVBREJZVEVTKSB7IC8vdnRbY250XS53aGF0X3RvX2RvID09IFJFQURTQ1JJUFRUT0xFQURCWVRFUworICAgICAgICAgICAgICAgIHVpbnQxNl90IGxlYWRCeXRlQXJyYXlbMjU2XTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBsZWFkQnl0ZUFycmF5Q291bnQgPSAwOworICAgICAgICAgICAgICAgIGNoYXIgc2NyaXB0TmFtZVsxMDBdOworCisgICAgICAgICAgICAgICAgcG9pbnRlciA9IGJ1ZmZlciArIHZ0TGVuOworICAgICAgICAgICAgICAgIHNraXBXaGl0ZVNwYWNlKCZwb2ludGVyLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHNjcmlwdE5hbWVMZW5ndGggPSByZWFkRWxlbWVudCgmcG9pbnRlciwgc2NyaXB0TmFtZSwgJ1x0Jywgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJlb3JkZXJDb2RlID0gZ2V0UmVvcmRlckNvZGUoc2NyaXB0TmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHJlb3JkZXJDb2RlID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIl5eXiBwcm9jZXNzaW5nIHJlb3JkZXIgY29kZSA9ICUwNHggKCVzKVxuIiwgcmVvcmRlckNvZGUsIHNjcmlwdE5hbWUpOworICAgICAgICAgICAgICAgICAgICBza2lwV2hpdGVTcGFjZSgmcG9pbnRlciwgc3RhdHVzKTsKKworICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGVsZW1lbnRMZW5ndGggPSAwOworICAgICAgICAgICAgICAgICAgICBjaGFyIGxlYWRCeXRlU3RyaW5nWzEwMF07CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoZWxlbWVudExlbmd0aCA9IHJlYWRFbGVtZW50KCZwb2ludGVyLCBsZWFkQnl0ZVN0cmluZywgJz0nLCBzdGF0dXMpKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHRsZWFkQnl0ZUFycmF5Q291bnQgPSAlZCwgZWxlbWVudExlbmd0aCA9ICVkLCBsZWFkQnl0ZVN0cmluZyA9ICVzXG4iLCBsZWFkQnl0ZUFycmF5Q291bnQsIGVsZW1lbnRMZW5ndGgsIGxlYWRCeXRlU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxlYWRCeXRlID0gKGhleDJudW0obGVhZEJ5dGVTdHJpbmdbMF0pICogMTYpICsgaGV4Mm51bShsZWFkQnl0ZVN0cmluZ1sxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZUFycmF5W2xlYWRCeXRlQXJyYXlDb3VudCsrXSA9ICh1aW50MTZfdCkgbGVhZEJ5dGU7CisgICAgICAgICAgICAgICAgICAgICAgICBza2lwVW50aWxXaGl0ZVNwYWNlKCZwb2ludGVyLCBzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWF9DT1VOVCA+PSBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfTEVOR1RIKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHRFcnJvciBjb25kaXRpb25cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlx0aW5kZXggY291bnQgPSAlZCwgdG90YWwgaW5kZXggc2l6ZSA9ICVkXG4iLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlQsIHNpemVvZihsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVgpIC8gc2l6ZW9mKGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWFswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgY29uZGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdHVzID0gVV9JTlRFUk5BTF9QUk9HUkFNX0VSUk9SOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYW2xlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWF9DT1VOVF0ucmVvcmRlckNvZGUgPSByZW9yZGVyQ29kZTsKKworICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHRsZWFkIGJ5dGUgY291bnQgPSAlZFxuIiwgbGVhZEJ5dGVBcnJheUNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlx0bGVhZCBieXRlIGFycmF5ID0gIik7CisgICAgICAgICAgICAgICAgICAgIC8vZm9yIChpbnQgaSA9IDA7IGkgPCBsZWFkQnl0ZUFycmF5Q291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAvLyAgICBwcmludGYoIiUwMngsICIsIGxlYWRCeXRlQXJyYXlbaV0pOworICAgICAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlxuIik7CisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChsZWFkQnl0ZUFycmF5Q291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhbbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYX0NPVU5UXS5vZmZzZXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gPSBtb3ZlIDB4ODAwMCBpbnRvIGRlZmluZWQgY29uc3RhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHQrKysrKyBsZWFkIGJ5dGUgPSAmeFxuIiwgbGVhZEJ5dGVBcnJheVswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYW2xlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWF9DT1VOVF0ub2Zmc2V0ID0gMHg4MDAwIHwgbGVhZEJ5dGVBcnJheVswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlx0KysrKysgbGVhZCBieXRlcyB3cml0dGVuIHRvIGRhdGEgYmxvY2sgLSAlZFxuIiwgaXRlbXNUb0RhdGFCbG9jaysrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHRsZWFkIGJ5dGVzID0gIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgKGludCBpID0gMDsgaSA8IGxlYWRCeXRlQXJyYXlDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgcHJpbnRmKCIlMDJ4LCAiLCBsZWFkQnl0ZUFycmF5W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHRCRUZPUkUgZGF0YSBieXRlcyA9ICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIChpbnQgaSA9IDA7IGkgPCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHByaW50ZigiJTAyeCwgIiwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJcdGRhdGEgb2Zmc2V0ID0gJWQsIGRhdGEgbGVuZ3RoID0gJWRcbiIsIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBX09GRlNFVCwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFfTEVOR1RIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxlYWRCeXRlQXJyYXlDb3VudCArIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBX09GRlNFVCkgPiBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9MRU5HVEgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlx0RXJyb3IgY29uZGl0aW9uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgY29uZGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXMgPSBVX0lOVEVSTkFMX1BST0dSQU1fRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhbbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYX0NPVU5UXS5vZmZzZXQgPSBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFbbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFfT0ZGU0VUKytdID0gbGVhZEJ5dGVBcnJheUNvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdERhdGFXcml0dGVuKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQVtsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZUFycmF5LCBsZWFkQnl0ZUFycmF5Q291bnQgKiBzaXplb2YobGVhZEJ5dGVBcnJheVswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdERhdGFXcml0dGVuICs9IGxlYWRCeXRlQXJyYXlDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHRsZWFkIGJ5dGUgZGF0YSB3cml0dGVuID0gJWRcbiIsIHNjcmlwdERhdGFXcml0dGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50ZigiXHRjdXJyZW50SW5kZXgucmVvcmRlckNvZGUgPSAlMDR4LCBjdXJyZW50SW5kZXgub2Zmc2V0ID0gJTA0eFxuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYX0NPVU5ULnJlb3JkZXJDb2RlLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlQub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVQgKz0gbGVhZEJ5dGVBcnJheUNvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJcdGRhdGEgb2Zmc2V0ID0gJWRcbiIsIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBX09GRlNFVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIlx0QUZURVIgZGF0YSBieXRlcyA9ICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIChpbnQgaSA9IDA7IGkgPCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHByaW50ZigiJTAyeCwgIiwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vaWYgKHJlb3JkZXJDb2RlID49IDB4MTAwMCkgeworICAgICAgICAgICAgICAgICAgICAgLy8gICBwcmludGYoIkBAQEAgcmVvcmRlckNvZGUgPSAleCwgb2Zmc2V0ID0gJXhcbiIsIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWFtsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlRdLnJlb3JkZXJDb2RlLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhbbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYX0NPVU5UXS5vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgLy8gICBmb3IgKGludCBpID0gMDsgaSA8IGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBX09GRlNFVDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBwcmludGYoIiUwMngsICIsIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgIC8vICAgfQorICAgICAgICAgICAgICAgICAgICAvLyAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgICAgICAgLy8gfQorICAgICAgICAgICAgICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAlc1xuIiwgYnVmZmVyKTsKKyAgICAgIC8vKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzdGFydENvZGVQb2ludCA9IGJ1ZmZlcjsKKyAgICBlbmRDb2RlUG9pbnQgPSBzdHJjaHIoc3RhcnRDb2RlUG9pbnQsICc7Jyk7CisKKyAgICBpZihlbmRDb2RlUG9pbnQgPT0gMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIC0gbGluZSB3aXRoIG5vIGNvZGUgcG9pbnQhXG4iKTsKKyAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7IC8qIE5vIGNvZGUgcG9pbnQgLSBjb3VsZCBiZSBhbiBlcnJvciwgYnV0IHByb2JhYmx5IG9ubHkgYW4gZW1wdHkgbGluZSAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICAqKGVuZENvZGVQb2ludCkgPSAwOworICAgIH0KKworICAgIGNoYXIgKnBpcGVQb2ludGVyID0gc3RyY2hyKGJ1ZmZlciwgJ3wnKTsKKyAgICBpZiAocGlwZVBvaW50ZXIgIT0gTlVMTCkgeworICAgICAgICAvLyBSZWFkIHRoZSBwcmVmaXggc3RyaW5nIHdoaWNoIHByZWNlZGVzIHRoZSBhY3R1YWwgc3RyaW5nLgorICAgICAgICAqcGlwZVBvaW50ZXIgPSAwOworICAgICAgICBlbGVtZW50LT5wcmVmaXhTaXplID0KKyAgICAgICAgICAgIHVfcGFyc2VTdHJpbmcoc3RhcnRDb2RlUG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQtPnByZWZpeENoYXJzLCBMRU5HVEhPRihlbGVtZW50LT5wcmVmaXhDaGFycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHN0YXR1cyk7CisgICAgICAgIGlmKFVfRkFJTFVSRSgqc3RhdHVzKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciAtIHBhcnNpbmcgb2YgcHJlZml4IFwiJXNcIiBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBzdGFydENvZGVQb2ludCwgdV9lcnJvck5hbWUoKnN0YXR1cykpOworICAgICAgICAgICAgKnN0YXR1cyA9IFVfSU5WQUxJRF9GT1JNQVRfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50LT5wcmVmaXggPSBlbGVtZW50LT5wcmVmaXhDaGFyczsKKyAgICAgICAgc3RhcnRDb2RlUG9pbnQgPSBwaXBlUG9pbnRlciArIDE7CisgICAgfQorCisgICAgLy8gUmVhZCB0aGUgc3RyaW5nIHdoaWNoIGdldHMgdGhlIENFKHMpIGFzc2lnbmVkLgorICAgIGVsZW1lbnQtPmNTaXplID0KKyAgICAgICAgdV9wYXJzZVN0cmluZyhzdGFydENvZGVQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LT51Y2hhcnMsIExFTkdUSE9GKGVsZW1lbnQtPnVjaGFycyksCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciAtIHBhcnNpbmcgb2YgY29kZSBwb2ludChzKSBcIiVzXCIgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBzdGFydENvZGVQb2ludCwgdV9lcnJvck5hbWUoKnN0YXR1cykpOworICAgICAgICAqc3RhdHVzID0gVV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsZW1lbnQtPmNQb2ludHMgPSBlbGVtZW50LT51Y2hhcnM7CisKKyAgICBzdGFydENvZGVQb2ludCA9IGVuZENvZGVQb2ludCsxOworCisgICAgY29tbWVudFN0YXJ0ID0gc3RyY2hyKHN0YXJ0Q29kZVBvaW50LCAnIycpOworICAgIGlmKGNvbW1lbnRTdGFydCA9PSBOVUxMKSB7CisgICAgICAgIGNvbW1lbnRTdGFydCA9IHN0cmxlbihzdGFydENvZGVQb2ludCkgKyBzdGFydENvZGVQb2ludDsKKyAgICB9CisKKyAgICBpID0gMDsKKyAgICB1aW50MzJfdCBDRWluZGV4ID0gMDsKKyAgICBlbGVtZW50LT5ub09mQ0VzID0gMDsKKyAgICBmb3IoOzspIHsKKyAgICAgICAgZW5kQ29kZVBvaW50ID0gc3RyY2hyKHN0YXJ0Q29kZVBvaW50LCAnXScpOworICAgICAgICBpZihlbmRDb2RlUG9pbnQgPT0gTlVMTCB8fCBlbmRDb2RlUG9pbnQgPj0gY29tbWVudFN0YXJ0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwb2ludGVyID0gc3RyY2hyKHN0YXJ0Q29kZVBvaW50LCAnWycpOworICAgICAgICBwb2ludGVyKys7CisKKyAgICAgICAgZWxlbWVudC0+c2l6ZVByaW1baV09cmVhZEVsZW1lbnQoJnBvaW50ZXIsIHByaW1hcnksICcsJywgc3RhdHVzKSAvIDI7CisgICAgICAgIGVsZW1lbnQtPnNpemVTZWNbaV09cmVhZEVsZW1lbnQoJnBvaW50ZXIsIHNlY29uZGFyeSwgJywnLCBzdGF0dXMpIC8gMjsKKyAgICAgICAgZWxlbWVudC0+c2l6ZVRlcltpXT1yZWFkRWxlbWVudCgmcG9pbnRlciwgdGVydGlhcnksICddJywgc3RhdHVzKSAvIDI7CisKKworICAgICAgICAvKiBJIHdhbnQgdG8gZ2V0IHRoZSBDRXMgZW50ZXJlZCByaWdodCBoZXJlLCBpbmNsdWRpbmcgY29udGludWF0aW9uICovCisgICAgICAgIGVsZW1lbnQtPkNFc1tDRWluZGV4KytdID0gZ2V0U2luZ2xlQ0VWYWx1ZShwcmltYXJ5LCBzZWNvbmRhcnksIHRlcnRpYXJ5LCBzdGF0dXMpOworCisgICAgICAgIHVpbnQzMl90IENFaSA9IDE7CisgICAgICAgIHdoaWxlKDIqQ0VpPGVsZW1lbnQtPnNpemVQcmltW2ldIHx8IENFaTxlbGVtZW50LT5zaXplU2VjW2ldIHx8IENFaTxlbGVtZW50LT5zaXplVGVyW2ldKSB7CisgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSBVQ09MX0NPTlRJTlVBVElPTl9NQVJLRVI7IC8qIENvbnRpbnVhdGlvbiBtYXJrZXIgKi8KKyAgICAgICAgICAgIGlmKDIqQ0VpPGVsZW1lbnQtPnNpemVQcmltW2ldKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgfD0gKChoZXgybnVtKCoocHJpbWFyeSs0KkNFaSkpJjB4Rik8PDI4KTsKKyAgICAgICAgICAgICAgICB2YWx1ZSB8PSAoKGhleDJudW0oKihwcmltYXJ5KzQqQ0VpKzEpKSYweEYpPDwyNCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKDIqQ0VpKzE8ZWxlbWVudC0+c2l6ZVByaW1baV0pIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSB8PSAoKGhleDJudW0oKihwcmltYXJ5KzQqQ0VpKzIpKSYweEYpPDwyMCk7CisgICAgICAgICAgICAgICAgdmFsdWUgfD0gKChoZXgybnVtKCoocHJpbWFyeSs0KkNFaSszKSkmMHhGKTw8MTYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihDRWk8ZWxlbWVudC0+c2l6ZVNlY1tpXSkgeworICAgICAgICAgICAgICAgIHZhbHVlIHw9ICgoaGV4Mm51bSgqKHNlY29uZGFyeSsyKkNFaSkpJjB4Rik8PDEyKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSB8PSAoKGhleDJudW0oKihzZWNvbmRhcnkrMipDRWkrMSkpJjB4Rik8PDgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihDRWk8ZWxlbWVudC0+c2l6ZVRlcltpXSkgeworICAgICAgICAgICAgICAgIHZhbHVlIHw9ICgoaGV4Mm51bSgqKHRlcnRpYXJ5KzIqQ0VpKSkmMHgzKTw8NCk7CisgICAgICAgICAgICAgICAgdmFsdWUgfD0gKGhleDJudW0oKih0ZXJ0aWFyeSsyKkNFaSsxKSkmMHhGKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0VpKys7CisKKyAgICAgICAgICAgIGVsZW1lbnQtPkNFc1tDRWluZGV4KytdID0gdmFsdWU7CisgICAgICAgIH0KKworICAgICAgc3RhcnRDb2RlUG9pbnQgPSBlbmRDb2RlUG9pbnQrMTsKKyAgICAgIGkrKzsKKyAgICB9CisgICAgZWxlbWVudC0+bm9PZkNFcyA9IENFaW5kZXg7CisjaWYgMAorICAgIGVsZW1lbnQtPmlzVGhhaSA9IFVDT0xfSVNUSEFJUFJFVk9XRUwoZWxlbWVudC0+Y1BvaW50c1swXSk7CisjZW5kaWYKKyAgICAvLyB3ZSBkb24ndCB3YW50IGFueSBzdHJhbmdlIHN0dWZmIGFmdGVyIHVzZWZ1bCBkYXRhIQorICAgIGlmIChwb2ludGVyID09IE5VTEwpIHsKKyAgICAgICAgLyogaHVoPyBEaWQgd2UgZ2V0ICddJyB3aXRob3V0IHRoZSAnWyc/IFBhaXIgeW91ciBicmFja2V0cyEgKi8KKyAgICAgICAgKnN0YXR1cz1VX0lOVkFMSURfRk9STUFUX0VSUk9SOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd2hpbGUocG9pbnRlciA8IGNvbW1lbnRTdGFydCkgIHsKKyAgICAgICAgICAgIGlmKCpwb2ludGVyICE9ICcgJyAmJiAqcG9pbnRlciAhPSAnXHQnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpzdGF0dXM9VV9JTlZBTElEX0ZPUk1BVF9FUlJPUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvaW50ZXIrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihlbGVtZW50LT5jU2l6ZSA9PSAxICYmIGVsZW1lbnQtPmNQb2ludHNbMF0gPT0gMHhmZmZlKSB7CisgICAgICAgIC8vIFVDQSA2LjAgZ2l2ZXMgVStGRkZFIGEgc3BlY2lhbCBtaW5pbXVtIHdlaWdodCB1c2luZyB0aGUKKyAgICAgICAgLy8gYnl0ZSAwMiB3aGljaCBpcyB0aGUgbWVyZ2Utc29ydC1rZXkgc2VwYXJhdG9yIGFuZCBpbGxlZ2FsIGZvciBhbnkKKyAgICAgICAgLy8gb3RoZXIgY2hhcmFjdGVycy4KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSdWRpbWVudGFyeSBjaGVjayBmb3IgdmFsaWQgYnl0ZXMgaW4gQ0Ugd2VpZ2h0cy4KKyAgICAgICAgLy8gRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNoZWNrIHNlZSBjaW50bHRzdCAvdHNjb2xsL2NpdGVydHN0L1Rlc3RDRVZhbGlkaXR5CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50MzJfdClDRWluZGV4OyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlID0gZWxlbWVudC0+Q0VzW2ldOworICAgICAgICAgICAgdWludDhfdCBieXRlc1s0XSA9IHsKKyAgICAgICAgICAgICAgICAodWludDhfdCkodmFsdWUgPj4gMjQpLAorICAgICAgICAgICAgICAgICh1aW50OF90KSh2YWx1ZSA+PiAxNiksCisgICAgICAgICAgICAgICAgKHVpbnQ4X3QpKHZhbHVlID4+IDgpLAorICAgICAgICAgICAgICAgICh1aW50OF90KSh2YWx1ZSAmIFVDT0xfTkVXX1RFUlRJQVJZT1JERVJNQVNLKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKDAgIT0gYnl0ZXNbal0gJiYgYnl0ZXNbal0gPCAzKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogaW52YWxpZCBVQ0Egd2VpZ2h0IGJ5dGUgJTAyWCBmb3IgJXNcbiIsIGJ5dGVzW2pdLCBidWZmZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBQcmltYXJ5IHNlY29uZCBieXRlcyAwMyBhbmQgRkYgYXJlIGNvbXByZXNzaW9uIHRlcm1pbmF0b3JzLgorICAgICAgICAgICAgaWYgKCFpc0NvbnRpbnVhdGlvbih2YWx1ZSkgJiYgKGJ5dGVzWzFdID09IDMgfHwgYnl0ZXNbMV0gPT0gMHhGRikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IGludmFsaWQgVUNBIHByaW1hcnkgc2Vjb25kIHdlaWdodCBieXRlICUwMlggZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbMV0sIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIHB1dHRpbmcgc3R1ZmYgaW4gaGFzaCB0YWJsZSAlc1xuIiwgdV9lcnJvck5hbWUoKnN0YXR1cykpOworICAgICAgICAqc3RhdHVzID0gVV9JTlRFUk5BTF9QUk9HUkFNX0VSUk9SOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKworCit2b2lkIHdyaXRlT3V0RGF0YShVQ0FUYWJsZUhlYWRlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgIFVDQUNvbnN0YW50cyAqY29uc3RzLAorICAgICAgICAgICAgICAgICAgTGVhZEJ5dGVDb25zdGFudHMgKmxlYWRCeXRlQ29uc3RhbnRzLAorICAgICAgICAgICAgICAgICAgVUNoYXIgY29udHJhY3Rpb25zW11bTUFYX1VDQV9DT05UUkFDVElPTl9MRU5HVEhdLAorICAgICAgICAgICAgICAgICAgdWludDMyX3Qgbm9PZmNvbnRyYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm91dHB1dERpciwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvcHlyaWdodCwKKyAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cykKK3sKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQzMl90IHNpemUgPSBkYXRhLT5zaXplOworCisgICAgZGF0YS0+VUNBQ29uc3RzID0gZGF0YS0+c2l6ZTsKKyAgICBkYXRhLT5zaXplICs9IHBhZGRlZHNpemUoc2l6ZW9mKFVDQUNvbnN0YW50cykpOworCisgICAgaWYobm9PZmNvbnRyYWN0aW9ucyAhPSAwKSB7CisgICAgICB1cHJ2X21lbXNldCgmY29udHJhY3Rpb25zW25vT2Zjb250cmFjdGlvbnNdWzBdLCAwLCBNQVhfVUNBX0NPTlRSQUNUSU9OX0xFTkdUSCpVX1NJWkVPRl9VQ0hBUik7CisgICAgICBub09mY29udHJhY3Rpb25zKys7CisKKworICAgICAgZGF0YS0+Y29udHJhY3Rpb25VQ0FDb21ib3MgPSBkYXRhLT5zaXplOworICAgICAgZGF0YS0+Y29udHJhY3Rpb25VQ0FDb21ib3NXaWR0aCA9ICh1aW50OF90KU1BWF9VQ0FfQ09OVFJBQ1RJT05fTEVOR1RIOworICAgICAgZGF0YS0+Y29udHJhY3Rpb25VQ0FDb21ib3NTaXplID0gbm9PZmNvbnRyYWN0aW9uczsKKyAgICAgIGRhdGEtPnNpemUgKz0gcGFkZGVkc2l6ZSgobm9PZmNvbnRyYWN0aW9ucypNQVhfVUNBX0NPTlRSQUNUSU9OX0xFTkdUSCpVX1NJWkVPRl9VQ0hBUikpOworICAgIH0KKyAgICBkYXRhLT5zY3JpcHRUb0xlYWRCeXRlID0gZGF0YS0+c2l6ZTsKKyAgICAvL3ByaW50ZigiQEBAQCBzY3JpcHQgdG8gbGVhZCBieXRlIG9mZnNldCA9IDB4JXggKCVkKVxuIiwgZGF0YS0+c2l6ZSwgZGF0YS0+c2l6ZSk7CisgICAgZGF0YS0+c2l6ZSArPQorICAgICAgICBzaXplb2YobGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYX0NPVU5UKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGV4IHRhYmxlIGhlYWRlcgorICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlQgKiBzaXplb2YobGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYWzBdKSArICAgIC8vIGluZGV4IHRhYmxlCisgICAgICAgIHNpemVvZihsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVQpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSB0YWJsZSBoZWFkZXIKKyAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFfT0ZGU0VUICogc2l6ZW9mKGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBWzBdKTsgICAgICAgIC8vIGRhdGEgdGFibGUKKyAgICBkYXRhLT5sZWFkQnl0ZVRvU2NyaXB0ID0gZGF0YS0+c2l6ZTsKKyAgICAvL3ByaW50ZigiQEBAQCBsZWFkIGJ5dGUgdG8gc2NyaXB0IG9mZnNldCA9IDB4JXggKCVkKVxuIiwgZGF0YS0+c2l6ZSwgZGF0YS0+c2l6ZSk7CisgICAgZGF0YS0+c2l6ZSArPQorICAgICAgICBzaXplb2YobGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYX0xFTkdUSCkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGV4IHRhYmxlIGhlYWRlcgorICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfSU5ERVhfTEVOR1RIICogc2l6ZW9mKGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWFswXSkgKyAgIC8vIGluZGV4IHRhYmxlCisgICAgICAgIHNpemVvZihsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9PRkZTRVQpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSB0YWJsZSBoZWFkZXIKKyAgICAgICAgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0RBVEFfT0ZGU0VUICogc2l6ZW9mKGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19EQVRBWzBdKTsgICAgICAgIC8vIGRhdGEgdGFibGUKKworICAgIFVOZXdEYXRhTWVtb3J5ICpwRGF0YTsKKyAgICAKKyAgICBsb25nIGRhdGFMZW5ndGg7CisgICAgVURhdGFJbmZvIHVjYUluZm87CisgICAgdXBydl9tZW1jcHkoJnVjYUluZm8sICZ1Y2FEYXRhSW5mbywgc2l6ZW9mKFVEYXRhSW5mbykpOworICAgIHVwcnZfbWVtY3B5KHVjYUluZm8uZGF0YVZlcnNpb24sIFVDQVZlcnNpb24sIFVfTUFYX1ZFUlNJT05fTEVOR1RIKTsKKworICAgIHBEYXRhPXVkYXRhX2NyZWF0ZShvdXRwdXREaXIsIFVDQV9EQVRBX1RZUEUsIFVDQV9EQVRBX05BTUUsICZ1Y2FJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICBjb3B5cmlnaHQsIHN0YXR1cyk7CisKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogdW5hYmxlIHRvIGNyZWF0ZSAlcyJVQ0FfREFUQV9OQU1FIiwgZXJyb3IgJXNcbiIsIG91dHB1dERpciwgdV9lcnJvck5hbWUoKnN0YXR1cykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGZpbGUgKi8KKyAgICBpZiAoYmVWZXJib3NlKSB7CisgICAgICAgIHByaW50ZigiV3JpdGluZyBvdXQgVUNBIHRhYmxlOiAlcyVjJXMuJXNcbiIsIG91dHB1dERpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVV9GSUxFX1NFUF9DSEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVX0lDVURBVEFfTkFNRSAiXyIgVUNBX0RBVEFfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNBX0RBVEFfVFlQRSk7CisgICAgfQorICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGRhdGEsIHNpemUpOworCisgICAgLy8gb3V0cHV0IHRoZSBjb25zdGFudHMgaGVyZQorICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGNvbnN0cywgc2l6ZW9mKFVDQUNvbnN0YW50cykpOworCisgICAgaWYgKGJlVmVyYm9zZSkgeworICAgICAgICBwcmludGYoImZpcnN0IHRlcnRpYXJ5IGlnbm9yYWJsZSA9ICV4ICV4XG4iLCBjb25zdHMtPlVDQV9GSVJTVF9URVJUSUFSWV9JR05PUkFCTEVbMF0sIGNvbnN0cy0+VUNBX0ZJUlNUX1RFUlRJQVJZX0lHTk9SQUJMRVsxXSk7CisgICAgICAgIHByaW50ZigibGFzdCB0ZXJ0aWFyeSBpZ25vcmFibGUgPSAleCAleFxuIiwgY29uc3RzLT5VQ0FfTEFTVF9URVJUSUFSWV9JR05PUkFCTEVbMF0sIGNvbnN0cy0+VUNBX0xBU1RfVEVSVElBUllfSUdOT1JBQkxFWzFdKTsKKyAgICAgICAgcHJpbnRmKCJmaXJzdCBzZWNvbmRhcnkgaWdub3JhYmxlID0gJXggJXhcbiIsIGNvbnN0cy0+VUNBX0ZJUlNUX1NFQ09OREFSWV9JR05PUkFCTEVbMF0sIGNvbnN0cy0+VUNBX0ZJUlNUX1NFQ09OREFSWV9JR05PUkFCTEVbMV0pOworICAgICAgICBwcmludGYoImNvbnRyYWN0aW9uVUNBQ29tYm9zU2l6ZSA9ICVkXG4iLCBkYXRhLT5jb250cmFjdGlvblVDQUNvbWJvc1NpemUpOworICAgICAgICBwcmludGYoImNvbnRyYWN0aW9uU2l6ZSA9ICVkXG4iLCBkYXRhLT5jb250cmFjdGlvblNpemUpOworICAgICAgICBwcmludGYoIm51bWJlciBvZiBVQ0EgY29udHJhY3Rpb25zID0gJWRcbiIsIG5vT2Zjb250cmFjdGlvbnMpOworICAgIH0KKyAgICAKKyAgICBpZihub09mY29udHJhY3Rpb25zICE9IDApIHsKKyAgICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGNvbnRyYWN0aW9ucywgbm9PZmNvbnRyYWN0aW9ucypNQVhfVUNBX0NPTlRSQUNUSU9OX0xFTkdUSCpVX1NJWkVPRl9VQ0hBUik7CisgICAgICB1ZGF0YV93cml0ZVBhZGRpbmcocERhdGEsIHBhZGRlZHNpemUoKG5vT2Zjb250cmFjdGlvbnMqTUFYX1VDQV9DT05UUkFDVElPTl9MRU5HVEgqVV9TSVpFT0ZfVUNIQVIpKSAtIG5vT2Zjb250cmFjdGlvbnMqTUFYX1VDQV9DT05UUkFDVElPTl9MRU5HVEgqVV9TSVpFT0ZfVUNIQVIpOworICAgIH0KKworICAgIC8vIG91dHB1dCB0aGUgc2NyaXB0IHRvIGxlYWQgYnl0ZXMgdGFibGUgaGVyZQorICAgIGlmIChiZVZlcmJvc2UpIHsKKyAgICAgICAgcHJpbnRmKCJXcml0aW5nIFNjcmlwdCB0byBMZWFkIEJ5dGUgRGF0YVxuIik7CisgICAgICAgIHByaW50ZigiXHRpbmRleCB0YWJsZSBzaXplID0gJXhcbiIsIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWF9DT1VOVCk7CisgICAgICAgIHByaW50ZigiXHRkYXRhIGJsb2NrIHNpemUgPSAleFxuIiwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFfT0ZGU0VUKTsKKyAgICB9CisgICAgdWRhdGFfd3JpdGUxNihwRGF0YSwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYX0NPVU5UKTsKKyAgICB1ZGF0YV93cml0ZTE2KHBEYXRhLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVQpOworLy8gICAgIHByaW50ZigiIyMjIyBTY3JpcHQgdG8gTGVhZCBCeXRlIEluZGV4IEJlZm9yZSBTb3J0XG4iKTsKKy8vICAgICBmb3IgKGludCByZW9yZGVyQ29kZUluZGV4ID0gMDsgcmVvcmRlckNvZGVJbmRleCA8IGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWF9DT1VOVDsgcmVvcmRlckNvZGVJbmRleCsrKSB7CisvLyAgICAgICAgIHByaW50ZigiXHQlMDR4ID0gJTA0eFxuIiwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYW3Jlb3JkZXJDb2RlSW5kZXhdLnJlb3JkZXJDb2RlLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhbcmVvcmRlckNvZGVJbmRleF0ub2Zmc2V0KTsKKy8vICAgICB9CisgICAgcXNvcnQobGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlQsIHNpemVvZihsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhbMF0pLCBSZW9yZGVySW5kZXhDb21wYXJlcik7CisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlQgKiBzaXplb2YobGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYWzBdKSk7CisvLyAgICAgcHJpbnRmKCIjIyMjIFNjcmlwdCB0byBMZWFkIEJ5dGUgSW5kZXggQWZ0ZXIgU29ydFxuIik7CisvLyAgICAgZm9yIChpbnQgcmVvcmRlckNvZGVJbmRleCA9IDA7IHJlb3JkZXJDb2RlSW5kZXggPCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfQ09VTlQ7IHJlb3JkZXJDb2RlSW5kZXgrKykgeworLy8gICAgICAgICBwcmludGYoIlx0JTA0eCA9ICUwNHhcbiIsIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWFtyZW9yZGVyQ29kZUluZGV4XS5yZW9yZGVyQ29kZSwgbGVhZEJ5dGVDb25zdGFudHMtPlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYW3Jlb3JkZXJDb2RlSW5kZXhdLm9mZnNldCk7CisvLyAgICAgfQorICAgIAorICAgIC8vIHdyaXRlIG91dCB0aGUgc2NyaXB0IHRvIGxlYWQgYnl0ZXMgZGF0YSBibG9jaworICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBLCBsZWFkQnl0ZUNvbnN0YW50cy0+U0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9PRkZTRVQgKiBzaXplb2YoKmxlYWRCeXRlQ29uc3RhbnRzLT5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBKSk7CisgICAgCisgICAgaWYgKGJlVmVyYm9zZSkgeworICAgICAgICBwcmludGYoIldyaXRpbmcgTGVhZCBCeXRlIFRvIFNjcmlwdCBEYXRhXG4iKTsKKyAgICAgICAgcHJpbnRmKCJcdGluZGV4IHRhYmxlIHNpemUgPSAleFxuIiwgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYX0xFTkdUSCk7CisgICAgICAgIHByaW50ZigiXHRkYXRhIGJsb2NrIHNpemUgPSAleFxuIiwgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0RBVEFfT0ZGU0VUKTsKKyAgICB9CisgICAgLy8gb3V0cHV0IHRoZSBoZWFkZXIgaW5mbworICAgIHVkYXRhX3dyaXRlMTYocERhdGEsIGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWF9MRU5HVEgpOworICAgIHVkYXRhX3dyaXRlMTYocERhdGEsIGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19EQVRBX09GRlNFVCk7CisgICAgCisgICAgLy8gb3V0cHV0IHRoZSBpbmRleCB0YWJsZQorICAgIHVkYXRhX3dyaXRlQmxvY2socERhdGEsIGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWCwgCisgICAgICAgIGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWF9MRU5HVEggKiBzaXplb2YobGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYKVswXSk7CisvLyAgICAgZm9yIChpbnQgbGVhZEJ5dGUgPSAwOyBsZWFkQnl0ZSA8IGxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWF9MRU5HVEg7IGxlYWRCeXRlKyspIHsKKy8vICAgICAgICAgcHJpbnRmKCJcdCUwMnggPSAlMDR4XG4iLCBsZWFkQnl0ZSwgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYW2xlYWRCeXRlXSk7CisvLyAgICAgfQorCisgICAgLy8gb3V0cHV0IHRoZSBkYXRhCisgICAgdWRhdGFfd3JpdGVCbG9jayhwRGF0YSwgbGVhZEJ5dGVDb25zdGFudHMtPkxFQURfQllURV9UT19TQ1JJUFRTX0RBVEEsIAorICAgICAgICBsZWFkQnl0ZUNvbnN0YW50cy0+TEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9PRkZTRVQgKiBzaXplb2YoKmxlYWRCeXRlQ29uc3RhbnRzLT5MRUFEX0JZVEVfVE9fU0NSSVBUU19EQVRBKSk7CisKKyAgICAKKyAgICAvKiBmaW5pc2ggdXAgKi8KKyAgICBkYXRhTGVuZ3RoPXVkYXRhX2ZpbmlzaChwRGF0YSwgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogZXJyb3IgJWQgd3JpdGluZyB0aGUgb3V0cHV0IGZpbGVcbiIsICpzdGF0dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitlbnVtIHsKKyAgICAvKgorICAgICAqIE1heGltdW0gbnVtYmVyIG9mIFVDQSBjb250cmFjdGlvbnMgd2UgY2FuIHN0b3JlLgorICAgICAqIE1heSBuZWVkIHRvIGJlIGluY3JlYXNlZCBmb3IgYSBuZXcgVW5pY29kZSB2ZXJzaW9uLgorICAgICAqLworICAgIE1BWF9VQ0FfQ09OVFJBQ1RJT05TPTIwNDgKK307CisKK3N0YXRpYyBpbnQzMl90Cit3cml0ZV91Y2FfdGFibGUoY29uc3QgY2hhciAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3V0cHV0RGlyLAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvcHlyaWdodCwKKyAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpCit7CisgICAgRklMRSAqZGF0YSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworICAgIGlmKGRhdGEgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IG9wZW4gZmlsZTogJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB1aW50MzJfdCBsaW5lID0gMDsKKyAgICBVQ0FFbGVtZW50cyAqZWxlbWVudCA9IE5VTEw7CisgICAgVUNBVGFibGVIZWFkZXIgKm15RCA9IChVQ0FUYWJsZUhlYWRlciAqKXVwcnZfbWFsbG9jKHNpemVvZihVQ0FUYWJsZUhlYWRlcikpOworICAgIC8qIHRlc3QgZm9yIE5VTEwgKi8KKyAgICBpZihteUQgPT0gTlVMTCkgeworICAgICAgICAqc3RhdHVzID0gVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKKyAgICAgICAgZmNsb3NlKGRhdGEpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdXBydl9tZW1zZXQobXlELCAwLCBzaXplb2YoVUNBVGFibGVIZWFkZXIpKTsKKyAgICBVQ29sT3B0aW9uU2V0ICpvcHRzID0gKFVDb2xPcHRpb25TZXQgKil1cHJ2X21hbGxvYyhzaXplb2YoVUNvbE9wdGlvblNldCkpOworICAgIC8qIHRlc3QgZm9yIE5VTEwgKi8KKyAgICBpZihvcHRzID09IE5VTEwpIHsKKyAgICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7CisgICAgICAgIHVwcnZfZnJlZShteUQpOworICAgICAgICBmY2xvc2UoZGF0YSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB1cHJ2X21lbXNldChvcHRzLCAwLCBzaXplb2YoVUNvbE9wdGlvblNldCkpOworICAgIFVDaGFyIGNvbnRyYWN0aW9uc1tNQVhfVUNBX0NPTlRSQUNUSU9OU11bTUFYX1VDQV9DT05UUkFDVElPTl9MRU5HVEhdOworICAgIHVwcnZfbWVtc2V0KGNvbnRyYWN0aW9ucywgMCwgc2l6ZW9mKGNvbnRyYWN0aW9ucykpOworICAgIHVpbnQzMl90IG5vT2ZDb250cmFjdGlvbnMgPSAwOworICAgIFVDQUNvbnN0YW50cyBjb25zdHM7CisgICAgdXBydl9tZW1zZXQoJmNvbnN0cywgMCwgc2l6ZW9mKGNvbnN0cykpOworI2lmIDAKKyAgICBVQ0FDb25zdGFudHMgY29uc3RzID0geworICAgICAgVUNPTF9SRVNFVF9UT1BfVkFMVUUsCisgICAgICBVQ09MX0ZJUlNUX1BSSU1BUllfSUdOT1JBQkxFLAorICAgICAgVUNPTF9MQVNUX1BSSU1BUllfSUdOT1JBQkxFLAorICAgICAgVUNPTF9MQVNUX1BSSU1BUllfSUdOT1JBQkxFX0NPTlQsCisgICAgICBVQ09MX0ZJUlNUX1NFQ09OREFSWV9JR05PUkFCTEUsCisgICAgICBVQ09MX0xBU1RfU0VDT05EQVJZX0lHTk9SQUJMRSwKKyAgICAgIFVDT0xfRklSU1RfVEVSVElBUllfSUdOT1JBQkxFLAorICAgICAgVUNPTF9MQVNUX1RFUlRJQVJZX0lHTk9SQUJMRSwKKyAgICAgIFVDT0xfRklSU1RfVkFSSUFCTEUsCisgICAgICBVQ09MX0xBU1RfVkFSSUFCTEUsCisgICAgICBVQ09MX0ZJUlNUX05PTl9WQVJJQUJMRSwKKyAgICAgIFVDT0xfTEFTVF9OT05fVkFSSUFCTEUsCisKKyAgICAgIFVDT0xfTkVYVF9UT1BfVkFMVUUsCisvKgorICAgICAgVUNPTF9ORVhUX0ZJUlNUX1BSSU1BUllfSUdOT1JBQkxFLAorICAgICAgVUNPTF9ORVhUX0xBU1RfUFJJTUFSWV9JR05PUkFCTEUsCisgICAgICBVQ09MX05FWFRfRklSU1RfU0VDT05EQVJZX0lHTk9SQUJMRSwKKyAgICAgIFVDT0xfTkVYVF9MQVNUX1NFQ09OREFSWV9JR05PUkFCTEUsCisgICAgICBVQ09MX05FWFRfRklSU1RfVEVSVElBUllfSUdOT1JBQkxFLAorICAgICAgVUNPTF9ORVhUX0xBU1RfVEVSVElBUllfSUdOT1JBQkxFLAorICAgICAgVUNPTF9ORVhUX0ZJUlNUX1ZBUklBQkxFLAorICAgICAgVUNPTF9ORVhUX0xBU1RfVkFSSUFCTEUsCisqLworCisgICAgICBQUklNQVJZX0lNUExJQ0lUX01JTiwKKyAgICAgIFBSSU1BUllfSU1QTElDSVRfTUFYCisgICAgfTsKKyNlbmRpZgorCisgICAgLy9wcmludGYoIkFsbG9jYXRpbmcgTGVhZEJ5dGVDb25zdGFudHNcbiIpOworICAgIExlYWRCeXRlQ29uc3RhbnRzIGxlYWRCeXRlQ29uc3RhbnRzOworICAgIHVwcnZfbWVtc2V0KCZsZWFkQnl0ZUNvbnN0YW50cywgMHgwMCwgc2l6ZW9mKExlYWRCeXRlQ29uc3RhbnRzKSk7CisgICAgCisgICAgbGVhZEJ5dGVDb25zdGFudHMuU0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfTEVOR1RIID0gMjU2OworICAgIGxlYWRCeXRlQ29uc3RhbnRzLlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYID0gKFJlb3JkZXJJbmRleCopIHVwcnZfbWFsbG9jKGxlYWRCeXRlQ29uc3RhbnRzLlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYX0xFTkdUSCAqIHNpemVvZihSZW9yZGVySW5kZXgpKTsKKyAgICB1cHJ2X21lbXNldChsZWFkQnl0ZUNvbnN0YW50cy5TQ1JJUFRfVE9fTEVBRF9CWVRFU19JTkRFWCwgMHgwMCwgbGVhZEJ5dGVDb25zdGFudHMuU0NSSVBUX1RPX0xFQURfQllURVNfSU5ERVhfTEVOR1RIICogc2l6ZW9mKFJlb3JkZXJJbmRleCkpOworICAgIGxlYWRCeXRlQ29uc3RhbnRzLlNDUklQVF9UT19MRUFEX0JZVEVTX0RBVEFfTEVOR1RIID0gMTAyNDsKKyAgICBsZWFkQnl0ZUNvbnN0YW50cy5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBID0gKHVpbnQxNl90KikgdXBydl9tYWxsb2MobGVhZEJ5dGVDb25zdGFudHMuU0NSSVBUX1RPX0xFQURfQllURVNfREFUQV9MRU5HVEggKiBzaXplb2YodWludDE2X3QpKTsKKyAgICB1cHJ2X21lbXNldChsZWFkQnl0ZUNvbnN0YW50cy5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBLCAweDAwLCBsZWFkQnl0ZUNvbnN0YW50cy5TQ1JJUFRfVE9fTEVBRF9CWVRFU19EQVRBX0xFTkdUSCAqIHNpemVvZih1aW50MTZfdCkpOworICAgIC8vcHJpbnRmKCJcdEZpbmlzaGVkIEFsbG9jYXRpbmcgTGVhZEJ5dGVDb25zdGFudHNcbiIpOworICAgIAorICAgIGxlYWRCeXRlQ29uc3RhbnRzLkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYX0xFTkdUSCA9IDI1NjsKKyAgICBsZWFkQnl0ZUNvbnN0YW50cy5MRUFEX0JZVEVfVE9fU0NSSVBUU19JTkRFWCA9ICh1aW50MTZfdCopIHVwcnZfbWFsbG9jKGxlYWRCeXRlQ29uc3RhbnRzLkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYX0xFTkdUSCAqIHNpemVvZih1aW50MTZfdCkpOworICAgIHVwcnZfbWVtc2V0KGxlYWRCeXRlQ29uc3RhbnRzLkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYLCAweDgwMDAgfCBVU0NSSVBUX0lOVkFMSURfQ09ERSwgbGVhZEJ5dGVDb25zdGFudHMuTEVBRF9CWVRFX1RPX1NDUklQVFNfSU5ERVhfTEVOR1RIICogc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgbGVhZEJ5dGVDb25zdGFudHMuTEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9MRU5HVEggPSAxMDI0OworICAgIGxlYWRCeXRlQ29uc3RhbnRzLkxFQURfQllURV9UT19TQ1JJUFRTX0RBVEFfT0ZGU0VUID0gMTsgICAgIC8vIG9mZnNldCBieSAxIHRvIGxlYXZlIHplcm8gbG9jYXRpb24gZm9yIHRob3NlIGxlYWQgYnl0ZXMgd2l0aCBubyByZW9yZGVyIGNvZGVzCisgICAgbGVhZEJ5dGVDb25zdGFudHMuTEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQSA9ICh1aW50MTZfdCopIHVwcnZfbWFsbG9jKGxlYWRCeXRlQ29uc3RhbnRzLkxFQURfQllURV9UT19TQ1JJUFRTX0RBVEFfTEVOR1RIICogc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgdXBydl9tZW1zZXQobGVhZEJ5dGVDb25zdGFudHMuTEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQSwgMHgwMCwgbGVhZEJ5dGVDb25zdGFudHMuTEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQV9MRU5HVEggKiBzaXplb2YodWludDE2X3QpKTsKKworICAgIHVwcnZfbWVtc2V0KGludmVyc2VUYWJsZSwgMHhEQSwgc2l6ZW9mKGludDMyX3QpKjMqMHhGRkZGKTsKKworICAgIG9wdHMtPnZhcmlhYmxlVG9wVmFsdWUgPSAwOworICAgIG9wdHMtPnN0cmVuZ3RoID0gVUNPTF9URVJUSUFSWTsKKyAgICBvcHRzLT5mcmVuY2hDb2xsYXRpb24gPSBVQ09MX09GRjsKKyAgICBvcHRzLT5hbHRlcm5hdGVIYW5kbGluZyA9IFVDT0xfTk9OX0lHTk9SQUJMRTsgLyogYXR0cmlidXRlIGZvciBoYW5kbGluZyB2YXJpYWJsZSBlbGVtZW50cyovCisgICAgb3B0cy0+Y2FzZUZpcnN0ID0gVUNPTF9PRkY7ICAgICAgICAgLyogd2hvIGdvZXMgZmlyc3QsIGxvd2VyIGNhc2Ugb3IgdXBwZXJjYXNlICovCisgICAgb3B0cy0+Y2FzZUxldmVsID0gVUNPTF9PRkY7ICAgICAgICAgLyogZG8gd2UgaGF2ZSBhbiBleHRyYSBjYXNlIGxldmVsICovCisgICAgb3B0cy0+bm9ybWFsaXphdGlvbk1vZGUgPSBVQ09MX09GRjsgLyogYXR0cmlidXRlIGZvciBub3JtYWxpemF0aW9uICovCisgICAgb3B0cy0+aGlyYWdhbmFRID0gVUNPTF9PRkY7IC8qIGF0dHJpYnV0ZSBmb3IgSklTIFggNDA2MSwgdXNlZCBvbmx5IGluIEphcGFuZXNlICovCisgICAgb3B0cy0+bnVtZXJpY0NvbGxhdGlvbiA9IFVDT0xfT0ZGOworICAgIG15RC0+amFtb1NwZWNpYWwgPSBGQUxTRTsKKworICAgIHRlbXBVQ0FUYWJsZSAqdCA9IHVwcnZfdWNhX2luaXRUZW1wVGFibGUobXlELCBvcHRzLCBOVUxMLCBJTVBMSUNJVF9UQUcsIExFQURfU1VSUk9HQVRFX1RBRywgc3RhdHVzKTsKKyAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBpbml0IFVDQSB0ZW1wIHRhYmxlOiAlc1xuIiwgdV9lcnJvck5hbWUoKnN0YXR1cykpOworICAgICAgICB1cHJ2X2ZyZWUob3B0cyk7CisgICAgICAgIHVwcnZfZnJlZShteUQpOworICAgICAgICBmY2xvc2UoZGF0YSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyAqIHNldCB0byB6ZXJvCisgICAgc3RydWN0IHsKKyAgICAgICAgVUNoYXIzMiBzdGFydDsKKyAgICAgICAgVUNoYXIzMiBlbmQ7CisgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgfSByYW5nZXNbXSA9CisgICAgeworICAgICAgICB7MHhBQzAwLCAweEQ3QjAsIFVDT0xfU1BFQ0lBTF9GTEFHIHwgKEhBTkdVTF9TWUxMQUJMRV9UQUcgPDwgMjQpIH0sICAvLzAgSEFOR1VMX1NZTExBQkxFX1RBRywvKiBBQzAwLUQ3QUYqLworICAgICAgICAvL3sweEQ4MDAsIDB4REMwMCwgVUNPTF9TUEVDSUFMX0ZMQUcgfCAoTEVBRF9TVVJST0dBVEVfVEFHIDw8IDI0KSAgfSwgIC8vMSBMRUFEX1NVUlJPR0FURV9UQUcsIGFscmVhZHkgc2V0IGluIHV0cmllX29wZW4oKSAvKiBEODAwLURCRkYqLworICAgICAgICB7MHhEQzAwLCAweEUwMDAsIFVDT0xfU1BFQ0lBTF9GTEFHIHwgKFRSQUlMX1NVUlJPR0FURV9UQUcgPDwgMjQpIH0sICAvLzIgVFJBSUxfU1VSUk9HQVRFIERDMDAtREZGRgorICAgICAgICAvLyBOb3cgZGlyZWN0bHkgaGFuZGxlZCBpbiB0aGUgY29sbGF0aW9uIGNvZGUgYnkgdGhlIHN3YXBDSksgZnVuY3Rpb24uCisgICAgICAgIC8vezB4MzQwMCwgMHg0REI2LCBVQ09MX1NQRUNJQUxfRkxBRyB8IChDSktfSU1QTElDSVRfVEFHIDw8IDI0KSAgICB9LCAgLy8zIENKS19JTVBMSUNJVF9UQUcsICAgLyogMHgzNDAwLTB4NERCNSovCisgICAgICAgIC8vezB4NEUwMCwgMHg5RkE2LCBVQ09MX1NQRUNJQUxfRkxBRyB8IChDSktfSU1QTElDSVRfVEFHIDw8IDI0KSAgICB9LCAgLy80IENKS19JTVBMSUNJVF9UQUcsICAgLyogMHg0RTAwLTB4OUZBNSovCisgICAgICAgIC8vezB4RjkwMCwgMHhGQTJFLCBVQ09MX1NQRUNJQUxfRkxBRyB8IChDSktfSU1QTElDSVRfVEFHIDw8IDI0KSAgICB9LCAgLy81IENKS19JTVBMSUNJVF9UQUcsICAgLyogMHhGOTAwLTB4RkEyRCovCisgICAgICAgIC8vezB4MjAwMDAsIDB4MkE2RDcsIFVDT0xfU1BFQ0lBTF9GTEFHIHwgKENKS19JTVBMSUNJVF9UQUcgPDwgMjQpICB9LCAgLy82IENKS19JTVBMSUNJVF9UQUcsICAgLyogMHgyMDAwMC0weDJBNkQ2Ki8KKyAgICAgICAgLy97MHgyRjgwMCwgMHgyRkExRSwgVUNPTF9TUEVDSUFMX0ZMQUcgfCAoQ0pLX0lNUExJQ0lUX1RBRyA8PCAyNCkgIH0sICAvLzcgQ0pLX0lNUExJQ0lUX1RBRywgICAvKiAweDJGODAwLTB4MkZBMUQqLworICAgIH07CisgICAgdWludDMyX3QgaSA9IDA7CisKKyAgICBmb3IoaSA9IDA7IGk8c2l6ZW9mKHJhbmdlcykvc2l6ZW9mKHJhbmdlc1swXSk7IGkrKykgeworICAgICAgLyp1Y21wZTMyX3NldFJhbmdlMzIodC0+bWFwcGluZywgcmFuZ2VzW2ldLnN0YXJ0LCByYW5nZXNbaV0uZW5kLCByYW5nZXNbaV0udmFsdWUpOyAqLworICAgICAgdXRyaWVfc2V0UmFuZ2UzMih0LT5tYXBwaW5nLCByYW5nZXNbaV0uc3RhcnQsIHJhbmdlc1tpXS5lbmQsIHJhbmdlc1tpXS52YWx1ZSwgVFJVRSk7CisgICAgfQorCisKKyAgICBpbnQzMl90IHN1cnJvZ2F0ZUNvdW50ID0gMDsKKyAgICB3aGlsZSghZmVvZihkYXRhKSkgeworICAgICAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU29tZXRoaW5nIHJldHVybmVkIGFuIGVycm9yICVpICglcykgd2hpbGUgcHJvY2Vzc2luZyBsaW5lICV1IG9mICVzLiBFeGl0aW5nLi4uXG4iLAorICAgICAgICAgICAgICAgICpzdGF0dXMsIHVfZXJyb3JOYW1lKCpzdGF0dXMpLCAoaW50KWxpbmUsIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGV4aXQoKnN0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICBsaW5lKys7CisgICAgICAgIGlmKGJlVmVyYm9zZSkgeworICAgICAgICAgIHByaW50ZigiJXUgIiwgKGludClsaW5lKTsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50ID0gcmVhZEFuRWxlbWVudChkYXRhLCB0LCAmY29uc3RzLCAmbGVhZEJ5dGVDb25zdGFudHMsIHN0YXR1cyk7CisgICAgICAgIGlmKGVsZW1lbnQgIT0gTlVMTCkgeworICAgICAgICAgICAgLy8gd2UgaGF2ZSByZWFkIHRoZSBsaW5lLCBub3cgZG8gc29tZXRoaW5nIHNlbnNpYmxlIHdpdGggdGhlIHJlYWQgZGF0YSEKKworICAgICAgICAgICAgLy8gaWYgZWxlbWVudCBpcyBhIGNvbnRyYWN0aW9uLCB3ZSB3YW50IHRvIGFkZCBpdCB0byBjb250cmFjdGlvbnNbXQorICAgICAgICAgICAgaW50MzJfdCBsZW5ndGggPSAoaW50MzJfdCllbGVtZW50LT5jU2l6ZTsKKyAgICAgICAgICAgIGlmKGxlbmd0aCA+IDEgJiYgZWxlbWVudC0+Y1BvaW50c1swXSAhPSAweEZERDApIHsgLy8gdGhpcyBpcyBhIGNvbnRyYWN0aW9uCisgICAgICAgICAgICAgIGlmKFUxNl9JU19MRUFEKGVsZW1lbnQtPmNQb2ludHNbMF0pICYmIFUxNl9JU19UUkFJTChlbGVtZW50LT5jUG9pbnRzWzFdKSAmJiBsZW5ndGggPT0gMikgeworICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZUNvdW50Kys7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYobm9PZkNvbnRyYWN0aW9ucz49TUFYX1VDQV9DT05UUkFDVElPTlMpIHsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5Nb3JlIHRoYW4gJWQgY29udHJhY3Rpb25zLiBQbGVhc2UgaW5jcmVhc2UgTUFYX1VDQV9DT05UUkFDVElPTlMgaW4gZ2VudWNhLmNwcC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhpdGluZy4uLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClNQVhfVUNBX0NPTlRSQUNUSU9OUyk7CisgICAgICAgICAgICAgICAgICBleGl0KFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYobGVuZ3RoID4gTUFYX1VDQV9DT05UUkFDVElPTl9MRU5HVEgpIHsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5MaW5lICVkOiBDb250cmFjdGlvbiBvZiBsZW5ndGggJWQgaXMgdG9vIGxvbmcuIFBsZWFzZSBpbmNyZWFzZSBNQVhfVUNBX0NPTlRSQUNUSU9OX0xFTkdUSCBpbiBnZW51Y2EuY3BwLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0aW5nLi4uXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWxpbmUsIChpbnQpbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgIGV4aXQoVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBVQ2hhciAqdCA9ICZjb250cmFjdGlvbnNbbm9PZkNvbnRyYWN0aW9uc11bMF07CisgICAgICAgICAgICAgICAgdV9tZW1jcHkodCwgZWxlbWVudC0+Y1BvaW50cywgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB0ICs9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBmb3IoOyBsZW5ndGggPCBNQVhfVUNBX0NPTlRSQUNUSU9OX0xFTkdUSDsgKytsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgKnQrKyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vT2ZDb250cmFjdGlvbnMrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETyAoY2xhaXJlaG8pOiBkb2VzIHRoaXMgd29yaz8gTmVlZCBtb3JlIHRlc3RzCisgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRvIGhhbmRsZSB0aGUgVUNBIHByZS1jb250ZXh0IHJ1bGVzCisgICAgICAgICAgICAgICAgLy8gZm9yIEwvbCB3aXRoIG1pZGRsZSBkb3QuIFdlIHNoYXJlIHRoZSBzdHJ1Y3R1cmVzIGZvciBjb250cmFjdGlvbkNvbWJvcy4KKyAgICAgICAgICAgICAgICAvLyBUaGUgZm9ybWF0IGZvciBwcmUtY29udGV4dCBjaGFyYWN0ZXIgaXMKKyAgICAgICAgICAgICAgICAvLyBjb250cmFjdGlvbnNbMF06IGNvZGVwb2ludCBpbiBlbGVtZW50LT5jUG9pbnRzWzBdCisgICAgICAgICAgICAgICAgLy8gY29udHJhY3Rpb25zWzFdOiAnXDAnIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBhIGNvbnRyYWN0aW9uCisgICAgICAgICAgICAgICAgLy8gY29udHJhY3Rpb25zWzJdOiBwcmVmaXggY2hhcgorICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5wcmVmaXhTaXplPjApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYobGVuZ3RoID4gMSB8fCBlbGVtZW50LT5wcmVmaXhTaXplID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbkxpbmUgJWQ6IENoYXJhY3RlciB3aXRoIHByZWZpeCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWl0aGVyIHRvbyBtYW55IGNoYXJhY3RlcnMgb3IgcHJlZml4IHRvbyBsb25nLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoVV9JTlRFUk5BTF9QUk9HUkFNX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihub09mQ29udHJhY3Rpb25zPj1NQVhfVUNBX0NPTlRSQUNUSU9OUykgeworICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuTW9yZSB0aGFuICVkIGNvbnRyYWN0aW9ucy4gUGxlYXNlIGluY3JlYXNlIE1BWF9VQ0FfQ09OVFJBQ1RJT05TIGluIGdlbnVjYS5jcHAuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeGl0aW5nLi4uXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClNQVhfVUNBX0NPTlRSQUNUSU9OUyk7CisgICAgICAgICAgICAgICAgICAgICAgZXhpdChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgKnQgPSAmY29udHJhY3Rpb25zW25vT2ZDb250cmFjdGlvbnNdWzBdOworICAgICAgICAgICAgICAgICAgICB0WzBdPWVsZW1lbnQtPmNQb2ludHNbMF07CisgICAgICAgICAgICAgICAgICAgIHRbMV09MDsKKyAgICAgICAgICAgICAgICAgICAgdFsyXT1lbGVtZW50LT5wcmVmaXhDaGFyc1swXTsKKyAgICAgICAgICAgICAgICAgICAgdCArPSAzOworICAgICAgICAgICAgICAgICAgICBmb3IobGVuZ3RoID0gMzsgbGVuZ3RoIDwgTUFYX1VDQV9DT05UUkFDVElPTl9MRU5HVEg7ICsrbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqdCsrID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBub09mQ29udHJhY3Rpb25zKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiB3ZSdyZSBmaXJzdCBhZGRpbmcgdG8gaW52ZXJzZSwgYmVjYXVzZSBhZGRBbkVsZW1lbnQgd2lsbCByZXZlcnNlIHRoZSBvcmRlciAqLworICAgICAgICAgICAgLyogb2YgY29kZSBwb2ludHMgYW5kIHN0dWZmLi4uIHdlIGRvbid0IHdhbnQgdGhhdCB0byBoYXBwZW4gKi8KKyAgICAgICAgICAgIGlmKChlbGVtZW50LT5DRXNbMF0gPj4gMjQpICE9IDIpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGQgZXZlcnkgZWxlbWVudCBleGNlcHQgZm9yIHRoZSBzcGVjaWFsIG1pbmltdW0td2VpZ2h0IGNoYXJhY3RlciBVK0ZGRkUKKyAgICAgICAgICAgICAgICAvLyB3aGljaCBoYXMgMDIgd2VpZ2h0cy4KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYWQgMDIgd2VpZ2h0cyBpbiB0aGUgaW52dWNhIHRhYmxlLCB0aGVuIHRhaWxvcmluZyBwcmltYXJ5CisgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgYW4gaWdub3JhYmxlIHdvdWxkIHRyeSB0byBwdXQgYSB3ZWlnaHQgYmVmb3JlIDAyIHdoaWNoIGlzIG5vdCB2YWxpZC4KKyAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBmaXggdGhpcyBpbiBhIGNvbXBsaWNhdGVkIHdheSBpbiB0aGUgZnJvbS1ydWxlLXN0cmluZyBidWlsZGVyLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBvbWl0dGluZyB0aGlzIHNwZWNpYWwgZWxlbWVudCBmcm9tIGludnVjYSBpcyBzaW1wbGUgYW5kIGVmZmVjdGl2ZS4KKyAgICAgICAgICAgICAgICBhZGRUb0ludmVyc2UoZWxlbWVudCwgc3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCEobGVuZ3RoID4gMSAmJiBlbGVtZW50LT5jUG9pbnRzWzBdID09IDB4RkREMCkpIHsKKyAgICAgICAgICAgICAgdXBydl91Y2FfYWRkQW5FbGVtZW50KHQsIGVsZW1lbnQsIHN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZihVQ0FWZXJzaW9uWzBdID09IDAgJiYgVUNBVmVyc2lvblsxXSA9PSAwICYmIFVDQVZlcnNpb25bMl0gPT0gMCAmJiBVQ0FWZXJzaW9uWzNdID09IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVQ0EgdmVyc2lvbiBub3Qgc3BlY2lmaWVkLiBDYW5ub3QgY3JlYXRlIGRhdGEgZmlsZSFcbiIpOworICAgICAgICB1cHJ2X3VjYV9jbG9zZVRlbXBUYWJsZSh0KTsKKyAgICAgICAgdXBydl9mcmVlKG9wdHMpOworICAgICAgICB1cHJ2X2ZyZWUobXlEKTsKKyAgICAgICAgZmNsb3NlKGRhdGEpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorLyogICAgeworICAgICAgICB1aW50MzJfdCB0cmllV29yZCA9IHV0cmllX2dldDMyKHQtPm1hcHBpbmcsIDB4REMwMSwgTlVMTCk7CisgICAgfSovCisKKyAgICBpZiAoYmVWZXJib3NlKSB7CisgICAgICAgIHByaW50ZigiXG5MaW5lcyByZWFkOiAldVxuIiwgKGludClsaW5lKTsKKyAgICAgICAgcHJpbnRmKCJTdXJyb2dhdGUgY291bnQ6ICVpXG4iLCAoaW50KXN1cnJvZ2F0ZUNvdW50KTsKKyAgICAgICAgcHJpbnRmKCJSYXcgZGF0YSBicmVha2Rvd246XG4iKTsKKyAgICAgICAgLypwcmludGYoIkNvbXBhY3QgYXJyYXkgc3RhZ2UxIHRvcDogJWksIHN0YWdlMiB0b3A6ICVpXG4iLCB0LT5tYXBwaW5nLT5zdGFnZTFUb3AsIHQtPm1hcHBpbmctPnN0YWdlMlRvcCk7Ki8KKyAgICAgICAgcHJpbnRmKCJOdW1iZXIgb2YgY29udHJhY3Rpb25zOiAldVxuIiwgKGludClub09mQ29udHJhY3Rpb25zKTsKKyAgICAgICAgcHJpbnRmKCJDb250cmFjdGlvbiBpbWFnZSBzaXplOiAldVxuIiwgKGludCl0LT5pbWFnZS0+Y29udHJhY3Rpb25TaXplKTsKKyAgICAgICAgcHJpbnRmKCJFeHBhbnNpb25zIHNpemU6ICVpXG4iLCAoaW50KXQtPmV4cGFuc2lvbnMtPnBvc2l0aW9uKTsKKyAgICB9CisKKworICAgIC8qIHByb2R1Y2UgY2Fub25pY2FsIGNsb3N1cmUgZm9yIHRhYmxlICovCisgICAgLyogZmlyc3Qgc2V0IHVwIGNvbnN0YW50cyBmb3IgaW1wbGljaXQgY2FsY3VsYXRpb24gKi8KKyAgICB1cHJ2X3VjYV9pbml0SW1wbGljaXRDb25zdGFudHMoc3RhdHVzKTsKKyAgICAvKiBkbyB0aGUgY2xvc3VyZSAqLworICAgIFVuaWNvZGVTZXQgY2xvc2VkOworICAgIGludDMyX3Qgbm9PZkNsb3N1cmVzID0gdXBydl91Y2FfY2Fub25pY2FsQ2xvc3VyZSh0LCBOVUxMLCAmY2xvc2VkLCBzdGF0dXMpOworICAgIGlmKG5vT2ZDbG9zdXJlcyAhPSAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogJWkgY2Fub25pY2FsIGNsb3N1cmVzIG9jY3VyZWQhXG4iLCAoaW50KW5vT2ZDbG9zdXJlcyk7CisgICAgICAgIFVuaWNvZGVTdHJpbmcgcGF0dGVybjsKKyAgICAgICAgc3RkOjpzdHJpbmcgdXRmODsKKyAgICAgICAgY2xvc2VkLnRvUGF0dGVybihwYXR0ZXJuLCBUUlVFKS50b1VURjhTdHJpbmcodXRmOCk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVVRGLTggcGF0dGVybiBzdHJpbmc6ICVzXG4iLCB1dGY4LmNfc3RyKCkpOworICAgIH0KKworICAgIC8qIHRlc3QgKi8KKyAgICBVQ0FUYWJsZUhlYWRlciAqbXlEYXRhID0gdXBydl91Y2FfYXNzZW1ibGVUYWJsZSh0LCBzdGF0dXMpOyAgCisKKyAgICBpZiAoYmVWZXJib3NlKSB7CisgICAgICAgIHByaW50ZigiQ29tcGFjdGVkIGRhdGEgYnJlYWtkb3duOlxuIik7CisgICAgICAgIC8qcHJpbnRmKCJDb21wYWN0IGFycmF5IHN0YWdlMSB0b3A6ICVpLCBzdGFnZTIgdG9wOiAlaVxuIiwgdC0+bWFwcGluZy0+c3RhZ2UxVG9wLCB0LT5tYXBwaW5nLT5zdGFnZTJUb3ApOyovCisgICAgICAgIHByaW50ZigiTnVtYmVyIG9mIGNvbnRyYWN0aW9uczogJXVcbiIsIChpbnQpbm9PZkNvbnRyYWN0aW9ucyk7CisgICAgICAgIHByaW50ZigiQ29udHJhY3Rpb24gaW1hZ2Ugc2l6ZTogJXVcbiIsIChpbnQpdC0+aW1hZ2UtPmNvbnRyYWN0aW9uU2l6ZSk7CisgICAgICAgIHByaW50ZigiRXhwYW5zaW9ucyBzaXplOiAlaVxuIiwgKGludCl0LT5leHBhbnNpb25zLT5wb3NpdGlvbik7CisgICAgfQorCisgICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgY3JlYXRpbmcgdGFibGU6ICVzXG4iLCB1X2Vycm9yTmFtZSgqc3RhdHVzKSk7CisgICAgICAgIHVwcnZfdWNhX2Nsb3NlVGVtcFRhYmxlKHQpOworICAgICAgICB1cHJ2X2ZyZWUob3B0cyk7CisgICAgICAgIHVwcnZfZnJlZShteUQpOworICAgICAgICBmY2xvc2UoZGF0YSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBwb3B1bGF0ZSB0aGUgdmVyc2lvbiBpbmZvIHN0cnVjdCB3aXRoIHZlcnNpb24gaW5mbyovCisgICAgbXlEYXRhLT52ZXJzaW9uWzBdID0gVUNPTF9CVUlMREVSX1ZFUlNJT047CisgICAgbXlEYXRhLT52ZXJzaW9uWzFdID0gVUNBVmVyc2lvblswXTsKKyAgICBteURhdGEtPnZlcnNpb25bMl0gPSBVQ0FWZXJzaW9uWzFdOworICAgIG15RGF0YS0+dmVyc2lvblszXSA9IFVDQVZlcnNpb25bMl07CisgICAgLypUT0RPOlRoZSBmcmFjdGlvbmFsIHJ1bGVzIHZlcnNpb24gc2hvdWxkIGJlIHRha2VuIGZyb20gRnJhY3Rpb25hbFVDQS50eHQqLworICAgIC8vIFJlbW92ZWQgdGhpcyBtYWNyby4gSW5zdGVhZCwgd2UgdXNlIHRoZSBmaWVsZHMgYmVsb3cKKyAgICAvL215RC0+dmVyc2lvblsxXSA9IFVDT0xfRlJBQ1RJT05BTF9VQ0FfVkVSU0lPTjsKKyAgICAvL215RC0+VUNBVmVyc2lvbiA9IFVDQVZlcnNpb247IC8vIG91dCBvZiBGcmFjdGlvbmFsVUNBLnR4dAorICAgIHVwcnZfbWVtY3B5KG15RGF0YS0+VUNBVmVyc2lvbiwgVUNBVmVyc2lvbiwgc2l6ZW9mKFVWZXJzaW9uSW5mbykpOworICAgIHVfZ2V0VW5pY29kZVZlcnNpb24obXlEYXRhLT5VQ0RWZXJzaW9uKTsKKworICAgIHdyaXRlT3V0RGF0YShteURhdGEsICZjb25zdHMsICZsZWFkQnl0ZUNvbnN0YW50cywgY29udHJhY3Rpb25zLCBub09mQ29udHJhY3Rpb25zLCBvdXRwdXREaXIsIGNvcHlyaWdodCwgc3RhdHVzKTsKKworICAgIEludmVyc2VVQ0FUYWJsZUhlYWRlciAqaW52ZXJzZSA9IGFzc2VtYmxlSW52ZXJzZVRhYmxlKHN0YXR1cyk7CisgICAgdXBydl9tZW1jcHkoaW52ZXJzZS0+VUNBVmVyc2lvbiwgVUNBVmVyc2lvbiwgc2l6ZW9mKFVWZXJzaW9uSW5mbykpOworICAgIHdyaXRlT3V0SW52ZXJzZURhdGEoaW52ZXJzZSwgb3V0cHV0RGlyLCBjb3B5cmlnaHQsIHN0YXR1cyk7CisKKyAgICB1cHJ2X3VjYV9jbG9zZVRlbXBUYWJsZSh0KTsKKyAgICB1cHJ2X2ZyZWUobXlEKTsKKyAgICB1cHJ2X2ZyZWUob3B0cyk7CisKKyAgICB1cHJ2X2ZyZWUobXlEYXRhKTsKKyAgICB1cHJ2X2ZyZWUoaW52ZXJzZSk7CisgICAgCisgICAgdXBydl9mcmVlKGxlYWRCeXRlQ29uc3RhbnRzLkxFQURfQllURV9UT19TQ1JJUFRTX0lOREVYKTsKKyAgICB1cHJ2X2ZyZWUobGVhZEJ5dGVDb25zdGFudHMuTEVBRF9CWVRFX1RPX1NDUklQVFNfREFUQSk7CisgICAgdXBydl9mcmVlKGxlYWRCeXRlQ29uc3RhbnRzLlNDUklQVF9UT19MRUFEX0JZVEVTX0lOREVYKTsKKyAgICB1cHJ2X2ZyZWUobGVhZEJ5dGVDb25zdGFudHMuU0NSSVBUX1RPX0xFQURfQllURVNfREFUQSk7CisgICAgCisgICAgZmNsb3NlKGRhdGEpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OICovCisKK2VudW0geworICAgIEhFTFBfSCwKKyAgICBIRUxQX1FVRVNUSU9OX01BUkssCisgICAgQ09QWVJJR0hULAorICAgIFZFUlNJT04sCisgICAgVkVSQk9TRSwKKyAgICBJQ1VEQVRBRElSCit9OworCisvKiBLZWVwIHRoZXNlIHZhbHVlcyBpbiBzeW5jIHdpdGggdGhlIGFib3ZlIGVudW1zICovCitzdGF0aWMgVU9wdGlvbiBvcHRpb25zW109eworICAgIFVPUFRJT05fSEVMUF9ILAorICAgIFVPUFRJT05fSEVMUF9RVUVTVElPTl9NQVJLLAorICAgIFVPUFRJT05fQ09QWVJJR0hULAorICAgIFVPUFRJT05fVkVSU0lPTiwKKyAgICBVT1BUSU9OX1ZFUkJPU0UsCisgICAgVU9QVElPTl9JQ1VEQVRBRElSCit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CisgICAgdXBydl9tZW1zZXQoJlVDQVZlcnNpb24sIDAsIDQpOworCisgICAgVV9NQUlOX0lOSVRfQVJHUyhhcmdjLCBhcmd2KTsKKyAgICBhcmdjPXVfcGFyc2VBcmdzKGFyZ2MsIGFyZ3YsIExFTkdUSE9GKG9wdGlvbnMpLCBvcHRpb25zKTsKKworICAgIC8qIGVycm9yIGhhbmRsaW5nLCBwcmludGluZyB1c2FnZSBtZXNzYWdlICovCisgICAgaWYoYXJnYzwwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgImVycm9yIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudCBcIiVzXCJcbiIsCisgICAgICAgICAgICBhcmd2Wy1hcmdjXSk7CisgICAgfQorICAgIGlmKGFyZ2M8MiB8fCBvcHRpb25zW0hFTFBfSF0uZG9lc09jY3VyIHx8IG9wdGlvbnNbSEVMUF9RVUVTVElPTl9NQVJLXS5kb2VzT2NjdXIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAidXNhZ2U6ICVzIFstb3B0aW9uc10gcGF0aC90by9JQ1Uvc3JjL3Jvb3RcbiIKKyAgICAgICAgICAgICJcdFJlYWQgaW4gVUNBIGNvbGxhdGlvbiB0ZXh0IGRhdGEgYW5kIHdyaXRlIG91dCB0aGUgYmluYXJ5IGNvbGxhdGlvbiBkYXRhXG4iCisgICAgICAgICAgICAib3B0aW9uczpcbiIKKyAgICAgICAgICAgICJcdC1oIG9yIC0/IG9yIC0taGVscCAgdGhpcyB1c2FnZSB0ZXh0XG4iCisgICAgICAgICAgICAiXHQtViBvciAtLXZlcnNpb24gICAgIHNob3cgYSB2ZXJzaW9uIG1lc3NhZ2VcbiIKKyAgICAgICAgICAgICJcdC1jIG9yIC0tY29weXJpZ2h0ICAgaW5jbHVkZSBhIGNvcHlyaWdodCBub3RpY2VcbiIKKyAgICAgICAgICAgICJcdC12IG9yIC0tdmVyYm9zZSAgICAgdHVybiBvbiB2ZXJib3NlIG91dHB1dFxuIgorICAgICAgICAgICAgIlx0LWkgb3IgLS1pY3VkYXRhZGlyICBkaXJlY3RvcnkgZm9yIGxvY2F0aW5nIGFueSBuZWVkZWQgaW50ZXJtZWRpYXRlIGRhdGEgZmlsZXMsXG4iCisgICAgICAgICAgICAiXHQgICAgICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IHBhdGgsIGRlZmF1bHRzIHRvICVzXG4iLAorICAgICAgICAgICAgYXJndlswXSwgdV9nZXREYXRhRGlyZWN0b3J5KCkpOworICAgICAgICByZXR1cm4gYXJnYzwyID8gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SIDogVV9aRVJPX0VSUk9SOworICAgIH0KKyAgICBpZihvcHRpb25zW1ZFUlNJT05dLmRvZXNPY2N1cikgeworICAgICAgICBwcmludGYoImdlbnVjYSB2ZXJzaW9uICVodS4laHUsIElDVSB0b29sIHRvIHJlYWQgVUNBIHRleHQgZGF0YSBhbmQgY3JlYXRlIFVDQSBkYXRhIHRhYmxlcyBmb3IgY29sbGF0aW9uLlxuIiwKKyNpZiBVQ09ORklHX05PX0NPTExBVElPTgorICAgICAgICAgICAgMCwgMAorI2Vsc2UKKyAgICAgICAgICAgIFVDQV9GT1JNQVRfVkVSU0lPTl8wLCBVQ0FfRk9STUFUX1ZFUlNJT05fMQorI2VuZGlmCisgICAgICAgICAgICApOworICAgICAgICBwcmludGYoVV9DT1BZUklHSFRfU1RSSU5HIlxuIik7CisgICAgICAgIGV4aXQoMCk7CisgICAgfQorCisgICAgLyogZ2V0IHRoZSBvcHRpb25zIHZhbHVlcyAqLworICAgIGJlVmVyYm9zZSA9IG9wdGlvbnNbVkVSQk9TRV0uZG9lc09jY3VyOworCisgICAgY29uc3QgY2hhciAqY29weXJpZ2h0ID0gTlVMTDsKKyAgICBpZiAob3B0aW9uc1tDT1BZUklHSFRdLmRvZXNPY2N1cikgeworICAgICAgICBjb3B5cmlnaHQgPSBVX0NPUFlSSUdIVF9TVFJJTkc7CisgICAgfQorCisgICAgaWYgKG9wdGlvbnNbSUNVREFUQURJUl0uZG9lc09jY3VyKSB7CisgICAgICAgIHVfc2V0RGF0YURpcmVjdG9yeShvcHRpb25zW0lDVURBVEFESVJdLnZhbHVlKTsKKyAgICB9CisgICAgLyogSW5pdGlhbGl6ZSBJQ1UgKi8KKyAgICBJY3VUb29sRXJyb3JDb2RlIGVycm9yQ29kZSgiZ2VudWNhIik7CisgICAgdV9pbml0KGVycm9yQ29kZSk7CisgICAgaWYgKGVycm9yQ29kZS5pc0ZhaWx1cmUoKSAmJiBlcnJvckNvZGUuZ2V0KCkgIT0gVV9GSUxFX0FDQ0VTU19FUlJPUikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4gbm90IGluaXRpYWxpemUgSUNVLiAgc3RhdHVzID0gJXNcbiIsCisgICAgICAgICAgICBhcmd2WzBdLCBlcnJvckNvZGUuZXJyb3JOYW1lKCkpOworICAgICAgICBleGl0KGVycm9yQ29kZS5yZXNldCgpKTsKKyAgICB9CisgICAgZXJyb3JDb2RlLnJlc2V0KCk7CisKKyAgICBDaGFyU3RyaW5nIGljdVNyY1Jvb3QoYXJndlsxXSwgZXJyb3JDb2RlKTsKKworICAgIENoYXJTdHJpbmcgaWN1U291cmNlRGF0YShpY3VTcmNSb290LCBlcnJvckNvZGUpOworICAgIGljdVNvdXJjZURhdGEuYXBwZW5kUGF0aFBhcnQoInNvdXJjZSIsIGVycm9yQ29kZSk7CisgICAgaWN1U291cmNlRGF0YS5hcHBlbmRQYXRoUGFydCgiZGF0YSIsIGVycm9yQ29kZSk7CisKKyAgICBDaGFyU3RyaW5nIHNyY0RpcihpY3VTb3VyY2VEYXRhLCBlcnJvckNvZGUpOworICAgIHNyY0Rpci5hcHBlbmRQYXRoUGFydCgidW5pZGF0YSIsIGVycm9yQ29kZSk7CisKKyAgICBDaGFyU3RyaW5nIGRlc3REaXIoaWN1U291cmNlRGF0YSwgZXJyb3JDb2RlKTsKKyAgICBkZXN0RGlyLmFwcGVuZFBhdGhQYXJ0KCJpbiIsIGVycm9yQ29kZSk7CisgICAgZGVzdERpci5hcHBlbmRQYXRoUGFydCgiY29sbCIsIGVycm9yQ29kZSk7CisKKyAgICBDaGFyU3RyaW5nIHVjYUZpbGUoc3JjRGlyLCBlcnJvckNvZGUpOworICAgIHVjYUZpbGUuYXBwZW5kUGF0aFBhcnQoIkZyYWN0aW9uYWxVQ0EudHh0IiwgZXJyb3JDb2RlKTsKKworICAgIGlmKGVycm9yQ29kZS5pc0ZhaWx1cmUoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdlbnVjYTogdW5hYmxlIHRvIGJ1aWxkIGZpbGUgcGF0aHMgLSAlc1xuIiwKKyAgICAgICAgICAgICAgICBlcnJvckNvZGUuZXJyb3JOYW1lKCkpOworICAgICAgICByZXR1cm4gZXJyb3JDb2RlLnJlc2V0KCk7CisgICAgfQorCisjaWYgVUNPTkZJR19OT19DT0xMQVRJT04KKworICAgIFVOZXdEYXRhTWVtb3J5ICpwRGF0YTsKKyAgICBjb25zdCBjaGFyICptc2c7CisgICAgCisgICAgbXNnID0gImdlbnVjYSB3cml0ZXMgZHVtbXkgIiBVQ0FfREFUQV9OQU1FICIuIiBVQ0FfREFUQV9UWVBFICIgYmVjYXVzZSBvZiBVQ09ORklHX05PX0NPTExBVElPTiwgc2VlIHVjb25maWcuaCI7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKyAgICBwRGF0YSA9IHVkYXRhX2NyZWF0ZShkZXN0RGlyLmRhdGEoKSwgVUNBX0RBVEFfVFlQRSwgVUNBX0RBVEFfTkFNRSwgJmR1bW15RGF0YUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZXJyb3JDb2RlKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBtc2csIHN0cmxlbihtc2cpKTsKKyAgICB1ZGF0YV9maW5pc2gocERhdGEsIGVycm9yQ29kZSk7CisKKyAgICBtc2cgPSAiZ2VudWNhIHdyaXRlcyBkdW1teSAiIElOVkNfREFUQV9OQU1FICIuIiBJTlZDX0RBVEFfVFlQRSAiIGJlY2F1c2Ugb2YgVUNPTkZJR19OT19DT0xMQVRJT04sIHNlZSB1Y29uZmlnLmgiOworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisgICAgcERhdGEgPSB1ZGF0YV9jcmVhdGUoZGVzdERpci5kYXRhKCksIElOVkNfREFUQV9UWVBFLCBJTlZDX0RBVEFfTkFNRSwgJmR1bW15RGF0YUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZXJyb3JDb2RlKTsKKyAgICB1ZGF0YV93cml0ZUJsb2NrKHBEYXRhLCBtc2csIHN0cmxlbihtc2cpKTsKKyAgICB1ZGF0YV9maW5pc2gocERhdGEsIGVycm9yQ29kZSk7CisKKyAgICByZXR1cm4gZXJyb3JDb2RlLnJlc2V0KCk7CisKKyNlbHNlCisKKyAgICByZXR1cm4gd3JpdGVfdWNhX3RhYmxlKHVjYUZpbGUuZGF0YSgpLCBkZXN0RGlyLmRhdGEoKSwgY29weXJpZ2h0LCBlcnJvckNvZGUpOworCisjZW5kaWYKK30KKworLyoKKyAqIEhleSwgRW1hY3MsIHBsZWFzZSBzZXQgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBMb2NhbCBWYXJpYWJsZXM6CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqCisgKi8KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLmggYi91bmljb2RlL2MvZ2VudWNhL2dlbnVjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OGU2NjkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudWNhL2dlbnVjYS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICBnZW51Y2EuaAorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgYXQgdGhlIGVuZCBvZiBYWCBjZW50dXJ5CisqICAgY3JlYXRlZCBieTogVmxhZGltaXIgV2VpbnN0ZWluCisqCisqICAgVGhpcyBwcm9ncmFtIHJlYWRzIHRoZSBGcmFuY3Rpb25hbCBVQ0EgdGFibGUgYW5kIGdlbmVyYXRlcworKiAgIGludGVybmFsIGZvcm1hdCBmb3IgVUNBIHRhYmxlIGFzIHdlbGwgYXMgaW52ZXJzZSBVQ0EgdGFibGUuCisqICAgSXQgdGhlbiB3cml0ZXMgYmluYXJ5IGZpbGVzIGNvbnRhaW5pbmcgdGhlIGRhdGE6IHVjYWRhdGEuZGF0IAorKiAgICYgaW52dWNhLmRhdAorKi8KKworI2lmbmRlZiBVQ0FEQVRBX0gKKyNkZWZpbmUgVUNBREFUQV9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OCisKKyNpbmNsdWRlICJ1Y29sX2VsbS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaGFyLmgiCisjaW5jbHVkZSAidWNvbF9pbXAuaCIKKyNpbmNsdWRlICJ1aGFzaC5oIgorI2luY2x1ZGUgInVuZXdkYXRhLmgiCisKKwordm9pZCBkZWxldGVFbGVtZW50KHZvaWQgKmVsZW1lbnQpOworaW50MzJfdCByZWFkRWxlbWVudChjaGFyICoqZnJvbSwgY2hhciAqdG8sIGNoYXIgc2VwYXJhdG9yLCBVRXJyb3JDb2RlICpzdGF0dXMpOwordWludDMyX3QgZ2V0U2luZ2xlQ0VWYWx1ZShjaGFyICpwcmltYXJ5LCBjaGFyICpzZWNvbmRhcnksIGNoYXIgKnRlcnRpYXJ5LCBVQm9vbCBjYXNlQml0LCBVRXJyb3JDb2RlICpzdGF0dXMpOwordm9pZCBwcmludE91dFRhYmxlKFVDQVRhYmxlSGVhZGVyICpteURhdGEsIFVFcnJvckNvZGUgKnN0YXR1cyk7CitVQ0FFbGVtZW50cyAqcmVhZEFuRWxlbWVudChGSUxFICpkYXRhLCB0ZW1wVUNBVGFibGUgKnQsIFVDQUNvbnN0YW50cyAqY29uc3RzLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0NPTExBVElPTiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLnZjcHJvaiBiL3VuaWNvZGUvYy9nZW51Y2EvZ2VudWNhLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDU2MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnVjYS9nZW51Y2EudmNwcm9qCkBAIC0wLDAgKzEsNDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOS4wMCIKKwlOYW1lPSJnZW51Y2EiCisJUHJvamVjdEdVSUQ9Ins4NjgyOTY5NC1BMzc1LTRDNTgtQjRFQS05NkVGNTE0RTMyMjV9IgorCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiIKKwk+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIKKwkJLz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJ4NjQiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlx4ODZcRGVidWciCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2XERlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJjb3B5ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgLi5cLi5cLi5cYmluJiN4MEQ7JiN4MEE7IgorCQkJCU91dHB1dHM9Ii4uXC4uXC4uXGJpblwkKFRhcmdldEZpbGVOYW1lKSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlx4ODZcRGVidWcvZ2VudWNhLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXGNvbW1vbjsuLlwuLlxpMThuOy4uXHRvb2x1dGlsIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJ0cnVlIgorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiCisJCQkJVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZT0idHJ1ZSIKKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5ceDg2XERlYnVnL2dlbnVjYS5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg4NlxEZWJ1Zy8iCisJCQkJT2JqZWN0RmlsZT0iLlx4ODZcRGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg4NlxEZWJ1Zy8iCisJCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4ODZcRGVidWcvZ2VudWNhLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXHg4NlxEZWJ1Zy9nZW51Y2EucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiCisJCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJCVVzZUZBVDMyV29ya2Fyb3VuZD0idHJ1ZSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlx4ODZcUmVsZWFzZSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODZcUmVsZWFzZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9IiQoVkNJbnN0YWxsRGlyKVZDUHJvamVjdERlZmF1bHRzXFVwZ3JhZGVGcm9tVkM3MS52c3Byb3BzIgorCQkJVXNlT2ZNRkM9IjAiCisJCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IC4uXC4uXC4uXGJpbiYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW5cJChUYXJnZXRGaWxlTmFtZSkiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUeXBlTGlicmFyeU5hbWU9Ii5ceDg2XFJlbGVhc2UvZ2VudWNhLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cY29tbW9uOy4uXC4uXGkxOG47Li5cdG9vbHV0aWwiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiCisJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKKwkJCQlEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPSJ0cnVlIgorCQkJCVRyZWF0V0NoYXJfdEFzQnVpbHRJblR5cGU9InRydWUiCisJCQkJUHJlY29tcGlsZWRIZWFkZXJGaWxlPSIuXHg4NlxSZWxlYXNlL2dlbnVjYS5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg4NlxSZWxlYXNlLyIKKwkJCQlPYmplY3RGaWxlPSIuXHg4NlxSZWxlYXNlLyIKKwkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlx4ODZcUmVsZWFzZS8iCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlDb21waWxlQXM9IjAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDMzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCU91dHB1dEZpbGU9Ii5ceDg2XFJlbGVhc2UvZ2VudWNhLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5ceDg2XFJlbGVhc2UvZ2VudWNhLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgorCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8eDY0IgorCQkJT3V0cHV0RGlyZWN0b3J5PSIuXHg2NFxEZWJ1ZyIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4NjRcRGVidWciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyAuLlwuLlwuLlxiaW42NCYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW42NFwkKFRhcmdldEZpbGVOYW1lKSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlx4NjRcRGVidWcvZ2VudWNhLnRsYiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXGNvbW1vbjsuLlwuLlxpMThuOy4uXHRvb2x1dGlsIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU42NDtXSU4zMjtfREVCVUc7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJ0cnVlIgorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiCisJCQkJVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZT0idHJ1ZSIKKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5ceDY0XERlYnVnL2dlbnVjYS5wY2giCisJCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHg2NFxEZWJ1Zy8iCisJCQkJT2JqZWN0RmlsZT0iLlx4NjRcRGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg2NFxEZWJ1Zy8iCisJCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4NjRcRGVidWcvZ2VudWNhLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXHg2NFxEZWJ1Zy9nZW51Y2EucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkJVXNlRkFUMzJXb3JrYXJvdW5kPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXx4NjQiCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5ceDY0XFJlbGVhc2UiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDY0XFJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyAuLlwuLlwuLlxiaW42NCYjeDBEOyYjeDBBOyIKKwkJCQlPdXRwdXRzPSIuLlwuLlwuLlxiaW42NFwkKFRhcmdldEZpbGVOYW1lKSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlx4NjRcUmVsZWFzZS9nZW51Y2EudGxiIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxjb21tb247Li5cLi5caTE4bjsuLlx0b29sdXRpbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lONjQ7V0lOMzI7TkRFQlVHO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIKKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCURpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM9InRydWUiCisJCQkJVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZT0idHJ1ZSIKKwkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5ceDY0XFJlbGVhc2UvZ2VudWNhLnBjaCIKKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5ceDY0XFJlbGVhc2UvIgorCQkJCU9iamVjdEZpbGU9Ii5ceDY0XFJlbGVhc2UvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHg2NFxSZWxlYXNlLyIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUNvbXBpbGVBcz0iMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIgorCQkJCUN1bHR1cmU9IjEwMzMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJT3V0cHV0RmlsZT0iLlx4NjRcUmVsZWFzZS9nZW51Y2EuZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlx4NjRcUmVsZWFzZS9nZW51Y2EucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW51Y2EuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IkhlYWRlciBGaWxlcyIKKwkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubCIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXGdlbnVjYS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiCisJCQk+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdW5pY29kZS9jL2dlbnV0czQ2L0NNYWtlTGlzdHMudHh0IGIvdW5pY29kZS9jL2dlbnV0czQ2L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzc4MmUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudXRzNDYvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw5IEBACisjIENvcHlyaWdodCAoQykgMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgY3JlYXRlZCBvbjogMjAxMGp1bjAzCisjIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisjIGVkaXRlZCBvbjogMjAxMGp1bDIwCisjIGVkaXRlZCBieTogU3R1YXJ0IEcuIEdpbGwKK2FkZF9leGVjdXRhYmxlKGdlbnV0czQ2IGdlbnV0czQ2LmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhnZW51dHM0NiBpY3V1YyBpY3V0dSkKZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51dHM0Ni9nZW51dHM0Ni5jcHAgYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODY0N2EKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuY3BwCkBAIC0wLDAgKzEsMzY0IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIGdlbnV0czQ2LmNwcAorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0ZWQgb246IDIwMTBtYXIwMgorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisqCisqIHF1aWNrICYgZGlydHkgdG9vbCB0byByZWNyZWF0ZSB0aGUgVVRTICM0NiBkYXRhIHRhYmxlIGFjY29yZGluZyB0byB0aGUgc3BlYworKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS9lcnJvcmNvZGUuaCIKKyNpbmNsdWRlICJ1bmljb2RlL25vcm1hbGl6ZXIyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzZXQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXNldGl0ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VzcHJlcC5oIgorI2luY2x1ZGUgInNwcnBpbXBsLmgiICAvLyBIQUNLCisKKy8qKgorICogaWN1OjpFcnJvckNvZGUgc3ViY2xhc3MgZm9yIGVhc3kgVUVycm9yQ29kZSBoYW5kbGluZy4KKyAqIFRoZSBkZXN0cnVjdG9yIGNhbGxzIGhhbmRsZUZhaWx1cmUoKSB3aGljaCBjYWxscyBleGl0KGVycm9yQ29kZSkgd2hlbiBpc0ZhaWx1cmUoKS4KKyAqLworY2xhc3MgRXhpdGluZ0Vycm9yQ29kZSA6IHB1YmxpYyBpY3U6OkVycm9yQ29kZSB7CitwdWJsaWM6CisgICAgLyoqCisgICAgICogQHBhcmFtIGxvYyBBIHNob3J0IHN0cmluZyBkZXNjcmliaW5nIHdoZXJlIHRoZSBFeGl0aW5nRXJyb3JDb2RlIGlzIHVzZWQuCisgICAgICovCisgICAgRXhpdGluZ0Vycm9yQ29kZShjb25zdCBjaGFyICpsb2MpIDogbG9jYXRpb24obG9jKSB7fQorICAgIHZpcnR1YWwgfkV4aXRpbmdFcnJvckNvZGUoKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRmFpbHVyZSgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBjb25zdCBjaGFyICpsb2NhdGlvbjsKK307CisKK0V4aXRpbmdFcnJvckNvZGU6On5FeGl0aW5nRXJyb3JDb2RlKCkgeworICAgIC8vIFNhZmUgYmVjYXVzZSBvdXIgaGFuZGxlRmFpbHVyZSgpIGRvZXMgbm90IHRocm93IGV4Y2VwdGlvbnMuCisgICAgaWYoaXNGYWlsdXJlKCkpIHsgaGFuZGxlRmFpbHVyZSgpOyB9Cit9CisKK3ZvaWQgRXhpdGluZ0Vycm9yQ29kZTo6aGFuZGxlRmFpbHVyZSgpIGNvbnN0IHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGF0ICVzOiAlc1xuIiwgbG9jYXRpb24sIGVycm9yTmFtZSgpKTsKKyAgICBleGl0KGVycm9yQ29kZSk7Cit9CisKK3N0YXRpYyBpbnQKK3RvSUROQTIwMDMoY29uc3QgVVN0cmluZ1ByZXBQcm9maWxlICpwcmVwLCBVQ2hhcjMyIGMsIGljdTo6VW5pY29kZVN0cmluZyAmZGVzdFN0cmluZykgeworICAgIFVDaGFyIHNyY1syXTsKKyAgICBpbnQzMl90IHNyY0xlbmd0aD0wOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKHNyYywgc3JjTGVuZ3RoLCBjKTsKKyAgICBVQ2hhciAqZGVzdDsKKyAgICBpbnQzMl90IGRlc3RMZW5ndGg7CisgICAgZGVzdD1kZXN0U3RyaW5nLmdldEJ1ZmZlcigzMik7CisgICAgaWYoZGVzdD09TlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIFVFcnJvckNvZGUgZXJyb3JDb2RlPVVfWkVST19FUlJPUjsKKyAgICBkZXN0TGVuZ3RoPXVzcHJlcF9wcmVwYXJlKHByZXAsIHNyYywgc3JjTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFN0cmluZy5nZXRDYXBhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNQUkVQX0RFRkFVTFQsIE5VTEwsICZlcnJvckNvZGUpOworICAgIGRlc3RTdHJpbmcucmVsZWFzZUJ1ZmZlcihkZXN0TGVuZ3RoKTsKKyAgICBpZihlcnJvckNvZGU9PVVfU1RSSU5HUFJFUF9QUk9ISUJJVEVEX0VSUk9SKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSZXR1cm5zIEZBTFNFPTAgZm9yIFVfU1RSSU5HUFJFUF9VTkFTU0lHTkVEX0VSUk9SIGFuZCBwcm9jZXNzaW5nIGVycm9ycywKKyAgICAgICAgLy8gVFJVRT0xIGlmIGMgaXMgdmFsaWQgb3IgbWFwcGVkLgorICAgICAgICByZXR1cm4gVV9TVUNDRVNTKGVycm9yQ29kZSk7CisgICAgfQorfQorCitlbnVtIFN0YXR1cyB7CisgICAgRElTQUxMT1dFRCwgSUdOT1JFRCwgTUFQUEVELCBERVZJQVRJT04sIFZBTElELAorICAgIERJU0FMTE9XRURfU1REM19WQUxJRCwgRElTQUxMT1dFRF9TVEQzX01BUFBFRAorfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGF0dXNOYW1lc1tdPXsKKyAgICAiZGlzYWxsb3dlZCIsICJpZ25vcmVkIiwgIm1hcHBlZCIsICJkZXZpYXRpb24iLCAidmFsaWQiLAorICAgICJkaXNhbGxvd2VkX1NURDNfdmFsaWQiLCAiZGlzYWxsb3dlZF9TVEQzX21hcHBlZCIKK307CisKK3N0YXRpYyB2b2lkCitwcmludExpbmUoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQsIFN0YXR1cyBzdGF0dXMsIGNvbnN0IGljdTo6VW5pY29kZVN0cmluZyAmbWFwcGluZykgeworICAgIGlmKHN0YXJ0PT1lbmQpIHsKKyAgICAgICAgcHJpbnRmKCIlMDRsWCAgICAgICAgICAiLCAobG9uZylzdGFydCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCIlMDRsWC4uJTA0bFggICAgIiwgKGxvbmcpc3RhcnQsIChsb25nKWVuZCk7CisgICAgfQorICAgIHByaW50ZigiOyAlcyIsIHN0YXR1c05hbWVzW3N0YXR1c10pOworICAgIGlmKHN0YXR1cz09TUFQUEVEIHx8IHN0YXR1cz09REVWSUFUSU9OIHx8ICFtYXBwaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBwcmludGYoIiA7Iik7CisgICAgICAgIGNvbnN0IFVDaGFyICpidWZmZXI9bWFwcGluZy5nZXRCdWZmZXIoKTsKKyAgICAgICAgaW50MzJfdCBsZW5ndGg9bWFwcGluZy5sZW5ndGgoKTsKKyAgICAgICAgaW50MzJfdCBpPTA7CisgICAgICAgIFVDaGFyMzIgYzsKKyAgICAgICAgd2hpbGUoaTxsZW5ndGgpIHsKKyAgICAgICAgICAgIFUxNl9ORVhUKGJ1ZmZlciwgaSwgbGVuZ3RoLCBjKTsKKyAgICAgICAgICAgIHByaW50ZigiICUwNGxYIiwgKGxvbmcpYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHV0cygiIik7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRBZ2VJZkFzc2lnbmVkKFVDaGFyMzIgYywgVVZlcnNpb25JbmZvIGFnZSkgeworICAgIGlmKHVfaXNkZWZpbmVkKGMpKSB7CisgICAgICAgIHVfY2hhckFnZShjLCBhZ2UpOworICAgIH0gZWxzZSBpZihVX0lTX1VOSUNPREVfTk9OQ0hBUihjKSkgeworICAgICAgICBhZ2VbMF09MDsKKyAgICAgICAgYWdlWzFdPTA7CisgICAgICAgIGFnZVsyXT0wOworICAgICAgICBhZ2VbM109MTsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1zZXQoYWdlLCAwLCA0KTsKKyAgICB9Cit9CisKK2V4dGVybiBpbnQKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgeworICAgIEV4aXRpbmdFcnJvckNvZGUgZXJyb3JDb2RlKCJnZW51dHM0NiIpOworCisgICAgLy8gcHJlZGVmaW5lZCBiYXNlIHNldHMKKyAgICBpY3U6OlVuaWNvZGVTZXQgdW5hc3NpZ25lZFNldChVTklDT0RFX1NUUklOR19TSU1QTEUoIls6Q246XSIpLCBlcnJvckNvZGUpOworCisgICAgaWN1OjpVbmljb2RlU2V0IGxhYmVsU2VwYXJhdG9ycygKKyAgICAgICAgVU5JQ09ERV9TVFJJTkdfU0lNUExFKCJbXFx1MDAyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0iKSwgZXJyb3JDb2RlKTsKKworICAgIGljdTo6VW5pY29kZVNldCBtYXBwZWRTZXQoCisgICAgICAgIFVOSUNPREVfU1RSSU5HX1NJTVBMRSgiWzpDaGFuZ2VzX1doZW5fTkZLQ19DYXNlZm9sZGVkOl0iKSwgZXJyb3JDb2RlKTsKKyAgICBtYXBwZWRTZXQucmVtb3ZlQWxsKGxhYmVsU2VwYXJhdG9ycyk7ICAvLyBzaW1wbGlmaWVzIGNoZWNraW5nIG9mIG1hcHBlZCBjaGFyYWN0ZXJzCisKKyAgICBpY3U6OlVuaWNvZGVTZXQgYmFzZVZhbGlkU2V0KGljdTo6VW5pY29kZVN0cmluZygKKyAgICAgICAgIltbW1s6XkNoYW5nZXNfV2hlbl9ORktDX0Nhc2Vmb2xkZWQ6XSIKKyAgICAgICAgIi1bOkM6XS1bOlo6XSIKKyAgICAgICAgIi1bOkJsb2NrPUlkZW9ncmFwaGljX0Rlc2NyaXB0aW9uX0NoYXJhY3RlcnM6XV0iCisgICAgICAgICJbOmFzY2lpOl1dLVsuXV0iLCAtMSwgVVNfSU5WKSwgZXJyb3JDb2RlKTsKKworICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgZGlzYWxsb3dlZCB3aGVuIFNURDMgcnVsZXMgYXJlIGFwcGxpZWQsCisgICAgLy8gYnV0IHZhbGlkIHdoZW4gU1REMyBydWxlcyBhcmUgbm90IGFwcGxpZWQuCisgICAgaWN1OjpVbmljb2RlU2V0IGRpc2FsbG93ZWRTVEQzU2V0KGljdTo6VW5pY29kZVN0cmluZygKKyAgICAgICAgIltbOmFzY2lpOl0tW1xcdTAwMkQuYS16QS1aMC05XV0iLCAtMSwgVVNfSU5WKSwgZXJyb3JDb2RlKTsKKworICAgIGljdTo6VW5pY29kZVNldCBkZXZpYXRpb25TZXQoCisgICAgICAgIFVOSUNPREVfU1RSSU5HX1NJTVBMRSgiW1xcdTAwREZcXHUwM0MyXFx1MjAwQ1xcdTIwMERdIiksIGVycm9yQ29kZSk7CisgICAgZXJyb3JDb2RlLmFzc2VydFN1Y2Nlc3MoKTsKKworICAgIC8vIGRlcml2ZWQgc2V0cworICAgIGljdTo6TG9jYWxVU3RyaW5nUHJlcFByb2ZpbGVQb2ludGVyIG5hbWVQcmVwKHVzcHJlcF9vcGVuQnlUeXBlKFVTUFJFUF9SRkMzNDkxX05BTUVQUkVQLCBlcnJvckNvZGUpKTsKKyAgICBjb25zdCBpY3U6Ok5vcm1hbGl6ZXIyICpuZmtjX2NmPQorICAgICAgICBpY3U6Ok5vcm1hbGl6ZXIyOjpnZXRJbnN0YW5jZShOVUxMLCAibmZrY19jZiIsIFVOT1JNMl9DT01QT1NFLCBlcnJvckNvZGUpOworICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICAvLyBIQUNLOiBUaGUgU3RyaW5nUHJlcCBBUEkgcGVyZm9ybXMgYSBCaURpIGNoZWNrIGFjY29yZGluZyB0byB0aGUgZGF0YS4KKyAgICAvLyBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoYXQgZm9yIHRoaXMgZGF0YSBnZW5lcmF0aW9uLCBieSByZXNldHRpbmcgYW4gaW50ZXJuYWwgZmxhZy4KKyAgICBuYW1lUHJlcC0+Y2hlY2tCaURpPUZBTFNFOworCisgICAgaWN1OjpVbmljb2RlU2V0IGJhc2VFeGNsdXNpb25TZXQ7CisgICAgaWN1OjpVbmljb2RlU3RyaW5nIGNTdHJpbmcsIG1hcHBpbmcsIG5hbWVQcmVwUmVzdWx0OworICAgIGZvcihVQ2hhcjMyIGM9MDsgYzw9MHgxMGZmZmY7ICsrYykgeworICAgICAgICBpZihjPT0weGQ4MDApIHsKKyAgICAgICAgICAgIGM9MHhlMDAwOworICAgICAgICB9CisgICAgICAgIGludCBuYW1lUHJlcFN0YXR1cz10b0lETkEyMDAzKG5hbWVQcmVwLmdldEFsaWFzKCksIGMsIG5hbWVQcmVwUmVzdWx0KTsKKyAgICAgICAgaWYobmFtZVByZXBTdGF0dXMhPTApIHsKKyAgICAgICAgICAgIC8vIGdldCB0aGUgVVRTICM0NiBiYXNlIG1hcHBpbmcgdmFsdWUKKyAgICAgICAgICAgIHN3aXRjaChjKSB7CisgICAgICAgICAgICBjYXNlIDB4ZmYwZToKKyAgICAgICAgICAgIGNhc2UgMHgzMDAyOgorICAgICAgICAgICAgY2FzZSAweGZmNjE6CisgICAgICAgICAgICAgICAgbWFwcGluZy5zZXRUbygweDJlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY1N0cmluZy5zZXRUbyhjKTsKKyAgICAgICAgICAgICAgICBuZmtjX2NmLT5ub3JtYWxpemUoY1N0cmluZywgbWFwcGluZywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKAorICAgICAgICAgICAgICAgIG5hbWVQcmVwU3RhdHVzPjAgPworICAgICAgICAgICAgICAgICAgICAvLyBjIGlzIHZhbGlkIG9yIG1hcHBlZCBpbiBJRE5BMjAwMworICAgICAgICAgICAgICAgICAgICAhbGFiZWxTZXBhcmF0b3JzLmNvbnRhaW5zKGMpICYmIG5hbWVQcmVwUmVzdWx0IT1tYXBwaW5nIDoKKyAgICAgICAgICAgICAgICAgICAgLy8gbmFtZVByZXBTdGF0dXM8MDogYyBpcyBwcm9oaWJpdGVkIGluIElETkEyMDAzCisgICAgICAgICAgICAgICAgICAgIGJhc2VWYWxpZFNldC5jb250YWlucyhjKSB8fCAoY1N0cmluZyE9bWFwcGluZyAmJiBiYXNlVmFsaWRTZXQuY29udGFpbnNBbGwobWFwcGluZykpCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBiYXNlRXhjbHVzaW9uU2V0LmFkZChjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGljdTo6VW5pY29kZVNldCBkaXNhbGxvd2VkU2V0KDAsIDB4MTBmZmZmKTsKKyAgICBkaXNhbGxvd2VkU2V0LgorICAgICAgICByZW1vdmVBbGwobGFiZWxTZXBhcmF0b3JzKS4KKyAgICAgICAgcmVtb3ZlQWxsKGRldmlhdGlvblNldCkuCisgICAgICAgIHJlbW92ZUFsbChtYXBwZWRTZXQpLgorICAgICAgICByZW1vdmVBbGwoYmFzZVZhbGlkU2V0KS4KKyAgICAgICAgYWRkQWxsKGJhc2VFeGNsdXNpb25TZXQpLgorICAgICAgICBhZGRBbGwodW5hc3NpZ25lZFNldCk7CisKKyAgICBjb25zdCBpY3U6Ok5vcm1hbGl6ZXIyICpuZmQ9CisgICAgICAgIGljdTo6Tm9ybWFsaXplcjI6OmdldEluc3RhbmNlKE5VTEwsICJuZmMiLCBVTk9STTJfREVDT01QT1NFLCBlcnJvckNvZGUpOworICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICBpY3U6OlVuaWNvZGVTZXQgaWdub3JlZFNldDsgIC8vIHdpbGwgYmUgYSBzdWJzZXQgb2YgbWFwcGVkU2V0CisgICAgaWN1OjpVbmljb2RlU2V0IHJlbW92ZVNldDsKKyAgICBpY3U6OlVuaWNvZGVTdHJpbmcgbmZkU3RyaW5nOworICAgIHsKKyAgICAgICAgaWN1OjpVbmljb2RlU2V0SXRlcmF0b3IgaXRlcihtYXBwZWRTZXQpOworICAgICAgICB3aGlsZShpdGVyLm5leHQoKSkgeworICAgICAgICAgICAgVUNoYXIzMiBjPWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgICAgICBjU3RyaW5nLnNldFRvKGMpOworICAgICAgICAgICAgbmZrY19jZi0+bm9ybWFsaXplKGNTdHJpbmcsIG1hcHBpbmcsIGVycm9yQ29kZSk7CisgICAgICAgICAgICBpZighYmFzZVZhbGlkU2V0LmNvbnRhaW5zQWxsKG1hcHBpbmcpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVKyUwNGxYIG1hcHBlZCAtPiBkaXNhbGxvd2VkOiBtYXBwaW5nIG5vdCB3aG9sbHkgaW4gYmFzZSB2YWxpZCBzZXRcbiIsIChsb25nKWMpOworICAgICAgICAgICAgICAgIGRpc2FsbG93ZWRTZXQuYWRkKGMpOworICAgICAgICAgICAgICAgIHJlbW92ZVNldC5hZGQoYyk7CisgICAgICAgICAgICB9IGVsc2UgaWYobWFwcGluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZ25vcmVkU2V0LmFkZChjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtYXBwZWRTZXQucmVtb3ZlQWxsKHJlbW92ZVNldCk7CisgICAgfQorICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICBpY3U6OlVuaWNvZGVTZXQgdmFsaWRTZXQoYmFzZVZhbGlkU2V0KTsKKyAgICB2YWxpZFNldC4KKyAgICAgICAgcmVtb3ZlQWxsKGxhYmVsU2VwYXJhdG9ycykuICAvLyBub24tQVNDSUkgbGFiZWwgc2VwYXJhdG9ycyB3aWxsIGJlIG1hcHBlZCBpbiB0aGUgZW5kCisgICAgICAgIHJlbW92ZUFsbChkZXZpYXRpb25TZXQpLgorICAgICAgICByZW1vdmVBbGwoZGlzYWxsb3dlZFNldCkuCisgICAgICAgIHJlbW92ZUFsbChtYXBwZWRTZXQpLgorICAgICAgICBhZGQoMHgyZSk7ICAvLyBub3QgbWFwcGVkLCBzaW1wbHkgdmFsaWQKKyAgICBVQm9vbCBtYWRlQ2hhbmdlOworICAgIGRvIHsKKyAgICAgICAgbWFkZUNoYW5nZT1GQUxTRTsKKyAgICAgICAgeworICAgICAgICAgICAgcmVtb3ZlU2V0LmNsZWFyKCk7CisgICAgICAgICAgICBpY3U6OlVuaWNvZGVTZXRJdGVyYXRvciBpdGVyKHZhbGlkU2V0KTsKKyAgICAgICAgICAgIHdoaWxlKGl0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgVUNoYXIzMiBjPWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgICAgICAgICAgaWYobmZkLT5nZXREZWNvbXBvc2l0aW9uKGMsIG5mZFN0cmluZykgJiYgIXZhbGlkU2V0LmNvbnRhaW5zQWxsKG5mZFN0cmluZykpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVKyUwNGxYIHZhbGlkIC0+IGRpc2FsbG93ZWQ6IE5GRCBub3Qgd2hvbGx5IHZhbGlkXG4iLCAobG9uZyljKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWxsb3dlZFNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIG1hZGVDaGFuZ2U9VFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWxpZFNldC5yZW1vdmVBbGwocmVtb3ZlU2V0KTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICByZW1vdmVTZXQuY2xlYXIoKTsKKyAgICAgICAgICAgIGljdTo6VW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIobWFwcGVkU2V0KTsKKyAgICAgICAgICAgIHdoaWxlKGl0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgVUNoYXIzMiBjPWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgICAgICAgICAgY1N0cmluZy5zZXRUbyhjKTsKKyAgICAgICAgICAgICAgICBuZmtjX2NmLT5ub3JtYWxpemUoY1N0cmluZywgbWFwcGluZywgZXJyb3JDb2RlKTsKKyAgICAgICAgICAgICAgICBuZmQtPm5vcm1hbGl6ZShtYXBwaW5nLCBuZmRTdHJpbmcsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgaWYoIXZhbGlkU2V0LmNvbnRhaW5zQWxsKG5mZFN0cmluZykpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVKyUwNGxYIG1hcHBlZCAtPiBkaXNhbGxvd2VkOiBORkQgb2YgbWFwcGluZyBub3Qgd2hvbGx5IHZhbGlkXG4iLCAobG9uZyljKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWxsb3dlZFNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNldC5hZGQoYyk7CisgICAgICAgICAgICAgICAgICAgIG1hZGVDaGFuZ2U9VFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXBwZWRTZXQucmVtb3ZlQWxsKHJlbW92ZVNldCk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlKG1hZGVDaGFuZ2UpOworICAgIGVycm9yQ29kZS5hc3NlcnRTdWNjZXNzKCk7CisKKyAgICAvLyBmaW5pc2ggdXAKKyAgICBsYWJlbFNlcGFyYXRvcnMucmVtb3ZlKDB4MmUpLmZyZWV6ZSgpOyAgLy8gVSswMDJFIGlzIHNpbXBseSB2YWxpZAorICAgIGRldmlhdGlvblNldC5mcmVlemUoKTsKKyAgICBpZ25vcmVkU2V0LmZyZWV6ZSgpOworICAgIHZhbGlkU2V0LmZyZWV6ZSgpOworICAgIG1hcHBlZFNldC5mcmVlemUoKTsKKyAgICBkaXNhbGxvd2VkU1REM1NldC5mcmVlemUoKTsKKworICAgIC8vIG91dHB1dAorICAgIFVDaGFyMzIgcHJldlN0YXJ0PTAsIGM9MDsKKyAgICBTdGF0dXMgcHJldlN0YXR1cz1ESVNBTExPV0VEX1NURDNfVkFMSUQsIHN0YXR1czsKKyAgICBpY3U6OlVuaWNvZGVTdHJpbmcgcHJldk1hcHBpbmc7CisgICAgVVZlcnNpb25JbmZvIHByZXZBZ2U9eyAxLCAxLCAwLCAwIH0sIGFnZTsKKworICAgIGljdTo6VW5pY29kZVNldEl0ZXJhdG9yIGl0ZXIoZGlzYWxsb3dlZFNldCk7CisgICAgd2hpbGUoaXRlci5uZXh0UmFuZ2UoKSkgeworICAgICAgICBVQ2hhcjMyIHN0YXJ0PWl0ZXIuZ2V0Q29kZXBvaW50KCk7CisgICAgICAgIHdoaWxlKGM8c3RhcnQpIHsKKyAgICAgICAgICAgIG1hcHBpbmcucmVtb3ZlKCk7CisgICAgICAgICAgICBpZihsYWJlbFNlcGFyYXRvcnMuY29udGFpbnMoYykpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXM9TUFQUEVEOworICAgICAgICAgICAgICAgIG1hcHBpbmcuc2V0VG8oMHgyZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYoZGV2aWF0aW9uU2V0LmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzPURFVklBVElPTjsKKyAgICAgICAgICAgICAgICBjU3RyaW5nLnNldFRvKGMpOworICAgICAgICAgICAgICAgIG5ma2NfY2YtPm5vcm1hbGl6ZShjU3RyaW5nLCBtYXBwaW5nLCBlcnJvckNvZGUpOworICAgICAgICAgICAgfSBlbHNlIGlmKGlnbm9yZWRTZXQuY29udGFpbnMoYykpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXM9SUdOT1JFRDsKKyAgICAgICAgICAgIH0gZWxzZSBpZih2YWxpZFNldC5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgIGlmKGRpc2FsbG93ZWRTVEQzU2V0LmNvbnRhaW5zKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVSslMDRsWCB2YWxpZCAtPiBkaXNhbGxvd2VkX1NURDNfdmFsaWQ6IGl0c2VsZiBub3QgU1REM1xuIiwgKGxvbmcpYyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1ESVNBTExPV0VEX1NURDNfVkFMSUQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCBuZmQtPmdldERlY29tcG9zaXRpb24oYywgbmZkU3RyaW5nKSAmJgorICAgICAgICAgICAgICAgICAgICBkaXNhbGxvd2VkU1REM1NldC5jb250YWluc1NvbWUobmZkU3RyaW5nKQorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlUrJTA0bFggdmFsaWQgLT4gZGlzYWxsb3dlZF9TVEQzX3ZhbGlkOiBORkQgbm90IHdob2xseSBTVEQzXG4iLCAobG9uZyljKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzPURJU0FMTE9XRURfU1REM19WQUxJRDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXM9VkFMSUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmKG1hcHBlZFNldC5jb250YWlucyhjKSkgeworICAgICAgICAgICAgICAgIGNTdHJpbmcuc2V0VG8oYyk7CisgICAgICAgICAgICAgICAgbmZrY19jZi0+bm9ybWFsaXplKGNTdHJpbmcsIG1hcHBpbmcsIGVycm9yQ29kZSk7CisgICAgICAgICAgICAgICAgaWYoZGlzYWxsb3dlZFNURDNTZXQuY29udGFpbnNTb21lKG1hcHBpbmcpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVSslMDRsWCBtYXBwZWQgLT4gZGlzYWxsb3dlZF9TVEQzX21hcHBlZFxuIiwgKGxvbmcpYyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1ESVNBTExPV0VEX1NURDNfTUFQUEVEOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1NQVBQRUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiB1bmRldGVybWluZWQgc3RhdHVzIG9mIFUrJTA0bFhcbiIsIChsb25nKWMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUHJpbnQgYSBuZXcgbGluZSB3aGVyZSB0aGUgc3RhdHVzLCB0aGUgbWFwcGluZyBvcgorICAgICAgICAgICAgLy8gdGhlIGNoYXJhY3RlciBhZ2UgY2hhbmdlLgorICAgICAgICAgICAgZ2V0QWdlSWZBc3NpZ25lZChjLCBhZ2UpOworICAgICAgICAgICAgaWYoIHByZXZTdGFydDxjICYmCisgICAgICAgICAgICAgICAgKHN0YXR1cyE9cHJldlN0YXR1cyB8fCBtYXBwaW5nIT1wcmV2TWFwcGluZyB8fCAwIT1tZW1jbXAocHJldkFnZSwgYWdlLCA0KSkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHByaW50TGluZShwcmV2U3RhcnQsIGMtMSwgcHJldlN0YXR1cywgcHJldk1hcHBpbmcpOworICAgICAgICAgICAgICAgIHByZXZTdGFydD1jOworICAgICAgICAgICAgICAgIHByZXZTdGF0dXM9c3RhdHVzOworICAgICAgICAgICAgICAgIHByZXZNYXBwaW5nPW1hcHBpbmc7CisgICAgICAgICAgICAgICAgbWVtY3B5KHByZXZBZ2UsIGFnZSwgNCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2M7CisgICAgICAgIH0KKyAgICAgICAgLy8gYz09c3RhcnQgaXMgZGlzYWxsb3dlZAorICAgICAgICBpZihwcmV2U3RhcnQ8YykgeworICAgICAgICAgICAgcHJpbnRMaW5lKHByZXZTdGFydCwgYy0xLCBwcmV2U3RhdHVzLCBwcmV2TWFwcGluZyk7CisgICAgICAgIH0KKyAgICAgICAgcHJldlN0YXJ0PWM7CisgICAgICAgIHByZXZTdGF0dXM9RElTQUxMT1dFRDsKKyAgICAgICAgcHJldk1hcHBpbmcucmVtb3ZlKCk7CisgICAgICAgIGdldEFnZUlmQXNzaWduZWQoYywgcHJldkFnZSk7CisgICAgICAgIFVDaGFyMzIgZW5kPWl0ZXIuZ2V0Q29kZXBvaW50RW5kKCk7CisgICAgICAgIHdoaWxlKCsrYzw9ZW5kKSB7CisgICAgICAgICAgICBnZXRBZ2VJZkFzc2lnbmVkKGMsIGFnZSk7CisgICAgICAgICAgICBpZihwcmV2U3RhcnQ8YyAmJiAwIT1tZW1jbXAocHJldkFnZSwgYWdlLCA0KSkgeworICAgICAgICAgICAgICAgIHByaW50TGluZShwcmV2U3RhcnQsIGMtMSwgcHJldlN0YXR1cywgcHJldk1hcHBpbmcpOworICAgICAgICAgICAgICAgIHByZXZTdGFydD1jOworICAgICAgICAgICAgICAgIG1lbWNweShwcmV2QWdlLCBhZ2UsIDQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmKHByZXZTdGFydDxjKSB7CisgICAgICAgIHByaW50TGluZShwcmV2U3RhcnQsIGMtMSwgcHJldlN0YXR1cywgcHJldk1hcHBpbmcpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3VuaWNvZGUvYy9nZW51dHM0Ni9nZW51dHM0Ni5zbG4gYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGExMzAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYuc2xuCkBAIC0wLDAgKzEsMjAgQEAKK++7vworTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTAuMDAKKyMgVmlzdWFsIEMrKyBFeHByZXNzIDIwMDgKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ2VudXRzNDYiLCAiZ2VudXRzNDYudmNwcm9qIiwgInsyMEY5RjFCMS1FMzYyLTRBNEQtODRCQS01NDg1NTc3NDVDRDl9IgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMgorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorCQl7MjBGOUYxQjEtRTM2Mi00QTRELTg0QkEtNTQ4NTU3NzQ1Q0Q5fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7MjBGOUYxQjEtRTM2Mi00QTRELTg0QkEtNTQ4NTU3NzQ1Q0Q5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezIwRjlGMUIxLUUzNjItNEE0RC04NEJBLTU0ODU1Nzc0NUNEOX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXsyMEY5RjFCMS1FMzYyLTRBNEQtODRCQS01NDg1NTc3NDVDRDl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS91bmljb2RlL2MvZ2VudXRzNDYvZ2VudXRzNDYudmNwcm9qIGIvdW5pY29kZS9jL2dlbnV0czQ2L2dlbnV0czQ2LnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTRmODQzCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9jL2dlbnV0czQ2L2dlbnV0czQ2LnZjcHJvagpAQCAtMCwwICsxLDE4MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjkuMDAiCisJTmFtZT0iZ2VudXRzNDYiCisJUHJvamVjdEdVSUQ9InsyMEY5RjFCMS1FMzYyLTRBNEQtODRCQS01NDg1NTc3NDVDRDl9IgorCVJvb3ROYW1lc3BhY2U9ImdlbnV0czQ2IgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcaW5jbHVkZSwgLi5cLi5cLi5cLi5cLi5caWN1XHRydW5rXHNvdXJjZVxjb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlVfVVNJTkdfSUNVX05BTUVTUEFDRT0wIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJpY3V1Y2QubGliIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcbGliIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjEiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXC4uXC4uXGljdVx0cnVua1xpbmNsdWRlLCAuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcc291cmNlXGNvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iVV9VU0lOR19JQ1VfTkFNRVNQQUNFPTAiCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iaWN1dWMubGliIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIuLlwuLlwuLlwuLlwuLlxpY3VcdHJ1bmtcbGliIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VudXRzNDYuY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1naXQgYS91bmljb2RlL2MvcmVhZG1lLnR4dCBiL3VuaWNvZGUvYy9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWEzMDIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlL2MvcmVhZG1lLnR4dApAQCAtMCwwICsxLDMxIEBACisjIENvcHlyaWdodCAoQykgMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgY3JlYXRlZCBvbjogMjAxMGp1bjA0CisjIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisKK1RoZXNlIHRvb2xzIHBhcnNlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGZpbGVzIGFuZCBnZW5lcmF0ZQorZGF0YSBmaWxlcyAodGV4dCwgc291cmNlIGNvZGUgYW5kIGJpbmFyeSkgZm9yIHVzZSBpbiBJQ1UuCitUaGV5IGFyZSB1c2VkIGR1cmluZyB0aGUgVW5pY29kZSBiZXRhIHBlcmlvZCBhbmQgYWZ0ZXIgYSBVbmljb2RlIHJlbGVhc2UuCisKK0ZvciBhIGxvZyBvZiBhY3Rpb25zIGFuZCBjaGFuZ2VzIGZvciByZWNlbnQgVW5pY29kZSB2ZXJzaW9uIHVwZ3JhZGVzIG9mIElDVSwgc2VlCitodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy9icm93c2VyL2ljdS90cnVuay9zb3VyY2UvZGF0YS91bmlkYXRhL2NoYW5nZXMudHh0CisKK1NpbmNlIHRoZSBVbmljb2RlIDUuMiB1cGdyYWRlLCB0aGVzZSB0b29scyBoYXZlIGJlZW4gbW92ZWQgb3V0IG9mIHRoZSBJQ1Ugc291cmNlCit0cmVlIHRvIGhlcmUuIFRoZXkgaGF2ZSBub3QgYmVlbiBmdWxseSB0ZXN0ZWQgYW5kIHByb2JhYmx5IG5lZWQgc29tZSBtb3JlIHdvcmsKK2FuZCBzZXR1cC4gVGhleSBtaWdodCBiZW5lZml0IGZyb20gYWRkaXRpb25hbCBzaGVsbCBvciBQeXRob24gc2NyaXB0cy4KKworVGhlcmUgYXJlIGF1dG9jb25mIG1ha2VmaWxlcyAoTWFrZWZpbGUuaW4pIGFuZCBWaXN1YWwgQysrIHByb2plY3QgZmlsZXMgKC52Y3Byb2opCitpbiB0aGUgc3ViZm9sZGVycy4gVGhleSBhcmUgY29waWVkIG92ZXIgZnJvbSB0aGUgSUNVIHNvdXJjZSB0cmVlIGFuZCB3aWxsIG5vdAord29yayB3aXRob3V0IG1vZGlmaWNhdGlvbnMuIEhvd2V2ZXIsIEkgc3RhcnRlZCB0byB1c2UgQ01ha2UgKENNYWtlTGlzdHMudHh0KQord2hpY2ggaXMgbXVjaCBzaW1wbGVyLCBhbmQgaWYgaXQgd29ya3Mgd2VsbCBlbm91Z2ggdGhlbiBJIHBsYW4gdG8ganVzdAorZGVsZXRlIHRoZSBvbGQgbWFrZWZpbGVzIGFuZCBwcm9qZWN0IGZpbGVzLiBUaGUgQ01ha2UgZmlsZXMgc2hvdWxkCit3b3JrIG9uIExpbnV4IGFuZCBNYWNPUyBYLgorSSBzaG91bGQgdXNlIG1vcmUgdmFyaWFibGVzIHRvIG1ha2UgdGhlIENNYWtlIGZpbGVzIG1vcmUgcG9ydGFibGUsIGFuZCBzaG91bGQKK3VzZSBJQ1UncyBpbnN0YWxsZWQgaWN1LWNvbmZpZyBvciBNYWtlZmlsZS5pbmMgdG8gZ2V0IHRoZSB2YWx1ZXMgZm9yIHRoZXNlCit2YXJpYWJsZXMuCisoSWYgYW5kIHdoZW4gSUNVIGl0c2VsZiB1c2VzIENNYWtlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBwb2ludCB0byBpdHMgbW9kdWxlcy4pCisKK1RoaW5ncyB3aWxsIGltcHJvdmUgYXMgSSB3b3JrIG9uIFVuaWNvZGUgNi4uLgorCittYXJrdXMKZGlmZiAtLWdpdCBhL3VuaWNvZGUvcHkvcGFyc2VzY3JpcHRtZXRhZGF0YS5weSBiL3VuaWNvZGUvcHkvcGFyc2VzY3JpcHRtZXRhZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjgyM2JhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9weS9wYXJzZXNjcmlwdG1ldGFkYXRhLnB5CkBAIC0wLDAgKzEsODAgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBDb3B5cmlnaHQgKGMpIDIwMTMgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBwYXJzZXNjcmlwdG1ldGFkYXRhLnB5CisjCisjIDIwMTNmZWIxNSBNYXJrdXMgVy4gU2NoZXJlcgorIworIyAuL3BhcnNlc2NyaXB0bWV0YWRhdGEucHkKKyMgICB+L3N2bi5pY3UvdHJ1bmsvc3JjL3NvdXJjZS9jb21tb24vdW5pY29kZS91c2NyaXB0LmgKKyMgICB+L3N2bi5jbGRyL3RydW5rL2NvbW1vbi9wcm9wZXJ0aWVzL3NjcmlwdE1ldGFkYXRhLnR4dAorCisiIiJQYXJzZXMgSUNVNEMgdXNjcmlwdC5oICYgQ0xEUiBzY3JpcHRNZXRhZGF0YS50eHQsCithbmQgd3JpdGVzIElDVSBzY3JpcHQgZGF0YSBpbml0aWFsaXplcnMuIiIiCisKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitkZWYgbWFpbigpOgorICBpZiBsZW4oc3lzLmFyZ3YpIDwgMzoKKyAgICBwcmludCAoIlVzYWdlOiB7fSAgcGF0aC90by9JQ1U0Qy91c2NyaXB0LmggICIKKyAgICAgICAgICAgInBhdGgvdG8vQ0xEUi9zY3JpcHRNZXRhZGF0YS50eHQiLmZvcm1hdChzeXMuYXJndlswXSkpCisgICAgcmV0dXJuCisgICh1c2NyaXB0X3BhdGgsIHNtZF9wYXRoKSA9IHN5cy5hcmd2WzE6M10KKworICBpc29fdG9faWN1ID0ge30KKyAgbWF4X2ljdV9udW0gPSAwCisKKyAgIyBQYXJzZSBsaW5lcyBsaWtlCisgICMgICBVU0NSSVBUX0FSQUJJQyAgICAgICA9ICAyLCAgLyogQXJhYiAqLworICAjIGFuZCBleHRyYWN0IHRoZSBJQ1UgbnVtZXJpYyBzY3JpcHQgY29kZSBhbmQgdGhlIElTTyBzY3JpcHQgY29kZS4KKyAgc2NyaXB0X251bV9yZSA9IHJlLmNvbXBpbGUociIgKj0gKihbMC05XSspLCAqL1wqICooW0EtWl1bYS16XXszfSkgKlwqLyIpCisgIHdpdGggb3Blbih1c2NyaXB0X3BhdGgsICJyIikgYXMgdXNjcmlwdF9maWxlOgorICAgIGZvciBsaW5lIGluIHVzY3JpcHRfZmlsZToKKyAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIik6IGNvbnRpbnVlICAjIHdob2xlLWxpbmUgY29tbWVudAorICAgICAgbWF0Y2ggPSBzY3JpcHRfbnVtX3JlLnNlYXJjaChsaW5lKQorICAgICAgaWYgbWF0Y2g6CisgICAgICAgIGljdV9udW0gPSBpbnQobWF0Y2guZ3JvdXAoMSkpCisgICAgICAgIGlzb190b19pY3VbbWF0Y2guZ3JvdXAoMildID0gaWN1X251bQorICAgICAgICBpZiBpY3VfbnVtID4gbWF4X2ljdV9udW06IG1heF9pY3VfbnVtID0gaWN1X251bQorCisgIGljdV9kYXRhID0gW05vbmVdICogKG1heF9pY3VfbnVtICsgMSkKKworICAjIFBhcnNlIGxpbmVzIGxpa2UKKyAgIyAgIEFyYWI7IDg7IDA2Mjg7IFNBOyAxOyBSRUNPTU1FTkRFRDsgWUVTOyBOTzsgWUVTOyBOTzsgTk8KKyAgIyBhbmQgcHV0IHRoZSBkYXRhIChhcyBzdHJpbmdzKSBpbnRvIHRoZSBpY3VfZGF0YSBsaXN0LgorICB3aXRoIG9wZW4oc21kX3BhdGgsICJyIikgYXMgc21kX2ZpbGU6CisgICAgZm9yIGxpbmUgaW4gc21kX2ZpbGU6CisgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyIpOiBjb250aW51ZSAgIyB3aG9sZS1saW5lIGNvbW1lbnQKKworICAgICAgZmllbGRzID0gbGluZS5zcGxpdCgiOyIpCisgICAgICBpZiBub3QgZmllbGRzIG9yIGxlbihmaWVsZHMpIDwgMTE6IGNvbnRpbnVlCisgICAgICBpc29fY29kZSA9IGZpZWxkc1swXS5zdHJpcCgpCisgICAgICBpY3VfbnVtID0gaXNvX3RvX2ljdVtpc29fY29kZV0KKyAgICAgIGljdV9kYXRhW2ljdV9udW1dID0gKGlzb19jb2RlLAorICAgICAgICAgICMgc2FtcGxlLCB1c2FnZQorICAgICAgICAgIGZpZWxkc1syXS5zdHJpcCgpLCBmaWVsZHNbNV0uc3RyaXAoKSwKKyAgICAgICAgICAjIFJUTCwgTEIsIGNhc2VkCisgICAgICAgICAgZmllbGRzWzZdLnN0cmlwKCksIGZpZWxkc1s3XS5zdHJpcCgpLCBmaWVsZHNbMTBdLnN0cmlwKCkpCisKKyAgIyBQcmludCBJQ1UgYXJyYXkgaW5pdGlhbGl6ZXJzIHdpdGggdGhlIHJlbGV2YW50IGRhdGEuCisgIGZvciB0IGluIGljdV9kYXRhOgorICAgIGlmIHQ6CisgICAgICAoaXNvX2NvZGUsIHNhbXBsZSwgdXNhZ2UsIHJ0bCwgbGIsIGNhc2VkKSA9IHQKKyAgICAgIHMgPSAiMHgiICsgc2FtcGxlICsgIiB8ICIgKyB1c2FnZQorICAgICAgaWYgcnRsID09ICJZRVMiOiBzICs9ICIgfCBSVEwiCisgICAgICBpZiBsYiA9PSAiWUVTIjogcyArPSAiIHwgTEJfTEVUVEVSUyIKKyAgICAgIGlmIGNhc2VkID09ICJZRVMiOiBzICs9ICIgfCBDQVNFRCIKKyAgICAgIHByaW50ICIgICAgIiArIHMgKyAiLCAgLy8gIiArIGlzb19jb2RlCisgICAgZWxzZToKKyAgICAgIHByaW50ICIgICAgMCwiCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgbWFpbigpCmRpZmYgLS1naXQgYS91bmljb2RlL3B5L3ByZXBhcnNldWNkLnB5IGIvdW5pY29kZS9weS9wcmVwYXJzZXVjZC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOGM1NmExCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZS9weS9wcmVwYXJzZXVjZC5weQpAQCAtMCwwICsxLDIwNzYgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMi42CisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjICAgZmlsZSBuYW1lOiAgcHJlcGFyc2V1Y2QucHkKKyMgICBlbmNvZGluZzogICBVUy1BU0NJSQorIyAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorIyAgIGluZGVudGF0aW9uOjQKKyMKKyMgICBjcmVhdGVkIG9uOiAyMDExbm92MDMgKGZvcmtlZCBmcm9tIHVjZGNvcHkucHkpCisjICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyMKKyMgQ29waWVzIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIChVQ0QpIGZpbGVzIGZyb20gYSB0cmVlCisjIG9mIGZpbGVzIGRvd25sb2FkZWQgZnJvbSAoZm9yIGV4YW1wbGUpIGZ0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvCisjIHRvIElDVSdzIHNvdXJjZS9kYXRhL3VuaWRhdGEvIGFuZCBzb3VyY2UvdGVzdC90ZXN0ZGF0YS8KKyMgYW5kIG1vZGlmaWVzIHNvbWUgb2YgdGhlIGZpbGVzIHRvIG1ha2UgdGhlbSBtb3JlIGNvbXBhY3QuCisjIFBhcnNlcyB0aGVtIGFuZCB3cml0ZXMgdW5pZGF0YS9wcHVjZC50eHQgKFByZVBhcnNlZCBVQ0QpIHdpdGggc2ltcGxlIHN5bnRheC4KKyMKKyMgSW52b2tlIHdpdGggdGhyZWUgY29tbWFuZC1saW5lIHBhcmFtZXRlcnM6CisjIDEuIHNvdXJjZSBmb2xkZXIgd2l0aCBVQ0QgJiBpZG5hIGZpbGVzCisjIDIuIElDVSBzb3VyY2Ugcm9vdCBmb2xkZXIKKyMgMy4gSUNVIHRvb2xzIHJvb3QgZm9sZGVyCisjCisjIFNhbXBsZSBpbnZvY2F0aW9uOgorIyAgIH4vc3ZuLmljdS90b29scy90cnVuay9zcmMvdW5pY29kZSQgcHkvcHJlcGFyc2V1Y2QucHkgfi91bmk2MS8yMDEyMDExOCB+L3N2bi5pY3UvdHJ1bmsvc3JjIH4vc3ZuLmljdS90b29scy90cnVuay9zcmMKKworaW1wb3J0IGFycmF5CitpbXBvcnQgYmlzZWN0CitpbXBvcnQgY29kZWNzCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworCisjIFVuaWNvZGUgdmVyc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfdWNkX3ZlcnNpb24gPSAiPyIKK19jb3B5cmlnaHQgPSAiIgorX3Rlcm1zX29mX3VzZSA9ICIiCisKKyMgSVNPIDE1OTI0IHNjcmlwdCBjb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisKKyMgU2NyaXB0IGNvZGVzIGZyb20gSVNPIDE1OTI0IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvaXNvMTU5MjQvY29kZWNoYW5nZXMuaHRtbAorIyB0aGF0IGFyZSBub3QgeWV0IGluIHRoZSBVQ0QuCitfc2NyaXB0c19vbmx5X2luX2lzbzE1OTI0ID0gKAorICAgICJCbGlzIiwgIkNpcnQiLCAiQ3lycyIsCisgICAgIkVneWQiLCAiRWd5aCIsICJHZW9rIiwKKyAgICAiSGFucyIsICJIYW50IiwgIkhtbmciLCAiSHVuZyIsCisgICAgIkluZHMiLCAiSnBhbiIsICJMYXRmIiwgIkxhdGciLCAiTGluYSIsCisgICAgIk1heWEiLCAiTW9vbiIsICJQZXJtIiwgIlJvcm8iLAorICAgICJTYXJhIiwgIlNnbnciLCAiU3lyZSIsICJTeXJqIiwgIlN5cm4iLAorICAgICJUZW5nIiwgIlZpc3AiLCAiWnh4eCIsCisKKyAgICAiS29yZSIsICJNYW5pIiwgIlBobHAiLCAiUGhsdiIsICJabXRoIiwgIlpzeW0iLAorCisgICAgIk5rZ2IiLAorCisgICAgIkJhc3MiLCAiRHVwbCIsICJFbGJhIiwgIkdyYW4iLAorICAgICJLcGVsIiwgIkxvbWEiLCAiTWVuZCIsICJOYXJiIiwgIk5iYXQiLAorICAgICJQYWxtIiwgIlNpbmQiLCAiV2FyYSIsCisKKyAgICAiQWZhayIsICJKdXJjIiwgIk1yb28iLCAiTnNodSIsICJUYW5nIiwgIldvbGUiLAorCisgICAgIkhsdXciLCAiS2hvaiIsICJUaXJoIgorKQorCisjIFByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfaWdub3JlZF9wcm9wZXJ0aWVzID0gc2V0KCgKKyAgIyBPdGhlcl9YeXogb25seSBjb250cmlidXRlIHRvIFh5eiwgc3RvcmUgb25seSB0aGUgbGF0dGVyLgorICAiT0FscGhhIiwKKyAgIk9ESSIsCisgICJPR3JfRXh0IiwKKyAgIk9JREMiLAorICAiT0lEUyIsCisgICJPTG93ZXIiLAorICAiT01hdGgiLAorICAiT1VwcGVyIiwKKyAgIyBGdXJ0aGVyIHByb3BlcnRpZXMgdGhhdCBqdXN0IGNvbnRyaWJ1dGUgdG8gb3RoZXJzLgorICAiQ0UiLCAgIyBDb21wb3NpdGlvbl9FeGNsdXNpb24ganVzdCBjb250cmlidXRlcyB0byBGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbi4KKyAgIkpTTiIsCisgICMgVGhlc2UgcHJvcGVydGllcyBqdXN0IGRvbid0IHNlZW0gdXNlZnVsLgorICAjIFRoZXkgYXJlIGRlcHJlY2F0ZWQgc2luY2UgVW5pY29kZSA2LjAuCisgICJYT19ORkMiLAorICAiWE9fTkZEIiwKKyAgIlhPX05GS0MiLAorICAiWE9fTkZLRCIsCisgICMgSUNVIGRvZXMgbm90IHVzZSBVbmloYW4gcHJvcGVydGllcy4KKyAgImNqa0FjY291bnRpbmdOdW1lcmljIiwKKyAgImNqa090aGVyTnVtZXJpYyIsCisgICJjamtQcmltYXJ5TnVtZXJpYyIsCisgICJjamtDb21wYXRpYmlsaXR5VmFyaWFudCIsCisgICJjamtJSUNvcmUiLAorICAiY2prSVJHX0dTb3VyY2UiLAorICAiY2prSVJHX0hTb3VyY2UiLAorICAiY2prSVJHX0pTb3VyY2UiLAorICAiY2prSVJHX0tQU291cmNlIiwKKyAgImNqa0lSR19LU291cmNlIiwKKyAgImNqa0lSR19NU291cmNlIiwKKyAgImNqa0lSR19UU291cmNlIiwKKyAgImNqa0lSR19VU291cmNlIiwKKyAgImNqa0lSR19WU291cmNlIiwKKyAgImNqa1JTVW5pY29kZSIKKykpCisKKyMgRGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzLgorIyBLZXllZCBieSBub3JtYWxpemVkIHByb3BlcnR5IG5hbWVzIGFuZCBhbGlhc2VzLgorIyBFYWNoIHZhbHVlIGlzIGEgdHVwbGUgd2l0aAorIyAwOiBUeXBlIG9mIHByb3BlcnR5IChiaW5hcnksIGVudW0sIC4uLikKKyMgMTogTGlzdCBvZiBhbGlhc2VzOyBzaG9ydCAmIGxvbmcgbmFtZSBmb2xsb3dlZCBieSBvdGhlciBhbGlhc2VzLgorIyAgICBUaGUgc2hvcnQgbmFtZSBpcyAiIiBpZiBpdCBpcyBsaXN0ZWQgYXMgIm4vYSIgaW4gUHJvcGVydHlWYWx1ZUFsaWFzZXMudHh0LgorIyAyOiBTZXQgb2Ygc2hvcnQgcHJvcGVydHkgdmFsdWUgbmFtZXMuCisjIDM6IERpY3Rpb25hcnkgb2YgcHJvcGVydHkgdmFsdWVzLgorIyAgICBGb3IgQ2F0YWxvZyAmIEVudW1lcmF0ZWQgcHJvcGVydGllcywKKyMgICAgbWFwcyBlYWNoIHZhbHVlIG5hbWUgdG8gYSBsaXN0IG9mIGFsaWFzZXMuCisjICAgIEVtcHR5IGZvciBvdGhlciB0eXBlcyBvZiBwcm9wZXJ0aWVzLgorX3Byb3BlcnRpZXMgPSB7fQorCisjIERpY3Rpb25hcnkgb2YgYmluYXJ5LXByb3BlcnR5IHZhbHVlcyB3aGljaCB3ZSBzdG9yZSBhcyBGYWxzZS9UcnVlLgorIyBTYW1lIGFzIHRoZSB2YWx1ZXMgZGljdGlvbmFyeSBvZiBvbmUgb2YgdGhlIGJpbmFyeSBwcm9wZXJ0aWVzLgorX2JpbmFyeV92YWx1ZXMgPSB7fQorCisjIERpY3Rpb25hcnkgb2YgbnVsbCB2YWx1ZXMuCisjIEtleWVkIGJ5IHNob3J0IHByb3BlcnR5IG5hbWVzLgorIyBUaGVzZSBhcmUgdHlwZS1zcGVjaWZpYyB2YWx1ZXMgZm9yIHByb3BlcnRpZXMgdGhhdCBvY2N1ciBpbiB0aGUgZGF0YS4KKyMgVGhleSBhcmUgb3ZlcnJpZGRlbiBieSBfZGVmYXVsdHMsIGJsb2NrIGFuZCBjb2RlIHBvaW50IHByb3BlcnRpZXMuCitfbnVsbF92YWx1ZXMgPSB7fQorCisjIFByb3BlcnR5IHZhbHVlIG5hbWVzIGZvciBudWxsIHZhbHVlcy4KKyMgV2UgZG8gbm90IHN0b3JlIHRoZXNlIGluIF9kZWZhdWx0cy4KK19udWxsX25hbWVzID0gZnJvemVuc2V0KCgiPG5vbmU+IiwgIk5hTiIpKQorCisjIERpY3Rpb25hcnkgb2YgZXhwbGljaXQgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMuCisjIEtleWVkIGJ5IHNob3J0IHByb3BlcnR5IG5hbWVzLgorX2RlZmF1bHRzID0ge30KKworIyBfbnVsbF92YWx1ZXMgb3ZlcnJpZGRlbiBieSBleHBsaWNpdCBfZGVmYXVsdHMuCisjIEluaXRpYWxpemVkIGFmdGVyIHBhcnNpbmcgaXMgZG9uZS4KK19udWxsX29yX2RlZmF1bHRzID0ge30KKworIyBMaXN0IG9mIHByb3BlcnRpZXMgd2l0aCBhbiBJQ1UgVVByb3BlcnR5IGVudW0uCisjIEVhY2ggaXRlbSBpcyBhbiAoZW51bSwgcG5hbWUsIHZhbHVlcykgdHVwbGUuCisjIC0gZW51bTogdGhlIElDVSBlbnVtIFVQcm9wZXJ0eSBjb25zdGFudCBzdHJpbmcKKyMgLSBwbmFtZTogdGhlIFVDRCBzaG9ydCBwcm9wZXJ0eSBuYW1lCisjIC0gdmFsdWVzOiBsaXN0IG9mIChlbnVtLCB2bmFtZSkgcGFpcnMgcGVyIHByb3BlcnR5IHZhbHVlCisjICAgLSBlbnVtOiB0aGUgSUNVIHByb3BlcnR5IHZhbHVlJ3MgZW51bSBjb25zdGFudCBzdHJpbmcKKyMgICAtIHZuYW1lOiB0aGUgVUNEIHNob3J0IHByb3BlcnR5IHZhbHVlIG5hbWUKK19pY3VfcHJvcGVydGllcyA9IFtdCisKKyMgRGljdGlvbmFyeSBvZiBzaG9ydCBwcm9wZXJ0eSBuYW1lcyBtYXBwZWQgdG8gX2ljdV9wcm9wZXJ0aWVzIGl0ZW1zLgorX3BuYW1lX3RvX2ljdV9wcm9wID0ge30KKworX25vbl9hbG51bV9yZSA9IHJlLmNvbXBpbGUoIlteYS16QS1aMC05XSIpCisKK2RlZiBOb3JtUHJvcE5hbWUocG5hbWUpOgorICAiIiJSZXR1cm5zIGEgbm9ybWFsaXplZCBmb3JtIG9mIHBuYW1lLgorICBSZW1vdmVzIG5vbi1BU0NJSS1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlcyBsZXR0ZXJzLiIiIgorICByZXR1cm4gX25vbl9hbG51bV9yZS5zdWIoIiIsIHBuYW1lKS5sb3dlcigpCisKKworZGVmIEdldFByb3BlcnR5KHBuYW1lKToKKyAgIiIiUmV0dXJucyB0aGUgX3Byb3BlcnRpZXMgdmFsdWUgZm9yIHRoZSBwbmFtZS4KKyAgUmV0dXJucyBudWxsIGlmIHRoZSBwcm9wZXJ0eSBpcyBpZ25vcmVkLgorICBDYWNoZXMgYWx0ZXJuYXRlIHNwZWxsaW5ncyBvZiB0aGUgcHJvcGVydHkgbmFtZS4iIiIKKyAgIyBUcnkgdGhlIGlucHV0IG5hbWUuCisgIHByb3AgPSBfcHJvcGVydGllcy5nZXQocG5hbWUpCisgIGlmIHByb3AgIT0gTm9uZTogcmV0dXJuIHByb3AKKyAgaWYgcG5hbWUgaW4gX2lnbm9yZWRfcHJvcGVydGllczogcmV0dXJuIE5vbmUKKyAgIyBUcnkgdGhlIG5vcm1hbGl6ZWQgaW5wdXQgbmFtZS4KKyAgbm9ybV9uYW1lID0gTm9ybVByb3BOYW1lKHBuYW1lKQorICBwcm9wID0gX3Byb3BlcnRpZXMuZ2V0KG5vcm1fbmFtZSkKKyAgaWYgcHJvcCAhPSBOb25lOgorICAgIF9wcm9wZXJ0aWVzW3BuYW1lXSA9IHByb3AgICMgQ2FjaGUgcHJvcCB1bmRlciB0aGlzIG5ldyBuYW1lIHNwZWxsaW5nLgorICAgIHJldHVybiBwcm9wCisgIGVsaWYgcG5hbWUgaW4gX2lnbm9yZWRfcHJvcGVydGllczoKKyAgICBfaWdub3JlZF9wcm9wZXJ0aWVzLmFkZChwbmFtZSkgICMgUmVtZW1iZXIgdG8gaWdub3JlIHRoaXMgbmV3IG5hbWUgc3BlbGxpbmcuCisgICAgcmV0dXJuIE5vbmUKKyAgZWxzZToKKyAgICByYWlzZSBOYW1lRXJyb3IoInVua25vd24gcHJvcGVydHkgJXNcbiIgJSBwbmFtZSkKKworCitkZWYgR2V0U2hvcnRQcm9wZXJ0eU5hbWUocG5hbWUpOgorICBpZiBwbmFtZSBpbiBfbnVsbF92YWx1ZXM6IHJldHVybiBwbmFtZSAgIyBwbmFtZSBpcyBhbHJlYWR5IHRoZSBzaG9ydCBuYW1lLgorICBwcm9wID0gR2V0UHJvcGVydHkocG5hbWUpCisgIGlmIG5vdCBwcm9wOiByZXR1cm4gIiIgICMgRm9yIGlnbm9yZWQgcHJvcGVydGllcy4KKyAgcmV0dXJuIHByb3BbMV1bMF0gb3IgcHJvcFsxXVsxXSAgIyBMb25nIG5hbWUgaWYgbm8gc2hvcnQgbmFtZS4KKworCitkZWYgR2V0U2hvcnRQcm9wZXJ0eVZhbHVlTmFtZShwcm9wLCB2bmFtZSk6CisgIGlmIHZuYW1lIGluIHByb3BbMl06IHJldHVybiB2bmFtZQorICB2YWx1ZXMgPSBwcm9wWzNdCisgIGFsaWFzZXMgPSB2YWx1ZXMuZ2V0KHZuYW1lKQorICBpZiBhbGlhc2VzID09IE5vbmU6CisgICAgbm9ybV9uYW1lID0gTm9ybVByb3BOYW1lKHZuYW1lKQorICAgIGFsaWFzZXMgPSB2YWx1ZXMuZ2V0KG5vcm1fbmFtZSkKKyAgICBpZiBhbGlhc2VzID09IE5vbmU6CisgICAgICByYWlzZSBOYW1lRXJyb3IoInVua25vd24gdmFsdWUgbmFtZSAlcyBmb3IgcHJvcGVydHkgJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICh2bmFtZSwgcHJvcFsxXVswXSkpCisgICAgdmFsdWVzW3ZuYW1lXSA9IGFsaWFzZXMKKyAgcmV0dXJuIGFsaWFzZXNbMF0gb3IgYWxpYXNlc1sxXSAgIyBMb25nIG5hbWUgaWYgbm8gc2hvcnQgbmFtZS4KKworCitkZWYgTm9ybWFsaXplUHJvcGVydHlWYWx1ZShwcm9wLCB2bmFtZSk6CisgIGlmIHByb3BbMl06ICAjIEJpbmFyeS9DYXRhbG9nL0VudW1lcmF0ZWQgcHJvcGVydHkuCisgICAgdmFsdWUgPSBHZXRTaG9ydFByb3BlcnR5VmFsdWVOYW1lKHByb3AsIHZuYW1lKQorICAgIGlmIHByb3BbMF0gPT0gIkJpbmFyeSI6CisgICAgICB2YWx1ZSA9IHZhbHVlID09ICJZIgorICAgIGlmIHByb3BbMV1bMF0uZW5kc3dpdGgoImNjYyIpOgorICAgICAgdmFsdWUgPSBpbnQodmFsdWUpCisgIGVsc2U6CisgICAgdmFsdWUgPSB2bmFtZQorICByZXR1cm4gdmFsdWUKKworIyBDaGFyYWN0ZXIgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworIyBMaXN0cyBvZiBOYW1lc0xpc3QgaDEgYW5kIGgyIGhlYWRpbmdzLgorIyBFYWNoIGgxIHZhbHVlIGlzIGEgKHN0YXJ0LCBlbmQsIGNvbW1lbnQpIHR1cGxlLgorIyBFYWNoIGgyIHZhbHVlIGlzIGEgKGNwLCBjb21tZW50KSB0dXBsZS4KK19oMSA9IFtdCitfaDIgPSBbXQorCisjIExpc3Qgb2YgVW5pY29kZSBibG9ja3MuCisjIEVhY2ggaXRlbSBpcyBhIHR1cGxlIG9mIHN0YXJ0ICYgZW5kIGNvZGUgcG9pbnQgaW50ZWdlcnMKKyMgYW5kIGEgZGljdGlvbmFyeSBvZiBkZWZhdWx0IHByb3BlcnR5IHZhbHVlcy4KK19ibG9ja3MgPSBbXQorCisjIExpc3Qgb2YgcmFuZ2VzIHdpdGggYWxnb3JpdGhtaWMgbmFtZXMuCisjIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIFtzdGFydCwgZW5kLCB0eXBlLCBwcmVmaXhdCisjIHdoZXJlIHByZWZpeCBpcyBvcHRpb25hbC4KK19hbGdfbmFtZXNfcmFuZ2VzID0gW10KKworIyBMaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVyIHJhbmdlcyBhbmQgdGhlaXIgcHJvcGVydGllcywKKyMgc3RvcmVkIGFzIGFuIGludmVyc2lvbiBtYXAgd2l0aCByYW5nZV9zdGFydCAmIHByb3BzIGRpY3Rpb25hcnkuCisjIFN0YXJ0cyB3aXRoIG9uZSByYW5nZSBmb3IgYWxsIG9mIFVuaWNvZGUgd2l0aG91dCBhbnkgcHJvcGVydGllcy4KKyMgU2V0dGluZyB2YWx1ZXMgc3ViZGl2aWRlcyByYW5nZXMuCitfc3RhcnRzID0gYXJyYXkuYXJyYXkoJ2wnLCBbMCwgMHgxMTAwMDBdKSAgIyBhcnJheSBvZiBpbnQzMl90CitfcHJvcHMgPSBbe30sIHt9XSAgIyBwcm9wcyBmb3IgMCBhbmQgMTEwMDAwCisKK2RlZiBGaW5kUmFuZ2UoeCk6CisgICIiIiBCaW5hcnkgc2VhcmNoIGZvciB4IGluIHRoZSBpbnZlcnNpb24gbWFwLgorICBSZXR1cm5zIHRoZSBzbWFsbGVzdCBpIHdoZXJlIHggPCBfc3RhcnRzW2ldIiIiCisgIHJldHVybiBiaXNlY3QuYmlzZWN0KF9zdGFydHMsIHgpIC0gMQorCisKK2RlZiBHZXRQcm9wcyhjKToKKyAgaSA9IEZpbmRSYW5nZShjKQorICByZXR1cm4gX3Byb3BzW2ldCisKKworZGVmIFVwZGF0ZVByb3BzKHN0YXJ0LCBlbmQsIHVwZGF0ZSk6CisgIGFzc2VydCAwIDw9IHN0YXJ0IDw9IGVuZCA8PSAweDEwZmZmZgorICAobmVlZF90b191cGRhdGUsIGRvX3VwZGF0ZSwgdSkgPSAodXBkYXRlWzBdLCB1cGRhdGVbMV0sIHVwZGF0ZVsyXSkKKyAgIyBGaW5kIHRoZSBpbmRleCBpIG9mIHRoZSByYW5nZSBpbiBfc3RhcnRzIHRoYXQgY29udGFpbnMgc3RhcnQuCisgIGkgPSBGaW5kUmFuZ2Uoc3RhcnQpCisgIGxpbWl0ID0gZW5kICsgMQorICAjIEludGVyc2VjdCBbc3RhcnQsIGxpbWl0WyB3aXRoIHJhbmdlcyBpbiBfc3RhcnRzLgorICBjX3N0YXJ0ID0gX3N0YXJ0c1tpXQorICBjX2xpbWl0ID0gX3N0YXJ0c1tpICsgMV0KKyAgY19wcm9wcyA9IF9wcm9wc1tpXQorICAjIGNfc3RhcnQgPD0gc3RhcnQgPCBjX2xpbWl0CisgIGlmIGNfc3RhcnQgPCBzdGFydDoKKyAgICB1cGRhdGVfbGltaXQgPSBjX2xpbWl0IGlmIGNfbGltaXQgPD0gbGltaXQgZWxzZSBsaW1pdAorICAgIGlmIG5lZWRfdG9fdXBkYXRlKHUsIHN0YXJ0LCB1cGRhdGVfbGltaXQgLSAxLCBjX3Byb3BzKToKKyAgICAgICMgU3BsaXQgb2ZmIFtjX3N0YXJ0LCBzdGFydFsgd2l0aCBhIGNvcHkgb2YgY19wcm9wcy4KKyAgICAgIGkgKz0gMQorICAgICAgY19wcm9wcyA9IGNfcHJvcHMuY29weSgpCisgICAgICBfc3RhcnRzLmluc2VydChpLCBzdGFydCkKKyAgICAgIF9wcm9wcy5pbnNlcnQoaSwgY19wcm9wcykKKyAgICAgIGNfc3RhcnQgPSBzdGFydAorICAjIE1vZGlmeSBhbGwgcmFuZ2VzIHRoYXQgYXJlIGZ1bGx5IGluc2lkZSBbc3RhcnQsIGxpbWl0Wy4KKyAgd2hpbGUgY19saW1pdCA8PSBsaW1pdDoKKyAgICAjIHN0YXJ0IDw9IGNfc3RhcnQgPCBjX2xpbWl0IDw9IGxpbWl0CisgICAgaWYgbmVlZF90b191cGRhdGUodSwgY19zdGFydCwgY19saW1pdCAtIDEsIGNfcHJvcHMpOgorICAgICAgZG9fdXBkYXRlKHUsIGNfc3RhcnQsIGNfbGltaXQgLSAxLCBjX3Byb3BzKQorICAgIGlmIGNfbGltaXQgPT0gMHgxMTAwMDA6IHJldHVybgorICAgIGkgKz0gMQorICAgIGNfc3RhcnQgPSBjX2xpbWl0CisgICAgY19saW1pdCA9IF9zdGFydHNbaSArIDFdCisgICAgY19wcm9wcyA9IF9wcm9wc1tpXQorICBpZiBjX3N0YXJ0IDwgbGltaXQgYW5kIG5lZWRfdG9fdXBkYXRlKHUsIGNfc3RhcnQsIGxpbWl0IC0gMSwgY19wcm9wcyk6CisgICAgIyBTcGxpdCBvZmYgW2xpbWl0LCBjX2xpbWl0WyB3aXRoIGEgY29weSBvZiBjX3Byb3BzLgorICAgIF9zdGFydHMuaW5zZXJ0KGkgKyAxLCBsaW1pdCkKKyAgICBfcHJvcHMuaW5zZXJ0KGkgKyAxLCBjX3Byb3BzLmNvcHkoKSkKKyAgICAjIE1vZGlmeSBbY19zdGFydCwgbGltaXRbIGNfcHJvcHMuCisgICAgZG9fdXBkYXRlKHUsIGNfc3RhcnQsIGxpbWl0IC0gMSwgY19wcm9wcykKKworCitkZWYgTmVlZFRvU2V0UHJvcHMocHJvcHMsIHN0YXJ0LCBlbmQsIGNfcHJvcHMpOgorICAiIiJSZXR1cm5zIFRydWUgaWYgcHJvcHMgaXMgbm90IGEgc3ViLWRpY3Qgb2YgY19wcm9wcy4iIiIKKyAgZm9yIChwbmFtZSwgdmFsdWUpIGluIHByb3BzLml0ZXJpdGVtcygpOgorICAgIGlmIHBuYW1lIG5vdCBpbiBjX3Byb3BzIG9yIHZhbHVlICE9IGNfcHJvcHNbcG5hbWVdOiByZXR1cm4gVHJ1ZQorICByZXR1cm4gRmFsc2UKKworCitkZWYgRG9TZXRQcm9wcyhwcm9wcywgc3RhcnQsIGVuZCwgY19wcm9wcyk6CisgIGNfcHJvcHMudXBkYXRlKHByb3BzKQorCisKK2RlZiBTZXRQcm9wcyhzdGFydCwgZW5kLCBwcm9wcyk6CisgIFVwZGF0ZVByb3BzKHN0YXJ0LCBlbmQsIChOZWVkVG9TZXRQcm9wcywgRG9TZXRQcm9wcywgcHJvcHMpKQorCisKK2RlZiBOZWVkVG9TZXRBbHdheXMobnYsIHN0YXJ0LCBlbmQsIGNfcHJvcHMpOgorICByZXR1cm4gVHJ1ZQorCisKKyMgRm9yIHJlc3RvcmluZyBib3VuZGFyaWVzIGFmdGVyIG1lcmdpbmcgYWRqYWNlbnQgc2FtZS1wcm9wcyByYW5nZXMuCitkZWYgQWRkQm91bmRhcnkoeCk6CisgICIiIkVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgcmFuZ2Ugc3RhcnQvbGltaXQgYXQgeC4iIiIKKyAgYXNzZXJ0IDAgPD0geCA8PSAweDEwZmZmZgorICBpID0gRmluZFJhbmdlKHgpCisgIGlmIF9zdGFydHNbaV0gPT0geDogcmV0dXJuCisgICMgU3BsaXQgdGhlIHJhbmdlIGF0IHguCisgIGNfc3RhcnQgPSBfc3RhcnRzW2ldCisgIGNfbGltaXQgPSBfc3RhcnRzW2kgKyAxXQorICBjX3Byb3BzID0gX3Byb3BzW2ldCisgICMgY19zdGFydCA8IHggPCBjX2xpbWl0CisgIGkgKz0gMQorICBfc3RhcnRzLmluc2VydChpLCB4KQorICBfcHJvcHMuaW5zZXJ0KGksIGNfcHJvcHMuY29weSgpKQorCisKK2RlZiBTZXREZWZhdWx0VmFsdWUocG5hbWUsIHZhbHVlKToKKyAgIiIiU2V0cyB0aGUgcHJvcGVydHkncyBkZWZhdWx0IHZhbHVlLiBJZ25vcmVzIG51bGwgdmFsdWVzLiIiIgorICBwcm9wID0gR2V0UHJvcGVydHkocG5hbWUpCisgIGlmIHByb3AgYW5kIHZhbHVlIG5vdCBpbiBfbnVsbF9uYW1lczoKKyAgICB2YWx1ZSA9IE5vcm1hbGl6ZVByb3BlcnR5VmFsdWUocHJvcCwgdmFsdWUpCisgICAgaWYgdmFsdWUgIT0gX251bGxfdmFsdWVzW3Byb3BbMV1bMF1dOgorICAgICAgX2RlZmF1bHRzW3Byb3BbMV1bMF1dID0gdmFsdWUKKyAgICAgIFNldFByb3BzKDAsIDB4MTBmZmZmLCB7cHJvcFsxXVswXTogdmFsdWV9KQorCisKK2RlZiBTZXRCaW5hcnlQcm9wZXJ0eVRvVHJ1ZShwbmFtZSwgc3RhcnQsIGVuZCk6CisgIHByb3AgPSBHZXRQcm9wZXJ0eShwbmFtZSkKKyAgaWYgcHJvcDoKKyAgICBhc3NlcnQgcHJvcFswXSA9PSAiQmluYXJ5IgorICAgIFNldFByb3BzKHN0YXJ0LCBlbmQsIHtwcm9wWzFdWzBdOiBUcnVlfSkKKworCitkZWYgU2V0UHJvcFZhbHVlKHByb3AsIHZuYW1lLCBzdGFydCwgZW5kKToKKyAgdmFsdWUgPSBOb3JtYWxpemVQcm9wZXJ0eVZhbHVlKHByb3AsIHZuYW1lKQorICBTZXRQcm9wcyhzdGFydCwgZW5kLCB7cHJvcFsxXVswXTogdmFsdWV9KQorCisKK2RlZiBTZXRQcm9wZXJ0eVZhbHVlKHBuYW1lLCB2bmFtZSwgc3RhcnQsIGVuZCk6CisgIHByb3AgPSBHZXRQcm9wZXJ0eShwbmFtZSkKKyAgaWYgcHJvcDogU2V0UHJvcFZhbHVlKHByb3AsIHZuYW1lLCBzdGFydCwgZW5kKQorCisjIFBhcnNpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfc3RyaXBwZWRfY3BfcmUgPSByZS5jb21waWxlKCIoWzAtOWEtZkEtRl0rKSQiKQorX3N0cmlwcGVkX3JhbmdlX3JlID0gcmUuY29tcGlsZSgiKFswLTlhLWZBLUZdKylcLlwuKFswLTlhLWZBLUZdKykkIikKK19taXNzaW5nX3JlID0gcmUuY29tcGlsZSgiIyAqQG1pc3Npbmc6ICowMDAwXC5cLjEwRkZGRiAqOyAqKC4rKSQiKQorCitkZWYgUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfcmFuZ2VzPVRydWUsIHdhbnRfb3RoZXI9RmFsc2UsCisgICAgICAgICAgICAgICAgIHdhbnRfY29tbWVudHM9RmFsc2UsIHdhbnRfbWlzc2luZz1GYWxzZSk6CisgICIiIlBhcnNlcyBsaW5lcyBmcm9tIGEgc2VtaWNvbG9uLWRlbGltaXRlZCBVQ0QgdGV4dCBmaWxlLgorICBTdHJpcHMgY29tbWVudHMsIGlnbm9yZXMgZW1wdHkgYW5kIGFsbC1jb21tZW50IGxpbmVzLgorICBSZXR1cm5zIGEgdHVwbGUgKHR5cGUsIGxpbmUsIC4uLikuCisgICIiIgorICBmb3IgbGluZSBpbiBpbl9maWxlOgorICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKTogICMgd2hvbGUtbGluZSBjb21tZW50CisgICAgICBpZiB3YW50X21pc3Npbmc6CisgICAgICAgIG1hdGNoID0gX21pc3NpbmdfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgZmllbGRzID0gbWF0Y2guZ3JvdXAoMSkuc3BsaXQoIjsiKQorICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oZmllbGRzKSk6IGZpZWxkc1tpXSA9IGZpZWxkc1tpXS5zdHJpcCgpCisgICAgICAgICAgeWllbGQgKCJtaXNzaW5nIiwgbGluZSwgZmllbGRzKQorICAgICAgICAgIGNvbnRpbnVlCisgICAgICBpZiB3YW50X2NvbW1lbnRzOiB5aWVsZCAoImNvbW1lbnQiLCBsaW5lKQorICAgICAgY29udGludWUKKyAgICBjb21tZW50X3N0YXJ0ID0gbGluZS5maW5kKCIjIikgICMgaW5saW5lIGNvbW1lbnQKKyAgICBpZiBjb21tZW50X3N0YXJ0ID49IDA6CisgICAgICBsaW5lID0gbGluZVs6Y29tbWVudF9zdGFydF0ucnN0cmlwKCkKKyAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgIGZpZWxkcyA9IGxpbmUuc3BsaXQoIjsiKQorICAgIGZvciBpIGluIHhyYW5nZShsZW4oZmllbGRzKSk6IGZpZWxkc1tpXSA9IGZpZWxkc1tpXS5zdHJpcCgpCisgICAgaWYgd2FudF9yYW5nZXM6CisgICAgICBmaXJzdCA9IGZpZWxkc1swXQorICAgICAgbWF0Y2ggPSBfc3RyaXBwZWRfcmFuZ2VfcmUubWF0Y2goZmlyc3QpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgc3RhcnQgPSBpbnQobWF0Y2guZ3JvdXAoMSksIDE2KQorICAgICAgICBlbmQgPSBpbnQobWF0Y2guZ3JvdXAoMiksIDE2KQorICAgICAgICB5aWVsZCAoInJhbmdlIiwgbGluZSwgc3RhcnQsIGVuZCwgZmllbGRzKQorICAgICAgICBjb250aW51ZQorICAgICAgbWF0Y2ggPSBfc3RyaXBwZWRfY3BfcmUubWF0Y2goZmlyc3QpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgYyA9IGludChtYXRjaC5ncm91cCgxKSwgMTYpCisgICAgICAgIHlpZWxkICgicmFuZ2UiLCBsaW5lLCBjLCBjLCBmaWVsZHMpCisgICAgICAgIGNvbnRpbnVlCisgICAgaWYgd2FudF9vdGhlcjoKKyAgICAgIHlpZWxkICgib3RoZXIiLCBsaW5lLCBmaWVsZHMpCisgICAgZWxzZToKKyAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bmFibGUgdG8gcGFyc2UgbGluZVxuICAlc1xuIiAlIGxpbmUpCisKKworZGVmIEFkZEJpbmFyeVByb3BlcnR5KHNob3J0X25hbWUsIGxvbmdfbmFtZSk6CisgIF9udWxsX3ZhbHVlc1tzaG9ydF9uYW1lXSA9IEZhbHNlCisgIGJpbl9wcm9wID0gX3Byb3BlcnRpZXNbIk1hdGgiXQorICBwcm9wID0gKCJCaW5hcnkiLCBbc2hvcnRfbmFtZSwgbG9uZ19uYW1lXSwgYmluX3Byb3BbMl0sIGJpbl9wcm9wWzNdKQorICBfcHJvcGVydGllc1tzaG9ydF9uYW1lXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbbG9uZ19uYW1lXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbTm9ybVByb3BOYW1lKHNob3J0X25hbWUpXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbTm9ybVByb3BOYW1lKGxvbmdfbmFtZSldID0gcHJvcAorCisKK2RlZiBBZGRQT1NJWEJpbmFyeVByb3BlcnR5KG5hbWUpOgorICAjIFdlIG9ubHkgZGVmaW5lIGEgbG9uZyBuYW1lIGZvciBJQ1Utc3BlY2lmaWMgKG5vbi1VQ0QpIFBPU0lYIHByb3BlcnRpZXMuCisgIF9udWxsX3ZhbHVlc1tuYW1lXSA9IEZhbHNlCisgIGJpbl9wcm9wID0gX3Byb3BlcnRpZXNbIk1hdGgiXQorICBwcm9wID0gKCJCaW5hcnkiLCBbIiIsIG5hbWVdLCBiaW5fcHJvcFsyXSwgYmluX3Byb3BbM10pCisgIF9wcm9wZXJ0aWVzW25hbWVdID0gcHJvcAorICBfcHJvcGVydGllc1tOb3JtUHJvcE5hbWUobmFtZSldID0gcHJvcAorICAjIFRoaXMgaXMgdG8gbWF0Y2ggVVByb3BlcnR5IFVDSEFSX1BPU0lYX0FMTlVNIGV0Yy4KKyAgX3Byb3BlcnRpZXNbInBvc2l4IiArIE5vcm1Qcm9wTmFtZShuYW1lKV0gPSBwcm9wCisKKworIyBNYXRjaCBhIGNvbW1lbnQgbGluZSBsaWtlCisjIFByb3BlcnR5QWxpYXNlcy02LjEuMC50eHQKKyMgYW5kIGV4dHJhY3QgdGhlIFVuaWNvZGUgdmVyc2lvbi4KK191Y2RfdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoIiMgKlByb3BlcnR5QWxpYXNlcyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLShbMC05XSsoPzpcXC5bMC05XSspKikoPzpkWzAtOV0rKT8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcLnR4dCIpCisKK2RlZiBQYXJzZVByb3BlcnR5QWxpYXNlcyhpbl9maWxlKToKKyAgZ2xvYmFsIF9jb3B5cmlnaHQsIF90ZXJtc19vZl91c2UsIF91Y2RfdmVyc2lvbgorICBwcm9wX3R5cGVfbnVsbHMgPSB7CisgICAgIkJpbmFyeSI6IEZhbHNlLAorICAgICJDYXRhbG9nIjogIj8/IiwgICMgTXVzdCBiZSBzcGVjaWZpZWQsIGUuZy4sIGluIEBtaXNzaW5nIGxpbmUuCisgICAgIkVudW1lcmF0ZWQiOiAiPz8iLCAgIyBNdXN0IGJlIHNwZWNpZmllZC4KKyAgICAiTnVtZXJpYyI6ICJOYU4iLAorICAgICJTdHJpbmciOiAiIiwKKyAgICAiTWlzY2VsbGFuZW91cyI6ICIiCisgIH0KKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfcmFuZ2VzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudF9vdGhlcj1UcnVlLCB3YW50X2NvbW1lbnRzPVRydWUpOgorICAgIGlmIGRhdGFbMF0gPT0gImNvbW1lbnQiOgorICAgICAgbGluZSA9IGRhdGFbMV0KKyAgICAgIG1hdGNoID0gX3VjZF92ZXJzaW9uX3JlLm1hdGNoKGxpbmUpCisgICAgICBpZiBtYXRjaDoKKyAgICAgICAgX3VjZF92ZXJzaW9uID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCIjIENvcHlyaWdodCIpOgorICAgICAgICBfY29weXJpZ2h0ID0gbGluZQorICAgICAgZWxpZiAidGVybXMgb2YgdXNlIiBpbiBsaW5lOgorICAgICAgICBfdGVybXNfb2ZfdXNlID0gbGluZQorICAgICAgZWxzZToKKyAgICAgICAgd29yZHMgPSBsaW5lWzE6XS5sc3RyaXAoKS5zcGxpdCgpCisgICAgICAgIGlmIGxlbih3b3JkcykgPT0gMiBhbmQgd29yZHNbMV0gPT0gIlByb3BlcnRpZXMiOgorICAgICAgICAgIHByb3BfdHlwZSA9IHdvcmRzWzBdCisgICAgICAgICAgbnVsbF92YWx1ZSA9IHByb3BfdHlwZV9udWxsc1twcm9wX3R5cGVdCisgICAgZWxzZToKKyAgICAgICMgdHlwZSA9PSAib3RoZXIiCisgICAgICBhbGlhc2VzID0gZGF0YVsyXQorICAgICAgbmFtZSA9IGFsaWFzZXNbMF0KKyAgICAgIGlmIG5hbWUgaW4gX2lnbm9yZWRfcHJvcGVydGllczoKKyAgICAgICAgZm9yIGFsaWFzIGluIGFsaWFzZXM6CisgICAgICAgICAgX2lnbm9yZWRfcHJvcGVydGllcy5hZGQoYWxpYXMpCisgICAgICAgICAgX2lnbm9yZWRfcHJvcGVydGllcy5hZGQoTm9ybVByb3BOYW1lKGFsaWFzKSkKKyAgICAgIGVsc2U6CisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoImNjYyIpOgorICAgICAgICAgIF9udWxsX3ZhbHVlc1tuYW1lXSA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBfbnVsbF92YWx1ZXNbbmFtZV0gPSBudWxsX3ZhbHVlCisgICAgICAgIHByb3AgPSAocHJvcF90eXBlLCBhbGlhc2VzLCBzZXQoKSwge30pCisgICAgICAgIGZvciBhbGlhcyBpbiBhbGlhc2VzOgorICAgICAgICAgIF9wcm9wZXJ0aWVzW2FsaWFzXSA9IHByb3AKKyAgICAgICAgICBfcHJvcGVydGllc1tOb3JtUHJvcE5hbWUoYWxpYXMpXSA9IHByb3AKKyAgIyBBZGQgcHJvdmlzaW9uYWwgYW5kIElDVS1zcGVjaWZpYyBwcm9wZXJ0aWVzIHdlIG5lZWQuCisgICMgV2UgYWRkIHNvbWUgaW4gc3VwcG9ydCBvZiBydW50aW1lIEFQSSwgZXZlbiBpZiB3ZSBkbyBub3Qgd3JpdGUKKyAgIyBkYXRhIGZvciB0aGVtIHRvIHBwdWNkLnR4dCAoZS5nLiwgbGNjYyAmIHRjY2MpLgorICAjIFdlIGFkZCBvdGhlcnMganVzdCB0byByZXByZXNlbnQgVUNEIGRhdGEgdGhhdCBjb250cmlidXRlcyB0bworICAjIHNvbWUgZnVuY3Rpb25hbGl0eSwgYWx0aG91Z2ggVW5pY29kZSBoYXMgbm90ICJibGVzc2VkIiB0aGVtCisgICMgYXMgc2VwYXJhdGUgcHJvcGVydGllcyAoZS5nLiwgVHVya2ljX0Nhc2VfRm9sZGluZykuCisKKyAgIyBUdXJraWNfQ2FzZV9Gb2xkaW5nOiBUaGUgJ1QnIG1hcHBpbmdzIGluIENhc2VGb2xkaW5nLnR4dC4KKyAgbmFtZSA9ICJUdXJraWNfQ2FzZV9Gb2xkaW5nIgorICBfbnVsbF92YWx1ZXNbbmFtZV0gPSAiIgorICBwcm9wID0gKCJTdHJpbmciLCBbbmFtZSwgbmFtZV0sIHNldCgpLCB7fSkKKyAgX3Byb3BlcnRpZXNbbmFtZV0gPSBwcm9wCisgIF9wcm9wZXJ0aWVzW05vcm1Qcm9wTmFtZShuYW1lKV0gPSBwcm9wCisgICMgQ29uZGl0aW9uYWxfQ2FzZV9NYXBwaW5nczogU3BlY2lhbENhc2luZy50eHQgbGluZXMgd2l0aCBjb25kaXRpb25zLgorICBuYW1lID0gIkNvbmRpdGlvbmFsX0Nhc2VfTWFwcGluZ3MiCisgIF9udWxsX3ZhbHVlc1tuYW1lXSA9ICIiCisgIHByb3AgPSAoIk1pc2NlbGxhbmVvdXMiLCBbbmFtZSwgbmFtZV0sIHNldCgpLCB7fSkKKyAgX3Byb3BlcnRpZXNbbmFtZV0gPSBwcm9wCisgIF9wcm9wZXJ0aWVzW05vcm1Qcm9wTmFtZShuYW1lKV0gPSBwcm9wCisgICMgbGNjYyA9IGNjYyBvZiBmaXJzdCBjcCBpbiBjYW5vbmljYWwgZGVjb21wb3NpdGlvbi4KKyAgX251bGxfdmFsdWVzWyJsY2NjIl0gPSAwCisgIGNjY19wcm9wID0gbGlzdChfcHJvcGVydGllc1siY2NjIl0pCisgIGNjY19wcm9wWzFdID0gWyJsY2NjIiwgIkxlYWRfQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzcyJdCisgIHByb3AgPSB0dXBsZShjY2NfcHJvcCkKKyAgX3Byb3BlcnRpZXNbImxjY2MiXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbIkxlYWRfQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzcyJdID0gcHJvcAorICBfcHJvcGVydGllc1sibGVhZGNhbm9uaWNhbGNvbWJpbmluZ2NsYXNzIl0gPSBwcm9wCisgICMgdGNjYyA9IGNjYyBvZiBsYXN0IGNwIGluIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uLgorICBfbnVsbF92YWx1ZXNbInRjY2MiXSA9IDAKKyAgY2NjX3Byb3BbMV0gPSBbInRjY2MiLCAiVHJhaWxfQ2Fub25pY2FsX0NvbWJpbmluZ19DbGFzcyJdCisgIHByb3AgPSB0dXBsZShjY2NfcHJvcCkKKyAgX3Byb3BlcnRpZXNbInRjY2MiXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbIlRyYWlsX0Nhbm9uaWNhbF9Db21iaW5pbmdfQ2xhc3MiXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbInRyYWlsY2Fub25pY2FsY29tYmluaW5nY2xhc3MiXSA9IHByb3AKKyAgIyBTY3JpcHRfRXh0ZW5zaW9ucworICBpZiAic2N4IiBub3QgaW4gX3Byb3BlcnRpZXM6CisgICAgX251bGxfdmFsdWVzWyJzY3giXSA9ICIiCisgICAgcHJvcCA9ICgiTWlzY2VsbGFuZW91cyIsIFsic2N4IiwgIlNjcmlwdF9FeHRlbnNpb25zIl0sIHNldCgpLCB7fSkKKyAgICBfcHJvcGVydGllc1sic2N4Il0gPSBwcm9wCisgICAgX3Byb3BlcnRpZXNbIlNjcmlwdF9FeHRlbnNpb25zIl0gPSBwcm9wCisgICAgX3Byb3BlcnRpZXNbInNjcmlwdGV4dGVuc2lvbnMiXSA9IHByb3AKKyAgIyBHZW5lcmFsIENhdGVnb3J5IGFzIGEgYml0IG1hc2suCisgIF9udWxsX3ZhbHVlc1siZ2NtIl0gPSAiPz8iCisgIGdjX3Byb3AgPSBfcHJvcGVydGllc1siZ2MiXQorICBwcm9wID0gKCJCaXRtYXNrIiwgWyJnY20iLCAiR2VuZXJhbF9DYXRlZ29yeV9NYXNrIl0sIGdjX3Byb3BbMl0sIGdjX3Byb3BbM10pCisgIF9wcm9wZXJ0aWVzWyJnY20iXSA9IHByb3AKKyAgX3Byb3BlcnRpZXNbIkdlbmVyYWxfQ2F0ZWdvcnlfTWFzayJdID0gcHJvcAorICBfcHJvcGVydGllc1siZ2VuZXJhbGNhdGVnb3J5bWFzayJdID0gcHJvcAorICAjIFZhcmlvdXMgYmluYXJ5IHByb3BlcnRpZXMuCisgIEFkZEJpbmFyeVByb3BlcnR5KCJTZW5zaXRpdmUiLCAiQ2FzZV9TZW5zaXRpdmUiKQorICBBZGRCaW5hcnlQcm9wZXJ0eSgibmZkaW5lcnQiLCAiTkZEX0luZXJ0IikKKyAgQWRkQmluYXJ5UHJvcGVydHkoIm5ma2RpbmVydCIsICJORktEX0luZXJ0IikKKyAgQWRkQmluYXJ5UHJvcGVydHkoIm5mY2luZXJ0IiwgIk5GQ19JbmVydCIpCisgIEFkZEJpbmFyeVByb3BlcnR5KCJuZmtjaW5lcnQiLCAiTkZLQ19JbmVydCIpCisgIEFkZEJpbmFyeVByb3BlcnR5KCJzZWdzdGFydCIsICJTZWdtZW50X1N0YXJ0ZXIiKQorICAjIEMvUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMgdGhhdCBkbyBub3QgaGF2ZSBVbmljb2RlIHByb3BlcnR5IFt2YWx1ZV0gYWxpYXNlcy4KKyAgIyBTZWUgdWNoYXIuaC4KKyAgQWRkUE9TSVhCaW5hcnlQcm9wZXJ0eSgiYWxudW0iKQorICBBZGRQT1NJWEJpbmFyeVByb3BlcnR5KCJibGFuayIpCisgIEFkZFBPU0lYQmluYXJ5UHJvcGVydHkoImdyYXBoIikKKyAgQWRkUE9TSVhCaW5hcnlQcm9wZXJ0eSgicHJpbnQiKQorICBBZGRQT1NJWEJpbmFyeVByb3BlcnR5KCJ4ZGlnaXQiKQorCisKK2RlZiBQYXJzZVByb3BlcnR5VmFsdWVBbGlhc2VzKGluX2ZpbGUpOgorICBnbG9iYWwgX2JpbmFyeV92YWx1ZXMKKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfcmFuZ2VzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudF9vdGhlcj1UcnVlLCB3YW50X21pc3Npbmc9VHJ1ZSk6CisgICAgaWYgZGF0YVswXSA9PSAibWlzc2luZyI6CisgICAgICBTZXREZWZhdWx0VmFsdWUoZGF0YVsyXVswXSwgZGF0YVsyXVsxXSkKKyAgICBlbHNlOgorICAgICAgIyB0eXBlID09ICJvdGhlciIKKyAgICAgIGZpZWxkcyA9IGRhdGFbMl0KKyAgICAgIHBuYW1lID0gZmllbGRzWzBdCisgICAgICBwcm9wID0gR2V0UHJvcGVydHkocG5hbWUpCisgICAgICBpZiBwcm9wOgorICAgICAgICBkZWwgZmllbGRzWzBdICAjIE9ubHkgdGhlIGxpc3Qgb2YgYWxpYXNlcyByZW1haW5zLgorICAgICAgICBzaG9ydF9uYW1lID0gZmllbGRzWzBdCisgICAgICAgIGlmIHNob3J0X25hbWUgPT0gIm4vYSI6ICAjIG5vIHNob3J0IG5hbWUKKyAgICAgICAgICBmaWVsZHNbMF0gPSAiIgorICAgICAgICAgIHNob3J0X25hbWUgPSBmaWVsZHNbMV0KKyAgICAgICAgcHJvcFsyXS5hZGQoc2hvcnRfbmFtZSkKKyAgICAgICAgdmFsdWVzID0gcHJvcFszXQorICAgICAgICBmb3IgYWxpYXMgaW4gZmllbGRzOgorICAgICAgICAgIGlmIGFsaWFzOgorICAgICAgICAgICAgdmFsdWVzW2FsaWFzXSA9IGZpZWxkcworICAgICAgICAgICAgdmFsdWVzW05vcm1Qcm9wTmFtZShhbGlhcyldID0gZmllbGRzCisgICAgICAgIGlmIHByb3BbMF0gPT0gIkJpbmFyeSIgYW5kIG5vdCBfYmluYXJ5X3ZhbHVlczoKKyAgICAgICAgICBfYmluYXJ5X3ZhbHVlcyA9IHZhbHVlcworICAjIFNvbWUgb2YgdGhlIEBtaXNzaW5nIGxpbmVzIHdpdGggbm9uLW51bGwgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMKKyAgIyBhcmUgaW4gZmlsZXMgdGhhdCB3ZSBkbyBub3QgcGFyc2U7CisgICMgZWl0aGVyIGJlY2F1c2UgdGhlIGRhdGEgZm9yIHRoYXQgcHJvcGVydHkgaXMgZWFzaWx5CisgICMgKGkuZS4sIHRoZSBAbWlzc2luZyBsaW5lIHdvdWxkIGJlIHRoZSBvbmx5IHJlYXNvbiB0byBwYXJzZSBzdWNoIGEgZmlsZSkKKyAgIyBvciBiZWNhdXNlIHdlIGNvbXB1dGUgdGhlIHByb3BlcnR5IGF0IHJ1bnRpbWUsCisgICMgc3VjaCBhcyB0aGUgSGFuZ3VsX1N5bGxhYmxlX1R5cGUuCisgIGlmICJkdCIgbm90IGluIF9kZWZhdWx0czogICMgRGVyaXZlZERlY29tcG9zaXRpb25UeXBlLnR4dAorICAgIF9kZWZhdWx0c1siZHQiXSA9ICJOb25lIgorICBpZiAibnQiIG5vdCBpbiBfZGVmYXVsdHM6ICAjIERlcml2ZWROdW1lcmljVHlwZS50eHQKKyAgICBfZGVmYXVsdHNbIm50Il0gPSAiTm9uZSIKKyAgaWYgImhzdCIgbm90IGluIF9kZWZhdWx0czogICMgSGFuZ3VsU3lsbGFibGVUeXBlLnR4dAorICAgIF9kZWZhdWx0c1siaHN0Il0gPSAiTkEiCisgIGlmICJnYyIgbm90IGluIF9kZWZhdWx0czogICMgTm8gQG1pc3NpbmcgbGluZSBpbiBhbnkgLnR4dCBmaWxlPworICAgIF9kZWZhdWx0c1siZ2MiXSA9ICJDbiIKKyAgIyBDb3B5IHRoZSBnYyBkZWZhdWx0IHZhbHVlIHRvIGdjbS4KKyAgX2RlZmF1bHRzWyJnY20iXSA9IF9kZWZhdWx0c1siZ2MiXQorICAjIEFkZCBJU08gMTU5MjQtb25seSBzY3JpcHQgY29kZXMuCisgICMgT25seSBmb3IgdGhlIElDVSBzY3JpcHQgY29kZSBBUEksIG5vdCBuZWNlc3NhcnkgZm9yIHBhcnNpbmcgdGhlIFVDRC4KKyAgc2NyaXB0X3Byb3AgPSBfcHJvcGVydGllc1sic2MiXQorICBzaG9ydF9zY3JpcHRfbmFtZXMgPSBzY3JpcHRfcHJvcFsyXSAgIyBzZXQKKyAgc2NyaXB0X3ZhbHVlcyA9IHNjcmlwdF9wcm9wWzNdICAjIGRpY3QKKyAgcmVtb3ZlX3NjcmlwdHMgPSBbXQorICBmb3Igc2NyaXB0IGluIF9zY3JpcHRzX29ubHlfaW5faXNvMTU5MjQ6CisgICAgaWYgc2NyaXB0IGluIHNob3J0X3NjcmlwdF9uYW1lczoKKyAgICAgIHJlbW92ZV9zY3JpcHRzLmFwcGVuZChzY3JpcHQpCisgICAgZWxzZToKKyAgICAgIHNob3J0X3NjcmlwdF9uYW1lcy5hZGQoc2NyaXB0KQorICAgICAgIyBEbyBub3QgaW52ZW50IGEgVW5pY29kZSBsb25nIHNjcmlwdCBuYW1lIGJlZm9yZSB0aGUgVUNEIGFkZHMgdGhlIHNjcmlwdC4KKyAgICAgIHNjcmlwdF9saXN0ID0gW3NjcmlwdCwgc2NyaXB0XSAgIyBbc2hvcnQsIGxvbmddCisgICAgICBzY3JpcHRfdmFsdWVzW3NjcmlwdF0gPSBzY3JpcHRfbGlzdAorICAgICAgIyBQcm9iYWJseSBub3QgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgICMgd2Ugd2lsbCBub3QgcGFyc2UgdGhlc2Ugc2NyaXB0cyBmcm9tIHRoZSBVQ0Q6CisgICAgICBzY3JpcHRfdmFsdWVzW05vcm1Qcm9wTmFtZShzY3JpcHQpXSA9IHNjcmlwdF9saXN0CisgIGlmIHJlbW92ZV9zY3JpcHRzOgorICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICJyZW1vdmUgJXMgZnJvbSBfc2NyaXB0c19vbmx5X2luX2lzbzE1OTI0IiAlIHJlbW92ZV9zY3JpcHRzKQorCisKK2RlZiBQYXJzZUJsb2Nrcyhpbl9maWxlKToKKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfbWlzc2luZz1UcnVlKToKKyAgICBpZiBkYXRhWzBdID09ICJtaXNzaW5nIjoKKyAgICAgIFNldERlZmF1bHRWYWx1ZSgiYmxrIiwgZGF0YVsyXVswXSkKKyAgICBlbHNlOgorICAgICAgIyB0eXBlID09ICJyYW5nZSIKKyAgICAgIChzdGFydCwgZW5kLCBuYW1lKSA9IChkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdWzFdKQorICAgICAgX2Jsb2Nrcy5hcHBlbmQoKHN0YXJ0LCBlbmQsIHsiYmxrIjogbmFtZX0pKQorICAgICAgU2V0UHJvcGVydHlWYWx1ZSgiYmxrIiwgbmFtZSwgc3RhcnQsIGVuZCkKKyAgX2Jsb2Nrcy5zb3J0KCkKKyAgIyBDaGVjayBmb3Igb3ZlcmxhcHBpbmcgYmxvY2tzLgorICBwcmV2X2VuZCA9IC0xCisgIGZvciBiIGluIF9ibG9ja3M6CisgICAgc3RhcnQgPSBiWzBdCisgICAgZW5kID0gYlsxXQorICAgIGlmIHByZXZfZW5kID49IHN0YXJ0OgorICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAiYmxvY2sgJTA0bFguLiUwNGxYICVzIG92ZXJsYXBzIHdpdGggYW5vdGhlciAiICsKKyAgICAgICAgICAiZW5kaW5nIGF0ICUwNGxYXG4gICVzXG4iICUKKyAgICAgICAgICAoc3RhcnQsIGVuZCwgYlsyXVsiYmxrIl0sIHByZXZfZW5kKSkKKyAgICBwcmV2X2VuZCA9IGVuZAorCisKK2RlZiBQYXJzZVVuaWNvZGVEYXRhKGluX2ZpbGUpOgorICBkdF9wcm9wID0gR2V0UHJvcGVydHkoImR0IikKKyAgcmFuZ2VfZmlyc3RfbGluZSA9ICIiCisgIHJhbmdlX2ZpcnN0ID0gLTEKKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfbWlzc2luZz1UcnVlKToKKyAgICAjIHR5cGUgPT0gInJhbmdlIgorICAgIChsaW5lLCBjLCBlbmQsIGZpZWxkcykgPSAoZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSkKKyAgICBhc3NlcnQgYyA9PSBlbmQKKyAgICBuYW1lID0gZmllbGRzWzFdCisgICAgaWYgbmFtZS5zdGFydHN3aXRoKCI8Iik6CisgICAgICBpZiBuYW1lLmVuZHN3aXRoKCIsIEZpcnN0PiIpOgorICAgICAgICBpZiByYW5nZV9maXJzdCA+PSAwOgorICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKAorICAgICAgICAgICAgICAiZXJyb3I6IHVudGVybWluYXRlZCByYW5nZSBzdGFydGVkIGF0XG4gICVzXG4iICUKKyAgICAgICAgICAgICAgcmFuZ2VfZmlyc3RfbGluZSkKKyAgICAgICAgcmFuZ2VfZmlyc3QgPSBjCisgICAgICAgIHJhbmdlX2ZpcnN0X2xpbmUgPSBsaW5lCisgICAgICAgIGNvbnRpbnVlCisgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoIiwgTGFzdD4iKToKKyAgICAgICAgaWYgcmFuZ2VfZmlyc3QgPCAwOgorICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKAorICAgICAgICAgICAgICAiZXJyb3I6IHJhbmdlIGVuZCB3aXRob3V0IHN0YXJ0IGF0XG4gICVzXG4iICUKKyAgICAgICAgICAgICAgbGluZSkKKyAgICAgICAgZWxpZiByYW5nZV9maXJzdCA+IGM6CisgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoCisgICAgICAgICAgICAgICJlcnJvcjogcmFuZ2Ugc3RhcnQvZW5kIG91dCBvZiBvcmRlciBhdFxuICAlc1xuICAlc1xuIiAlCisgICAgICAgICAgICAgIChyYW5nZV9maXJzdF9saW5lLCBsaW5lKSkKKyAgICAgICAgZmlyc3RfbmFtZSA9IHJhbmdlX2ZpcnN0X2xpbmUuc3BsaXQoIjsiKVsxXVsxOi04XQorICAgICAgICBuYW1lID0gbmFtZVsxOi03XQorICAgICAgICBpZiBmaXJzdF9uYW1lICE9IG5hbWU6CisgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoCisgICAgICAgICAgICAgICJlcnJvcjogcmFuZ2Ugc3RhcnQvZW5kIG5hbWUgbWlzbWF0Y2ggYXRcbiAgJXNcbiAgJXNcbiIgJQorICAgICAgICAgICAgICAocmFuZ2VfZmlyc3RfbGluZSwgbGluZSkpCisgICAgICAgIGVuZCA9IGMKKyAgICAgICAgYyA9IHJhbmdlX2ZpcnN0CisgICAgICAgIHJhbmdlX2ZpcnN0ID0gLTEKKyAgICAgICAgIyBSZW1lbWJlciBhbGdvcml0aG1pYyBuYW1lIHJhbmdlcy4KKyAgICAgICAgaWYgIklkZW9ncmFwaCIgaW4gbmFtZToKKyAgICAgICAgICBfYWxnX25hbWVzX3Jhbmdlcy5hcHBlbmQoW2MsIGVuZCwgImhhbiIsICJDSksgVU5JRklFRCBJREVPR1JBUEgtIl0pCisgICAgICAgIGVsaWYgbmFtZSA9PSAiSGFuZ3VsIFN5bGxhYmxlIjoKKyAgICAgICAgICBfYWxnX25hbWVzX3Jhbmdlcy5hcHBlbmQoW2MsIGVuZCwgImhhbmd1bCJdKQorICAgICAgICBuYW1lID0gIiIKKyAgICAgIGVsc2U6CisgICAgICAgICMgSWdub3JlIG5vbi1uYW1lcyBsaWtlIDxjb250cm9sPi4KKyAgICAgICAgbmFtZSA9ICIiCisgICAgcHJvcHMgPSB7fQorICAgIGlmIG5hbWU6IHByb3BzWyJuYSJdID0gbmFtZQorICAgIHByb3BzWyJnYyJdID0gZmllbGRzWzJdCisgICAgY2NjID0gaW50KGZpZWxkc1szXSkKKyAgICBpZiBjY2M6IHByb3BzWyJjY2MiXSA9IGNjYworICAgIHByb3BzWyJiYyJdID0gZmllbGRzWzRdCisgICAgIyBEZWNvbXBvc2l0aW9uIHR5cGUgJiBtYXBwaW5nLgorICAgIGRtID0gZmllbGRzWzVdCisgICAgaWYgZG06CisgICAgICBpZiBkbS5zdGFydHN3aXRoKCI8Iik6CisgICAgICAgIGR0X2xpbWl0ID0gZG0uaW5kZXgoIj4iKQorICAgICAgICBkdCA9IE5vcm1hbGl6ZVByb3BlcnR5VmFsdWUoZHRfcHJvcCwgZG1bMTpkdF9saW1pdF0pCisgICAgICAgIGRtID0gZG1bZHRfbGltaXQgKyAxOl0ubHN0cmlwKCkKKyAgICAgIGVsc2U6CisgICAgICAgIGR0ID0gIkNhbiIKKyAgICAgIHByb3BzWyJkdCJdID0gZHQKKyAgICAgIHByb3BzWyJkbSJdID0gZG0KKyAgICAjIE51bWVyaWMgdHlwZSAmIHZhbHVlLgorICAgIGRlY2ltYWwgPSBmaWVsZHNbNl0KKyAgICBkaWdpdCA9IGZpZWxkc1s3XQorICAgIG52ID0gZmllbGRzWzhdCisgICAgaWYgKGRlY2ltYWwgYW5kIGRlY2ltYWwgIT0gbnYpIG9yIChkaWdpdCBhbmQgZGlnaXQgIT0gbnYpOgorICAgICAgcmFpc2UgU3ludGF4RXJyb3IoImVycm9yOiBudW1lcmljIHZhbHVlcyBkaWZmZXIgYXRcbiAgJXNcbiIgJSBsaW5lKQorICAgIGlmIG52OgorICAgICAgcHJvcHNbIm52Il0gPSBudgorICAgICAgcHJvcHNbIm50Il0gPSAiRGUiIGlmIGRlY2ltYWwgZWxzZSAiRGkiIGlmIGRpZ2l0IGVsc2UgIk51IgorICAgIGlmIGZpZWxkc1s5XSA9PSAiWSI6IHByb3BzWyJCaWRpX00iXSA9IFRydWUKKyAgICAjIElDVSA0OSBhbmQgYWJvdmUgZG9lcyBub3Qgc3VwcG9ydCBVbmljb2RlXzFfTmFtZSBhbnkgbW9yZS4KKyAgICAjIFNlZSB0aWNrZXQgIzkwMTMuCisgICAgIyBuYTEgPSBmaWVsZHNbMTBdCisgICAgIyBpZiBuYTE6IHByb3BzWyJuYTEiXSA9IG5hMQorICAgICMgSVNPX0NvbW1lbnQgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIG5vIHZhbHVlcy4KKyAgICAjIGlzYyA9IGZpZWxkc1sxMV0KKyAgICAjIGlmIGlzYzogcHJvcHNbImlzYyJdID0gaXNjCisgICAgIyBTaW1wbGUgY2FzZSBtYXBwaW5ncy4KKyAgICBzdWMgPSBmaWVsZHNbMTJdCisgICAgc2xjID0gZmllbGRzWzEzXQorICAgIHN0YyA9IGZpZWxkc1sxNF0KKyAgICBpZiBzdWM6IHByb3BzWyJzdWMiXSA9IHN1YworICAgIGlmIHNsYzogcHJvcHNbInNsYyJdID0gc2xjCisgICAgaWYgc3RjOiBwcm9wc1sic3RjIl0gPSBzdGMKKyAgICBTZXRQcm9wcyhjLCBlbmQsIHByb3BzKQorICBpZiByYW5nZV9maXJzdCA+PSAwOgorICAgIHJhaXNlIFN5bnRheEVycm9yKAorICAgICAgICAiZXJyb3I6IHVudGVybWluYXRlZCByYW5nZSBzdGFydGVkIGF0XG4gICVzXG4iICUKKyAgICAgICAgcmFuZ2VfZmlyc3RfbGluZSkKKyAgIyBIYW5ndWwgc3lsbGFibGVzIGhhdmUgY2Fub25pY2FsIGRlY29tcG9zaXRpb25zIHdoaWNoIGFyZSBub3QgbGlzdGVkIGluIFVuaWNvZGVEYXRhLnR4dC4KKyAgU2V0UHJvcGVydHlWYWx1ZSgiZHQiLCAiQ2FuIiwgMHhhYzAwLCAweGQ3YTMpCisgIF9hbGdfbmFtZXNfcmFuZ2VzLnNvcnQoKQorCisKK19uYW1lc19oMV9yZSA9IHJlLmNvbXBpbGUoIkBAXHQoWzAtOWEtZkEtRl0rKVx0KC4rPylcdChbMC05YS1mQS1GXSspJCIpCitfbmFtZXNfaDJfcmUgPSByZS5jb21waWxlKCJAXHRcdCguKykiKQorX25hbWVzX2NoYXJfcmUgPSByZS5jb21waWxlKCIoWzAtOWEtZkEtRl0rKVx0LisiKQorCitkZWYgUGFyc2VOYW1lc0xpc3QoaW5fZmlsZSk6CisgIHBlbmRpbmdfaDIgPSAiIgorICBmb3IgbGluZSBpbiBpbl9maWxlOgorICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICBtYXRjaCA9IF9uYW1lc19oMV9yZS5tYXRjaChsaW5lKQorICAgIGlmIG1hdGNoOgorICAgICAgcGVuZGluZ19oMiA9ICIiICAjIERyb3AgYSBwZW5kaW5nIGgyIHdoZW4gd2UgZ2V0IHRvIGFuIGgxLgorICAgICAgc3RhcnQgPSBpbnQobWF0Y2guZ3JvdXAoMSksIDE2KQorICAgICAgZW5kID0gaW50KG1hdGNoLmdyb3VwKDMpLCAxNikKKyAgICAgIGNvbW1lbnQgPSBtYXRjaC5ncm91cCgyKS5yZXBsYWNlKHUiXHhhMCIsICIgIikKKyAgICAgIF9oMS5hcHBlbmQoKHN0YXJ0LCBlbmQsIGNvbW1lbnQpKQorICAgICAgY29udGludWUKKyAgICBtYXRjaCA9IF9uYW1lc19oMl9yZS5tYXRjaChsaW5lKQorICAgIGlmIG1hdGNoOgorICAgICAgcGVuZGluZ19oMiA9IG1hdGNoLmdyb3VwKDEpLnJlcGxhY2UodSJceGEwIiwgIiAiKQorICAgICAgY29udGludWUKKyAgICBpZiBwZW5kaW5nX2gyOgorICAgICAgbWF0Y2ggPSBfbmFtZXNfY2hhcl9yZS5tYXRjaChsaW5lKQorICAgICAgaWYgbWF0Y2g6CisgICAgICAgIGMgPSBpbnQobWF0Y2guZ3JvdXAoMSksIDE2KQorICAgICAgICBfaDIuYXBwZW5kKChjLCBwZW5kaW5nX2gyKSkKKyAgICAgICAgcGVuZGluZ19oMiA9ICIiCisgIF9oMS5zb3J0KCkKKyAgX2gyLnNvcnQoKQorCisKK2RlZiBQYXJzZU5hbWVkUHJvcGVydGllcyhpbl9maWxlKToKKyAgIiIiUGFyc2VzIGEgLnR4dCBmaWxlIHdoZXJlIHRoZSBmaXJzdCBjb2x1bW4gaXMgYSBjb2RlIHBvaW50IHJhbmdlCisgIGFuZCB0aGUgc2Vjb25kIGNvbHVtbiBpcyBhIHByb3BlcnR5IG5hbWUuCisgIFNldHMgYmluYXJ5IHByb3BlcnRpZXMgdG8gVHJ1ZSwKKyAgYW5kIG90aGVyIHByb3BlcnRpZXMgdG8gdGhlIHZhbHVlcyBpbiB0aGUgdGhpcmQgY29sdW1uLiIiIgorICBmb3IgZGF0YSBpbiBSZWFkVUNETGluZXMoaW5fZmlsZSwgd2FudF9taXNzaW5nPVRydWUpOgorICAgIGlmIGRhdGFbMF0gPT0gIm1pc3NpbmciOgorICAgICAgU2V0RGVmYXVsdFZhbHVlKGRhdGFbMl1bMF0sIGRhdGFbMl1bMV0pCisgICAgZWxzZToKKyAgICAgICMgdHlwZSA9PSAicmFuZ2UiCisgICAgICBpZiBsZW4oZGF0YVs0XSkgPT0gMjoKKyAgICAgICAgU2V0QmluYXJ5UHJvcGVydHlUb1RydWUoZGF0YVs0XVsxXSwgZGF0YVsyXSwgZGF0YVszXSkKKyAgICAgIGVsc2U6CisgICAgICAgIFNldFByb3BlcnR5VmFsdWUoZGF0YVs0XVsxXSwgZGF0YVs0XVsyXSwgZGF0YVsyXSwgZGF0YVszXSkKKworCitkZWYgUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCBwbmFtZSk6CisgICIiIlBhcnNlcyBhIC50eHQgZmlsZSB3aGVyZSB0aGUgZmlyc3QgY29sdW1uIGlzIGEgY29kZSBwb2ludCByYW5nZQorICBhbmQgdGhlIHNlY29uZCBjb2x1bW4gaXMgdGhlIHZhbHVlIG9mIGEga25vd24gcHJvcGVydHkuIiIiCisgIHByb3AgPSBHZXRQcm9wZXJ0eShwbmFtZSkKKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfbWlzc2luZz1UcnVlKToKKyAgICBpZiBkYXRhWzBdID09ICJtaXNzaW5nIjoKKyAgICAgIFNldERlZmF1bHRWYWx1ZShwbmFtZSwgZGF0YVsyXVswXSkKKyAgICBlbHNlOgorICAgICAgIyB0eXBlID09ICJyYW5nZSIKKyAgICAgIFNldFByb3BWYWx1ZShwcm9wLCBkYXRhWzRdWzFdLCBkYXRhWzJdLCBkYXRhWzNdKQorCisKK2RlZiBQYXJzZUJpZGlNaXJyb3JpbmcoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgImJtZyIpCitkZWYgUGFyc2VEZXJpdmVkQWdlKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJhZ2UiKQorZGVmIFBhcnNlRGVyaXZlZEJpZGlDbGFzcyhpbl9maWxlKTogUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCAiYmMiKQorZGVmIFBhcnNlRGVyaXZlZEpvaW5pbmdHcm91cChpbl9maWxlKTogUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCAiamciKQorZGVmIFBhcnNlRGVyaXZlZEpvaW5pbmdUeXBlKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJqdCIpCitkZWYgUGFyc2VFYXN0QXNpYW5XaWR0aChpbl9maWxlKTogUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCAiZWEiKQorZGVmIFBhcnNlR3JhcGhlbWVCcmVha1Byb3BlcnR5KGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJHQ0IiKQorZGVmIFBhcnNlSW5kaWNNYXRyYUNhdGVnb3J5KGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJJbk1DIikKK2RlZiBQYXJzZUluZGljU3lsbGFiaWNDYXRlZ29yeShpbl9maWxlKTogUGFyc2VPbmVQcm9wZXJ0eShpbl9maWxlLCAiSW5TQyIpCitkZWYgUGFyc2VMaW5lQnJlYWsoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgImxiIikKK2RlZiBQYXJzZVNjcmlwdHMoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgInNjIikKK2RlZiBQYXJzZVNjcmlwdEV4dGVuc2lvbnMoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgInNjeCIpCitkZWYgUGFyc2VTZW50ZW5jZUJyZWFrKGluX2ZpbGUpOiBQYXJzZU9uZVByb3BlcnR5KGluX2ZpbGUsICJTQiIpCitkZWYgUGFyc2VXb3JkQnJlYWsoaW5fZmlsZSk6IFBhcnNlT25lUHJvcGVydHkoaW5fZmlsZSwgIldCIikKKworCitkZWYgRG9TZXROYW1lQWxpYXMoYWxpYXMsIHN0YXJ0LCBlbmQsIGNfcHJvcHMpOgorICBpZiAiTmFtZV9BbGlhcyIgaW4gY19wcm9wczoKKyAgICBjX3Byb3BzWyJOYW1lX0FsaWFzIl0gKz0gJywnICsgYWxpYXMKKyAgZWxzZToKKyAgICBjX3Byb3BzWyJOYW1lX0FsaWFzIl0gPSBhbGlhcworCisKK2RlZiBQYXJzZU5hbWVBbGlhc2VzKGluX2ZpbGUpOgorICAiIiJQYXJzZXMgTmFtZV9BbGlhcyBmcm9tIE5hbWVBbGlhc2VzLnR4dC4KKyAgQSBjaGFyYWN0ZXIgY2FuIGhhdmUgbXVsdGlwbGUgYWxpYXNlcy4KKworICBJbiBVbmljb2RlIDYuMCwgdGhlcmUgYXJlIHR3byBjb2x1bW5zLAorICB3aXRoIGEgbmFtZSBjb3JyZWN0aW9uIGluIHRoZSBzZWNvbmQgY29sdW1uLgorCisgIEluIFVuaWNvZGUgNi4xLCB0aGVyZSBhcmUgdGhyZWUgY29sdW1ucy4KKyAgVGhlIHNlY29uZCBjb250YWlucyBhbiBhbGlhcywgdGhlIHRoaXJkIGl0cyB0eXBlLgorICBUaGUgZG9jdW1lbnRlZCB0eXBlcyBhcmU6CisgICAgY29ycmVjdGlvbiwgY29udHJvbCwgYWx0ZXJuYXRlLCBmaWdtZW50LCBhYmJyZXZpYXRpb24KKworICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNvcnQgdGhlIHR5cGVzLCBhc3N1bWluZyB0aGV5IGFwcGVhciBpbiB0aGlzIG9yZGVyLiIiIgorICBmb3IgZGF0YSBpbiBSZWFkVUNETGluZXMoaW5fZmlsZSk6CisgICAgc3RhcnQgPSBkYXRhWzJdCisgICAgZW5kID0gZGF0YVszXQorICAgIGlmIHN0YXJ0ICE9IGVuZDoKKyAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5hbWVBbGlhc2VzLnR4dCBoYXMgYW4gYWxpYXMgZm9yIGEgcmFuZ2UgJTA0bFguLiUwNGxYIiAlCisgICAgICAgICAgICAgICAgICAgICAgIChzdGFydCwgZW5kKSkKKyAgICBmaWVsZHMgPSBkYXRhWzRdCisgICAgaWYgbGVuKGZpZWxkcykgPT0gMjoKKyAgICAgIGFsaWFzID0gImNvcnJlY3Rpb249IiArIGZpZWxkc1sxXQorICAgIGVsc2U6CisgICAgICBhbGlhcyA9IGZpZWxkc1syXSArICc9JyArIGZpZWxkc1sxXQorICAgIHVwZGF0ZSA9IChOZWVkVG9TZXRBbHdheXMsIERvU2V0TmFtZUFsaWFzLCBhbGlhcykKKyAgICBVcGRhdGVQcm9wcyhzdGFydCwgZW5kLCB1cGRhdGUpCisKKworZGVmIE5lZWRUb1NldE51bWVyaWNWYWx1ZShudiwgc3RhcnQsIGVuZCwgY19wcm9wcyk6CisgIGNfbnYgPSBjX3Byb3BzLmdldCgibnYiKQorICBpZiBjX252ID09IE5vbmU6CisgICAgIyBEZXJpdmVkTnVtZXJpY1ZhbHVlcy50eHQgYWRkcyBhIE51bWVyaWNfVmFsdWUuCisgICAgYXNzZXJ0ICJudCIgbm90IGluIGNfcHJvcHMKKyAgICByZXR1cm4gVHJ1ZQorICBpZiBudiAhPSBjX252OgorICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuaWNvZGVEYXRhLnR4dCBoYXMgbnY9JXMgZm9yICUwNGxYLi4lMDRsWCAiICsKKyAgICAgICAgICAgICAgICAgICAgICJidXQgRGVyaXZlZE51bWVyaWNWYWx1ZXMudHh0IGhhcyBudj0lcyIgJQorICAgICAgICAgICAgICAgICAgICAgKGNfbnYsIHN0YXJ0LCBlbmQsIG52KSkKKyAgcmV0dXJuIEZhbHNlCisKKworZGVmIERvU2V0TnVtZXJpY1ZhbHVlKG52LCBzdGFydCwgZW5kLCBjX3Byb3BzKToKKyAgY19wcm9wcy51cGRhdGUoeyJudCI6ICJOdSIsICJudiI6IG52fSkKKworCitkZWYgUGFyc2VEZXJpdmVkTnVtZXJpY1ZhbHVlcyhpbl9maWxlKToKKyAgIiIiUGFyc2VzIERlcml2ZWROdW1lcmljVmFsdWVzLnR4dC4KKyAgRm9yIG1vc3QgY2hhcmFjdGVycywgdGhlIG51bWVyaWMgdHlwZSAmIHZhbHVlIHdlcmUgcGFyc2VkIHByZXZpb3VzbHkKKyAgZnJvbSBVbmljb2RlRGF0YS50eHQgYnV0IHRoYXQgZG9lcyBub3Qgc2hvdyB0aGUgdmFsdWVzIGZvciBIYW4gY2hhcmFjdGVycy4KKyAgSGVyZSB3ZSBjaGVjayB0aGF0IHZhbHVlcyBtYXRjaCB0aG9zZSBmcm9tIFVuaWNvZGVEYXRhLnR4dAorICBhbmQgYWRkIG5ldyBvbmVzLiIiIgorICAjIElnbm9yZSB0aGUgQG1pc3NpbmcgbGluZSB3aGljaCBoYXMgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBmaWVsZHMsCisgICMgYW5kIHRoZSAiTmFOIiBpbiB0aGUgd3JvbmcgZmllbGQgKGF0IGxlYXN0IGluIFVuaWNvZGUgNS4xLi42LjEpLgorICAjIEFsc28sICJOYU4iIGlzIGp1c3QgdGhlIE51bWVyaWMgbnVsbCB2YWx1ZSBhbnl3YXkuCisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlKToKKyAgICAjIENvbmRpdGlvbmFsIHVwZGF0ZSB0byB0aGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgNHRoIGZpZWxkLgorICAgIHVwZGF0ZSA9IChOZWVkVG9TZXROdW1lcmljVmFsdWUsIERvU2V0TnVtZXJpY1ZhbHVlLCBkYXRhWzRdWzNdKQorICAgIFVwZGF0ZVByb3BzKGRhdGFbMl0sIGRhdGFbM10sIHVwZGF0ZSkKKworCitkZWYgUGFyc2VDYXNlRm9sZGluZyhpbl9maWxlKToKKyAgZm9yIGRhdGEgaW4gUmVhZFVDRExpbmVzKGluX2ZpbGUsIHdhbnRfbWlzc2luZz1UcnVlKToKKyAgICBpZiBkYXRhWzBdID09ICJtaXNzaW5nIjoKKyAgICAgIGFzc2VydCBkYXRhWzJdWzBdID09ICJDIiAgIyBjb21tb24gdG8gc2NmICYgY2YKKyAgICAgIFNldERlZmF1bHRWYWx1ZSgic2NmIiwgZGF0YVsyXVsxXSkKKyAgICAgIFNldERlZmF1bHRWYWx1ZSgiY2YiLCBkYXRhWzJdWzFdKQorICAgIGVsc2U6CisgICAgICAjIHR5cGUgPT0gInJhbmdlIgorICAgICAgc3RhcnQgPSBkYXRhWzJdCisgICAgICBlbmQgPSBkYXRhWzNdCisgICAgICBzdGF0dXMgPSBkYXRhWzRdWzFdCisgICAgICBtYXBwaW5nID0gZGF0YVs0XVsyXQorICAgICAgYXNzZXJ0IHN0YXR1cyBpbiAiQ1NGVCIKKyAgICAgIGlmIHN0YXR1cyA9PSAiQyI6CisgICAgICAgIFNldFByb3BzKHN0YXJ0LCBlbmQsIHsic2NmIjogbWFwcGluZywgImNmIjogbWFwcGluZ30pCisgICAgICBlbGlmIHN0YXR1cyA9PSAiUyI6CisgICAgICAgIFNldFByb3BlcnR5VmFsdWUoInNjZiIsIG1hcHBpbmcsIHN0YXJ0LCBlbmQpCisgICAgICBlbGlmIHN0YXR1cyA9PSAiRiI6CisgICAgICAgIFNldFByb3BlcnR5VmFsdWUoImNmIiwgbWFwcGluZywgc3RhcnQsIGVuZCkKKyAgICAgIGVsc2U6ICAjIHN0YXR1cyA9PSAiVCIKKyAgICAgICAgU2V0UHJvcGVydHlWYWx1ZSgiVHVya2ljX0Nhc2VfRm9sZGluZyIsIG1hcHBpbmcsIHN0YXJ0LCBlbmQpCisKKworZGVmIERvU2V0Q29uZGl0aW9uYWxDYXNlTWFwcGluZ3MoY2NtLCBzdGFydCwgZW5kLCBjX3Byb3BzKToKKyAgaWYgIkNvbmRpdGlvbmFsX0Nhc2VfTWFwcGluZ3MiIGluIGNfcHJvcHM6CisgICAgY19wcm9wc1siQ29uZGl0aW9uYWxfQ2FzZV9NYXBwaW5ncyJdICs9ICcsJyArIGNjbQorICBlbHNlOgorICAgIGNfcHJvcHNbIkNvbmRpdGlvbmFsX0Nhc2VfTWFwcGluZ3MiXSA9IGNjbQorCisKK2RlZiBQYXJzZVNwZWNpYWxDYXNpbmcoaW5fZmlsZSk6CisgIGZvciBkYXRhIGluIFJlYWRVQ0RMaW5lcyhpbl9maWxlLCB3YW50X21pc3Npbmc9VHJ1ZSk6CisgICAgaWYgZGF0YVswXSA9PSAibWlzc2luZyI6CisgICAgICBTZXREZWZhdWx0VmFsdWUoImxjIiwgZGF0YVsyXVswXSkKKyAgICAgIFNldERlZmF1bHRWYWx1ZSgidGMiLCBkYXRhWzJdWzFdKQorICAgICAgU2V0RGVmYXVsdFZhbHVlKCJ1YyIsIGRhdGFbMl1bMl0pCisgICAgZWxzZToKKyAgICAgICMgdHlwZSA9PSAicmFuZ2UiCisgICAgICBzdGFydCA9IGRhdGFbMl0KKyAgICAgIGVuZCA9IGRhdGFbM10KKyAgICAgIGZpZWxkcyA9IGRhdGFbNF0KKyAgICAgIGlmIGxlbihmaWVsZHMpIDwgNSBvciBub3QgZmllbGRzWzRdOgorICAgICAgICAjIFVuY29uZGl0aW9uYWwgbWFwcGluZ3MuCisgICAgICAgIFNldFByb3BzKHN0YXJ0LCBlbmQsIHsibGMiOiBmaWVsZHNbMV0sICJ0YyI6IGZpZWxkc1syXSwgInVjIjogZmllbGRzWzNdfSkKKyAgICAgIGVsc2U6CisgICAgICAgICMgQ29uZGl0aW9uYWxfQ2FzZV9NYXBwaW5ncworICAgICAgICBjY20gPSAoZmllbGRzWzRdICsgIjpsYz0iICsgZmllbGRzWzFdICsKKyAgICAgICAgICAgICAgICImdGM9IiArIGZpZWxkc1syXSArICImdWM9IiArIGZpZWxkc1szXSkKKyAgICAgICAgdXBkYXRlID0gKE5lZWRUb1NldEFsd2F5cywgRG9TZXRDb25kaXRpb25hbENhc2VNYXBwaW5ncywgY2NtKQorICAgICAgICBVcGRhdGVQcm9wcyhzdGFydCwgZW5kLCB1cGRhdGUpCisKKyMgUG9zdHByb2Nlc3NpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisKK2RlZiBDb21wYWN0QmxvY2soYiwgaSk6CisgIGFzc2VydCBiWzBdID09IF9zdGFydHNbaV0KKyAgb3JpZ19pID0gaQorICAjIENvdW50IHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgZWFjaCBwcm9wZXJ0eSdzIHZhbHVlIGluIHRoaXMgYmxvY2suCisgIG51bV9jcF9zb19mYXIgPSAwCisgIHByb3BfY291bnRlcnMgPSB7fQorICB3aGlsZSBUcnVlOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgIGlmIHN0YXJ0ID4gYlsxXTogYnJlYWsKKyAgICBudW1fY3BfaW5fdGhpc19yYW5nZSA9IF9zdGFydHNbaSArIDFdIC0gc3RhcnQKKyAgICBwcm9wcyA9IF9wcm9wc1tpXQorICAgIGZvciAocG5hbWUsIHZhbHVlKSBpbiBwcm9wcy5pdGVyaXRlbXMoKToKKyAgICAgIGlmIHBuYW1lIGluIHByb3BfY291bnRlcnM6CisgICAgICAgIGNvdW50ZXIgPSBwcm9wX2NvdW50ZXJzW3BuYW1lXQorICAgICAgZWxzZToKKyAgICAgICAgY291bnRlciA9IHtfbnVsbF9vcl9kZWZhdWx0c1twbmFtZV06IG51bV9jcF9zb19mYXJ9CisgICAgICAgIHByb3BfY291bnRlcnNbcG5hbWVdID0gY291bnRlcgorICAgICAgaWYgdmFsdWUgaW4gY291bnRlcjoKKyAgICAgICAgY291bnRlclt2YWx1ZV0gKz0gbnVtX2NwX2luX3RoaXNfcmFuZ2UKKyAgICAgIGVsc2U6CisgICAgICAgIGNvdW50ZXJbdmFsdWVdID0gbnVtX2NwX2luX3RoaXNfcmFuZ2UKKyAgICAjIEFsc28gY291bnQgZGVmYXVsdCB2YWx1ZXMgZm9yIHByb3BlcnRpZXMgdGhhdCBkbyBub3Qgb2NjdXIgaW4gYSByYW5nZS4KKyAgICBmb3IgcG5hbWUgaW4gcHJvcF9jb3VudGVyczoKKyAgICAgIGlmIHBuYW1lIG5vdCBpbiBwcm9wczoKKyAgICAgICAgY291bnRlciA9IHByb3BfY291bnRlcnNbcG5hbWVdCisgICAgICAgIHZhbHVlID0gX251bGxfb3JfZGVmYXVsdHNbcG5hbWVdCisgICAgICAgIGNvdW50ZXJbdmFsdWVdICs9IG51bV9jcF9pbl90aGlzX3JhbmdlCisgICAgbnVtX2NwX3NvX2ZhciArPSBudW1fY3BfaW5fdGhpc19yYW5nZQorICAgICMgSW52YXJpYW50OiBGb3IgZWFjaCBjb3VudGVyLCB0aGUgc3VtIG9mIGNvdW50cyBtdXN0IGVxdWFsIG51bV9jcF9zb19mYXIuCisgICAgaSArPSAxCisgICMgRm9yIGVhY2ggcHJvcGVydHkgdGhhdCBvY2N1cnMgd2l0aGluIHRoaXMgYmxvY2ssCisgICMgc2V0IHRoZSBtb3N0IGNvbW1vbiB2YWx1ZSBhcyBhIGJsb2NrIHByb3BlcnR5IHZhbHVlLgorICBiX3Byb3BzID0gYlsyXQorICBmb3IgKHBuYW1lLCBjb3VudGVyKSBpbiBwcm9wX2NvdW50ZXJzLml0ZXJpdGVtcygpOgorICAgIG1heF92YWx1ZSA9IE5vbmUKKyAgICBtYXhfY291bnQgPSAwCisgICAgbnVtX3VuaXF1ZSA9IDAKKyAgICBmb3IgKHZhbHVlLCBjb3VudCkgaW4gY291bnRlci5pdGVyaXRlbXMoKToKKyAgICAgIGlmIGNvdW50ID4gbWF4X2NvdW50OgorICAgICAgICBtYXhfdmFsdWUgPSB2YWx1ZQorICAgICAgICBtYXhfY291bnQgPSBjb3VudAorICAgICAgaWYgY291bnQgPT0gMTogbnVtX3VuaXF1ZSArPSAxCisgICAgaWYgbWF4X3ZhbHVlICE9IF9udWxsX29yX2RlZmF1bHRzW3BuYW1lXToKKyAgICAgICMgQXZvaWQgcGlja2luZyByYW5kb21seSBhbW9uZyBzZXZlcmFsIHVuaXF1ZSB2YWx1ZXMuCisgICAgICBpZiAobWF4X2NvdW50ID4gMSBvciBudW1fdW5pcXVlID09IDEpOgorICAgICAgICBiX3Byb3BzW3BuYW1lXSA9IG1heF92YWx1ZQorICAjIEZvciBlYWNoIHJhbmdlIGFuZCBwcm9wZXJ0eSwgcmVtb3ZlIHRoZSBkZWZhdWx0K2Jsb2NrIHZhbHVlCisgICMgYnV0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGF0IHByb3BlcnR5IHdhcyBub3Qgc2V0CisgICMgKGkuZS4sIGl0IHVzZWQgdG8gaW5oZXJpdCB0aGUgZGVmYXVsdCB2YWx1ZSkuCisgIGJfZGVmYXVsdHMgPSBfbnVsbF9vcl9kZWZhdWx0cy5jb3B5KCkKKyAgYl9kZWZhdWx0cy51cGRhdGUoYl9wcm9wcykKKyAgaSA9IG9yaWdfaQorICB3aGlsZSBUcnVlOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgIGlmIHN0YXJ0ID4gYlsxXTogYnJlYWsKKyAgICBwcm9wcyA9IF9wcm9wc1tpXQorICAgIGZvciBwbmFtZSBpbiBwcm9wX2NvdW50ZXJzOgorICAgICAgaWYgcG5hbWUgaW4gcHJvcHM6CisgICAgICAgIGlmIHByb3BzW3BuYW1lXSA9PSBiX2RlZmF1bHRzW3BuYW1lXTogZGVsIHByb3BzW3BuYW1lXQorICAgICAgZWxpZiBwbmFtZSBpbiBiX3Byb3BzOgorICAgICAgICAjIGJfcHJvcHMgb25seSBoYXMgbm9uLWRlZmF1bHQgdmFsdWVzLgorICAgICAgICAjIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCB1c2VkIHRvIGJlIGluaGVyaXRlZC4KKyAgICAgICAgcHJvcHNbcG5hbWVdID0gX251bGxfb3JfZGVmYXVsdHNbcG5hbWVdCisgICAgaSArPSAxCisgICMgUmV0dXJuIHRoZSBfc3RhcnRzIGluZGV4IG9mIHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGlzIGJsb2NrLgorICByZXR1cm4gaQorCisKK2RlZiBDb21wYWN0Tm9uQmxvY2sobGltaXQsIGkpOgorICAiIiJSZW1vdmUgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSBiZXR3ZWVuLWJsb2NrIHJhbmdlcy4iIiIKKyAgd2hpbGUgVHJ1ZToKKyAgICBzdGFydCA9IF9zdGFydHNbaV0KKyAgICBpZiBzdGFydCA+PSBsaW1pdDogYnJlYWsKKyAgICBwcm9wcyA9IF9wcm9wc1tpXQorICAgIGZvciBwbmFtZSBpbiBwcm9wcy5rZXlzKCk6ICAjIC5rZXlzKCkgaXMgYSBjb3B5IHNvIHdlIGNhbiBkZWwgcHJvcHNbcG5hbWVdLgorICAgICAgaWYgcHJvcHNbcG5hbWVdID09IF9udWxsX29yX2RlZmF1bHRzW3BuYW1lXTogZGVsIHByb3BzW3BuYW1lXQorICAgIGkgKz0gMQorICAjIFJldHVybiB0aGUgX3N0YXJ0cyBpbmRleCBvZiB0aGUgZmlyc3QgcmFuZ2UgYWZ0ZXIgdGhpcyBibG9jay4KKyAgcmV0dXJuIGkKKworCitkZWYgQ29tcGFjdEJsb2NrcygpOgorICAiIiJPcHRpbWl6ZXMgYmxvY2sgcHJvcGVydGllcy4KKyAgU2V0cyBwcm9wZXJ0aWVzIG9uIGJsb2NrcyB0byB0aGUgbW9zdCBjb21tb25seSB1c2VkIHZhbHVlcywKKyAgYW5kIHJlbW92ZXMgZGVmYXVsdCtibG9jayB2YWx1ZXMgZnJvbSBjb2RlIHBvaW50IHByb3BlcnRpZXMuIiIiCisgICMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBib3VuZGFyeSBpbiBfc3RhcnRzIGZvciBlYWNoIGJsb2NrCisgICMgc28gdGhhdCB0aGUgc2ltcGxlIG1peGluZyBtZXRob2QgYmVsb3cgd29ya3MuCisgIGZvciBiIGluIF9ibG9ja3M6IEFkZEJvdW5kYXJ5KGJbMF0pCisgICMgV2FsayB0aHJvdWdoIHJhbmdlcyBhbmQgYmxvY2tzIHRvZ2V0aGVyLgorICBpID0gMAorICBmb3IgYiBpbiBfYmxvY2tzOgorICAgIGJfc3RhcnQgPSBiWzBdCisgICAgaWYgX3N0YXJ0c1tpXSA8IGJfc3RhcnQ6CisgICAgICBpID0gQ29tcGFjdE5vbkJsb2NrKGJfc3RhcnQsIGkpCisgICAgaSA9IENvbXBhY3RCbG9jayhiLCBpKQorICBDb21wYWN0Tm9uQmxvY2soMHgxMTAwMDAsIGkpCisKKyMgT3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisKK2RlZiBBcHBlbmRSYW5nZShmaWVsZHMsIHN0YXJ0LCBlbmQpOgorICBpZiBzdGFydCA9PSBlbmQ6CisgICAgZmllbGRzLmFwcGVuZCgiJTA0bFgiICUgc3RhcnQpCisgIGVsc2U6CisgICAgZmllbGRzLmFwcGVuZCgiJTA0bFguLiUwNGxYIiAlIChzdGFydCwgZW5kKSkKKworCitkZWYgQXBwZW5kUHJvcHMoZmllbGRzLCBwcm9wcyk6CisgICMgU29ydCBwcm9wZXJ0eSBuYW1lcyAocHJvcHMga2V5cykgYnkgdGhlaXIgbm9ybWFsaXplZCBmb3JtcworICAjIGFuZCBvdXRwdXQgcHJvcGVydGllcyBpbiB0aGF0IG9yZGVyLgorICBmb3IgcG5hbWUgaW4gc29ydGVkKHByb3BzLCBrZXk9Tm9ybVByb3BOYW1lKToKKyAgICB2YWx1ZSA9IHByb3BzW3BuYW1lXQorICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgorICAgICAgaWYgbm90IHZhbHVlOiBwbmFtZSA9ICItIiArIHBuYW1lCisgICAgICBmaWVsZHMuYXBwZW5kKHBuYW1lKQorICAgIGVsc2U6CisgICAgICBmaWVsZHMuYXBwZW5kKCIlcz0lcyIgJSAocG5hbWUsIHZhbHVlKSkKKworCitkZWYgV3JpdGVGaWVsZHNSYW5nZVByb3BzKGZpZWxkcywgc3RhcnQsIGVuZCwgcHJvcHMsIG91dF9maWxlKToKKyAgQXBwZW5kUmFuZ2UoZmllbGRzLCBzdGFydCwgZW5kKQorICBBcHBlbmRQcm9wcyhmaWVsZHMsIHByb3BzKQorICBvdXRfZmlsZS53cml0ZSgiOyIuam9pbihmaWVsZHMpKQorICBvdXRfZmlsZS53cml0ZSgiXG4iKQorCisKK2RlZiBXcml0ZVByZXBhcnNlZFVDRChvdXRfZmlsZSk6CisgIG91dF9maWxlLndyaXRlKCIjIFByZXBhcnNlZCBVQ0QgZ2VuZXJhdGVkIGJ5IElDVSBwcmVwYXJzZXVjZC5weVxuIik7CisgIGlmIF9jb3B5cmlnaHQ6IG91dF9maWxlLndyaXRlKF9jb3B5cmlnaHQgKyAiXG4iKQorICBpZiBfdGVybXNfb2ZfdXNlOiBvdXRfZmlsZS53cml0ZShfdGVybXNfb2ZfdXNlICsgIlxuIikKKyAgb3V0X2ZpbGUud3JpdGUoInVjZDslc1xuXG4iICUgX3VjZF92ZXJzaW9uKQorICAjIFNvcnQgcHJvcGVydHkgbmFtZXMgKHByb3BzIGtleXMpIGJ5IHRoZWlyIG5vcm1hbGl6ZWQgZm9ybXMKKyAgIyBhbmQgb3V0cHV0IHByb3BlcnRpZXMgaW4gdGhhdCBvcmRlci4KKyAgcG5hbWVzID0gc29ydGVkKF9udWxsX3ZhbHVlcywga2V5PU5vcm1Qcm9wTmFtZSkKKyAgZm9yIHBuYW1lIGluIHBuYW1lczoKKyAgICBwcm9wID0gX3Byb3BlcnRpZXNbcG5hbWVdCisgICAgb3V0X2ZpbGUud3JpdGUoIjsiLmpvaW4oWyJwcm9wZXJ0eSIsIHByb3BbMF1dICsgcHJvcFsxXSkpCisgICAgb3V0X2ZpbGUud3JpdGUoIlxuIikKKyAgb3V0X2ZpbGUud3JpdGUoIlxuIikKKyAgb3V0X2ZpbGUud3JpdGUoIjsiLmpvaW4oWyJiaW5hcnkiXSArIF9iaW5hcnlfdmFsdWVzWyJOIl0pKQorICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICBvdXRfZmlsZS53cml0ZSgiOyIuam9pbihbImJpbmFyeSJdICsgX2JpbmFyeV92YWx1ZXNbIlkiXSkpCisgIG91dF9maWxlLndyaXRlKCJcbiIpCisgIGZvciBwbmFtZSBpbiBwbmFtZXM6CisgICAgcHJvcCA9IF9wcm9wZXJ0aWVzW3BuYW1lXQorICAgIHNob3J0X25hbWVzID0gcHJvcFsyXQorICAgIGlmIHNob3J0X25hbWVzIGFuZCBwcm9wWzBdICE9ICJCaW5hcnkiOgorICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNob3J0X25hbWVzKToKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoIjsiLmpvaW4oWyJ2YWx1ZSIsIHByb3BbMV1bMF1dICsgcHJvcFszXVtuYW1lXSkpCisgICAgICAgIG91dF9maWxlLndyaXRlKCJcbiIpCisgIG91dF9maWxlLndyaXRlKCJcbiIpCisgICMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBib3VuZGFyeSBpbiBfc3RhcnRzIGZvciBlYWNoCisgICMgcmFuZ2Ugb2YgZGF0YSB3ZSBtaXggaW50byB0aGUgb3V0cHV0LAorICAjIHNvIHRoYXQgdGhlIHNpbXBsZSBtaXhpbmcgbWV0aG9kIGJlbG93IHdvcmtzLgorICBmb3IgYiBpbiBfYmxvY2tzOiBBZGRCb3VuZGFyeShiWzBdKQorICBmb3IgciBpbiBfYWxnX25hbWVzX3JhbmdlczogQWRkQm91bmRhcnkoclswXSkKKyAgZm9yIGggaW4gX2gxOiBBZGRCb3VuZGFyeShoWzBdKQorICBmb3IgaCBpbiBfaDI6IEFkZEJvdW5kYXJ5KGhbMF0pCisgICMgV3JpdGUgdGhlIHByZXBhcnNlZCBkYXRhLgorICAjIFRPRE86IGRvYyBzeW50YXgKKyAgIyAtIHBwdWNkLnR4dCA9IHByZXBhcnNlZCBVQ0QKKyAgIyAtIE9ubHkgd2hvbGUtbGluZSBjb21tZW50cyBzdGFydGluZyB3aXRoICMsIG5vIGlubGluZSBjb21tZW50cy4KKyAgIyAtIGRlZmF1bHRzIG11c3QgcHJlY2VkZSBhbnkgYmxvY2sgb3IgY3AgbGluZXMKKyAgIyAtIGJsb2NrO2EuLmIgbXVzdCBwcmVjZWRlIGFueSBjcCBsaW5lcyB3aXRoIGNvZGUgcG9pbnRzIGluIGEuLmIKKyAgIyAtIFNvbWUgY29kZSBtYXkgcmVxdWlyZSB0aGF0IGFsbCBjcCBsaW5lcyB3aXRoIGNvZGUgcG9pbnRzIGluIGEuLmIKKyAgIyAgIGFwcGVhciBiZXR3ZWVuIGJsb2NrO2EuLmIgYW5kIHRoZSBuZXh0IGJsb2NrIGxpbmUuCisgICMgLSBibG9jayBsaW5lcyBhcmUgbm90IHJlcXVpcmVkOyBjcCBsaW5lcyBjYW4gaGF2ZSBkYXRhIGZvcgorICAjICAgcmFuZ2VzIG91dHNpZGUgb2YgYmxvY2tzLgorICBXcml0ZUZpZWxkc1JhbmdlUHJvcHMoWyJkZWZhdWx0cyJdLCAwLCAweDEwZmZmZiwgX2RlZmF1bHRzLCBvdXRfZmlsZSkKKyAgaV9ibG9ja3MgPSAwCisgIGlfYWxnID0gMAorICBpX2gxID0gMAorICBpX2gyID0gMAorICBmb3IgaSBpbiB4cmFuZ2UobGVuKF9zdGFydHMpIC0gMSk6CisgICAgc3RhcnQgPSBfc3RhcnRzW2ldCisgICAgZW5kID0gX3N0YXJ0c1tpICsgMV0gLSAxCisgICAgIyBCbG9jayB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy4KKyAgICBpZiBpX2Jsb2NrcyA8IGxlbihfYmxvY2tzKSBhbmQgc3RhcnQgPT0gX2Jsb2Nrc1tpX2Jsb2Nrc11bMF06CisgICAgICBiID0gX2Jsb2Nrc1tpX2Jsb2Nrc10KKyAgICAgIFdyaXRlRmllbGRzUmFuZ2VQcm9wcyhbIlxuYmxvY2siXSwgYlswXSwgYlsxXSwgYlsyXSwgb3V0X2ZpbGUpCisgICAgICBpX2Jsb2NrcyArPSAxCisgICAgIyBOYW1lc0xpc3QgaDEgaGVhZGluZyAoZm9yIFttb3N0IG9mXSBhIGJsb2NrKS4KKyAgICBpZiBpX2gxIDwgbGVuKF9oMSkgYW5kIHN0YXJ0ID09IF9oMVtpX2gxXVswXToKKyAgICAgIGggPSBfaDFbaV9oMV0KKyAgICAgIG91dF9maWxlLndyaXRlKCIjICUwNGxYLi4lMDRsWCAlc1xuIiAlIChoWzBdLCBoWzFdLCBoWzJdKSkKKyAgICAgIGlfaDEgKz0gMQorICAgICMgQWxnb3JpdGhtaWMtbmFtZXMgcmFuZ2UuCisgICAgaWYgaV9hbGcgPCBsZW4oX2FsZ19uYW1lc19yYW5nZXMpIGFuZCBzdGFydCA9PSBfYWxnX25hbWVzX3Jhbmdlc1tpX2FsZ11bMF06CisgICAgICByID0gX2FsZ19uYW1lc19yYW5nZXNbaV9hbGddCisgICAgICBmaWVsZHMgPSBbImFsZ25hbWVzcmFuZ2UiXQorICAgICAgQXBwZW5kUmFuZ2UoZmllbGRzLCByWzBdLCByWzFdKQorICAgICAgZmllbGRzLmV4dGVuZChyWzI6XSkKKyAgICAgIG91dF9maWxlLndyaXRlKCI7Ii5qb2luKGZpZWxkcykpCisgICAgICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICAgICAgaV9hbGcgKz0gMQorICAgICMgTmFtZXNMaXN0IGgyIGhlYWRpbmcuCisgICAgaWYgaV9oMiA8IGxlbihfaDIpIGFuZCBzdGFydCA9PSBfaDJbaV9oMl1bMF06CisgICAgICBvdXRfZmlsZS53cml0ZSgiIyAlc1xuIiAlIChfaDJbaV9oMl1bMV0pKQorICAgICAgaV9oMiArPSAxCisgICAgIyBDb2RlIHBvaW50L3JhbmdlIGRhdGEuCisgICAgcHJvcHMgPSBfcHJvcHNbaV0KKyAgICAjIE9taXQgcmFuZ2VzIHdpdGggb25seSBkZWZhdWx0K2Jsb2NrIHByb3BlcnRpZXMuCisgICAgaWYgcHJvcHM6CisgICAgICBXcml0ZUZpZWxkc1JhbmdlUHJvcHMoWyJjcCJdLCBzdGFydCwgZW5kLCBwcm9wcywgb3V0X2ZpbGUpCisKKyMgV3JpdGUgTm9ybWFsaXplcjIgaW5wdXQgZmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisjIFBvcnRlZCBmcm9tIGdlbm5vcm0vc3RvcmUuYy4KKworZGVmIFdyaXRlQWxsQ0Mob3V0X2ZpbGUpOgorICBvdXRfZmlsZS53cml0ZSgiIyBDYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzIChjY2MpIHZhbHVlc1xuIik7CisgIHByZXZfc3RhcnQgPSAwCisgIHByZXZfY2MgPSAwCisgIGZvciBpIGluIHhyYW5nZShsZW4oX3N0YXJ0cykpOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgY2MgPSBwcm9wcy5nZXQoImNjYyIpCisgICAgaWYgbm90IGNjOiBjYyA9IDAKKyAgICBpZiBwcmV2X2NjICE9IGNjOgorICAgICAgaWYgcHJldl9jYyAhPSAwOgorICAgICAgICBsYXN0X2NvZGVfcG9pbnQgPSBzdGFydCAtIDEKKyAgICAgICAgaWYgcHJldl9zdGFydCA9PSBsYXN0X2NvZGVfcG9pbnQ6CisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFg6JWRcbiIgJSAobGFzdF9jb2RlX3BvaW50LCBwcmV2X2NjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WC4uJTA0WDolZFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZfc3RhcnQsIGxhc3RfY29kZV9wb2ludCwgcHJldl9jYykpCisgICAgICBwcmV2X3N0YXJ0ID0gc3RhcnQKKyAgICAgIHByZXZfY2MgPSBjYworCisKK2RlZiBIYXNNYXBwaW5nKGMpOgorICBwcm9wcyA9IEdldFByb3BzKGMpCisgIGR0ID0gcHJvcHMuZ2V0KCJkdCIpCisgIHJldHVybiBkdCBhbmQgZHQgIT0gIk5vbmUiCisKKworZGVmIEhhc09uZVdheU1hcHBpbmcoYyk6CisgIHdoaWxlIFRydWU6CisgICAgcHJvcHMgPSBHZXRQcm9wcyhjKQorICAgIGR0ID0gcHJvcHMuZ2V0KCJkdCIpCisgICAgaWYgbm90IGR0IG9yIGR0ID09ICJOb25lIjoKKyAgICAgIHJldHVybiBGYWxzZSAgIyBubyBtYXBwaW5nCisgICAgZWxpZiBkdCA9PSAiQ2FuIjoKKyAgICAgICMgVGhlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIGlzIGEgb25lLXdheSBtYXBwaW5nIGlmCisgICAgICAjIC0gaXQgZG9lcyBub3QgbWFwIHRvIGV4YWN0bHkgdHdvIGNvZGUgcG9pbnRzCisgICAgICAjIC0gYyBoYXMgY2NjIT0wCisgICAgICAjIC0gYyBoYXMgdGhlIENvbXBvc2l0aW9uX0V4Y2x1c2lvbiBwcm9wZXJ0eQorICAgICAgIyAtIGl0cyBzdGFydGVyIGhhcyBhIG9uZS13YXkgbWFwcGluZyAobG9vcCBmb3IgdGhpcykKKyAgICAgICMgLSBpdHMgbm9uLXN0YXJ0ZXIgZGVjb21wb3NlcworICAgICAgbmZkID0gcHJvcHNbImRtIl0uc3BsaXQoKQorICAgICAgaWYgKGxlbihuZmQpICE9IDIgb3IKKyAgICAgICAgICBwcm9wcy5nZXQoImNjYyIpIG9yCisgICAgICAgICAgcHJvcHMuZ2V0KCJDb21wX0V4Iikgb3IKKyAgICAgICAgICBIYXNNYXBwaW5nKGludChuZmRbMV0sIDE2KSkpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgYyA9IGludChuZmRbMF0sIDE2KSAgIyBjb250aW51ZQorICAgIGVsc2U6CisgICAgICAjIGMgaGFzIGEgY29tcGF0aWJpbGl0eSBtYXBwaW5nLgorICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgV3JpdGVOb3JtMk5GQ1RleHRGaWxlKHBhdGgpOgorICB5ZWFyID0gZGF0ZXRpbWUuZGF0ZS50b2RheSgpLnN0cmZ0aW1lKCIlWSIpCisgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgIm5mYy50eHQiKSwgInciKSBhcyBvdXRfZmlsZToKKyAgICBvdXRfZmlsZS53cml0ZSgKKyAgICAgICAgIiIiIyBDb3B5cmlnaHQgKEMpIDE5OTktIiIiICsgeWVhciArCisgICAgICAgICIiIiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworIyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgZmlsZSBuYW1lOiBuZmMudHh0CisjCisjIG1hY2hpbmUtZ2VuZXJhdGVkIGJ5IElDVSBwcmVwYXJzZXVjZC5weQorIworIyBDb21wbGV0ZSBkYXRhIGZvciBVbmljb2RlIE5GQyBub3JtYWxpemF0aW9uLgorCisqIFVuaWNvZGUgIiIiICsgX3VjZF92ZXJzaW9uICsgIiIiCisKKyIiIikKKyAgICBXcml0ZUFsbENDKG91dF9maWxlKQorICAgIG91dF9maWxlLndyaXRlKCJcbiMgQ2Fub25pY2FsIGRlY29tcG9zaXRpb24gbWFwcGluZ3NcbiIpCisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihfc3RhcnRzKSAtIDEpOgorICAgICAgc3RhcnQgPSBfc3RhcnRzW2ldCisgICAgICBlbmQgPSBfc3RhcnRzW2kgKyAxXSAtIDEKKyAgICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgICBkbSA9IHByb3BzLmdldCgiZG0iKQorICAgICAgaWYgZG0gYW5kIGRtWzBdICE9ICc8JyBhbmQgcHJvcHNbImR0Il0gPT0gIkNhbiI6CisgICAgICAgIGFzc2VydCBzdGFydCA9PSBlbmQKKyAgICAgICAgIyBUaGUgQ29tcF9FeD1GdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbiBwcm9wZXJ0eSB0ZWxscyB1cworICAgICAgICAjIHdoZXRoZXIgdGhlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIHJvdW5kLXRyaXBzLgorICAgICAgICBzZXBhcmF0b3IgPSAnPicgaWYgcHJvcHMuZ2V0KCJDb21wX0V4IikgZWxzZSAnPScKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFglcyVzXG4iICUgKHN0YXJ0LCBzZXBhcmF0b3IsIGRtKSkKKworCitkZWYgV3JpdGVOb3JtMk5GS0NUZXh0RmlsZShwYXRoKToKKyAgeWVhciA9IGRhdGV0aW1lLmRhdGUudG9kYXkoKS5zdHJmdGltZSgiJVkiKQorICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBhdGgsICJuZmtjLnR4dCIpLCAidyIpIGFzIG91dF9maWxlOgorICAgIG91dF9maWxlLndyaXRlKAorICAgICAgICAiIiIjIENvcHlyaWdodCAoQykgMTk5OS0iIiIgKyB5ZWFyICsKKyAgICAgICAgIiIiLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisjIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBmaWxlIG5hbWU6IG5ma2MudHh0CisjCisjIG1hY2hpbmUtZ2VuZXJhdGVkIGJ5IElDVSBwcmVwYXJzZXVjZC5weQorIworIyBEYXRhIGZvciBVbmljb2RlIE5GS0Mgbm9ybWFsaXphdGlvbi4KKyMgVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgY29tcGF0aWJpbGl0eSBkZWNvbXBvc2l0aW9uIG1hcHBpbmdzLAorIyBwbHVzIHRob3NlIGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9ucyB0aGF0IGNoYW5nZSBmcm9tIE5GQyByb3VuZC10cmlwIG1hcHBpbmdzCisjIHRvIE5GS0Mgb25lLXdheSBtYXBwaW5ncy4KKyMgVXNlIHRoaXMgZmlsZSBhcyB0aGUgc2Vjb25kIGdlbm5vcm0yIGlucHV0IGZpbGUgYWZ0ZXIgbmZjLnR4dC4KKworKiBVbmljb2RlICIiIiArIF91Y2RfdmVyc2lvbiArICIiIgorCisiIiIpCisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihfc3RhcnRzKSAtIDEpOgorICAgICAgc3RhcnQgPSBfc3RhcnRzW2ldCisgICAgICBlbmQgPSBfc3RhcnRzW2kgKyAxXSAtIDEKKyAgICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgICBkbSA9IHByb3BzLmdldCgiZG0iKQorICAgICAgaWYgZG0gYW5kIGRtWzBdICE9ICc8JzoKKyAgICAgICAgYXNzZXJ0IHN0YXJ0ID09IGVuZAorICAgICAgICBpZiBwcm9wc1siZHQiXSAhPSAiQ2FuIjoKKyAgICAgICAgICAjIENvbXBhdGliaWxpdHkgZGVjb21wb3NpdGlvbi4KKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WD4lc1xuIiAlIChzdGFydCwgZG0pKQorICAgICAgICBlbGlmIG5vdCBwcm9wcy5nZXQoIkNvbXBfRXgiKSBhbmQgSGFzT25lV2F5TWFwcGluZyhzdGFydCk6CisgICAgICAgICAgIyBORkMgcm91bmQtdHJpcCBtYXBwaW5nIHR1cm5zIGludG8gTkZLQyBvbmUtd2F5IG1hcHBpbmcuCisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFg+JXMgICMgTkZDIHJvdW5kLXRyaXAsIE5GS0Mgb25lLXdheVxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0LCBkbSkpCisKKworZGVmIFdyaXRlTm9ybTJORktDX0NGVGV4dEZpbGUocGF0aCk6CisgIHllYXIgPSBkYXRldGltZS5kYXRlLnRvZGF5KCkuc3RyZnRpbWUoIiVZIikKKyAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwYXRoLCAibmZrY19jZi50eHQiKSwgInciKSBhcyBvdXRfZmlsZToKKyAgICBvdXRfZmlsZS53cml0ZSgKKyAgICAgICAgIiIiIyBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZQorIyBDb3B5cmlnaHQgKGMpIDE5OTEtIiIiICsgeWVhciArICIiIiBVbmljb2RlLCBJbmMuCisjIEZvciB0ZXJtcyBvZiB1c2UsIHNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3Rlcm1zX29mX3VzZS5odG1sCisjIEZvciBkb2N1bWVudGF0aW9uLCBzZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyNDQvCisjCisjIGZpbGUgbmFtZTogbmZrY19jZi50eHQKKyMKKyMgbWFjaGluZS1nZW5lcmF0ZWQgYnkgSUNVIHByZXBhcnNldWNkLnB5CisjCisjIFRoaXMgZmlsZSBjb250YWlucyB0aGUgVW5pY29kZSBORktDX0NGIG1hcHBpbmdzLAorIyBleHRyYWN0ZWQgZnJvbSB0aGUgVUNEIGZpbGUgRGVyaXZlZE5vcm1hbGl6YXRpb25Qcm9wcy50eHQsCisjIGFuZCByZWZvcm1hdHRlZCBpbnRvIHN5bnRheCBmb3IgdGhlIGdlbm5vcm0yIE5vcm1hbGl6ZXIyIGRhdGEgZ2VuZXJhdG9yIHRvb2wuCisjIFVzZSB0aGlzIGZpbGUgYXMgdGhlIHRoaXJkIGdlbm5vcm0yIGlucHV0IGZpbGUgYWZ0ZXIgbmZjLnR4dCBhbmQgbmZrYy50eHQuCisKKyIiIikKKyAgICBvdXRfZmlsZS53cml0ZSgiKiBVbmljb2RlICIgKyBfdWNkX3ZlcnNpb24gKyAiXG5cbiIpCisgICAgcHJldl9zdGFydCA9IDAKKyAgICBwcmV2X2VuZCA9IDAKKyAgICBwcmV2X25ma2NfY2YgPSBOb25lCisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihfc3RhcnRzKSAtIDEpOgorICAgICAgc3RhcnQgPSBfc3RhcnRzW2ldCisgICAgICBlbmQgPSBfc3RhcnRzW2kgKyAxXSAtIDEKKyAgICAgIHByb3BzID0gX3Byb3BzW2ldCisgICAgICBuZmtjX2NmID0gcHJvcHMuZ2V0KCJORktDX0NGIikKKyAgICAgICMgTWVyZ2Ugd2l0aCB0aGUgcHJldmlvdXMgcmFuZ2UgaWYgcG9zc2libGUsCisgICAgICAjIG9yIHJlbWVtYmVyIHRoaXMgcmFuZ2UgZm9yIG1lcmdpbmcuCisgICAgICBpZiBuZmtjX2NmID09IHByZXZfbmZrY19jZiBhbmQgKHByZXZfZW5kICsgMSkgPT0gc3RhcnQ6CisgICAgICAgIHByZXZfZW5kID0gZW5kCisgICAgICBlbHNlOgorICAgICAgICBpZiBwcmV2X25ma2NfY2YgIT0gTm9uZSBhbmQgKG5vdCBwcmV2X25ma2NfY2Ygb3IgcHJldl9uZmtjX2NmWzBdICE9ICc8Jyk6CisgICAgICAgICAgaWYgcHJldl9zdGFydCA9PSBwcmV2X2VuZDoKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCIlMDRYPiVzXG4iICUgKHByZXZfc3RhcnQsIHByZXZfbmZrY19jZikpCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKCIlMDRYLi4lMDRYPiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2X3N0YXJ0LCBwcmV2X2VuZCwgcHJldl9uZmtjX2NmKSkKKyAgICAgICAgcHJldl9zdGFydCA9IHN0YXJ0CisgICAgICAgIHByZXZfZW5kID0gZW5kCisgICAgICAgIHByZXZfbmZrY19jZiA9IG5ma2NfY2YKKworCitkZWYgV3JpdGVOb3JtMihwYXRoKToKKyAgV3JpdGVOb3JtMk5GQ1RleHRGaWxlKHBhdGgpCisgIFdyaXRlTm9ybTJORktDVGV4dEZpbGUocGF0aCkKKyAgV3JpdGVOb3JtMk5GS0NfQ0ZUZXh0RmlsZShwYXRoKQorCisjIFVUUyAjNDYgTm9ybWFsaXplcjIgaW5wdXQgZmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoqKgorCitfaWRuYV9yZXBsYWNlbWVudHMgPSBbCisgICMgU2V2ZXJhbCB2ZXJzaW9ucyBvZiBhdm9pZGluZyBjaXJjdWxhciBGRkZEPkZGRkQgbWFwcGluZ3MsCisgICMgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnB1dCBmaWxlLgorICAocmUuY29tcGlsZShyIkZGRkQgICAgICAgICAgOyBkaXNhbGxvd2VkIiksICIjIEZGRkQgKGF2b2lkIGNpcmN1bGFyIG1hcHBpbmcpIiksCisgIChyZS5jb21waWxlKHIiXC5cLkZGRkQiKSwgIi4uRkZGQyIpLAorICAocmUuY29tcGlsZShyIihGRkZbXkVdKVwuXC5GRkZGIiksICJcMS4uRkZGQyIpLAorICAjIFNpbmNlIHdlIHN3aXRjaCBiZXR3ZWVuIGNoZWNraW5nIGFuZCBub3QgY2hlY2tpbmcgZm9yIFNURDMgY2hhcmFjdGVyCisgICMgcmVzdHJpY3Rpb25zIGF0IHJ1bnRpbWUsIGNoZWNraW5nIHRoZSBub24tTERIIEFTQ0lJIGNoYXJhY3RlcnMgaW4gY29kZSwKKyAgIyB3ZSB0cmVhdCB0aGVzZSB2YWx1ZXMgaGVyZSBsaWtlIHRoZWlyIHJlZ3VsYXIgc2libGluZ3MuCisgIChyZS5jb21waWxlKHIiXihbXjtdKykgIDsgZGlzYWxsb3dlZF9TVEQzX3ZhbGlkIiksIHIiIyBcMWRpc2FsbG93ZWRfU1REM192YWxpZCIpLAorICAocmUuY29tcGlsZShyIjsgZGlzYWxsb3dlZF9TVEQzX21hcHBlZCArOyAiKSwgIj4iKSwKKyAgIyBGb3IgVVRTICM0Niwgd2UgZG8gbm90IGNhcmUgYWJvdXQgIm5vdCB2YWxpZCBpbiBJRE5BMjAwOCIuCisgIChyZS5jb21waWxlKHIiOyAqOyBOVjggKyIpLCAiIiksCisgICMgTm9ybWFsIHRyYW5zZm9ybWF0aW9ucy4KKyAgKHJlLmNvbXBpbGUociI7IGRpc2FsbG93ZWQiKSwgIj5GRkZEIiksCisgIChyZS5jb21waWxlKHIiOyBpZ25vcmVkIiksICI+IiksCisgIChyZS5jb21waWxlKHIiXihbXjtdKykgIDsgdmFsaWQiKSwgciIjIFwxdmFsaWQiKSwKKyAgKHJlLmNvbXBpbGUociI7IG1hcHBlZCArOyAiKSwgIj4iKSwKKyAgKHJlLmNvbXBpbGUociJeKFteO10rKSAgOyBkZXZpYXRpb24gKzsgIiksIHIiIyBcMWRldmlhdGlvbiA+IikKK10KKworZGVmIElkbmFUb1VUUzQ2VGV4dEZpbGUocywgdCk6CisgICIiIlR1cm4gVW5pY29kZSBJZG5hTWFwcGluZ1RhYmxlLnR4dCBpbnRvIElDVSBnZW5ub3JtMiBzb3VyY2UgZmlsZSBmb3JtYXQuIiIiCisgICMgRGlmZmVyZW50IGlucHV0L291dHB1dCBmaWxlIG5hbWVzLgorICBkZXN0X3BhdGggPSBvcy5wYXRoLmRpcm5hbWUodCkKKyAgdCA9IG9zLnBhdGguam9pbihkZXN0X3BhdGgsICJ1dHM0Ni50eHQiKQorICAjIFRPRE86IFdpdGggUHl0aG9uIDIuNyssIGNvbWJpbmUgdGhlIHR3byB3aXRoIHN0YXRlbWVudHMgaW50byBvbmUuCisgIHdpdGggb3BlbihzLCAiciIpIGFzIGluX2ZpbGU6CisgICAgd2l0aCBvcGVuKHQsICJ3IikgYXMgb3V0X2ZpbGU6CisgICAgICBvdXRfZmlsZS53cml0ZSgiIyBPcmlnaW5hbCBmaWxlOlxuIikKKyAgICAgIGZvciBsaW5lIGluIGluX2ZpbGU6CisgICAgICAgIG9yaWdfbGluZSA9IGxpbmUKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIEZvciBkb2N1bWVudGF0aW9uLCBzZWUiKToKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZShsaW5lKQorICAgICAgICAgIG91dF9maWxlLndyaXRlKHIiIiIKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRoaXMgZmlsZSBoYXMgYmVlbiByZWZvcm1hdHRlZCBpbnRvIHN5bnRheCBmb3IgdGhlCisjIGdlbm5vcm0yIE5vcm1hbGl6ZXIyIGRhdGEgZ2VuZXJhdG9yIHRvb2wuCisjCisjICJ2YWxpZCIsICJkaXNhbGxvd2VkX1NURDNfdmFsaWQiIGFuZCAiZGV2aWF0aW9uIiBsaW5lcyBhcmUgY29tbWVudGVkIG91dC4KKyMgIm1hcHBlZCIgYW5kICJkaXNhbGxvd2VkX1NURDNfbWFwcGVkIiBhcmUgY2hhbmdlZCB0byB1c2UgdGhlICI+IiBtYXBwaW5nIHN5bnRheC4KKyMgImRpc2FsbG93ZWQiIGxpbmVzIG1hcCB0byBVK0ZGRkQuCisjICJpZ25vcmVkIiBsaW5lcyBtYXAgdG8gYW4gZW1wdHkgc3RyaW5nLgorIworIyBDaGFyYWN0ZXJzIGRpc2FsbG93ZWQgdW5kZXIgU1REMyBydWxlcyBhcmUgdHJlYXRlZCBhcyB2YWxpZCBvciBtYXBwZWQ7CisjIHRoZXkgYXJlIGhhbmRsZWQgaW4gY29kZS4KKyMgRGV2aWF0aW9uIGNoYXJhY3RlcnMgYXJlIGFsc28gaGFuZGxlZCBpbiBjb2RlLgorIworIyBVc2UgdGhpcyBmaWxlIGFzIHRoZSBzZWNvbmQgZ2Vubm9ybTIgaW5wdXQgZmlsZSBhZnRlciBuZmMudHh0LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyIiIikKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBsaW5lWzBdIGluICIjXHJcbiI6CisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcmVwIGluIF9pZG5hX3JlcGxhY2VtZW50czogbGluZSA9IHJlcFswXS5zdWIocmVwWzFdLCBsaW5lKQorICAgICAgICAjIEFsaWduIGlubGluZSBjb21tZW50cyBhdCBjb2x1bW4gNDAuCisgICAgICAgIGNvbW1lbnRfcG9zID0gbGluZS5maW5kKCIjIiwgMSkKKyAgICAgICAgaWYgY29tbWVudF9wb3MgPCA0MDoKKyAgICAgICAgICBsaW5lID0gKGxpbmVbOmNvbW1lbnRfcG9zXSArICgoNDAgLSBjb21tZW50X3BvcykgKiAnICcpICsKKyAgICAgICAgICAgICAgICAgIGxpbmVbY29tbWVudF9wb3M6XSkKKyAgICAgICAgZWxpZiBjb21tZW50X3BvcyA+IDQwOgorICAgICAgICAgIHNwYWNlX3BvcyA9IGNvbW1lbnRfcG9zCisgICAgICAgICAgd2hpbGUgc3BhY2VfcG9zID4gMCBhbmQgbGluZVtzcGFjZV9wb3MgLSAxXSA9PSAnICc6CisgICAgICAgICAgICBzcGFjZV9wb3MgPSBzcGFjZV9wb3MgLSAxCisgICAgICAgICAgaWYgc3BhY2VfcG9zIDwgNDA6CisgICAgICAgICAgICAjIEZld2VyIHRoYW4gNDAgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGNvbW1lbnQ6CisgICAgICAgICAgICAjIEFsaWduIGNvbW1lbnRzIGF0IGNvbHVtbiA0MC4KKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzo0MF0gKyBsaW5lW2NvbW1lbnRfcG9zOl0KKyAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyA0MCBvciBtb3JlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjb21tZW50OgorICAgICAgICAgICAgIyBLZWVwIG9uZSBzcGFjZSBiZXR3ZWVuIGNvbnRlbnRzIGFuZCBjb21tZW50LgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOnNwYWNlX3Bvc10gKyAiICIgKyBsaW5lW2NvbW1lbnRfcG9zOl0KKyAgICAgICAgIyBXcml0ZSB0aGUgbW9kaWZpZWQgbGluZS4KKyAgICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgICAgICAgaWYgIi4uRkZGRiIgaW4gb3JpZ19saW5lIGFuZCAiLi5GRkZDIiBpbiBsaW5lOgorICAgICAgICAgIG91dF9maWxlLndyaXRlKCJGRkZFLi5GRkZGICAgID5GRkZEXG4iKTsKKyAgcmV0dXJuIHQKKworIyBQcmVwcm9jZXNzaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworX3N0cmlwX3JlID0gcmUuY29tcGlsZSgiKFswLTlhLWZBLUZdKy4rPykgKiMuKiIpCitfY29kZV9wb2ludF9yZSA9IHJlLmNvbXBpbGUoIlxzKihbMC05YS1mQS1GXSspXHMqOyIpCisKK2RlZiBDb3B5QW5kU3RyaXBXaXRoT3B0aW9uYWxNZXJnZShzLCB0LCBkb19tZXJnZSk6CisgICMgVE9ETzogV2UgZG8gbm90IHNlZW0gdG8gbmVlZCB0aGUgZG9fbWVyZ2UgYXJndW1lbnQgYW5kIGxvZ2ljIGFueSBtb3JlLgorICAjIFRPRE86IFdpdGggUHl0aG9uIDIuNyssIGNvbWJpbmUgdGhlIHR3byB3aXRoIHN0YXRlbWVudHMgaW50byBvbmUuCisgIHdpdGggb3BlbihzLCAiciIpIGFzIGluX2ZpbGU6CisgICAgd2l0aCBvcGVuKHQsICJ3IikgYXMgb3V0X2ZpbGU6CisgICAgICBmaXJzdCA9IC0xICAjIEZpcnN0IGNvZGUgcG9pbnQgd2l0aCBmaXJzdF9kYXRhLgorICAgICAgbGFzdCA9IC0xICAjIExhc3QgY29kZSBwb2ludCB3aXRoIGZpcnN0X2RhdGEuCisgICAgICBmaXJzdF9kYXRhID0gIiIgICMgQ29tbW9uIGRhdGEgZm9yIGNvZGUgcG9pbnRzIFtmaXJzdC4ubGFzdF0uCisgICAgICBmb3IgbGluZSBpbiBpbl9maWxlOgorICAgICAgICBtYXRjaCA9IF9zdHJpcF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICBsaW5lID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICBpZiBkb19tZXJnZToKKyAgICAgICAgICBtYXRjaCA9IF9jb2RlX3BvaW50X3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICBjID0gaW50KG1hdGNoLmdyb3VwKDEpLCAxNikKKyAgICAgICAgICAgIGRhdGEgPSBsaW5lW21hdGNoLmVuZCgpIC0gMTpdCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGMgPSAtMQorICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgaWYgbGFzdCA+PSAwIGFuZCAoYyAhPSAobGFzdCArIDEpIG9yIGRhdGEgIT0gZmlyc3RfZGF0YSk6CisgICAgICAgICAgICAjIG91dHB1dCB0aGUgY3VycmVudCByYW5nZQorICAgICAgICAgICAgaWYgZmlyc3QgPT0gbGFzdDoKKyAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoIiUwNFglc1xuIiAlIChmaXJzdCwgZmlyc3RfZGF0YSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WC4uJTA0WCVzXG4iICUgKGZpcnN0LCBsYXN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgICAgIGZpcnN0ID0gLTEKKyAgICAgICAgICAgIGxhc3QgPSAtMQorICAgICAgICAgICAgZmlyc3RfZGF0YSA9ICIiCisgICAgICAgICAgaWYgYyA8IDA6CisgICAgICAgICAgICAjIG5vIGRhdGEgb24gdGhpcyBsaW5lLCBvdXRwdXQgYXMgaXMKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKGxpbmUpCisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGRhdGEgb24gdGhpcyBsaW5lLCBzdG9yZSBmb3IgcG9zc2libGUgcmFuZ2UgY29tcGFjdGlvbgorICAgICAgICAgICAgaWYgbGFzdCA8IDA6CisgICAgICAgICAgICAgICMgc2V0IGFzIHRoZSBmaXJzdCBsaW5lIGluIGEgcG9zc2libGUgcmFuZ2UKKyAgICAgICAgICAgICAgZmlyc3QgPSBjCisgICAgICAgICAgICAgIGxhc3QgPSBjCisgICAgICAgICAgICAgIGZpcnN0X2RhdGEgPSBkYXRhCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAjIG11c3QgYmUgYyA9PSAobGFzdCArIDEpIGFuZCBkYXRhID09IGZpcnN0X2RhdGEKKyAgICAgICAgICAgICAgIyBiZWNhdXNlIG9mIHByZXZpb3VzIGNvbmRpdGlvbnMKKyAgICAgICAgICAgICAgIyBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgICAgICAgIGxhc3QgPSBjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIyBPbmx5IHN0cmlwLCBkb24ndCBtZXJnZToganVzdCBvdXRwdXQgdGhlIHN0cmlwcGVkIGxpbmUuCisgICAgICAgICAgb3V0X2ZpbGUud3JpdGUobGluZSkKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiXG4iKQorICAgICAgaWYgZG9fbWVyZ2UgYW5kIGxhc3QgPj0gMDoKKyAgICAgICAgIyBvdXRwdXQgdGhlIGxhc3QgcmFuZ2UgaW4gdGhlIGZpbGUKKyAgICAgICAgaWYgZmlyc3QgPT0gbGFzdDoKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WCVzXG4iICUgKGZpcnN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBvdXRfZmlsZS53cml0ZSgiJTA0WC4uJTA0WCVzXG4iICUgKGZpcnN0LCBsYXN0LCBmaXJzdF9kYXRhKSkKKyAgICAgICAgZmlyc3QgPSAtMQorICAgICAgICBsYXN0ID0gLTEKKyAgICAgICAgZmlyc3RfZGF0YSA9ICIiCisgICAgICBvdXRfZmlsZS5mbHVzaCgpCisgIHJldHVybiB0CisKKworZGVmIENvcHlBbmRTdHJpcChzLCB0KToKKyAgIiIiQ29waWVzIGEgZmlsZSBhbmQgcmVtb3ZlcyBjb21tZW50cyBiZWhpbmQgZGF0YSBsaW5lcyBidXQgbm90IGluIG90aGVycy4iIiIKKyAgcmV0dXJuIENvcHlBbmRTdHJpcFdpdGhPcHRpb25hbE1lcmdlKHMsIHQsIEZhbHNlKQorCisKK2RlZiBDb3B5QW5kU3RyaXBBbmRNZXJnZShzLCB0KToKKyAgIiIiQ29waWVzIGFuZCBzdHJpcHMgYSBmaWxlIGFuZCBtZXJnZXMgbGluZXMuCisKKyAgQ29waWVzIGEgZmlsZSwgcmVtb3ZlcyBjb21tZW50cywgYW5kCisgIG1lcmdlcyBsaW5lcyB3aXRoIGFkamFjZW50IGNvZGUgcG9pbnQgcmFuZ2VzIGFuZCBpZGVudGljYWwgcGVyLWNvZGUgcG9pbnQKKyAgZGF0YSBsaW5lcyBpbnRvIG9uZSBsaW5lIHdpdGggcmFuZ2Ugc3ludGF4LgorICAiIiIKKyAgcmV0dXJuIENvcHlBbmRTdHJpcFdpdGhPcHRpb25hbE1lcmdlKHMsIHQsIFRydWUpCisKKworZGVmIFByZXBlbmRCT00ocywgdCk6CisgICMgVE9ETzogV2l0aCBQeXRob24gMi43KywgY29tYmluZSB0aGUgdHdvIHdpdGggc3RhdGVtZW50cyBpbnRvIG9uZS4KKyAgd2l0aCBvcGVuKHMsICJyIikgYXMgaW5fZmlsZToKKyAgICB3aXRoIG9wZW4odCwgInciKSBhcyBvdXRfZmlsZToKKyAgICAgIG91dF9maWxlLndyaXRlKCJceGVmXHhiYlx4YmYiKSAgIyBVVEYtOCBCT00gZm9yIElDVSBzdm4KKyAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihpbl9maWxlLCBvdXRfZmlsZSkKKyAgcmV0dXJuIHQKKworCitkZWYgQ29weU9ubHkocywgdCk6CisgIHNodXRpbC5jb3B5KHMsIHQpCisgIHJldHVybiB0CisKKworZGVmIERvbnRDb3B5KHMsIHQpOgorICByZXR1cm4gcworCisKKyMgRWFjaCBfZmlsZXMgdmFsdWUgaXMgYQorIyAocHJlcHJvY2Vzc29yLCBkZXN0X2ZvbGRlciwgcGFyc2VyLCBvcmRlcikgdHVwbGUKKyMgd2hlcmUgYWxsIGZpZWxkcyBleGNlcHQgdGhlIHByZXByb2Nlc3NvciBhcmUgb3B0aW9uYWwuCisjIEFmdGVyIHRoZSBpbml0aWFsIHByZXByb2Nlc3NpbmcgKGNvcHkvc3RyaXAvbWVyZ2UpLAorIyBpZiBhIHBhcnNlciBpcyBzcGVjaWZpZWQsIHRoZW4gYSB0dXBsZSBpcyBhZGRlZCB0byBfZmlsZXNfdG9fcGFyc2UKKyMgYXQgaW5kZXggIm9yZGVyIiAoZGVmYXVsdCBvcmRlciA5KS4KKyMgQW4gZXhwbGljaXQgb3JkZXIgbnVtYmVyIGlzIHNldCBvbmx5IGZvciBmaWxlcyB0aGF0IG11c3QgYmUgcGFyc2VkCisjIGJlZm9yZSBvdGhlcnMuCitfZmlsZXMgPSB7CisgICJCaWRpTWlycm9yaW5nLnR4dCI6IChEb250Q29weSwgUGFyc2VCaWRpTWlycm9yaW5nKSwKKyAgIkJpZGlUZXN0LnR4dCI6IChDb3B5T25seSwgInRlc3RkYXRhIiksCisgICJCbG9ja3MudHh0IjogKERvbnRDb3B5LCBQYXJzZUJsb2NrcyksCisgICJDYXNlRm9sZGluZy50eHQiOiAoQ29weU9ubHksIFBhcnNlQ2FzZUZvbGRpbmcpLAorICAiRGVyaXZlZEFnZS50eHQiOiAoRG9udENvcHksIFBhcnNlRGVyaXZlZEFnZSksCisgICJEZXJpdmVkQmlkaUNsYXNzLnR4dCI6IChEb250Q29weSwgUGFyc2VEZXJpdmVkQmlkaUNsYXNzKSwKKyAgIkRlcml2ZWRDb3JlUHJvcGVydGllcy50eHQiOiAoQ29weUFuZFN0cmlwLCBQYXJzZU5hbWVkUHJvcGVydGllcyksCisgICJEZXJpdmVkSm9pbmluZ0dyb3VwLnR4dCI6IChEb250Q29weSwgUGFyc2VEZXJpdmVkSm9pbmluZ0dyb3VwKSwKKyAgIkRlcml2ZWRKb2luaW5nVHlwZS50eHQiOiAoRG9udENvcHksIFBhcnNlRGVyaXZlZEpvaW5pbmdUeXBlKSwKKyAgIkRlcml2ZWROb3JtYWxpemF0aW9uUHJvcHMudHh0IjogKENvcHlBbmRTdHJpcCwgUGFyc2VOYW1lZFByb3BlcnRpZXMpLAorICAiRGVyaXZlZE51bWVyaWNWYWx1ZXMudHh0IjogKERvbnRDb3B5LCBQYXJzZURlcml2ZWROdW1lcmljVmFsdWVzKSwKKyAgIkVhc3RBc2lhbldpZHRoLnR4dCI6IChEb250Q29weSwgUGFyc2VFYXN0QXNpYW5XaWR0aCksCisgICJHcmFwaGVtZUJyZWFrUHJvcGVydHkudHh0IjogKERvbnRDb3B5LCBQYXJzZUdyYXBoZW1lQnJlYWtQcm9wZXJ0eSksCisgICJHcmFwaGVtZUJyZWFrVGVzdC50eHQiOiAoUHJlcGVuZEJPTSwgInRlc3RkYXRhIiksCisgICJJbmRpY01hdHJhQ2F0ZWdvcnkudHh0IjogKERvbnRDb3B5LCBQYXJzZUluZGljTWF0cmFDYXRlZ29yeSksCisgICJJbmRpY1N5bGxhYmljQ2F0ZWdvcnkudHh0IjogKERvbnRDb3B5LCBQYXJzZUluZGljU3lsbGFiaWNDYXRlZ29yeSksCisgICJMaW5lQnJlYWsudHh0IjogKERvbnRDb3B5LCBQYXJzZUxpbmVCcmVhayksCisgICJMaW5lQnJlYWtUZXN0LnR4dCI6IChQcmVwZW5kQk9NLCAidGVzdGRhdGEiKSwKKyAgIk5hbWVBbGlhc2VzLnR4dCI6IChEb250Q29weSwgUGFyc2VOYW1lQWxpYXNlcyksCisgICJOYW1lc0xpc3QudHh0IjogKERvbnRDb3B5LCBQYXJzZU5hbWVzTGlzdCksCisgICJOb3JtYWxpemF0aW9uQ29ycmVjdGlvbnMudHh0IjogKENvcHlPbmx5LCksICAjIE9ubHkgdXNlZCBpbiBnZW5zcHJlcC4KKyAgIk5vcm1hbGl6YXRpb25UZXN0LnR4dCI6IChDb3B5QW5kU3RyaXAsKSwKKyAgIlByb3BlcnR5QWxpYXNlcy50eHQiOiAoRG9udENvcHksIFBhcnNlUHJvcGVydHlBbGlhc2VzLCAwKSwKKyAgIlByb3BlcnR5VmFsdWVBbGlhc2VzLnR4dCI6IChEb250Q29weSwgUGFyc2VQcm9wZXJ0eVZhbHVlQWxpYXNlcywgMSksCisgICJQcm9wTGlzdC50eHQiOiAoRG9udENvcHksIFBhcnNlTmFtZWRQcm9wZXJ0aWVzKSwKKyAgIlNlbnRlbmNlQnJlYWtQcm9wZXJ0eS50eHQiOiAoRG9udENvcHksIFBhcnNlU2VudGVuY2VCcmVhayksCisgICJTZW50ZW5jZUJyZWFrVGVzdC50eHQiOiAoUHJlcGVuZEJPTSwgInRlc3RkYXRhIiksCisgICJTY3JpcHRzLnR4dCI6IChEb250Q29weSwgUGFyc2VTY3JpcHRzKSwKKyAgIlNjcmlwdEV4dGVuc2lvbnMudHh0IjogKERvbnRDb3B5LCBQYXJzZVNjcmlwdEV4dGVuc2lvbnMpLAorICAiU3BlY2lhbENhc2luZy50eHQiOiAoQ29weU9ubHksIFBhcnNlU3BlY2lhbENhc2luZyksCisgICJVbmljb2RlRGF0YS50eHQiOiAoQ29weU9ubHksIFBhcnNlVW5pY29kZURhdGEsIDIpLAorICAiV29yZEJyZWFrUHJvcGVydHkudHh0IjogKERvbnRDb3B5LCBQYXJzZVdvcmRCcmVhayksCisgICJXb3JkQnJlYWtUZXN0LnR4dCI6IChQcmVwZW5kQk9NLCAidGVzdGRhdGEiKSwKKyAgIyBGcm9tIHd3dy51bmljb2RlLm9yZy9QdWJsaWMvaWRuYS88dmVyc2lvbj4vCisgICJJZG5hTWFwcGluZ1RhYmxlLnR4dCI6IChJZG5hVG9VVFM0NlRleHRGaWxlLCAibm9ybTIiKQorfQorCisjIExpc3Qgb2YgbGlzdHMgb2YgZmlsZXMgdG8gYmUgcGFyc2VkIGluIG9yZGVyLgorIyBJbm5lciBsaXN0cyBjb250YWluIChiYXNlbmFtZSwgcGF0aCwgcGFyc2VyKSB0dXBsZXMuCitfZmlsZXNfdG9fcGFyc2UgPSBbW10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW10sIFtdLCBbXSwgW11dCisKKyMgR2V0IHRoZSBzdGFuZGFyZCBiYXNlbmFtZSBmcm9tIGEgdmVyc2lvbmVkIGZpbGVuYW1lLgorIyBGb3IgZXhhbXBsZSwgbWF0Y2ggIlVuaWNvZGVEYXRhLTYuMS4wZDgudHh0IgorIyBzbyB3ZSBjYW4gdHVybiBpdCBpbnRvICJVbmljb2RlRGF0YS50eHQiLgorX2ZpbGVfdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUoIihbYS16QS1aMC05XSspIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVswLTldKyg/OlxcLlswLTldKykqKD86ZFswLTldKyk/IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFxcLlthLXpdKykkIikKKworZGVmIFByZXByb2Nlc3NGaWxlcyhzb3VyY2VfZmlsZXMsIGljdV9zcmNfcm9vdCk6CisgIHVuaWRhdGFfcGF0aCA9IG9zLnBhdGguam9pbihpY3Vfc3JjX3Jvb3QsICJzb3VyY2UiLCAiZGF0YSIsICJ1bmlkYXRhIikKKyAgbm9ybTJfcGF0aCA9IG9zLnBhdGguam9pbih1bmlkYXRhX3BhdGgsICJub3JtMiIpCisgIHRlc3RkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oaWN1X3NyY19yb290LCAic291cmNlIiwgInRlc3QiLCAidGVzdGRhdGEiKQorICBmb2xkZXJfdG9fcGF0aCA9IHsKKyAgICAidW5pZGF0YSI6IHVuaWRhdGFfcGF0aCwKKyAgICAibm9ybTIiOiBub3JtMl9wYXRoLAorICAgICJ0ZXN0ZGF0YSI6IHRlc3RkYXRhX3BhdGgKKyAgfQorICBmaWxlc19wcm9jZXNzZWQgPSBzZXQoKQorICBmb3Igc291cmNlX2ZpbGUgaW4gc291cmNlX2ZpbGVzOgorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzb3VyY2VfZmlsZSkKKyAgICBtYXRjaCA9IF9maWxlX3ZlcnNpb25fcmUubWF0Y2goYmFzZW5hbWUpCisgICAgaWYgbWF0Y2g6IGJhc2VuYW1lID0gbWF0Y2guZ3JvdXAoMSkgKyBtYXRjaC5ncm91cCgyKQorICAgIGlmIGJhc2VuYW1lIGluIF9maWxlczoKKyAgICAgIHByaW50ICJQcmVwcm9jZXNzaW5nICVzIiAlIGJhc2VuYW1lCisgICAgICBpZiBiYXNlbmFtZSBpbiBmaWxlc19wcm9jZXNzZWQ6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZHVwbGljYXRlIGZpbGUgYmFzZW5hbWUgJXMhIiAlIGJhc2VuYW1lKQorICAgICAgZmlsZXNfcHJvY2Vzc2VkLmFkZChiYXNlbmFtZSkKKyAgICAgIHZhbHVlID0gX2ZpbGVzW2Jhc2VuYW1lXQorICAgICAgcHJlcHJvY2Vzc29yID0gdmFsdWVbMF0KKyAgICAgIGlmIGxlbih2YWx1ZSkgPj0gMiBhbmQgaXNpbnN0YW5jZSh2YWx1ZVsxXSwgKHN0ciwgdW5pY29kZSkpOgorICAgICAgICAjIFRoZSB2YWx1ZSB3YXMgW3ByZXByb2Nlc3NvciwgZGVzdF9mb2xkZXIsIC4uLl0sIGxlYXZlIFsuLi5dLgorICAgICAgICBkZXN0X2ZvbGRlciA9IHZhbHVlWzFdCisgICAgICAgIHZhbHVlID0gdmFsdWVbMjpdCisgICAgICBlbHNlOgorICAgICAgICAjIFRoZSB2YWx1ZSB3YXMgW3ByZXByb2Nlc3NvciwgLi4uXSwgbGVhdmUgWy4uLl0uCisgICAgICAgIGRlc3RfZm9sZGVyID0gInVuaWRhdGEiCisgICAgICAgIHZhbHVlID0gdmFsdWVbMTpdCisgICAgICBkZXN0X3BhdGggPSBmb2xkZXJfdG9fcGF0aFtkZXN0X2ZvbGRlcl0KKyAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0X3BhdGgpOiBvcy5tYWtlZGlycyhkZXN0X3BhdGgpCisgICAgICBkZXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGVzdF9wYXRoLCBiYXNlbmFtZSkKKyAgICAgIHBhcnNlX2ZpbGUgPSBwcmVwcm9jZXNzb3Ioc291cmNlX2ZpbGUsIGRlc3RfZmlsZSkKKyAgICAgIGlmIHZhbHVlOgorICAgICAgICBvcmRlciA9IDkgaWYgbGVuKHZhbHVlKSA8IDIgZWxzZSB2YWx1ZVsxXQorICAgICAgICBfZmlsZXNfdG9fcGFyc2Vbb3JkZXJdLmFwcGVuZCgoYmFzZW5hbWUsIHBhcnNlX2ZpbGUsIHZhbHVlWzBdKSkKKworIyBDaGFyYWN0ZXIgbmFtZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqKioKKworIyBUT0RPOiBUdXJuIHRoaXMgc2NyaXB0IGludG8gYSBtb2R1bGUgdGhhdAorIyBhKSBnaXZlcyBhY2Nlc3MgdG8gdGhlIHBhcnNlZCBkYXRhCisjIGIpIGhhcyBhIFByZXBhcnNlVUNEKHVjZF9yb290LCBpY3Vfc3JjX3Jvb3QpIGZ1bmN0aW9uCisjIGMpIGhhcyBhIFBhcnNlUHJlcGFyc2VkVUNEKGZpbGVuYW1lKSBmdW5jdGlvbgorIyBkKSBoYXMgYSBXcml0ZVByZXBhcnNlZFVDRChmaWxlbmFtZSkgZnVuY3Rpb24KKyMgYW5kIHRoZW4gdXNlIGl0IGZyb20gYSBuZXcgc2NyaXB0IGZvciBuYW1lcy4KKyMgU29tZSBtb3JlIEFQSToKKyMgLSBnZW5lcmF0b3IgR2V0UmFuZ2VzQW5kUHJvcHMoKSAtPiAoc3RhcnQsIGVuZCwgcHJvcHMpKgorCitkZWYgSW5jQ291bnRlcihjb3VudGVycywga2V5LCBpbmM9MSk6CisgIGlmIGtleSBpbiBjb3VudGVyczoKKyAgICBjb3VudGVyc1trZXldICs9IGluYworICBlbHNlOgorICAgIGNvdW50ZXJzW2tleV0gPSBpbmMKKworCitlbmRpbmdzID0gKAorICAjIExpc3QgUEhBU0UtIGJlZm9yZSBMRVRURVIgZm9yIEJBTVVNIExFVFRFUiBQSEFTRS14eXouCisgICJQSEFTRS0iLAorICAiTEVUVEVSICIsICJMSUdBVFVSRSAiLCAiQ0hBUkFDVEVSICIsICJTWUxMQUJMRSAiLAorICAiQ0hPU0VPTkcgIiwgIkpVTkdTRU9ORyAiLCAiSk9OR1NFT05HICIsCisgICJTWUxMQUJJQ1MgIiwgIklERU9HUkFQSCAiLCAiSURFT0dSQVBILSIsICJJREVPR1JBTSAiLCAiTU9OT0dSQU0gIiwKKyAgIkFDUk9QSE9OSUMgIiwgIkhJRVJPR0xZUEggIiwKKyAgIkRJR0lUICIsICJOVU1CRVIgIiwgIk5VTUVSQUwgIiwgIkZSQUNUSU9OICIsCisgICJQVU5DVFVBVElPTiAiLCAiU0lHTiAiLCAiU1lNQk9MICIsCisgICJUSUxFICIsICJDQVJEICIsICJGQUNFICIsCisgICJBQ0NFTlQgIiwgIlBPSU5UICIsCisgICMgTGlzdCBTSUdOIGJlZm9yZSBWT1dFTCB0byBjYXRjaCAidm93ZWwgc2lnbiIuCisgICJWT1dFTCAiLCAiVE9ORSAiLCAiUkFESUNBTCAiLAorICAjIEZvciBuYW1lcyBvZiBtYXRoIHN5bWJvbHMsCisgICMgZS5nLiwgTUFUSEVNQVRJQ0FMIEJPTEQgSVRBTElDIENBUElUQUwgQQorICAiU0NSSVBUICIsICJGUkFLVFVSICIsICJNT05PU1BBQ0UgIiwKKyAgIklUQUxJQyAiLCAiQk9MRCAiLCAiRE9VQkxFLVNUUlVDSyAiLCAiU0FOUy1TRVJJRiAiLAorICAiSU5JVElBTCAiLCAiVEFJTEVEICIsICJTVFJFVENIRUQgIiwgIkxPT1BFRCAiLAorICAjIEJSQUlMTEUgUEFUVEVSTiBET1RTLXh5egorICAiRE9UUy0iLAorICAiU0VMRUNUT1IgIiwgIlNFTEVDVE9SLSIKKykKKworZGVmIFNwbGl0TmFtZShuYW1lLCB0b2tlbnMpOgorICBzdGFydCA9IDAKKyAgZm9yIGUgaW4gZW5kaW5nczoKKyAgICBpID0gbmFtZS5maW5kKGUpCisgICAgaWYgaSA+PSAwOgorICAgICAgc3RhcnQgPSBpICsgbGVuKGUpCisgICAgICB0b2tlbiA9IG5hbWVbOnN0YXJ0XQorICAgICAgSW5jQ291bnRlcih0b2tlbnMsIHRva2VuKQorICAgICAgYnJlYWsKKyAgZm9yIGkgaW4geHJhbmdlKHN0YXJ0LCBsZW4obmFtZSkpOgorICAgIGMgPSBuYW1lW2ldCisgICAgaWYgYyA9PSAnICcgb3IgYyA9PSAnLSc6CisgICAgICB0b2tlbiA9IG5hbWVbc3RhcnQ6aSArIDFdCisgICAgICBJbmNDb3VudGVyKHRva2VucywgdG9rZW4pCisgICAgICBzdGFydCA9IGkgKyAxCisgIEluY0NvdW50ZXIodG9rZW5zLCBuYW1lW3N0YXJ0Ol0pCisKKworZGVmIFByaW50TmFtZVN0YXRzKCk6CisgICMgVE9ETzogVGhpcyBuYW1lIGFuYWx5c2lzIGNvZGUgaXMgb3V0IG9mIGRhdGUuCisgICMgSXQgbmVlZHMgdG8gY29uc2lkZXIgdGhlIG11bHRpLXR5cGUgTmFtZV9BbGlhcyB2YWx1ZXMuCisgIG5hbWVfcG5hbWVzID0gKCJuYSIsICJuYTEiLCAiTmFtZV9BbGlhcyIpCisgIGNvdW50cyA9IHt9CisgIGZvciBwbmFtZSBpbiBuYW1lX3BuYW1lczoKKyAgICBjb3VudHNbcG5hbWVdID0gMAorICB0b3RhbF9sZW5ndGhzID0gY291bnRzLmNvcHkoKQorICBtYXhfbGVuZ3RoID0gMAorICBtYXhfcGVyX2NwID0gMAorICBuYW1lX2NoYXJzID0gc2V0KCkKKyAgbnVtX2RpZ2l0cyA9IDAKKyAgdG9rZW5fY291bnRlcnMgPSB7fQorICBjaGFyX2NvdW50ZXJzID0ge30KKyAgZm9yIGkgaW4geHJhbmdlKGxlbihfc3RhcnRzKSAtIDEpOgorICAgIHN0YXJ0ID0gX3N0YXJ0c1tpXQorICAgICMgZW5kID0gX3N0YXJ0c1tpICsgMV0gLSAxCisgICAgcHJvcHMgPSBfcHJvcHNbaV0KKyAgICBwZXJfY3AgPSAwCisgICAgZm9yIHBuYW1lIGluIG5hbWVfcG5hbWVzOgorICAgICAgaWYgcG5hbWUgaW4gcHJvcHM6CisgICAgICAgIGNvdW50c1twbmFtZV0gKz0gMQorICAgICAgICBuYW1lID0gcHJvcHNbcG5hbWVdCisgICAgICAgIHRvdGFsX2xlbmd0aHNbcG5hbWVdICs9IGxlbihuYW1lKQorICAgICAgICBuYW1lX2NoYXJzIHw9IHNldChuYW1lKQorICAgICAgICBpZiBsZW4obmFtZSkgPiBtYXhfbGVuZ3RoOiBtYXhfbGVuZ3RoID0gbGVuKG5hbWUpCisgICAgICAgIHBlcl9jcCArPSBsZW4obmFtZSkgKyAxCisgICAgICAgIGlmIHBlcl9jcCA+IG1heF9wZXJfY3A6IG1heF9wZXJfY3AgPSBwZXJfY3AKKyAgICAgICAgdG9rZW5zID0gU3BsaXROYW1lKG5hbWUsIHRva2VuX2NvdW50ZXJzKQorICAgICAgICBmb3IgYyBpbiBuYW1lOgorICAgICAgICAgIGlmIGMgaW4gIjAxMjM0NTY3ODkiOiBudW1fZGlnaXRzICs9IDEKKyAgICAgICAgICBJbmNDb3VudGVyKGNoYXJfY291bnRlcnMsIGMpCisgIHByaW50CisgIGZvciBwbmFtZSBpbiBuYW1lX3BuYW1lczoKKyAgICBwcmludCAoIiclcycgY2hhcmFjdGVyIG5hbWVzOiAlZCAvICVkIGJ5dGVzIiAlCisgICAgICAgICAgIChwbmFtZSwgY291bnRzW3BuYW1lXSwgdG90YWxfbGVuZ3Roc1twbmFtZV0pKQorICBwcmludCAiJWQgdG90YWwgYnl0ZXMgaW4gY2hhcmFjdGVyIG5hbWVzIiAlIHN1bSh0b3RhbF9sZW5ndGhzLml0ZXJ2YWx1ZXMoKSkKKyAgcHJpbnQgKCIlZCBuYW1lLWNoYXJhY3RlcnM6ICVzIiAlCisgICAgICAgICAobGVuKG5hbWVfY2hhcnMpLCAiIi5qb2luKHNvcnRlZChuYW1lX2NoYXJzKSkpKQorICBwcmludCAiJWQgZGlnaXRzIDAtOSIgJSBudW1fZGlnaXRzCisgIGNvdW50X2NoYXJzID0gWyhjb3VudCwgYykgZm9yIChjLCBjb3VudCkgaW4gY2hhcl9jb3VudGVycy5pdGVyaXRlbXMoKV0KKyAgY291bnRfY2hhcnMuc29ydChyZXZlcnNlPVRydWUpCisgIGZvciBjYyBpbiBjb3VudF9jaGFyczoKKyAgICBwcmludCAibmFtZS1jaGFyczogJTZkICogJyVzJyIgJSBjYworICBwcmludCAibWF4LiBuYW1lIGxlbmd0aDogJWQiICUgbWF4X2xlbmd0aAorICBwcmludCAibWF4LiBsZW5ndGggb2YgYWxsIChuYW1lcytOVUwpIHBlciBjcDogJWQiICUgbWF4X3Blcl9jcAorCisgIHRva2VuX2xlbmd0aHMgPSBzdW0oW2xlbih0KSArIDEgZm9yIHQgaW4gdG9rZW5fY291bnRlcnNdKQorICBwcmludCAoIiVkIHRvdGFsIHRva2VucywgJWQgYnl0ZXMgd2l0aCBOVUwiICUKKyAgICAgICAgIChsZW4odG9rZW5fY291bnRlcnMpLCB0b2tlbl9sZW5ndGhzKSkKKworICBjb3VudHNfdG9rZW5zID0gW10KKyAgZm9yICh0b2tlbiwgY291bnQpIGluIHRva2VuX2NvdW50ZXJzLml0ZXJpdGVtcygpOgorICAgICMgSWYgd2UgZW5jb2RlIGEgdG9rZW4gd2l0aCBhIDEtYnl0ZSBjb2RlLCB0aGVuIHdlIHNhdmUgbGVuKHQpLTEgYnl0ZXMgZWFjaCB0aW1lCisgICAgIyBidXQgaGF2ZSB0byBzdG9yZSB0aGUgdG9rZW4gc3RyaW5nIGl0c2VsZiB3aXRoIGEgbGVuZ3RoIG9yIHRlcm1pbmF0b3IgYnl0ZSwKKyAgICAjIHBsdXMgYSAyLWJ5dGUgZW50cnkgaW4gYW4gdG9rZW4gaW5kZXggdGFibGUuCisgICAgc2F2aW5ncyA9IGNvdW50ICogKGxlbih0b2tlbikgLSAxKSAtIChsZW4odG9rZW4pICsgMSArIDIpCisgICAgaWYgc2F2aW5ncyA+IDA6CisgICAgICBjb3VudHNfdG9rZW5zLmFwcGVuZCgoc2F2aW5ncywgY291bnQsIHRva2VuKSkKKyAgY291bnRzX3Rva2Vucy5zb3J0KHJldmVyc2U9VHJ1ZSkKKyAgcHJpbnQgIiVkIHRva2VucyBtaWdodCBzYXZlIHNwYWNlIHdpdGggMS1ieXRlIGNvZGVzIiAlIGxlbihjb3VudHNfdG9rZW5zKQorCisgICMgQ29kZXM9Ynl0ZXMsIDQwIGJ5dGUgdmFsdWVzIGZvciBuYW1lX2NoYXJzLgorICAjIFRoYXQgbGVhdmVzIDIxNiB1bml0cyBmb3IgMS1ieXRlIHRva2VucyBvciBsZWFkIGJ5dGVzIG9mIDItYnl0ZSB0b2tlbnMuCisgICMgTWFrZSBlYWNoIDItYnl0ZSB0b2tlbiB0aGUgdG9rZW4gc3RyaW5nIGluZGV4IGl0c2VsZiwgcmF0aGVyIHRoYW4KKyAgIyBhbmQgaW5kZXggaW50byBhIHN0cmluZyBpbmRleCB0YWJsZS4KKyAgIyBNb3JlIGxlYWQgYnl0ZXMgYnV0IGFsc28gbW9yZSBzYXZpbmdzLgorICBudW1fdW5pdHMgPSAyNTYKKyAgbWF4X2xlYWQgPSAodG9rZW5fbGVuZ3RocyArIDI1NSkgLyAyNTYKKyAgbWF4X3Rva2VuX3VuaXRzID0gbnVtX3VuaXRzIC0gbGVuKG5hbWVfY2hhcnMpCisgIHJlc3VsdHMgPSBbXQorICBmb3IgbnVtX2xlYWQgaW4geHJhbmdlKG1pbihtYXhfbGVhZCwgbWF4X3Rva2VuX3VuaXRzKSArIDEpOgorICAgIG1heDEgPSBtYXhfdG9rZW5fdW5pdHMgLSBudW1fbGVhZAorICAgIGN0ID0gY291bnRzX3Rva2Vuc1s6bWF4MV0KKyAgICB0b2tlbnMxID0gc2V0KFt0IGZvciAocywgYywgdCkgaW4gY3RdKQorICAgIGZvciAodG9rZW4sIGNvdW50KSBpbiB0b2tlbl9jb3VudGVycy5pdGVyaXRlbXMoKToKKyAgICAgIGlmIHRva2VuIGluIHRva2VuczE6IGNvbnRpbnVlCisgICAgICAjIElmIHdlIGVuY29kZSBhIHRva2VuIHdpdGggYSAyLWJ5dGUgY29kZSwgdGhlbiB3ZSBzYXZlIGxlbih0KS0yIGJ5dGVzIGVhY2ggdGltZQorICAgICAgIyBidXQgaGF2ZSB0byBzdG9yZSB0aGUgdG9rZW4gc3RyaW5nIGl0c2VsZiB3aXRoIGEgbGVuZ3RoIG9yIHRlcm1pbmF0b3IgYnl0ZS4KKyAgICAgIHNhdmluZ3MgPSBjb3VudCAqIChsZW4odG9rZW4pIC0gMikgLSAobGVuKHRva2VuKSArIDEpCisgICAgICBpZiBzYXZpbmdzID4gMDoKKyAgICAgICAgY3QuYXBwZW5kKChzYXZpbmdzLCBjb3VudCwgdG9rZW4pKQorICAgIGN0LnNvcnQocmV2ZXJzZT1UcnVlKQorICAgICMgQSAyLWJ5dGUtY29kZS10b2tlbiBpbmRleCBjYW5ub3QgYmUgbGltaXRfdF9sZW5ndGhzIG9yIGhpZ2hlci4KKyAgICBsaW1pdF90X2xlbmd0aHMgPSBudW1fbGVhZCAqIDI1NgorICAgIHRva2VuMl9pbmRleCA9IDAKKyAgICBmb3IgaSBpbiB4cmFuZ2UobWF4MSwgbGVuKGN0KSk6CisgICAgICBpZiB0b2tlbjJfaW5kZXggPj0gbGltaXRfdF9sZW5ndGhzOgorICAgICAgICBkZWwgY3RbaTpdCisgICAgICAgIGJyZWFrCisgICAgICB0b2tlbjJfaW5kZXggKz0gbGVuKGN0W2ldWzJdKSArIDEKKyAgICBjdW11bF9zYXZpbmdzID0gc3VtKFtzIGZvciAocywgYywgdCkgaW4gY3RdKQorICAgICMgcHJpbnQgKCIlMmQgMS1ieXRlIGNvZGVzOiAlNGQgdG9rZW5zIG1pZ2h0IHNhdmUgJTZkIGJ5dGVzIiAlCisgICAgIyAgICAgICAgKG1heDEsIGxlbihjdCksIGN1bXVsX3NhdmluZ3MpKQorICAgIHJlc3VsdHMuYXBwZW5kKChjdW11bF9zYXZpbmdzLCBtYXgxLCBjdCkpCisgIGJlc3QgPSBtYXgocmVzdWx0cykgICMgKGN1bXVsX3NhdmluZ3MsIG1heDEsIGN0KQorCisgIG1heDEgPSBiZXN0WzFdCisgIHByaW50ICgibWF4aW11bSBzYXZpbmdzOiAlZCBieXRlcyB3aXRoICVkIDEtYnl0ZSBjb2RlcyAmICVkIGxlYWQgYnl0ZXMiICUKKyAgICAgICAgIChiZXN0WzBdLCBtYXgxLCBtYXhfdG9rZW5fdW5pdHMgLSBtYXgxKSkKKyAgY291bnRzX3Rva2VucyA9IGJlc3RbMl0KKyAgY3VtdWxfc2F2aW5ncyA9IDAKKyAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHNfdG9rZW5zKSk6CisgICAgbiA9IDEgaWYgaSA8IG1heDEgZWxzZSAyCisgICAgaTEgPSBpICsgMQorICAgIHQgPSBjb3VudHNfdG9rZW5zW2ldCisgICAgY3VtdWxfc2F2aW5ncyArPSB0WzBdCisgICAgaWYgaTEgPD0gMjUwIG9yIChpMSAlIDEwMCkgPT0gMCBvciBpMSA9PSBsZW4oY291bnRzX3Rva2Vucyk6CisgICAgICBwcmludCAoKCIlMDRkLiBjdW11bC4gJTZkIGJ5dGVzIHNhdmUgJTZkIGJ5dGVzIGZyb20gIiArCisgICAgICAgICAgICAgICIlNWQgKiAlZC1ieXRlIHRva2VuIGZvciAlMmQ9JyVzJyIpICUKKyAgICAgICAgICAoaTEsIGN1bXVsX3NhdmluZ3MsIHRbMF0sIHRbMV0sIG4sIGxlbih0WzJdKSwgdFsyXSkpCisKKyMgSUNVIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisKKyMgU2FtcGxlIGxpbmUgdG8gbWF0Y2g6CisjICAgIFVDSEFSX1VOSUZJRURfSURFT0dSQVBIPTI5LAorX3VjaGFyX3JlID0gcmUuY29tcGlsZSgKKyAgICAiICooVUNIQVJfWzAtOUEtWl9dKykgKj0gKig/OlswLTldK3wweFswLTlhLWZBLUZdKyksIikKKworIyBTYW1wbGUgbGluZSB0byBtYXRjaDoKKyMgICAgLyoqIFpzIEBzdGFibGUgSUNVIDIuMCAqLworX2djX2NvbW1lbnRfcmUgPSByZS5jb21waWxlKCIgKi9cKlwqICooW0EtWl1bYS16XSkgIikKKworIyBTYW1wbGUgbGluZSB0byBtYXRjaDoKKyMgICAgVV9TUEFDRV9TRVBBUkFUT1IgICAgICAgICA9IDEyLAorX2djX3JlID0gcmUuY29tcGlsZSgiICooVV9bQS1aX10rKSAqPSAqWzAtOV0rLCIpCisKKyMgU2FtcGxlIGxpbmUgdG8gbWF0Y2g6CisjICAgIC8qKiBMIEBzdGFibGUgSUNVIDIuMCAqLworX2JjX2NvbW1lbnRfcmUgPSByZS5jb21waWxlKCIgKi9cKlwqICooW0EtWl17MSwzfSkgIikKKworIyBTYW1wbGUgbGluZSB0byBtYXRjaDoKKyMgICAgVV9MRUZUX1RPX1JJR0hUICAgICAgICAgICAgICAgPSAwLAorX2JjX3JlID0gcmUuY29tcGlsZSgiICooVV9bQS1aX10rKSAqPSAqWzAtOV0rLCIpCisKKyMgU2FtcGxlIGxpbmUgdG8gbWF0Y2g6CisjICAgIFVCTE9DS19DWVJJTExJQyA9OSwKK191YmxvY2tfcmUgPSByZS5jb21waWxlKCIgKihVQkxPQ0tfWzAtOUEtWl9dKykgKj0gKlswLTldKywiKQorCisjIFNhbXBsZSBsaW5lIHRvIG1hdGNoOgorIyAgICBVX0VBX0FNQklHVU9VUywKK19wcm9wX2FuZF92YWx1ZV9yZSA9IHJlLmNvbXBpbGUoCisgICAgIiAqKFVfKERUfEVBfEdDQnxIU1R8TEJ8Skd8SlR8TlR8U0J8V0IpXyhbMC05QS1aX10rKSkiKQorCisjIFNhbXBsZSBsaW5lIHRvIG1hdGNoIGlmIGl0IGhhcyBtYXRjaGVkIF9wcm9wX2FuZF92YWx1ZV9yZQorIyAod2Ugd2FudCB0byBleGNsdWRlIGFsaWFzZXMpOgorIyAgICBVX0pHX0hBTVpBX09OX0hFSF9HT0FMPVVfSkdfVEVIX01BUkJVVEFfR09BTCwKK19wcm9wX2FuZF9hbGlhc19yZSA9IHJlLmNvbXBpbGUoIiAqVV9bMC05QS1aX10rICo9ICpVIikKKworZGVmIFBhcnNlVUNoYXJIZWFkZXIoaWN1X3NyY19yb290KToKKyAgdWNoYXJfcGF0aCA9IG9zLnBhdGguam9pbihpY3Vfc3JjX3Jvb3QsICJzb3VyY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tb24iLCAidW5pY29kZSIsICJ1Y2hhci5oIikKKyAgd2l0aCBvcGVuKHVjaGFyX3BhdGgsICJyIikgYXMgdWNoYXJfZmlsZToKKyAgICBtb2RlID0gIiIgICMgTW9kZSBzdHJpbmcgKD1wbmFtZSkgZHVyaW5nIGNvbnRleHQtc2Vuc2l0aXZlIHBhcnNpbmcuCisgICAgY29tbWVudF92YWx1ZSA9ICIiICAjIFByb3BlcnR5IHZhbHVlIGZyb20gYSBjb21tZW50IHByZWNlZGluZyBhbiBlbnVtLgorICAgICMgTm90ZTogVGhlIGVudW0gVVByb3BlcnR5IGlzIGZpcnN0IGluIHVjaGFyLmgsIGJlZm9yZSB0aGUgZW51bXMgZm9yIHZhbHVlcy4KKyAgICBmb3IgbGluZSBpbiB1Y2hhcl9maWxlOgorICAgICAgIyBQYXJzZSBzb21lIGVudW1zIHZpYSBjb250ZXh0LXNlbnNpdGl2ZSAibW9kZXMiLgorICAgICAgIyBOZWNlc3NhcnkgYmVjYXVzZSB0aGUgZW51bSBjb25zdGFudCBuYW1lcyBkbyBub3QgY29udGFpbgorICAgICAgIyBlbm91Z2ggaW5mb3JtYXRpb24uCisgICAgICBpZiAiZW51bSBVQ2hhckNhdGVnb3J5IiBpbiBsaW5lOgorICAgICAgICBtb2RlID0gImdjIgorICAgICAgICBjb21tZW50X3ZhbHVlID0gIiIKKyAgICAgICAgY29udGludWUKKyAgICAgIGlmIG1vZGUgPT0gImdjIjoKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJ9Iik6CisgICAgICAgICAgbW9kZSA9ICIiCisgICAgICAgICAgY29udGludWUKKyAgICAgICAgbWF0Y2ggPSBfZ2NfY29tbWVudF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICBjb21tZW50X3ZhbHVlID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBtYXRjaCA9IF9nY19yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtYXRjaCBhbmQgY29tbWVudF92YWx1ZToKKyAgICAgICAgICBnY19lbnVtID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICBwcm9wID0gX3Byb3BlcnRpZXNbImdjIl0KKyAgICAgICAgICB2bmFtZSA9IEdldFNob3J0UHJvcGVydHlWYWx1ZU5hbWUocHJvcCwgY29tbWVudF92YWx1ZSkKKyAgICAgICAgICBpY3VfdmFsdWVzID0gX3BuYW1lX3RvX2ljdV9wcm9wWyJnYyJdWzJdCisgICAgICAgICAgaWN1X3ZhbHVlcy5hcHBlbmQoKGdjX2VudW0sIHZuYW1lKSkKKyAgICAgICAgY29tbWVudF92YWx1ZSA9ICIiCisgICAgICAgIGNvbnRpbnVlCisgICAgICBpZiAiZW51bSBVQ2hhckRpcmVjdGlvbiB7IiBpbiBsaW5lOgorICAgICAgICBtb2RlID0gImJjIgorICAgICAgICBjb21tZW50X3ZhbHVlID0gIiIKKyAgICAgICAgY29udGludWUKKyAgICAgIGlmIG1vZGUgPT0gImJjIjoKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJ9Iik6CisgICAgICAgICAgbW9kZSA9ICIiCisgICAgICAgICAgY29udGludWUKKyAgICAgICAgbWF0Y2ggPSBfYmNfY29tbWVudF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICBjb21tZW50X3ZhbHVlID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBtYXRjaCA9IF9iY19yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtYXRjaCBhbmQgY29tbWVudF92YWx1ZToKKyAgICAgICAgICBiY19lbnVtID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICBwcm9wID0gX3Byb3BlcnRpZXNbImJjIl0KKyAgICAgICAgICB2bmFtZSA9IEdldFNob3J0UHJvcGVydHlWYWx1ZU5hbWUocHJvcCwgY29tbWVudF92YWx1ZSkKKyAgICAgICAgICBpY3VfdmFsdWVzID0gX3BuYW1lX3RvX2ljdV9wcm9wWyJiYyJdWzJdCisgICAgICAgICAgaWN1X3ZhbHVlcy5hcHBlbmQoKGJjX2VudW0sIHZuYW1lKSkKKyAgICAgICAgY29tbWVudF92YWx1ZSA9ICIiCisgICAgICAgIGNvbnRpbnVlCisgICAgICAjIE5vIG1vZGUsIHBhcnNlIGVudW0gY29uc3RhbnRzIHdob3NlIG5hbWVzIGNvbnRhaW4KKyAgICAgICMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHBhcnNlIHdpdGhvdXQgcmVxdWlyaW5nIGNvbnRleHQuCisgICAgICBtYXRjaCA9IF91Y2hhcl9yZS5tYXRjaChsaW5lKQorICAgICAgaWYgbWF0Y2g6CisgICAgICAgIHByb3BfZW51bSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIHByb3BfZW51bS5lbmRzd2l0aCgiX0xJTUlUIik6CisgICAgICAgICAgIyBJZ25vcmUgIlVDSEFSX0JJTkFSWV9MSU1JVD01NywiIGV0Yy4KKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBwbmFtZSA9IEdldFNob3J0UHJvcGVydHlOYW1lKHByb3BfZW51bVs2Ol0pCisgICAgICAgIGljdV9wcm9wID0gKHByb3BfZW51bSwgcG5hbWUsIFtdKQorICAgICAgICBfaWN1X3Byb3BlcnRpZXMuYXBwZW5kKGljdV9wcm9wKQorICAgICAgICBfcG5hbWVfdG9faWN1X3Byb3BbcG5hbWVdID0gaWN1X3Byb3AKKyAgICAgICAgY29udGludWUKKyAgICAgIG1hdGNoID0gX3VibG9ja19yZS5tYXRjaChsaW5lKQorICAgICAgaWYgbWF0Y2g6CisgICAgICAgIHByb3BfZW51bSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIHByb3BfZW51bSA9PSAiVUJMT0NLX0NPVU5UIjoKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICBwcm9wID0gX3Byb3BlcnRpZXNbImJsayJdCisgICAgICAgIHZuYW1lID0gR2V0U2hvcnRQcm9wZXJ0eVZhbHVlTmFtZShwcm9wLCBwcm9wX2VudW1bNzpdKQorICAgICAgICBpY3VfdmFsdWVzID0gX3BuYW1lX3RvX2ljdV9wcm9wWyJibGsiXVsyXQorICAgICAgICBpY3VfdmFsdWVzLmFwcGVuZCgocHJvcF9lbnVtLCB2bmFtZSkpCisgICAgICAgIGNvbnRpbnVlCisgICAgICBtYXRjaCA9IF9wcm9wX2FuZF92YWx1ZV9yZS5tYXRjaChsaW5lKQorICAgICAgaWYgbWF0Y2g6CisgICAgICAgIChwcm9wX2VudW0sIHZuYW1lKSA9IG1hdGNoLmdyb3VwKDEsIDMpCisgICAgICAgIGlmIHZuYW1lID09ICJDT1VOVCIgb3IgX3Byb3BfYW5kX2FsaWFzX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHBuYW1lID0gR2V0U2hvcnRQcm9wZXJ0eU5hbWUobWF0Y2guZ3JvdXAoMikpCisgICAgICAgIHByb3AgPSBfcHJvcGVydGllc1twbmFtZV0KKyAgICAgICAgdm5hbWUgPSBHZXRTaG9ydFByb3BlcnR5VmFsdWVOYW1lKHByb3AsIHZuYW1lKQorICAgICAgICBpY3VfdmFsdWVzID0gX3BuYW1lX3RvX2ljdV9wcm9wW3BuYW1lXVsyXQorICAgICAgICBpY3VfdmFsdWVzLmFwcGVuZCgocHJvcF9lbnVtLCB2bmFtZSkpCisgICMgY2NjLCBsY2NjLCB0Y2NjIHVzZSB0aGVpciBudW1lcmljIHZhbHVlcyBhcyAiZW51bSIgdmFsdWVzLgorICAjIEluIHRoZSBVQ0QgZGF0YSwgdGhlc2UgbnVtZXJpYyB2YWx1ZXMgYXJlIHRoZSBmaXJzdCB2YWx1ZSBuYW1lcywKKyAgIyBmb2xsb3dlZCBieSB0aGUgc2hvcnQgJiBsb25nIHZhbHVlIG5hbWVzLgorICAjIExpc3QgdGhlIGNjYyB2YWx1ZXMgaW4gbnVtZXJpYyBvcmRlci4KKyAgcHJvcCA9IF9wcm9wZXJ0aWVzWyJjY2MiXQorICBpY3VfdmFsdWVzID0gX3BuYW1lX3RvX2ljdV9wcm9wWyJjY2MiXVsyXQorICBmb3IgY2NjIGluIHNvcnRlZChbaW50KG5hbWUpIGZvciBuYW1lIGluIHByb3BbMl1dKToKKyAgICBpY3VfdmFsdWVzLmFwcGVuZCgoY2NjLCBzdHIoY2NjKSkpCisgIF9wbmFtZV90b19pY3VfcHJvcFsibGNjYyJdWzJdLmV4dGVuZChpY3VfdmFsdWVzKSAgIyBDb3B5IGNjYyAtPiBsY2NjLgorICBfcG5hbWVfdG9faWN1X3Byb3BbInRjY2MiXVsyXS5leHRlbmQoaWN1X3ZhbHVlcykgICMgQ29weSBjY2MgLT4gdGNjYy4KKworICAjIE5vIG5lZWQgdG8gcGFyc2UgcHJlZGljdGFibGUgR2VuZXJhbF9DYXRlZ29yeV9NYXNrIGVudW0gY29uc3RhbnRzLgorICAjIEp1c3QgZGVmaW5lIHRoZW0gaW4gQVNDSUkgb3JkZXIuCisgIHByb3AgPSBfcHJvcGVydGllc1siZ2NtIl0KKyAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFsiZ2NtIl1bMl0KKyAgZm9yIHZuYW1lIGluIHNvcnRlZChwcm9wWzJdKToKKyAgICBpY3VfdmFsdWVzLmFwcGVuZCgoIlVfR0NfIiArIHZuYW1lLnVwcGVyKCkgKyAiX01BU0siLCB2bmFtZSkpCisgICMgSGFyZGNvZGUga25vd24gdmFsdWVzIGZvciB0aGUgbm9ybWFsaXphdGlvbiBxdWljayBjaGVjayBwcm9wZXJ0aWVzLAorICAjIHNlZSB1bm9ybTIuaCBmb3IgdGhlIFVOb3JtYWxpemF0aW9uQ2hlY2tSZXN1bHQgZW51bS4KKyAgaWN1X3ZhbHVlcyA9IF9wbmFtZV90b19pY3VfcHJvcFsiTkZDX1FDIl1bMl0KKyAgaWN1X3ZhbHVlcy5hcHBlbmQoKCJVTk9STV9OTyIsICJOIikpCisgIGljdV92YWx1ZXMuYXBwZW5kKCgiVU5PUk1fWUVTIiwgIlkiKSkKKyAgaWN1X3ZhbHVlcy5hcHBlbmQoKCJVTk9STV9NQVlCRSIsICJNIikpCisgIF9wbmFtZV90b19pY3VfcHJvcFsiTkZLQ19RQyJdWzJdLmV4dGVuZChpY3VfdmFsdWVzKSAgIyBDb3B5IE5GQyAtPiBORktDLgorICAjIE5vICJtYXliZSIgdmFsdWVzIGZvciBORltLXUQuCisgIGljdV92YWx1ZXMgPSBfcG5hbWVfdG9faWN1X3Byb3BbIk5GRF9RQyJdWzJdCisgIGljdV92YWx1ZXMuYXBwZW5kKCgiVU5PUk1fTk8iLCAiTiIpKQorICBpY3VfdmFsdWVzLmFwcGVuZCgoIlVOT1JNX1lFUyIsICJZIikpCisgIF9wbmFtZV90b19pY3VfcHJvcFsiTkZLRF9RQyJdWzJdLmV4dGVuZChpY3VfdmFsdWVzKSAgIyBDb3B5IE5GRCAtPiBORktELgorCisKKyMgU2FtcGxlIGxpbmUgdG8gbWF0Y2g6CisjICAgIFVTQ1JJUFRfTE9NQSAgID0gMTM5LC8qIExvbWEgKi8KK191c2NyaXB0X3JlID0gcmUuY29tcGlsZSgKKyAgICAiICooVVNDUklQVF9bQS1aX10rKSAqPSAqWzAtOV0rICosICovXCogKihbQS1aXVthLXpdezN9KSAqXCovIikKKworZGVmIFBhcnNlVVNjcmlwdEhlYWRlcihpY3Vfc3JjX3Jvb3QpOgorICB1c2NyaXB0X3BhdGggPSBvcy5wYXRoLmpvaW4oaWN1X3NyY19yb290LCAic291cmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tb24iLCAidW5pY29kZSIsICJ1c2NyaXB0LmgiKQorICBpY3VfdmFsdWVzID0gX3BuYW1lX3RvX2ljdV9wcm9wWyJzYyJdWzJdCisgIHdpdGggb3Blbih1c2NyaXB0X3BhdGgsICJyIikgYXMgdXNjcmlwdF9maWxlOgorICAgIGZvciBsaW5lIGluIHVzY3JpcHRfZmlsZToKKyAgICAgIG1hdGNoID0gX3VzY3JpcHRfcmUubWF0Y2gobGluZSkKKyAgICAgIGlmIG1hdGNoOgorICAgICAgICAoc2NyaXB0X2VudW0sIHNjcmlwdF9jb2RlKSA9IG1hdGNoLmdyb3VwKDEsIDIpCisgICAgICAgIGljdV92YWx1ZXMuYXBwZW5kKChzY3JpcHRfZW51bSwgc2NyaXB0X2NvZGUpKQorCisKK2RlZiBDaGVja1BOYW1lc0RhdGEoKToKKyAgIiIiQ2hlY2tzIHRoYXQgZXZlcnkgSUNVIHByb3BlcnR5IGhhcyBhIGZ1bGwgc2V0IG9mIHZhbHVlIGVudW0gY29uc3RhbnRzLAorICBhbmQgdGhhdCB0aGUgX2ljdV9wcm9wZXJ0aWVzIHZhbHVlIG5hbWVzIG1hcCBiYWNrIHRvIHRoZSBVQ0QuIiIiCisgIG1pc3NpbmdfZW51bXMgPSBbXQorICBmb3IgKHBfZW51bSwgcG5hbWUsIHZhbHVlcykgaW4gX2ljdV9wcm9wZXJ0aWVzOgorICAgIHByb3AgPSBfcHJvcGVydGllc1twbmFtZV0KKyAgICB2bmFtZXMgPSBzZXQocHJvcFsyXSkgICMgTW9kaWZpYWJsZSBjb3B5IG9mIHRoZSBzZXQgb2Ygc2hvcnQgdmFsdWUgbmFtZXMuCisgICAgZm9yICh2X2VudW0sIHZuYW1lKSBpbiB2YWx1ZXM6CisgICAgICBpZiB2bmFtZSBub3QgaW4gdm5hbWVzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyA9ICVzICh1Y2hhci5oICVzKSBub3QgaW4gdGhlIFVDRFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHBuYW1lLCB2bmFtZSwgdl9lbnVtKSkKKyAgICAgIHZuYW1lcy5yZW1vdmUodm5hbWUpCisgICAgIyBFeGNlcHRpb25zIHRvIHRoZSBhbGwtdmFsdWVzIGNoZWNrOgorICAgICMgLSBJQ1UgZG9lcyBub3QgaGF2ZSBzcGVjaWZpYyBlbnVtIHZhbHVlcyBmb3IgYmluYXJ5IE5vL1llcy4KKyAgICAjIC0gSUNVIHJlcHJlc2VudHMgQWdlIHZhbHVlcyB2aWEgVVZlcnNpb25JbmZvIHJhdGhlciB0aGFuIGVudW0gY29uc3RhbnRzLgorICAgICMgLSBnYzogSUNVIGVudW0gVUNoYXJDYXRlZ29yeSBvbmx5IGhhcyB0aGUgc2luZ2xlLWNhdGVnb3J5IHZhbHVlcy4KKyAgICAjICAgICAgIChJQ1UncyBnY20gcHJvcGVydHkgaGFzIGFsbCBvZiB0aGUgVUNEIGdjIHByb3BlcnR5IHZhbHVlcy4pCisgICAgaWYgdm5hbWVzIGFuZCBub3QgKHByb3BbMF0gPT0gIkJpbmFyeSIgb3IgcG5hbWUgaW4gKCJhZ2UiLCAiZ2MiKSk6CisgICAgICBtaXNzaW5nX2VudW1zLmFwcGVuZCgocG5hbWUsIHZuYW1lcykpCisgIGlmIG1pc3NpbmdfZW51bXM6CisgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgIm1pc3NpbmcgdWNoYXIuaCBlbnVtIGNvbnN0YW50cyBmb3Igc29tZSBwcm9wZXJ0eSB2YWx1ZXM6ICVzIiAlCisgICAgICAgIG1pc3NpbmdfZW51bXMpCisKKworZGVmIFdyaXRlUE5hbWVzRGF0YUhlYWRlcihvdXRfcGF0aCk6CisgIHllYXIgPSBkYXRldGltZS5kYXRlLnRvZGF5KCkuc3RyZnRpbWUoIiVZIikKKyAgd2l0aCBvcGVuKG91dF9wYXRoLCAidyIpIGFzIG91dF9maWxlOgorICAgIG91dF9maWxlLndyaXRlKCIiIi8qKgorICogQ29weXJpZ2h0IChDKSAyMDAyLSIiIiArIHllYXIgKworIiIiLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIG1hY2hpbmUtZ2VuZXJhdGVkIGJ5OiBpY3UvdG9vbHMvdW5pY29kZS9weS9wcmVwYXJzZXVjZC5weQorICovCisKKyIiIikKKworICAgICMgTm90ZTogVGhlIHVjaGFyLmggJiB1c2NyaXB0LmggcGFyc2VycyBzdG9yZSB0aGUgSUNVIFVuaWNvZGUgcHJvcGVydGllcworICAgICMgYW5kIHZhbHVlcyBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgZGVmaW5pdGlvbiwKKyAgICAjIGFuZCB0aGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGVtIGluIHRoYXQgb3JkZXIuCisgICAgIyBTaW5jZSB0aGUgSUNVIEFQSSBjb25zdGFudHMgYXJlIHN0YWJsZSBhbmQgbmV3IHZhbHVlcyBhcmUgb25seQorICAgICMgYXBwZW5kZWQgYXQgdGhlIGVuZAorICAgICMgKG5ldyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggYmluYXJ5L2VudW0vLi4uIHJhbmdlKSwKKyAgICAjIHRoZSBvdXRwdXQgaXMgc3RhYmxlIGFzIHdlbGwuCisgICAgIyBXaGVuIGEgcHJvcGVydHkgb3IgdmFsdWUgY29uc3RhbnQgaXMgcmVuYW1lZCwKKyAgICAjIGl0IG9ubHkgY2hhbmdlcyB0aGUgbmFtZSBpdHNlbGYgaW4gdGhlIG91dHB1dDsKKyAgICAjIGl0IGRvZXMgbm90IG1vdmUgaW4gdGhlIG91dHB1dCBzaW5jZSB0aGVyZSBpcyBubyBzb3J0aW5nLgorICAgICMgVGhpcyBtaW5pbWl6ZXMgZGlmZnMgYW5kIGFzc2lzdHMgd2l0aCByZXZpZXdpbmcgYW5kIGV2YWx1YXRpbmcgdXBkYXRlcy4KKworICAgIHZlcnNpb24gPSBfdWNkX3ZlcnNpb24uc3BsaXQoJy4nKQorICAgIHdoaWxlIGxlbih2ZXJzaW9uKSA8IDQ6IHZlcnNpb24uYXBwZW5kKCIwIikKKyAgICBvdXRfZmlsZS53cml0ZSgiI2RlZmluZSBVTklDT0RFX1ZFUlNJT04geyAlcyB9XG5cbiIgJSAiLCAiLmpvaW4odmVyc2lvbikpCisKKyAgICAjIENvdW50IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhbGlhc2VzIGZvciBhbnkgcHJvcGVydHkgb3IgdmFsdWUuCisgICAgIyBXZSB3cml0ZSB0aGUgZmluYWwgdmFsdWUgYXQgdGhlIGVuZC4KKyAgICBtYXhfYWxpYXNlcyA9IG1heChsZW4oX2JpbmFyeV92YWx1ZXNbIk4iXSksIGxlbihfYmluYXJ5X3ZhbHVlc1siWSJdKSkKKworICAgICMgV3JpdGUgYW4gYXJyYXkgb2YgImJpbnByb3AiIFZhbHVlIG9iamVjdCBpbml0aWFsaXplcnMKKyAgICAjIHdpdGggdGhlIHZhbHVlIGFsaWFzZXMgc2hhcmVkIGFtb25nIGFsbCBiaW5hcnkgcHJvcGVydGllcy4KKyAgICBvdXRfZmlsZS53cml0ZSgic3RhdGljIGNvbnN0IFZhbHVlIFZBTFVFU19iaW5wcm9wWzJdID0ge1xuIikKKyAgICBvdXRfZmlsZS53cml0ZSgnICAgIFZhbHVlKDAsICIlcyIpLFxuJyAlICIgIi5qb2luKF9iaW5hcnlfdmFsdWVzWyJOIl0pKQorICAgIG91dF9maWxlLndyaXRlKCcgICAgVmFsdWUoMSwgIiVzIiksXG4nICUgIiAiLmpvaW4oX2JpbmFyeV92YWx1ZXNbIlkiXSkpCisgICAgb3V0X2ZpbGUud3JpdGUoIn07XG5cbiIpCisKKyAgICAjIEZvciBlYWNoIHByb3BlcnR5IHdpdGggbmFtZWQgdmFsdWVzLCB3cml0ZSBhbiBhcnJheSBvZgorICAgICMgVmFsdWUgb2JqZWN0IGluaXRpYWxpemVycyB3aXRoIHRoZSB2YWx1ZSBlbnVtIGFuZCB0aGUgYWxpYXNlcy4KKyAgICBmb3IgKHBfZW51bSwgcG5hbWUsIHZhbHVlcykgaW4gX2ljdV9wcm9wZXJ0aWVzOgorICAgICAgcHJvcCA9IF9wcm9wZXJ0aWVzW3BuYW1lXQorICAgICAgYWxpYXNlcyA9IHByb3BbMV0KKyAgICAgIGlmIGxlbihhbGlhc2VzKSA+IG1heF9hbGlhc2VzOiBtYXhfYWxpYXNlcyA9IGxlbihhbGlhc2VzKQorICAgICAgaWYgbm90IHZhbHVlczogY29udGludWUKKyAgICAgIG91dF9maWxlLndyaXRlKCJzdGF0aWMgY29uc3QgVmFsdWUgVkFMVUVTXyVzWyVkXSA9IHtcbiIgJQorICAgICAgICAgICAgICAgICAgICAgKHBuYW1lLCBsZW4odmFsdWVzKSkpCisgICAgICBmb3IgKHZfZW51bSwgdm5hbWUpIGluIHZhbHVlczoKKyAgICAgICAgYWxpYXNlcyA9IF9wcm9wZXJ0aWVzW3BuYW1lXVszXVt2bmFtZV0KKyAgICAgICAgIyBjY2MsIGxjY2MsIHRjY2M6IE9taXQgdGhlIG51bWVyaWMgc3RyaW5ncyBmcm9tIHRoZSBhbGlhc2VzLgorICAgICAgICAjIChTZWUgdGhlIGNvbW1lbnQgYWJvdXQgY2NjIGluIHRoZSBQcm9wZXJ0eVZhbHVlQWxpYXNlcy50eHQgaGVhZGVyLikKKyAgICAgICAgaWYgcG5hbWUuZW5kc3dpdGgoImNjYyIpOiBhbGlhc2VzID0gYWxpYXNlc1sxOl0KKyAgICAgICAgaWYgbGVuKGFsaWFzZXMpID4gbWF4X2FsaWFzZXM6IG1heF9hbGlhc2VzID0gbGVuKGFsaWFzZXMpCisgICAgICAgIGNhc3QgPSAiKGludDMyX3QpIiBpZiBwbmFtZSA9PSAiZ2NtIiBlbHNlICIiCisgICAgICAgIG91dF9maWxlLndyaXRlKCcgICAgVmFsdWUoJXMlcywgIiVzIiksXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgKGNhc3QsIHZfZW51bSwgIiAiLmpvaW4oYWxpYXNlcykpKQorICAgICAgb3V0X2ZpbGUud3JpdGUoIn07XG5cbiIpCisKKyAgICAjIEZvciBlYWNoIHByb3BlcnR5LCB3cml0ZSBhIFByb3BlcnR5IG9iamVjdCBpbml0aWFsaXplcgorICAgICMgd2l0aCB0aGUgcHJvcGVydHkgZW51bSwgaXRzIGFsaWFzZXMsIGFuZCBhIHJlZmVyZW5jZSB0byBpdHMgdmFsdWVzLgorICAgIG91dF9maWxlLndyaXRlKCJzdGF0aWMgY29uc3QgUHJvcGVydHkgUFJPUEVSVElFU1slZF0gPSB7XG4iICUKKyAgICAgICAgICAgICAgICAgICBsZW4oX2ljdV9wcm9wZXJ0aWVzKSkKKyAgICBmb3IgKGVudW0sIHBuYW1lLCB2YWx1ZXMpIGluIF9pY3VfcHJvcGVydGllczoKKyAgICAgIHByb3AgPSBfcHJvcGVydGllc1twbmFtZV0KKyAgICAgIGFsaWFzZXMgPSAiICIuam9pbihwcm9wWzFdKQorICAgICAgaWYgcHJvcFswXSA9PSAiQmluYXJ5IjoKKyAgICAgICAgb3V0X2ZpbGUud3JpdGUoJyAgICBQcm9wZXJ0eSglcywgIiVzIiksXG4nICUgKGVudW0sIGFsaWFzZXMpKQorICAgICAgZWxpZiB2YWx1ZXM6ICAjIFByb3BlcnR5IHdpdGggbmFtZWQgdmFsdWVzLgorICAgICAgICBvdXRfZmlsZS53cml0ZSgnICAgIFByb3BlcnR5KCVzLCAiJXMiLCBWQUxVRVNfJXMsICVkKSxcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAoZW51bSwgYWxpYXNlcywgcG5hbWUsIGxlbih2YWx1ZXMpKSkKKyAgICAgIGVsc2U6CisgICAgICAgIG91dF9maWxlLndyaXRlKCcgICAgUHJvcGVydHkoJXMsICIlcyIpLFxuJyAlIChlbnVtLCBhbGlhc2VzKSkKKyAgICBvdXRfZmlsZS53cml0ZSgifTtcblxuIikKKworICAgIG91dF9maWxlLndyaXRlKCJjb25zdCBpbnQzMl90IE1BWF9BTElBU0VTID0gJWQ7XG4iICUgbWF4X2FsaWFzZXMpCisKKyMgbWFpbigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKioqCisKK2RlZiBtYWluKCk6CisgIGdsb2JhbCBfbnVsbF9vcl9kZWZhdWx0cworICBpZiBsZW4oc3lzLmFyZ3YpIDwgNDoKKyAgICBwcmludCAoIlVzYWdlOiAlcyAgcGF0aC90by9VQ0Qvcm9vdCAgcGF0aC90by9JQ1Uvc3JjL3Jvb3QgICIKKyAgICAgICAgICAgInBhdGgvdG8vSUNVL3Rvb2xzL3Jvb3QiICUgc3lzLmFyZ3ZbMF0pCisgICAgcmV0dXJuCisgICh1Y2Rfcm9vdCwgaWN1X3NyY19yb290LCBpY3VfdG9vbHNfcm9vdCkgPSBzeXMuYXJndlsxOjRdCisgIHNvdXJjZV9maWxlcyA9IFtdCisgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHVjZF9yb290KToKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgIHNvdXJjZV9maWxlcy5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsIGZpbGUpKQorICBQcmVwcm9jZXNzRmlsZXMoc291cmNlX2ZpbGVzLCBpY3Vfc3JjX3Jvb3QpCisgICMgUGFyc2UgdGhlIHByb2Nlc3NlZCBmaWxlcyBpbiBhIHBhcnRpY3VsYXIgb3JkZXIuCisgIGZvciBmaWxlcyBpbiBfZmlsZXNfdG9fcGFyc2U6CisgICAgZm9yIChiYXNlbmFtZSwgcGF0aCwgcGFyc2VyKSBpbiBmaWxlczoKKyAgICAgIHByaW50ICJQYXJzaW5nICVzIiAlIGJhc2VuYW1lCisgICAgICB2YWx1ZSA9IF9maWxlc1tiYXNlbmFtZV0KKyAgICAgICMgVW5pY29kZSBkYXRhIGZpbGVzIGFyZSBpbiBVVEYtOC4KKyAgICAgIGNoYXJzZXQgPSAiVVRGLTgiCisgICAgICBpZiBiYXNlbmFtZSA9PSAiTmFtZXNMaXN0LnR4dCI6CisgICAgICAgICMgVGhlIE5hbWVzTGlzdCB1c2VkIHRvIGJlIGluIExhdGluLTEgYmVmb3JlIFVuaWNvZGUgNi4yLgorICAgICAgICBudW1lcmljX3VjZF92ZXJzaW9uID0gW2ludChmaWVsZCkgZm9yIGZpZWxkIGluIF91Y2RfdmVyc2lvbi5zcGxpdCgnLicpXQorICAgICAgICBpZiBudW1lcmljX3VjZF92ZXJzaW9uIDwgWzYsIDJdOiBjaGFyc2V0ID0gIklTTy04ODU5LTEiCisgICAgICBpbl9maWxlID0gY29kZWNzLm9wZW4ocGF0aCwgInIiLCBjaGFyc2V0KQorICAgICAgd2l0aCBpbl9maWxlOgorICAgICAgICBwYXJzZXIoaW5fZmlsZSkKKyAgX251bGxfb3JfZGVmYXVsdHMgPSBfbnVsbF92YWx1ZXMuY29weSgpCisgIF9udWxsX29yX2RlZmF1bHRzLnVwZGF0ZShfZGVmYXVsdHMpCisgICMgRXZlcnkgQ2F0YWxvZyBhbmQgRW51bWVyYXRlZCBwcm9wZXJ0eSBtdXN0IGhhdmUgYSBkZWZhdWx0IHZhbHVlLAorICAjIGZyb20gYSBAbWlzc2luZyBsaW5lLiAibnYiID0gIm51bGwgdmFsdWUiLgorICBwbnYgPSBbcG5hbWUgZm9yIChwbmFtZSwgbnYpIGluIF9udWxsX29yX2RlZmF1bHRzLml0ZXJpdGVtcygpIGlmIG52ID09ICI/PyJdCisgIGlmIHBudjoKKyAgICByYWlzZSBFeGNlcHRpb24oIm5vIGRlZmF1bHQgdmFsdWVzIChAbWlzc2luZyBsaW5lcykgZm9yICIgKworICAgICAgICAgICAgICAgICAgICAic29tZSBDYXRhbG9nIG9yIEVudW1lcmF0ZWQgcHJvcGVydGllczogJXMgIiAlIHBudikKKyAgIyBXcml0ZSBOb3JtYWxpemVyMiBpbnB1dCB0ZXh0IGZpbGVzLgorICAjIERvIHRoaXMgYmVmb3JlIGNvbXBhY3RpbmcgdGhlIGRhdGEgc28gdGhhdCB3ZSBuZWVkIG5vdCBoYW5kbGUgZmFsbGJhY2tzLgorICB1bmlkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oaWN1X3NyY19yb290LCAic291cmNlIiwgImRhdGEiLCAidW5pZGF0YSIpCisgIG5vcm0yX3BhdGggPSBvcy5wYXRoLmpvaW4odW5pZGF0YV9wYXRoLCAibm9ybTIiKQorICBpZiBub3Qgb3MucGF0aC5leGlzdHMobm9ybTJfcGF0aCk6IG9zLm1ha2VkaXJzKG5vcm0yX3BhdGgpCisgIFdyaXRlTm9ybTIobm9ybTJfcGF0aCkKKyAgIyBPcHRpbWl6ZSBibG9jayB2cy4gY3AgcHJvcGVydGllcy4KKyAgQ29tcGFjdEJsb2NrcygpCisgICMgV3JpdGUgdGhlIHBwdWNkLnR4dCBvdXRwdXQgZmlsZS4KKyAgb3V0X3BhdGggPSBvcy5wYXRoLmpvaW4odW5pZGF0YV9wYXRoLCAicHB1Y2QudHh0IikKKyAgd2l0aCBvcGVuKG91dF9wYXRoLCAidyIpIGFzIG91dF9maWxlOgorICAgIFdyaXRlUHJlcGFyc2VkVUNEKG91dF9maWxlKQorICAgIG91dF9maWxlLmZsdXNoKCkKKworICAjIFRPRE86IFByaW50TmFtZVN0YXRzKCkKKworICAjIElDVSBkYXRhIGZvciBwcm9wZXJ0eSAmIHZhbHVlIG5hbWVzIEFQSQorICBQYXJzZVVDaGFySGVhZGVyKGljdV9zcmNfcm9vdCkKKyAgUGFyc2VVU2NyaXB0SGVhZGVyKGljdV9zcmNfcm9vdCkKKyAgQ2hlY2tQTmFtZXNEYXRhKCkKKyAgZ2VucHJvcHNfcGF0aCA9IG9zLnBhdGguam9pbihpY3VfdG9vbHNfcm9vdCwgInVuaWNvZGUiLCAiYyIsICJnZW5wcm9wcyIpCisgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhnZW5wcm9wc19wYXRoKTogb3MubWFrZWRpcnMoZ2VucHJvcHNfcGF0aCkKKyAgb3V0X3BhdGggPSBvcy5wYXRoLmpvaW4oZ2VucHJvcHNfcGF0aCwgInBuYW1lc19kYXRhLmgiKQorICBXcml0ZVBOYW1lc0RhdGFIZWFkZXIob3V0X3BhdGgpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgbWFpbigpCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vQnVuZGxlLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vQnVuZGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExZWVjZAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9CdW5kbGUuamF2YQpAQCAtMCwwICsxLDQ3MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS5ndWkuUkJNYW5hZ2VyR1VJOworCisvKioKKyAqIEEgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgQnVuZGxlIG9mIFJlc291cmNlcyBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50LgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBCdW5kbGUgeworICAgIAorICAgIC8qKgorICAgICAqIFRoZSBmb2xsb3dpbmcgcHVibGljIGNsYXNzIHZhcmlhYmxlcyByZWZsZWN0IHRoZSB2YXJpb3VzIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgaW5jbHVkZWQgYXMKKyAgICAgKiBtZXRhLWRhdGEgaW4gYSByZXNvdXJjZSBidW5kbGUgZm9ybWF0dGVkIGJ5IFJCTWFuYWdlcgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgbmFtZTsKKyAgICAvKioKKyAgICAgKiBUaGUgZW5jb2Rpbmcgb2YgdGhlIGJ1bmRsZSAoZS5nLiAnZW4nLCAnZW5fVVMnLCAnZGUnLCBldGMuKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZW5jb2Rpbmc7CisgICAgLyoqCisgICAgICogQSBkZXNjcmlwdG9yIG9mIHRoZSBsYW5ndWFnZSBpbiB0aGUgZW5jb2RpbmcgKGUuZy4gRW5nbGlzaCwgR2VybWFuLCBldGMuKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgbGFuZ3VhZ2U7CisgICAgLyoqCisgICAgICogQSBkZXNjcmlwdG9yIG9mIHRoZSBjb3VudHJ5IGluIHRoZSBlbmNvZGluZyAoZS5nLiBVUywgQ2FuYWRhLCBHcmVhdCBCcml0YWluKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgY291bnRyeTsKKyAgICAvKioKKyAgICAgKiBUaGUgZGVzY3JpcHRvciBvZiB0aGUgdmFyaWFudCBpbiB0aGUgZW5jb2RpbmcgKGUuZy4gRXVybywgSXJpc2gsIGV0Yy4pCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB2YXJpYW50OworICAgIC8qKgorICAgICAqIEEgY29tbWVudCBjb25jZXJuaW5nIHRoZSBidW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGNvbW1lbnQ7CisgICAgLyoqCisgICAgICogVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgdGhlIG1hbmFnZXJtZW50IG9mIHRoaXMgYnVuZGxlCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBtYW5hZ2VyOworICAgIAorICAgIHByaXZhdGUgVHJlZVNldCBncm91cHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSB2ZWN0b3Igb2YgZ3JvdXBzIG9mIE5MUyBpdGVtcywgdGhlIGtleSBpcyB0aGUgZ3JvdXAgbmFtZQorICAgIAorICAgIC8qKgorICAgICAqIEEgaGFzaHRhYmxlIG9mIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGJ1bmRsZSwgaGFzaGVkIGFjY29yZGluZyB0byB0aGVpcgorICAgICAqIE5MUyBrZXkuCisgICAgICovCisgICAgCisgICAgcHVibGljIEhhc2h0YWJsZSBhbGxJdGVtczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGhhc2h0YWJsZSBvZiBhbGwgaXRlbXMgaW4gdGhlIGZpbGUsIHRoZSBrZXkgaXMgdGhlIE5MUyBrZXkKKyAgICAKKyAgICBwcml2YXRlIFRyZWVTZXQgdW50cmFuc2xhdGVkSXRlbXM7ICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmVjdG9yIG9mIGFsbCBpdGVtcyB3aGljaCBhcmUgdW50cmFuc2xhdGVkCisgICAgCisgICAgLyoqCisgICAgICogQSB2ZWN0b3IgY29udGFpbmluZyBhbGwgb2YgdGhlIGl0ZW1zIHdoaWNoIGFyZSBkdXBsaWNhdGVzIChiYXNlZCBvbiB0aGUgTkxTIGtleXMpCisgICAgICogb2YgaXRlbXMgcHJldmlvdXNseSBkZWNsYXJlZCBpbiB0aGUgYnVuZGxlLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBWZWN0b3IgZHVwbGljYXRlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSB2ZWN0b3Igb2YgaXRlbXMgd2hpY2ggYXJlIGR1cGxpY2F0ZXMgKE5MUyBLZXlzKSBvZiBwcmV2aW91cyBpdGVtcworCQkKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYW4gZW1wdHkgYnVuZGxlIHdpdGggYSBnaXZlbiBlbmNvZGluZworICAgICAqLworICAgIAorICAgIHB1YmxpYyBCdW5kbGUoU3RyaW5nIGVuY29kaW5nKSB7CisgICAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZzsKKyAgICAgICAgbGFuZ3VhZ2UgPSBudWxsOworICAgICAgICBjb3VudHJ5ICA9IG51bGw7CisgICAgICAgIHZhcmlhbnQgID0gbnVsbDsKKyAgICAgICAgY29tbWVudCAgPSBudWxsOworICAgICAgICBtYW5hZ2VyICA9IG51bGw7CisgICAgICAgIGdyb3VwcyA9IG5ldyBUcmVlU2V0KG5ldyBDb21wYXJhdG9yKCkgeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIShvMSBpbnN0YW5jZW9mIEJ1bmRsZUdyb3VwKSB8fCAhKG8yIGluc3RhbmNlb2YgQnVuZGxlR3JvdXApKQorICAgICAgICAgICAgICAgIAlyZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBCdW5kbGVHcm91cCBnMSA9IChCdW5kbGVHcm91cClvMTsKKyAgICAgICAgICAgICAgICBCdW5kbGVHcm91cCBnMiA9IChCdW5kbGVHcm91cClvMjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZzEuZ2V0TmFtZSgpLmNvbXBhcmVUbyhnMi5nZXROYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICB1bnRyYW5zbGF0ZWRJdGVtcyA9IG5ldyBUcmVlU2V0KG5ldyBDb21wYXJhdG9yKCkgeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIShvMSBpbnN0YW5jZW9mIEJ1bmRsZUl0ZW0pIHx8ICEobzIgaW5zdGFuY2VvZiBCdW5kbGVJdGVtKSkgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpMSA9IChCdW5kbGVJdGVtKW8xOworICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaTIgPSAoQnVuZGxlSXRlbSlvMjsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTEuZ2V0S2V5KCkuY29tcGFyZVRvKGkyLmdldEtleSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBkdXBsaWNhdGVzID0gbmV3IFZlY3RvcigpOworICAgICAgICBhbGxJdGVtcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIEVuY29kaW5ncyBhcmUgb2YgdGhlIGZvcm0gLT4gbGFuZ3VhZ2VfY291bnRyeV92YXJpYW50IDwtIChmb3IgZXhhbXBsZTogImVuX3VzX3NvdXRoZXJuIikuCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbGFuZ3VhZ2UgZW5jb2Rpbmcgc3RyaW5nLCBvciBudWxsIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgKi8KKwkJCisgICAgcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZUVuY29kaW5nKCkgeworICAgICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBpZiAoZW5jb2RpbmcuaW5kZXhPZigiXyIpID49IDApCisgICAgICAgICAgICByZXR1cm4gZW5jb2Rpbmcuc3Vic3RyaW5nKDAsZW5jb2RpbmcuaW5kZXhPZigiXyIpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kaW5nLnRyaW0oKTsKKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIEVuY29kaW5ncyBhcmUgb2YgdGhlIGZvcm0gLT4gbGFuZ3VhZ2VfY291bnRyeV92YXJpYW50IDwtIChmb3IgZXhhbXBsZTogImVuX3VzX3NvdXRoZXJuIikuCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY291bnRyeSBlbmNvZGluZyBzdHJpbmcsIG9yIG51bGwgaWYgaXQgaXMgbm90IHNwZWNpZmllZAorICAgICAqLworCQkKKyAgICBwdWJsaWMgU3RyaW5nIGdldENvdW50cnlFbmNvZGluZygpIHsKKyAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwgfHwgZW5jb2RpbmcuaW5kZXhPZigiXyIpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAvLyBTdHJpcCBvZmYgdGhlIGxhbmd1YWdlCisgICAgICAgIFN0cmluZyB3b3JrU3RyID0gZW5jb2Rpbmcuc3Vic3RyaW5nKGVuY29kaW5nLmluZGV4T2YoIl8iKSsxLGVuY29kaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKHdvcmtTdHIuaW5kZXhPZigiXyIpID49IDApCisgICAgICAgICAgICByZXR1cm4gd29ya1N0ci5zdWJzdHJpbmcoMCxlbmNvZGluZy5pbmRleE9mKCJfIikpOworICAgICAgICByZXR1cm4gd29ya1N0ci50cmltKCk7CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBFbmNvZGluZ3MgYXJlIG9mIHRoZSBmb3JtIC0+IGxhbmd1YWdlX2NvdW50cnlfdmFyaWFudCA8LSAoZm9yIGV4YW1wbGU6ICJlbl91c19zb3V0aGVybiIpLgorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHZhcmlhbnQgZW5jb2Rpbmcgc3RyaW5nLCBvciBudWxsIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgKi8KKwkJCisgICAgcHVibGljIFN0cmluZyBnZXRWYXJpYW50RW5jb2RpbmcoKSB7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsIHx8IGVuY29kaW5nLmluZGV4T2YoIl8iKSA8IDApCisgICAgICAgIAlyZXR1cm4gbnVsbDsKKyAgICAgICAgLy8gU3RyaXAgb2ZmIHRoZSBsYW5ndWFnZQorICAgICAgICBTdHJpbmcgd29ya1N0ciA9IGVuY29kaW5nLnN1YnN0cmluZyhlbmNvZGluZy5pbmRleE9mKCJfIikrMSxlbmNvZGluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmICh3b3JrU3RyID09IG51bGwgfHwgd29ya1N0ci5sZW5ndGgoKSA8IDEgfHwgd29ya1N0ci5pbmRleE9mKCJfIikgPCAwKQorICAgICAgICAJcmV0dXJuIG51bGw7CisgICAgICAgIC8vIFN0cmlwIG9mZiB0aGUgY291bnRyeQorICAgICAgICB3b3JrU3RyID0gd29ya1N0ci5zdWJzdHJpbmcoZW5jb2RpbmcuaW5kZXhPZigiXyIpKzEsIHdvcmtTdHIubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gd29ya1N0ci50cmltKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIFVudHJhbnNsYXRlZEl0ZW1zIGFzIGEgdmVjdG9yLiBJIHNob3VsZCBmaW5kIHdoZXJlIHRoaXMgaGFwcGVucyBhbmQgc3RvcCBpdC4KKyAgICAgKi8KKwkJCisgICAgcHVibGljIFZlY3RvciBnZXRVbnRyYW5zbGF0ZWRJdGVtc0FzVmVjdG9yKCkgeworICAgICAgICBJdGVyYXRvciBpdGVyID0gdW50cmFuc2xhdGVkSXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkKKyAgICAgICAgCXYuYWRkRWxlbWVudChpdGVyLm5leHQoKSk7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKwkJCisgICAgLyoqCisgICAgICogQ2hlY2tzIGFsbCBpdGVtcyBpbiB0aGUgdW50cmFuc2xhdGVkIGl0ZW1zIHNldC4gSWYgdGhleSBiZWxvbmcgdG8gYSBncm91cCB3aG9zZSBuYW1lCisgICAgICogbWF0Y2hlcyB0aGUgcGFzc2VkIGluIG5hbWUsIHRoZW4gdGhleSBhcmUgcmVtb3ZlZC4KKyAgICAgKi8KKwkJCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVW50cmFuc2xhdGVkSXRlbXNCeUdyb3VwKFN0cmluZyBncm91cE5hbWUpIHsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IHVudHJhbnNsYXRlZEl0ZW1zLml0ZXJhdG9yKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IG51bGw7CisgICAgICAgICAgICAgICAgaXRlbSA9IChCdW5kbGVJdGVtKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVVbnRyYW5zbGF0ZWRJdGVtKGl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFJCTWFuYWdlckdVSS5kZWJ1Z01zZyhlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUgaWYgYW4gaXRlbSBvZiB0aGUgZ2l2ZW4ga2V5IG5hbWUgZXhpc3RzIGluIHRoZSBzZXQgb2YgdW50cmFuc2xhdGVkIGl0ZW1zLiBJZgorICAgICAqIGl0IGRvZXMgZXhpc3QsIHRoZW4gaXQgaXMgcmVtb3ZlZC4KKyAgICAgKi8KKwkJCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVW50cmFuc2xhdGVkSXRlbShTdHJpbmcgbmFtZSkgeworICAgICAgICBJdGVyYXRvciBpdGVyID0gdW50cmFuc2xhdGVkSXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBCdW5kbGVJdGVtIGl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVyLm5leHQoKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmdldEtleSgpLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIHVudHJhbnNsYXRlZEl0ZW1zLnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwkJCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYm9vbGVhbiBvZiB3ZXRoZXIgYSBncm91cCBvZiBhIGdpdmVuIG5hbWUgZXhpc3RzIGluIHRoZSBidW5kbGUKKyAgICAgKi8KKwkJCisgICAgcHVibGljIGJvb2xlYW4gaGFzR3JvdXAoU3RyaW5nIGdyb3VwTmFtZSkgeworICAgICAgICBJdGVyYXRvciBpdGVyID0gZ3JvdXBzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApaXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoZ3JvdXAuZ2V0TmFtZSgpLmVxdWFscyhncm91cE5hbWUpKQorICAgICAgICAgICAgCXJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGdyb3VwIG9mIHRoZSBnaXZlbiBuYW1lIGFuZCBvcHRpb25hbGx5IGFzc29jaWF0ZXMgYSBjb21tZW50IHdpdGgKKyAgICAgKiB0aGF0IGdyb3VwLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIGFkZEJ1bmRsZUdyb3VwKFN0cmluZyBncm91cE5hbWUsIFN0cmluZyBncm91cENvbW1lbnQpIHsKKyAgICAgICAgQnVuZGxlR3JvdXAgYmcgPSBuZXcgQnVuZGxlR3JvdXAodGhpcywgZ3JvdXBOYW1lKTsKKyAgICAgICAgYmcuc2V0Q29tbWVudChncm91cENvbW1lbnQpOworICAgICAgICBhZGRCdW5kbGVHcm91cChiZyk7CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIHRoZSBncm91cCBvZiB0aGUgZ2l2ZW4gbmFtZSBpZiBpdCBleGlzdHMgaW4gdGhlIGJ1bmRsZQorICAgICAqLworCQkKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVHcm91cChTdHJpbmcgZ3JvdXBOYW1lKSB7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBncm91cHMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBCdW5kbGVHcm91cCB0ZW1wR3JvdXAgPSAoQnVuZGxlR3JvdXApaXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAodGVtcEdyb3VwLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBOYW1lKSkgeworICAgICAgICAgICAgICAgIGdyb3Vwcy5yZW1vdmUodGVtcEdyb3VwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBSZW1vdmUgdGhlIGl0ZW1zIGZyb20gdGhlIHVudGFuc2xhdGVkIGl0ZW1zCisgICAgICAgIHJlbW92ZVVudHJhbnNsYXRlZEl0ZW1zQnlHcm91cChncm91cE5hbWUpOworCQkJCisgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgSXRlbXMKKyAgICAgICAgRW51bWVyYXRpb24gZWxlbXMgPSBhbGxJdGVtcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZShlbGVtcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0pZWxlbXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0TmFtZSgpLmVxdWFscyhncm91cE5hbWUpKSB7CisgICAgICAgICAgICAgICAgYWxsSXRlbXMucmVtb3ZlKGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEgc2luZ2xlIHJlc291cmNlIGl0ZW0gZnJvbSB0aGUgYnVuZGxlCisgICAgICovCisJCQorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUl0ZW0oU3RyaW5nIGtleSkgeworICAgICAgICBPYmplY3QgbyA9IGFsbEl0ZW1zLmdldChrZXkpOworICAgICAgICBpZiAobyAhPSBudWxsKSB7CisgICAgICAgICAgICBCdW5kbGVJdGVtIGl0ZW0gPSAoQnVuZGxlSXRlbSlvOworICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gYWxsSXRlbXMgSGFzaHRhYmxlCisgICAgICAgICAgICBhbGxJdGVtcy5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGl0ZW0ncyBncm91cAorICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0UGFyZW50R3JvdXAoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSBpdGVtLmdldFBhcmVudEdyb3VwKCk7CisgICAgICAgICAgICAgICAgZ3JvdXAucmVtb3ZlQnVuZGxlSXRlbShrZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gdW50cmFuc2xhdGVkSXRlbXMgSGFzaHRhYmxlCisgICAgICAgICAgICByZW1vdmVVbnRyYW5zbGF0ZWRJdGVtKGtleSk7CisgICAgICAgIH0KKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIEF0dGVtcHRzIHRvIGFkZCBhIEJ1bmRsZUl0ZW0gdG8gdGhlIHVudHJhbnNsYXRlZEl0ZW1zLiBUaGUgYWRkaXRpb24gd2lsbCBmYWlsIGluIHR3byBjYXNlczogT25lLCBpZgorICAgICAqIHRoZSBpdGVtIGRvZXMgbm90IGFsbCByZWFkeSBiZWxvbmcgdG8gdGhpcyBCdW5kbGUsIGFuZCBUd28sIGlmIHRoZSBpdGVtIGlzIGFsbCByZWFkeSBpbiB0aGUgc2V0IG9mCisgICAgICogdW50cmFuc2xhdGVkIGl0ZW1zLgorICAgICAqLworCQkKKyAgICBwdWJsaWMgdm9pZCBhZGRVbnRyYW5zbGF0ZWRJdGVtKEJ1bmRsZUl0ZW0gaXRlbSkgeworICAgICAgICBpZiAoaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldFBhcmVudEJ1bmRsZSgpICE9IHRoaXMpCisgICAgICAgIAlyZXR1cm47CisgICAgICAgIC8vIFJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisgICAgICAgIGlmICh1bnRyYW5zbGF0ZWRJdGVtcy5jb250YWlucyhpdGVtKSkgeworICAgICAgICAJdW50cmFuc2xhdGVkSXRlbXMucmVtb3ZlKGl0ZW0pOworICAgICAgICB9CisgICAgCXVudHJhbnNsYXRlZEl0ZW1zLmFkZChpdGVtKTsKKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjdXJyZW50bHkgbWFya2VkIGFzIHVudHJhbnNsYXRlZAorICAgICAqLworCQkKKyAgICBwdWJsaWMgaW50IGdldFVudHJhbnNsYXRlZEl0ZW1zU2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIHVudHJhbnNsYXRlZEl0ZW1zLnNpemUoKTsKKyAgICB9CisJCQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGluZGV4dGggdW50cmFuc2xhdGVkIGl0ZW0KKyAgICAgKi8KKwkJCisgICAgcHVibGljIEJ1bmRsZUl0ZW0gZ2V0VW50cmFuc2xhdGVkSXRlbShpbnQgaW5kZXgpIHsKKyAgICAgICAgaWYgKGluZGV4ID49IHVudHJhbnNsYXRlZEl0ZW1zLnNpemUoKSkKKyAgICAgICAgCXJldHVybiBudWxsOworICAgICAgICBJdGVyYXRvciBpdGVyID0gdW50cmFuc2xhdGVkSXRlbXMuaXRlcmF0b3IoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgaW5kZXg7IGkrKykKKyAgICAgICAgCWl0ZXIubmV4dCgpOworICAgICAgICByZXR1cm4gKEJ1bmRsZUl0ZW0paXRlci5uZXh0KCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgdmFyaW91cyByZXNvdXJjZSBidW5kbGUgZ3JvdXBzIHN0b3JlZCBpbiBhIFZlY3RvciBjb2xsZWN0aW9uLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBWZWN0b3IgZ2V0R3JvdXBzQXNWZWN0b3IoKSB7CisgICAgICAgIFZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworICAgICAgICBJdGVyYXRvciBpdGVyID0gZ3JvdXBzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApaXRlci5uZXh0KCk7CisgICAgICAgICAgICB2LmFkZEVsZW1lbnQoZ3JvdXApOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2OworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZ3JvdXBzIGluIHRoZSBidW5kbGUuCisgICAgICovCisgICAgCisgICAgcHVibGljIGludCBnZXRHcm91cENvdW50KCkgeworICAgICAgICByZXR1cm4gZ3JvdXBzLnNpemUoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGJ1bmRsZSBncm91cCBnaXZlbiBhIGNlcnRhaW4gaW5kZXguCisgICAgICovCisgICAgCisgICAgcHVibGljIEJ1bmRsZUdyb3VwIGdldEJ1bmRsZUdyb3VwKGludCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2V0R3JvdXBDb3VudCgpKQorICAgICAgICAJcmV0dXJuIG51bGw7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBncm91cHMuaXRlcmF0b3IoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgaW5kZXg7IGkrKykKKyAgICAgICAgCWl0ZXIubmV4dCgpOworICAgICAgICByZXR1cm4gKEJ1bmRsZUdyb3VwKWl0ZXIubmV4dCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIExvb2tzIGZvciBhIGJ1bmRsZSBncm91cCBvZiBhIGdpdmVuIG5hbWUgd2l0aGluIGEgYnVuZGxlIGFuZAorICAgICAqIHJldHVybnMgaXQgaWYgZm91bmQuCisgICAgICovCisJCQorICAgIHB1YmxpYyBCdW5kbGVHcm91cCBnZXRCdW5kbGVHcm91cChTdHJpbmcgZ3JvdXBOYW1lKSB7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBncm91cHMuaXRlcmF0b3IoKTsKKyAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWl0ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKGdyb3VwLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBOYW1lKSkKKyAgICAgICAgICAgIAlyZXR1cm4gZ3JvdXA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIExvb2tzIHVwIGFuZCByZXR1cm5zIGEgYnVuZGxlIGl0ZW0gc3RvcmVkIGluIHRoZSBidW5kbGUgYmFzZWQgb24gaXRzCisgICAgICogTkxTIGxvb2t1cCBrZXkuCisgICAgICovCisgICAgCisgICAgcHVibGljIEJ1bmRsZUl0ZW0gZ2V0QnVuZGxlSXRlbShTdHJpbmcga2V5KSB7CisgICAgICAgIHJldHVybiAoQnVuZGxlSXRlbSlhbGxJdGVtcy5nZXQoa2V5KTsKKyAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgIC8qKgorICAgICAqIE9uZSBncm91cCBpcyBjcmVhdGVkIGZvciBhbGwgYnVuZGxlcyBjYWxsZWQgJ1VuZ3JvdXBlZCBJdGVtcycuIFRoaXMgaXMgdGhlIGJ1bmRsZQorICAgICAqIGdyb3VwIGluIHdoaWNoIGJ1bmRsZSBpdGVtcyBhcmUgcGxhY2VkIHRoYXQgYXJlIG5vdCBzcGVjaWZpY2FsbHkgZ3JvdXBlZCBpbiB0aGUKKyAgICAgKiByZXNvdXJjZSBidW5kbGUgZmlsZS4gVGhpcyBtZXRob2QgcmV0dXJucyB0aGF0IGJ1bmRsZSBncm91cC4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgQnVuZGxlR3JvdXAgZ2V0VW5ncm91cGVkR3JvdXAoKSB7CisgICAgICAgIHJldHVybiBnZXRCdW5kbGVHcm91cCgiVW5ncm91cGVkIEl0ZW1zIik7CisgICAgfQorCQkKKyAgICAvKioKKyAgICAgKiBBZGQgYSBidW5kbGUgZ3JvdXAgdG8gdGhlIGJ1bmRsZQorICAgICAqLworICAgICAKKyAgICBwdWJsaWMgdm9pZCBhZGRCdW5kbGVHcm91cChCdW5kbGVHcm91cCBiZykgeworICAgICAgICBncm91cHMuYWRkKGJnKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSBidW5kbGUgaXRlbSB0byB0aGUgYnVuZGxlLiBUaGlzIGJ1bmRsZSBpdGVtIHNob3VsZCBhbGwgcmVhZHkgaGF2ZSBpdHMKKyAgICAgKiBidW5kbGUgZ3JvdXAgYXNzaWduZWQuCisgICAgICovCisJCQorICAgIHB1YmxpYyB2b2lkIGFkZEJ1bmRsZUl0ZW0oQnVuZGxlSXRlbSBpdGVtKSB7CisgICAgICAgIGlmIChhbGxJdGVtcy5jb250YWluc0tleShpdGVtLmdldEtleSgpKSkgeworICAgICAgICAgICAgZHVwbGljYXRlcy5hZGRFbGVtZW50KGl0ZW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCEoZ3JvdXBzLmNvbnRhaW5zKGl0ZW0uZ2V0UGFyZW50R3JvdXAoKSkpKQorICAgICAgICAgICAgCWFkZEJ1bmRsZUdyb3VwKGl0ZW0uZ2V0UGFyZW50R3JvdXAoKSk7CisgICAgICAgICAgICBpdGVtLmdldFBhcmVudEdyb3VwKCkuYWRkQnVuZGxlSXRlbShpdGVtKTsKKyAgICAgICAgICAgIGFsbEl0ZW1zLnB1dChpdGVtLmdldEtleSgpLCBpdGVtKTsKKyAgICAgICAgICAgIHJlbW92ZVVudHJhbnNsYXRlZEl0ZW0oaXRlbS5nZXRLZXkoKSk7CisgICAgICAgICAgICBpZiAoIWl0ZW0uaXNUcmFuc2xhdGVkKCkpCisgICAgICAgICAgICAJYWRkVW50cmFuc2xhdGVkSXRlbShpdGVtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBIG1ldGhvZCB1c2VmdWwgaW4gZGVidWdnaW5nLiBUaGUgc3RyaW5nIHJldHVybmVkIGRpc3BsYXlzIHRoZSBlbmNvZGluZworICAgICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidW5kbGUgYW5kIHdldGhlciBvciBub3QgaXQgaXMgdGhlIGJhc2UgY2xhc3Mgb2YKKyAgICAgKiBhIHJlc291cmNlIGJ1bmRsZS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmcgcmV0U3RyID0gbmV3IFN0cmluZygpOworICAgICAgICBpZiAobGFuZ3VhZ2UgIT0gbnVsbCAmJiAhbGFuZ3VhZ2UuZXF1YWxzKCIiKSkgcmV0U3RyID0gbGFuZ3VhZ2U7CisgICAgICAgIGlmIChjb3VudHJ5ICE9IG51bGwgJiYgIWNvdW50cnkuZXF1YWxzKCIiKSkgcmV0U3RyICs9ICIsICIgKyBjb3VudHJ5OworICAgICAgICBpZiAodmFyaWFudCAhPSBudWxsICYmICF2YXJpYW50LmVxdWFscygiIikpIHJldFN0ciArPSAiLCAiICsgdmFyaWFudDsKKwkJCQorICAgICAgICByZXRTdHIgKz0gIiAoIiArIChlbmNvZGluZyA9PSBudWxsIHx8IGVuY29kaW5nLmVxdWFscygiIikgPyAiQmFzZSBDbGFzcyIgOiBlbmNvZGluZykgKyAiKSI7CisgICAgICAgIHJldHVybiByZXRTdHI7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgU3RyaW5nIHdoaWNoIGlzIHN1aXRhYmxlIGZvciBpbmNsdXNpb24gaW4gYSAucHJvcGVydGllcworICAgICAqIHN0eWxlIHJlc291cmNlIGJ1bmRsZS4gSXQgYXR0YWNoZXMgKGluIGNvbW1lbnRzKSB0aGUgbWV0YSBkYXRhIHRoYXQgUkJNYW5hZ2VyCisgICAgICogcmVhZHMgdG8gbWFuYWdlIHRoZSByZXNvdXJjZSBidW5kbGUgZmlsZS4gVGhpcyBwb3J0aW9uIG9mIHRoZSBvdXRwdXQgc2hvdWxkCisgICAgICogYmUgaW5jbHVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlIGZpbGUuCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyB0b091dHB1dFN0cmluZygpIHsKKyAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIHJldFN0ciAgPSAiIyBAZmlsZSAgICAgICAgICAiICsgbmFtZSAgICAgKyAiXG4iOworICAgICAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkgcmV0U3RyICs9ICIjIEBmaWxlRW5jb2RpbmcgICIgKyBlbmNvZGluZyArICJcbiI7CisgICAgICAgIGlmIChsYW5ndWFnZSAhPSBudWxsKSByZXRTdHIgKz0gIiMgQGZpbGVMYW5ndWFnZSAgIiArIGxhbmd1YWdlICsgIlxuIjsKKyAgICAgICAgaWYgKGNvdW50cnkgICE9IG51bGwpIHJldFN0ciArPSAiIyBAZmlsZUNvdW50cnkgICAiICsgY291bnRyeSAgKyAiXG4iOworICAgICAgICBpZiAodmFyaWFudCAgIT0gbnVsbCkgcmV0U3RyICs9ICIjIEBmaWxlVmFyaWFudCAgICIgKyB2YXJpYW50ICArICJcbiI7CisgICAgICAgIGlmIChtYW5hZ2VyICAhPSBudWxsKSByZXRTdHIgKz0gIiMgQGZpbGVNYW5hZ2VyICAgIiArIG1hbmFnZXIgICsgIlxuIjsKKyAgICAgICAgaWYgKGNvbW1lbnQgICE9IG51bGwpIHJldFN0ciArPSAiIyBAZmlsZUNvbW1lbnQgICAiICsgY29tbWVudCAgKyAiXG4iOworICAgICAgICByZXR1cm4gcmV0U3RyOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgaGVscGluZyBtZXRob2QgZm9yIG91dHB1dHRpbmcgdGhlIGZvcm1hdHRlZCBjb250ZW50cyBvZiB0aGUgYnVuZGxlIHRvIGEKKyAgICAgKiBwcmludCBzdHJlYW0uIFRoZSBtZXRob2QgZmlyc3Qgb3V0cHV0cyB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIGFuZCB0aGVuIG91dHB1dHMKKyAgICAgKiBlYWNoIGJ1bmRsZSBncm91cCdzIGZvcm1hdHRlZCBkYXRhIHdoaWNoIGluY2x1ZGVzIGVhY2ggYnVuZGxlIGl0ZW0uCisgICAgICovCisJCQorICAgIHB1YmxpYyB2b2lkIHdyaXRlQ29udGVudHMoUHJpbnRTdHJlYW0gcHMpIHsKKyAgICAgICAgcHMucHJpbnRsbih0aGlzLnRvT3V0cHV0U3RyaW5nKCkpOworICAgICAgICBJdGVyYXRvciBpdGVyID0gZ3JvdXBzLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgKChCdW5kbGVHcm91cClpdGVyLm5leHQoKSkud3JpdGVDb250ZW50cyhwcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBIGhlbHBpbmcgbWV0aG9kIGZvciBvdXRwdXR0aW5nIHRoZSBmb3JtYXR0ZWQgY29udGVudHMgb2YgdGhlIGJ1bmRsZSB0byBhCisgICAgICogb3VwdXQgV3JpdGVyIChzdWNoIGFzIGEgRmlsZVdyaXRlcikuIFRoZSBtZXRob2QgZmlyc3Qgb3V0cHV0cyB0aGUgaGVhZGVyCisgICAgICogaW5mb3JtYXRpb24gYW5kIHRoZW4gb3V0cHV0cyBlYWNoIGJ1bmRsZSBncm91cCdzIGZvcm1hdHRlZCBkYXRhIHdoaWNoIGluY2x1ZGVzCisgICAgICogZWFjaCBidW5kbGUgaXRlbS4KKyAgICAgKi8KKwkJCisgICAgcHVibGljIHZvaWQgd3JpdGVDb250ZW50cyhXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdy53cml0ZSh0aGlzLnRvT3V0cHV0U3RyaW5nKCkgKyAiXG4iKTsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IGdyb3Vwcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICgoQnVuZGxlR3JvdXApaXRlci5uZXh0KCkpLndyaXRlQ29udGVudHModyk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZUdyb3VwLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vQnVuZGxlR3JvdXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNjZWRiCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZUdyb3VwLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBBIGNsYXNzIHJlcHJlc2VudGluZyBhIGdyb3VwIG9mIEJ1bmRsZUl0ZW1zIGFuZCB0aGUgbWV0YSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGdyb3VwCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIEJ1bmRsZUdyb3VwIHsKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBncm91cAorICAgIHByaXZhdGUgU3RyaW5nIGNvbW1lbnQ7ICAgICAgICAgICAgICAgICAgICAgLy8gQSBjb21tZW50IGRlc2NyaWJpbmcgdGhpcyBncm91cAorICAgIHByaXZhdGUgVHJlZVNldCBpdGVtczsgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIE5MUyBpdGVtcyBjb250YWluZWQgaW4gdGhpcyBncm91cAorICAgIHByaXZhdGUgQnVuZGxlIGJ1bmRsZTsgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBhcmVudCBCdW5kbGUgb2JqZWN0IG9mIHRoaXMgZ3JvdXAKKwkJCisgICAgLyoqCisgICAgICogQmFzaWMgZGF0YSBjb25zdHJ1Y3Rvci4KKyAgICAgKiBDcmVhdGVzIGEgQnVuZGxlR3JvdXAgd2l0aCBhIHBhcmVudCBidW5kbGUgYW5kIGEgZ2l2ZW4gbmFtZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgQnVuZGxlR3JvdXAoQnVuZGxlIHBhcmVudCwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgYnVuZGxlID0gcGFyZW50OworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICBjb21tZW50ID0gbnVsbDsKKyAgICAgICAgaXRlbXMgPSBuZXcgVHJlZVNldChuZXcgQ29tcGFyYXRvcigpeworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CisgICAgICAgICAgICAgICAgaWYgKCEobzEgaW5zdGFuY2VvZiBCdW5kbGVJdGVtKSB8fCAhKG8yIGluc3RhbmNlb2YgQnVuZGxlSXRlbSkpCisgICAgICAgICAgICAgICAgCXJldHVybiAwOworICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaTEgPSAoQnVuZGxlSXRlbSlvMTsKKyAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGkyID0gKEJ1bmRsZUl0ZW0pbzI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkxLmdldEtleSgpLmNvbXBhcmVUbyhpMi5nZXRLZXkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFR3byBidW5kbGUgZ3JvdXBzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmZiB0aGVpciBuYW1lcyBhcmUgdGhlIHNhbWUuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CisgICAgICAgIHJldHVybiAobyBpbnN0YW5jZW9mIEJ1bmRsZUdyb3VwICYmICgoQnVuZGxlR3JvdXApbykuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSk7CisgICAgfQorCQorICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgYW55d2hlcmUgaXQgaXMgdXNlZAorCQorICAgIHB1YmxpYyBWZWN0b3IgZ2V0SXRlbXNBc1ZlY3RvcigpIHsKKyAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIHYuYWRkRWxlbWVudChpdGVyLm5leHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIEFkZHMgYSBCdW5kbGVJdGVtIHRvIHRoZSBncm91cCBhcyBsb25nIGFzIHRoYXQgaXRlbSBpcyBub3QgY3VycmVudGx5IGluIHRoZSBncm91cC4KKyAgICAgKiBJZiB0aGUgaXRlbS5ncm91cCBpcyBub3QgZXF1YWwgdG8gdGhpcyBncm91cCwgdGhlbiBpdCBpcyBjaGFuZ2VkIHRvIGJlIHRoaXMgZ3JvdXAuCisgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkLCBpbiBtb3N0IGNhc2VzLCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBCdW5kbGUgY2xhc3MuCisgICAgICovCisgICAgcHVibGljIHZvaWQgYWRkQnVuZGxlSXRlbShCdW5kbGVJdGVtIGl0ZW0pIHsKKyAgICAJaWYgKGl0ZW1zLmNvbnRhaW5zKGl0ZW0pKSB7CisgICAgCQlpdGVtcy5yZW1vdmUoaXRlbSk7CisgICAgCX0KKyAgICAgICAgaXRlbS5zZXRQYXJlbnRHcm91cCh0aGlzKTsKKyAgICAgICAgaXRlbXMuYWRkKGl0ZW0pOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYW4gaXRlbSBvZiB0aGUgZ2l2ZW4gbmFtZSBmcm9tIHRoZSBncm91cAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbW92ZUJ1bmRsZUl0ZW0oU3RyaW5nIGl0ZW1OYW1lKSB7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoaXRlbS5nZXRLZXkoKS5lcXVhbHMoaXRlbU5hbWUpKSB7CisgICAgICAgICAgICAgICAgaXRlbXMucmVtb3ZlKGl0ZW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBzdG9yZWQgaW4gdGhlIGdyb3VwCisgICAgICovCisgICAgcHVibGljIGludCBnZXRJdGVtQ291bnQoKSB7CisgICAgICAgIHJldHVybiBpdGVtcy5zaXplKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBCdW5kbGVJdGVtIGZyb20gdGhlIHNldCBvZiBpdGVtcyBhdCBhIHBhcnRpY3VsYXIgaW5kZXggcG9pbnQuCisgICAgICogSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZXQsCisgICAgICogbnVsbCBpcyByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQnVuZGxlSXRlbSBnZXRCdW5kbGVJdGVtKGludCBpbmRleCkgeworICAgICAgICBpZiAoaW5kZXggPj0gaXRlbXMuc2l6ZSgpKQorICAgICAgICAJcmV0dXJuIG51bGw7CisgICAgICAgIEl0ZXJhdG9yIGl0ZXIgPSBpdGVtcy5pdGVyYXRvcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBpbmRleDsgaSsrKQorICAgICAgICAJaXRlci5uZXh0KCk7CisgICAgICAgIHJldHVybiAoQnVuZGxlSXRlbSlpdGVyLm5leHQoKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgYnVuZGxlIHRvIHdoaWNoIHRoaXMgZ3JvdXAgYmVsb25ncworICAgICAqLworICAgIHB1YmxpYyBCdW5kbGUgZ2V0UGFyZW50QnVuZGxlKCkgeworICAgICAgICByZXR1cm4gYnVuZGxlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIHNldFBhcmVudEJ1bmRsZShCdW5kbGUgYnVuZGxlKSB7CisgICAgICAgIHRoaXMuYnVuZGxlID0gYnVuZGxlOworICAgIH0KKwkKKyAgICBwdWJsaWMgdm9pZCBzZXRDb21tZW50KFN0cmluZyBjb21tZW50KSB7CisgICAgICAgIHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7CisgICAgfQorCQorICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogVGhlIHRyYW5zbGF0aW9uIHRvIGEgc3RyaW5nIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwCisgICAgICovCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG91dHB1dCBmb3IgYSBncm91cCBoZWFkaW5nLgorICAgICAqIFRoaXMgd2lsbCBiZSBmb3VuZCBpbiBjb21tZW50IGxpbmVzIGFib3ZlIHRoZSBncm91cCBpdGVtcworICAgICAqLworCXB1YmxpYyBTdHJpbmcgdG9PdXRwdXRTdHJpbmcoKSB7CisgICAgICAgIFN0cmluZyByZXRTdHIgPSAiXG4jXG4jIEBncm91cCAiICsgbmFtZSArICJcbiNcbiI7CisgICAgICAgIGlmIChjb21tZW50ICE9IG51bGwpCisgICAgICAgIAlyZXRTdHIgKz0gIiMgQGdyb3VwQ29tbWVudCAiICsgY29tbWVudCArICJcbiI7CisgICAgICAgIHJldHVybiByZXRTdHI7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFdyaXRlcyB0aGUgb3V0cHV0IGNvbnRlbnRzIHRvIGEgcGFydGljdWxhciBQcmludFN0cmVhbS4KKyAgICAgKiBUaGUgb3V0cHV0IHdpbGwgYmUgc3VpdGFibGUgZm9yIGEgcHJvcGVybHkgZm9ybWF0dGVkIC5wcm9wZXJ0aWVzIGZpbGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgd3JpdGVDb250ZW50cyhQcmludFN0cmVhbSBwcykgeworICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKCJVbmdyb3VwZWQgSXRlbXMiKSkKKyAgICAgICAgCXBzLnByaW50bG4odGhpcy50b091dHB1dFN0cmluZygpKTsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IGl0ZW1zLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgKChCdW5kbGVJdGVtKSBpdGVyLm5leHQoKSkud3JpdGVDb250ZW50cyhwcyk7CQorICAgICAgICB9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFdyaXRlcyB0aGUgb3V0cHV0IGNvbnRlbnRzIHRvIGEgcGFydGljdWxhciBXcml0ZXIuCisgICAgICogVGhlIG91dHB1dCB3aWxsIGJlIHN1aXRhYmxlIGZvciBhIHByb3Blcmx5IGZvcm1hdHRlZCAucHJvcGVydGllcyBmaWxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHdyaXRlQ29udGVudHMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICghbmFtZS5lcXVhbHMoIlVuZ3JvdXBlZCBJdGVtcyIpKQorICAgICAgICAJdy53cml0ZSh0aGlzLnRvT3V0cHV0U3RyaW5nKCkgKyAiXG4iKTsKKyAgICAgICAgSXRlcmF0b3IgaXRlciA9IGl0ZW1zLml0ZXJhdG9yKCk7CisgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgKChCdW5kbGVJdGVtKSBpdGVyLm5leHQoKSkud3JpdGVDb250ZW50cyh3KTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vQnVuZGxlSXRlbS5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZUl0ZW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQwMzYwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL0J1bmRsZUl0ZW0uamF2YQpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIEEgY2xhc3MgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHRyYW5zbGF0aW9uIGl0ZW0gYW5kIGFsbCBvZiB0aGUgbWV0YS1kYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHRyYW5zbGF0aW9uCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbiAtIEVtYWlsOiA8YSBocmVmPSJtYWlsdG86amphcmVkQGFsbWFkZW4uaWJtLmNvbSI+amphcmVkQGFsbWFkZW4uaWJtLmNvbTwvYT4KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBCdW5kbGVJdGVtIHsKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIE5MUyBpdGVtIGtleQorICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdHJhbnNsYXRpb24gb2YgdGhlIGtleSBpdGVtCisgICAgcHJpdmF0ZSBTdHJpbmcgY29tbWVudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgY29tbWVudCBhYm91dCB0aGlzIGl0ZW0KKyAgICBwcml2YXRlIGJvb2xlYW4gdHJhbnNsYXRlZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFzIHRoaXMgaXRlbSBiZWVuIHRyYW5zbGF0ZWQ/CisgICAgcHJpdmF0ZSBEYXRlIGNyZWF0ZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRlIG9mIGNyZWF0aW9uIG9mIHRoZSBpdGVtCisgICAgcHJpdmF0ZSBEYXRlIG1vZGlmaWVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpdGVtCisgICAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gd2hvIGNyZWF0ZWQgdGhlIGl0ZW0KKyAgICBwcml2YXRlIFN0cmluZyBtb2RpZmllcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiB3aG8gbGFzdCBtb2RpZmllZCB0aGUgaXRlbQorICAgIHByaXZhdGUgSGFzaHRhYmxlIGxvb2t1cHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGhhc3RhYmxlIG9mIGxvb2t1cHMgZm9yIHRoZSBpdGVtIChpLmUuICh7I30sIE1lYW5pbmcpIHBhaXJzKQorICAgIHByaXZhdGUgQnVuZGxlR3JvdXAgZ3JvdXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcGFyZW50IGdyb3VwIG9mIHRoZSBpdGVtCisJCQorICAgIC8qKgorICAgICAqIEJhc2ljIGRhdGEgY29uc3RydWN0b3IgZm9yIGEgcmVzb3VyY2UgYnVuZGxlIGl0ZW0uCisgICAgICogQHBhcmFtIHBhcmVudCBUaGUgQnVuZGxlR3JvdXAgdG8gd2hpY2ggdGhlIGl0ZW0gYmVsb25ncy4gVGhpcyBncm91cCB3aWxsIGhhdmUgaXRzIG93biBCdW5kbGUgcGFyZW50LgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBOTFMgbG9va3VwIGtleSBjb21tb24gYWNyb3NzIGFsbCBidW5kbGUgZmlsZXMgaW4gdGhlIHJlc291cmNlIGJ1bmRsZQorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdHJhbnNsYXRlZCB2YWx1ZSBvZiB0aGUgaXRlbSBhcHByb3ByaWF0ZSBmb3IgdGhlIGVuY29kaW5nIG9mIHRoZSBidW5kbGUgZmlsZSB0byB3aGljaCB0aGUgaXRlbSBiZWxvbmdzCisgICAgICovCisgICAgIAorICAgIHB1YmxpYyBCdW5kbGVJdGVtKEJ1bmRsZUdyb3VwIHBhcmVudCwgU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHRoaXMuZ3JvdXAgPSBwYXJlbnQ7CisgICAgICAgIGNvbW1lbnQgPSBudWxsOworICAgICAgICB0cmFuc2xhdGVkID0gZmFsc2U7CisgICAgICAgIGNyZWF0ZWQgPSBuZXcgRGF0ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgY3VycmVudCBkYXRlCisgICAgICAgIG1vZGlmaWVkID0gbmV3IERhdGUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgY3VycmVudCBkYXRlCisgICAgICAgIGNyZWF0b3IgPSBudWxsOworICAgICAgICBtb2RpZmllciA9IG51bGw7CisgICAgICAgIGxvb2t1cHMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgQnVuZGxlR3JvdXAgdG8gd2hpY2ggdGhpcyBpdGVtIGJlbG9uZ3MKKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgQnVuZGxlR3JvdXAgZ2V0UGFyZW50R3JvdXAoKSB7CisgICAgICAgIHJldHVybiBncm91cDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBkYXRlIHRoaXMgaXRlbSB3YXMgbGFzdCBtb2RpZmllZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgRGF0ZSBnZXRNb2RpZmllZERhdGUoKSB7CisgICAgICAgIHJldHVybiBtb2RpZmllZDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZGF0ZSB0aGUgaXRlbSB3YXMgZmlyc3QgY3JlYXRlZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgRGF0ZSBnZXRDcmVhdGVkRGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxvZ2luIG5hbWUgb2YgdGhlIHVzZXIgdGhhdCBjcmVhdGVkIHRoZSBpdGVtLgorICAgICAqLworCQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q3JlYXRvcigpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0b3I7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxvZ2luIG5hbWUgb2YgdGhlIHVzZXIgdGhhdCBsYXN0IG1vZGlmaWVkIHRoZSBpdGVtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TW9kaWZpZXIoKSB7CisgICAgICAgIHJldHVybiBtb2RpZmllcjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgTkxTIGxvb2t1cCBrZXkgZm9yIHRoZSBpdGVtLgorICAgICAqLworCQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgeworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhlIGl0ZW0uCisgICAgICovCisJCisgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2xhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgY29tbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZW0uCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRDb21tZW50KCkgeworICAgICAgICByZXR1cm4gY29tbWVudDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogSGFzIHRoZSBpdGVtIHlldCBiZWVuIHRyYW5zbGF0ZWQsIG9yIHdhcyBpdCBtZXJlbHkgZGVyaXZlZCBmcm9tIGEgcHJldmlvdXMKKyAgICAgKiBidW5kbGUgZmlsZT8KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zbGF0ZWQoKSB7CisgICAgICAgIHJldHVybiB0cmFuc2xhdGVkOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgaGFzaHRhYmxlIG9mIHRoZSB2YXJpb3VzIGxvb2t1cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtLiBMb29rdXBzIGFyZQorICAgICAqIGNvbnRleHQgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIHN0b3JlZCB3aXRoaW4gdGhlIHJlc291cmNlIGl0ZW0gYW5kIGhhdmUgdGhlaXIgb3duCisgICAgICogbWV0YS1kYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGVtc2VsdmVzLgorICAgICAqLworCQorICAgIHB1YmxpYyBIYXNodGFibGUgZ2V0TG9va3VwcygpIHsKKyAgICAgICAgcmV0dXJuIGxvb2t1cHM7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdHJhbnNsYXRlZCB2YWx1ZSBvZiB0aGUgaXRlbS4gQSB0cnVlIG1hcmsgaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZW0gaGFzCisgICAgICogYmVlbiBleGFtaW5lZCBvciBtb2RpZmllZCBhbmQgaXMgcmVhZHkgZm9yIHVzZSBpbiB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAqIHBhcmVudCBCdW5kbGUuCisgICAgICovCisJCisgICAgcHVibGljIHZvaWQgc2V0VHJhbnNsYXRlZChib29sZWFuIGlzVHJhbnNsYXRlZCkgeworICAgICAgICBpZiAodHJhbnNsYXRlZCA9PSBpc1RyYW5zbGF0ZWQpIHJldHVybjsKKyAgICAgICAgdHJhbnNsYXRlZCA9IGlzVHJhbnNsYXRlZDsKKyAgICAgICAgaWYgKHRoaXMuZ2V0UGFyZW50R3JvdXAoKSAhPSBudWxsICYmIHRoaXMuZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gdGhpcy5nZXRQYXJlbnRHcm91cCgpLmdldFBhcmVudEJ1bmRsZSgpOworICAgICAgICAgICAgaWYgKGlzVHJhbnNsYXRlZCkgYnVuZGxlLnJlbW92ZVVudHJhbnNsYXRlZEl0ZW0odGhpcy5uYW1lKTsKKyAgICAgICAgICAgIGVsc2UgYnVuZGxlLmFkZFVudHJhbnNsYXRlZEl0ZW0odGhpcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY29tbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBpdGVtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldENvbW1lbnQoU3RyaW5nIGNvbW1lbnQpIHsKKyAgICAgICAgdGhpcy5jb21tZW50ID0gY29tbWVudDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBoYXNodGFibGUgb2YgbG9va3VwcywgYXNzb2NpYXRlcyB0aG9zZSBsb29rdXBzIHdpdGggdGhpcyBpdGVtLgorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIHNldExvb2t1cHMoSGFzaHRhYmxlIGxvb2t1cHMpIHsKKyAgICAgICAgdGhpcy5sb29rdXBzID0gbG9va3VwczsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgTkxTIGtleSBhc3NvY2lhdGVkIHdpdGggdGhpcyBpdGVtLiBCZSBjYXJlZnVsIHVzaW5nIHRoaXMgbWV0aG9kLCBhcworICAgICAqIGl0IGRvZXMgbm90IGNoYW5nZSB0aGUgbG9va3VwIHZhbHVlIG9mIGFueSBvdGhlciBpdGVtcyBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlLgorICAgICAqIFRoaXMgbXVzdCBiZSBkb25lIGF0IGEgaGlnaGVyIGxldmVsLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEtleShTdHJpbmcga2V5TmFtZSkgeworICAgICAgICBuYW1lID0ga2V5TmFtZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgdHJhbnNsYXRpb24gdmFsdWUgb2YgdGhlIGl0ZW0uCisgICAgICovCisgICAgCisgICAgcHVibGljIHZvaWQgc2V0VHJhbnNsYXRpb24oU3RyaW5nIHRyYW5zbGF0aW9uVmFsdWUpIHsKKyAgICAgICAgdmFsdWUgPSB0cmFuc2xhdGlvblZhbHVlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBwYXJlbnQgQnVuZGxlR3JvdXAgb2YgdGhlIGl0ZW0uCisgICAgICovCisgICAgCisgICAgcHVibGljIHZvaWQgc2V0UGFyZW50R3JvdXAoQnVuZGxlR3JvdXAgZ3JvdXApIHsKKyAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBc3NvY2lhdGVzIGEgbG9naW4gbmFtZSBvZiB0aGUgY3JlYXRvciBvZiB0aGUgaXRlbSB3aXRoIHRoZSBpdGVtLgorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIHNldENyZWF0b3IoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgY3JlYXRvciA9IG5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXNzb2NpYXRlcyBhIGxvZ2luIG5hbWUgb2YgdGhlIGxhc3QgbW9kaWZpZXIgb2YgdGhlIGl0ZW0gd2l0aCB0aGUgaXRlbS4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RpZmllcihTdHJpbmcgbmFtZSkgeworICAgICAgICBtb2RpZmllciA9IG5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3JlYXRlZCBkYXRlIG9mIHRoZSBpdGVtIGdpdmVuIGEgZGF0ZSBmb3JtYXR0ZWQgc3RyaW5nLgorICAgICAqIFRoZSBmb3JtYXQgY2FuIGJlIGVpdGhlciAnWVlZWS1NTS1ERCcgKGUuZy4gMjAwMDItMDItMDUpIG9yCisgICAgICogdGhlIGZvcm1hdCBjYW4gYmUgJ1lZWU1NRERUSEhNTVNTWicgKGUuZy4gMjAwMjAyMDVUMTAzMDAwWikKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRDcmVhdGVkRGF0ZShTdHJpbmcgZGF0ZVN0cikgeworICAgICAgICBpZiAoZGF0ZVN0ciAhPSBudWxsKSBjcmVhdGVkID0gcGFyc2VEYXRlRnJvbVN0cmluZyhkYXRlU3RyKTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3JlYXRlZCBkYXRlIG9mIHRoZSBpdGVtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldENyZWF0ZWREYXRlKERhdGUgZGF0ZSkgeworICAgICAgICBjcmVhdGVkID0gZGF0ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgbGFzdCBtb2RpZmlmY2F0aW9uIGRhdGUgb2YgdGhlIGl0ZW0gZ2l2ZW4gYSBkYXRlIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICogVGhlIGZvcm1hdCBjYW4gYmUgZWl0aGVyICdZWVlZLU1NLUREJyAoZS5nLiAyMDAyLTAyLTA1KSBvcgorICAgICAqIHRoZSBmb3JtYXQgY2FuIGJlICdZWVlNTUREVEhITU1TU1onIChlLmcuIDIwMDIwMjA1VDEwMzAwMFopCisgICAgICovCisgICAgCisgICAgcHVibGljIHZvaWQgc2V0TW9kaWZpZWREYXRlKFN0cmluZyBkYXRlU3RyKSB7CisgICAgICAgIGlmIChkYXRlU3RyICE9IG51bGwpCisgICAgICAgIAltb2RpZmllZCA9IHBhcnNlRGF0ZUZyb21TdHJpbmcoZGF0ZVN0cik7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGl0ZW0uCisgICAgICovCisgICAgCisgICAgcHVibGljIHZvaWQgc2V0TW9kaWZpZWREYXRlKERhdGUgZGF0ZSkgeworICAgICAgICBtb2RpZmllZCA9IGRhdGU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNpbXBseSByZXR1cm5zIHRoZSBsb29rdXAgbmFtZSBvZiB0aGUgaXRlbS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZm9ybWF0dGVkIG91dHB1dCBvZiB0aGlzIGJ1bmRsZSBpdGVtIGFzIGl0IHdvdWxkIGJlIGluY2x1ZGVkIGluIGEgLnByb3BlcnRpZXMKKyAgICAgKiBmb3JtYXR0ZWQgcmVzb3VyY2UgYnVuZGxlIGZpbGUuIFRoaXMgZm9ybWF0IGFsc28gY29udGFpbnMgdGhlIG1ldGEtZGF0YSB1c2VkIGJ5IFJCTWFuYWdlciBpbgorICAgICAqIHRoZSBmb3JtIG9mIHBhcnNlYWJsZSBjb21tZW50cy4KKyAgICAgKi8KKworICAgIHB1YmxpYyBTdHJpbmcgdG9PdXRwdXRTdHJpbmcoKSB7CisgICAgICAgIFN0cmluZyByZXRTdHIgPSAodHJhbnNsYXRlZCA/ICIjIEB0cmFuc2xhdGVkIHRydWUiIDogIiMgQHRyYW5zbGF0ZWQgZmFsc2UiKTsKKyAgICAgICAgaWYgKGNyZWF0ZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY3JlYXRlZENhbCA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICAgICAgY3JlYXRlZENhbC5zZXRUaW1lKGNyZWF0ZWQpOworICAgICAgICAgICAgaW50IHllYXIgPSBjcmVhdGVkQ2FsLmdldChDYWxlbmRhci5ZRUFSKTsKKyAgICAgICAgICAgIGludCBtb250aCA9IGNyZWF0ZWRDYWwuZ2V0KENhbGVuZGFyLk1PTlRIKSsxOworICAgICAgICAgICAgaW50IGRheSA9IGNyZWF0ZWRDYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgICAgICByZXRTdHIgKz0gIiBAY3JlYXRlZCAiICsgU3RyaW5nLnZhbHVlT2YoeWVhcikgKyAiLSIKKyAgICAgICAgICAgICAgICArIChtb250aCA+IDkgPyBTdHJpbmcudmFsdWVPZihtb250aCkgOiAiMCIgKyBTdHJpbmcudmFsdWVPZihtb250aCkpICsgIi0iCisgICAgICAgICAgICAgICAgKyAoZGF5ID4gOSA/IFN0cmluZy52YWx1ZU9mKGRheSkgOiAiMCIgKyBTdHJpbmcudmFsdWVPZihkYXkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobW9kaWZpZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgbW9kaWZpZWRDYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgICAgIG1vZGlmaWVkQ2FsLnNldFRpbWUobW9kaWZpZWQpOworICAgICAgICAgICAgaW50IHllYXIgPSBtb2RpZmllZENhbC5nZXQoQ2FsZW5kYXIuWUVBUik7CisgICAgICAgICAgICBpbnQgbW9udGggPSBtb2RpZmllZENhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpKzE7CisgICAgICAgICAgICBpbnQgZGF5ID0gbW9kaWZpZWRDYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgICAgICByZXRTdHIgKz0gIiBAbW9kaWZpZWQgIiArIFN0cmluZy52YWx1ZU9mKHllYXIpICsgIi0iCisgICAgICAgICAgICAgICAgKyAobW9udGggPiA5ID8gU3RyaW5nLnZhbHVlT2YobW9udGgpIDogIjAiICsgU3RyaW5nLnZhbHVlT2YobW9udGgpKSArICItIgorICAgICAgICAgICAgICAgICsgKGRheSA+IDkgPyBTdHJpbmcudmFsdWVPZihkYXkpIDogIjAiICsgU3RyaW5nLnZhbHVlT2YoZGF5KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNyZWF0b3IgIT0gbnVsbCkgcmV0U3RyICs9ICIgQGNyZWF0b3IgIiArIGNyZWF0b3I7CisgICAgICAgIGlmIChtb2RpZmllciAhPSBudWxsKSByZXRTdHIgKz0gIiBAbW9kaWZpZXIgIiArIG1vZGlmaWVyOworICAgICAgICBFbnVtZXJhdGlvbiBlbGVtcyA9IGxvb2t1cHMua2V5cygpOworICAgICAgICB3aGlsZSAoZWxlbXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHIgPSAoU3RyaW5nKWVsZW1zLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICByZXRTdHIgKz0gIlxuIyBAeyIgKyBzdHIgKyAifSAiICsgKFN0cmluZylsb29rdXBzLmdldChzdHIpOworICAgICAgICB9CisgICAgICAgIGlmIChjb21tZW50ICE9IG51bGwpIHJldFN0ciArPSAiXG4jIEBjb21tZW50ICIgKyBjb21tZW50OworCQkKKyAgICAgICAgcmV0U3RyICs9ICJcbiIgKyBuYW1lICsgIj0iICsgc2F2ZUNvbnZlcnQodmFsdWUpOworICAgICAgICByZXR1cm4gcmV0U3RyOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgdGhlIGZvcm1hdHRlZCBjb250ZW50cyB0byBhIFByaW50U3RyZWFtLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHdyaXRlQ29udGVudHMoUHJpbnRTdHJlYW0gcHMpIHsKKyAgICAgICAgcHMucHJpbnRsbih0aGlzLnRvT3V0cHV0U3RyaW5nKCkpOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgdGhlIGZvcm1hdHRlZCBjb250ZW50cyB0byBhIHdyaXRlciBzdWNoIGFzIGEgRmlsZVdyaXRlci4KKyAgICAgKi8KKworICAgIHB1YmxpYyB2b2lkIHdyaXRlQ29udGVudHMoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHcud3JpdGUodGhpcy50b091dHB1dFN0cmluZygpICsgIlxuIik7CisgICAgfQorCQkKKyAgICAvKgorICAgICAqIENvbnZlcnRzIHVuaWNvZGVzIHRvIGVuY29kZWQgXFx1eHh4eAorICAgICAqIGFuZCB3cml0ZXMgb3V0IGFueSBvZiB0aGUgY2hhcmFjdGVycyBpbiBzcGVjaWFsU2F2ZUNoYXJzCisgICAgICogd2l0aCBhIHByZWNlZGluZyBzbGFzaAorICAgICAqLworICAgIC8vIFRha2VuIGZyb20gamF2YS51dGlsLlByb3BlcnRpZXMKKyAgICBwcml2YXRlIFN0cmluZyBzYXZlQ29udmVydChTdHJpbmcgdGhlU3RyaW5nKSB7CisgICAgICAgIGNoYXIgYUNoYXI7CisgICAgICAgIGludCBsZW4gPSB0aGVTdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGxlbioyKTsKKworICAgICAgICBmb3IoaW50IHg9MDsgeDxsZW47ICkgeworICAgICAgICAgICAgYUNoYXIgPSB0aGVTdHJpbmcuY2hhckF0KHgrKyk7CisgICAgICAgICAgICBzd2l0Y2goYUNoYXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlICdcXCc6b3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsgb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2FzZSAnXHQnOm91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7IG91dEJ1ZmZlci5hcHBlbmQoJ3QnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2FzZSAnXG4nOm91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7IG91dEJ1ZmZlci5hcHBlbmQoJ24nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2FzZSAnXHInOm91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7IG91dEJ1ZmZlci5hcHBlbmQoJ3InKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2FzZSAnXGYnOm91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7IG91dEJ1ZmZlci5hcHBlbmQoJ2YnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKChhQ2hhciA8IDIwKSB8fCAoYUNoYXIgPiAxMjcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLmFwcGVuZCgndScpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gMTIpICYgMHhGKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiA4KSAmIDB4RikpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gNCkgJiAweEYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDApICYgMHhGKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbFNhdmVDaGFycy5pbmRleE9mKGFDaGFyKSAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0QnVmZmVyLmFwcGVuZChhQ2hhcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0QnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBuaWJibGUgdG8gYSBoZXggY2hhcmFjdGVyCisgICAgICogQHBhcmFtCW5pYmJsZQl0aGUgbmliYmxlIHRvIGNvbnZlcnQuCisgICAgICovCisJLy8gVGFrZW4gZnJvbSBqYXZhLnV0aWwuUHJvcGVydGllcworICAgIHByaXZhdGUgc3RhdGljIGNoYXIgdG9IZXgoaW50IG5pYmJsZSkgeworICAgICAgICByZXR1cm4gaGV4RGlnaXRbKG5pYmJsZSAmIDB4RildOworICAgIH0KKwkKKyAgICAvKiogQSB0YWJsZSBvZiBoZXggZGlnaXRzICovCisgICAgLy8gVGFrZW4gZnJvbSBqYXZhLnV0aWwuUHJvcGVydGllcworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhEaWdpdCA9IHsKKwknMCcsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJ0EnLCdCJywnQycsJ0QnLCdFJywnRicKKyAgICB9OworCQorICAgIC8vIFRha2VuIGZyb20gamF2YS51dGlsLlByb3BlcnRpZXMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3BlY2lhbFNhdmVDaGFycyA9ICI9OiBcdFxyXG5cZiMhIjsKKwkKKyAgICBwcml2YXRlIERhdGUgcGFyc2VEYXRlRnJvbVN0cmluZyhTdHJpbmcgZGF0ZVN0cikgeworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdCA9IG51bGw7CisgICAgICAgIGlmIChkYXRlU3RyLmxlbmd0aCgpID09IDEwKQorICAgICAgICAJZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsgLy8gU2ltcGxlIGZvcm1hdAorICAgICAgICBlbHNlCisgICAgICAgIAlmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eU1NZGQnVCdISG1tc3MnWiciKTsgICAgICAgICAgICAgIC8vIFRNWCBJU08gZm9ybWF0CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0LnBhcnNlKGRhdGVTdHIpOworICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBwZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL09jY3VyYW5jZS5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL09jY3VyYW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmNiZGEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vT2NjdXJhbmNlLmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCisvKioKKyAqIFRoaXMgaXMgYSBjbGFzcyB1c2VkIGJ5IHRoZSBSQlJlcG9ydGVyIHRvIHRyYWNrIG9jY3VyYW5jZXMgb2YgYSByZXNvdXJjZQorICoga2V5IGZvdW5kIHdoaWxlIHNjYW5uaW5nIGEgdGV4dCBjb2RlIGZpbGUuIEl0IGlzIHVzZWQgbWFpbmx5IHRvIHByb2R1Y2UgZXJyb3IKKyAqIG1lc3NhZ2VzIHdpdGggaGVscGZ1bCBjb250ZXh0IGluZm9ybWF0aW9uLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJSZXBvcnRlcgorICovCitwdWJsaWMgY2xhc3MgT2NjdXJhbmNlIHsKKyAgICBwcml2YXRlIFN0cmluZyBmaWxlX25hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZmlsZV9wYXRoOworICAgIHByaXZhdGUgaW50IGxpbmVfbnVtYmVyOworICAgIAorICAgIC8qKgorICAgICAqIEJhc2ljIGRhdGEgY29uc3RydWN0b3IuCisgICAgICovCisgICAgCisgICAgT2NjdXJhbmNlIChTdHJpbmcgZmlsZV9uYW1lLCBTdHJpbmcgZmlsZV9wYXRoLCBpbnQgbGluZV9udW1iZXIpIHsKKyAgICAgICAgdGhpcy5maWxlX25hbWUgPSBmaWxlX25hbWU7CisgICAgICAgIHRoaXMuZmlsZV9wYXRoID0gZmlsZV9wYXRoOworICAgICAgICB0aGlzLmxpbmVfbnVtYmVyID0gbGluZV9udW1iZXI7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGFzc29jaWF0ZWQgZmlsZSBuYW1lIG9mIHRoZSBvY2N1cmFuY2UKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lKCkgeworICAgICAgICByZXR1cm4gZmlsZV9uYW1lOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGZpbGUgcGF0aCBvZiB0aGUgb2NjdXJhbmNlCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRGaWxlUGF0aCgpIHsKKyAgICAgICAgcmV0dXJuIGZpbGVfcGF0aDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIG9jY3VyYW5jZS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB7CisgICAgICAgIHJldHVybiBsaW5lX251bWJlcjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2NjdXJhbmNlIG9mIHRoZSBmb3JtICdPY2N1cmFuY2U6IF9maWxlX3BhdGhfIChfbGluZV9udW1iZXJfKScKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gIk9jY3VyYW5jZTogIiArIGZpbGVfcGF0aCArICIgKCIgKyBsaW5lX251bWJlciArICIpIjsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1ByZWZlcmVuY2VzLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUHJlZmVyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDk0YjhhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1ByZWZlcmVuY2VzLmphdmEKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEuaW8uKjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIG1ldGhvZHMgdXNlZCBieSBSQk1hbmFnZXIgdG8gYWNjZXNzLCBzZXQsIGFuZCBzdG9yZQorICogaW5kaXZpZHVhbCB1c2VyIHByZWZlcmVuY2VzIGZvciB0aGUgYXBwbGljYXRpb24uIEFsbCBvZiB0aGUgcHVibGljIG1ldGhvZHMgZGVmaW5lZAorICogaW4gdGhpcyBjbGFzcyBhcmUgc3RhdGljLCBhbmQgc28gdGhlIGNsYXNzIG5lZWQgbm90IGJlIGluc3RhbnRpYXRlZC4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZXMgeworICAgIC8vIERlZmF1bHQgdmFsdWVzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTV9SRUNFTlRfRklMRVMgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsKKyAgICBwcml2YXRlIHN0YXRpYyBQcm9wZXJ0aWVzIHByb3A7CisJCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYSBwcmVmZXJlbmNlIGJ5IGl0cyBrZXkgbmFtZQorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIG9uZSBwcmVmZXJlbmNlCisgICAgICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHByZWZlcmVuY2Ugc291Z2h0CisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJlZmVyZW5jZShTdHJpbmcgbmFtZSkgeworICAgICAgICBpZiAocHJvcCA9PSBudWxsKSBpbml0KCk7CisgICAgICAgIE9iamVjdCBvID0gcHJvcC5nZXQobmFtZSk7CisgICAgICAgIGlmIChvID09IG51bGwgfHwgIShvIGluc3RhbmNlb2YgU3RyaW5nKSkgcmV0dXJuIEVNUFRZX1NUUklORzsKKyAgICAgICAgcmV0dXJuIChTdHJpbmcpbzsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogU2V0cyBhIHByZWZlcmVuY2UgYnkga2V5IG5hbWUgYW5kIHZhbHVlLiBJZiB0aGUga2V5IG5hbWUgYWxsIHJlYWR5IGV4aXN0cywgdGhhdAorICAgICAqIHByZWZlcmVuY2UgaXMgb3ZlcndyaXR0ZW4gd2l0aG91dCB3YXJuaW5nLgorICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcmVmZXJlbmNlCisgICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcHJlZmVyZW5jZSB0byBiZSBzZXQgYW5kIGxhdGVyIHJldHJpZXZlZC4gSWYgdGhpcyB2YWx1ZSBpcyBudWxsLCB0aGUgcHJvcGVydHkgb2YgdGhpcyBuYW1lIGlzIGVyYXNlZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0UHJlZmVyZW5jZShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIGlmIChwcm9wID09IG51bGwpIGluaXQoKTsKKyAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCByZW1vdmUgdGhlIHByb3BlcnR5CisgICAgICAgICAgICBwcm9wLnJlbW92ZShuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBwcm9wLnB1dChuYW1lLCB2YWx1ZSk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFdyaXRlcyB0aGUgcmVzdWx0cyBvZiB0aGUgYnVmZmVyZWQgcHJlZmVyZW5jZXMgdG8gZmlsZS4gVGhlcmUgaXMgbm8gb3B0aW9uIGZvcgorICAgICAqIHdoZXJlIHRoaXMgZmlsZSBpcyBzYXZlZCBvbiB0aGUgZmlsZSBzeXN0ZW0uCisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNhdmVQcmVmZXJlbmNlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChwcm9wID09IG51bGwpIGluaXQoKTsKKyAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgicHJlZmVyZW5jZXMucHJvcGVydGllcyIpOworICAgICAgICBwcm9wLnN0b3JlKGZvcywgIlJCTWFuYWdlciBQcmVmZXJlbmNlcyIpOworICAgICAgICBmb3MuZmx1c2goKTsKKyAgICAgICAgZm9zLmNsb3NlKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIEdpdmVuIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgYnVuZGxlIGFuZCB0aGUgZmlsZSBwYXRoIGxvY2F0aW9uIG9mIHRoZSBiYXNlCisgICAgICogZG9jdW1lbnQgZm9yIHRoYXQgcmVzb3VyY2UgYnVuZGxlLCB0aGlzIG1ldGhvZCB3aWxsIGluc2VydCB0aGF0IGZpbGUgaW50bworICAgICAqIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMuIEN1cnJlbnRseSB0aGUgcGFzdCA0IHJlc291cmNlIGJ1bmRsZXMgdmlzaXRlZCB3aWxsCisgICAgICogYmUgZGlzcGxheWVkLiBUaGlzIG1ldGhvZCBhbHNvIHNvcnRzIHRoZSBwcmVmZW5jZXMgc28gdGhhdCB0aGUgbW9zdCByZWNlbnRseQorICAgICAqIGFkZGVkIHdpbGwgYmUgdGhlIGZpcnN0IHJldHVybmVkLCBldmVuIGlmIHRoYXQgZmlsZSBoYWQgYWxsIHJlYWR5IGV4aXN0ZWQKKyAgICAgKiBpbiB0aGUgcHJlZmVyZW5jZXMgd2hlbiBpdCB3YXMgYWRkZWQuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhpcyBmaWxlIGFzIGl0IHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyCisgICAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSBmaWxlIHBhdGggdG8gdGhpcyBmaWxlIChzaG91bGQgYmUgYWJzb2x1dGUpLgorICAgICAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRSZWNlbnRGaWxlUHJlZmVyZW5jZShTdHJpbmcgbmFtZSwgU3RyaW5nIGxvY2F0aW9uKSB7CisgICAgICAgIFZlY3RvciBleGlzdGluZ05hbWVzID0gbmV3IFZlY3RvcigpOworICAgICAgICBWZWN0b3IgZXhpc3RpbmdMb2NhdGlvbnMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE5VTV9SRUNFTlRfRklMRVM7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIG9sZE5hbWUgPSBnZXRQcmVmZXJlbmNlKCJyZWNlbnRmaWxlaWQiICsgU3RyaW5nLnZhbHVlT2YoaSkpOworICAgICAgICAgICAgU3RyaW5nIG9sZExvY2F0aW9uID0gZ2V0UHJlZmVyZW5jZSgicmVjZW50ZmlsZWxvYyIgKyBTdHJpbmcudmFsdWVPZihpKSk7CisgICAgICAgICAgICBpZiAob2xkTmFtZS5lcXVhbHMoRU1QVFlfU1RSSU5HKSB8fCBvbGRMb2NhdGlvbi5lcXVhbHMoRU1QVFlfU1RSSU5HKSkgYnJlYWs7CisgICAgICAgICAgICBleGlzdGluZ05hbWVzLmFkZEVsZW1lbnQob2xkTmFtZSk7CisgICAgICAgICAgICBleGlzdGluZ0xvY2F0aW9ucy5hZGRFbGVtZW50KG9sZExvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGZpbGUgaXMgYWxsIHJlYWR5IGluIHRoZXJlCisgICAgICAgIGludCBzd2FwX3N0YXJ0ID0gMDsKKyAgICAgICAgaW50IG9sZF9zaXplID0gZXhpc3RpbmdMb2NhdGlvbnMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPD0gb2xkX3NpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gZXhpc3RpbmdMb2NhdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gbWF0Y2ggd2FzIGZvdW5kLCBwdWxsIGFsbCB0aGUgZWxlbWVudHMgZG93biBvbmUKKyAgICAgICAgICAgICAgICBzd2FwX3N0YXJ0ID0gaTsKKyAgICAgICAgICAgICAgICBpZiAoc3dhcF9zdGFydCA+PSBOVU1fUkVDRU5UX0ZJTEVTKSBzd2FwX3N0YXJ0ID0gTlVNX1JFQ0VOVF9GSUxFUy0xOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9ycworICAgICAgICAgICAgICAgICAgICBleGlzdGluZ05hbWVzLmFkZEVsZW1lbnQoRU1QVFlfU1RSSU5HKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdMb2NhdGlvbnMuYWRkRWxlbWVudChFTVBUWV9TVFJJTkcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZExvY2F0aW9uID0gKFN0cmluZylleGlzdGluZ0xvY2F0aW9ucy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKG9sZExvY2F0aW9uLmVxdWFscyhsb2NhdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtYXRjaCwgcHVsbCB0aGlzIG9uZSB0byB0aGUgZnJvbnQKKyAgICAgICAgICAgICAgICAgICAgc3dhcF9zdGFydCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCQkKKyAgICAgICAgLy8gTW92ZSB0aGUgZmlsZXMgZG93biB0aGUgbGluZSBhcyBhcHByb3ByaWF0ZQorICAgICAgICBmb3IgKGludCBpPXN3YXBfc3RhcnQ7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgIGV4aXN0aW5nTG9jYXRpb25zLnNldEVsZW1lbnRBdChleGlzdGluZ0xvY2F0aW9ucy5lbGVtZW50QXQoaS0xKSxpKTsKKyAgICAgICAgICAgIGV4aXN0aW5nTmFtZXMuc2V0RWxlbWVudEF0KGV4aXN0aW5nTmFtZXMuZWxlbWVudEF0KGktMSksaSk7CisgICAgICAgIH0KKyAgICAgICAgZXhpc3RpbmdMb2NhdGlvbnMuc2V0RWxlbWVudEF0KGxvY2F0aW9uLCAwKTsKKyAgICAgICAgZXhpc3RpbmdOYW1lcy5zZXRFbGVtZW50QXQobmFtZSwgMCk7CisJCQorICAgICAgICAvLyBTZXQgdGhlIHByb3BlcnRpZXMKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgZXhpc3RpbmdMb2NhdGlvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIHNldFByZWZlcmVuY2UoInJlY2VudGZpbGVpZCIgKyBTdHJpbmcudmFsdWVPZihpKSwgKFN0cmluZylleGlzdGluZ05hbWVzLmVsZW1lbnRBdChpKSk7CisgICAgICAgICAgICBzZXRQcmVmZXJlbmNlKCJyZWNlbnRmaWxlbG9jIiArIFN0cmluZy52YWx1ZU9mKGkpLCAoU3RyaW5nKWV4aXN0aW5nTG9jYXRpb25zLmVsZW1lbnRBdChpKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT1leGlzdGluZ0xvY2F0aW9ucy5zaXplKCk7IGkgPCBOVU1fUkVDRU5UX0ZJTEVTOyBpKyspIHsKKyAgICAgICAgICAgIHNldFByZWZlcmVuY2UoInJlY2VudGZpbGVpZCIgKyBTdHJpbmcudmFsdWVPZihpKSwgRU1QVFlfU1RSSU5HKTsKKyAgICAgICAgICAgIHNldFByZWZlcmVuY2UoInJlY2VudGZpbGVsb2MiICsgU3RyaW5nLnZhbHVlT2YoaSksIEVNUFRZX1NUUklORyk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNhdmVQcmVmZXJlbmNlcygpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHt9IC8vIElnbm9yZSwgaXRzIG5vdCBjcml0aWNhbAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIGxvY2F0aW9ucyBvZiB0aGUgdmFyaW91cyByZWNlbnRseSB1c2VkIGZpbGVzLgorICAgICAqIEByZXR1cm4gQSBWZWN0b3Igb2YgU3RyaW5ncyB3aGljaCBpcyB0d2ljZSBpbiBsZW5ndGggdGhlIG51bWJlciBvZiBmaWxlcyBrbm93biBhYm91dC4gVGhlIHZlY3RvciBjb250YWlucyBuYW1lIDEgdGhlbiBsb2NhdGlvbiAxLCB0aGVuIG5hbWUgMiAuLi4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgc3RhdGljIFZlY3RvciBnZXRSZWNlbnRGaWxlc1ByZWZlcmVuY2VzKCkgeworICAgICAgICBpZiAocHJvcCA9PSBudWxsKSBpbml0KCk7CisgICAgICAgIFZlY3RvciBleGlzdGluZyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTlVNX1JFQ0VOVF9GSUxFUzsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGdldFByZWZlcmVuY2UoInJlY2VudGZpbGVpZCIgKyBTdHJpbmcudmFsdWVPZihpKSk7CisgICAgICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBnZXRQcmVmZXJlbmNlKCJyZWNlbnRmaWxlbG9jIiArIFN0cmluZy52YWx1ZU9mKGkpKTsKKyAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscyhFTVBUWV9TVFJJTkcpIHx8IGxvY2F0aW9uLmVxdWFscyhFTVBUWV9TVFJJTkcpKSBicmVhazsKKyAgICAgICAgICAgIGV4aXN0aW5nLmFkZEVsZW1lbnQobmFtZSk7CisgICAgICAgICAgICBleGlzdGluZy5hZGRFbGVtZW50KGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXhpc3Rpbmc7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0KCkgeworICAgICAgICBQcm9wZXJ0aWVzIGRlZmF1bHRzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgLy8gVGhpcyB2YWx1ZXMgYXJlIG5lZWRlZCBhbmQgYXJlIHNwZWNpZmllZCBieSBkZWZhdWx0CisgICAgICAgIC8vIElmIHRoZXkgZXhpc3QgaW4gdGhlIGZpbGUsIHRoZXkgd2lsbCBiZSBvdmVyd3JpdHRlbgorICAgICAgICBkZWZhdWx0cy5wdXQoInVzZXJuYW1lIiwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bmtub3duX3VzZXIiKSk7CisgICAgICAgIGRlZmF1bHRzLnB1dCgibG9jYWxlIiwgImVuIik7CisgICAgICAgIGRlZmF1bHRzLnB1dCgibG9va2FuZGZlZWwiLCAiIik7CisJCQorICAgICAgICBwcm9wID0gbmV3IFByb3BlcnRpZXMoZGVmYXVsdHMpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oInByZWZlcmVuY2VzLnByb3BlcnRpZXMiKTsKKyAgICAgICAgICAgIHByb3AubG9hZChmaXMpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgcmVhZGluZyBwcm9wZXJ0aWVzIik7CisgICAgICAgICAgICBpb2UucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzYXZlUHJlZmVyZW5jZXMoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIHNhdmluZyBwcmVmZXJlbmNlcyAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgLyoKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisgICAgICAgIC8vIFRlc3QKKyAgICAgICAgaW5pdCgpOworICAgIH0KKyAgICAqLworfQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCRXhwb3J0ZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkV4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhNTgwNAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkV4cG9ydGVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKKy8qKgorICogVGhpcyBpcyB0aGUgc3VwZXIgY2xhc3MgZm9yIGFsbCBleHBvcnRlciBwbHVnLWluIGNsYXNzZXMuIEFzIG9mIHlldCwgdGhlcmUKKyAqIGlzIGxpdHRsZSBjb250YWluZWQgaW4gdGhpcyBjbGFzcy4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUkJFeHBvcnRlciB7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBKRmlsZUNob29zZXIgY2hvb3NlcjsKKwkKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBleHBvcnQoUkJNYW5hZ2VyIHJibSkgdGhyb3dzIElPRXhjZXB0aW9uOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQklDVUV4cG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJJQ1VFeHBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmMxMWUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJJQ1VFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgcGx1Zy1pbiBleHBvcnRlciB1dGlsaXR5IGZvciBSQk1hbmFnZXIgdGhhdCBvdXRwdXRzIElDVQorICogcmVzb3VyY2UgYnVuZGxlIGZpbGVzIGluIHRoZSBhY2NvcmRpbmcgdG8gdGhlIGZpbGUgc3RydWN0dXJlIG9mIFJlc291cmNlCisgKiBCdW5kbGVzLiBNb3N0IG9mIHRoZSBtZXRhLWRhdGEgaXMgbG9zdCBpbiB0aGlzIGV4cG9ydC4KKyAqIAorICogQGF1dGhvciBHZW9yZ2UgUmhvdGVuCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJJQ1VFeHBvcnRlciBleHRlbmRzIFJCRXhwb3J0ZXIgeworICAgIC8qKiBEbyBjaGFyYWN0ZXJzIGJleW9uZCBcXHUwMDdmIG5lZWQgXFx1IGVzY2FwZSBub3RhdGlvbj8gKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gZXNjYXBlTm9uQXNjaWkgPSBmYWxzZTsKKworICAgIC8qKiBXcml0ZSB0aGUgbWV0YSBkYXRhIGZvciBlYWNoIHJlc291cmNlPyAqLworICAgIHByaXZhdGUgYm9vbGVhbiB3cml0ZU1ldGFEYXRhID0gdHJ1ZTsKKwkKKyAgICAvKiogV3JpdGUgdGhlIGdyb3VwcyBhcyBrZXlzPyAqLworICAgIHByaXZhdGUgYm9vbGVhbiB3cml0ZUdyb3Vwc0FzS2V5cyA9IGZhbHNlOworCisgICAgcHVibGljIFJCSUNVRXhwb3J0ZXIoKSB7CisgICAgICAgIHN1cGVyKCk7CisJCQorICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBmaWxlIGNob29zZXIgaWYgbmVjZXNzYXJ5CisgICAgICAgIGlmIChjaG9vc2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIGNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisgICAgICAgICAgICBjaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKXsKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gInJvb3QgSUNVIEZpbGUiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGYuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoInJvb3QuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IC8vIGVuZCBpZgorICAgIH0KKwkKKyAgICBwdWJsaWMgdm9pZCBleHBvcnQoUkJNYW5hZ2VyIHJibSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHJibSA9PSBudWxsKSByZXR1cm47CisgICAgICAgIC8vIE9wZW4gdGhlIFNhdmUgRGlhbG9nCisgICAgICAgIGludCByZXRfdmFsID0gY2hvb3Nlci5zaG93U2F2ZURpYWxvZyhudWxsKTsKKyAgICAgICAgaWYgKHJldF92YWwgIT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0cmlldmUgYmFzaWMgZmlsZSBpbmZvcm1hdGlvbgorICAgICAgICBGaWxlIGZpbGUgPSBjaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOyAgICAgICAgICAgICAgICAgIC8vIFRoZSBmaWxlKHMpIHdlIHdpbGwgYmUgd29ya2luZyB3aXRoCisgICAgICAgIEZpbGUgZGlyZWN0b3J5ID0gbmV3IEZpbGUoZmlsZS5nZXRQYXJlbnQoKSk7ICAgICAgICAgICAgLy8gVGhlIGRpcmVjdG9yeSB3ZSB3aWxsIGJlIHdyaXRpbmcgdG8KKyAgICAgICAgU3RyaW5nIGJhc2VfbmFtZSA9IGZpbGUuZ2V0TmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYmFzZSBuYW1lIG9mIHRoZSBmaWxlcyB3ZSB3aWxsIHdyaXRlCisgICAgICAgIGlmIChiYXNlX25hbWUgPT0gbnVsbCB8fCBiYXNlX25hbWUuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgYmFzZV9uYW1lID0gcmJtLmdldEJhc2VDbGFzcygpOworICAgICAgICB9CisgICAgICAgIGlmIChiYXNlX25hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSkgeworICAgICAgICAgICAgYmFzZV9uYW1lID0gYmFzZV9uYW1lLnN1YnN0cmluZygwLGJhc2VfbmFtZS5sZW5ndGgoKS0xMSk7CisgICAgICAgIH0KKwkJCisgICAgICAgIFZlY3RvciBidW5kbGVfdiA9IHJibS5nZXRCdW5kbGVzKCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZV92LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVfdi5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBTdHJpbmcgYmFzZV9lbmMgPSBiYXNlX25hbWU7CisgICAgICAgICAgICBpZiAoYnVuZGxlLmVuY29kaW5nICE9IG51bGwgJiYgIWJ1bmRsZS5lbmNvZGluZy5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgYmFzZV9lbmMgPSBiYXNlX2VuYyArICJfIiArIGJ1bmRsZS5lbmNvZGluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBmaWxlX25hbWUgPSBiYXNlX2VuYyArICIudHh0IjsKKyAgICAgICAgICAgIFN0cmluZyBoZWFkZXIgPSAiXHVmZWZmLy8gUmVzb3VyY2UgQnVuZGxlOiAiICsgZmlsZV9uYW1lICsgIiAtIEZpbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyIGF0ICIgKyAobmV3IERhdGUoKSk7CisKKyAgICAgICAgICAgIE91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShuZXcgRmlsZShkaXJlY3RvcnksIGZpbGVfbmFtZSkpOworICAgICAgICAgICAgUHJpbnRXcml0ZXIgcmVzT3V0ID0gbmV3IFByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZm9zLCAiVVRGLTgiKSk7CisKKyAgICAgICAgICAgIFZlY3RvciBncm91cF92ID0gYnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCk7CisgICAgICAgICAgICByZXNPdXQucHJpbnRsbihoZWFkZXIpOworICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oYmFzZV9lbmMgKyAiIHsgIik7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCBncm91cF92LnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApZ3JvdXBfdi5lbGVtZW50QXQoaik7CisKKyAgICAgICAgICAgICAgICBWZWN0b3IgaXRlbVZlY3QgPSBncm91cC5nZXRJdGVtc0FzVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgaW50IGl0ZW1WZWN0U2l6ZSA9IGl0ZW1WZWN0LnNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbVZlY3RTaXplID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVNZXRhRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdyb3VwQ29tbWVudCA9IGdyb3VwLmdldENvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cENvbW1lbnQgIT0gbnVsbCAmJiAhZ3JvdXBDb21tZW50LmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNPdXQucHJpbnRsbigiICAgIC8vIEBncm91cENvbW1lbnQgIiArIGdyb3VwQ29tbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBib29sZWFuIHdyaXRlR3JvdXBOYW1lID0gIWJ1bmRsZS5nZXRVbmdyb3VwZWRHcm91cCgpLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXAuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlR3JvdXBOYW1lKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVHcm91cHNBc0tleXMpIHsKKwkJICAgICAgICAgICAgICAgICAgICByZXNPdXQucHJpbnRsbigiICAgICIgKyBlc2NhcGVTdHJpbmcoZ3JvdXAuZ2V0TmFtZSgpLCB0cnVlKSArICIgeyAiKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdyaXRlTWV0YURhdGEpIHsKKwkJICAgICAgICAgICAgICAgICAgICByZXNPdXQucHJpbnRsbigiICAgIC8vIEBncm91cCAiICsgZXNjYXBlU3RyaW5nKGdyb3VwLmdldE5hbWUoKSwgdHJ1ZSkpOworCSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGs9MDsgayA8IGl0ZW1WZWN0U2l6ZTsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVtVmVjdC5lbGVtZW50QXQoayk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZU1ldGFEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50KCIgICAgICAgIC8vIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50KCIgQHRyYW5zbGF0ZWQgIiArIGl0ZW0uaXNUcmFuc2xhdGVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc091dC5wcmludCgiIEBjcmVhdGVkICIgKyBpdGVtLmdldENyZWF0ZWREYXRlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc091dC5wcmludCgiIEBtb2RpZmllZCAiICsgaXRlbS5nZXRNb2RpZmllZERhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50KCIgQGNyZWF0b3IgIiArIGl0ZW0uZ2V0Q3JlYXRvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNPdXQucHJpbnRsbigiIEBtb2RpZmllciAiICsgaXRlbS5nZXRNb2RpZmllcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaXRlbUNvbW1lbnQgPSBpdGVtLmdldENvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUNvbW1lbnQgIT0gbnVsbCAmJiAhaXRlbUNvbW1lbnQuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNPdXQucHJpbnRsbigiICAgICAgICAvLyBAY29tbWVudCAiICsgaXRlbUNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIiAgICAgICAgIiArIGVzY2FwZVN0cmluZyhpdGVtLmdldEtleSgpLCB0cnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHsgIiArIGVzY2FwZVN0cmluZyhpdGVtLmdldFRyYW5zbGF0aW9uKCksIGZhbHNlKSArICIgfSIpOworICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBmb3IgLSBrCisgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZUdyb3VwTmFtZSAmJiB3cml0ZUdyb3Vwc0FzS2V5cykgeworCSAgICAgICAgICAgICAgICAgICAgcmVzT3V0LnByaW50bG4oIiAgICB9Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8vIGVuZCBmb3IgLSBqCisgICAgICAgICAgICByZXNPdXQucHJpbnRsbigifSIpOworCQkJCisgICAgICAgICAgICAvLyBXcml0ZSBvdXQgdGhlIGZpbGUKKyAgICAgICAgICAgIHJlc091dC5jbG9zZSgpOworICAgICAgICAgICAgZm9zLmNsb3NlKCk7CisgICAgICAgIH0gLy8gZW5kIGZvciAtIGkKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFc2NhcGUgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGhvdyB0aGUgSUNVIHRvb2wgImdlbnJiIiBoYW5kbGVzIHN0cmluZ3MuCisgICAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGVzY2FwZQorICAgICAqIEBwYXJhbSBpc0tleSBJZiB0aGlzIGlzIGEga2V5LCB0aGVuIHF1b3RlcyBhcmUgb3B0aW9uYWwuCisgICAgICogQHJldHVybiBBIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGFuIElDVSByZXNvdXJjZSBidW5kbGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZyBlc2NhcGVTdHJpbmcoU3RyaW5nIHN0ciwgYm9vbGVhbiBpc0tleSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHN0ckJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgaW50IGxlbiA9IHN0ci5sZW5ndGgoKTsKKyAgICAgICAgYm9vbGVhbiBxdW90ZVJlcXVpcmVkID0gIWlzS2V5OworICAgICAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7CisgICAgICAgICAgICBpbnQgY2ggPSBzdHIuY2hhckF0KGlkeCk7CisgICAgICAgICAgICBpZiAoY2ggPD0gJyAnIHx8ICd+JyA8IGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzS2V5ICYmIGNoICE9ICcgJykgeworICAgICAgICAgICAgICAgICAgICBJT0V4Y2VwdGlvbiBlID0gbmV3IElPRXhjZXB0aW9uKHN0ciArICIgbmVlZHMgdG8gdXNlIGludmFyaWFudCBjaGFyYWN0ZXJzIGZvciB0aGUga2V5LiIpOworICAgICAgICAgICAgICAgICAgICBlLmZpbGxJblN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVzY2FwZU5vbkFzY2lpICYmIGNoICE9ICcgJykgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgemVyb3M7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBoZXhOdW07CisgICAgICAgICAgICAgICAgICAgIGlmICgoY2ggJiAweGY4MDApID09IDB4ZDgwMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgd2UgZm91bmQgYSB2YWxpZCBVVEYtMTYgc3RyaW5nIHdpdGggYSBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaDIgPSBzdHIuY2hhckF0KGlkeCsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaFN1cnJvZ2F0ZSA9ICgoKGNoKTw8MTApKyhjaDIpLSgoMHhkODAwPDwxMCkrMHhkYzAwLTB4MTAwMDApKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgemVyb3MgPSAiMDAwMDAwMDAiOworICAgICAgICAgICAgICAgICAgICAgICAgaGV4TnVtID0gSW50ZWdlci50b0hleFN0cmluZyhjaFN1cnJvZ2F0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYuYXBwZW5kKCJcXFUiKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHplcm9zID0gIjAwMDAiOworICAgICAgICAgICAgICAgICAgICAgICAgaGV4TnVtID0gSW50ZWdlci50b0hleFN0cmluZyhjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYuYXBwZW5kKCJcXHUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdHJCdWYuYXBwZW5kKHplcm9zLnN1YnN0cmluZyhoZXhOdW0ubGVuZ3RoKCkpICsgaGV4TnVtLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHF1b3RlUmVxdWlyZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzdHJCdWYuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdcIicpIHsKKyAgICAgICAgICAgICAgICBxdW90ZVJlcXVpcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdHJCdWYuYXBwZW5kKCJcXFwiIik7CisgICAgICAgICAgICB9IGVsc2UgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ3snIHx8IGNoID09ICd9JykgeworICAgICAgICAgICAgICAgICAgICBxdW90ZVJlcXVpcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RyQnVmLmFwcGVuZChjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHF1b3RlUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIHN0ckJ1Zi5pbnNlcnQoMCwgJ1wiJyk7CisgICAgICAgICAgICBzdHJCdWYuYXBwZW5kKCdcIicpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJCdWYudG9TdHJpbmcoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSW1wb3J0ZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkltcG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0YTViOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQkltcG9ydGVyLmphdmEKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitpbXBvcnQgY29tLmlibS5yYm0uZ3VpLlJCTWFuYWdlckdVSTsKKworaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworLyoqCisgKiA8UD5UaGlzIGlzIHRoZSBzdXBlciBjbGFzcyBmb3IgYWxsIGltcG9ydGVyIHBsdWctaW4gY2xhc3Nlcy48L1A+CisgKiA8UD4KKyAqIEluIHRlcm1zIG9mIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNsYXNzIG9yIGl0cyBjaGlsZHJlbiBjbGFzc2VzLCB0aGUgZm9sbG93aW5nIHN0ZXBzIHNob3VsZCBoYXBwZW4gaW4gb3JkZXI6CisgKiA8T0w+CisgKiA8TEk+QSBEaWFsb2cgaXMgc2hvd24gZnJvbSB3aGljaCB0aGUgdXNlciBtYXkgc2VsZWN0IG9wdGlvbnMgYWJvdXQgdGhlIGltcG9ydCwgaW5jbHVkaW5nIHRoZSBmaWxlIGZyb20gd2hpY2ggdG8gaW1wb3J0LjwvTEk+CisgKiA8TEk+VGhlICdJbXBvcnQnIGJ1dHRvbiBpcyBwcmVzc2VkLCBjbG9zaW5nIHRoZSBvcHRpb25zIGRpYWxvZyBhbmQgb3BlbmluZyBhIHByb2dyZXNzIGJhciBkaWFsb2cgYm94LjwvTEk+CisgKiA8TEk+VGhlIGNsYXNzIHNob3VsZCByZXNvbHZlIGFsbCBjb25mbGljdHMgd2l0aCBsb2NhbGUgZW5jb2RpbmdzIGV4aXN0aW5nIGluIHRoZSBpbXBvcnQgZmlsZXMsIGJ1dCBub3QgaW4gdGhlIGFjdGl2ZSByZXNvdXJjZSBidW5kbGUuPC9MST4KKyAqIDxMST5UaGUgY2xhc3Mgc2hvdWxkIHBhcnNlIHJlc291cmNlcyBvbmUgYXQgYSB0aW1lIGFuZCB1c2UgdGhlIGltcG9ydFJlc291cmNlKCkgbWV0aG9kIHRvIGluc2VydCB0aGVtIGludG8gdGhlIHJlc291cmNlIGJ1bmRsZS48L0xJPgorICogPExJPlRoZSBjbGFzcyBzaG91bGQgcmVwb3J0IHdoZW4gYWxsIHJlc291cmNlcyBoYXZlIGJlZW4gcmVhZCBhbmQgdGhlIGltcG9ydCBpcyBjb21wbGV0ZS48L0xJPgorICogPC9PTD4KKyAqIDwvUD4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJJbXBvcnRlciBleHRlbmRzIEpEaWFsb2cgeworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBGSUxFX09QVElPTl9QT1BVTEFURSAgICAgID0gMDsgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgbG9jYWxlIGZpbGUgcG9wdWxhdGVkIGZyb20gYmFzZSBmaWxlCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IEZJTEVfT1BUSU9OX0VNUFRZICAgICAgICAgPSAxOyAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBlbXB0eSBsb2NhbGUgZmlsZQorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBGSUxFX09QVElPTl9JR05PUkUgICAgICAgID0gMjsgICAgICAgICAgICAvLyBJZ25vcmUgYWxsIHJlc291cmNlcyBmcm9tIHRoaXMgZW5jb2RpbmcKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgRklMRV9PUFRJT05fUFJPTVBUICAgICAgICA9IDM7ICAgICAgICAgICAgLy8gUHJvbXB0IGZvciBlYWNoIGNvbmZsaWN0CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFJFU09VUkNFX09QVElPTl9PVkVSV1JJVEUgPSAwOyAgICAgICAgICAgIC8vIFVzZSB0aGUgdmFsdWUgZnJvbSB0aGUgc291cmNlIGltcG9ydCBmaWxlCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFJFU09VUkNFX09QVElPTl9JR05PUkUgICAgPSAxOyAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgaW1wb3J0IGFuZCB1c2UgZXhpc3RpbmcgdmFsdWUKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgUkVTT1VSQ0VfT1BUSU9OX1BST01QVCAgICA9IDI7ICAgICAgICAgICAgLy8gUHJvcG1wdCBmb3IgZWFjaCBjb25mbGljdAorCQorICAgIHByb3RlY3RlZCBzdGF0aWMgSkZpbGVDaG9vc2VyIGNob29zZXI7CisgICAgcHJvdGVjdGVkIGludCAgICBudW1fY29uZmxpY3RzOworICAgIHByb3RlY3RlZCBpbnQgICAgbnVtX2V4dHJhX2ZpbGVzOworICAgIHByb3RlY3RlZCBTdHJpbmcgdGl0bGU7CisgICAgcHJvdGVjdGVkIFJCTWFuYWdlciByYm07CisgICAgcHJvdGVjdGVkIFJCTWFuYWdlckdVSSBndWk7CisgICAgcHJvdGVjdGVkIGJvb2xlYW4gcGF0aFNldCA9IGZhbHNlOworCQorICAgIC8vIFZpc3VhbCBDb21wb25lbnRzCisgICAgSlJhZGlvQnV0dG9uIHJlc291cmNlT3ZlcndyaXRlUmFkaW8gICAgPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X292ZXJ3cml0ZSIpLCBmYWxzZSk7CisgICAgSlJhZGlvQnV0dG9uIHJlc291cmNlSWdub3JlUmFkaW8gICAgICAgPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2lnbm9yZSIpLCBmYWxzZSk7CisgICAgSlJhZGlvQnV0dG9uIHJlc291cmNlUHJvbXB0UmFkaW8gICAgICAgPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2NvbmZsaWN0X3Byb21wdCIpLCB0cnVlKTsKKyAgICBKUmFkaW9CdXR0b24gZmlsZUdlbmVyYXRlUG9wdWxhdGVSYWRpbyA9IG5ldyBKUmFkaW9CdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZmlsZV9jb25mbGljdF9nZW5lcmF0ZV9wb3B1bGF0ZSIpLCBmYWxzZSk7CisgICAgSlJhZGlvQnV0dG9uIGZpbGVHZW5lcmF0ZUVtcHR5UmFkaW8gICAgPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfZW1wdHkiKSwgZmFsc2UpOworICAgIEpSYWRpb0J1dHRvbiBmaWxlSWdub3JlUmFkaW8gICAgICAgICAgID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0X2lnbm9yZSIpLCBmYWxzZSk7CisgICAgSlJhZGlvQnV0dG9uIGZpbGVQcm9tcHRSYWRpbyAgICAgICAgICAgPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2NvbmZsaWN0X3Byb21wdCIpLCB0cnVlKTsKKwkKKyAgICBKQ2hlY2tCb3ggbWFya1RyYW5zbGF0ZWRDaGVjayA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZGVmYXVsdF90cmFuc2xhdGVkIiksIHRydWUpOworICAgIEpDaGVja0JveCBjcmVhdGVHcm91cHNDaGVjayA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZGVmYXVsdF9ncm91cF9jcmVhdGlvbiIpLCB0cnVlKTsKKyAgICBKQ29tYm9Cb3ggZ3JvdXBDb21ib0JveCA9IG5ldyBKQ29tYm9Cb3goKTsKKwkKKyAgICBKTGFiZWwgc291cmNlTGFiZWw7CisJCisgICAgSkRpYWxvZyBwcm9ncmVzc0JhckRpYWxvZzsKKyAgICBKUHJvZ3Jlc3NCYXIgcHJvZ3Jlc3NCYXI7CisgICAgCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIHRoYXQgYXBwZWFycyBpbiB0aGUgRGlhbG9nIGJveAorICAgICAqIEBwYXJhbSByYm0gQW4gUkJNYW5hZ2VyIGluc3RhbmNlCisgICAgICogQHBhcmFtIGd1aSBUaGUgUkJNYW5hZ2VyIEdVSSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIFJCTWFuYWdlciBpbnN0YW5jZQorICAgICAqLworICAgIAorICAgIHB1YmxpYyBSQkltcG9ydGVyKFN0cmluZyB0aXRsZSwgUkJNYW5hZ2VyIHJibSwgUkJNYW5hZ2VyR1VJIGd1aSkgeworICAgICAgICBzdXBlcihuZXcgRnJhbWUoKSwgdGl0bGUsIHRydWUpOworICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7CisgICAgICAgIHRoaXMucmJtID0gcmJtOworICAgICAgICB0aGlzLmd1aSA9IGd1aTsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBpbml0KCkgeworICAgICAgICBjaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOworICAgICAgICBzZXR1cEZpbGVDaG9vc2VyKCk7CisgICAgICAgIG51bV9jb25mbGljdHMgPSAwOworICAgICAgICBudW1fZXh0cmFfZmlsZXMgPSAwOworICAgICAgICBpbml0Q29tcG9uZW50cygpOworICAgICAgICBzZXRWaXNpYmxlKHRydWUpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXR1cEZpbGVDaG9vc2VyKCkgeworICAgICAgICAvLyBUbyBiZSBvdmVyd3JpdHRlbgorICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBiZWdpbkltcG9ydCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIFRvIGJlIG92ZXJ3cml0dGVuCisgICAgICAgIGlmICghcGF0aFNldCkKKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiUGF0aCBub3Qgc2V0IHlldCIpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBjaG9vc2VGaWxlKCkgeworICAgICAgICBpbnQgcmVzdWx0ID0gY2hvb3Nlci5zaG93T3BlbkRpYWxvZyh0aGlzKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKyAgICAgICAgICAgIEZpbGUgZiA9IGNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7CisgICAgICAgICAgICBzb3VyY2VMYWJlbC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3NvdXJjZV9maWxlIixmLmdldEFic29sdXRlUGF0aCgpKSk7CisgICAgICAgICAgICBwYXRoU2V0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgRmlsZSBnZXRDaG9zZW5GaWxlKCkgeworICAgICAgICByZXR1cm4gY2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogQSBzdXBlciBjbGFzcyBtZXRob2QgaW50ZW5kZWQgZm9yIHVzZSBvZiBuZWFybHkgYWxsIHN1YmNsYXNzIGltcG9ydGVycywgb25jZSBhIHJlc291cmNlCisgICAgICogaXMgZm91bmQgYnkgdGhvc2Ugc3ViY2xhc3Nlcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgbmV3IHJlc291cmNlCisgICAgICogYW5kIGhhbmRsZSB0aGUgdmFyaW91cyBjb25mbGljdCBlcnJvcnMgdGhhdCBtYXkgcmVzdWx0IGFzIGEgcGFydCBvZiB0aGF0IGltcG9ydC4KKyAgICAgKi8KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBpbXBvcnRSZXNvdXJjZShCdW5kbGVJdGVtIGl0ZW0sIFN0cmluZyBlbmNvZGluZywgU3RyaW5nIGdyb3VwX25hbWUpIHsKKyAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG51bGw7CisgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gbnVsbDsKKyAgICAgICAgQnVuZGxlR3JvdXAgYmFja3VwX2dyb3VwID0gbnVsbDsKKwkJCisgICAgICAgIGlmIChncm91cF9uYW1lID09IG51bGwpCisgICAgICAgIAlncm91cF9uYW1lID0gZ2V0RGVmYXVsdEdyb3VwKCk7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKQorICAgICAgICAJcmV0dXJuOworICAgICAgICAvLyBHZXQgdGhlIGJ1bmRsZSB0byB3aGljaCB3ZSB3aWxsIGJlIGFkZGluZyB0aGlzIHJlc291cmNlCisgICAgICAgIGJ1bmRsZSA9IHJibS5nZXRCdW5kbGUoZW5jb2RpbmcpOworICAgICAgICAvLyBTa2lwIHRoaXMgaW1wb3J0IGlmIHRoZSBidW5kbGUgaXMgbm9uLWV4aXN0ZW50IChTaG91bGQgaGF2ZSBiZWVuIHJlc29sdmVkIGlmIHdhbnRlZCkKKyAgICAgICAgaWYgKGJ1bmRsZSA9PSBudWxsKQorICAgICAgICAJcmV0dXJuOworICAgICAgICAvLyBGaW5kIHRoZSBncm91cCBpbiB0aGUgYnVuZGxlLCBVbmdyb3VwZWQgaWYgbm9uLWV4aXN0ZW50CisgICAgICAgIFZlY3RvciBndiA9IGJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBndi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlR3JvdXAgdGVtcGcgPSAoQnVuZGxlR3JvdXApZ3YuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaWYgKGk9PTApIGJhY2t1cF9ncm91cCA9IHRlbXBnOworICAgICAgICAgICAgaWYgKHRlbXBnLmdldE5hbWUoKS5lcXVhbHMoIlVuZ3JvdXBlZCBJdGVtcyIpKSBiYWNrdXBfZ3JvdXAgPSB0ZW1wZzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRlbXBnLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBfbmFtZSkpIHsKKyAgICAgICAgICAgICAgICBncm91cCA9IHRlbXBnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChncm91cCA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAoZ2V0RGVmYXVsdEdyb3VwQ3JlYXRpb24oKSkgeworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBncm91cCBieSB0aGlzIG5hbWUKKyAgICAgICAgICAgICAgICBidW5kbGUuYWRkQnVuZGxlR3JvdXAoZ3JvdXBfbmFtZSwgIiIpOworICAgICAgICAgICAgICAgIGd2ID0gYnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgZ3Yuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgdGVtcGcgPSAoQnVuZGxlR3JvdXApZ3YuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGVtcGcuZ2V0TmFtZSgpLmVxdWFscyhncm91cF9uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSB0ZW1wZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGJhY2t1cF9ncm91cAorICAgICAgICAgICAgICAgIGdyb3VwID0gYmFja3VwX2dyb3VwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIElmIGFsbCBncm91cCBpZGVudGlmaWNhdGlvbiBlZmZvcnRzIGZhaWwsIHdlIGZhaWwKKyAgICAgICAgaWYgKGdyb3VwID09IG51bGwpCisgICAgICAgIAlyZXR1cm47CisgICAgICAgIGl0ZW0uc2V0UGFyZW50R3JvdXAoZ3JvdXApOworICAgICAgICAvLyBDaGVjayBmb3IgYW5kIHJlc29sdmUgY29uZmxpY3RzCisgICAgICAgIGlmIChidW5kbGUuYWxsSXRlbXMuY29udGFpbnNLZXkoaXRlbS5nZXRLZXkoKSkpIHsKKyAgICAgICAgICAgIHJlc29sdmVSZXNvdXJjZShidW5kbGUsaXRlbSk7IAorICAgICAgICAgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJSZXNvbHZlIGNvbmZsaWN0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHJlc291cmNlCisgICAgICAgICAgICBidW5kbGUuYWRkQnVuZGxlSXRlbShpdGVtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdHJ5aW5nIHRvIGltcG9ydCBhbmQgaXRlbSB3aG9zZSBrZXkgYWxsIHJlYWR5IGV4aXN0cyB3aXRoaW4gdGhlIGJ1bmRsZS4KKyAgICAgKi8KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCByZXNvbHZlUmVzb3VyY2UoQnVuZGxlIGJ1bmRsZSwgQnVuZGxlSXRlbSBpdGVtKSB7CisgICAgICAgIGlmICh0aGlzLmdldFJlc291cmNlQ29uZmxpY3RPcHRpb24oKSA9PSBSRVNPVVJDRV9PUFRJT05fSUdOT1JFKQorICAgICAgICAJcmV0dXJuOworICAgICAgICBlbHNlIGlmICh0aGlzLmdldFJlc291cmNlQ29uZmxpY3RPcHRpb24oKSA9PSBSRVNPVVJDRV9PUFRJT05fT1ZFUldSSVRFKSB7CisgICAgICAgICAgICBidW5kbGUucmVtb3ZlSXRlbShpdGVtLmdldEtleSgpKTsKKyAgICAgICAgICAgIGJ1bmRsZS5hZGRCdW5kbGVJdGVtKGl0ZW0pOworICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0UmVzb3VyY2VDb25mbGljdE9wdGlvbigpID09IFJFU09VUkNFX09QVElPTl9QUk9NUFQpIHsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gb3JpZ2luYWwgPSAoQnVuZGxlSXRlbSlidW5kbGUuYWxsSXRlbXMuZ2V0KGl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgaWYgKG9yaWdpbmFsID09IG51bGwpCisgICAgICAgICAgICAJcmV0dXJuOworICAgICAgICAgICAgU3RyaW5nIHRyYW5zID0gb3JpZ2luYWwuZ2V0VHJhbnNsYXRpb24oKTsKKyAgICAgICAgICAgIFN0cmluZyBvcHRpb25zW10gPSB7IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X292ZXJ3cml0ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfaWdub3JlIil9OworICAgICAgICAgICAgU3RyaW5nIGluc2VydFtdID0ge2l0ZW0uZ2V0S2V5KCksIChidW5kbGUuZW5jb2RpbmcuZXF1YWxzKCIiKSA/ICIoQmFzZSBDbGFzcykiIDogYnVuZGxlLmVuY29kaW5nKX07CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gKFN0cmluZylKT3B0aW9uUGFuZS5zaG93SW5wdXREaWFsb2codGhpcywgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZSIsIGluc2VydCkgKyAKKyAgICAgICAgICAgICAgICAiXG4iICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3NvdXJjZSIsIGl0ZW0uZ2V0VHJhbnNsYXRpb24oKSkgKworICAgICAgICAgICAgICAgICJcbiIgKyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2VfdGFyZ2V0IiwgdHJhbnMpLAorICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RzIiksIEpPcHRpb25QYW5lLlFVRVNUSU9OX01FU1NBR0UsCisgICAgICAgICAgICAgICAgbnVsbCwgb3B0aW9ucywgb3B0aW9uc1swXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCisgICAgICAgICAgICAJcmV0dXJuOworICAgICAgICAgICAgaWYgKHJlc3VsdC5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3Rfb3ZlcndyaXRlIikpKSB7CisgICAgICAgICAgICAgICAgYnVuZGxlLnJlbW92ZUl0ZW0oaXRlbS5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgYnVuZGxlLmFkZEJ1bmRsZUl0ZW0oaXRlbSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfaWdub3JlIikpKQorICAgICAgICAgICAgCXJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBHaXZlbiBhIHZlY3RvciBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgbG9jYWxlIGVuY29kaW5ncyAoZS5nLiB7ImVuIiwgImVuX3VzIiwgImRlIn0pLCBhdHRlbXB0cworICAgICAqIHRvIHJlc29sdmUgdGhvc2UgY29uZmxpY3RzIGFjY29yZGluZyB0byB0aGUgcHJlZmVyZW5jZXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuCisgICAgICovCisJCisgICAgcHJvdGVjdGVkIHZvaWQgcmVzb2x2ZUVuY29kaW5ncyhWZWN0b3IgdikgeworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSAoU3RyaW5nKXYuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwgfHwgZW5jb2RpbmcuZXF1YWxzKCIiKSB8fCByYm0uaGFzUmVzb3VyY2UoZW5jb2RpbmcpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzb2x2ZSB0aGlzIGNvbmZsaWN0CisgICAgICAgICAgICBpZiAodGhpcy5nZXRGaWxlQ29uZmxpY3RPcHRpb24oKSA9PSBGSUxFX09QVElPTl9JR05PUkUpIGNvbnRpbnVlOworICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5nZXRGaWxlQ29uZmxpY3RPcHRpb24oKSA9PSBGSUxFX09QVElPTl9QT1BVTEFURSkgeworICAgICAgICAgICAgICAgIHJibS5jcmVhdGVSZXNvdXJjZShudWxsLCBudWxsLCBudWxsLCBlbmNvZGluZywgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0RmlsZUNvbmZsaWN0T3B0aW9uKCkgPT0gRklMRV9PUFRJT05fRU1QVFkpIHsKKyAgICAgICAgICAgICAgICByYm0uY3JlYXRlUmVzb3VyY2UobnVsbCwgbnVsbCwgbnVsbCwgZW5jb2RpbmcsIG51bGwsIG51bGwsIG51bGwsIHRydWUpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEZpbGVDb25mbGljdE9wdGlvbigpID09IEZJTEVfT1BUSU9OX1BST01QVCkgeworICAgICAgICAgICAgICAgIFN0cmluZyBvcHRpb25zW10gPSB7IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfcG9wdWxhdGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0X2dlbmVyYXRlX2VtcHR5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZmlsZV9jb25mbGljdF9pZ25vcmUiKX07CisJCQkJCisgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpSk9wdGlvblBhbmUuc2hvd0lucHV0RGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfY2hvb3NlIiwgZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9maWxlX2NvbmZsaWN0cyIpLCBKT3B0aW9uUGFuZS5RVUVTVElPTl9NRVNTQUdFLAorICAgICAgICAgICAgICAgICAgICBudWxsLCBvcHRpb25zLCBvcHRpb25zWzBdKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfaWdub3JlIikpKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfcG9wdWxhdGUiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmJtLmNyZWF0ZVJlc291cmNlKG51bGwsIG51bGwsIG51bGwsIGVuY29kaW5nLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfZmlsZV9jb25mbGljdF9nZW5lcmF0ZV9lbXB0eSIpKSkgeworICAgICAgICAgICAgICAgICAgICByYm0uY3JlYXRlUmVzb3VyY2UobnVsbCwgbnVsbCwgbnVsbCwgZW5jb2RpbmcsIG51bGwsIG51bGwsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ3VpLnVwZGF0ZURpc3BsYXlUcmVlKCk7CisgICAgfQorCQorICAgIC8vIFJldHVybnMgYW4gaW50ZWdlciBtYXNrIGRlc2NyaWJpbmcgdGhlIHVzZXIncyBzZWxlY3Rpb24gZm9yIGZpbGUgcmVzb2x2aW5nIG1pc3NpbmcgZmlsZSBsb2NhbGUgY29uZmxpY3RzCisJCisgICAgcHJpdmF0ZSBpbnQgZ2V0RmlsZUNvbmZsaWN0T3B0aW9uKCkgeworICAgICAgICBpZiAoZmlsZUdlbmVyYXRlUG9wdWxhdGVSYWRpby5pc1NlbGVjdGVkKCkpIHJldHVybiBGSUxFX09QVElPTl9QT1BVTEFURTsKKyAgICAgICAgaWYgKGZpbGVHZW5lcmF0ZUVtcHR5UmFkaW8uaXNTZWxlY3RlZCgpKSByZXR1cm4gRklMRV9PUFRJT05fRU1QVFk7CisgICAgICAgIGlmIChmaWxlSWdub3JlUmFkaW8uaXNTZWxlY3RlZCgpKSByZXR1cm4gRklMRV9PUFRJT05fSUdOT1JFOworICAgICAgICBpZiAoZmlsZVByb21wdFJhZGlvLmlzU2VsZWN0ZWQoKSkgcmV0dXJuIEZJTEVfT1BUSU9OX1BST01QVDsKKyAgICAgICAgcmV0dXJuIEZJTEVfT1BUSU9OX1BST01QVDsKKyAgICB9CisJCisgICAgLy8gUmV0dXJucyBhbiBpbnRlZ2VyIG1hc2sgZGVzY3JpYmluZyB0aGUgdXNlcidzIHNlbGVjdGlvbiBmb3IgZHVwbGljYXRlIHJlc291cmNlIGtleSBjb25mbGljdHMKKwkKKyAgICBwcml2YXRlIGludCBnZXRSZXNvdXJjZUNvbmZsaWN0T3B0aW9uKCkgeworICAgICAgICBpZiAocmVzb3VyY2VPdmVyd3JpdGVSYWRpby5pc1NlbGVjdGVkKCkpIHJldHVybiBSRVNPVVJDRV9PUFRJT05fT1ZFUldSSVRFOworICAgICAgICBpZiAocmVzb3VyY2VJZ25vcmVSYWRpby5pc1NlbGVjdGVkKCkpIHJldHVybiBSRVNPVVJDRV9PUFRJT05fSUdOT1JFOworICAgICAgICBpZiAocmVzb3VyY2VQcm9tcHRSYWRpby5pc1NlbGVjdGVkKCkpIHJldHVybiBSRVNPVVJDRV9PUFRJT05fUFJPTVBUOworICAgICAgICByZXR1cm4gUkVTT1VSQ0VfT1BUSU9OX1BST01QVDsKKyAgICB9CisJCisgICAgLy8gUmV0dXJucyB0aGUgZ3JvdXAgbmFtZSBmb3IgdXNlIHdoZW4gbm8gZ3JvdXAgbmFtZSBpcyBzcGVjaWZpZWQKKwkKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldERlZmF1bHRHcm91cCgpIHsKKyAgICAgICAgcmV0dXJuIGdyb3VwQ29tYm9Cb3guZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKTsKKyAgICB9CisJCisgICAgLy8gUmV0dXJucyB0aGUgZGVmYXVsdCB0cmFuc2xhdGlvbiB2YWx1ZQorCQorICAgIHByb3RlY3RlZCBib29sZWFuIGdldERlZmF1bHRUcmFuc2xhdGVkKCkgeworICAgICAgICByZXR1cm4gbWFya1RyYW5zbGF0ZWRDaGVjay5pc1NlbGVjdGVkKCk7CisgICAgfQorCQorICAgIC8vIFJldHVybnMgd2hldGhlciBvciBub3QgYSBncm91cCBvZiBuYW1lIG5vbi1leGlzdGFudCBpbiB0aGUgYWN0aXZlIGJ1bmRsZSBpcyBjcmVhdGVkCisJCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RGVmYXVsdEdyb3VwQ3JlYXRpb24oKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVHcm91cHNDaGVjay5pc1NlbGVjdGVkKCk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIHNob3dQcm9ncmVzc0JhcihpbnQgc3RlcHMpIHsKKyAgICAgICAgdGhpc1dpbmRvd0Nsb3NpbmcoKTsKKyAgICAgICAgSkRpYWxvZyBwcm9ncmVzc0JhckRpYWxvZyA9IG5ldyBKRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2ltcG9ydF9wcm9ncmVzcyIpLCBmYWxzZSk7CisgICAgICAgIEpQcm9ncmVzc0JhciBwcm9ncmVzc0JhciA9IG5ldyBKUHJvZ3Jlc3NCYXIoMCwgc3RlcHMpOworICAgICAgICBwcm9ncmVzc0Jhci5zZXRWYWx1ZSgwKTsKKyAgICAgICAgcHJvZ3Jlc3NCYXJEaWFsb2cuZ2V0Q29udGVudFBhbmUoKS5hZGQocHJvZ3Jlc3NCYXIpOworICAgICAgICBwcm9ncmVzc0JhckRpYWxvZy5wYWNrKCk7CisgICAgICAgIHByb2dyZXNzQmFyRGlhbG9nLnNldFZpc2libGUodHJ1ZSk7CisgICAgfQorCQorICAgIHByb3RlY3RlZCB2b2lkIGluY3JlbWVudFByb2dyZXNzQmFyKCkgeworICAgICAgICBpZiAocHJvZ3Jlc3NCYXIgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBwcm9ncmVzc0Jhci5zZXRWYWx1ZShwcm9ncmVzc0Jhci5nZXRWYWx1ZSgpKzEpOworICAgICAgICBpZiAocHJvZ3Jlc3NCYXIuZ2V0VmFsdWUoKSA9PSBwcm9ncmVzc0Jhci5nZXRNYXhpbXVtKCkpIGhpZGVQcm9ncmVzc0JhcigpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBoaWRlUHJvZ3Jlc3NCYXIoKSB7CisgICAgICAgIGlmIChwcm9ncmVzc0JhckRpYWxvZyAhPSBudWxsKSBwcm9ncmVzc0JhckRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogSW5pdGlhbGl6ZSB0aGUgdmlzdWFsIGNvbXBvbmVudHMgZm9yIHNlbGVjdGluZyBhbiBpbXBvcnQgZmlsZSBhbmQgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUKKyAgICAgKiBvcHRpb25zCisgICAgICovCisJCisgICAgcHJvdGVjdGVkIHZvaWQgaW5pdENvbXBvbmVudHMoKSB7CisgICAgICAgIC8vIENyZWF0ZSBDb21wb25lbnRzCisgICAgICAgIEpMYWJlbCB0aXRsZUxhYmVsICAgICAgID0gbmV3IEpMYWJlbCh0aXRsZSk7CisgICAgICAgIHNvdXJjZUxhYmVsICAgICAgICAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9zb3VyY2VfZmlsZSIsIi0tIikpOworICAgICAgICBKTGFiZWwgaW5zZXJ0R3JvdXBMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfaW5zZXJ0X2dyb3VwIikpOworICAgICAgICAKKyAgICAgICAgSkJ1dHRvbiBmaWxlQ2hvb3NlQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY2hvb3NlIikpOworICAgICAgICBKQnV0dG9uIGNhbmNlbEJ1dHRvbiAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jYW5jZWwiKSk7CisgICAgICAgIEpCdXR0b24gaW1wb3J0QnV0dG9uICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2ltcG9ydCIpKTsKKyAgICAgICAgCisgICAgICAgIEJ1dHRvbkdyb3VwIHJlc291cmNlR3JvdXAgPSBuZXcgQnV0dG9uR3JvdXAoKTsKKyAgICAgICAgQnV0dG9uR3JvdXAgZmlsZUdyb3VwID0gbmV3IEJ1dHRvbkdyb3VwKCk7CisJCQorICAgICAgICBKUGFuZWwgdG9wUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIEpQYW5lbCBtaWRQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEJvcmRlckxheW91dCgpKTsKKyAgICAgICAgSlBhbmVsIGJvdFBhbmVsID0gbmV3IEpQYW5lbChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LlJJR0hUKSk7CisgICAgICAgIAorICAgICAgICBKUGFuZWwgdG9wSW5uZXJQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEJvcmRlckxheW91dCgpKTsKKyAgICAgICAgCisgICAgICAgIEJveCBtaWRCb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQkKKyAgICAgICAgSlBhbmVsIHJlc291cmNlUGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworICAgICAgICBKUGFuZWwgZmlsZVBhbmVsICAgICA9IG5ldyBKUGFuZWwobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5MRUZUKSk7CisgICAgICAgIEpQYW5lbCBkZWZhdWx0UGFuZWwgID0gbmV3IEpQYW5lbChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LkxFRlQpKTsKKyAgICAgICAgSlBhbmVsIGRlZmF1bHRQYW5lbDIgPSBuZXcgSlBhbmVsKG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIAorICAgICAgICBCb3ggcmVzb3VyY2VCb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworICAgICAgICBCb3ggZmlsZUJveCAgICAgPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworICAgICAgICBCb3ggZ3JvdXBCb3ggICAgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCQkKKyAgICAgICAgLy8gU2V0dXAgdGl0bGUKKyAgICAgICAgdGl0bGVMYWJlbC5zZXRGb250KG5ldyBGb250KCJTZXJpZiIsRm9udC5CT0xELDE2KSk7CisJCQorICAgICAgICAvLyBTZXR1cCBwYW5lbHMKKyAgICAgICAgbWlkUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X29wdGlvbnMiKSkpOworICAgICAgICByZXNvdXJjZVBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9yZXNvdXJjZV9jb25mbGljdHMiKSkpOworICAgICAgICBmaWxlUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2ZpbGVfY29uZmxpY3RzIikpKTsKKyAgICAgICAgZGVmYXVsdFBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9kZWZhdWx0X3ZhbHVlcyIpKSk7CisJCQorICAgICAgICAvLyBBcnJhbmdlIGJ1dHRvbiBncm91cHMKKyAgICAgICAgZmlsZUdyb3VwLmFkZChmaWxlR2VuZXJhdGVQb3B1bGF0ZVJhZGlvKTsKKyAgICAgICAgZmlsZUdyb3VwLmFkZChmaWxlR2VuZXJhdGVFbXB0eVJhZGlvKTsKKyAgICAgICAgZmlsZUdyb3VwLmFkZChmaWxlSWdub3JlUmFkaW8pOworICAgICAgICBmaWxlR3JvdXAuYWRkKGZpbGVQcm9tcHRSYWRpbyk7CisgICAgICAgIHJlc291cmNlR3JvdXAuYWRkKHJlc291cmNlT3ZlcndyaXRlUmFkaW8pOworICAgICAgICByZXNvdXJjZUdyb3VwLmFkZChyZXNvdXJjZUlnbm9yZVJhZGlvKTsKKyAgICAgICAgcmVzb3VyY2VHcm91cC5hZGQocmVzb3VyY2VQcm9tcHRSYWRpbyk7CisJCQorICAgICAgICAvLyBBZGQgYWN0aW9uIGxpc3RlbmVycworICAgICAgICBjYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKyAgICAgICAgICAgICAgICB0aGlzV2luZG93Q2xvc2luZygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwkJCisgICAgICAgIGltcG9ydEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGJlZ2luSW1wb3J0KCk7CisgICAgICAgICAgICAgICAgICAgIGd1aS51cGRhdGVQcm9qZWN0VHJlZSgpOworICAgICAgICAgICAgICAgICAgICBndWkudXBkYXRlRGlzcGxheVRyZWUoKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpc1dpbmRvd0Nsb3NpbmcoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgICAgICAJaW9lLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2cobnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSArICJcbiIgKyBpb2UuZ2V0TG9jYWxpemVkTWVzc2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsJCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwkJCisgICAgICAgIGZpbGVDaG9vc2VCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKyAgICAgICAgICAgICAgICBjaG9vc2VGaWxlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCQkKKyAgICAgICAgLy8gU2V0dXAgY29tYm8gYm94CisgICAgICAgIEJ1bmRsZSBiYXNlQnVuZGxlID0gKChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5lbGVtZW50QXQoMCkpOworICAgICAgICBCdW5kbGVHcm91cCB1bmdyb3VwZWRHcm91cCA9IGJhc2VCdW5kbGUuZ2V0VW5ncm91cGVkR3JvdXAoKTsKKyAgICAgICAgZ3JvdXBDb21ib0JveCA9IG5ldyBKQ29tYm9Cb3goYmFzZUJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpKTsKKyAgICAgICAgaW50IGdyb3VwQ29tYm9Cb3hDb3VudCA9IGdyb3VwQ29tYm9Cb3guZ2V0SXRlbUNvdW50KCk7CisgICAgICAgIGZvciAoaW50IHNlbGVjdGVkSW5kZXggPSAwOyBzZWxlY3RlZEluZGV4IDwgZ3JvdXBDb21ib0JveENvdW50OyBzZWxlY3RlZEluZGV4KyspIHsKKyAgICAgICAgCUJ1bmRsZUdyb3VwIGJ1bmRHcm91cCA9ICgoQnVuZGxlR3JvdXApZ3JvdXBDb21ib0JveC5nZXRJdGVtQXQoc2VsZWN0ZWRJbmRleCkpOworICAgICAgICAJaWYgKGJ1bmRHcm91cC5nZXROYW1lKCkuZXF1YWxzKHVuZ3JvdXBlZEdyb3VwLmdldE5hbWUoKSkpIHsKKyAgICAgICAgCQkvLyBCeSBkZWZhdWx0LCB1c2UgdGhlIHVuZ3JvdXBlZCBncm91cC4gUHJvYmFibHkgbmFtZWQgJ1VuZ3JvdXBlZCBJdGVtcycuCisgICAgICAgIAkJZ3JvdXBDb21ib0JveC5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkSW5kZXgpOworICAgICAgICAJCWJyZWFrOworICAgICAgICAJfQorICAgICAgICB9CisJCQorICAgICAgICAvLyBBcmFuZ2UgY29tcG9uZW50cworICAgICAgICBncm91cEJveC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOworICAgICAgICBncm91cEJveC5hZGQoaW5zZXJ0R3JvdXBMYWJlbCk7CisgICAgICAgIGdyb3VwQm94LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKyAgICAgICAgZ3JvdXBCb3guYWRkKGdyb3VwQ29tYm9Cb3gpOworCQkKKyAgICAgICAgZGVmYXVsdFBhbmVsMi5hZGQoZ3JvdXBCb3gsIEJvcmRlckxheW91dC5OT1JUSCk7CisgICAgICAgIGRlZmF1bHRQYW5lbDIuYWRkKG1hcmtUcmFuc2xhdGVkQ2hlY2ssIEJvcmRlckxheW91dC5DRU5URVIpOworICAgICAgICBkZWZhdWx0UGFuZWwyLmFkZChjcmVhdGVHcm91cHNDaGVjaywgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJCisgICAgICAgIGZpbGVCb3guYWRkKGZpbGVHZW5lcmF0ZVBvcHVsYXRlUmFkaW8pOworICAgICAgICBmaWxlQm94LmFkZChmaWxlR2VuZXJhdGVFbXB0eVJhZGlvKTsKKyAgICAgICAgZmlsZUJveC5hZGQoZmlsZUlnbm9yZVJhZGlvKTsKKyAgICAgICAgZmlsZUJveC5hZGQoZmlsZVByb21wdFJhZGlvKTsKKwkJCisgICAgICAgIHJlc291cmNlQm94LmFkZChyZXNvdXJjZU92ZXJ3cml0ZVJhZGlvKTsKKyAgICAgICAgcmVzb3VyY2VCb3guYWRkKHJlc291cmNlSWdub3JlUmFkaW8pOworICAgICAgICByZXNvdXJjZUJveC5hZGQocmVzb3VyY2VQcm9tcHRSYWRpbyk7CisJCQorICAgICAgICBkZWZhdWx0UGFuZWwuYWRkKGRlZmF1bHRQYW5lbDIpOworICAgICAgICBmaWxlUGFuZWwuYWRkKGZpbGVCb3gpOworICAgICAgICByZXNvdXJjZVBhbmVsLmFkZChyZXNvdXJjZUJveCk7CisJCQorICAgICAgICBtaWRCb3guYWRkKHJlc291cmNlUGFuZWwpOworICAgICAgICBtaWRCb3guYWRkKGZpbGVQYW5lbCk7CisgICAgICAgIG1pZEJveC5hZGQoZGVmYXVsdFBhbmVsKTsKKyAgICAgICAgICAgIAorICAgICAgICBtaWRQYW5lbC5hZGQobWlkQm94LCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCisgICAgICAgIHRvcElubmVyUGFuZWwuYWRkKHNvdXJjZUxhYmVsLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKyAgICAgICAgdG9wSW5uZXJQYW5lbC5hZGQoZmlsZUNob29zZUJ1dHRvbiwgQm9yZGVyTGF5b3V0LkVBU1QpOworCQkKKyAgICAgICAgdG9wUGFuZWwuYWRkKHRpdGxlTGFiZWwsIEJvcmRlckxheW91dC5OT1JUSCk7CisgICAgICAgIHRvcFBhbmVsLmFkZCh0b3BJbm5lclBhbmVsLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCisgICAgICAgIGJvdFBhbmVsLmFkZChjYW5jZWxCdXR0b24pOworICAgICAgICBib3RQYW5lbC5hZGQoaW1wb3J0QnV0dG9uKTsKKwkJCisgICAgICAgIGdldENvbnRlbnRQYW5lKCkuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisgICAgICAgIGdldENvbnRlbnRQYW5lKCkuYWRkKHRvcFBhbmVsLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZChtaWRQYW5lbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisgICAgICAgIGdldENvbnRlbnRQYW5lKCkuYWRkKGJvdFBhbmVsLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQkKKyAgICAgICAgcGFjaygpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCB0aGlzV2luZG93Q2xvc2luZygpIHsKKyAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgIGRpc3Bvc2UoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSmF2YUV4cG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJKYXZhRXhwb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTY0OGZjCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSmF2YUV4cG9ydGVyLmphdmEKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZheC5zd2luZy5ib3JkZXIuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBBbiBleHBvcnRlciBwbHVnLWluIGNsYXNzIGZvciBSQk1hbmFnZXIuIFRoZSByZXNvdXJjZXMgZXhwb3J0ZWQgaGVyZSBjb25mb3JtIHRvCisgKiB0aGUgSmF2YSBzdGFuZGFyZCBmb3IgUmVzb3VyY2UgQnVuZGxlcyBhcyBzcGVjaWZpZWQgaW4gamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZS4KKyAqIFRoZSBvdXRwdXQgZmlsZXMgYXJlIGNvbXBpbGFibGUgamF2YSBmaWxlcyB0aGF0IGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGFueQorICogcGFja2FnZS4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJKYXZhRXhwb3J0ZXIgZXh0ZW5kcyBSQkV4cG9ydGVyIHsKKyAgICBwcml2YXRlIFN0cmluZyBwYWNrYWdlTmFtZSA9IG51bGw7CisgICAgcHJpdmF0ZSBib29sZWFuIHB1YmxpY0NsYXNzID0gdHJ1ZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gcHVibGljTWV0aG9kcyA9IHRydWU7CisJCisJCisgICAgcHVibGljIFJCSmF2YUV4cG9ydGVyKCkgeworICAgICAgICBzdXBlcigpOworCQkKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmlsZSBjaG9vc2VyIGlmIG5lY2Vzc2FyeQorICAgICAgICBpZiAoY2hvb3NlciA9PSBudWxsKSB7CisgICAgICAgICAgICBjaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOworICAgICAgICAgICAgY2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCl7CisgICAgICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJKYXZhIFNvdXJjZSBGaWxlcyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmLmdldE5hbWUoKS5lbmRzV2l0aCgiLmphdmEiKSAmJiBmLmdldE5hbWUoKS5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCQorICAgIHB1YmxpYyB2b2lkIGV4cG9ydChSQk1hbmFnZXIgcmJtKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAocmJtID09IG51bGwpIHJldHVybjsKKyAgICAgICAgLy8gT3BlbiB0aGUgYWRkaXRpb25hbCBEaWFsb2cKKyAgICAgICAgUkJKYXZhRXhwb3J0ZXJEaWFsb2cgcGFyYW1ldGVyc0RpYWxvZyA9IG5ldyBSQkphdmFFeHBvcnRlckRpYWxvZygpOworICAgICAgICBwYWNrYWdlTmFtZSA9IHBhcmFtZXRlcnNEaWFsb2cuZ2V0UGFja2FnZU5hbWUoKTsKKyAgICAgICAgcHVibGljQ2xhc3MgPSBwYXJhbWV0ZXJzRGlhbG9nLmlzQ2xhc3NQdWJsaWMoKTsKKyAgICAgICAgcHVibGljTWV0aG9kcyA9IHBhcmFtZXRlcnNEaWFsb2cuaXNNZXRob2RzUHVibGljKCk7CisJCQorICAgICAgICAvLyBPcGVuIHRoZSBTYXZlIERpYWxvZworICAgICAgICBpbnQgcmV0X3ZhbCA9IGNob29zZXIuc2hvd1NhdmVEaWFsb2cobnVsbCk7CisgICAgICAgIGlmIChyZXRfdmFsICE9IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgcmV0dXJuOworICAgICAgICAvLyBSZXRyaWV2ZSBiYXNpYyBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgIEZpbGUgZmlsZSA9IGNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7ICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpbGUocykgd2Ugd2lsbCBiZSB3b3JraW5nIHdpdGgKKyAgICAgICAgRmlsZSBkaXJlY3RvcnkgPSBuZXcgRmlsZShmaWxlLmdldFBhcmVudCgpKTsgICAgICAgICAgICAvLyBUaGUgZGlyZWN0b3J5IHdlIHdpbGwgYmUgd3JpdGluZyB0bworICAgICAgICBTdHJpbmcgYmFzZV9uYW1lID0gZmlsZS5nZXROYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGZpbGVzIHdlIHdpbGwgd3JpdGUKKyAgICAgICAgaWYgKGJhc2VfbmFtZSA9PSBudWxsIHx8IGJhc2VfbmFtZS5lcXVhbHMoIiIpKSBiYXNlX25hbWUgPSByYm0uZ2V0QmFzZUNsYXNzKCk7CisgICAgICAgIGlmIChiYXNlX25hbWUuZW5kc1dpdGgoIi5qYXZhIikpIGJhc2VfbmFtZSA9IGJhc2VfbmFtZS5zdWJzdHJpbmcoMCxiYXNlX25hbWUubGVuZ3RoKCktNSk7CisJCQorICAgICAgICBWZWN0b3IgYnVuZGxlX3YgPSByYm0uZ2V0QnVuZGxlcygpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVfdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlX3YuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgU3RyaW5nIGJhc2VfZW5jID0gYmFzZV9uYW1lOworICAgICAgICAgICAgaWYgKGJ1bmRsZS5lbmNvZGluZyAhPSBudWxsICYmICFidW5kbGUuZW5jb2RpbmcuZXF1YWxzKCIiKSkgYmFzZV9lbmMgPSBiYXNlX2VuYyArICJfIiArIGJ1bmRsZS5lbmNvZGluZzsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlX25hbWUgPSBiYXNlX2VuYyArICIuamF2YSI7CisJCQkKKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCIvKiBGaWxlOiAgICAiICsgZmlsZV9uYW1lICsgIlxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCIgKiBEYXRlOiAgICAiICsgKG5ldyBEYXRlKCkpICsgIlxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCIgKiBDb21tZW50OiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IFJCTWFuYWdlciIgKyAiXG4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIiAqL1xuXG4iKTsKKyAgICAgICAgICAgIGlmIChwYWNrYWdlTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgicGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiO1xuXG4iKTsKKyAgICAgICAgICAgIH0JCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJpbXBvcnQgamF2YS51dGlsLkxpc3RSZXNvdXJjZUJ1bmRsZTtcblxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChwdWJsaWNDbGFzcyA/ICJwdWJsaWMgIiA6ICJwcm90ZWN0ZWQgIikpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiY2xhc3MgIiArIGJhc2VfZW5jICsgIiBleHRlbmRzIExpc3RSZXNvdXJjZUJ1bmRsZSB7XG4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0IiArIChwdWJsaWNNZXRob2RzID8gInB1YmxpYyIgOiAicHJvdGVjdGVkIikgKyAiIE9iamVjdFtdW10gZ2V0Q29udGVudHMoKSB7XG4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0XHRyZXR1cm4gY29udGVudHM7XG4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0fVxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJcdHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdFtdW10gY29udGVudHMgPSB7XG4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0Ly8gTE9DQUxJWkUgVEhJU1xuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvciBncm91cF92ID0gYnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCBncm91cF92LnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApZ3JvdXBfdi5lbGVtZW50QXQoaik7CisgICAgICAgICAgICAgICAgVmVjdG9yIGl0ZW1fdiA9IGdyb3VwLmdldEl0ZW1zQXNWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrPTA7IGsgPCBpdGVtX3Yuc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlbV92LmVsZW1lbnRBdChrKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiXHRcdHtcIiIgKyBpdGVtLmdldEtleSgpICsgIlwiLCBcIiIgKyBpdGVtLmdldFRyYW5zbGF0aW9uKCkgKyAiXCJ9LFx0Ly8gIiArIGl0ZW0uZ2V0Q29tbWVudCgpICsgIlxuIik7CisgICAgICAgICAgICAgICAgfSAvLyBlbmQgZm9yIC0gaworICAgICAgICAgICAgfSAvLyBlbmQgZm9yIC0gagorICAgICAgICAgICAgCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJcdC8vIEVORCBPRiBNQVRFUklBTCBUTyBMT0NBTElaRVxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJcdH07XG4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIn0iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHRoZSBmaWxlCisgICAgICAgICAgICBGaWxlIHdyaXRlX2ZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnksIGZpbGVfbmFtZSk7CisgICAgICAgICAgICBGaWxlV3JpdGVyIHdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKHdyaXRlX2ZpbGUpOworICAgICAgICAgICAgd3JpdGVyLndyaXRlKGJ1ZmZlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHdyaXRlci5mbHVzaCgpOworICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCk7CisgICAgICAgIH0gLy8gZW5kIGZvciAtIGkKKyAgICB9Cit9CisKK2NsYXNzIFJCSmF2YUV4cG9ydGVyRGlhbG9nIGV4dGVuZHMgSkRpYWxvZyB7CisgICAgSkNoZWNrQm94IHBhY2thZ2VDaGVjazsKKyAgICBKUmFkaW9CdXR0b24gY2xhc3NQdWJsaWNSYWRpbzsKKyAgICBKUmFkaW9CdXR0b24gY2xhc3NQcm90ZWN0ZWRSYWRpbzsKKyAgICBKUmFkaW9CdXR0b24gbWV0aG9kc1B1YmxpY1JhZGlvOworICAgIEpSYWRpb0J1dHRvbiBtZXRob2RzUHJvdGVjdGVkUmFkaW87CisgICAgSlRleHRGaWVsZCBwYWNrYWdlRmllbGQ7CisJCisgICAgcHVibGljIFJCSmF2YUV4cG9ydGVyRGlhbG9nKCkgeworICAgICAgICBzdXBlcihuZXcgSkZyYW1lKCksIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2V4cG9ydF9qYXZhX29wdGlvbnMiKSwgdHJ1ZSk7CisgICAgICAgIGluaXRDb21wb25lbnRzKCk7CisgICAgfQorCQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoKSB7CisgICAgICAgIGlmICghKHBhY2thZ2VDaGVjay5pc1NlbGVjdGVkKCkpKSByZXR1cm4gbnVsbDsKKyAgICAgICAgU3RyaW5nIHJldFZhbCA9IHBhY2thZ2VGaWVsZC5nZXRUZXh0KCk7CisgICAgICAgIGlmIChyZXRWYWwgPT0gbnVsbCB8fCByZXRWYWwudHJpbSgpLmVxdWFscygiIikpIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gcmV0VmFsLnRyaW0oKTsKKyAgICB9CisJCisgICAgcHVibGljIGJvb2xlYW4gaXNDbGFzc1B1YmxpYygpIHsJCisgICAgICAgIHJldHVybiBjbGFzc1B1YmxpY1JhZGlvLmlzU2VsZWN0ZWQoKTsJCisgICAgfQorICAgIAorICAgIHB1YmxpYyBib29sZWFuIGlzTWV0aG9kc1B1YmxpYygpIHsKKyAgICAgICAgcmV0dXJuIG1ldGhvZHNQdWJsaWNSYWRpby5pc1NlbGVjdGVkKCk7CisgICAgfQorCQorICAgIHByaXZhdGUgdm9pZCBoYW5kbGVDbG9zZSgpIHsKKyAgICAgICAgc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgIGRpc3Bvc2UoKTsKKyAgICB9CisJCisgICAgcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCkgeworICAgICAgICBnZXRDb250ZW50UGFuZSgpLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworICAgICAgICBnZXRDb250ZW50UGFuZSgpLnJlbW92ZUFsbCgpOworCQkKKyAgICAgICAgcGFja2FnZUNoZWNrID0gbmV3IEpDaGVja0JveChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImV4cG9ydF9qYXZhX3BhY2thZ2UiKSwgZmFsc2UpOworICAgICAgICBjbGFzc1B1YmxpY1JhZGlvID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImV4cG9ydF9qYXZhX2NsYXNzX3B1YmxpYyIpLCB0cnVlKTsKKyAgICAgICAgY2xhc3NQcm90ZWN0ZWRSYWRpbyA9IG5ldyBKUmFkaW9CdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJleHBvcnRfamF2YV9jbGFzc19wcm90ZWN0ZWQiKSwgZmFsc2UpOworICAgICAgICBtZXRob2RzUHVibGljUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXhwb3J0X2phdmFfY2xhc3NfcHVibGljIiksIHRydWUpOworICAgICAgICBtZXRob2RzUHJvdGVjdGVkUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXhwb3J0X2phdmFfY2xhc3NfcHJvdGVjdGVkIiksIGZhbHNlKTsKKyAgICAgICAgcGFja2FnZUZpZWxkID0gbmV3IEpUZXh0RmllbGQoKTsKKyAgICAgICAgcGFja2FnZUZpZWxkLnNldENvbHVtbnMoMzApOworCQkKKyAgICAgICAgSkJ1dHRvbiBva0J1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiT0siKSk7CisgICAgICAgIEpMYWJlbCB0aXRsZUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImV4cG9ydF9qYXZhX3RpdGxlIiksIFN3aW5nQ29uc3RhbnRzLkxFRlQpOworCQkKKyAgICAgICAgSlBhbmVsIG9rUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisgICAgICAgIG9rUGFuZWwuYWRkKG9rQnV0dG9uKTsKKyAgICAgICAgSlBhbmVsIGNlbnRlclBhbmVsID0gbmV3IEpQYW5lbChuZXcgR3JpZExheW91dCgxLDEpKTsKKyAgICAgICAgY2VudGVyUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlQmV2ZWxCb3JkZXIoQmV2ZWxCb3JkZXIuUkFJU0VEKSk7CisgICAgICAgIEJveCBjZW50ZXJCb3ggPSBCb3guY3JlYXRlVmVydGljYWxCb3goKTsKKyAgICAgICAgQm94IHBhY2thZ2VCb3ggPSBCb3guY3JlYXRlSG9yaXpvbnRhbEJveCgpOworICAgICAgICBwYWNrYWdlQm94LmFkZChwYWNrYWdlQ2hlY2spOworICAgICAgICBwYWNrYWdlQm94LmFkZChwYWNrYWdlRmllbGQpOworICAgICAgICBjZW50ZXJCb3guYWRkKHBhY2thZ2VCb3gpOworICAgICAgICBjZW50ZXJCb3guYWRkKG5ldyBKU2VwYXJhdG9yKCkpOworICAgICAgICBjZW50ZXJCb3guYWRkKGNsYXNzUHVibGljUmFkaW8pOworICAgICAgICBjZW50ZXJCb3guYWRkKGNsYXNzUHJvdGVjdGVkUmFkaW8pOworICAgICAgICBjZW50ZXJCb3guYWRkKG5ldyBKU2VwYXJhdG9yKCkpOworICAgICAgICBjZW50ZXJCb3guYWRkKG1ldGhvZHNQdWJsaWNSYWRpbyk7CisgICAgICAgIGNlbnRlckJveC5hZGQobWV0aG9kc1Byb3RlY3RlZFJhZGlvKTsKKyAgICAgICAgY2VudGVyUGFuZWwuYWRkKGNlbnRlckJveCk7CisJCQorICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZCh0aXRsZUxhYmVsLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZChva1BhbmVsLCBCb3JkZXJMYXlvdXQuU09VVEgpOworICAgICAgICBnZXRDb250ZW50UGFuZSgpLmFkZChjZW50ZXJQYW5lbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQorICAgICAgICBva0J1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCQkKKyAgICAgICAgQnV0dG9uR3JvdXAgY2xhc3NHcm91cCA9IG5ldyBCdXR0b25Hcm91cCgpOworICAgICAgICBCdXR0b25Hcm91cCBtZXRob2RzR3JvdXAgPSBuZXcgQnV0dG9uR3JvdXAoKTsKKyAgICAgICAgY2xhc3NHcm91cC5hZGQoY2xhc3NQdWJsaWNSYWRpbyk7CisgICAgICAgIGNsYXNzR3JvdXAuYWRkKGNsYXNzUHJvdGVjdGVkUmFkaW8pOworICAgICAgICBtZXRob2RzR3JvdXAuYWRkKG1ldGhvZHNQdWJsaWNSYWRpbyk7CisgICAgICAgIG1ldGhvZHNHcm91cC5hZGQobWV0aG9kc1Byb3RlY3RlZFJhZGlvKTsKKwkJCisgICAgICAgIC8vdmFsaWRhdGVUcmVlKCk7CisgICAgICAgIHBhY2soKTsKKyAgICAgICAgLy9zZXRMb2NhdGlvbihuZXcgUG9pbnQoMjUsMjUpKTsKKyAgICAgICAgc2V0VmlzaWJsZSh0cnVlKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSmF2YUltcG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJKYXZhSW1wb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjJmZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCSmF2YUltcG9ydGVyLmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCisKK2ltcG9ydCBqYXZhLmlvLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS5ndWkuUkJNYW5hZ2VyR1VJOworCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS5uZXQuKjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBzdXBlciBjbGFzcyBmb3IgYWxsIGltcG9ydGVyIHBsdWctaW4gY2xhc3Nlcy4gQXMgb2YgeWV0LCB0aGVyZQorICogaXMgbGl0dGxlIGNvbnRhaW5lZCBpbiB0aGlzIGNsYXNzLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQkphdmFJbXBvcnRlciBleHRlbmRzIFJCSW1wb3J0ZXIgeworCQorICAgIHB1YmxpYyBSQkphdmFJbXBvcnRlcihTdHJpbmcgdGl0bGUsIFJCTWFuYWdlciByYm0sIFJCTWFuYWdlckdVSSBndWkpIHsKKyAgICAgICAgc3VwZXIodGl0bGUsIHJibSwgZ3VpKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXBGaWxlQ2hvb3NlcigpIHsKKyAgICAgICAgY2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCl7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGYuZ2V0TmFtZSgpLmVuZHNXaXRoKCIuY2xhc3MiKSAmJiBmLmdldE5hbWUoKS5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisJCQkKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X2phdmFfZmlsZV9kZXNjcmlwdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgYmVnaW5JbXBvcnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBzdXBlci5iZWdpbkltcG9ydCgpOworICAgICAgICBMaXN0UmVzb3VyY2VCdW5kbGUgYmFzZV9scmIgPSBudWxsOworICAgICAgICBVUkxDbGFzc0xvYWRlciB1cmxMb2FkZXIgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgRmlsZSBiYXNlRmlsZSA9IGdldENob3NlbkZpbGUoKTsKKyAgICAgICAgICAgIFVSTCBiYXNlVVJMID0gYmFzZUZpbGUudG9VUkwoKTsKKyAgICAgICAgICAgIFVSTCB1cmxzW10gPSBuZXcgVVJMWzFdOworICAgICAgICAgICAgdXJsc1swXSA9IGJhc2VVUkw7CisgICAgICAgICAgICB1cmxMb2FkZXIgPSBuZXcgVVJMQ2xhc3NMb2FkZXIodXJscyk7CisgICAgICAgICAgICBTdHJpbmcgYmFzZU5hbWUgPSBiYXNlRmlsZS5nZXROYW1lKCk7CisgICAgICAgICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lLnN1YnN0cmluZygwLCBiYXNlTmFtZS5pbmRleE9mKCIuY2xhc3MiKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENsYXNzIGJhc2VDbGFzcyA9IHVybExvYWRlci5sb2FkQ2xhc3MoYmFzZU5hbWUpOworICAgICAgICAgICAgYmFzZV9scmIgPSAoTGlzdFJlc291cmNlQnVuZGxlKWJhc2VDbGFzcy5uZXdJbnN0YW5jZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBSQk1hbmFnZXJHVUkuZGVidWdNc2coZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2VfbHJiICE9IG51bGwpIHsKKyAgICAgICAgICAgIEVudW1lcmF0aW9uIGtleXMgPSBiYXNlX2xyYi5nZXRLZXlzKCk7CisgICAgICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBrZXlzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBSQk1hbmFnZXJHVUkuZGVidWdNc2coIlJlc291cmNlIC0+ICIgKyBrZXkgKyAiID0gIiArIGJhc2VfbHJiLmdldFN0cmluZyhrZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworLyoKK2NsYXNzIG15Q2xhc3NMb2FkZXIgZXh0ZW5kcyBDbGFzc0xvYWRlciB7CisgICAgcHVibGljIG15Q2xhc3NMb2FkZXIoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCQorICAgIHB1YmxpYyBDbGFzcyBteURlZmluZUNsYXNzKFN0cmluZyBuYW1lLCBieXRlIGFycmF5W10sIGludCBvZmYsIGludCBsZW4pIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmRlZmluZUNsYXNzKG5hbWUsIGFycmF5LCBvZmYsIGxlbik7CisgICAgfQorfQorKi8KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQk1hbmFnZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQk1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTA3YTcwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCTWFuYWdlci5qYXZhCkBAIC0wLDAgKzEsOTQ2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YXguc3dpbmcuVUlNYW5hZ2VyOworaW1wb3J0IGphdmF4LnN3aW5nLkpPcHRpb25QYW5lOworCitpbXBvcnQgY29tLmlibS5yYm0uZ3VpLlJCTWFuYWdlckdVSTsKKworLyoqCisgKiBBIHV0aWxpdHkgY2xhc3MgdG8gYWlkIGluIHRoZSBwcm9jZXNzIG9mIHVwZGF0aW5nIHRoZSBOYXR1cmFsIExhbmd1YWdlIFN1cHBvcnQgb2YgVGVtcHVzIEZ1Z2l0LgorICogVGhpcyBjbGFzcyBzY2FucyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgTkxTIGZpbGVzIGFuZCBjaGVja3MgdGhlIHZhcmlvdXMgbGFuZ3VhZ2VzIGZvdW5kIHRoZXJlCisgKiBmb3IgY29tcGxldGVuZXNzLCBkdXBsaWNhdGlvbiBvZiBlbnRyeSwgYW5kIHN0YXR1cyBvZiB0cmFuc2xhdGlvbi4gVGhlIGNsYXNzIGNhbiBiZSBpbnN0YW50aWF0ZWQKKyAqIHRocm91Z2ggYSBjb25zdHJ1Y3Rvciwgb3IgaXQgY2FuIGJlIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZQorICogY29tbWFuZCBsaW5lIHJlc3VsdHMsIHNlZSB0aGUgPENPREU+bWFpbjwvQ09ERT4gbWV0aG9kLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQk1hbmFnZXIgeworCQorICAgIC8vICoqKiBEQVRBICoqKgorICAgIHByaXZhdGUgVmVjdG9yIGFsbEJ1bmRsZUtleXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgVmVjdG9yIG9mIFN0cmluZ3Mgd2l0aCBhbGwgZGVmaW5lZCBOTFMgcHJvcGVydGllcworICAgIHByaXZhdGUgVmVjdG9yIGJ1bmRsZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIFZlY3RvciBvZiBOTFNidW5kbGVzLCBvbmUgZm9yIGVhY2ggbGFuZ3VhZ2UKKyAgICBwcml2YXRlIFN0cmluZyBjdXJyZW50VXNlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIGN1cnJlbnRseSB1c2luZyB0aGUgZWRpdG9yCisgICAgcHJpdmF0ZSBTdHJpbmcgYmFzZUNsYXNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGJhc2UgY2xhc3Mgb2YgdGhlIGFjdGl2ZSByZXNvdXJjZSBidW5kbGUKKyAgICBwcml2YXRlIEZpbGUgICBjdXJyZW50RGlyZWN0b3J5OworCQorICAgIC8vICoqKiBDT05TVFJVQ1RPUlMgKioqCisJCisgICAgLy8gVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaXMgbm90IHB1YmxpY2x5IGF2YWlsYWJsZQorICAgIHByaXZhdGUgUkJNYW5hZ2VyKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gTG9vayBhbmQgRmVlbCBjaGVjaworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbGFmID0gUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgibG9va2FuZGZlZWwiKTsKKyAgICAgICAgICAgICAgICBpZiAoIWxhZi5lcXVhbHMoIiIpKSBVSU1hbmFnZXIuc2V0TG9va0FuZEZlZWwobGFmKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IAorICAgICAgICAgICAgICAgIC8vIElnbm9yZWQKKyAgICAgICAgICAgIH0KKwkJCQorICAgICAgICAgICAgUmVzb3VyY2VzLmluaXRCdW5kbGUoKTsKKyAgICAgICAgICAgIFJCTWFuYWdlckdVSSBndWlGcmFtZSA9IG5ldyBSQk1hbmFnZXJHVUkoKTsKKyAgICAgICAgICAgIGlmICghUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgidXNlcm5hbWUiKS5lcXVhbHMoIiIpKQorICAgICAgICAgICAgICAgIGd1aUZyYW1lLnNldFVzZXIoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgidXNlcm5hbWUiKSk7CisgICAgICAgICAgICBpZiAoIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoImxvY2FsZSIpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYWxlU3RyID0gUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgibG9jYWxlIik7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gUmVzb3VyY2VzLmdldExhbmd1YWdlKGxvY2FsZVN0cik7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNvdW50cnkgPSBSZXNvdXJjZXMuZ2V0Q291bnRyeShsb2NhbGVTdHIpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50ID0gUmVzb3VyY2VzLmdldFZhcmlhbnQobG9jYWxlU3RyKTsKKyAgICAgICAgICAgICAgICBpZiAobGFuZ3VhZ2UgPT0gbnVsbCB8fCBsYW5ndWFnZS5lcXVhbHMoIiIpIHx8IGxhbmd1YWdlLmxlbmd0aCgpID4gMykgbGFuZ3VhZ2UgPSAiZW4iOworICAgICAgICAgICAgICAgIGlmIChjb3VudHJ5ID09IG51bGwpIGNvdW50cnkgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQgPT0gbnVsbCkgUmVzb3VyY2VzLnNldExvY2FsZShuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5KSk7CisgICAgICAgICAgICAgICAgZWxzZSBSZXNvdXJjZXMuc2V0TG9jYWxlKG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJlc291cmNlcy5pbml0QnVuZGxlKCk7CisgICAgICAgICAgICBndWlGcmFtZS5pbml0Q29tcG9uZW50cygpOworICAgICAgICAgICAgZ3VpRnJhbWUuc2V0VmlzaWJsZSh0cnVlKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIGFuIGVudGlyZWx5IGJsYW5rIFJCTWFuYWdlciBhbmQgYmFzZSBCdW5kbGUuIE9ubHkgdGhlIGJhc2UgY2xhc3MgbmFtZSBpcyBkZWZpbmVkLgorICAgICAqIEFsbCBvdGhlciBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgZGVmaW5lZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgUkJNYW5hZ2VyKFN0cmluZyBiYXNlQ2xhc3NOYW1lKSB7CisgICAgICAgIGFsbEJ1bmRsZUtleXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIGJ1bmRsZXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIGN1cnJlbnRVc2VyID0gIlVua25vd24iOworICAgICAgICBiYXNlQ2xhc3MgPSBiYXNlQ2xhc3NOYW1lOworICAgICAgICBjdXJyZW50RGlyZWN0b3J5ID0gbmV3IEZpbGUoIiIpOworCQkKKyAgICAgICAgQnVuZGxlIG1haW5CdW5kbGUgPSBuZXcgQnVuZGxlKCIiKTsKKyAgICAgICAgLy8gQ3JlYXRlIGEgZGVmYXVsdCBncm91cAorICAgICAgICBtYWluQnVuZGxlLmFkZEJ1bmRsZUdyb3VwKCJVbmdyb3VwZWQgSXRlbXMiLCAiVGhlc2UgYXJlIHJlc291cmNlIGl0ZW1zIHRoYXQgaGF2ZSBub3QgYmVlbiBhc3NpZ25lZCBhIGdyb3VwIik7CisgICAgICAgIGJ1bmRsZXMuYWRkRWxlbWVudChtYWluQnVuZGxlKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgY29uc3RydWN0b3IgZm9yIFJCTWFuYWdlci4gSXQgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgcm9vdCBvZiBhIHJlc291cmNlIGJ1bmRsZS4KKyAgICAgKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgZWFjaCBmaWxlIGlzIHBhcnNlZCBzZXBhcmF0ZWx5IHN0YXJ0aW5nIHdpdGggdGhlIGJhc2UgY2xhc3MgZmlsZSAocm9vdCkuCisgICAgICogSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvb2t1cCBrZXlzIGFyZSByZXByZXNlbnRlZCB0byB0aGUgdXNlciBhcyB0aGV5IGFwcGVhciBpbiB0aGUgZmlsZXMuIFRoZQorICAgICAqIHRyYW5zbGF0aW9uIHZhbHVlcyBob3dldmVyIGFyZSB0cmFuc2xhdGVkIGFjY29yZGluZyB0byB0aGUgYmFzaWMgcnVsZXMgZGVmaW5lZCBpbiBqYXZhLnV0aWwuUHJvcGVydGllcy4KKyAgICAgKiBUaHVzIGluIHRoZSBrZXksIHRoZSB1c2VyIG1heSBzZWUgJ1wiJyB3aGVuIGluIHRoZSB2YWx1ZSBpdCB3b3VsZCBoYXZlIGJlZW4gY29udmVydGVkIHRvICciJy4gVGhpcworICAgICAqIHRyYW5zbGF0aW9uIGlzIHJldmVyc2VkIHdoZW4gc2F2aW5nIHRoZSByZXNvdXJjZSBidW5kbGUuCisgICAgICogQHBhcmFtIG1haW5GaWxlIFRoZSBiYXNlIGNsYXNzIGZpbGUgb2YgdGhlIHJlc291cmNlIGJ1bmRsZSB0byBiZSByZWFkCisgICAgICovCisJCisgICAgcHVibGljIFJCTWFuYWdlcihGaWxlIG1haW5GaWxlKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGluaXQoKTsKKwkJCisgICAgICAgIGN1cnJlbnREaXJlY3RvcnkgPSBuZXcgRmlsZShtYWluRmlsZS5nZXRQYXJlbnQoKSk7CisJCQorICAgICAgICBTdHJpbmdbXSBlbmNvZGluZ3M7CisJCQorICAgICAgICAvLyBJbml0aWFpbGl6ZSB0aGUgcmVhZGVycyB0byB0aGUgbWFpbiBOTFMgZmlsZQorICAgICAgICBGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIobWFpbkZpbGUpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmcik7CisJCQorICAgICAgICAvLyBMb2FkIHRoZSBqYXZhIHJlYWRhYmxlIHZhbHVlcyBmcm9tIHRoZSBtYWluIE5MUyBmaWxlOworICAgICAgICBQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgICBwLmxvYWQobmV3IEZpbGVJbnB1dFN0cmVhbShtYWluRmlsZSkpOworCQkKKyAgICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBsYW5ndWFnZSBmaWxlcyBhbmQgc2V0IHVwIHRoZSBlbmNvZGluZyBhbmQgZGljdGlvbmFyeSBkYXRhCisgICAgICAgIGludCBudW1MYW5ndWFnZXMgPSAxOworICAgICAgICBTdHJpbmcgTkxTYmFzZUNsYXNzID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIE5MU3Bvc3RmaXggICA9IG51bGw7CisJCQorICAgICAgICBpZiAobWFpbkZpbGUuZ2V0TmFtZSgpLmluZGV4T2YoIi4iKSA+PSAwKSB7CisgICAgICAgICAgICBOTFNiYXNlQ2xhc3MgPSBtYWluRmlsZS5nZXROYW1lKCkuc3Vic3RyaW5nKDAsbWFpbkZpbGUuZ2V0TmFtZSgpLmluZGV4T2YoIi4iKSk7CisgICAgICAgICAgICBOTFNwb3N0Zml4ID0gIi5wcm9wZXJ0aWVzIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5MU2Jhc2VDbGFzcyA9IG1haW5GaWxlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIE5MU3Bvc3RmaXggPSAiIjsKKyAgICAgICAgfQorCQkKKyAgICAgICAgYmFzZUNsYXNzID0gTkxTYmFzZUNsYXNzOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGZpbGVQcmVmaXggPSBtYWluRmlsZS5nZXROYW1lKCkuc3Vic3RyaW5nKDAsbWFpbkZpbGUuZ2V0TmFtZSgpLmxhc3RJbmRleE9mKCIuIikpOworICAgICAgICBTdHJpbmcgZmlsZVBvc3RmaXggPSBtYWluRmlsZS5nZXROYW1lKCkuc3Vic3RyaW5nKG1haW5GaWxlLmdldE5hbWUoKS5sYXN0SW5kZXhPZigiLiIpLG1haW5GaWxlLmdldE5hbWUoKS5sZW5ndGgoKSk7CisgICAgICAgIEZpbGUgcmVzRGlyID0gY3VycmVudERpcmVjdG9yeTsKKyAgICAgICAgaWYgKHJlc0RpciAhPSBudWxsICYmIHJlc0Rpci5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgICAgICBTdHJpbmdbXSB0ZW1wID0gcmVzRGlyLmxpc3QoKTsKKyAgICAgICAgICAgIG51bUxhbmd1YWdlcyA9IDA7CisgICAgICAgICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIGxhbmd1YWdlIGZpbGVzCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlbXAubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAodGVtcFtpXS5zdGFydHNXaXRoKE5MU2Jhc2VDbGFzcykgJiYgKHRlbXBbaV0uZW5kc1dpdGgoTkxTcG9zdGZpeCkgCisgICAgICAgICAgICAgICAgICAgIHx8IHRlbXBbaV0uZW5kc1dpdGgoTkxTcG9zdGZpeC50b1VwcGVyQ2FzZSgpKSB8fCBOTFNwb3N0Zml4LmVxdWFscygiIikpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIHRoZSBiYXNlIGNsYXNzIG5hbWUgYW5kIGVuZHMgaW4gcHJvcGVyIHN1ZmZpeCAoYWJvdmUpCisgICAgICAgICAgICAgICAgICAgIC8vIEJhc2UgbmFtZSBpcyBmb2xsb3dlZCBieSAuIG9yIF8gKGJlbG93KQorICAgICAgICAgICAgICAgICAgICBSQk1hbmFnZXJHVUkuZGVidWdNc2coIkNoYXJhY3RlciBpczogIiArIHRlbXBbaV0uY2hhckF0KE5MU2Jhc2VDbGFzcy5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGVtcFtpXS5jaGFyQXQoTkxTYmFzZUNsYXNzLmxlbmd0aCgpKSA9PSAnLicgfHwgdGVtcFtpXS5jaGFyQXQoTkxTYmFzZUNsYXNzLmxlbmd0aCgpKSA9PSAnXycpCisgICAgICAgICAgICAgICAgICAgICAgICBudW1MYW5ndWFnZXMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBidW5kbGVzIGFuZCBlbmNvZGluZ3MKKyAgICAgICAgICAgIGVuY29kaW5ncyA9IG5ldyBTdHJpbmdbbnVtTGFuZ3VhZ2VzXTsKKwkJCQorICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVtcC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wW2ldLmVxdWFscyhtYWluRmlsZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nc1swXSA9ICIiOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVtcFtpXS5zdGFydHNXaXRoKE5MU2Jhc2VDbGFzcykgJiYgKHRlbXBbaV0uZW5kc1dpdGgoTkxTcG9zdGZpeCkgCisgICAgICAgICAgICAgICAgICAgIHx8IHRlbXBbaV0uZW5kc1dpdGgoTkxTcG9zdGZpeC50b1VwcGVyQ2FzZSgpKSB8fCBOTFNwb3N0Zml4LmVxdWFscygiIikpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wW2ldLmNoYXJBdChOTFNiYXNlQ2xhc3MubGVuZ3RoKCkpID09ICcuJyB8fCB0ZW1wW2ldLmNoYXJBdChOTFNiYXNlQ2xhc3MubGVuZ3RoKCkpID09ICdfJykgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdzW2NvdW50XSA9IG5ldyBTdHJpbmcodGVtcFtpXS5zdWJzdHJpbmcoZmlsZVByZWZpeC5sZW5ndGgoKSsxLHRlbXBbaV0uaW5kZXhPZihmaWxlUG9zdGZpeCkpKTsJCQkJCQkJY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGJ1bmRsZXMgYW5kIGVuY29kaW5ncyBpbiBjYXNlIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZQorICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBvbmx5IHRoZSBtYWluIE5MUyBmaWxlIHdpbGwgYmUgaGFuZGxlZAorICAgICAgICAgICAgZW5jb2RpbmdzID0gbmV3IFN0cmluZ1tudW1MYW5ndWFnZXNdOworICAgICAgICAgICAgZW5jb2RpbmdzWzBdID0gbmV3IFN0cmluZygiIik7CisgICAgICAgIH0gLy8gZW5kIHRoZSBjb3VudCBhbmQgaW5pdGlhbGl6YXRpb24KKwkJCisgICAgICAgIC8vIFJlYWQgaW4gdGhlIGVudHJpZXMgZnJvbSB0aGUgbWFpbiBmaWxlCisgICAgICAgIFN0cmluZyBsaW5lOworICAgICAgICAvLyBTZXQgdGhlIGRpY3Rpb25hcnkgZm9yIHRoZSBtYWluIGZpbGUKKyAgICAgICAgQnVuZGxlIGRpY3QgPSBuZXcgQnVuZGxlKGVuY29kaW5nc1swXSk7CisgICAgICAgIGJ1bmRsZXMuYWRkRWxlbWVudChkaWN0KTsKKyAgICAgICAgLy8gU2V0IHVwIHRoZSBmaXJzdCBncm91cCBpbiBjYXNlIHRoZXJlIGFyZSBOTFMgaXRlbXMgd2hpY2ggd2VyZSBub3QgYXNzaWduZWQgdG8gYSBncm91cAorICAgICAgICBCdW5kbGVHcm91cCBncm91cCA9IG5ldyBCdW5kbGVHcm91cChkaWN0LCAiVW5ncm91cGVkIEl0ZW1zIik7CisgICAgICAgIGdyb3VwLnNldENvbW1lbnQoIk5MUyBJdGVtcyB3aGljaCB3ZXJlIG5vdCBpbml0aWFsbHkgYXNzaWduZWQgdG8gYSBncm91cCIpOworICAgICAgICBkaWN0LmFkZEJ1bmRsZUdyb3VwKGdyb3VwKTsKKyAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gbmV3IEJ1bmRsZUl0ZW0oZ3JvdXAsbnVsbCxudWxsKTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gVGVzdCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhIGZpbGUgdGhhdCB3YXMgZ2VuZXJhdGVkIGJ5IFJCTWFuYWdlcgorICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5lcXVhbHMoIiIpKSBjb3VudCsrOworICAgICAgICAgICAgaWYgKGNvdW50ID09IDEgJiYgIWxpbmUuc3RhcnRzV2l0aCgiIyBAZmlsZSIpKSB7CisgICAgICAgICAgICAgICAgLy8gTm90IGdlbmVyYXRlZCBieSBSQk1hbmFnZXIKKyAgICAgICAgICAgICAgICBKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhudWxsLAorICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX25vdF9yYm1hbmFnZXJfZm9ybWF0IikgKyAiXG4iICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9zdWdnZXN0X2ltcG9ydF9wcm9wZXJ0aWVzIiksCisgICAgICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2Vycm9yX25vdF9yYm1hbmFnZXJfZm9ybWF0IiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkltcHJvcGVyIGZvcm1hdCBmb3IgZmlsZTogIiArIG1haW5GaWxlLmdldE5hbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgY29tbWVudExpbmUgPSBudWxsOworICAgICAgICAgICAgLy8gR3JhYiB0ZXh0IGZvbGxvd2luZyB0aGUgIyBzaWduCisgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCIjIikgPj0gMCkgeworICAgICAgICAgICAgICAgIGNvbW1lbnRMaW5lID0gbGluZS5zdWJzdHJpbmcobGluZS5pbmRleE9mKCIjIikrMSxsaW5lLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCxsaW5lLmluZGV4T2YoIiMiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29tbWVudExpbmUgIT0gbnVsbCAmJiBjb21tZW50TGluZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBhbnkgaW5mb3JtYXRpb24gbWFkZSBhdmFpbGFibGUgaW4gY29tbWVudCAnQCcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICBIYXNodGFibGUgZGVzY3JpcHRvcnMgPSBnZXREZXNjcmlwdG9ycyhudWxsLGNvbW1lbnRMaW5lKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBPYmplY3QgbzsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSB0YWdzCisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGUiKTsgaWYgKG8gIT0gbnVsbCkgZGljdC5uYW1lID0gKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlQ29tbWVudCIpOyAgaWYgKG8gIT0gbnVsbCkgZGljdC5jb21tZW50ICA9ICgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZUxhbmd1YWdlIik7IGlmIChvICE9IG51bGwpIGRpY3QubGFuZ3VhZ2UgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGVDb3VudHJ5Iik7ICBpZiAobyAhPSBudWxsKSBkaWN0LmNvdW50cnkgID0gKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlVmFyaWFudCIpOyAgaWYgKG8gIT0gbnVsbCkgZGljdC52YXJpYW50ICA9ICgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZU1hbmFnZXIiKTsgIGlmIChvICE9IG51bGwpIGRpY3QubWFuYWdlciAgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBHcm91cCB0YWdzCisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImdyb3VwIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gbmV3IEJ1bmRsZUdyb3VwKGRpY3QsIChTdHJpbmcpbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudEdyb3VwKGdyb3VwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QuYWRkQnVuZGxlR3JvdXAoZ3JvdXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImdyb3VwQ29tbWVudCIpOyBpZiAobyAhPSBudWxsKSBncm91cC5zZXRDb21tZW50KChTdHJpbmcpIG8pOworCQkJCQkKKyAgICAgICAgICAgICAgICAgICAgLy8gSXRlbSB0YWdzCisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImNvbW1lbnQiKTsgICAgaWYgKG8gIT0gbnVsbCkgaXRlbS5zZXRDb21tZW50KChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJ0cmFuc2xhdGVkIik7IGlmIChvICE9IG51bGwpIGl0ZW0uc2V0VHJhbnNsYXRlZCgoKFN0cmluZykgbykuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiY3JlYXRvciIpOyAgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldENyZWF0b3IoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoIm1vZGlmaWVyIik7ICAgaWYgKG8gIT0gbnVsbCkgaXRlbS5zZXRNb2RpZmllcigoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiY3JlYXRlZCIpOyAgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldENyZWF0ZWREYXRlKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJtb2RpZmllZCIpOyAgIGlmIChvICE9IG51bGwpIGl0ZW0uc2V0TW9kaWZpZWREYXRlKChTdHJpbmcpIG8pOworCQkJCQkKKyAgICAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRhZ3MgKGUuZy4ge18jX30gX2Rlc2NyaXB0aW9uXykKKyAgICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9IGRlc2NyaXB0b3JzLmtleXMoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YWcgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnRzV2l0aCgieyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZy5pbmRleE9mKCJ9IikgPCAwKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9va3VwID0gdGFnLnN1YnN0cmluZygxLHRhZy5pbmRleE9mKCJ9IikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0TG9va3VwcygpLnB1dChsb29rdXAsIGRlc2NyaXB0b3JzLmdldCh0YWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9IC8vIGVuZCBjaGVjayBvZiBjb21tZW50IGxpbmUKKyAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKS5sZW5ndGgoKSA8IDEpIGNvbnRpbnVlOworCQkJCisgICAgICAgICAgICAvLyBHcmFiIHRoZSBuYW1lIGFuZCB2YWx1ZSAodHJhbnNsYXRpb24pIGZyb20gdGhlIGxpbmUKKyAgICAgICAgICAgIGludCBicmVha3BvaW50ID0gMDsKKyAgICAgICAgICAgIGJvb2xlYW4gc3RhcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgY2hhciBhcnJheVtdID0gbGluZS50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0ZWQgJiYgYXJyYXlbaV0gIT0gJyAnICYmIGFycmF5W2ldICE9ICdcdCcpIHN0YXJ0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChzdGFydGVkICYmIChhcnJheVtpXSA9PSAnPScgfHwgYXJyYXlbaV0gPT0gJzonIHx8IGFycmF5W2ldID09ICcgJyB8fCBhcnJheVtpXSA9PSAnXHQnKSkgeworICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGtleSA9IFN0cmluZy52YWx1ZU9mKGFycmF5LDAsYnJlYWtwb2ludCk7CisJCQkKKyAgICAgICAgICAgIGl0ZW0uc2V0S2V5KGtleSk7CisgICAgICAgICAgICBTdHJpbmcgdHJhbnNsYXRpb24gPSBwLmdldFByb3BlcnR5KGtleSk7CisgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24gPT0gbnVsbCB8fCB0cmFuc2xhdGlvbi5lcXVhbHMoIiIpKQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VHJhbnNsYXRpb24obGluZS5zdWJzdHJpbmcobGluZS5pbmRleE9mKCI9IikrMSxsaW5lLmxlbmd0aCgpKS50cmltKCkpOworICAgICAgICAgICAgZWxzZSBpdGVtLnNldFRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uKTsKKwkJCQorICAgICAgICAgICAgZGljdC5hZGRCdW5kbGVJdGVtKGl0ZW0pOworICAgICAgICAgICAgaXRlbSA9IG5ldyBCdW5kbGVJdGVtKGdyb3VwLG51bGwsbnVsbCk7CisgICAgICAgIH0gLy8gZW5kIHdoaWxlIC0gbWFpbiBOTFMgZmlsZQorCQkKKyAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBwYXJzZWQgdGhlIGVudGlyZSBtYWluIGxhbmd1YWdlIGZpbGUsIHBvcHVsYXRlIHRoZSBhbGxOTFNLZXkgc2V0IHdpdGggdGhlIGRpY3Rpb25hcnkga2V5cworICAgICAgICBhbGxCdW5kbGVLZXlzID0gbmV3IFZlY3RvcigpOworICAgICAgICBFbnVtZXJhdGlvbiBrZXlzID0gKChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoMCkpLmFsbEl0ZW1zLmtleXMoKTsKKyAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGFsbEJ1bmRsZUtleXMuYWRkRWxlbWVudChrZXlzLm5leHRFbGVtZW50KCkpOworICAgICAgICB9CisJCQorICAgICAgICAvLyBOb3cgZ28gdGhyb3VnaCBhbGwgb2YgdGhlIG90aGVyIGxhbmd1YWdlcworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGVuY29kaW5ncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGVuY29kaW5nc1tpXS5lcXVhbHMoImtyIikpIGNvbnRpbnVlOyAvLyBJIGNhbid0IGhhbmRsZSBkb3VibGUgYnl0ZSBjaGFyYWN0ZXIgc2V0cyB5ZXQKKyAgICAgICAgICAgIC8vIFRyeSB0byBvYnRhaW4gdGhlIG5ldyBmaWxlCisgICAgICAgICAgICBGaWxlIHRlbXBGaWxlID0gbmV3IEZpbGUocmVzRGlyLCBOTFNiYXNlQ2xhc3MgKyAiXyIgKyBlbmNvZGluZ3NbaV0gKyBOTFNwb3N0Zml4KTsKKyAgICAgICAgICAgIGZyID0gbmV3IEZpbGVSZWFkZXIodGVtcEZpbGUpOworICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZnIpOworCQkJCisgICAgICAgICAgICAvLyBUcnkgdG8gb2J0YWluIHRoZSBqYXZhIHJlYWRhYmxlIHByb3BlcnRpZXMgZm9yIHRoZSBmaWxlCisgICAgICAgICAgICBwID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIHAubG9hZChuZXcgRmlsZUlucHV0U3RyZWFtKHRlbXBGaWxlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNldCB0aGUgZGljdGlvbmFyeSBmb3IgdGhlIG1haW4gZmlsZQorICAgICAgICAgICAgZGljdCA9IG5ldyBCdW5kbGUoZW5jb2RpbmdzW2ldKTsKKyAgICAgICAgICAgIGJ1bmRsZXMuYWRkRWxlbWVudChkaWN0KTsKKyAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgZmlyc3QgZ3JvdXAgaW4gY2FzZSB0aGVyZSBhcmUgTkxTIGl0ZW1zIHdoaWNoIHdlcmUgbm90IGFzc2lnbmVkIHRvIGEgZ3JvdXAKKyAgICAgICAgICAgIGdyb3VwID0gbmV3IEJ1bmRsZUdyb3VwKGRpY3QsICJVbmdyb3VwZWQgSXRlbXMiKTsKKyAgICAgICAgICAgIGRpY3QuYWRkQnVuZGxlR3JvdXAoZ3JvdXApOworICAgICAgICAgICAgZ3JvdXAuc2V0Q29tbWVudCgiTkxTIEl0ZW1zIHdoaWNoIHdlcmUgbm90IGluaXRpYWxseSBhc3NpZ25lZCB0byBhIGdyb3VwIik7CisgICAgICAgICAgICBpdGVtID0gbmV3IEJ1bmRsZUl0ZW0oZ3JvdXAsbnVsbCxudWxsKTsKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgcmVzdCBvZiB0aGUgZ3JvdXBzCisgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbW1lbnRMaW5lID0gbnVsbDsKKyAgICAgICAgICAgICAgICAvLyBHcmFiIHRoZSB0ZXh0IGZvbGxvd2luZyB0aGUgIyBzaWduCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZigiIyIpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudExpbmUgPSBsaW5lLnN1YnN0cmluZyhsaW5lLmluZGV4T2YoIiMiKSsxLGxpbmUubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMCxsaW5lLmluZGV4T2YoIiMiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb21tZW50TGluZSAhPSBudWxsICYmIGNvbW1lbnRMaW5lLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBhbnkgaW5mb3JtYXRpb24gbWFkZSBhdmFpbGFibGUgaW4gY29tbWVudCAnQCcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgSGFzaHRhYmxlIGRlc2NyaXB0b3JzID0gZ2V0RGVzY3JpcHRvcnMobnVsbCxjb21tZW50TGluZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgbzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgdGFncworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZSIpOyBpZiAobyAhPSBudWxsKSBkaWN0Lm5hbWUgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlQ29tbWVudCIpOyAgaWYgKG8gIT0gbnVsbCkgZGljdC5jb21tZW50ICA9ICgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGVMYW5ndWFnZSIpOyBpZiAobyAhPSBudWxsKSBkaWN0Lmxhbmd1YWdlID0gKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiZmlsZUNvdW50cnkiKTsgIGlmIChvICE9IG51bGwpIGRpY3QuY291bnRyeSAgPSAoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJmaWxlVmFyaWFudCIpOyAgaWYgKG8gIT0gbnVsbCkgZGljdC52YXJpYW50ICA9ICgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoImZpbGVNYW5hZ2VyIik7ICBpZiAobyAhPSBudWxsKSBkaWN0Lm1hbmFnZXIgID0gKChTdHJpbmcpIG8pOworCQkJCQkJCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHcm91cCB0YWdzCisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJncm91cCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gbmV3IEJ1bmRsZUdyb3VwKGRpY3QsIChTdHJpbmcpbyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnRHcm91cChncm91cCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5hZGRCdW5kbGVHcm91cChncm91cCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJncm91cENvbW1lbnQiKTsgaWYgKG8gIT0gbnVsbCkgZ3JvdXAuc2V0Q29tbWVudCgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXRlbSB0YWdzCisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJjb21tZW50Iik7ICAgIGlmIChvICE9IG51bGwpIGl0ZW0uc2V0Q29tbWVudCgoU3RyaW5nKSBvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBkZXNjcmlwdG9ycy5nZXQoInRyYW5zbGF0ZWQiKTsgaWYgKG8gIT0gbnVsbCkgaXRlbS5zZXRUcmFuc2xhdGVkKCgoU3RyaW5nKSBvKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpOworICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGRlc2NyaXB0b3JzLmdldCgiY3JlYXRvciIpOyAgICBpZiAobyAhPSBudWxsKSBpdGVtLnNldENyZWF0b3IoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJtb2RpZmllciIpOyAgIGlmIChvICE9IG51bGwpIGl0ZW0uc2V0TW9kaWZpZXIoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJjcmVhdGVkIik7ICAgIGlmIChvICE9IG51bGwpIGl0ZW0uc2V0Q3JlYXRlZERhdGUoKFN0cmluZykgbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvID0gZGVzY3JpcHRvcnMuZ2V0KCJtb2RpZmllZCIpOyAgIGlmIChvICE9IG51bGwpIGl0ZW0uc2V0TW9kaWZpZWREYXRlKChTdHJpbmcpIG8pOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGFncyAoZS5nLiB7XyNffSBfZGVzY3JpcHRpb25fKQorICAgICAgICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gZGVzY0tleXMgPSBkZXNjcmlwdG9ycy5rZXlzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGVzY0tleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdGFnID0gKFN0cmluZylkZXNjS2V5cy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnRzV2l0aCgieyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuaW5kZXhPZigifSIpIDwgMCkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb29rdXAgPSB0YWcuc3Vic3RyaW5nKDEsdGFnLmluZGV4T2YoIn0iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0TG9va3VwcygpLnB1dChsb29rdXAsIGRlc2NyaXB0b3JzLmdldCh0YWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0JCisgICAgICAgICAgICAgICAgfSAvLyBlbmQgY2hlY2sgb2YgY29tbWVudCBsaW5lCisgICAgICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpLmxlbmd0aCgpIDwgMSkgY29udGludWU7CisJCQkKKyAgICAgICAgICAgICAgICAvLyBHcmFiIHRoZSBuYW1lIGFuZCB2YWx1ZSAodHJhbnNsYXRpb24pIGZyb20gdGhlIGxpbmUKKyAgICAgICAgICAgICAgICBpbnQgYnJlYWtwb2ludCA9IDA7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBzdGFydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY2hhciBhcnJheVtdID0gbGluZS50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgaiA8IGFycmF5Lmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RhcnRlZCAmJiBhcnJheVtqXSAhPSAnICcgJiYgYXJyYXlbal0gIT0gJ1x0Jykgc3RhcnRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydGVkICYmIChhcnJheVtqXSA9PSAnPScgfHwgYXJyYXlbal0gPT0gJzonIHx8IGFycmF5W2pdID09ICcgJyB8fCBhcnJheVtqXSA9PSAnXHQnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludCA9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gU3RyaW5nLnZhbHVlT2YoYXJyYXksMCxicmVha3BvaW50KTsKKyAgICAgICAgICAgICAgICBpdGVtLnNldEtleShrZXkpOworICAgICAgICAgICAgICAgIFN0cmluZyB0cmFuc2xhdGlvbiA9IHAuZ2V0UHJvcGVydHkoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24gPT0gbnVsbCB8fCB0cmFuc2xhdGlvbi5lcXVhbHMoIiIpKQorICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFRyYW5zbGF0aW9uKGxpbmUuc3Vic3RyaW5nKGxpbmUuaW5kZXhPZigiPSIpKzEsbGluZS5sZW5ndGgoKSkudHJpbSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGl0ZW0uc2V0VHJhbnNsYXRpb24odHJhbnNsYXRpb24pOworCQkJCQorICAgICAgICAgICAgICAgIGRpY3QuYWRkQnVuZGxlSXRlbShpdGVtKTsKKyAgICAgICAgICAgICAgICBpdGVtID0gbmV3IEJ1bmRsZUl0ZW0oZ3JvdXAsbnVsbCxudWxsKTsKKyAgICAgICAgICAgIH0gLy8gZW5kIHdoaWxlIC0gbmV4dCBsaW5lCisgICAgICAgIH0gLy8gZW5kIGZvciBsb29vcCB0aHJvdWdoIGxhbmd1YWdlcworICAgICAgICAvLyBBZGQgdGhpcyBvcGVuZWQgZmlsZSB0byBvdXIgcmVjZW50IGZpbGVzCisgICAgICAgIFByZWZlcmVuY2VzLmFkZFJlY2VudEZpbGVQcmVmZXJlbmNlKG1haW5GaWxlLmdldE5hbWUoKSwgbWFpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgIH0gLy8gZW5kIFJCTWFuYWdlcigpCisJCisgICAgLy8gKioqIE1FVEhPRFMgKioqCisJCisgICAgLyoqCisgICAgICogTWFpbgorICAgICAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB1c2VyIHNwZWNpZmllZCBhIHBhdGgKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMSkgeyAKKyAgICAgICAgICAgIG5ldyBSQk1hbmFnZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gLy8gbWFpbgorCQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBiYXNlQ2xhc3M7IH0KKwkKKyAgICAvKioKKyAgICAgKiBXcml0ZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8gdGhlIG91dHB1dCBzdHJlYW0KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBGaWxlIG91dHB1dEZpbGUgPSBuZXcgRmlsZShjdXJyZW50RGlyZWN0b3J5LCBiYXNlQ2xhc3MgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYnVuZGxlLmVuY29kaW5nID09IG51bGwgfHwgYnVuZGxlLmVuY29kaW5nLmVxdWFscygiIikpID8gIiIgOiAiXyIgKyBidW5kbGUuZW5jb2RpbmcpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnByb3BlcnRpZXMiKTsKKyAgICAgICAgICAgIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihvdXRwdXRGaWxlKTsKKyAgICAgICAgICAgIGJ1bmRsZS53cml0ZUNvbnRlbnRzKGZ3KTsKKyAgICAgICAgICAgIGZ3LmZsdXNoKCk7CisgICAgICAgICAgICBmdy5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIC8vIEluIGNhc2UgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgYnVuZGxlIG9yIHRoZSBsb2NhdGlvbiBoYXMgY2hhbmdlZCByZWNlbnRseSwgdXBkYXRlIHRoZSByZWNlbnQgZmlsZXMsIHByZWZlcmVuY2UKKyAgICAgICAgUHJlZmVyZW5jZXMuYWRkUmVjZW50RmlsZVByZWZlcmVuY2UoYmFzZUNsYXNzICsgIi5wcm9wZXJ0aWVzIiwgY3VycmVudERpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUNsYXNzICsgIi5wcm9wZXJ0aWVzIik7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2QgcmVtb3ZlcyBhIHJlc291cmNlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZS4gVGhpcyBtZXRob2QgZG9lcyBub3QgcGVybWFuZW50bHkKKyAgICAgKiBlcmFzZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMgYXQgdGhpcyBlbmNvZGluZywgaG93ZXZlciBhbnkgY2hhbmdlcyBvciBzYXZlcyB0aGF0IHRha2UKKyAgICAgKiBwbGFjZSBvbmNlIHRoaXMgZmlsZSBoYXMgYmVlbiByZW1vdmVkIHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGlzIGhpZGRlbiBmaWxlLiBUbyByZXN0b3JlIHRoZSByZXNvdXJjZSwgCisgICAgICogdGhlIGJ1bmRsZSB3aWxsIGhhdmUgdG8gYmUgcmVjcmVhdGVkLiAoVGhpcyBsYXN0IHBvaW50IG1heSBjaGFuZ2UpCisgICAgICovCisJCisgICAgcHVibGljIHZvaWQgaGlkZVJlc291cmNlKFN0cmluZyBlbmNvZGluZykgeworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmIChidW5kbGUuZW5jb2RpbmcuZXF1YWxzKGVuY29kaW5nKSkgeworICAgICAgICAgICAgICAgIGJ1bmRsZXMucmVtb3ZlRWxlbWVudChidW5kbGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCQorICAgIC8qKgorICAgICAqIEVyYXNlcyBwZXJtYW5lbnRseSBvbmUgb2YgdGhlIHJlc291cmNlIGZpbGVzLiBCZSBjYXJlZnVsIGFib3V0IGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlcmUgaXMgbm90aGluZyB5b3UgY2FuIGRvCisgICAgICogb25jZSBhIGZpbGUgaXMgZXJhc2VkLgorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIGVyYXNlRmlsZShTdHJpbmcgZW5jb2RpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAoIShidW5kbGUuZW5jb2RpbmcuZXF1YWxzKGVuY29kaW5nKSkpIGNvbnRpbnVlOworICAgICAgICAgICAgRmlsZSBvdXRwdXRGaWxlID0gbmV3IEZpbGUoY3VycmVudERpcmVjdG9yeSwgYmFzZUNsYXNzICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJ1bmRsZS5lbmNvZGluZyA9PSBudWxsIHx8IGJ1bmRsZS5lbmNvZGluZy5lcXVhbHMoIiIpKSA/ICIiIDogIl8iICsgYnVuZGxlLmVuY29kaW5nKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0aWVzIik7CisgICAgICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBvdXRwdXRGaWxlLmRlbGV0ZSgpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9kZWxldGlvbl9ub3RfcG9zc2libGUiKSk7CisgICAgICAgICAgICBoaWRlUmVzb3VyY2UoZW5jb2RpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgLyoqCisgICAgICogV3JpdGVzIG9ubHkgb25lIG9mIHRoZSByZXNvdXJjZSBmaWxlcyB0byB0aGUgZmlsZSBzeXN0ZW0uIFRoaXMgZmlsZSBpcyBzcGVjaWZpZWQgYnkgdGhlIGVuY29kaW5nIHBhcmFtZXRlcgorICAgICAqLworCQorICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9GaWxlKFN0cmluZyBlbmNvZGluZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIGlmIChidW5kbGUuZW5jb2RpbmcuZXF1YWxzKGVuY29kaW5nKSB8fCAoaT09MCAmJiBlbmNvZGluZy5lcXVhbHMoIiIpKSkgeworICAgICAgICAgICAgICAgIEZpbGUgb3V0cHV0RmlsZSA9IG5ldyBGaWxlKGN1cnJlbnREaXJlY3RvcnksIGJhc2VDbGFzcyArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYnVuZGxlLmVuY29kaW5nID09IG51bGwgfHwgYnVuZGxlLmVuY29kaW5nLmVxdWFscygiIikpID8gIiIgOiAiXyIgKyBidW5kbGUuZW5jb2RpbmcpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0aWVzIik7CisgICAgICAgICAgICAgICAgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG91dHB1dEZpbGUpOworICAgICAgICAgICAgICAgIGJ1bmRsZS53cml0ZUNvbnRlbnRzKGZ3KTsKKyAgICAgICAgICAgICAgICBmdy5mbHVzaCgpOworICAgICAgICAgICAgICAgIGZ3LmNsb3NlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gSW4gY2FzZSB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCBidW5kbGUgb3IgdGhlIGxvY2F0aW9uIGhhcyBjaGFuZ2VkIHJlY2VudGx5LCB1cGRhdGUgdGhlIHJlY2VudCBmaWxlcywgcHJlZmVyZW5jZQorICAgICAgICBQcmVmZXJlbmNlcy5hZGRSZWNlbnRGaWxlUHJlZmVyZW5jZShiYXNlQ2xhc3MgKyAiLnByb3BlcnRpZXMiLCBjdXJyZW50RGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpICsgRmlsZS5zZXBhcmF0b3IgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlQ2xhc3MgKyAiLnByb3BlcnRpZXMiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHaXZlbiBhIEJ1bmRsZUl0ZW0gYW5kIHNvbWUgcHJvcGVydGllcyB0byBjaGFuZ2UgZm9yIHRoYXQgaXRlbSwgdGhpcyBtZXRob2QgZmlyc3QgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGUgcGFzc2VkCisgICAgICogaXRlbSBpcyB2YWxpZCBhbmQgaWYgaXQgaXMsIHRoZSBwcm9wZXJ0aWVzIG9mIHRoYXQgaXRlbSBhcmUgY2hhbmdlZCB0byByZWZsZWN0IHRob3NlIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIHRvIHRoaXMKKyAgICAgKiBtZXRob2QuCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBCdW5kbGVJdGVtIHdhcyB2YWxpZCBhbmQgdXBkYXRlYWJsZSwgZmFsc2UgaWYgb3RoZXJ3aXNlIChpbiB0aGlzIGNhc2Ugbm8gY2hhbmdlcyB3ZXJlIG1hZGUpLgorICAgICAqLworICAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBlZGl0SXRlbShCdW5kbGVJdGVtIGl0ZW0sIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUsIFN0cmluZyBncm91cE5hbWUsIFN0cmluZyBjb21tZW50LCBIYXNodGFibGUgbG9va3VwcykgeworICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUuZXF1YWxzKCIiKSB8fCBncm91cE5hbWUgPT0gbnVsbCB8fCBncm91cE5hbWUuZXF1YWxzKCIiKSB8fCBpdGVtID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3RyaW5nIG9sZE5hbWUgPSBpdGVtLmdldEtleSgpOworICAgICAgICBTdHJpbmcgb2xkQ29tbWVudCA9IGl0ZW0uZ2V0Q29tbWVudCgpOworICAgICAgICBTdHJpbmcgb2xkVmFsdWUgPSBpdGVtLmdldFRyYW5zbGF0aW9uKCk7CisgICAgICAgIC8vU3RyaW5nIG9sZEdyb3VwTmFtZSA9IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCk7CisgICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgYnVuZGxlcworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgQnVuZGxlSXRlbSBvbGRJdGVtID0gKEJ1bmRsZUl0ZW0pYnVuZGxlLmFsbEl0ZW1zLmdldChvbGROYW1lKTsKKyAgICAgICAgICAgIGlmIChvbGRJdGVtID09IG51bGwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCFvbGROYW1lLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIEEgbmV3IGtleQorICAgICAgICAgICAgICAgIG9sZEl0ZW0uc2V0S2V5KG5hbWUpOworICAgICAgICAgICAgICAgIGJ1bmRsZS5hbGxJdGVtcy5yZW1vdmUob2xkSXRlbSk7CisgICAgICAgICAgICAgICAgYnVuZGxlLmFsbEl0ZW1zLnB1dChvbGRJdGVtLmdldEtleSgpLCBvbGRJdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvbGRJdGVtLmdldENvbW1lbnQoKSA9PSBudWxsIHx8IG9sZEl0ZW0uZ2V0Q29tbWVudCgpLmVxdWFscyhvbGRDb21tZW50KSkgb2xkSXRlbS5zZXRDb21tZW50KGNvbW1lbnQpOworICAgICAgICAgICAgaWYgKG9sZEl0ZW0uZ2V0VHJhbnNsYXRpb24oKS5lcXVhbHMob2xkVmFsdWUpKSBvbGRJdGVtLnNldFRyYW5zbGF0aW9uKHZhbHVlKTsKKyAgICAgICAgICAgIG9sZEl0ZW0uc2V0TG9va3Vwcyhsb29rdXBzKTsKKyAgICAgICAgICAgIGlmICghb2xkSXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldE5hbWUoKS5lcXVhbHMoZ3JvdXBOYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIEEgbmV3IGdyb3VwCisgICAgICAgICAgICAgICAgb2xkSXRlbS5nZXRQYXJlbnRHcm91cCgpLnJlbW92ZUJ1bmRsZUl0ZW0ob2xkSXRlbS5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgYmcgPSBidW5kbGUuZ2V0QnVuZGxlR3JvdXAoZ3JvdXBOYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoYmcgPT0gbnVsbCkgYmcgPSBidW5kbGUuZ2V0VW5ncm91cGVkR3JvdXAoKTsKKyAgICAgICAgICAgICAgICBvbGRJdGVtLnNldFBhcmVudEdyb3VwKGJnKTsKKyAgICAgICAgICAgICAgICBiZy5hZGRCdW5kbGVJdGVtKG9sZEl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0cyB0byBjcmVhdGUgYSBuZXcgaXRlbSBpbiBlYWNoIG9mIHRoZSBsYW5ndWFnZSBmaWxlcy4gVGhlIG1ldGhvZCBmaXJzdCBjaGVja3MgdGhlIGJhc2UgUmVzb3VyY2UgQnVuZGxlCisgICAgICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGl0ZW0gbmFtZSBkb2VzIG5vdCBhbGwgcmVhZHkgZXhpc3QuIElmIGl0IGRvZXMgZXhpc3QgdGhlIGl0ZW0gaXMgbm90IGNyZWF0ZWQuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIGl0ZW0KKyAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBpdGVtIGZvciB0aGUgYmFzZSBjbGFzcworICAgICAqIEBwYXJhbSBncm91cE5hbWUgVGhlIGdyb3VwIG5hbWUsIHNob3VsZCBhbGwgcmVhZHkgZXhpc3QgaW4gdGhlIGJhc2UgY2xhc3MKKyAgICAgKiBAcGFyYW0gY29tbWVudCBBbiBvcHRpb25hbCBjb21tZW50IHRvIGJlIGFkZGVkIHRvIHRoZSBpdGVtLCBjYW4gYmUgPENPREU+bnVsbDwvQ09ERT4KKyAgICAgKiBAcmV0dXJuIEFuIGVycm9yIHJlc3BvbnNlLiBJZiB0aGUgY3JlYXRpb24gd2FzIHN1Y2Nlc3NmdWwgPENPREU+dHJ1ZTwvQ09ERT4gaXMgcmV0dXJuZWQsIGlmIHRoZXJlIHdhcyBhbiBlcnJvciA8Q09ERT5mYWxzZTwvQ09ERT4gaXMgcmV0dXJuZWQuCisgICAgICovCisJCisgICAgcHVibGljIGJvb2xlYW4gY3JlYXRlSXRlbShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgZ3JvdXBOYW1lLCBTdHJpbmcgY29tbWVudCwgSGFzaHRhYmxlIGxvb2t1cHMpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmVxdWFscygiIikgfHwgZ3JvdXBOYW1lID09IG51bGwgfHwgZ3JvdXBOYW1lLmVxdWFscygiIikpIHJldHVybiBmYWxzZTsKKyAgICAgICAgQnVuZGxlIG1haW5CdW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZmlyc3RFbGVtZW50KCk7CisgICAgICAgIEJ1bmRsZUdyb3VwIG1haW5Hcm91cCA9IG51bGw7CisgICAgICAgIGlmIChtYWluQnVuZGxlLmFsbEl0ZW1zLmNvbnRhaW5zS2V5KG5hbWUpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1haW5CdW5kbGUuZ2V0R3JvdXBDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGJnID0gbWFpbkJ1bmRsZS5nZXRCdW5kbGVHcm91cChpKTsKKyAgICAgICAgICAgIGlmIChiZy5nZXROYW1lKCkuZXF1YWxzKGdyb3VwTmFtZSkpIHttYWluR3JvdXAgPSBiZzsgYnJlYWs7fQorICAgICAgICB9CisgICAgICAgIGlmIChtYWluR3JvdXAgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBBZGQgdG8gdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgQnVuZGxlSXRlbSBtYWluSXRlbSA9IG5ldyBCdW5kbGVJdGVtKG1haW5Hcm91cCwgbmFtZSwgdmFsdWUpOworICAgICAgICBtYWluSXRlbS5zZXRUcmFuc2xhdGVkKHRydWUpOworICAgICAgICBtYWluSXRlbS5zZXRDcmVhdG9yKGN1cnJlbnRVc2VyKTsKKyAgICAgICAgbWFpbkl0ZW0uc2V0TW9kaWZpZXIoY3VycmVudFVzZXIpOworICAgICAgICBtYWluSXRlbS5zZXRDb21tZW50KGNvbW1lbnQpOworICAgICAgICBtYWluQnVuZGxlLmFsbEl0ZW1zLnB1dChuYW1lLCBtYWluSXRlbSk7CisgICAgICAgIG1haW5Hcm91cC5hZGRCdW5kbGVJdGVtKG1haW5JdGVtKTsKKyAgICAgICAgaWYgKGxvb2t1cHMgIT0gbnVsbCkgbWFpbkl0ZW0uc2V0TG9va3Vwcyhsb29rdXBzKTsKKyAgICAgICAgLy8gQWRkIHRvIHRoZSByZXN0IG9mIHRoZSBidW5kbGVzCisgICAgICAgIGZvciAoaW50IGk9MTsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgLy8gRmluZCB0aGUgZ3JvdXAKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAoaW50IGo9MDsgaiA8IGJ1bmRsZS5nZXRHcm91cENvdW50KCk7IGorKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGJnID0gYnVuZGxlLmdldEJ1bmRsZUdyb3VwKGopOworICAgICAgICAgICAgICAgIGlmIChiZy5nZXROYW1lKCkuZXF1YWxzKGdyb3VwTmFtZSkpIHtncm91cCA9IGJnOyBicmVhazt9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGdyb3VwID0gbmV3IEJ1bmRsZUdyb3VwKGJ1bmRsZSwgZ3JvdXBOYW1lKTsKKyAgICAgICAgICAgICAgICBidW5kbGUuYWRkQnVuZGxlR3JvdXAoZ3JvdXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gbmV3IEJ1bmRsZUl0ZW0oZ3JvdXAsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIGl0ZW0uc2V0Q3JlYXRvcihjdXJyZW50VXNlcik7CisgICAgICAgICAgICBpdGVtLnNldE1vZGlmaWVyKGN1cnJlbnRVc2VyKTsKKyAgICAgICAgICAgIGl0ZW0uc2V0Q29tbWVudChjb21tZW50KTsKKyAgICAgICAgICAgIGlmIChsb29rdXBzICE9IG51bGwpIGl0ZW0uc2V0TG9va3Vwcyhsb29rdXBzKTsKKyAgICAgICAgICAgIGJ1bmRsZS5hbGxJdGVtcy5wdXQobmFtZSwgaXRlbSk7CisgICAgICAgICAgICBidW5kbGUuYWRkVW50cmFuc2xhdGVkSXRlbShpdGVtKTsKKyAgICAgICAgICAgIGdyb3VwLmFkZEJ1bmRsZUl0ZW0oaXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEF0dGVtcHRzIHRvIGNyZWF0ZSBhIG5ldyBncm91cCBpbiBlYWNoIG9mIHRoZSBsYW5ndWFnZSBmaWxlcy4gVGhlIG1ldGhvZCBmaXJzdCBjaGVja3MgdGhlIGJhc2UgUmVzb3VyY2UgQnVuZGxlCisgICAgICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGdyb3VwIG5hbWUgZG9lcyBub3QgYWxsIHJlYWR5IGV4aXN0LiBJZiBpdCBkb2VzIGV4aXN0IHRoZSBncm91cCBpcyBub3QgY3JlYXRlZC4KKyAgICAgKiBAcGFyYW0gZ3JvdXBOYW1lIFRoZSB1bmlxdWUgZ3JvdXAgbmFtZSB0byBiZSBjcmVhdGVkCisgICAgICogQHBhcmFtIGdyb3VwQ29tbWVudCBBbiBvcHRpb25hbCBjb21tZW50IHRvIGJlIGFkZGVkIHRvIHRoZSBncm91cCwgY2FuIGJlIDxDT0RFPm51bGw8L0NPREU+CisgICAgICogQHJldHVybiBBbiBlcnJvciByZXNwb25zZS4gSWYgdGhlIGNyZWF0aW9uIHdhcyBzdWNjZXNzZnVsIDxDT0RFPnRydWU8L0NPREU+IGlzIHJldHVybmVkLCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgPENPREU+ZmFsc2U8L0NPREU+IGlzIHJldHVybmVkLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGNyZWF0ZUdyb3VwKFN0cmluZyBncm91cE5hbWUsIFN0cmluZyBncm91cENvbW1lbnQpIHsKKyAgICAgICAgaWYgKGdyb3VwTmFtZSA9PSBudWxsIHx8IGdyb3VwTmFtZS5lcXVhbHMoIiIpKQorICAgICAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGdyb3VwIGV4aXN0cworICAgICAgICBCdW5kbGUgbWFpbkJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5maXJzdEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKG1haW5CdW5kbGUuaGFzR3JvdXAoZ3JvdXBOYW1lKSkKKyAgICAgICAgCXJldHVybiBmYWxzZTsKKwkJCisgICAgICAgIC8vIENyZWF0ZSB0aGUgZ3JvdXAKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBCdW5kbGVHcm91cCBiZyA9IG5ldyBCdW5kbGVHcm91cChidW5kbGUsIGdyb3VwTmFtZSk7CisgICAgICAgICAgICBpZiAoZ3JvdXBDb21tZW50ICE9IG51bGwpCisgICAgICAgICAgICAJYmcuc2V0Q29tbWVudChncm91cENvbW1lbnQpOworICAgICAgICAgICAgYnVuZGxlLmFkZEJ1bmRsZUdyb3VwKGJnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIGdyb3VwIGFuZCBhbGwgb2YgdGhlIGl0ZW1zIHdpdGhpbiB0aGF0IGdyb3VwIGZyb20gdGhlIHZhcmlvdXMKKyAgICAgKiBSZXNvdXJjZSBCdW5kbGVzIGtub3duIHRvIHRoZSBzeXN0ZW0uIFRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGdyb3VwIGZyb20KKyAgICAgKiB0aGUgcHJvdGVjdGVkIHZlY3RvciBvZiBncm91cHMsIHRoZW4gcmVtb3ZlcyBhbGwgaXRlbXMgaW4gdGhhdCBncm91cCBmcm9tCisgICAgICogdGhlIHByb3RlY3RlZCB2ZWN0b3Igb2YgdW50cmFuc2xhdGVkIGl0ZW1zLCBhbmQgdGhlIHByb3RlY3RlZCBoYXNodGFibGUgb2YKKyAgICAgKiBhbGwgaXRlbXMuCisgICAgICovCisJCisgICAgcHVibGljIHZvaWQgZGVsZXRlR3JvdXAoU3RyaW5nIGdyb3VwTmFtZSkgeworICAgICAgICBpZiAoZ3JvdXBOYW1lID09IG51bGwpIHJldHVybjsKKyAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBvZiB0aGUgYnVuZGxlczsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBidW5kbGUucmVtb3ZlR3JvdXAoZ3JvdXBOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgcmVzb3VyY2UgaXRlbXMgb2YgdGhlIGdpdmVuIG5hbWUgZnJvbSBlYWNoIG9mIHRoZSByZXNvdXJjZSBidW5kbGVzIHRoYXQgdGhlIHN5c3RlbQorICAgICAqIGtub3dzIGFib3V0LiBUaGlzIHdvcmtzIGJ5IGZpcnN0IHJlbW92aW5nIHRoZSBpdGVtIGZyb20gdGhlIHByb3RlY3RlZCB2ZWN0b3Igb2YgdHJhbnNsYXRlZAorICAgICAqIGl0ZW1zLCBpZiBpdCBpcyB0aGVyZSwgYW5kIHRoZW4gcmVtb3ZpbmcgaXQgZnJvbSB0aGUgdGhlIGhhc2h0YWJsZSBvZiBhbGwgaXRlbXMsIGFuZCB0aGVuCisgICAgICogcmVtb3ZpbmcgaXQgZnJvbSBpdHMgcmVzcGVjdGl2ZSBncm91cC4gCisgICAgICovCisJCisgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShTdHJpbmcgaXRlbU5hbWUpIHsKKyAgICAgICAgaWYgKGl0ZW1OYW1lID09IG51bGwpIHJldHVybjsKKyAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBvZiB0aGUgYnVuZGxlczsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHVudHJhbnNsYXRlZCBpdGVtcworICAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBidW5kbGUucmVtb3ZlVW50cmFuc2xhdGVkSXRlbShpdGVtTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBJdGVtcworICAgICAgICAgICAgRW51bWVyYXRpb24gaXRlbXMgPSBidW5kbGUuYWxsSXRlbXMuZWxlbWVudHMoKTsKKyAgICAgICAgICAgIHdoaWxlKGl0ZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlbXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS5nZXRLZXkoKS5lcXVhbHMoaXRlbU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5hbGxJdGVtcy5yZW1vdmUoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5yZW1vdmVCdW5kbGVJdGVtKGl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBMb29rcyB0aHJvdWdoIHRoZSByZXNvdXJjZXMgY29udGFpbmVkIGluIHRoZSBidW5kbGUgZm9yIGEgcmVzb3VyY2Ugb2YgdGhlIGdpdmVuIGVuY29kaW5nLiBOb3RlIHRoYXQgdGhpcworICAgICAqIHNlYXJjaCBpcyBjYXNlIHNlbnNpdGl2ZS4KKyAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGVuY29kaW5nIGV4aXN0cyBhcyBvbmUgb2YgdGhlIHJlc291cmNlIGZpbGVzLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNSZXNvdXJjZShTdHJpbmcgZW5jb2RpbmcpIHsKKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBlbmNvZGluZyBleGlzdHMKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGIgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaWYgKGIuZW5jb2RpbmcuZXF1YWxzKGVuY29kaW5nKSkgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBBdHRlbXB0cyB0byBjcmVhdGUgYSBuZXcgcmVzb3VyY2UgZmlsZSB3aXRoIHRoZSBnaXZlbiBlbmNvZGluZy4gVGhlIG1ldGhvZCBmaXJzdCBjaGVja3MgdGhlIGJhc2UgUmVzb3VyY2UgQnVuZGxlCisgICAgICogdG8gbWFrZSBzdXJlIHRoYXQgZW5jb2RpbmcgZG9lcyBub3QgYWxsIHJlYWR5IGV4aXN0LiBJZiBpdCBkb2VzIGV4aXN0IHRoZSByZXNvdXJjZSBmaWxlIGlzIG5vdCBjcmVhdGVkLgorICAgICAqIEBwYXJhbSB0aXRsZSBBbiBvcHRpb25hbCwgcXVpY2sgdGl0bGUgZm9yIHRoZSBmaWxlLCBjYW4gYmUgPENPREU+bnVsbDwvQ09ERT4KKyAgICAgKiBAcGFyYW0gY29tbWVudCBBbiBvcHRpb25hbCBjb21tZW50IHRvIGJlIGFkZGVkIHRvIHRoZSByZXNvdXJjZSwgY2FuIGJlIDxDT0RFPm51bGw8L0NPREU+CisgICAgICogQHBhcmFtIG1hbmFnZXIgVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgdGhpcyByZXNvdXJjZSwgY2FuIGJlIDxDT0RFPm51bGw8L0NPREU+CisgICAgICogQHBhcmFtIGVuY29kaW5nIFRoZSBwcm9wZXIgZW5jb2RpbmcgZm9yIHRoZSByZXNvdXJjZS4gTXVzdCBiZSBvZiBmb3JtICdsYW5ndWFnZScsICdsYW5ndWFnZV9jb3VudHJ5Jywgb3IgJ2xhbmd1YWdlX2NvdW50cnlfdmFyaWFudCcKKyAgICAgKiBAcGFyYW0gbGFuZ3VhZ2UgQSBtb3JlIGZvcm1hbCBuYW1lIGZvciB0aGUgbGFuZ3VhZ2UgKGUuZy4gJ0VuZ2xpc2gnLCAnRGV1dHNjaCcsIGV0Yy4pLCBjYW4gYmUgPENPREU+bnVsbDwvQ09ERT4KKyAgICAgKiBAcGFyYW0gY291bnRyeSBBIG1vcmUgZm9ybWFsIG5hbWUgZm9yIHRoZSBjb3VudHJ5IGRlc2NyaWJlZCBieSB0aGUgcmVzb3VyY2UsIGNhbiBiZSA8Q09ERT5udWxsPC9DT0RFPgorICAgICAqIEBwYXJhbSB2YXJpYW50IEEgbW9yZSBmb3JtYWwgbmFtZSBmb3IgdGhlIHZhcmlhbnQgZGVzY3JpYmVkIGJ5IHRoZSByZXNvdXJjZSwgY2FuIGJlIDxDT0RFPm51bGw8L0NPREU+CisgICAgICogQHBhcmFtIGNvcHlWYWx1ZXMgQW4gaW5kaWNhdGlvbiBvZiB3ZXRoZXIgb3Igbm90IHRvIHBvcHVsYXRlIHRoZSByZXNvdXJjZSB3aXRoIHRoZSBpdGVtcyBpbiB0aGUgYmFzZSBjbGFzcworICAgICAqIEByZXR1cm4gQW4gZXJyb3IgcmVzcG9uc2UuIElmIHRoZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCA8Q09ERT50cnVlPC9DT0RFPiBpcyByZXR1cm5lZCwgaWYgdGhlcmUgd2FzIGFuIGVycm9yIDxDT0RFPmZhbHNlPC9DT0RFPiBpcyByZXR1cm5lZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgYm9vbGVhbiBjcmVhdGVSZXNvdXJjZShTdHJpbmcgdGl0bGUsIFN0cmluZyBjb21tZW50LCBTdHJpbmcgbWFuYWdlciwgU3RyaW5nIGVuY29kaW5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UsIFN0cmluZyBjb3VudHJ5LCBTdHJpbmcgdmFyaWFudCwgYm9vbGVhbiBjb3B5VmFsdWVzKSB7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsIHx8IGVuY29kaW5nLmVxdWFscygiIikgfHwgZW5jb2Rpbmcuc3RhcnRzV2l0aCgiXyIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZW5jb2RpbmcgZXhpc3RzCisgICAgICAgIGlmIChoYXNSZXNvdXJjZShlbmNvZGluZykpIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSByZXNvdXJjZQorICAgICAgICBCdW5kbGUgYnVuZGxlID0gbmV3IEJ1bmRsZShlbmNvZGluZyk7CisgICAgICAgIGJ1bmRsZS5uYW1lID0gdGl0bGU7CisgICAgICAgIGJ1bmRsZS5jb21tZW50ID0gY29tbWVudDsKKyAgICAgICAgYnVuZGxlLm1hbmFnZXIgPSBtYW5hZ2VyOworICAgICAgICBidW5kbGUubGFuZ3VhZ2UgPSBsYW5ndWFnZTsKKyAgICAgICAgYnVuZGxlLmNvdW50cnkgPSBjb3VudHJ5OworICAgICAgICBidW5kbGUudmFyaWFudCA9IHZhcmlhbnQ7CisJCQorICAgICAgICAvLyBDcmVhdGUgYSBkZWZhdWx0IGdyb3VwCisgICAgICAgIGJ1bmRsZS5hZGRCdW5kbGVHcm91cCgiVW5ncm91cGVkIEl0ZW1zIiwgIlRoZXNlIGFyZSByZXNvdXJjZSBpdGVtcyB0aGF0IGhhdmUgbm90IGJlZW4gYXNzaWduZWQgYSBncm91cCIpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvcHlWYWx1ZXMpIHsKKyAgICAgICAgICAgIEJ1bmRsZSBtYWluQnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmZpcnN0RWxlbWVudCgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWFpbkJ1bmRsZS5nZXRHcm91cENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIG1haW5Hcm91cCA9IG1haW5CdW5kbGUuZ2V0QnVuZGxlR3JvdXAoaSk7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgYmcgPSBuZXcgQnVuZGxlR3JvdXAoYnVuZGxlLG1haW5Hcm91cC5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGJnLnNldENvbW1lbnQobWFpbkdyb3VwLmdldENvbW1lbnQoKSk7CisgICAgICAgICAgICAgICAgYnVuZGxlLmFkZEJ1bmRsZUdyb3VwKGJnKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCBtYWluR3JvdXAuZ2V0SXRlbUNvdW50KCk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIG1haW5JdGVtID0gbWFpbkdyb3VwLmdldEJ1bmRsZUl0ZW0oaik7CisgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IG5ldyBCdW5kbGVJdGVtKGJnLCBtYWluSXRlbS5nZXRLZXkoKSwgbWFpbkl0ZW0uZ2V0VHJhbnNsYXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0Q29tbWVudChtYWluSXRlbS5nZXRDb21tZW50KCkpOworICAgICAgICAgICAgICAgICAgICBpdGVtLnNldENyZWF0b3IobWFpbkl0ZW0uZ2V0Q3JlYXRvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRNb2RpZmllcihtYWluSXRlbS5nZXRNb2RpZmllcigpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRMb29rdXBzKG5ldyBIYXNodGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIEJ1bmRsZSBjbGFzcworICAgICAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbiBrZXlzID0gbWFpbkl0ZW0uZ2V0TG9va3VwcygpLmtleXMoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKW1haW5JdGVtLmdldExvb2t1cHMoKS5nZXQobmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldExvb2t1cHMoKS5wdXQobmV3IFN0cmluZyhuYW1lKSwgbmV3IFN0cmluZyh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJnLmFkZEJ1bmRsZUl0ZW0oaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZS5hZGRVbnRyYW5zbGF0ZWRJdGVtKGl0ZW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCQkKKyAgICAgICAgYnVuZGxlcy5hZGRFbGVtZW50KGJ1bmRsZSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZHVwbGljYXRlIE5MUyBlbnRyaWVzCisgICAgICovCisJCisgICAgcHVibGljIGludCBnZXROdW1iZXJEdXBsaWNhdGVzKCkgeworICAgICAgICByZXR1cm4gKChCdW5kbGUpYnVuZGxlcy5maXJzdEVsZW1lbnQoKSkuZHVwbGljYXRlcy5zaXplKCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzaW5nbGUgc3RyaW5nIHdpdGggYSBjb21tYSBkZWxpbWl0ZWQgbGlzdGluZyBvZiBhbGwgZHVwbGljYXRlIGVudHJpZXMgZm91bmQgaW4gdGhlIE5MUyByZXNvdXJjZXMKKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldER1cGxpY2F0ZXNMaXN0aW5nKCkgeworICAgICAgICByZXR1cm4gbGlzdFN0cmluZ3MoZ2V0RHVwbGljYXRlc0xpc3RpbmdWZWN0b3IoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIFZlY3RvciBjb2xsZWN0aW9uIG9mIGR1cGxpY2F0ZSBCdW5kbGVJdGVtcyBmb3VuZCBpbiB0aGUgYnVuZGxlCisgICAgICovCisJCisgICAgcHVibGljIFZlY3RvciBnZXREdXBsaWNhdGVzTGlzdGluZ1ZlY3RvcigpIHsKKyAgICAgICAgcmV0dXJuICgoQnVuZGxlKWJ1bmRsZXMuZmlyc3RFbGVtZW50KCkpLmR1cGxpY2F0ZXM7CisgICAgfQorCisgICAgLyoqCisgICAgICogQSB1c2VmdWwgZGVidWdnaW5nIG1ldGhvZCB0aGF0IGxpc3RzIHRoZSB2YXJpb3VzIEJ1bmRsZUdyb3VwIG5hbWVzIGluIGEgU3RyaW5nLgorICAgICAqLworCQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JvdXBMaXN0aW5nKCkgeworICAgICAgICByZXR1cm4gbGlzdFN0cmluZ3MoZ2V0R3JvdXBMaXN0aW5nVmVjdG9yKCkpOworICAgIH0KKyAgICAgICAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSB2ZWN0b3IgY29sbGVjdGlvbiBvZiBhbGwgb2YgdGhlIEJ1bmRsZUdyb3VwIGl0ZW1zIGZvdW5kcyBpbnQgdGhlIGJ1bmRsZS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgVmVjdG9yIGdldEdyb3VwTGlzdGluZ1ZlY3RvcigpIHsKKyAgICAgICAgVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgIEJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKWJ1bmRsZXMuZmlyc3RFbGVtZW50KCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZS5nZXRHcm91cENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBidW5kbGUuZ2V0QnVuZGxlR3JvdXAoaSkuZ2V0TmFtZSgpOworICAgICAgICAgICAgdi5hZGRFbGVtZW50KG5hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2OworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgbGFuZ3VhZ2VzIHRoYXQgdGhlIHN5c3RlbSBzZWVtcyB0byBzdXBwb3J0CisgICAgICovCisJCisgICAgcHVibGljIGludCBnZXROdW1iZXJMYW5ndWFnZXMoKSB7CisgICAgICAgIHJldHVybiBidW5kbGVzLnNpemUoKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHNpbmdsZSBzdHJpbmcgY29tcHJpc2VkIG9mIGEgY29tbWEgZGVsaW1pdGVkIGxpc3Rpbmcgb2YgYWxsIGxhbmd1YWdlcyB0aGUgc3lzdGVtIHNlZW1zIHRvIHN1cHBvcnQKKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldExhbmd1YWdlTGlzdGluZygpIHsKKyAgICAgICAgcmV0dXJuIGxpc3RTdHJpbmdzKGdldExhbmd1YWdlTGlzdGluZ1ZlY3RvcigpKTsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHZlY3RvciBvZiBzdHJpbmdzIGNvbXByaXNpbmcgYSBsaXN0IG9mIGFsbCBsYW5ndWFnZXMgaW4gdGhlIHN5c3RlbQorICAgICAqLworCQorICAgIHB1YmxpYyBWZWN0b3IgZ2V0TGFuZ3VhZ2VMaXN0aW5nVmVjdG9yKCkgeworICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKKwkJCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlIGRpY3QgPSAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgU3RyaW5nIGRpY3RTdHIgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoZGljdC5sYW5ndWFnZSAhPSBudWxsKSBkaWN0U3RyICs9IGRpY3QubGFuZ3VhZ2U7CisgICAgICAgICAgICBpZiAoZGljdC5jb3VudHJ5ICE9IG51bGwpIGRpY3RTdHIgKz0gIiAiICsgZGljdC5jb3VudHJ5OworICAgICAgICAgICAgaWYgKGRpY3QudmFyaWFudCAhPSBudWxsKSBkaWN0U3RyICs9ICIgIiArIGRpY3QudmFyaWFudDsKKyAgICAgICAgICAgIGlmIChkaWN0U3RyLnRyaW0oKS5lcXVhbHMoIiIpKSBkaWN0U3RyID0gKGRpY3QuZW5jb2RpbmcudHJpbSgpLmVxdWFscygiIikgPyAiQmFzZSBSZXNvdXJjZSBCdW5kbGUiIDogZGljdC5lbmNvZGluZyk7CisgICAgICAgICAgICB2LmFkZEVsZW1lbnQoZGljdFN0cik7CisgICAgICAgIH0KKwkJCisgICAgICAgIHJldHVybiB2OworICAgIH0KKwkKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdHJhbnNsYXRpb25zIGNvbnRhaW5lZCBhY3Jvc3MgYWxsIGxhbmd1YWdlIGZpbGVzCisgICAgICovCisJCisgICAgcHVibGljIGludCBnZXROdW1iZXJUb3RhbFRyYW5zbGF0aW9ucygpIHsKKyAgICAgICAgcmV0dXJuIGFsbEJ1bmRsZUtleXMuc2l6ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBCdW5kbGVHcm91cHMgaW4gIHRoZSBidW5kbGUuCisgICAgICovCisJCisgICAgcHVibGljIGludCBnZXROdW1iZXJHcm91cHMoKSB7CisgICAgICAgIHJldHVybiAoKEJ1bmRsZSlidW5kbGVzLmZpcnN0RWxlbWVudCgpKS5nZXRHcm91cENvdW50KCk7CisgICAgfQorCQorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHVzZXIgY3VycmVudGx5IHVzaW5nIHRoZSBlZGl0b3IKKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CisgICAgICAgIHJldHVybiBjdXJyZW50VXNlcjsJCisgICAgfQorCQorICAgIC8qKgorICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIHVzZXIgY3VycmVudGx5IHVzaW5nIHRoZSBlZGl0b3IKKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CisgICAgICAgIGN1cnJlbnRVc2VyID0gdXNlcjsJCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGJhc2UgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgYnVuZGxlCisgICAgICovCisgICAgCisgICAgcHVibGljIHZvaWQgc2V0QmFzZUNsYXNzKFN0cmluZyBiYXNlQ2xhc3NOYW1lKSB7CisgICAgICAgIGJhc2VDbGFzcyA9IGJhc2VDbGFzc05hbWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRpcmVjdG9yeSBpbiB0aGUgZmlsZSBzeXN0ZW0gaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBidW5kbGUgaXMgdG8gYmUKKyAgICAgKiBzYXZlZCBhbmQgcmV0cmlldmVkLgorICAgICAqLworICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEZpbGVEaXJlY3RvcnkoRmlsZSBkaXJlY3RvcnkpIHsKKyAgICAgICAgaWYgKGRpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSBjdXJyZW50RGlyZWN0b3J5ID0gZGlyZWN0b3J5OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGJhc2UgY2xhc3MgbmFtZSBpZiBrbm93biwgb3IgIlVua25vd24gQmFzZSBDbGFzcyIgb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgdG9TcmluZygpIHsKKyAgICAgICAgcmV0dXJuIChiYXNlQ2xhc3MgPT0gbnVsbCA/ICJVbmtub3duIEJhc2UgQ2xhc3MiIDogYmFzZUNsYXNzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBiYXNlIGNsYXNzIG5hbWUgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgU3RyaW5nIGdldEJhc2VDbGFzcygpIHsKKyAgICAgICAgcmV0dXJuIGJhc2VDbGFzczsKKyAgICB9CisJCisgICAgLyoqCisgICAgICogQSBWZWN0b3Igb2YgTkxTYnVuZGxlcywgb25lIGZvciBlYWNoIGxhbmd1YWdlCisgICAgICovCisgICAgcHVibGljIFZlY3RvciBnZXRCdW5kbGVzKCkgeworICAgICAgICByZXR1cm4gYnVuZGxlczsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgYnVuZGxlIGZyb20gYSBsb2NhbGUKKyAgICAgKiBAcmV0dXJuIFRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgYnVuZGxlCisgICAgICovCisgICAgcHVibGljIEJ1bmRsZSBnZXRCdW5kbGUoU3RyaW5nIGxvY2FsZSkgeworICAgIAlCdW5kbGUgYnVuZGxlID0gbnVsbDsKKyAgICAgICAgaWYgKGhhc1Jlc291cmNlKGxvY2FsZSkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZSB0ZW1wYiA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHRlbXBiLmVuY29kaW5nLmVxdWFscyhsb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1bmRsZSA9IHRlbXBiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1bmRsZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaXMgdGhlIGJhc2UgY2xhc3MgZmlsZSBmb3IgdGhlIHJlc291cmNlIGJ1bmRsZS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgRmlsZSBnZXRCYXNlRmlsZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlKGN1cnJlbnREaXJlY3RvcnksYmFzZUNsYXNzICsgIi5wcm9wZXJ0aWVzIik7CisgICAgfQorCQorICAgIC8vIFJldHVybiBhIHNpbmdsZSBjb21tYSBkZWxpbWl0ZWQgc3RyaW5nIG1hZGUgZnJvbSBhIHZlY3RvciBvZiBzdHJpbmdzCisgICAgcHJpdmF0ZSBTdHJpbmcgbGlzdFN0cmluZ3MoVmVjdG9yIHYpIHsKKyAgICAgICAgU3RyaW5nIHJldFN0ciA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBPYmplY3QgbyA9IHYuZWxlbWVudEF0KGkpOworICAgICAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIFN0cmluZykpIGNvbnRpbnVlOworICAgICAgICAgICAgU3RyaW5nIHMgPSAoU3RyaW5nKW87CisgICAgICAgICAgICBpZiAoaSA+IDApIHJldFN0ciArPSAiLCAiOworICAgICAgICAgICAgcmV0U3RyICs9IHM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldFN0cjsKKyAgICB9CisJCisgICAgLy8gSW5pdCAtIGNhbGxlZCBiZWZvcmUgYW50IGNvbnN0cnVjdGlvbgorICAgIHByaXZhdGUgdm9pZCBpbml0KCkgeworICAgICAgICBhbGxCdW5kbGVLZXlzID0gbmV3IFZlY3RvcigpOworICAgICAgICBidW5kbGVzID0gbmV3IFZlY3RvcigpOworICAgICAgICBjdXJyZW50VXNlciA9ICJVbmtub3duIjsKKyAgICB9CisJCisgICAgLy8gUmV0dXJuIGEgaGFzaHRhYmxlIG9mIHRoZSB0YWdzIGluIGEgY29tbWVudCBsaW5lIChpLmUuIHRoZSB0ZXh0IGFmdGVyIGVhY2ggJ0AnIGNoYXJhY3RlcikgYW5kIHRoZWlyIHZhbHVlcworICAgIHByaXZhdGUgSGFzaHRhYmxlIGdldERlc2NyaXB0b3JzKEhhc2h0YWJsZSByZXN1bHQsIFN0cmluZyBsaW5lKSB7CisgICAgICAgIC8vIFJlY3Vyc2lvbiB0ZXJtaW5hdGluZyBjb25kaXRpb24KKyAgICAgICAgaWYgKGxpbmUgPT0gbnVsbCB8fCBsaW5lLmxlbmd0aCgpIDw9IDAgfHwgbGluZS5pbmRleE9mKCJAIikgPCAwKSByZXR1cm4gcmVzdWx0OworICAgICAgICAvLyBPdGhlcndpc2UgZ2VuZXJhdGUgd2hhdCBpbmZvcm1hdGlvbiB3ZSBjYW4gYW5kIHJlY3Vyc2UKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIC8vIFN0cmlwIG9mZiBhbnkgaW5mb3JtYXRpb24gYmVmb3JlIGFuZCBpbmNsdWRpbmcgYSAnQCcKKyAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKGxpbmUuaW5kZXhPZigiQCIpKzEsIGxpbmUubGVuZ3RoKCkpOworICAgICAgICAvLyBUaGVyZSBzaG91bGQgYmUgYSBzcGFjZSBhZnRlciB0aGUgJ0BfdGFnXycgYW5kIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5CisgICAgICAgIGlmIChsaW5lLmluZGV4T2YoIiAiKSA8IDApIHJldHVybiByZXN1bHQ7ICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gaWYgdGhpbmdzIGFyZSBmb3JtYXR0ZWQgcmlnaHQKKyAgICAgICAgLy8gQWRkIHRoZSB0ZXh0IGFmdGVyIHRoZSAnQCcgY2hhcmFjdGVyIHVwIHRvIHRoZSBmaXJzdCB3aGl0ZXNwYWNlIChoYXMgdG8gYmUgYSBzcGFjZSwgbm90IHRhYiBvciBvdGhlciB3aGl0ZXNwYWNlKQorICAgICAgICBTdHJpbmcgbmFtZSA9IGxpbmUuc3Vic3RyaW5nKDAsbGluZS5pbmRleE9mKCIgIikpLnRyaW0oKTsKKyAgICAgICAgLy8gTm93IHN0cmlwIG9mZiB0aGUgdGFnIG5hbWUKKyAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKGxpbmUuaW5kZXhPZigiICIpLCBsaW5lLmxlbmd0aCgpKTsKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW5vdGhlciAnQCcgY2hhcmFjdGVyIHdlIHRha2UgdGhlIHZhbHVlIHVwIHVudGlsIHRoYXQgY2hhcmFjdGVyCisgICAgICAgIGlmIChsaW5lLmluZGV4T2YoIkAiKSA+PSAwKSB7CisgICAgICAgICAgICByZXN1bHQucHV0KG5hbWUsbGluZS5zdWJzdHJpbmcoMCxsaW5lLmluZGV4T2YoIkAiKSkudHJpbSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBPdGhlcndpc2Ugd2UgdGFrZSB0aGUgcmVzdCBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgbGluZQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdC5wdXQobmFtZSxsaW5lLnRyaW0oKSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIC8vIFJlY3Vyc2UKKyAgICAgICAgcmV0dXJuIGdldERlc2NyaXB0b3JzKHJlc3VsdCwgbGluZS5zdWJzdHJpbmcobGluZS5pbmRleE9mKCJAIiksIGxpbmUubGVuZ3RoKCkpKTsKKyAgICB9CisKKyAgICAvLyBDaGVja3MgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBzZWUgaWYgaXQgY29udGFpbnMgYSBwYXJ0aWN1bGFyIHN0cmluZworLyogICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBhcnJheUNvbnRhaW5zKFN0cmluZ1tdIGFycmF5LCBTdHJpbmcgbWF0Y2gpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGFycmF5W2ldLmVxdWFscyhtYXRjaCkpIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Ki8KKwkKKyAgICAvLyBQcmludHMgdGhlIHVzYWdlIG9mIHRoZSBwcm9ncmFtIHdoZW4gY2FsbGVkIGZyb20gbWFpbgorLyogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFVzYWdlKCkgeworICAgICAgICBTdHJpbmcgdXNhZ2UgPSBuZXcgU3RyaW5nKCk7CisgICAgICAgIHVzYWdlICs9ICJVc2FnZTpcblxuamF2YSBjb20uaWJtLmFsbWFkZW4uVGVtcHVzRnVnaXQuVG9vbHMuUkJNYW5hZ2VyIGZpbGVOYW1lICgoLXIgfCAtZCkgZW5jb2Rpbmc/KT8iOworICAgICAgICB1c2FnZSArPSAiXG5cbiAgZmlsZU5hbWUgLT4gVGhlIGZpbGUgKGFuZCBwYXRoPykgcmVwcmVzZW50aW5nIHRoZSBtYWluIE5MUyByZXNvdXJjZVxuXHRcdChpLmUuIFRlbXB1c0Z1Z2l0LnJlc291cmNlcylcbiI7CisgICAgICAgIHVzYWdlICs9ICIgIGVuY29kaW5nIC0+IFJldHVybnMgcmVzdWx0cyBmb3Igb25seSB0aGUgbGFuZ3VhZ2UgZW5jb2Rpbmcgc3BlY2lmaWVkXG4iOworICAgICAgICB1c2FnZSArPSAiICBmbGFnIC1yICAtPiBHaXZlcyBvbmx5IGEgc3RhdHVzIHJlcG9ydCBvbiB0aGUgc3RhdGUgb2YgdGhlIHRyYW5zbGF0aW9uc1xuIjsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih1c2FnZSk7CisgICAgfSovCisgICAgCit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlByb3BlcnRpZXNFeHBvcnRlci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUHJvcGVydGllc0V4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkZjdjYgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlByb3BlcnRpZXNFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmEudXRpbC4qOworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBwbHVnLWluIGV4cG9ydGVyIHV0aWxpdHkgZm9yIFJCTWFuYWdlciB0aGF0IG91dHB1dHMgSmF2YQorICogc3RhbmRhcmQgLnByb3BlcnRpZXMgZmlsZXMgaW4gdGhlIGFjY29yZGluZyB0byB0aGUgZmlsZSBzdHJ1Y3R1cmUgb2YgUmVzb3VyY2UKKyAqIEJ1bmRsZXMuIE1vc3QgYWxsIG1ldGEtZGF0YSBpcyBsb3N0IGluIHRoaXMgZXhwb3J0LgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQlByb3BlcnRpZXNFeHBvcnRlciBleHRlbmRzIFJCRXhwb3J0ZXIgeworCQorICAgIHB1YmxpYyBSQlByb3BlcnRpZXNFeHBvcnRlcigpIHsKKyAgICAgICAgc3VwZXIoKTsKKwkJCisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGZpbGUgY2hvb3NlciBpZiBuZWNlc3NhcnkKKyAgICAgICAgaWYgKGNob29zZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgY2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKyAgICAgICAgICAgIGNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpeworICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQmFzZSBDbGFzcyBQcm9wZXJ0aWVzIEZpbGVzIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworICAgICAgICAgICAgICAgICAgICBpZiAoZi5pc0RpcmVjdG9yeSgpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBmLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSAmJiBmLmdldE5hbWUoKS5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IC8vIGVuZCBpZgorICAgIH0KKwkKKyAgICBwdWJsaWMgdm9pZCBleHBvcnQoUkJNYW5hZ2VyIHJibSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHJibSA9PSBudWxsKSByZXR1cm47CisgICAgICAgIC8vIE9wZW4gdGhlIFNhdmUgRGlhbG9nCisgICAgICAgIGludCByZXRfdmFsID0gY2hvb3Nlci5zaG93U2F2ZURpYWxvZyhudWxsKTsKKyAgICAgICAgaWYgKHJldF92YWwgIT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSByZXR1cm47CisgICAgICAgIC8vIFJldHJpZXZlIGJhc2ljIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgRmlsZSBmaWxlID0gY2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlsZShzKSB3ZSB3aWxsIGJlIHdvcmtpbmcgd2l0aAorICAgICAgICBGaWxlIGRpcmVjdG9yeSA9IG5ldyBGaWxlKGZpbGUuZ2V0UGFyZW50KCkpOyAgICAgICAgICAgIC8vIFRoZSBkaXJlY3Rvcnkgd2Ugd2lsbCBiZSB3cml0aW5nIHRvCisgICAgICAgIFN0cmluZyBiYXNlX25hbWUgPSBmaWxlLmdldE5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJhc2UgbmFtZSBvZiB0aGUgZmlsZXMgd2Ugd2lsbCB3cml0ZQorICAgICAgICBpZiAoYmFzZV9uYW1lID09IG51bGwgfHwgYmFzZV9uYW1lLmVxdWFscygiIikpIGJhc2VfbmFtZSA9IHJibS5nZXRCYXNlQ2xhc3MoKTsKKyAgICAgICAgaWYgKGJhc2VfbmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIucHJvcGVydGllcyIpKSAKKyAgICAgICAgICAgIGJhc2VfbmFtZSA9IGJhc2VfbmFtZS5zdWJzdHJpbmcoMCxiYXNlX25hbWUubGVuZ3RoKCktMTEpOworCQkKKyAgICAgICAgVmVjdG9yIGJ1bmRsZV92ID0gcmJtLmdldEJ1bmRsZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlX3Yuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcCA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVfdi5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICBTdHJpbmcgYmFzZV9lbmMgPSBiYXNlX25hbWU7CisgICAgICAgICAgICBpZiAoYnVuZGxlLmVuY29kaW5nICE9IG51bGwgJiYgIWJ1bmRsZS5lbmNvZGluZy5lcXVhbHMoIiIpKSBiYXNlX2VuYyA9IGJhc2VfZW5jICsgIl8iICsgYnVuZGxlLmVuY29kaW5nOworICAgICAgICAgICAgU3RyaW5nIGZpbGVfbmFtZSA9IGJhc2VfZW5jICsgIi5wcm9wZXJ0aWVzIjsKKyAgICAgICAgICAgIFN0cmluZyBoZWFkZXIgPSAiUmVzb3VyY2UgQnVuZGxlOiAiICsgZmlsZV9uYW1lICsgIiAtIEZpbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyIGF0ICIgKyAobmV3IERhdGUoKSk7CisJCQkKKyAgICAgICAgICAgIFZlY3RvciBncm91cF92ID0gYnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCBncm91cF92LnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApZ3JvdXBfdi5lbGVtZW50QXQoaik7CisgICAgICAgICAgICAgICAgVmVjdG9yIGl0ZW1fdiA9IGdyb3VwLmdldEl0ZW1zQXNWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrPTA7IGsgPCBpdGVtX3Yuc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlbV92LmVsZW1lbnRBdChrKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcC5zZXRQcm9wZXJ0eShpdGVtLmdldEtleSgpLCBpdGVtLmdldFRyYW5zbGF0aW9uKCkpOworICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGsKKyAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGoKKwkJCQorICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHRoZSBmaWxlCisgICAgICAgICAgICBGaWxlIHdyaXRlX2ZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnksIGZpbGVfbmFtZSk7CisgICAgICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHdyaXRlX2ZpbGUpOworICAgICAgICAgICAgcHJvcC5zdG9yZShmb3MsIGhlYWRlcik7CisgICAgICAgIH0gLy8gZW5kIGZvciAtIGkKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUHJvcGVydGllc0ltcG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJQcm9wZXJ0aWVzSW1wb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzZjZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUHJvcGVydGllc0ltcG9ydGVyLmphdmEKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEuaW8uKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLmd1aS5SQk1hbmFnZXJHVUk7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBzdXBlciBjbGFzcyBmb3IgYWxsIGltcG9ydGVyIHBsdWctaW4gY2xhc3Nlcy4gQXMgb2YgeWV0LCB0aGVyZQorICogaXMgbGl0dGxlIGNvbnRhaW5lZCBpbiB0aGlzIGNsYXNzLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQlByb3BlcnRpZXNJbXBvcnRlciBleHRlbmRzIFJCSW1wb3J0ZXIgeworCQorICAgIGJvb2xlYW4gaXNSQk1GaWxlID0gdHJ1ZTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIHRoZSBpbXBvcnRlciBnaXZlbiB0aGUgcGFyZW50IGRhdGEgY2xhc3NlcyBhbmQgYSBEaWFsb2cgdGl0bGUuCisgICAgICovCisJCisgICAgcHVibGljIFJCUHJvcGVydGllc0ltcG9ydGVyKFN0cmluZyB0aXRsZSwgUkJNYW5hZ2VyIHJibSwgUkJNYW5hZ2VyR1VJIGd1aSkgeworICAgICAgICBzdXBlcih0aXRsZSwgcmJtLCBndWkpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXR1cEZpbGVDaG9vc2VyKCkgeworICAgICAgICBjaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKXsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKyAgICAgICAgICAgICAgICBpZiAoZi5pc0RpcmVjdG9yeSgpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZi5nZXROYW1lKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSAmJiBmLmdldE5hbWUoKS5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X3Byb3BlcnRpZXNfZmlsZV9kZXNjcmlwdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgYmVnaW5JbXBvcnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBzdXBlci5iZWdpbkltcG9ydCgpOworICAgICAgICBGaWxlIGJhc2VGaWxlID0gZ2V0Q2hvc2VuRmlsZSgpOworICAgICAgICBGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIoYmFzZUZpbGUpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmcik7CisJCQorICAgICAgICAvLyBUZXN0IGlmIHRoaXMgaXMgYW4gUkJNYW5hZ2VyIGdlbmVyYXRlZCBmaWxlIG9yIG5vdAorICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIGlzUkJNRmlsZSA9IHRydWU7CisgICAgICAgIHdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICghbGluZS50cmltKCkuZXF1YWxzKCIiKSkgY291bnQrKzsKKyAgICAgICAgICAgIGlmIChjb3VudCA9PSAxICYmICFsaW5lLnN0YXJ0c1dpdGgoIiMgQGZpbGUiKSkgeworICAgICAgICAgICAgICAgIC8vIE5vdCBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyCisgICAgICAgICAgICAgICAgaXNSQk1GaWxlID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gLy8gZW5kIHdoaWxlCisgICAgICAgIGlmIChpc1JCTUZpbGUpIHsKKyAgICAgICAgICAgIC8vIFRyZWF0IHRoZSBmaWxlIGFzIGdlbmVyYXRlZCBieSBSQk1hbmFnZXIKKyAgICAgICAgICAgIC8vIFBhcnNlIHRoZSByZXNvdXJjZSBidW5kbGUgdGhyb3VnaCBSQk1hbmFnZXIKKyAgICAgICAgICAgIFJCTWFuYWdlciBpbXBvcnRfcmJtID0gbmV3IFJCTWFuYWdlcihiYXNlRmlsZSk7CisgICAgICAgICAgICAvLyBNZXJnZSB0aGUgdHdvIHJlc291cmNlIGJ1bmRsZXMKKyAgICAgICAgICAgIFZlY3RvciBidW5kbGVzID0gaW1wb3J0X3JibS5nZXRCdW5kbGVzKCk7CisgICAgICAgICAgICBWZWN0b3IgZW5jb2RpbmdzID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIEJ1bmRsZSBiID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgICAgICBlbmNvZGluZ3MuYWRkRWxlbWVudChiLmVuY29kaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc29sdmVFbmNvZGluZ3MoZW5jb2RpbmdzKTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBCdW5kbGUgYiA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9IGIuYWxsSXRlbXMua2V5cygpOworICAgICAgICAgICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0pYi5hbGxJdGVtcy5nZXQoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0UmVzb3VyY2UoaXRlbSwgYi5lbmNvZGluZywgKGl0ZW0uZ2V0UGFyZW50R3JvdXAoKSA9PSBudWxsID8gZ2V0RGVmYXVsdEdyb3VwKCk6IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCkpKTsgCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSnVzdCB0cmVhdCBpdCBhcyBhIHJlZ3VsYXIgcHJvcGVydGllcyBmaWxlCisgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IG1pc3NpbmcgdGFyZ2V0IGxvY2FsZSBmaWxlcworICAgICAgICAgICAgU3RyaW5nIGJhc2VOYW1lID0gYmFzZUZpbGUuZ2V0TmFtZSgpLnN1YnN0cmluZygwLGJhc2VGaWxlLmdldE5hbWUoKS5sZW5ndGgoKS0xMSk7IC8vIHwnLnByb3BlcnRpZXMnfCA9PSAxMQorICAgICAgICAgICAgRmlsZSBiYXNlRGlyID0gbmV3IEZpbGUoYmFzZUZpbGUuZ2V0UGFyZW50KCkpOworICAgICAgICAgICAgU3RyaW5nIGFsbENoaWxkcmVuW10gPSBiYXNlRGlyLmxpc3QoKTsKKyAgICAgICAgICAgIFZlY3RvciBjaGlsZHJlbl92ID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYWxsQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsQ2hpbGRyZW5baV0uc3RhcnRzV2l0aChiYXNlTmFtZSkgJiYgYWxsQ2hpbGRyZW5baV0udG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsQ2hpbGRyZW5baV0ubGVuZ3RoKCkgPT0gKGJhc2VOYW1lICsgIi5wcm9wZXJ0aWVzIikubGVuZ3RoKCkpIGNoaWxkcmVuX3YuYWRkRWxlbWVudCgiIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgY2hpbGRyZW5fdi5hZGRFbGVtZW50KGFsbENoaWxkcmVuW2ldLnN1YnN0cmluZyhiYXNlTmFtZS5sZW5ndGgoKSsxLCBhbGxDaGlsZHJlbltpXS5pbmRleE9mKCIucHJvcGVydGllcyIpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hvd1Byb2dyZXNzQmFyKGNoaWxkcmVuX3Yuc2l6ZSgpKTsKKyAgICAgICAgICAgIHJlc29sdmVFbmNvZGluZ3MoY2hpbGRyZW5fdik7CisgICAgICAgICAgICAvLyBSdW4gdGhyb3VnaCBlYWNoIHNvdXJjZSBsb2NhbGUgZmlsZSBpbXBvcnRpbmcgYXMgbmVjZXNzYXJ5CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBjaGlsZHJlbl92LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShuZXcgRmlsZShiYXNlRGlyLCBiYXNlTmFtZSArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGlsZHJlbl92LmVsZW1lbnRBdChpKS50b1N0cmluZygpLmVxdWFscygiIikgPyAiIiA6ICJfIiArIGNoaWxkcmVuX3YuZWxlbWVudEF0KGkpLnRvU3RyaW5nKCkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnByb3BlcnRpZXMiKSk7CisgICAgICAgICAgICAgICAgcC5sb2FkKGZpcyk7CisgICAgICAgICAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9IHAua2V5cygpOworICAgICAgICAgICAgICAgIHdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gbmV3IEJ1bmRsZUl0ZW0obnVsbCwga2V5LCBwLmdldFByb3BlcnR5KGtleSkpOworICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFRyYW5zbGF0ZWQodGhpcy5nZXREZWZhdWx0VHJhbnNsYXRlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0UmVzb3VyY2UoaXRlbSwgY2hpbGRyZW5fdi5lbGVtZW50QXQoaSkudG9TdHJpbmcoKSwgZ2V0RGVmYXVsdEdyb3VwKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRQcm9ncmVzc0JhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGlkZVByb2dyZXNzQmFyKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUmVwb3J0ZXIuYmF0IGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUmVwb3J0ZXIuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViOGZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJSZXBvcnRlci5iYXQKQEAgLTAsMCArMSwyIEBACitAZWNobyBvZmYKK2phdmEgLWNsYXNzcGF0aCBSQk1hbmFnZXIuamFyO2xpYlx4ZXJjZXMuamFyOy4gY29tLmlibS5yYm0uUkJSZXBvcnRlciAlMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlJlcG9ydGVyLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJSZXBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlN2FjOGQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJSZXBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMTE5MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitpbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMuZG9tLkRvY3VtZW50SW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemUuKjsKK2ltcG9ydCBvcmcudzNjLmRvbS4qOworCitpbXBvcnQgY29tLmlibS5yYm0uZ3VpLlJCTWFuYWdlckdVSTsKKworLyoqCisgKiBSQlJlcG9ydGVyIGlzIGEgZnVsbHkgZnVuY3Rpb25hbCBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgc2VwYXJhdGUgZnJvbSBSQk1hbmFnZXIuCisgKiBUaGUgcmVwb3J0IHByb2R1Y2VzIHN0YXRpc3RpY2FsbHkgYmFzZWQgcmVwb3J0cyBvbiBzcGVjaWZpZWQgcmVzb3VyY2UgYnVuZGxlcywKKyAqIGFuZCBpdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2V0IHRpbWUgaW50ZXJ2YWxzIGF0IHdoaWNoIHRob3NlIHJlcG9ydHMgd2lsbCBiZQorICogZ2VuZXJhdGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCB1c2FnZSBzZWUgdGhlCisgKiBjb21tZW50cyBmb3IgdGhlIG1haW4oKSBtZXRob2QuCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIFJCUmVwb3J0ZXIgZXh0ZW5kcyBKRnJhbWUgeworCQorCS8vICoqIENPTVBPTkVOVFMgKioKKwlKTGFiZWwgICAgICAgc3RhdHVzTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZXMgaWYgdGhlIHJlcG9ydGVkIGlzIHJ1bm5pbmcKKwlKQnV0dG9uICAgICAgc3RhdHVzQnV0dG9uOyAgICAgICAgICAgICAgICAgICAgICAvLyBCdXR0b24gZm9yIHRvZ2dsaW5nIHRoZSByZXBvcnRlciBvbi9vZmYKKwlKTGFiZWwgICAgICAgbmV4dFJlcG9ydExhYmVsOyAgICAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZXMgZGF0ZS90aW1lIG9mIG5leHQgcmVwb3J0CisJSkxhYmVsICAgICAgIGxhc3RSZXBvcnRMYWJlbDsgICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGVzIGRhdGUvdGltZSBvZiBsYXN0IHJlcG9ydAorCUpUZXh0RmllbGQgICBidW5kbGVGaWVsZDsgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGljYXRlcyBpbnB1dCBiYXNlIGNsYXNzIGZpbGUKKwlKVGV4dEZpZWxkICAgZGlyZWN0b3J5RmllbGQ7ICAgICAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZXMgb3V0cHV0IGRpcmVjdG9yeQorCUpDaGVja0JveCAgICB0ZXh0Q2hlY2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRleHQgcmVwb3J0IGdlbmVyYXRlZD8KKwlKQ2hlY2tCb3ggICAgaHRtbENoZWNrOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJcyBIVE1MIHJlcG9ydCBnZW5lcmF0ZWQ/CisJSkNoZWNrQm94ICAgIHhtbENoZWNrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgWE1MIHJlcG9ydCBnZW5lcmF0ZWQ/CisJSkNoZWNrQm94ICAgIHNjYW5DaGVjazsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgY29kZSBzY2FuIHBlcmZvcm1lZD8KKwlKVGV4dEZpZWxkICAgdGV4dEZpZWxkOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IHJlcG9ydCBmaWxlIG5hbWUKKwlKVGV4dEZpZWxkICAgaHRtbEZpZWxkOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIVE1MIHJlcG9ydCBmaWxlIG5hbWUKKwlKVGV4dEZpZWxkICAgeG1sRmllbGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUwgcmVwb3J0IGZpbGUgbmFtZQorCUpUZXh0RmllbGQgICBzY2FuRmllbGQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTCBzY2FubmVyIGZpbGUgbG9jYXRpb24KKwlKQ29tYm9Cb3ggICAgdGV4dENvbWJvOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IHJlcG9ydCBkZXRhaWwgbGV2ZWwKKwlKQ29tYm9Cb3ggICAgaHRtbENvbWJvOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIVE1MIHJlcG9ydCBkZXRhaWwgbGV2ZWwKKwlKQ29tYm9Cb3ggICAgeG1sQ29tYm87ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUwgcmVwb3J0IGRldGFpbCBsZXZlbAorCUpSYWRpb0J1dHRvbiBzZXF1ZW50aWFsUmFkaW87ICAgICAgICAgICAgICAgICAgIC8vIFJlcG9ydCBhdCBzZXF1ZW50aWFsIGludGVydmFsPworCUpSYWRpb0J1dHRvbiBkZWZpbmVkUmFkaW87ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcG9ydCBhdCBkZWZpbmVkIHRpbWU/CisJSkNvbWJvQm94ICAgIHZhbHVlQ29tYm87ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHVuaXRzIHRvIHdhaXQgYmV0d2VlbiByZXBvcnRzCisJSkNvbWJvQm94ICAgIHVuaXRDb21ibzsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pdHMgb2YgdGltZQorCUpDb21ib0JveCAgICBob3VyQ29tYm87ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmluZWQgdGltZSB0byByZXBvcnQgLS0gaG91cnMKKwlKQ29tYm9Cb3ggICAgbWludXRlQ29tYm87ICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmVkIHRpbWUgdG8gcmVwb3J0IC0tIG1pbnV0ZXMKKwlKQ29tYm9Cb3ggICAgZGF5Q29tYm87ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmVkIHRpbWUgdG8gcmVwb3J0IC0tIGRheQorCQorCS8vICoqIEZpbGUgQ2hvb3NlciAqKgorCUpGaWxlQ2hvb3NlciBidW5kbGVGaWxlQ2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKwlKRmlsZUNob29zZXIgZGlyZWN0b3J5RmlsZUNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisJSkZpbGVDaG9vc2VyIHNjYW5GaWxlQ2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKwkKKwkvLyAqKiBEQVRBICoqCisJRGF0ZSBsYXN0UmVwb3J0ID0gbnVsbDsKKwlEYXRlIG5leHRSZXBvcnQgPSBudWxsOworCWJvb2xlYW4gcnVubmluZyA9IGZhbHNlOworICAgIC8qKiBGb3IgZ2VuZXJhdGluZyBhIHJlcG9ydCAqLworICAgIFJCTWFuYWdlciByYm07CisJCisJcHJpdmF0ZSBSQlJlcG9ydGVyKGJvb2xlYW4gbWFrZVZpc2libGUpIHsKKwkJdHJ5IHsKKwkJCS8vIEdldCB0aGUgbG9vayBhbmQgZmVlbCBmcm9tIHByZWZlcmVuY2VzCQorCQkJdHJ5IHsKKwkJCQlTdHJpbmcgbGFmID0gUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgibG9va2FuZGZlZWwiKTsKKwkJCQlpZiAoIWxhZi5lcXVhbHMoIiIpKQorCQkJCQlVSU1hbmFnZXIuc2V0TG9va0FuZEZlZWwobGFmKTsKKwkJCX0gCisJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsgCisJCQl9CisJCQkvLyBHZXQgdGhlIGxvY2FsZSBmcm9tIHByZWZlcmVuY2VzCisJCQlpZiAoIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoImxvY2FsZSIpLmVxdWFscygiIikpIHsKKwkJCQlTdHJpbmcgbG9jYWxlU3RyID0gUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgibG9jYWxlIik7CisJCQkJU3RyaW5nIGxhbmd1YWdlID0gUmVzb3VyY2VzLmdldExhbmd1YWdlKGxvY2FsZVN0cik7CisJCQkJU3RyaW5nIGNvdW50cnkgPSBSZXNvdXJjZXMuZ2V0Q291bnRyeShsb2NhbGVTdHIpOworCQkJCVN0cmluZyB2YXJpYW50ID0gUmVzb3VyY2VzLmdldFZhcmlhbnQobG9jYWxlU3RyKTsKKwkJCQlpZiAobGFuZ3VhZ2UgPT0gbnVsbCB8fCBsYW5ndWFnZS5lcXVhbHMoIiIpIHx8IGxhbmd1YWdlLmxlbmd0aCgpID4gMykgbGFuZ3VhZ2UgPSAiZW4iOworCQkJCWlmIChjb3VudHJ5ID09IG51bGwpIGNvdW50cnkgPSBuZXcgU3RyaW5nKCk7CisJCQkJaWYgKHZhcmlhbnQgPT0gbnVsbCkgUmVzb3VyY2VzLnNldExvY2FsZShuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5KSk7CisJCQkJZWxzZSBSZXNvdXJjZXMuc2V0TG9jYWxlKG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpKTsKKwkJCX0KKwkJCVJlc291cmNlcy5pbml0QnVuZGxlKCk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCWluaXRDb21wb25lbnRzKCk7CisJCXNldFZpc2libGUobWFrZVZpc2libGUpOworCQlUaHJlYWQgcmVwb3J0VGhyZWFkID0gbmV3IFRocmVhZCgpeworCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChuZXh0UmVwb3J0ICE9IG51bGwgJiYgKG5leHRSZXBvcnQuY29tcGFyZVRvKG5ldyBEYXRlKCkpIDw9IDApKSB7CisJCQkJCXRyeSB7IGdlbmVyYXRlUmVwb3J0cygpOyB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHt9CisJCQkJfQorCQkJCWlmIChuZXh0UmVwb3J0ID09IG51bGwpCisJCQkJICAgIG5leHRSZXBvcnQgPSBnZW5lcmF0ZU5leHRSZXBvcnREYXRlKCk7CisJCQkJdXBkYXRlU3RhdHVzQ29tcG9uZW50cygpOworCQkJCXVwZGF0ZURhdGVGaWVsZHMoKTsKKwkJCQl3aGlsZSAodHJ1ZSkgeworCQkJCQlpZiAocnVubmluZyAmJiAobmV4dFJlcG9ydC5jb21wYXJlVG8obmV3IERhdGUoKSkgPCAwKSkgeworCQkJCQkJdHJ5IHtnZW5lcmF0ZVJlcG9ydHMoKTt9CisJCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2cobnVsbCwgaW9lLmdldE1lc3NhZ2UoKSwKKwkJCQkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksCisJCQkJCQkJCQkJCQkJCSAgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJdHJ5IHsKKwkJCQkJCXNsZWVwKDEwMDApOworCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisJCXJlcG9ydFRocmVhZC5zdGFydCgpOworCX0KKwkKKwkvLyBDYWxsZWQgd2hlbiBhIHJlcG9ydCBzaG91bGQgYmUgZ2VuZXJhdGVkLiBEb2VzIG5vdCBjaGVjayBpZiBpdCBzaG91bGQgYmUgZ2VuZXJhdGVkCisJcHJpdmF0ZSB2b2lkIGdlbmVyYXRlUmVwb3J0cygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCUZpbGUgYmFzZUZpbGUgPSBuZXcgRmlsZShidW5kbGVGaWVsZC5nZXRUZXh0KCkpOworCQlpZiAoYmFzZUZpbGUgPT0gbnVsbCB8fCAhYmFzZUZpbGUuaXNGaWxlKCkpCisJCSAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlNwZWNpZmllZCBpbnB1dCBmaWxlIGlzIHVudXNhYmxlIik7CisJCUZpbGUgZGlyZWN0b3J5ID0gbmV3IEZpbGUoZGlyZWN0b3J5RmllbGQuZ2V0VGV4dCgpKTsKKwkJcmJtID0gbmV3IFJCTWFuYWdlcihiYXNlRmlsZSk7CisJCQorCQlpZiAocmJtID09IG51bGwpCisJCSAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlVuYWJsZSB0byBsb2FkIHRoZSByZXNvdXJjZSBidW5kbGUgZmlsZSIpOworCQlpZiAoZGlyZWN0b3J5ID09IG51bGwgfHwgIWRpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKQorCQkgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJTcGVjaWZpZWQgb3V0cHV0IGRpcmVjdG9yeSBpcyB1bnVzYWJsZSIpOworCQlSQlJlcG9ydGVyU2Nhbm5lciBzY2FubmVyID0gbnVsbDsKKwkJaWYgKHNjYW5DaGVjay5pc1NlbGVjdGVkKCkpIHsKKwkJCXNjYW5uZXIgPSBuZXcgUkJSZXBvcnRlclNjYW5uZXIoKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmVsZW1lbnRBdCgwKSwKKwkJCQkJCQkJCQkgICAgbmV3IEZpbGUoc2NhbkZpZWxkLmdldFRleHQoKSkpOworCQkJc2Nhbm5lci5wZXJmb3JtU2NhbigpOworCQl9CisJCWlmICh0ZXh0Q2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQlGaWxlIHRleHRGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCB0ZXh0RmllbGQuZ2V0VGV4dCgpKTsKKwkJCVN0cmluZyB0ZXh0UmVwb3J0ID0gZ2V0QWxsTGFuZ3VhZ2VSZXBvcnRzKHRleHRDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMCk7CisJCQlpZiAoc2NhbkNoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJCS8vIEFkZCBmaWxlIHNjYW4gaW5mb3JtYXRpb24KKwkJCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQkJCWJ1ZmZlci5hcHBlbmQoIlxuXG5Db2RlIFNjYW4gUmVzdWx0czpcblxuIik7CisJCQkJYnVmZmVyLmFwcGVuZCgiXG5cdE51bWJlciBvZiB1bmlxdWUgcmVzb3VyY2VzIGZvdW5kOiAiICsgc2Nhbm5lci5nZXROdW1iZXJSZXNvdXJjZXNGb3VuZCgpKTsKKwkJCQlidWZmZXIuYXBwZW5kKCJcblx0TnVtYmVyIG9mIHJlc291cmNlcyBtaXNzaW5nIGZyb20gYnVuZGxlOiAiICsgc2Nhbm5lci5nZXROdW1iZXJNaXNzaW5nUmVzb3VyY2VzKCkpOworCQkJCS8vIE1pc3NpbmcgcmVzb3VyY2VzIGZyb20gdGhlIGJ1bmRsZQorCQkJCWJ1ZmZlci5hcHBlbmQoIlxuXHRNaXNzaW5nIFJlc291cmNlczogIik7CisJCQkJVmVjdG9yIHYgPSBzY2FubmVyLmdldE1pc3NpbmdSZXNvdXJjZXMoKTsKKwkJCQlmb3IgKGludCBpPTA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisJCQkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpdi5lbGVtZW50QXQoaSk7CisJCQkJCWlmICh0ZXh0Q29tYm8uZ2V0U2VsZWN0ZWRJbmRleCgpID09IDApIHsKKwkJCQkJCWJ1ZmZlci5hcHBlbmQoIlxuXHRcdCIgKyByZXN1bHQuZ2V0TmFtZSgpICsgIiAoIiArIHJlc3VsdC5nZXRPY2N1cmFuY2VzKCkuc2l6ZSgpICsgIiBPY2N1cmFuY2VzKSIpOworCQkJCQkJYnVmZmVyLmFwcGVuZCgiXG5cdFx0XHQiICsgcmVzdWx0LmdldE9jY3VyYW5jZXMoKSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlidWZmZXIuYXBwZW5kKChpPT0wID8gIiIgOiAiLCAiKSArIHJlc3VsdC5nZXROYW1lKCkgKyAiICgiICsgcmVzdWx0LmdldE9jY3VyYW5jZXMoKS5zaXplKCkgKyAiIE9jY3VyYW5jZXMpIik7CisJCQkJCX0KKwkJCQl9CisJCQkJLy8gQnVuZGxlIHJlc291cmNlcyBub3QgZm91bmQgaW4gdGhlIGNvZGUKKwkJCQlidWZmZXIuYXBwZW5kKCJcblx0TnVtYmVyIG9mIHBvdGVudGlhbGx5IHVudXNlZCByZXNvdXJjZXMgaW4gYnVuZGxlOiAiICsgc2Nhbm5lci5nZXROdW1iZXJVbnVzZWRSZXNvdXJjZXMoKSk7CisJCQkJdiA9IHNjYW5uZXIuZ2V0VW51c2VkUmVzb3VyY2VzKCk7CisJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQlTY2FuUmVzdWx0IHJlc3VsdCA9IChTY2FuUmVzdWx0KXYuZWxlbWVudEF0KGkpOworCQkJCQlpZiAodGV4dENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKSB7CisJCQkJCQlidWZmZXIuYXBwZW5kKCJcblx0XHQiICsgcmVzdWx0LmdldE5hbWUoKSArICIgKEdyb3VwOiAiICsgcmVzdWx0LmdldEdyb3VwTmFtZSgpICsgIikiKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWJ1ZmZlci5hcHBlbmQoKGk9PTAgPyAiIiA6ICIsICIpICsgcmVzdWx0LmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQkJCisJCQkJdGV4dFJlcG9ydCA9IHRleHRSZXBvcnQgKyBidWZmZXIudG9TdHJpbmcoKTsKKwkJCX0KKwkJCUZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcih0ZXh0RmlsZSk7CisJCQlmdy53cml0ZSh0ZXh0UmVwb3J0KTsKKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9CisJCWlmIChodG1sQ2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQlGaWxlIGh0bWxGaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5LCBodG1sRmllbGQuZ2V0VGV4dCgpKTsKKwkJCURvY3VtZW50IGh0bWxSZXBvcnQgPSBnZXRIVE1MUmVwb3J0eihodG1sQ29tYm8uZ2V0U2VsZWN0ZWRJbmRleCgpID09IDApOworCQkJaWYgKHNjYW5DaGVjay5pc1NlbGVjdGVkKCkpIHsKKwkJCQkvLyBBZGQgZmlsZSBzY2FuIGluZm9ybWF0aW9uCisJCQkJRWxlbWVudCBodG1sX2VsZW0gPSBodG1sUmVwb3J0LmdldERvY3VtZW50RWxlbWVudCgpOworCQkJCU5vZGVMaXN0IG5sID0gaHRtbF9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJCT0RZIik7CisJCQkJRWxlbWVudCBib2R5X2VsZW0gPSAoRWxlbWVudClubC5pdGVtKDApOworCQkJCUVsZW1lbnQgaDJfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiSDIiKTsKKwkJCQlUZXh0ICAgIGgyX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKCJDb2RlIFNjYW4gUmVzdWx0cyIpOworCQkJCUVsZW1lbnQgYmxvY2tfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiQkxPQ0tRVU9URSIpOworCQkJCUVsZW1lbnQgcDFfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiUCIpOworCQkJCUVsZW1lbnQgcDJfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiUCIpOworCQkJCUVsZW1lbnQgcDNfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiUCIpOworCQkJCVRleHQgICAgcDFfdGV4dCA9IGh0bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUoIk51bWJlciBvZiB1bmlxdWUgcmVzb3VyY2VzIGZvdW5kOiAiICsKKwkJCQkJCQkJCQkJCQkJCXNjYW5uZXIuZ2V0TnVtYmVyTWlzc2luZ1Jlc291cmNlcygpKTsKKwkJCQlUZXh0ICAgIHAyX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKCJOdW1iZXIgb2YgcmVzb3VyY2VzIG1pc3NpbmcgZnJvbSBidW5kbGU6ICIgKworCQkJCQkJCQkJCQkJCQkJc2Nhbm5lci5nZXROdW1iZXJNaXNzaW5nUmVzb3VyY2VzKCkpOworCQkJCVRleHQgICAgcDNfdGV4dCA9IGh0bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUoIk51bWJlciBvZiBwb3RlbnRpYWxseSB1bnVzZWQgcmVzb3VyY2VzIGluIGJ1bmRsZTogIiArCisJCQkJCQkJCQkJCQkJCQlzY2FubmVyLmdldE51bWJlclVudXNlZFJlc291cmNlcygpKTsKKwkJCQkKKwkJCQloMl9lbGVtLmFwcGVuZENoaWxkKGgyX3RleHQpOworCQkJCXAxX2VsZW0uYXBwZW5kQ2hpbGQocDFfdGV4dCk7CisJCQkJcDJfZWxlbS5hcHBlbmRDaGlsZChwMl90ZXh0KTsKKwkJCQlwM19lbGVtLmFwcGVuZENoaWxkKHAzX3RleHQpOworCQkJCWJsb2NrX2VsZW0uYXBwZW5kQ2hpbGQocDFfZWxlbSk7CisJCQkJYmxvY2tfZWxlbS5hcHBlbmRDaGlsZChwMl9lbGVtKTsKKwkJCQlibG9ja19lbGVtLmFwcGVuZENoaWxkKHAzX2VsZW0pOworCQkJCWJvZHlfZWxlbS5hcHBlbmRDaGlsZChoMl9lbGVtKTsKKwkJCQlib2R5X2VsZW0uYXBwZW5kQ2hpbGQoYmxvY2tfZWxlbSk7CisJCQkJCisJCQkJLy8gTWlzc2luZyByZXNvdXJjZXMgZnJvbSB0aGUgYnVuZGxlCisJCQkJVGV4dCAgIG1pc3NpbmdfdGV4dCA9IG51bGw7CisJCQkJVmVjdG9yIHYgPSBzY2FubmVyLmdldE1pc3NpbmdSZXNvdXJjZXMoKTsKKwkJCQlpZiAoaHRtbENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKSB7CisJCQkJCUVsZW1lbnQgdWxfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiVUwiKTsKKwkJCQkJbWlzc2luZ190ZXh0ID0gaHRtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZSgiTWlzc2luZyBSZXNvdXJjZXM6Iik7CisJCQkJCXVsX2VsZW0uYXBwZW5kQ2hpbGQobWlzc2luZ190ZXh0KTsKKwkJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQkJU2NhblJlc3VsdCByZXN1bHQgPSAoU2NhblJlc3VsdCl2LmVsZW1lbnRBdChpKTsKKwkJCQkJCUVsZW1lbnQgbGlfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiTEkiKTsKKwkJCQkJCUVsZW1lbnQgYnJfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKKwkJCQkJCVRleHQgICAgdDFfdGV4dCA9IGh0bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUocmVzdWx0LmdldE5hbWUoKSArICIgKCIgKworCQkJCQkJCQkJCQkJCQkJCQkJCQkgIHJlc3VsdC5nZXRPY2N1cmFuY2VzKCkuc2l6ZSgpICsgIiBPY2N1cmFuY2VzKSIpOworCQkJCQkJVGV4dCAgICB0Ml90ZXh0ID0gaHRtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZShyZXN1bHQuZ2V0T2NjdXJhbmNlcygpLnRvU3RyaW5nKCkpOworCQkJCQkJbGlfZWxlbS5hcHBlbmRDaGlsZCh0MV90ZXh0KTsKKwkJCQkJCWxpX2VsZW0uYXBwZW5kQ2hpbGQoYnJfZWxlbSk7CisJCQkJCQlsaV9lbGVtLmFwcGVuZENoaWxkKHQyX3RleHQpOworCQkJCQkJdWxfZWxlbS5hcHBlbmRDaGlsZChsaV9lbGVtKTsKKwkJCQkJfQorCQkJCQlwMl9lbGVtLmFwcGVuZENoaWxkKHVsX2VsZW0pOworCQkJCX0gZWxzZSB7CisJCQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCQkJCWJ1ZmZlci5hcHBlbmQoIk1pc3NpbmcgUmVzb3VyY2VzOiAiKTsKKwkJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQkJU2NhblJlc3VsdCByZXN1bHQgPSAoU2NhblJlc3VsdCl2LmVsZW1lbnRBdChpKTsKKwkJCQkJCWJ1ZmZlci5hcHBlbmQoKGk9PTAgPyAiIiA6ICIsICIpICsgcmVzdWx0LmdldE5hbWUoKSArICIgKCIgKyByZXN1bHQuZ2V0T2NjdXJhbmNlcygpLnNpemUoKSArICIgT2NjdXJhbmNlcykiKTsKKwkJCQkJfQorCQkJCQltaXNzaW5nX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKGJ1ZmZlci50b1N0cmluZygpKTsKKwkJCQkJRWxlbWVudCBicl9lbGVtID0gaHRtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJCUiIpOworCQkJCQlwMl9lbGVtLmFwcGVuZENoaWxkKGJyX2VsZW0pOworCQkJCQlwMl9lbGVtLmFwcGVuZENoaWxkKG1pc3NpbmdfdGV4dCk7CisJCQkJfQorCQkJCS8vIEJ1bmRsZSByZXNvdXJjZXMgbm90IGZvdW5kIGluIHRoZSBjb2RlCisJCQkJVGV4dCAgIHVudXNlZF90ZXh0ID0gbnVsbDsKKwkJCQl2ID0gc2Nhbm5lci5nZXRVbnVzZWRSZXNvdXJjZXMoKTsKKwkJCQlpZiAoaHRtbENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKSB7CisJCQkJCUVsZW1lbnQgdWxfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiVUwiKTsKKwkJCQkJdW51c2VkX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKCJVbnVzZWQgUmVzb3VyY2VzOiIpOworCQkJCQl1bF9lbGVtLmFwcGVuZENoaWxkKHVudXNlZF90ZXh0KTsKKwkJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQkJU2NhblJlc3VsdCByZXN1bHQgPSAoU2NhblJlc3VsdCl2LmVsZW1lbnRBdChpKTsKKwkJCQkJCUVsZW1lbnQgbGlfZWxlbSA9IGh0bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiTEkiKTsKKwkJCQkJCVRleHQgICAgdDFfdGV4dCA9IGh0bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUocmVzdWx0LmdldE5hbWUoKSArICIgKEdyb3VwOiAiICsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJICByZXN1bHQuZ2V0R3JvdXBOYW1lKCkgKyAiKSIpOworCQkJCQkJbGlfZWxlbS5hcHBlbmRDaGlsZCh0MV90ZXh0KTsKKwkJCQkJCXVsX2VsZW0uYXBwZW5kQ2hpbGQobGlfZWxlbSk7CisJCQkJCX0KKwkJCQkJcDNfZWxlbS5hcHBlbmRDaGlsZCh1bF9lbGVtKTsKKwkJCQl9IGVsc2UgeworCQkJCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQkJCQlidWZmZXIuYXBwZW5kKCJVbnVzZWQgUmVzb3VyY2VzOiAiKTsKKwkJCQkJZm9yIChpbnQgaT0wOyBpIDwgdi5zaXplKCk7IGkrKykgeworCQkJCQkJU2NhblJlc3VsdCByZXN1bHQgPSAoU2NhblJlc3VsdCl2LmVsZW1lbnRBdChpKTsKKwkJCQkJCWJ1ZmZlci5hcHBlbmQoKGk9PTAgPyAiIiA6ICIsICIpICsgcmVzdWx0LmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQkJdW51c2VkX3RleHQgPSBodG1sUmVwb3J0LmNyZWF0ZVRleHROb2RlKGJ1ZmZlci50b1N0cmluZygpKTsKKwkJCQkJRWxlbWVudCBicl9lbGVtID0gaHRtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJCUiIpOworCQkJCQlwM19lbGVtLmFwcGVuZENoaWxkKGJyX2VsZW0pOworCQkJCQlwM19lbGVtLmFwcGVuZENoaWxkKHVudXNlZF90ZXh0KTsKKwkJCQl9CisJCQl9CisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoaHRtbEZpbGUpOworCQkJT3V0cHV0Rm9ybWF0IG9mID0gbmV3IE91dHB1dEZvcm1hdChodG1sUmVwb3J0KTsKKwkJCW9mLnNldEluZGVudGluZyh0cnVlKTsKKwkJCW9mLnNldEVuY29kaW5nKCJJU08tODg1OS0xIik7CisJCQlIVE1MU2VyaWFsaXplciBzZXJpYWxpemVyID0gbmV3IEhUTUxTZXJpYWxpemVyKGZ3LCBvZik7CisJCQlzZXJpYWxpemVyLnNlcmlhbGl6ZShodG1sUmVwb3J0KTsKKwkJfQorCQlpZiAoeG1sQ2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQlGaWxlIHhtbEZpbGUgPSBuZXcgRmlsZShkaXJlY3RvcnksIHhtbEZpZWxkLmdldFRleHQoKSk7CisJCQlEb2N1bWVudCB4bWxSZXBvcnQgPSBnZXRYTUxSZXBvcnR6KHhtbENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKTsKKwkJCWlmIChzY2FuQ2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQkJLy8gQWRkIGZpbGUgc2NhbiBpbmZvcm1hdGlvbgorCQkJCUVsZW1lbnQgcm9vdCA9IHhtbFJlcG9ydC5nZXREb2N1bWVudEVsZW1lbnQoKTsKKwkJCQlFbGVtZW50IGNvZGVfc2Nhbl9lbGVtID0geG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIkNPREVfU0NBTiIpOworCQkJCUVsZW1lbnQgdW5pcXVlX2VsZW0gPSB4bWxSZXBvcnQuY3JlYXRlRWxlbWVudCgiVU5JUVVFX1JFU09VUkNFUyIpOworCQkJCUVsZW1lbnQgbWlzc2luZ19lbGVtID0geG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIk1JU1NJTkdfUkVTT1VSQ0VTIik7CisJCQkJRWxlbWVudCB1bnVzZWRfZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJVTlVTRURfUkVTT1VSQ0VTIik7CisJCQkJRWxlbWVudCB1bmlxdWVfdG90YWxfZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJUT1RBTCIpOworCQkJCUVsZW1lbnQgbWlzc2luZ190b3RhbF9lbGVtID0geG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlRPVEFMIik7CisJCQkJRWxlbWVudCB1bnVzZWRfdG90YWxfZWxlbSA9IHhtbFJlcG9ydC5jcmVhdGVFbGVtZW50KCJUT1RBTCIpOworCQkJCVRleHQgICAgdW5pcXVlX3RvdGFsX3RleHQgPSB4bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLnZhbHVlT2Yoc2Nhbm5lci5nZXROdW1iZXJNaXNzaW5nUmVzb3VyY2VzKCkpKTsKKwkJCQlUZXh0ICAgIG1pc3NpbmdfdG90YWxfdGV4dCA9IHhtbFJlcG9ydC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcudmFsdWVPZihzY2FubmVyLmdldE51bWJlck1pc3NpbmdSZXNvdXJjZXMoKSkpOworCQkJCVRleHQgICAgdW51c2VkX3RvdGFsX3RleHQgPSB4bWxSZXBvcnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLnZhbHVlT2Yoc2Nhbm5lci5nZXROdW1iZXJVbnVzZWRSZXNvdXJjZXMoKSkpOworCQkJCQorCQkJCXVuaXF1ZV90b3RhbF9lbGVtLmFwcGVuZENoaWxkKHVuaXF1ZV90b3RhbF90ZXh0KTsKKwkJCQltaXNzaW5nX3RvdGFsX2VsZW0uYXBwZW5kQ2hpbGQobWlzc2luZ190b3RhbF90ZXh0KTsKKwkJCQl1bnVzZWRfdG90YWxfZWxlbS5hcHBlbmRDaGlsZCh1bnVzZWRfdG90YWxfdGV4dCk7CisJCQkJdW5pcXVlX2VsZW0uYXBwZW5kQ2hpbGQodW5pcXVlX3RvdGFsX2VsZW0pOworCQkJCW1pc3NpbmdfZWxlbS5hcHBlbmRDaGlsZChtaXNzaW5nX3RvdGFsX2VsZW0pOworCQkJCXVudXNlZF9lbGVtLmFwcGVuZENoaWxkKHVudXNlZF90b3RhbF9lbGVtKTsKKwkJCQljb2RlX3NjYW5fZWxlbS5hcHBlbmRDaGlsZCh1bmlxdWVfZWxlbSk7CisJCQkJY29kZV9zY2FuX2VsZW0uYXBwZW5kQ2hpbGQobWlzc2luZ19lbGVtKTsKKwkJCQljb2RlX3NjYW5fZWxlbS5hcHBlbmRDaGlsZCh1bnVzZWRfZWxlbSk7CisJCQkJcm9vdC5hcHBlbmRDaGlsZChjb2RlX3NjYW5fZWxlbSk7CisJCQkJLy8gTWlzc2luZyByZXNvdXJjZXMgZnJvbSB0aGUgYnVuZGxlCisJCQkJVmVjdG9yIHYgPSBzY2FubmVyLmdldE1pc3NpbmdSZXNvdXJjZXMoKTsKKwkJCQlmb3IgKGludCBpPTA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisJCQkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpdi5lbGVtZW50QXQoaSk7CisJCQkJCUVsZW1lbnQgaXRlbV9lbGVtID0geG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlJFU09VUkNFIik7CisJCQkJCWl0ZW1fZWxlbS5zZXRBdHRyaWJ1dGUoIk5BTUUiLHJlc3VsdC5nZXROYW1lKCkpOworCQkJCQlpZiAoeG1sQ29tYm8uZ2V0U2VsZWN0ZWRJbmRleCgpID09IDApIHsKKwkJCQkJCVZlY3RvciBvY2NfdiA9IHJlc3VsdC5nZXRPY2N1cmFuY2VzKCk7CisJCQkJCQlmb3IgKGludCBqPTA7IGogPCBvY2Nfdi5zaXplKCk7IGorKykgeworCQkJCQkJCU9jY3VyYW5jZSBvY2MgPSAoT2NjdXJhbmNlKW9jY192LmVsZW1lbnRBdChqKTsKKwkJCQkJCQlFbGVtZW50IG9jY19lbGVtID0geG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIk9DQ1VSQU5DRSIpOworCQkJCQkJCW9jY19lbGVtLnNldEF0dHJpYnV0ZSgiRklMRV9OQU1FIiwgb2NjLmdldEZpbGVOYW1lKCkpOworCQkJCQkJCW9jY19lbGVtLnNldEF0dHJpYnV0ZSgiRklMRV9QQVRIIiwgb2NjLmdldEZpbGVQYXRoKCkpOworCQkJCQkJCW9jY19lbGVtLnNldEF0dHJpYnV0ZSgiTElORV9OVU1CRVIiLCBTdHJpbmcudmFsdWVPZihvY2MuZ2V0TGluZU51bWJlcigpKSk7CisJCQkJCQkJaXRlbV9lbGVtLmFwcGVuZENoaWxkKG9jY19lbGVtKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQltaXNzaW5nX2VsZW0uYXBwZW5kQ2hpbGQoaXRlbV9lbGVtKTsKKwkJCQl9CisJCQkJLy8gQnVuZGxlIHJlc291cmNlcyBub3QgZm91bmQgaW4gdGhlIGNvZGUKKwkJCQl2ID0gc2Nhbm5lci5nZXRVbnVzZWRSZXNvdXJjZXMoKTsKKwkJCQlmb3IgKGludCBpPTA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CisJCQkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpdi5lbGVtZW50QXQoaSk7CisJCQkJCUVsZW1lbnQgaXRlbV9lbGVtID0geG1sUmVwb3J0LmNyZWF0ZUVsZW1lbnQoIlJFU09VUkNFIik7CisJCQkJCWl0ZW1fZWxlbS5zZXRBdHRyaWJ1dGUoIk5BTUUiLHJlc3VsdC5nZXROYW1lKCkpOworCQkJCQlpdGVtX2VsZW0uc2V0QXR0cmlidXRlKCJHUk9VUCIscmVzdWx0LmdldEdyb3VwTmFtZSgpKTsKKwkJCQkJdW51c2VkX2VsZW0uYXBwZW5kQ2hpbGQoaXRlbV9lbGVtKTsKKwkJCQl9CisJCQl9CisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoeG1sRmlsZSk7CisJCQlPdXRwdXRGb3JtYXQgb2YgPSBuZXcgT3V0cHV0Rm9ybWF0KHhtbFJlcG9ydCk7CisJCQlvZi5zZXRJbmRlbnRpbmcodHJ1ZSk7CisJCQlvZi5zZXRFbmNvZGluZygiSVNPLTg4NTktMSIpOworCQkJWE1MU2VyaWFsaXplciBzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoZncsIG9mKTsKKwkJCXNlcmlhbGl6ZXIuc2VyaWFsaXplKHhtbFJlcG9ydCk7CisJCX0KKwkJCisJCWxhc3RSZXBvcnQgPSBuZXcgRGF0ZSgpOworCQluZXh0UmVwb3J0ID0gZ2VuZXJhdGVOZXh0UmVwb3J0RGF0ZSgpOworCQl1cGRhdGVEYXRlRmllbGRzKCk7CisJCWlmICghaXNWaXNpYmxlKCkpIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiUkJSZXBvcnRlcjogR2VuZXJhdGVkIHJlcG9ydCBhdCAiICsgbGFzdFJlcG9ydC50b1N0cmluZygpKTsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiUkJSZXBvcnRlcjogTmV4dCByZXBvcnQgYXQgIiArIG5leHRSZXBvcnQudG9TdHJpbmcoKSk7CisJCX0KKwl9CisJCisJLy8gQXNzdW1lcyB0aGUgbGFzdCByZXBvcnQgd2FzIGp1c3QgZ2VuZXJhdGVkLCBhbmQgY29tcHV0ZXMgdGhlIG5leHQgcmVwb3J0IHRpbWUgYWNjb3JkaW5nbHkKKwlwcml2YXRlIERhdGUgZ2VuZXJhdGVOZXh0UmVwb3J0RGF0ZSgpIHsKKwkJRGF0ZSByZXREYXRlID0gbnVsbDsKKwkJR3JlZ29yaWFuQ2FsZW5kYXIgbm93ID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisJCWlmIChzZXF1ZW50aWFsUmFkaW8uaXNTZWxlY3RlZCgpKSB7CisJCQlpbnQgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCQlpZiAodW5pdENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAwKSBub3cuYWRkKENhbGVuZGFyLk1JTlVURSwgdmFsdWUpOworCQkJZWxzZSBpZiAodW5pdENvbWJvLmdldFNlbGVjdGVkSW5kZXgoKSA9PSAxKSBub3cuYWRkKENhbGVuZGFyLkhPVVIsIHZhbHVlKTsKKwkJCWVsc2UgaWYgKHVuaXRDb21iby5nZXRTZWxlY3RlZEluZGV4KCkgPT0gMikgbm93LmFkZChDYWxlbmRhci5EQVRFLCB2YWx1ZSk7CisJCQlyZXREYXRlID0gbm93LmdldFRpbWUoKTsKKwkJfSBlbHNlIGlmIChkZWZpbmVkUmFkaW8uaXNTZWxlY3RlZCgpKSB7CisJCQlpbnQgaG91ciA9IEludGVnZXIucGFyc2VJbnQoaG91ckNvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOworCQkJaW50IG1pbnV0ZSA9IEludGVnZXIucGFyc2VJbnQobWludXRlQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCQlpbnQgZGF5ID0gZGF5Q29tYm8uZ2V0U2VsZWN0ZWRJbmRleCgpOworCQkJCisJCQlHcmVnb3JpYW5DYWxlbmRhciB0aGVuID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisJCQl0aGVuLnNldChDYWxlbmRhci5IT1VSLCBob3VyKTsKKwkJCXRoZW4uc2V0KENhbGVuZGFyLk1JTlVURSwgbWludXRlKTsKKwkJCXRoZW4uc2V0KENhbGVuZGFyLlNFQ09ORCwgMCk7CisJCQkKKwkJCWlmICh0aGVuLmdldFRpbWUoKS5jb21wYXJlVG8obm93LmdldFRpbWUoKSkgPD0gMCkgdGhlbi5hZGQoQ2FsZW5kYXIuREFURSwgMSk7CisJCQlpZiAoZGF5ID4gMCAmJiBkYXkgPD0gNykgeworCQkJCS8vIE1ha2Ugc3VyZSB3ZSBhcmUgYXQgdGhlIHJpZ2h0IGRheQorCQkJCWJvb2xlYW4gcmlnaHREYXkgPSBmYWxzZTsKKwkJCQl3aGlsZSAoIXJpZ2h0RGF5KSB7CisJCQkJCWludCB3ZWVrRGF5ID0gdGhlbi5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOworCQkJCQlpZiAoKGRheSA9PSAxICYmIHdlZWtEYXkgPT0gQ2FsZW5kYXIuTU9OREFZKSB8fAorCQkJCQkJKGRheSA9PSAyICYmIHdlZWtEYXkgPT0gQ2FsZW5kYXIuVFVFU0RBWSkgfHwKKwkJCQkJCShkYXkgPT0gMyAmJiB3ZWVrRGF5ID09IENhbGVuZGFyLldFRE5FU0RBWSkgfHwKKwkJCQkJCShkYXkgPT0gNCAmJiB3ZWVrRGF5ID09IENhbGVuZGFyLlRIVVJTREFZKSB8fAorCQkJCQkJKGRheSA9PSA1ICYmIHdlZWtEYXkgPT0gQ2FsZW5kYXIuRlJJREFZKSB8fAorCQkJCQkJKGRheSA9PSA2ICYmIHdlZWtEYXkgPT0gQ2FsZW5kYXIuU0FUVVJEQVkpIHx8CisJCQkJCQkoZGF5ID09IDcgJiYgd2Vla0RheSA9PSBDYWxlbmRhci5TVU5EQVkpKSByaWdodERheSA9IHRydWU7CisJCQkJCWVsc2UgdGhlbi5hZGQoQ2FsZW5kYXIuREFURSwgMSk7CisJCQkJfQorCQkJfQorCQkJcmV0RGF0ZSA9IHRoZW4uZ2V0VGltZSgpOworCQl9CisJCVJCTWFuYWdlckdVSS5kZWJ1Z01zZygiTmV4dCBEYXRlOiAiICsgcmV0RGF0ZS50b1N0cmluZygpKTsKKwkJcmV0dXJuIHJldERhdGU7CisJfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHN0cmluZyBiYXNlZCB0ZXh0IHJlcG9ydCBhYm91dCBhbGwgb2YgdGhlIGxhbmd1YWdlIGZpbGVzIG9uIHJlY29yZAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0QWxsTGFuZ3VhZ2VSZXBvcnRzKGJvb2xlYW4gZGV0YWlsZWQpIHsKKyAgICAgICAgU3RyaW5nIHJldFN0ciA9IG5ldyBTdHJpbmcoKTsKKyAgICAgICAgcmV0U3RyID0gICAgIlJlc291cmNlIEJ1bmRsZSBSZXBvcnQ6ICIgKyByYm0uZ2V0QmFzZUNsYXNzKCk7CisgICAgICAgIHJldFN0ciArPSAiXG5SZXBvcnQgR2VuZXJhdGVkOiAgICAgICAiICsgKG5ldyBEYXRlKCkpLnRvU3RyaW5nKCkgKyAiXG5cbiI7CisgICAgICAgIFZlY3RvciBidW5kbGVzID0gcmJtLmdldEJ1bmRsZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgcmV0U3RyICs9IGdldExhbmd1YWdlUmVwb3J0KGRldGFpbGVkLCAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpKTsJCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldFN0cjsKKyAgICB9CisJCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TGFuZ3VhZ2VSZXBvcnQoYm9vbGVhbiBkZXRhaWxlZCwgQnVuZGxlIGRpY3QpIHsKKyAgICAgICAgaWYgKGRpY3QgPT0gbnVsbCkgcmV0dXJuICIiOworICAgICAgICBTdHJpbmcgcmV0U3RyID0gbmV3IFN0cmluZygpOworICAgICAgICByZXRTdHIgKz0gIlxuTGFuZ3VhZ2U6ICIgKyAoZGljdC5sYW5ndWFnZSA9PSBudWxsID8gZGljdC5lbmNvZGluZyA6IGRpY3QubGFuZ3VhZ2UpOworICAgICAgICByZXRTdHIgKz0gKGRpY3QuY291bnRyeSA9PSBudWxsID8gIiIgOiAiIC0gQ291bnRyeTogIiArIGRpY3QuY291bnRyeSk7CisgICAgICAgIHJldFN0ciArPSAoZGljdC52YXJpYW50ID09IG51bGwgPyAiIiA6ICIgLSBWYXJpYW50OiAiICsgZGljdC52YXJpYW50KTsKKyAgICAgICAgcmV0U3RyICs9ICJcbiI7CisgICAgICAgIHJldFN0ciArPSAiICBOdW1iZXIgb2YgTkxTIGl0ZW1zIGluIHRoZSBmaWxlOiAiICsgZGljdC5hbGxJdGVtcy5zaXplKCkgKyAiXG4iOworCQkKKyAgICAgICAgaW50IHVudHJhbnNsYXRlZCA9IDA7CisgICAgICAgIFN0cmluZyB1bnRyYW5zU3RyID0gbmV3IFN0cmluZygpOworICAgICAgICBFbnVtZXJhdGlvbiBpdGVtcyA9IGRpY3QuYWxsSXRlbXMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGl0ZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBCdW5kbGVJdGVtIHRlbXBJdGVtID0gKEJ1bmRsZUl0ZW0paXRlbXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0ZW1wSXRlbS5pc1RyYW5zbGF0ZWQoKSkgY29udGludWU7CisgICAgICAgICAgICB1bnRyYW5zbGF0ZWQrKzsKKyAgICAgICAgICAgIHVudHJhbnNTdHIgKz0gIiAiICsgdGVtcEl0ZW0uZ2V0S2V5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0U3RyICs9ICIgIE51bWJlciBvZiBOTFMgaXRlbXMgbm90IHRyYW5zbGF0ZWQ6ICIgKyB1bnRyYW5zbGF0ZWQ7CisgICAgICAgIGlmIChkZXRhaWxlZCkgeworICAgICAgICAgICAgcmV0U3RyICs9ICJcbiAgVW50cmFuc2xhdGVkIE5MUyBrZXlzOiAiICsgdW50cmFuc1N0cjsJCisgICAgICAgIH0KKwkJCisgICAgICAgIHJldHVybiByZXRTdHI7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gWEhUTUwgZm9ybWF0dGVkIHJlcG9ydCBvbiB0aGUgc3RhdHVzIG9mIHRoZSBjdXJyZW50bHkgb3BlbmVkIHJlc291cmNlIGJ1bmRsZQorICAgICAqLworICAgIHB1YmxpYyBEb2N1bWVudCBnZXRIVE1MUmVwb3J0eihib29sZWFuIGRldGFpbGVkKSB7CisgICAgICAgIERvY3VtZW50IGh0bWwgPSBuZXcgRG9jdW1lbnRJbXBsKCk7CisgICAgICAgIEVsZW1lbnQgcm9vdCA9IGh0bWwuY3JlYXRlRWxlbWVudCgiSFRNTCIpOworICAgICAgICBodG1sLmFwcGVuZENoaWxkKHJvb3QpOworICAgICAgICBFbGVtZW50IGhlYWRfZWxlbSA9IGh0bWwuY3JlYXRlRWxlbWVudCgiSEVBRCIpOworICAgICAgICBFbGVtZW50IHRpdGxlX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIlRJVExFIik7CisgICAgICAgIFRleHQgICAgdGl0bGVfdGV4dCA9IGh0bWwuY3JlYXRlVGV4dE5vZGUoIlJlc291cmNlIEJ1bmRsZSBSZXBvcnQgLSAiICsgcmJtLmdldEJhc2VDbGFzcygpKTsKKyAgICAgICAgRWxlbWVudCBib2R5X2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsKKyAgICAgICAgRWxlbWVudCBjZW50ZXIxX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIkNFTlRFUiIpOworICAgICAgICBFbGVtZW50IGgxX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIkgxIik7CisgICAgICAgIEVsZW1lbnQgY2VudGVyMl9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJDRU5URVIiKTsKKyAgICAgICAgRWxlbWVudCBoM19lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJIMSIpOworICAgICAgICBUZXh0ICAgIHRpdGxlMV90ZXh0ID0gaHRtbC5jcmVhdGVUZXh0Tm9kZSgiUmVzb3VyY2UgQnVuZGxlIFJlcG9ydDogIiArIHJibS5nZXRCYXNlQ2xhc3MoKSk7CisgICAgICAgIFRleHQgICAgdGl0bGUyX3RleHQgPSBodG1sLmNyZWF0ZVRleHROb2RlKCJSZXBvcnQgR2VuZXJhdGVkOiAiICsgKG5ldyBEYXRlKCkpLnRvU3RyaW5nKCkpOworICAgICAgICBWZWN0b3IgYnVuZGxlcyA9IHJibS5nZXRCdW5kbGVzKCk7CisJCQorICAgICAgICB0aXRsZV9lbGVtLmFwcGVuZENoaWxkKHRpdGxlX3RleHQpOworICAgICAgICBoZWFkX2VsZW0uYXBwZW5kQ2hpbGQodGl0bGVfZWxlbSk7CisgICAgICAgIGgxX2VsZW0uYXBwZW5kQ2hpbGQodGl0bGUxX3RleHQpOworICAgICAgICBoM19lbGVtLmFwcGVuZENoaWxkKHRpdGxlMl90ZXh0KTsKKyAgICAgICAgY2VudGVyMV9lbGVtLmFwcGVuZENoaWxkKGgxX2VsZW0pOworICAgICAgICBjZW50ZXIyX2VsZW0uYXBwZW5kQ2hpbGQoaDNfZWxlbSk7CisgICAgICAgIGJvZHlfZWxlbS5hcHBlbmRDaGlsZChjZW50ZXIxX2VsZW0pOworICAgICAgICBib2R5X2VsZW0uYXBwZW5kQ2hpbGQoY2VudGVyMl9lbGVtKTsKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChoZWFkX2VsZW0pOworICAgICAgICByb290LmFwcGVuZENoaWxkKGJvZHlfZWxlbSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBnZXRIVE1MTGFuZ3VhZ2VSZXBvcnR6KGh0bWwsIGJvZHlfZWxlbSwgZGV0YWlsZWQsIChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSkpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIGh0bWw7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgYSBIVE1MIHJlcG9ydCBhcyBhIFN0cmluZyBvYmplY3Qgb24gdGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCByZXNvdXJjZSBidW5kbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldEhUTUxSZXBvcnQoYm9vbGVhbiBkZXRhaWxlZCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKCI8SFRNTD5cbjxIRUFEPjxUSVRMRT5SZXNvdXJjZSBCdW5kbGUgUmVwb3J0IC0gIiArIHJibS5nZXRCYXNlQ2xhc3MoKSArICI8L1RJVExFPjwvSEVBRD5cbjxCT0RZPlxuIik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjxDRU5URVI+PEgxPlJlc291cmNlIEJ1bmRsZSBSZXBvcnQ6ICIgKyByYm0uZ2V0QmFzZUNsYXNzKCkgKyAiPC9IMT48L0NFTlRFUj5cbiIpOworICAgICAgICBidWZmZXIuYXBwZW5kKCI8Q0VOVEVSPjxIMz5SZXBvcnQgR2VuZXJhdGVkOiAiICsgKG5ldyBEYXRlKCkpLnRvU3RyaW5nKCkgKyAiPC9IMz48L0NFTlRFUj5cbiIpOworCQkKKyAgICAgICAgVmVjdG9yIGJ1bmRsZXMgPSByYm0uZ2V0QnVuZGxlcygpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGdldEhUTUxMYW5ndWFnZVJlcG9ydChkZXRhaWxlZCwgKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKSkpOwkKKyAgICAgICAgfQorCQkKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPC9CT0RZPlxuPC9IVE1MPiIpOworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCQorICAgIHByaXZhdGUgdm9pZCBnZXRIVE1MTGFuZ3VhZ2VSZXBvcnR6KERvY3VtZW50IGh0bWwsIEVsZW1lbnQgYm9keV9lbGVtLCBib29sZWFuIGRldGFpbGVkLCBCdW5kbGUgZGljdCkgeworICAgICAgICBFbGVtZW50IGgyX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIkgyIik7CisgICAgICAgIFRleHQgICAgaDJfdGV4dCA9IGh0bWwuY3JlYXRlVGV4dE5vZGUoIkxhbmd1YWdlOiAiICsgKGRpY3QubGFuZ3VhZ2UgPT0gbnVsbCA/IGRpY3QuZW5jb2RpbmcgOiBkaWN0Lmxhbmd1YWdlKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWN0LmNvdW50cnkgPT0gbnVsbCA/ICIiIDogIiAtIENvdW50cnk6ICIgKyBkaWN0LmNvdW50cnkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpY3QudmFyaWFudCA9PSBudWxsID8gIiIgOiAiIC0gVmFyaWFudDogIiArIGRpY3QudmFyaWFudCkpOworICAgICAgICBFbGVtZW50IGJsb2NrX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIkJMT0NLUVVPVEUiKTsKKyAgICAgICAgRWxlbWVudCBwX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIlAiKTsKKyAgICAgICAgVGV4dCAgICBwX3RleHQgPSBodG1sLmNyZWF0ZVRleHROb2RlKCJOdW1iZXIgb2YgTkxTIGl0ZW1zIGluIHRoZSBmaWxlOiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihkaWN0LmFsbEl0ZW1zLnNpemUoKSkpOworICAgICAgICBFbGVtZW50IHVsX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIlVMIik7CisgICAgICAgIFRleHQgICAgdWxfdGV4dCA9IGh0bWwuY3JlYXRlVGV4dE5vZGUoIlVudHJhbnNsYXRlZCBOTFMga2V5czoiKTsKKwkJCisgICAgICAgIGgyX2VsZW0uYXBwZW5kQ2hpbGQoaDJfdGV4dCk7CisgICAgICAgIHBfZWxlbS5hcHBlbmRDaGlsZChwX3RleHQpOworICAgICAgICB1bF9lbGVtLmFwcGVuZENoaWxkKHVsX3RleHQpOworICAgICAgICBibG9ja19lbGVtLmFwcGVuZENoaWxkKHBfZWxlbSk7CisgICAgICAgIGJvZHlfZWxlbS5hcHBlbmRDaGlsZChoMl9lbGVtKTsKKyAgICAgICAgYm9keV9lbGVtLmFwcGVuZENoaWxkKGJsb2NrX2VsZW0pOworCQkKKyAgICAgICAgaW50IHVudHJhbnNsYXRlZCA9IDA7CisgICAgICAgIEVudW1lcmF0aW9uIGl0ZW1zID0gZGljdC5hbGxJdGVtcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoaXRlbXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gdGVtcEl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVtcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHRlbXBJdGVtLmlzVHJhbnNsYXRlZCgpKSBjb250aW51ZTsKKyAgICAgICAgICAgIHVudHJhbnNsYXRlZCsrOworICAgICAgICAgICAgaWYgKGRldGFpbGVkKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBsaV9lbGVtID0gaHRtbC5jcmVhdGVFbGVtZW50KCJMSSIpOworICAgICAgICAgICAgICAgIFRleHQgICAgbGlfdGV4dCA9IGh0bWwuY3JlYXRlVGV4dE5vZGUodGVtcEl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgIGxpX2VsZW0uYXBwZW5kQ2hpbGQobGlfdGV4dCk7CisgICAgICAgICAgICAgICAgdWxfZWxlbS5hcHBlbmRDaGlsZChsaV9lbGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBFbGVtZW50IHAyX2VsZW0gPSBodG1sLmNyZWF0ZUVsZW1lbnQoIlAiKTsKKyAgICAgICAgVGV4dCAgICBwMl90ZXh0ID0gaHRtbC5jcmVhdGVUZXh0Tm9kZSgiTnVtYmVyIG9mIE5MUyBpdGVtcyBub3QgdHJhbnNsYXRlZDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKHVudHJhbnNsYXRlZCkpOworICAgICAgICBwMl9lbGVtLmFwcGVuZENoaWxkKHAyX3RleHQpOworICAgICAgICBibG9ja19lbGVtLmFwcGVuZENoaWxkKHAyX2VsZW0pOworICAgICAgICBpZiAoZGV0YWlsZWQpIGJsb2NrX2VsZW0uYXBwZW5kQ2hpbGQodWxfZWxlbSk7CisgICAgfQorCQorICAgIHByaXZhdGUgU3RyaW5nIGdldEhUTUxMYW5ndWFnZVJlcG9ydChib29sZWFuIGRldGFpbGVkLCBCdW5kbGUgZGljdCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKCJcbjxIMj5MYW5ndWFnZTogIiArIChkaWN0Lmxhbmd1YWdlID09IG51bGwgPyBkaWN0LmVuY29kaW5nIDogZGljdC5sYW5ndWFnZSkpOworICAgICAgICBidWZmZXIuYXBwZW5kKGRpY3QuY291bnRyeSA9PSBudWxsID8gIiIgOiAiIC0gQ291bnRyeTogIiArIGRpY3QuY291bnRyeSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoZGljdC52YXJpYW50ID09IG51bGwgPyAiIiA6ICIgLSBWYXJpYW50OiAiICsgZGljdC52YXJpYW50KTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPC9IMj5cbiIpOworICAgICAgICBidWZmZXIuYXBwZW5kKCI8QkxPQ0tRVU9URT5cbiIpOworICAgICAgICAKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiPFA+TnVtYmVyIG9mIE5MUyBpdGVtcyBpbiB0aGUgZmlsZTogIiArIFN0cmluZy52YWx1ZU9mKGRpY3QuYWxsSXRlbXMuc2l6ZSgpKSArICI8L1A+XG4iKTsKKyAgICAgICAgaW50IHVudHJhbnNsYXRlZCA9IDA7CisgICAgICAgIEVudW1lcmF0aW9uIGl0ZW1zID0gZGljdC5hbGxJdGVtcy5lbGVtZW50cygpOworICAgICAgICBTdHJpbmdCdWZmZXIgaW5uZXJCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHdoaWxlIChpdGVtcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgQnVuZGxlSXRlbSB0ZW1wSXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1zLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAodGVtcEl0ZW0uaXNUcmFuc2xhdGVkKCkpIGNvbnRpbnVlOworICAgICAgICAgICAgdW50cmFuc2xhdGVkKys7CisgICAgICAgICAgICBpbm5lckJ1ZmZlci5hcHBlbmQoIjxMST4iICsgdGVtcEl0ZW0uZ2V0S2V5KCkgKyAiPC9MST5cbiIpOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjxQPk51bWJlciBvZiBOTFMgaXRlbXMgbm90IHRyYW5zbGF0ZWQ6ICIgKyBTdHJpbmcudmFsdWVPZih1bnRyYW5zbGF0ZWQpICsgIjwvUD5cbiIpOworICAgICAgICBpZiAoZGV0YWlsZWQpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjxVTD5VbnRyYW5zbGF0ZWQgTkxTIGtleXM6XG4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoaW5uZXJCdWZmZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCI8L1VMPlxuIik7CisgICAgICAgIH0KKwkJCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjwvQkxPQ0tRVU9URT5cbiIpOworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBYTUwgZm9ybWF0dGVkIHJlcG9ydCBvbiB0aGUgc3RhdHVzIG9mIHRoZSBjdXJyZW50bHkgb3BlbiByZXNvdXJjZSBidW5kbGUKKyAgICAgKi8gCisJCisgICAgcHVibGljIERvY3VtZW50IGdldFhNTFJlcG9ydHooYm9vbGVhbiBkZXRhaWxlZCkgeworICAgICAgICBEb2N1bWVudCB4bWwgPSBuZXcgRG9jdW1lbnRJbXBsKCk7CisgICAgICAgIEVsZW1lbnQgcm9vdCA9IHhtbC5jcmVhdGVFbGVtZW50KCJSRVBPUlQiKTsKKyAgICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoIkJBU0VDTEFTUyIsIHJibS5nZXRCYXNlQ2xhc3MoKSk7CisgICAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCJEQVRFIiwgKG5ldyBEYXRlKCkpLnRvU3RyaW5nKCkpOworICAgICAgICB4bWwuYXBwZW5kQ2hpbGQocm9vdCk7CisKKyAgICAgICAgVmVjdG9yIGJ1bmRsZXMgPSByYm0uZ2V0QnVuZGxlcygpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICByb290LmFwcGVuZENoaWxkKGdldFhNTExhbmd1YWdlUmVwb3J0eih4bWwsIGRldGFpbGVkLCAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHhtbDsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBYTUwgZm9ybWF0dGVkIHJlcG9ydCBhcyBhIFN0cmluZyBvYmplY3Qgb24gdGhlIHN0YXR1cyBvZiB0aGUgY3VycmVudGx5IG9wZW4gcmVzb3VyY2UgYnVuZGxlCisgICAgICovCisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRYTUxSZXBvcnQoYm9vbGVhbiBkZXRhaWxlZCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuIik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjxSRVBPUlQgQkFTRUNMQVNTPVwiIiArIHJibS5nZXRCYXNlQ2xhc3MoKSArICJcIiBEQVRFPVwiIiArIChuZXcgRGF0ZSgpKS50b1N0cmluZygpICsgIlwiPlxuIik7CisKKyAgICAgICAgVmVjdG9yIGJ1bmRsZXMgPSByYm0uZ2V0QnVuZGxlcygpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGdldFhNTExhbmd1YWdlUmVwb3J0KGRldGFpbGVkLCAoQnVuZGxlKWJ1bmRsZXMuZWxlbWVudEF0KGkpKSk7CQorICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjwvUkVQT1JUPiIpOworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCQorICAgIHByaXZhdGUgRWxlbWVudCBnZXRYTUxMYW5ndWFnZVJlcG9ydHooRG9jdW1lbnQgeG1sLCBib29sZWFuIGRldGFpbGVkLCBCdW5kbGUgZGljdCkgeworICAgICAgICBFbGVtZW50IGxhbmdfcmVwb3J0X2VsZW0gPSB4bWwuY3JlYXRlRWxlbWVudCgiTEFOR1VBR0VfUkVQT1JUIik7CisgICAgICAgIEVsZW1lbnQgbG9jYWxlX2VsZW0gPSB4bWwuY3JlYXRlRWxlbWVudCgiTE9DQUxFIik7CisgICAgICAgIGxvY2FsZV9lbGVtLnNldEF0dHJpYnV0ZSgiTEFOR1VBR0UiLCAoZGljdC5sYW5ndWFnZSA9PSBudWxsID8gZGljdC5lbmNvZGluZyA6IGRpY3QubGFuZ3VhZ2UpKTsKKyAgICAgICAgbG9jYWxlX2VsZW0uc2V0QXR0cmlidXRlKCJDT1VOVFJZIiwgKGRpY3QuY291bnRyeSA9PSBudWxsID8gIiIgOiBkaWN0LmNvdW50cnkpKTsKKyAgICAgICAgbG9jYWxlX2VsZW0uc2V0QXR0cmlidXRlKCJWQVJJQU5UIiwgKGRpY3QudmFyaWFudCA9PSBudWxsID8gIiIgOiBkaWN0LnZhcmlhbnQpKTsKKyAgICAgICAgRWxlbWVudCBubHNfdG90YWxfZWxlbSA9IHhtbC5jcmVhdGVFbGVtZW50KCJOTFNfVE9UQUwiKTsKKyAgICAgICAgVGV4dCAgICBubHNfdG90YWxfdGV4dCA9IHhtbC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcudmFsdWVPZihkaWN0LmFsbEl0ZW1zLnNpemUoKSkpOworICAgICAgICBFbGVtZW50IHVudHJhbnNsYXRlZF90b3RhbF9lbGVtID0geG1sLmNyZWF0ZUVsZW1lbnQoIlVOVFJBTlNMQVRFRF9UT1RBTCIpOworICAgICAgICBFbGVtZW50IHVudHJhbnNsYXRlZF9lbGVtID0geG1sLmNyZWF0ZUVsZW1lbnQoIlVOVFJBTlNMQVRFRCIpOworICAgICAgICAKKyAgICAgICAgbmxzX3RvdGFsX2VsZW0uYXBwZW5kQ2hpbGQobmxzX3RvdGFsX3RleHQpOworICAgICAgICBsYW5nX3JlcG9ydF9lbGVtLmFwcGVuZENoaWxkKGxvY2FsZV9lbGVtKTsKKyAgICAgICAgbGFuZ19yZXBvcnRfZWxlbS5hcHBlbmRDaGlsZChubHNfdG90YWxfZWxlbSk7CisgICAgICAgIGxhbmdfcmVwb3J0X2VsZW0uYXBwZW5kQ2hpbGQodW50cmFuc2xhdGVkX3RvdGFsX2VsZW0pOworICAgICAgICBpZiAoZGV0YWlsZWQpIGxhbmdfcmVwb3J0X2VsZW0uYXBwZW5kQ2hpbGQodW50cmFuc2xhdGVkX2VsZW0pOworCQkKKyAgICAgICAgaW50IHVudHJhbnNsYXRlZCA9IDA7CisgICAgICAgIEVudW1lcmF0aW9uIGl0ZW1zID0gZGljdC5hbGxJdGVtcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoaXRlbXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gdGVtcEl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVtcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHRlbXBJdGVtLmlzVHJhbnNsYXRlZCgpKSBjb250aW51ZTsKKyAgICAgICAgICAgIHVudHJhbnNsYXRlZCsrOworICAgICAgICAgICAgRWxlbWVudCByZXNvdXJjZV9lbGVtID0geG1sLmNyZWF0ZUVsZW1lbnQoIlJFU09VUkNFS0VZIik7CisgICAgICAgICAgICBUZXh0ICAgIHJlc291cmNlX3RleHQgPSB4bWwuY3JlYXRlVGV4dE5vZGUodGVtcEl0ZW0uZ2V0S2V5KCkpOworICAgICAgICAgICAgcmVzb3VyY2VfZWxlbS5hcHBlbmRDaGlsZChyZXNvdXJjZV90ZXh0KTsKKyAgICAgICAgICAgIHVudHJhbnNsYXRlZF9lbGVtLmFwcGVuZENoaWxkKHJlc291cmNlX2VsZW0pOworICAgICAgICB9CisgICAgICAgIFRleHQgdW50cmFuc2xhdGVkX3RvdGFsX3RleHQgPSB4bWwuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLnZhbHVlT2YodW50cmFuc2xhdGVkKSk7CisgICAgICAgIHVudHJhbnNsYXRlZF90b3RhbF9lbGVtLmFwcGVuZENoaWxkKHVudHJhbnNsYXRlZF90b3RhbF90ZXh0KTsKKwkJCisgICAgICAgIHJldHVybiBsYW5nX3JlcG9ydF9lbGVtOworICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBnZXRYTUxMYW5ndWFnZVJlcG9ydChib29sZWFuIGRldGFpbGVkLCBCdW5kbGUgZGljdCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBidWZmZXIuYXBwZW5kKCI8TEFOR1VBR0VfUkVQT1JUPlxuIik7CisgICAgICAgIAorICAgICAgICBidWZmZXIuYXBwZW5kKCJcblx0PExPQ0FMRSBMQU5HVUFHRT1cIiIgKyAoZGljdC5sYW5ndWFnZSA9PSBudWxsID8gZGljdC5lbmNvZGluZyA6IGRpY3QubGFuZ3VhZ2UpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXCIgQ09VTlRSWT1cIiIgKyAoZGljdC5jb3VudHJ5ID09IG51bGwgPyAiIiA6IGRpY3QuY291bnRyeSkpOworICAgICAgICBidWZmZXIuYXBwZW5kKCJcIiBWQVJJQU5UPVwiIiArIChkaWN0LnZhcmlhbnQgPT0gbnVsbCA/ICIiIDogZGljdC52YXJpYW50KSArICJcIi8+XG4iKTsKKwkJCisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlx0PE5MU19UT1RBTD4iICsgU3RyaW5nLnZhbHVlT2YoZGljdC5hbGxJdGVtcy5zaXplKCkpICsgIjwvTkxTX1RPVEFMPlxuIik7CisgICAgICAgIGludCB1bnRyYW5zbGF0ZWQgPSAwOworICAgICAgICBFbnVtZXJhdGlvbiBpdGVtcyA9IGRpY3QuYWxsSXRlbXMuZWxlbWVudHMoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGlubmVyQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICB3aGlsZSAoaXRlbXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIEJ1bmRsZUl0ZW0gdGVtcEl0ZW0gPSAoQnVuZGxlSXRlbSlpdGVtcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHRlbXBJdGVtLmlzVHJhbnNsYXRlZCgpKSBjb250aW51ZTsKKyAgICAgICAgICAgIHVudHJhbnNsYXRlZCsrOworICAgICAgICAgICAgaW5uZXJCdWZmZXIuYXBwZW5kKCJcdFx0PFJFU09VUkNFS0VZPiIgKyB0ZW1wSXRlbS5nZXRLZXkoKSArICI8L1JFU09VUkNFS0VZPlxuIik7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXHQ8VU5UUkFOU0xBVEVEX1RPVEFMPiIgKyBTdHJpbmcudmFsdWVPZih1bnRyYW5zbGF0ZWQpICsgIjwvVU5UUkFOU0xBVEVEX1RPVEFMPlxuIik7CisgICAgICAgIGlmIChkZXRhaWxlZCkgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiXHQ8VU5UUkFOU0xBVEVEPlxuIik7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGlubmVyQnVmZmVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiXHQ8L1VOVFJBTlNMQVRFRD5cbiIpOworICAgICAgICB9CisJCQorICAgICAgICBidWZmZXIuYXBwZW5kKCI8L0xBTkdVQUdFX1JFUE9SVD5cbiIpOworICAgICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CisgICAgfQorCQorCXByaXZhdGUgdm9pZCB1cGRhdGVEYXRlRmllbGRzKCkgeworCQlpZiAobmV4dFJlcG9ydCA9PSBudWxsKSBuZXh0UmVwb3J0TGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX25leHRfcmVwb3J0IiwgIi0tIikpOworCQllbHNlIG5leHRSZXBvcnRMYWJlbC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfbmV4dF9yZXBvcnQiLCBuZXh0UmVwb3J0LnRvU3RyaW5nKCkpKTsKKwkJaWYgKGxhc3RSZXBvcnQgPT0gbnVsbCkgbGFzdFJlcG9ydExhYmVsLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9sYXN0X3JlcG9ydCIsICItLSIpKTsKKwkJZWxzZSBsYXN0UmVwb3J0TGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2xhc3RfcmVwb3J0IiwgbGFzdFJlcG9ydC50b1N0cmluZygpKSk7CisJfQorCQorCXByaXZhdGUgdm9pZCB1cGRhdGVTdGF0dXNDb21wb25lbnRzKCkgeworCQlpZiAocnVubmluZykgeworCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3N0YXR1c19ydW5uaW5nIikpOworCQkJc3RhdHVzTGFiZWwuc2V0Rm9yZWdyb3VuZChDb2xvci5ncmVlbik7CisJCQlzdGF0dXNCdXR0b24uc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2J1dHRvbl9zdG9wIikpOworCQl9IGVsc2UgeworCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3N0YXR1c19zdG9wcGVkIikpOworCQkJc3RhdHVzTGFiZWwuc2V0Rm9yZWdyb3VuZChDb2xvci5yZWQpOworCQkJc3RhdHVzQnV0dG9uLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9idXR0b25fc3RhcnQiKSk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNldENvbXBvbmVudHNUb0RlZmF1bHRzKCkgeworCQlpZiAoKHJ1bm5pbmcgJiYgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZW5hYmxlZCIpLmVxdWFscygiTm8iKSkgfHwKKwkJCSghcnVubmluZyAmJiBQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9lbmFibGVkIikuZXF1YWxzKCJZZXMiKSkpIHRvZ2dsZVN0YXR1cygpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZW5hYmxlZCIpICE9IG51bGwpCisJCQl0ZXh0Q2hlY2suc2V0U2VsZWN0ZWQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZW5hYmxlZCIpLmVxdWFscygiWWVzIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X2h0bWxfZW5hYmxlZCIpICE9IG51bGwpCisJCQlodG1sQ2hlY2suc2V0U2VsZWN0ZWQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X2h0bWxfZW5hYmxlZCIpLmVxdWFscygiWWVzIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9lbmFibGVkIikgIT0gbnVsbCkKKwkJCQl4bWxDaGVjay5zZXRTZWxlY3RlZChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfeG1sX2VuYWJsZWQiKS5lcXVhbHMoIlllcyIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2ZpbGUiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZmlsZSIpLmVxdWFscygiIikpCisJCQl0ZXh0RmllbGQuc2V0VGV4dChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfdGV4dF9maWxlIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X2h0bWxfZmlsZSIpICE9IG51bGwgJiYKKwkJCSFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfaHRtbF9maWxlIikuZXF1YWxzKCIiKSkKKwkJCWh0bWxGaWVsZC5zZXRUZXh0KFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2ZpbGUiKSk7CisJCWlmIChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfeG1sX2ZpbGUiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9maWxlIikuZXF1YWxzKCIiKSkKKwkJCXhtbEZpZWxkLnNldFRleHQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9maWxlIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZGV0YWlsIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF90ZXh0X2RldGFpbCIpLmVxdWFscygiIikpCisJCQlzZWxlY3RDb21ib1ZhbHVlKHRleHRDb21ibywgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZGV0YWlsIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X2h0bWxfZGV0YWlsIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2RldGFpbCIpLmVxdWFscygiIikpCisJCQlzZWxlY3RDb21ib1ZhbHVlKGh0bWxDb21ibywgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X2h0bWxfZGV0YWlsIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9kZXRhaWwiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9kZXRhaWwiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZSh4bWxDb21ibywgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9kZXRhaWwiKSk7CisJCWlmIChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbCIpLmVxdWFscygiU2VxdWVudGlhbCIpKQorCQkJc2VxdWVudGlhbFJhZGlvLnNldFNlbGVjdGVkKHRydWUpOworCQllbHNlIGRlZmluZWRSYWRpby5zZXRTZWxlY3RlZCh0cnVlKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdmFsdWUiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbF92YWx1ZSIpLmVxdWFscygiIikpCisJCQlzZWxlY3RDb21ib1ZhbHVlKHZhbHVlQ29tYm8sIFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdmFsdWUiKSk7CisJCWlmIChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3VuaXRzIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdW5pdHMiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZSh2YWx1ZUNvbWJvLCBQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3VuaXRzIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9ob3VyIikgIT0gbnVsbCAmJgorCQkJIVByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfaG91ciIpLmVxdWFscygiIikpCisJCQlzZWxlY3RDb21ib1ZhbHVlKGhvdXJDb21ibywgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9ob3VyIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9kYXkiKSAhPSBudWxsICYmCisJCQkhUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9kYXkiKS5lcXVhbHMoIiIpKQorCQkJc2VsZWN0Q29tYm9WYWx1ZShkYXlDb21ibywgUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9kYXkiKSk7CisJCWlmIChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX21pbnV0ZSIpICE9IG51bGwgJiYKKwkJCSFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX21pbnV0ZSIpLmVxdWFscygiIikpCisJCQlzZWxlY3RDb21ib1ZhbHVlKG1pbnV0ZUNvbWJvLCBQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX21pbnV0ZSIpKTsKKwkJaWYgKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX3NjYW5fZmlsZSIpICE9IG51bGwgJiYKKwkJCSFQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9zY2FuX2ZpbGUiKS5lcXVhbHMoIiIpKQorCQkJc2NhbkZpZWxkLnNldFRleHQoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfc2Nhbl9maWxlIikpOworCQlpZiAoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfcGVyZm9ybV9zY2FuIikgIT0gbnVsbCkKKwkJCXNjYW5DaGVjay5zZXRTZWxlY3RlZChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9wZXJmb3JtX3NjYW4iKS5lcXVhbHMoIlllcyIpKTsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZWxlY3RDb21ib1ZhbHVlKEpDb21ib0JveCBib3gsIFN0cmluZyB2YWx1ZSkgeworCQlmb3IgKGludCBpPTA7IGkgPCBib3guZ2V0SXRlbUNvdW50KCk7IGkrKykgeworCQkJaWYgKGJveC5nZXRJdGVtQXQoaSkudG9TdHJpbmcoKS5lcXVhbHModmFsdWUpKSB7CisJCQkJYm94LnNldFNlbGVjdGVkSW5kZXgoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNhdmVEZWZhdWx0cygpIHsKKwkJLy8gU2F2ZSBmb3JtYXQgb3B0aW9ucworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfdGV4dF9lbmFibGVkIiwgKHRleHRDaGVjay5pc1NlbGVjdGVkKCkgPyAiWWVzIiA6ICJObyIpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3RleHRfZmlsZSIsIHRleHRGaWVsZC5nZXRUZXh0KCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfdGV4dF9kZXRhaWwiLCB0ZXh0Q29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2VuYWJsZWQiLCAoaHRtbENoZWNrLmlzU2VsZWN0ZWQoKSA/ICJZZXMiIDogIk5vIikpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfaHRtbF9maWxlIiwgaHRtbEZpZWxkLmdldFRleHQoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2Zvcm1hdF9odG1sX2RldGFpbCIsIGh0bWxDb21iby5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfZm9ybWF0X3htbF9lbmFibGVkIiwgKHhtbENoZWNrLmlzU2VsZWN0ZWQoKSA/ICJZZXMiIDogIk5vIikpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfeG1sX2ZpbGUiLCB4bWxGaWVsZC5nZXRUZXh0KCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9mb3JtYXRfeG1sX2RldGFpbCIsIHhtbENvbWJvLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9zY2FuX2ZpbGUiLCBzY2FuRmllbGQuZ2V0VGV4dCgpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfcGVyZm9ybV9zY2FuIiwgKHNjYW5DaGVjay5pc1NlbGVjdGVkKCkgPyAiWWVzIiA6ICJObyIpKTsKKwkJLy8gU2F2ZSBpbnRlcnZhbCBvcHRpb25zCisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsIiwgKHNlcXVlbnRpYWxSYWRpby5pc1NlbGVjdGVkKCkgPyAiU2VxdWVudGlhbCIgOiAiRGVmaW5lZCIpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbF92YWx1ZSIsIHZhbHVlQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdW5pdHMiLCB1bml0Q29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoInJlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfaG91ciIsIGhvdXJDb21iby5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9taW51dGUiLCBtaW51dGVDb21iby5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9kYXkiLCBkYXlDb21iby5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKKwkJLy8gU2F2ZSBzeXN0ZW0gb3B0aW9ucworCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9lbmFibGVkIiwgKHJ1bm5pbmcgPyAiWWVzIiA6ICJObyIpKTsKKwkJLy8gV3JpdGUgdGhlIHByZWZlcmVuY2VzCisJCXRyeSB7CisJCQlQcmVmZXJlbmNlcy5zYXZlUHJlZmVyZW5jZXMoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkvLyBUT0RPOiBXYXJuIG9mIGVycm9yIHRocm91Z2ggSk9wdGlvblBhbmUKKwkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgdG9nZ2xlU3RhdHVzKCkgeworCQlpZiAocnVubmluZykgeworCQkJcnVubmluZyA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJcnVubmluZyA9IHRydWU7CisJCX0KKwkJdXBkYXRlU3RhdHVzQ29tcG9uZW50cygpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgaW5pdENvbXBvbmVudHMoKSB7CisJCQorCQkvLyBGaWxlIGNob29zZXJzCisJCWJ1bmRsZUZpbGVDaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKSB7CisJCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisJCQkJaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisJCQkJCisJCQkJU3RyaW5nIG5hbWUgPSBmLmdldE5hbWUoKTsKKwkJCQlpZiAoIShuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpKSByZXR1cm4gZmFsc2U7CisJCQkJaWYgKG5hbWUuaW5kZXhPZigiXyIpID4gMCkgcmV0dXJuIGZhbHNlOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQorCQkJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJCQlyZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb24iKTsKKwkJCX0KKwkJfSk7CisJCWJ1bmRsZUZpbGVDaG9vc2VyLnNldFNlbGVjdGVkRmlsZShuZXcgRmlsZShQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9iYXNlX2NsYXNzX2ZpbGUiKSkpOworCQkKKwkJZGlyZWN0b3J5RmlsZUNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpIHsKKwkJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKwkJCQlpZiAoZi5pc0RpcmVjdG9yeSgpKSByZXR1cm4gdHJ1ZTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCisJCQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQkJCXJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpcmVjdG9yeSIpOworCQkJfQorCQl9KTsKKwkJZGlyZWN0b3J5RmlsZUNob29zZXIuc2V0U2VsZWN0ZWRGaWxlKG5ldyBGaWxlKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX291dHB1dF9kaXJlY3RvcnkiKSkpOworCQkKKwkJc2NhbkZpbGVDaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKSB7CisJCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisJCQkJaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisJCQkJaWYgKGYuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueG1sIikpIHJldHVybiB0cnVlOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkKKwkJCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCQkJcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uX3NjYW4iKTsKKwkJCX0KKwkJfSk7CisJCXNjYW5GaWxlQ2hvb3Nlci5zZXRTZWxlY3RlZEZpbGUobmV3IEZpbGUoUHJlZmVyZW5jZXMuZ2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfc2Nhbl9maWxlIikpKTsKKwkJCisJCS8vIE5ldyB0b3AgbGV2ZWwgY29tcG9uZW50cworCQlKUGFuZWwgc3RhdHVzUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCBpbnRlcnZhbFBhbmVsID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgb3B0aW9uc1BhbmVsID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgZm9ybWF0UGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJCUJveCBtYWluQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJaW50IHdpZHRoID0gNjAwOworCQlpbnQgaGVpZ2h0ID0gNjAwOworCQlpbnQgY29tcEhlaWdodCA9IDIwOworCQlEaW1lbnNpb24gbWFpbkRpbSA9IG5ldyBEaW1lbnNpb24od2lkdGgsaGVpZ2h0KTsKKwkJCisJCXN0YXR1c1BhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9wYW5lbF9zdGF0dXMiKSkpOworCQlpbnRlcnZhbFBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9wYW5lbF9pbnRlcnZhbCIpKSk7CisJCW9wdGlvbnNQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfcGFuZWxfb3B0aW9ucyIpKSk7CisJCWZvcm1hdFBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9wYW5lbF9vdXRwdXRfZm9ybWF0IikpKTsKKwkJCisJCS8vICoqIFNUQVRVUyBQQU5FTCBTRVRVUCAqKgorCQlKQnV0dG9uIG5vd0J1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfYnV0dG9uX25vdyIpKTsKKwkJQm94ICAgICBzdGF0dXNCb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQlKUGFuZWwgIHN0YXR1c1BhbmVsMSA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsICBzdGF0dXNQYW5lbDIgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCAgc3RhdHVzUGFuZWwzID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgIHN0YXR1c1BhbmVsNCA9IG5ldyBKUGFuZWwoKTsKKwkJc3RhdHVzQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9idXR0b25fc3RhcnQiKSk7CisJCXN0YXR1c0xhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3N0YXR1c19zdG9wcGVkIikpOworCQluZXh0UmVwb3J0TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfbmV4dF9yZXBvcnQiLCAiLS0iKSk7CisJCWxhc3RSZXBvcnRMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9sYXN0X3JlcG9ydCIsICItLSIpKTsKKwkJc3RhdHVzTGFiZWwuc2V0Rm9udChuZXcgRm9udCgic2VyaWYiLEZvbnQuQk9MRCwxNCkpOworCQlzdGF0dXNMYWJlbC5zZXRGb3JlZ3JvdW5kKENvbG9yLnJlZCk7CisJCXN0YXR1c1BhbmVsMi5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5MRUZUKSk7CisJCXN0YXR1c1BhbmVsMy5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5MRUZUKSk7CisJCXN0YXR1c1BhbmVsLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQkKKwkJbm93QnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCXRyeSB7CisJCQkJCWdlbmVyYXRlUmVwb3J0cygpOworCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKG51bGwsIGUuZ2V0TWVzc2FnZSgpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksCisJCQkJCQkJCQkJCQkgIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coZS50b1N0cmluZygpKTsKKwkJCQkJaWYgKFJCTWFuYWdlckdVSS5kZWJ1ZykgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCXN0YXR1c0J1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQl0b2dnbGVTdGF0dXMoKTsKKwkJCX0KKwkJfSk7CisJCQorCQlzdGF0dXNQYW5lbDEuYWRkKHN0YXR1c0xhYmVsKTsKKwkJc3RhdHVzUGFuZWwyLmFkZChuZXh0UmVwb3J0TGFiZWwpOworCQlzdGF0dXNQYW5lbDMuYWRkKGxhc3RSZXBvcnRMYWJlbCk7CisJCXN0YXR1c1BhbmVsNC5hZGQobm93QnV0dG9uKTsKKwkJc3RhdHVzUGFuZWw0LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDcpKTsKKwkJc3RhdHVzUGFuZWw0LmFkZChzdGF0dXNCdXR0b24pOworCQlzdGF0dXNCb3guYWRkKHN0YXR1c1BhbmVsMSk7CisJCXN0YXR1c0JveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNykpOworCQkvL3N0YXR1c0JveC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOworCQlzdGF0dXNCb3guYWRkKHN0YXR1c1BhbmVsMik7CisJCS8vc3RhdHVzQm94LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbEdsdWUoKSk7CisJCXN0YXR1c0JveC5hZGQoc3RhdHVzUGFuZWwzKTsKKwkJc3RhdHVzQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg3KSk7CisJCXN0YXR1c0JveC5hZGQoc3RhdHVzUGFuZWw0KTsKKwkJc3RhdHVzUGFuZWwuYWRkKHN0YXR1c0JveCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQorCQkvLyAqKiBPUFRJT05TIFBBTkVMIFNFVFVQICoqCisJCUpMYWJlbCAgaW5wdXRMYWJlbCAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9pbnB1dF9idW5kbGUiKSk7CisJCUpMYWJlbCAgb3V0cHV0TGFiZWwgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9vdXRwdXRfZGlyZWN0b3J5IikpOworCQlKQnV0dG9uIGlucHV0QnV0dG9uICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2J1dHRvbl9jaG9vc2UiKSk7CisJCUpCdXR0b24gb3V0cHV0QnV0dG9uICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfYnV0dG9uX2Nob29zZSIpKTsKKwkJSkJ1dHRvbiBzY2FuQnV0dG9uICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9idXR0b25fY2hvb3NlIikpOworCQlKQnV0dG9uIGRlZmF1bHRCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2J1dHRvbl9zYXZlX2RlZmF1bHRzIikpOworCQlKTGFiZWwgIHRleHRMYWJlbCAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfb3V0cHV0X2ZpbGUiKSk7CisJCUpMYWJlbCAgaHRtbExhYmVsICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9vdXRwdXRfZmlsZSIpKTsKKwkJSkxhYmVsICB4bWxMYWJlbCAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX291dHB1dF9maWxlIikpOworCQlKTGFiZWwgIHRleHRMYWJlbDIgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfZGV0YWlsX2xldmVsIikpOworCQlKTGFiZWwgIGh0bWxMYWJlbDIgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfZGV0YWlsX2xldmVsIikpOworCQlKTGFiZWwgIHhtbExhYmVsMiAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfZGV0YWlsX2xldmVsIikpOworCQlKUGFuZWwgIG9wdGlvbnNQYW5lbDEgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCAgb3B0aW9uc1BhbmVsMiA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsICBvcHRpb25zUGFuZWxBID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgIG9wdGlvbnNQYW5lbDMgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCAgb3B0aW9uc1BhbmVsNCA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsICBvcHRpb25zUGFuZWw1ID0gbmV3IEpQYW5lbCgpOworCQlKUGFuZWwgIG9wdGlvbnNQYW5lbDYgPSBuZXcgSlBhbmVsKCk7CisJCUJveCAgICAgb3B0aW9uc0JveCAgICA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCUJveCAgICAgb3V0cHV0Qm94ICAgICA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQorCQlidW5kbGVGaWVsZCAgICA9IG5ldyBKVGV4dEZpZWxkKFByZWZlcmVuY2VzLmdldFByZWZlcmVuY2UoInJlcG9ydGVyX2Jhc2VfY2xhc3NfZmlsZSIpKTsKKwkJZGlyZWN0b3J5RmllbGQgPSBuZXcgSlRleHRGaWVsZChQcmVmZXJlbmNlcy5nZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9vdXRwdXRfZGlyZWN0b3J5IikpOworCQl0ZXh0Q2hlY2sgICAgICA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9mb3JtYXRfdGV4dCIpKTsKKwkJaHRtbENoZWNrICAgICAgPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfZm9ybWF0X2h0bWwiKSk7CisJCXhtbENoZWNrICAgICAgID0gbmV3IEpDaGVja0JveChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2Zvcm1hdF94bWwiKSk7CisJCXNjYW5DaGVjayAgICAgID0gbmV3IEpDaGVja0JveChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3BlcmZvcm1fc2NhbiIpLCBmYWxzZSk7CisJCXRleHRGaWVsZCAgICAgID0gbmV3IEpUZXh0RmllbGQoInJlcG9ydC50eHQiKTsKKwkJaHRtbEZpZWxkICAgICAgPSBuZXcgSlRleHRGaWVsZCgicmVwb3J0Lmh0bWwiKTsKKwkJeG1sRmllbGQgICAgICAgPSBuZXcgSlRleHRGaWVsZCgicmVwb3J0LnhtbCIpOworCQlzY2FuRmllbGQgICAgICA9IG5ldyBKVGV4dEZpZWxkKCk7CisJCVN0cmluZyBbXSBkZXRhaWxMZXZlbHMgPSB7UmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9kZXRhaWxfaGlnaCIpLAorCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfZGV0YWlsX25vcm1hbCIpfTsKKwkJdGV4dENvbWJvICAgICAgPSBuZXcgSkNvbWJvQm94KGRldGFpbExldmVscyk7CisJCWh0bWxDb21ibyAgICAgID0gbmV3IEpDb21ib0JveChkZXRhaWxMZXZlbHMpOworCQl4bWxDb21ibyAgICAgICA9IG5ldyBKQ29tYm9Cb3goZGV0YWlsTGV2ZWxzKTsKKwkJCisJCWJ1bmRsZUZpZWxkLnNldENvbHVtbnMoMzApOworCQlkaXJlY3RvcnlGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJc2NhbkZpZWxkLnNldENvbHVtbnMoMzApOworCQl0ZXh0RmllbGQuc2V0Q29sdW1ucygxNSk7CisJCWh0bWxGaWVsZC5zZXRDb2x1bW5zKDE1KTsKKwkJeG1sRmllbGQuc2V0Q29sdW1ucygxNSk7CisJCURpbWVuc2lvbiBjaGVja0RpbSA9IG5ldyBEaW1lbnNpb24oNTUsY29tcEhlaWdodCk7CisJCXRleHRDaGVjay5zZXRQcmVmZXJyZWRTaXplKGNoZWNrRGltKTsKKwkJaHRtbENoZWNrLnNldFByZWZlcnJlZFNpemUoY2hlY2tEaW0pOworCQl4bWxDaGVjay5zZXRQcmVmZXJyZWRTaXplKGNoZWNrRGltKTsKKwkJb3B0aW9uc1BhbmVsMS5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5SSUdIVCkpOworCQlvcHRpb25zUGFuZWwyLnNldExheW91dChuZXcgRmxvd0xheW91dChGbG93TGF5b3V0LlJJR0hUKSk7CisJCW9wdGlvbnNQYW5lbEEuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuUklHSFQpKTsKKwkJCisJCWlucHV0QnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCXNldElucHV0QnVuZGxlKCk7CisJCQl9CisJCX0pOworCQkKKwkJb3V0cHV0QnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCXNldE91dHB1dEJ1bmRsZSgpOworCQkJfQorCQl9KTsKKwkJCisJCXNjYW5CdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlzZXRTY2FuRmlsZSgpOworCQkJfQorCQl9KTsKKwkJCisJCWRlZmF1bHRCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJc2F2ZURlZmF1bHRzKCk7CisJCQl9CisJCX0pOworCQkKKwkJb3B0aW9uc1BhbmVsNi5hZGQoZGVmYXVsdEJ1dHRvbik7CisJCW9wdGlvbnNQYW5lbDMuYWRkKHRleHRDaGVjayk7CisJCW9wdGlvbnNQYW5lbDMuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWwzLmFkZCh0ZXh0TGFiZWwpOworCQlvcHRpb25zUGFuZWwzLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsMy5hZGQodGV4dEZpZWxkKTsKKwkJb3B0aW9uc1BhbmVsMy5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDMuYWRkKHRleHRMYWJlbDIpOworCQlvcHRpb25zUGFuZWwzLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsMy5hZGQodGV4dENvbWJvKTsKKwkJb3B0aW9uc1BhbmVsNC5hZGQoaHRtbENoZWNrKTsKKwkJb3B0aW9uc1BhbmVsNC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDQuYWRkKGh0bWxMYWJlbCk7CisJCW9wdGlvbnNQYW5lbDQuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWw0LmFkZChodG1sRmllbGQpOworCQlvcHRpb25zUGFuZWw0LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsNC5hZGQoaHRtbExhYmVsMik7CisJCW9wdGlvbnNQYW5lbDQuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWw0LmFkZChodG1sQ29tYm8pOworCQlvcHRpb25zUGFuZWw1LmFkZCh4bWxDaGVjayk7CisJCW9wdGlvbnNQYW5lbDUuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWw1LmFkZCh4bWxMYWJlbCk7CisJCW9wdGlvbnNQYW5lbDUuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWw1LmFkZCh4bWxGaWVsZCk7CisJCW9wdGlvbnNQYW5lbDUuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWw1LmFkZCh4bWxMYWJlbDIpOworCQlvcHRpb25zUGFuZWw1LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsNS5hZGQoeG1sQ29tYm8pOworCQlvdXRwdXRCb3guYWRkKG9wdGlvbnNQYW5lbDMpOworCQlvdXRwdXRCb3guYWRkKG9wdGlvbnNQYW5lbDQpOworCQlvdXRwdXRCb3guYWRkKG9wdGlvbnNQYW5lbDUpOworCQlmb3JtYXRQYW5lbC5hZGQob3V0cHV0Qm94KTsKKwkJb3B0aW9uc1BhbmVsMS5hZGQoaW5wdXRMYWJlbCk7CisJCW9wdGlvbnNQYW5lbDEuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWwxLmFkZChidW5kbGVGaWVsZCk7CisJCW9wdGlvbnNQYW5lbDEuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWwxLmFkZChpbnB1dEJ1dHRvbik7CisJCW9wdGlvbnNQYW5lbDIuYWRkKG91dHB1dExhYmVsKTsKKwkJb3B0aW9uc1BhbmVsMi5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDIuYWRkKGRpcmVjdG9yeUZpZWxkKTsKKwkJb3B0aW9uc1BhbmVsMi5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCW9wdGlvbnNQYW5lbDIuYWRkKG91dHB1dEJ1dHRvbik7CisJCW9wdGlvbnNQYW5lbEEuYWRkKHNjYW5DaGVjayk7CisJCW9wdGlvbnNQYW5lbEEuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlvcHRpb25zUGFuZWxBLmFkZChzY2FuRmllbGQpOworCQlvcHRpb25zUGFuZWxBLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJb3B0aW9uc1BhbmVsQS5hZGQoc2NhbkJ1dHRvbik7CisJCW9wdGlvbnNCb3guYWRkKG9wdGlvbnNQYW5lbDEpOworCQlvcHRpb25zQm94LmFkZChvcHRpb25zUGFuZWwyKTsKKwkJb3B0aW9uc0JveC5hZGQob3B0aW9uc1BhbmVsQSk7CisJCW9wdGlvbnNCb3guYWRkKGZvcm1hdFBhbmVsKTsKKwkJb3B0aW9uc0JveC5hZGQob3B0aW9uc1BhbmVsNik7CisJCW9wdGlvbnNQYW5lbC5hZGQob3B0aW9uc0JveCk7CisJCQorCQkvLyAqKiBJTlRFUlZBTCBQQU5FTCBTRVRVUCAqKgorCQlTdHJpbmcgYm94QXJyYXkxW10gPSB7IjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjE1IiwiMjAiLCIyNCIsIjI1IiwiMzAifTsKKwkJU3RyaW5nIGJveEFycmF5MltdID0ge1Jlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfdGltZV9taW51dGVzIiksCisJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfaG91cnMiKSwKKwkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfdGltZV9kYXlzIil9OworCQlTdHJpbmcgYm94QXJyYXkzW10gPSB7IjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsCisJCQkJCQkJICAiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjAifTsKKwkJU3RyaW5nIGJveEFycmF5NFtdID0geyIwMCIsIjE1IiwiMzAiLCI0NSJ9OworCQlTdHJpbmcgYm94QXJyYXk1W10gPSB7UmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX2V2ZXJ5ZGF5IiksCisJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfbW9uZGF5IiksCisJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfdHVlc2RheSIpLAorCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX3dlZG5lc2RheSIpLAorCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl90aW1lX3RodXJzZGF5IiksCisJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfZnJpZGF5IiksCisJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX3RpbWVfc2F0dXJkYXkiKSwKKwkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVwb3J0ZXJfdGltZV9zdW5kYXkiKX07CisJCQorCQlKTGFiZWwgY29sb25MYWJlbCA9IG5ldyBKTGFiZWwoIjoiKTsKKwkJc2VxdWVudGlhbFJhZGlvID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWwiKSk7CisJCWRlZmluZWRSYWRpbyA9IG5ldyBKUmFkaW9CdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJyZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkIiksIHRydWUpOworCQl2YWx1ZUNvbWJvID0gbmV3IEpDb21ib0JveChib3hBcnJheTEpOworCQl1bml0Q29tYm8gPSBuZXcgSkNvbWJvQm94KGJveEFycmF5Mik7CisJCWhvdXJDb21ibyA9IG5ldyBKQ29tYm9Cb3goYm94QXJyYXkzKTsKKwkJbWludXRlQ29tYm8gPSBuZXcgSkNvbWJvQm94KGJveEFycmF5NCk7CisJCWRheUNvbWJvID0gbmV3IEpDb21ib0JveChib3hBcnJheTUpOworCQlKUGFuZWwgaW50ZXJ2YWxQYW5lbDEgPSBuZXcgSlBhbmVsKCk7CisJCUpQYW5lbCBpbnRlcnZhbFBhbmVsMiA9IG5ldyBKUGFuZWwoKTsKKwkJaW50ZXJ2YWxQYW5lbDEuc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworCQlpbnRlcnZhbFBhbmVsMi5zZXRMYXlvdXQobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5MRUZUKSk7CisJCUJveCBpbnRlcnZhbEJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCWludGVydmFsUGFuZWwuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCQorCQlCdXR0b25Hcm91cCBiZyA9IG5ldyBCdXR0b25Hcm91cCgpOworCQliZy5hZGQoc2VxdWVudGlhbFJhZGlvKTsKKwkJYmcuYWRkKGRlZmluZWRSYWRpbyk7CisJCQorCQlpbnRlcnZhbFBhbmVsMS5hZGQoc2VxdWVudGlhbFJhZGlvKTsKKwkJaW50ZXJ2YWxQYW5lbDEuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlpbnRlcnZhbFBhbmVsMS5hZGQodmFsdWVDb21ibyk7CisJCWludGVydmFsUGFuZWwxLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJaW50ZXJ2YWxQYW5lbDEuYWRkKHVuaXRDb21ibyk7CisJCWludGVydmFsUGFuZWwyLmFkZChkZWZpbmVkUmFkaW8pOworCQlpbnRlcnZhbFBhbmVsMi5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCWludGVydmFsUGFuZWwyLmFkZChob3VyQ29tYm8pOworCQlpbnRlcnZhbFBhbmVsMi5hZGQoY29sb25MYWJlbCk7CisJCWludGVydmFsUGFuZWwyLmFkZChtaW51dGVDb21ibyk7CisJCWludGVydmFsUGFuZWwyLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJaW50ZXJ2YWxQYW5lbDIuYWRkKGRheUNvbWJvKTsKKwkJaW50ZXJ2YWxCb3guYWRkKGludGVydmFsUGFuZWwxKTsKKwkJaW50ZXJ2YWxCb3guYWRkKGludGVydmFsUGFuZWwyKTsKKwkJaW50ZXJ2YWxQYW5lbC5hZGQoaW50ZXJ2YWxCb3gsIEJvcmRlckxheW91dC5XRVNUKTsKKwkJCisJCS8vICoqIE1BSU5CT1ggU0VUVVAgKioKKwkJbWFpbkJveC5yZW1vdmVBbGwoKTsKKwkJbWFpbkJveC5hZGQoc3RhdHVzUGFuZWwpOworCQltYWluQm94LmFkZChpbnRlcnZhbFBhbmVsKTsKKwkJbWFpbkJveC5hZGQob3B0aW9uc1BhbmVsKTsKKwkJCisJCS8vICoqIE1BSU4gRlJBTUUgU0VUVVAgKioKKwkJc2V0TG9jYXRpb24obmV3IGphdmEuYXd0LlBvaW50KDI1LCAyNSkpOworCQlzZXRTaXplKG1haW5EaW0pOworCQkvLygoSkNvbXBvbmVudClnZXRDb250ZW50UGFuZSgpKS5zZXRNYXhpbXVtU2l6ZShkaW1NYWluTWF4KTsKKwkJLy8oKEpDb21wb25lbnQpZ2V0Q29udGVudFBhbmUoKSkuc2V0TWluaW11bVNpemUoZGltTWFpbk1pbik7CisJCS8vc2V0Sk1lbnVCYXIoak1lbnVCYXJNYWluKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5yZW1vdmVBbGwoKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5hZGQobWFpbkJveCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCXNldFRpdGxlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVzb3VyY2VfYnVuZGxlX3JlcG9ydGVyIikpOworCQkvL3ZhbGlkYXRlVHJlZSgpOworCQlzZXRDb21wb25lbnRzVG9EZWZhdWx0cygpOworCQluZXh0UmVwb3J0ID0gZ2VuZXJhdGVOZXh0UmVwb3J0RGF0ZSgpOworCQl1cGRhdGVEYXRlRmllbGRzKCk7CisJCXJlcGFpbnQoKTsKKwkJCisJCWFkZFdpbmRvd0xpc3RlbmVyKG5ldyBqYXZhLmF3dC5ldmVudC5XaW5kb3dBZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudCBldikgeworCQkJCXRoaXNXaW5kb3dDbG9zaW5nKGV2KTsKKwkJCX0KKwkJfSk7CisJfQorCQorCXB1YmxpYyB2b2lkIHRoaXNXaW5kb3dDbG9zaW5nKFdpbmRvd0V2ZW50IGV2KSB7CisJCXNldFZpc2libGUoZmFsc2UpOworCQlkaXNwb3NlKCk7CisJCVN5c3RlbS5leGl0KDApOworCX0KKwkKKwlwcml2YXRlIHZvaWQgc2V0SW5wdXRCdW5kbGUoKSB7CisJCWludCByZXN1bHQgPSBidW5kbGVGaWxlQ2hvb3Nlci5zaG93T3BlbkRpYWxvZyh0aGlzKTsKKwkJaWYgKHJlc3VsdCA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKwkJCUZpbGUgZiA9IGJ1bmRsZUZpbGVDaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOworCQkJaWYgKGYgIT0gbnVsbCkgeworCQkJCWJ1bmRsZUZpZWxkLnNldFRleHQoZi5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfYmFzZV9jbGFzc19maWxlIixmLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQl0cnkge1ByZWZlcmVuY2VzLnNhdmVQcmVmZXJlbmNlcygpO30gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkge30KKwkJCX0KKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgc2V0T3V0cHV0QnVuZGxlKCkgeworCQlpbnQgcmVzdWx0ID0gZGlyZWN0b3J5RmlsZUNob29zZXIuc2hvd09wZW5EaWFsb2codGhpcyk7CisJCWlmIChyZXN1bHQgPT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisJCQlGaWxlIGYgPSBkaXJlY3RvcnlGaWxlQ2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsKKwkJCWlmICghZi5pc0RpcmVjdG9yeSgpKSBmID0gbmV3IEZpbGUoZi5nZXRQYXJlbnQoKSk7CisJCQlpZiAoZiAhPSBudWxsKSB7CisJCQkJZGlyZWN0b3J5RmllbGQuc2V0VGV4dChmLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQlQcmVmZXJlbmNlcy5zZXRQcmVmZXJlbmNlKCJyZXBvcnRlcl9vdXRwdXRfZGlyZWN0b3J5IixmLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQl0cnkge1ByZWZlcmVuY2VzLnNhdmVQcmVmZXJlbmNlcygpO30gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkge30KKwkJCX0KKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgc2V0U2NhbkZpbGUoKSB7CisJCWludCByZXN1bHQgPSBzY2FuRmlsZUNob29zZXIuc2hvd09wZW5EaWFsb2codGhpcyk7CisJCWlmIChyZXN1bHQgPT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisJCQlGaWxlIGYgPSBzY2FuRmlsZUNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7CisJCQlpZiAoZiAhPSBudWxsKSB7CisJCQkJc2NhbkZpZWxkLnNldFRleHQoZi5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgicmVwb3J0ZXJfc2Nhbl9maWxlIixmLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQl0cnkge1ByZWZlcmVuY2VzLnNhdmVQcmVmZXJlbmNlcygpO30gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkge30KKwkJCX0KKwkJfQorCX0KKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VXNhZ2UoKSB7CisJCXJldHVybiAiXG5SQlJlcG9ydGVyIENvbW1hbmQgTGluZSBVc2FnZTpcblxuIiArCisJCQkgICAiRGVmYXVsdCBVc2FnZSAoR1VJKTogICBqYXZhIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXJcbiIgKworCQkJICAgIk9wdGlvbnMgVXNhZ2U6ICAgICAgICAgamF2YSBjb20uaWJtLnJibS5SQlJlcG9ydGVyIFstZ3VpIHwgLW5vdyB8IC1saW5lXVxuXG4iICsgCisJCQkgICAiT3B0aW9uczogICAgICAgICAgICAgICAtZ3VpICAgICBSdW4gdGhlIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZVxuIiArCisJCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAtbm93ICAgICBFeGVjdXRlIHRoZSBSZXBvcnQgR2VuZXJhdGlvbiBJbW1lZGlhdGVseVxuIiArCisJCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAtbGluZSAgICBSdW4gdGhlIFJlcG9ydGVyIHdpdGhvdXQgdGhlIEdVSSI7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKwkgICAgUkJSZXBvcnRlciByZXBvcnRlcjsKKwkJaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKKwkJCWlmIChhcmdzWzBdLmVxdWFscygiLWd1aSIpKSB7CisJCQkgICAgcmVwb3J0ZXIgPSBuZXcgUkJSZXBvcnRlcih0cnVlKTsJCisJCQl9IGVsc2UgaWYgKGFyZ3NbMF0uZXF1YWxzKCItbm93IikpIHsKKwkJCQlyZXBvcnRlciA9IG5ldyBSQlJlcG9ydGVyKGZhbHNlKTsKKwkJCQl0cnkgeworCQkJCQlyZXBvcnRlci5nZW5lcmF0ZVJlcG9ydHMoKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJSQlJlcG9ydGVyOiBHZW5lcmF0aW9uIG9mIHJlcG9ydHMgc3VjY2Vzc2Z1bC4gIiArIG5ldyBEYXRlKCkpOworCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRoZXJlIHdhcyBhbiBlcnJvciBnZW5lcmF0aW5nIHRoZSByZXBvcnRzLi4uXG5cblx0IiArIGlvZS5nZXRNZXNzYWdlKCkpOworCQkJCX0KKwkJCQlyZXBvcnRlci50aGlzV2luZG93Q2xvc2luZyhudWxsKTsKKwkJCX0gZWxzZSBpZiAoYXJnc1swXS5lcXVhbHMoIi1saW5lIikpIHsKKwkJCQlyZXBvcnRlciA9IG5ldyBSQlJlcG9ydGVyKGZhbHNlKTsKKwkJCQlpZiAoIXJlcG9ydGVyLnJ1bm5pbmcpCisJCQkJICAgIHJlcG9ydGVyLnRvZ2dsZVN0YXR1cygpOworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUkJSZXBvcnRlcjogTmV4dCBSZXBvcnQgYXQgIiArIHJlcG9ydGVyLm5leHRSZXBvcnQudG9TdHJpbmcoKSk7CisJCQl9IGVsc2UgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihnZXRVc2FnZSgpKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PSAwKSB7CisJCQlyZXBvcnRlciA9IG5ldyBSQlJlcG9ydGVyKHRydWUpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLm91dC5wcmludGxuKGdldFVzYWdlKCkpOworCQl9CisJfQorCQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlJlcG9ydGVyU2Nhbm5lci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCUmVwb3J0ZXJTY2FubmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxN2RlOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlJlcG9ydGVyU2Nhbm5lci5qYXZhCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyOworaW1wb3J0IG9yZy53M2MuZG9tLio7CitpbXBvcnQgb3JnLnhtbC5zYXguKjsKKworLyoqCisgKiBSQlJlcG9ydGVyU2NhbmVyIGlzIGEgdXRpbGl0eSBjbGFzcyBmb3IgUkJSZXBvcnRlci4gSXQgY3JlYXRlcyBhIHJlcG9ydCBmcm9tIGFuIHhtbCBzZXR0aW5ncworICogZmlsZSB0aGF0IHNjYW5zIGNvZGUgZm9yIHJlc291cmNlcyBhbmQgY29tcGFyZXMgdGhlbSBhZ2FpbnN0IGEgcmVzb3VyY2UgYnVuZGxlLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJSZXBvcnRlcgorICovCitwdWJsaWMgY2xhc3MgUkJSZXBvcnRlclNjYW5uZXIgeworCXByaXZhdGUgQnVuZGxlICAgICAgIGJ1bmRsZTsKKwlwcml2YXRlIERvY3VtZW50ICAgICBjb25maWc7CisJcHJpdmF0ZSBIYXNodGFibGUgICAgZmlsZVJ1bGVzOworCXByaXZhdGUgSGFzaHRhYmxlICAgIHBhcnNlUnVsZXM7CisJcHJpdmF0ZSBIYXNodGFibGUgICAgcmVzdWx0czsKKwlwcml2YXRlIEhhc2h0YWJsZSAgICBtaXNzaW5nOworCXByaXZhdGUgYm9vbGVhbiAgICAgIHJlc3VsdHNGb3VuZDsKKwkKKwlwcm90ZWN0ZWQgUkJSZXBvcnRlclNjYW5uZXIoQnVuZGxlIGJ1bmRsZSwgRmlsZSBjb25maWdGaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXN1bHRzRm91bmQgPSBmYWxzZTsKKwkJdGhpcy5idW5kbGUgPSBidW5kbGU7CisJCQorCQl0cnkgeworCQkJSW5wdXRTb3VyY2UgaXMgPSBuZXcgSW5wdXRTb3VyY2UobmV3IEZpbGVJbnB1dFN0cmVhbShjb25maWdGaWxlKSk7CisJCQlET01QYXJzZXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOworCQkJcGFyc2VyLnBhcnNlKGlzKTsKKwkJCWNvbmZpZyA9IHBhcnNlci5nZXREb2N1bWVudCgpOworCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gc2F4ZSkgeworCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJJbGxlZ2FsIFhNTCBEb2N1bWVudDogIiArIHNheGUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCQkKKwkJRWxlbWVudCByb290ID0gY29uZmlnLmdldERvY3VtZW50RWxlbWVudCgpOworCQlmaWxlUnVsZXMgPSBnZXRGaWxlUnVsZXMocm9vdCk7CisJCXBhcnNlUnVsZXMgPSBnZXRQYXJzZVJ1bGVzKHJvb3QpOworCQkKKwkJcmVzdWx0cyA9IG5ldyBIYXNodGFibGUoKTsKKwkJRW51bWVyYXRpb24ga2V5cyA9IGJ1bmRsZS5hbGxJdGVtcy5rZXlzKCk7CisJCXdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQlTdHJpbmcga2V5ID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisJCQlCdW5kbGVJdGVtIGl0ZW0gPSAoQnVuZGxlSXRlbSlidW5kbGUuYWxsSXRlbXMuZ2V0KGtleSk7CisJCQlyZXN1bHRzLnB1dChrZXksIG5ldyBTY2FuUmVzdWx0KGl0ZW0pKTsKKwkJfQorCQkKKwkJbWlzc2luZyA9IG5ldyBIYXNodGFibGUoKTsKKwl9CisJCisJcHJvdGVjdGVkIGludCBnZXROdW1iZXJSZXNvdXJjZXNGb3VuZCgpIHsKKwkJcmV0dXJuIHJlc3VsdHMuc2l6ZSgpOworCX0KKwkKKwlwcm90ZWN0ZWQgaW50IGdldE51bWJlck1pc3NpbmdSZXNvdXJjZXMoKSB7CisJCXJldHVybiBtaXNzaW5nLnNpemUoKTsKKwl9CisJCisJcHJvdGVjdGVkIGludCBnZXROdW1iZXJVbnVzZWRSZXNvdXJjZXMoKSB7CisJCWludCBjb3VudCA9IDA7CisJCUVudW1lcmF0aW9uIGVsZW1zID0gcmVzdWx0cy5lbGVtZW50cygpOworCQl3aGlsZSAoZWxlbXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCVNjYW5SZXN1bHQgcmVzdWx0ID0gKFNjYW5SZXN1bHQpZWxlbXMubmV4dEVsZW1lbnQoKTsKKwkJCWlmIChyZXN1bHQuZ2V0T2NjdXJhbmNlcygpLnNpemUoKSA8IDEpIGNvdW50Kys7CisJCX0KKwkJcmV0dXJuIGNvdW50OworCX0KKwkKKwlwcm90ZWN0ZWQgVmVjdG9yIGdldE1pc3NpbmdSZXNvdXJjZXMoKSB7CisJCUVudW1lcmF0aW9uIGVsZW1zID0gbWlzc2luZy5lbGVtZW50cygpOworCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKKwkJd2hpbGUgKGVsZW1zLmhhc01vcmVFbGVtZW50cygpKQorCQkJdi5hZGRFbGVtZW50KGVsZW1zLm5leHRFbGVtZW50KCkpOworCQlyZXR1cm4gdjsKKwl9CisJCisJcHJvdGVjdGVkIFZlY3RvciBnZXRVbnVzZWRSZXNvdXJjZXMoKSB7CisJCUVudW1lcmF0aW9uIGVsZW1zID0gcmVzdWx0cy5lbGVtZW50cygpOworCQlWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKKwkJd2hpbGUgKGVsZW1zLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQlTY2FuUmVzdWx0IHJlc3VsdCA9IChTY2FuUmVzdWx0KWVsZW1zLm5leHRFbGVtZW50KCk7CisJCQlpZiAocmVzdWx0LmdldE9jY3VyYW5jZXMoKS5zaXplKCkgPCAxKSB7CisJCQkJdi5hZGRFbGVtZW50KHJlc3VsdCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHY7CisJfQorCQorCXByb3RlY3RlZCBib29sZWFuIHBlcmZvcm1TY2FuKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmVzdWx0c0ZvdW5kID0gZmFsc2U7CisJCQorCQlFbGVtZW50IHJvb3QgPSBjb25maWcuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CisJCU5vZGVMaXN0IG5sID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU2NhbiIpOworCQlpZiAobmwuZ2V0TGVuZ3RoKCkgPCAxKSByZXR1cm4gcmVzdWx0c0ZvdW5kOworCQlFbGVtZW50IHNjYW5fZWxlbSA9IChFbGVtZW50KW5sLml0ZW0oMCk7CisJCW5sID0gc2Nhbl9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJEaXJlY3RvcnkiKTsKKwkJZm9yIChpbnQgaT0wOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgeworCQkJRWxlbWVudCBkaXJfZWxlbSA9IChFbGVtZW50KW5sLml0ZW0oaSk7CisJCQlGaWxlIGRpcmVjdG9yeSA9IG5ldyBGaWxlKGRpcl9lbGVtLmdldEF0dHJpYnV0ZSgibG9jYXRpb24iKSk7CisJCQlib29sZWFuIHJlY3Vyc2UgPSBkaXJfZWxlbS5nZXRBdHRyaWJ1dGUoInJlY3Vyc2VfZGlyZWN0b3JpZXMiKS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIik7CisJCQlOb2RlTGlzdCBydWxlc19saXN0ID0gZGlyX2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlJ1bGVzIik7CisJCQlpZiAocnVsZXNfbGlzdC5nZXRMZW5ndGgoKSA8IDEpIGNvbnRpbnVlOworCQkJRWxlbWVudCBydWxlc19lbGVtID0gKEVsZW1lbnQpcnVsZXNfbGlzdC5pdGVtKDApOworCQkJTm9kZUxpc3QgZnJ1bGVzX2xpc3QgPSBydWxlc19lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBcHBseUZpbGVSdWxlIik7CisJCQkvLyBGb3IgZWFjaCBmaWxlIHJ1bGUKKwkJCWZvciAoaW50IGo9MDsgaiA8IGZydWxlc19saXN0LmdldExlbmd0aCgpOyBqKyspIHsKKwkJCQlFbGVtZW50IGZydWxlX2VsZW0gPSAoRWxlbWVudClmcnVsZXNfbGlzdC5pdGVtKGopOworCQkJCUZpbGVSdWxlIGZydWxlID0gKEZpbGVSdWxlKWZpbGVSdWxlcy5nZXQoZnJ1bGVfZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSk7CisJCQkJaWYgKGZydWxlID09IG51bGwpIGNvbnRpbnVlOworCQkJCU5vZGVMaXN0IHBydWxlc19saXN0ID0gZnJ1bGVfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQXBwbHlQYXJzZVJ1bGUiKTsKKwkJCQlWZWN0b3IgcHJ1bGVzX3YgPSBuZXcgVmVjdG9yKCk7CisJCQkJLy8gRm9yIGVhY2ggcGFyc2UgcnVsZQorCQkJCWZvciAoaW50IGs9MDsgayA8IHBydWxlc19saXN0LmdldExlbmd0aCgpOyBrKyspIHsKKwkJCQkJRWxlbWVudCBwcnVsZV9lbGVtID0gKEVsZW1lbnQpcHJ1bGVzX2xpc3QuaXRlbShrKTsKKwkJCQkJUGFyc2VSdWxlIHBydWxlID0gKFBhcnNlUnVsZSlwYXJzZVJ1bGVzLmdldChwcnVsZV9lbGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpKTsKKwkJCQkJaWYgKHBydWxlID09IG51bGwpIGNvbnRpbnVlOworCQkJCQlwcnVsZXNfdi5hZGRFbGVtZW50KHBydWxlKTsKKwkJCQl9CisJCQkJaWYgKHBydWxlc192LnNpemUoKSA8IDEpIGNvbnRpbnVlOworCQkJCXNjYW5EaXJlY3RvcnkoZGlyZWN0b3J5LCBmcnVsZSwgcHJ1bGVzX3YsIHJlY3Vyc2UpOworCQkJfQorCQl9CisJCQorCQlyZXR1cm4gcmVzdWx0c0ZvdW5kOworCX0KKwkKKwlwcml2YXRlIHZvaWQgc2NhbkRpcmVjdG9yeShGaWxlIGRpcmVjdG9yeSwgRmlsZVJ1bGUgZnJ1bGUsIFZlY3RvciBwcnVsZXMsIGJvb2xlYW4gcmVjdXJzZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCisJCS8vIFJlY3Vyc2lvbiBzdGVwCisJCWlmIChyZWN1cnNlKSB7CisJCQlGaWxlIGNoaWxkcmVuW10gPSBkaXJlY3RvcnkubGlzdEZpbGVzKG5ldyBqYXZhLmlvLkZpbGVGaWx0ZXIoKXsKKwkJCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisJCQkJCXJldHVybiBmLmlzRGlyZWN0b3J5KCk7CisJCQkJfQorCQkJCQorCQkJCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCQkJCXJldHVybiAiIjsKKwkJCQl9CisJCQl9KTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisJCQkJRmlsZSBuZXdfZGlyZWN0b3J5ID0gY2hpbGRyZW5baV07CisJCQkJc2NhbkRpcmVjdG9yeShuZXdfZGlyZWN0b3J5LCBmcnVsZSwgcHJ1bGVzLCByZWN1cnNlKTsKKwkJCX0KKwkJfQorCQkvLyBHbyB0aHJvdWdoIGVhY2ggYWNjZXB0YWJsZSBmaWxlCisJCUZpbGUgY2hpbGRyZW5bXSA9IGRpcmVjdG9yeS5saXN0RmlsZXMoKTsKKwkJZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKwkJCUZpbGUgZiA9IGNoaWxkcmVuW2ldOworCQkJaWYgKGYuaXNEaXJlY3RvcnkoKSB8fCAhKGZydWxlLmFwcGx5UnVsZShmLmdldE5hbWUoKSkpKSBjb250aW51ZTsKKwkJCUZpbGVSZWFkZXIgZnIgPSBuZXcgRmlsZVJlYWRlcihmKTsKKwkJCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsKKwkJCVN0cmluZyBsaW5lID0gbnVsbDsKKwkJCWludCBsaW5lX2NvdW50ID0gMDsKKwkJCS8vIFJlYWQgdGhlIGZpbGUgbGluZSBieSBsaW5lCisJCQl3aGlsZSAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisJCQkJbGluZV9jb3VudCsrOworCQkJCVZlY3RvciBmaW5kaW5ncyA9IG5ldyBWZWN0b3IoKTsKKwkJCQkvLyBBcHBseSBhbGwgcGFyc2UgcnVsZXMgdG8gZWFjaCBsaW5lCisJCQkJZm9yIChpbnQgaj0wOyBqIDwgcHJ1bGVzLnNpemUoKTsgaisrKSB7CisJCQkJCVBhcnNlUnVsZSBwcnVsZSA9IChQYXJzZVJ1bGUpcHJ1bGVzLmVsZW1lbnRBdChqKTsKKwkJCQkJVmVjdG9yIHRlbXBfcmVzdWx0cyA9IHBydWxlLmFwcGx5UnVsZShsaW5lKTsKKwkJCQkJZm9yIChpbnQgaz0wOyBrIDwgdGVtcF9yZXN1bHRzLnNpemUoKTsgaysrKSB7CisJCQkJCQlmaW5kaW5ncy5hZGRFbGVtZW50KHRlbXBfcmVzdWx0cy5lbGVtZW50QXQoaykpOworCQkJCQl9CisJCQkJfQorCQkJCWZvciAoaW50IGo9MDsgaiA8IGZpbmRpbmdzLnNpemUoKTsgaisrKSB7CisJCQkJCVN0cmluZyBuYW1lID0gKFN0cmluZylmaW5kaW5ncy5lbGVtZW50QXQoaik7CisJCQkJCU9jY3VyYW5jZSBvY2MgPSBuZXcgT2NjdXJhbmNlKGYuZ2V0TmFtZSgpLCBmLmdldEFic29sdXRlUGF0aCgpLCBsaW5lX2NvdW50KTsKKwkJCQkJLy8gSWYgdGhlIG5hbWUgaXMgZm91bmQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZXMgZGVyaXZlZCBoYXNodGFibGUKKwkJCQkJaWYgKHJlc3VsdHMuY29udGFpbnNLZXkobmFtZSkpIHsKKwkJCQkJCVNjYW5SZXN1bHQgc2Nhbl9yZXMgPSAoU2NhblJlc3VsdClyZXN1bHRzLmdldChuYW1lKTsKKwkJCQkJCXNjYW5fcmVzLmFkZE9jY3VyYW5jZShvY2MpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gQWRkIGl0IHRvIHRoZSBtaXNzaW5nIHJlc3VsdHMKKwkJCQkJCVNjYW5SZXN1bHQgc2Nhbl9yZXMgPSBuZXcgU2NhblJlc3VsdChuZXcgQnVuZGxlSXRlbShudWxsLCBuYW1lLCAiKnVua25vd24qIikpOworCQkJCQkJc2Nhbl9yZXMuYWRkT2NjdXJhbmNlKG9jYyk7CisJCQkJCQltaXNzaW5nLnB1dChuYW1lLCBzY2FuX3Jlcyk7CisJCQkJCQlyZXN1bHRzLnB1dChuYW1lLCBzY2FuX3Jlcyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJcHJpdmF0ZSBIYXNodGFibGUgZ2V0RmlsZVJ1bGVzKEVsZW1lbnQgcm9vdCkgeworCQlIYXNodGFibGUgcmVzdWx0ID0gbmV3IEhhc2h0YWJsZSgpOworCQlOb2RlTGlzdCBmcnVsZXNfbGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZpbGVSdWxlcyIpOworCQlFbGVtZW50IGZydWxlc19lbGVtID0gbnVsbDsKKwkJaWYgKGZydWxlc19saXN0LmdldExlbmd0aCgpID4gMCkgZnJ1bGVzX2VsZW0gPSAoRWxlbWVudClmcnVsZXNfbGlzdC5pdGVtKDApOworCQlpZiAoZnJ1bGVzX2VsZW0gPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKKwkJZnJ1bGVzX2xpc3QgPSBmcnVsZXNfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRmlsZVJ1bGUiKTsKKwkJZm9yIChpbnQgaT0wOyBpIDwgZnJ1bGVzX2xpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgeworCQkJRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpZnJ1bGVzX2xpc3QuaXRlbShpKTsKKwkJCUZpbGVSdWxlIGZydWxlID0gbmV3IEZpbGVSdWxlKGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIiksIGVsZW0uZ2V0QXR0cmlidXRlKCJzdGFydHNfd2l0aCIpLAorCQkJCQkJCQkJCSAgZWxlbS5nZXRBdHRyaWJ1dGUoImVuZHNfd2l0aCIpLCBlbGVtLmdldEF0dHJpYnV0ZSgiY29udGFpbnMiKSk7CisJCQlyZXN1bHQucHV0KGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIiksIGZydWxlKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwlwcml2YXRlIEhhc2h0YWJsZSBnZXRQYXJzZVJ1bGVzKEVsZW1lbnQgcm9vdCkgeworCQlIYXNodGFibGUgcmVzdWx0ID0gbmV3IEhhc2h0YWJsZSgpOworCQlOb2RlTGlzdCBwcnVsZXNfbGlzdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlBhcnNlUnVsZXMiKTsKKwkJRWxlbWVudCBwcnVsZXNfZWxlbSA9IG51bGw7CisJCWlmIChwcnVsZXNfbGlzdC5nZXRMZW5ndGgoKSA+IDApCisJCQlwcnVsZXNfZWxlbSA9IChFbGVtZW50KXBydWxlc19saXN0Lml0ZW0oMCk7CisJCWlmIChwcnVsZXNfZWxlbSA9PSBudWxsKQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJcHJ1bGVzX2xpc3QgPSBwcnVsZXNfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUGFyc2VSdWxlIik7CisJCWZvciAoaW50IGk9MDsgaSA8IHBydWxlc19saXN0LmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgZWxlbSA9IChFbGVtZW50KXBydWxlc19saXN0Lml0ZW0oaSk7CisJCQlQYXJzZVJ1bGUgcHJ1bGUgPSBuZXcgUGFyc2VSdWxlKGVsZW0uZ2V0QXR0cmlidXRlKCJuYW1lIiksIGVsZW0uZ2V0QXR0cmlidXRlKCJmb2xsb3dzIiksCisJCQkJCQkJCQkJCWVsZW0uZ2V0QXR0cmlidXRlKCJwcmVjZWRlcyIpKTsKKwkJCXJlc3VsdC5wdXQoZWxlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSwgcHJ1bGUpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorfQorCitjbGFzcyBGaWxlUnVsZSB7CisJU3RyaW5nIG5hbWU7CisJU3RyaW5nIHN0YXJ0c193aXRoOworCVN0cmluZyBlbmRzX3dpdGg7CisJU3RyaW5nIGNvbnRhaW5zOworCQorCUZpbGVSdWxlKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RhcnRzX3dpdGgsIFN0cmluZyBlbmRzX3dpdGgsIFN0cmluZyBjb250YWlucykgeworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLnN0YXJ0c193aXRoID0gc3RhcnRzX3dpdGg7CisJCXRoaXMuZW5kc193aXRoID0gZW5kc193aXRoOworCQl0aGlzLmNvbnRhaW5zID0gY29udGFpbnM7CisJfQorCQorCWJvb2xlYW4gYXBwbHlSdWxlKFN0cmluZyBzb3VyY2UpIHsKKwkJYm9vbGVhbiBhY2NlcHQgPSB0cnVlOworCQlpZiAoc3RhcnRzX3dpdGggIT0gbnVsbCAmJiBzdGFydHNfd2l0aC5sZW5ndGgoKSA+IDAgJiYgIShzb3VyY2Uuc3RhcnRzV2l0aChzdGFydHNfd2l0aCkpKSBhY2NlcHQgPSBmYWxzZTsKKwkJaWYgKGVuZHNfd2l0aCAhPSBudWxsICYmIGVuZHNfd2l0aC5sZW5ndGgoKSA+IDAgJiYgIShzb3VyY2UuZW5kc1dpdGgoZW5kc193aXRoKSkpIGFjY2VwdCA9IGZhbHNlOworCQlpZiAoY29udGFpbnMgIT0gbnVsbCAmJiBjb250YWlucy5sZW5ndGgoKSA+IDAgJiYgc291cmNlLmluZGV4T2YoY29udGFpbnMpIDwgMCkgYWNjZXB0ID0gZmFsc2U7CisJCXJldHVybiBhY2NlcHQ7CisJfQorfQorCitjbGFzcyBQYXJzZVJ1bGUgeworCVN0cmluZyBuYW1lOworCVN0cmluZyBiZWZvcmU7CisJU3RyaW5nIGFmdGVyOworCQorCVBhcnNlUnVsZShTdHJpbmcgbmFtZSwgU3RyaW5nIGJlZm9yZSwgU3RyaW5nIGFmdGVyKSB7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMuYmVmb3JlID0gYmVmb3JlOworCQl0aGlzLmFmdGVyID0gYWZ0ZXI7CisJfQorCQorCS8vIHJldHVybnMgdGhlIHZlY3RvciBvZiBzdHJpbmdzIGZvdW5kIGFmdGVyIGJlZm9yZSBhbmQgYmVmb3JlIGFmdGVyCisJCisJVmVjdG9yIGFwcGx5UnVsZShTdHJpbmcgc291cmNlKSB7CisJCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOworCQlpZiAoYmVmb3JlICE9IG51bGwgJiYgYmVmb3JlLmxlbmd0aCgpID4gMCkgeworCQkJaWYgKGFmdGVyICE9IG51bGwgJiYgYWZ0ZXIubGVuZ3RoKCkgPiAwKSB7CisJCQkJLy8gQm90aCBiZWZvcmUgYW5kIGFmdGVyIG5vbi1lbXB0eQorCQkJCWludCBiZWZvcmVfaW5kZXggPSAtMTsKKwkJCQlpbnQgYWZ0ZXJfaW5kZXggPSAtMTsKKwkJCQl3aGlsZSAoKGJlZm9yZV9pbmRleCA9IHNvdXJjZS5pbmRleE9mKGJlZm9yZSwgKytiZWZvcmVfaW5kZXgpKSA+PSAwKSB7CisJCQkJCS8vYmVmb3JlX2luZGV4ID0gc291cmNlLmluZGV4T2YoYmVmb3JlLCBiZWZvcmVfaW5kZXgpOworCQkJCQlhZnRlcl9pbmRleCA9IC0xOworCQkJCQlhZnRlcl9pbmRleCA9IHNvdXJjZS5pbmRleE9mKGFmdGVyLCBiZWZvcmVfaW5kZXggKyBiZWZvcmUubGVuZ3RoKCkrMSk7CisJCQkJCWlmIChhZnRlcl9pbmRleCA8IDAgfHwgYmVmb3JlX2luZGV4IDwgMCB8fCBiZWZvcmUubGVuZ3RoKCkgPCAwKSB7CisJCQkJCSAgICBicmVhazsKKwkJCQkJfQorCQkJCQl2LmFkZEVsZW1lbnQoc291cmNlLnN1YnN0cmluZyhiZWZvcmVfaW5kZXggKyBiZWZvcmUubGVuZ3RoKCksIGFmdGVyX2luZGV4KSk7CisJCQkJCWJlZm9yZV9pbmRleCA9IGFmdGVyX2luZGV4OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLy8gQmVmb3JlIG5vbi1lbXB0eSwgYWZ0ZXIgZW1wdHkKKwkJCQlpbnQgaW5kZXggPSAtMTsKKwkJCQl3aGlsZSAoc291cmNlLmluZGV4T2YoYmVmb3JlLCArK2luZGV4KSA+PSAwKSB7CisJCQkJCWluZGV4ID0gc291cmNlLmluZGV4T2YoYmVmb3JlLCBpbmRleCk7CisJCQkJCVN0cmluZyByZXN1bHQgPSBzb3VyY2Uuc3Vic3RyaW5nKGluZGV4ICsgYmVmb3JlLmxlbmd0aCgpLCBzb3VyY2UubGVuZ3RoKCkpOworCQkJCQlpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCgpID4gMCkgdi5hZGRFbGVtZW50KHJlc3VsdCk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKGFmdGVyICE9IG51bGwgJiYgYWZ0ZXIubGVuZ3RoKCkgPiAwKSB7CisJCQkvLyBCZWZvcmUgZW1wdHksIGFmdGVyIG5vdAorCQkJaW50IGluZGV4ID0gLTE7CisJCQl3aGlsZSAoc291cmNlLmluZGV4T2YoYWZ0ZXIsICsraW5kZXgpID49IDApIHsKKwkJCQlpbmRleCA9IHNvdXJjZS5pbmRleE9mKGJlZm9yZSwgaW5kZXgpOworCQkJCVN0cmluZyByZXN1bHQgPSBzb3VyY2Uuc3Vic3RyaW5nKDAsIGluZGV4KTsKKwkJCQlpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCgpID4gMCkgdi5hZGRFbGVtZW50KHJlc3VsdCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBCZWZvcmUgYW5kIGFmdGVyIGVtcHR5CisJCQl2LmFkZEVsZW1lbnQoc291cmNlKTsKKwkJfQorCQlyZXR1cm4gdjsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCVE1YRXhwb3J0ZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlRNWEV4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhZWRhYQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlRNWEV4cG9ydGVyLmphdmEKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZS4qOworaW1wb3J0IG9yZy53M2MuZG9tLio7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHBsdWctaW4gdG8gUkJNYW5hZ2VyIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGV4cG9ydCBSZXNvdXJjZSBCdW5kbGVzCisgKiBhbG9uZyB3aXRoIHNvbWUgb2YgdGhlIG1ldGEtZGF0YSBhc3NvY2lhdGVkIGJ5IFJCTWFuYWdlciB0byB0aGUgVE1YIHNwZWNpZmljYXRpb24uCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUTVggdmlzaXQgdGhlIHdlYiBzaXRlIDxhIGhyZWY9Imh0dHA6Ly93d3cubGlzYS5vcmcvdG14LyI+aHR0cDovL3d3dy5saXNhLm9yZy90bXgvPC9hPgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQlRNWEV4cG9ydGVyIGV4dGVuZHMgUkJFeHBvcnRlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlNJT04gPSAiMC41YSI7CisJCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGhlIFRNWCBleHBvcnRlci4KKyAgICAgKi8KKyAgICAgICAgCisgICAgcHVibGljIFJCVE1YRXhwb3J0ZXIoKSB7CisgICAgICAgIHN1cGVyKCk7CisJCQorICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBmaWxlIGNob29zZXIgaWYgbmVjZXNzYXJ5CisgICAgICAgIGlmIChjaG9vc2VyID09IG51bGwpIHsKKyAgICAgICAgICAgIGNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisgICAgICAgICAgICBjaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKXsKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlRNWCBGaWxlcyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChmLmdldE5hbWUoKS5lbmRzV2l0aCgiLnRteCIpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IC8vIGVuZCBpZgorICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBjb252ZXJ0VG9JU08oRGF0ZSBkKSB7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGdjID0gbmV3IEdyZWdvcmlhbkNhbGVuZGFyKCk7CisgICAgICAgIGdjLnNldFRpbWUoZCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9JU08oZ2MpOworICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBjb252ZXJ0VG9JU08oR3JlZ29yaWFuQ2FsZW5kYXIgZ2MpIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChTdHJpbmcudmFsdWVPZihnYy5nZXQoQ2FsZW5kYXIuWUVBUikpKTsKKyAgICAgICAgaW50IG1vbnRoID0gZ2MuZ2V0KENhbGVuZGFyLk1PTlRIKSsxOworICAgICAgICBidWZmZXIuYXBwZW5kKCgobW9udGggPCAxMCkgPyAiMCIgOiAiIikgKyBTdHJpbmcudmFsdWVPZihtb250aCkpOworICAgICAgICBpbnQgZGF5ID0gZ2MuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoKChkYXkgPCAxMCkgPyAiMCIgOiAiIikgKyBTdHJpbmcudmFsdWVPZihkYXkpKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiVCIpOworICAgICAgICBpbnQgaG91ciA9IGdjLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoKChob3VyIDwgMTApID8gIjAiIDogIiIpICsgU3RyaW5nLnZhbHVlT2YoaG91cikpOworICAgICAgICBpbnQgbWludXRlID0gZ2MuZ2V0KENhbGVuZGFyLk1JTlVURSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoKChtaW51dGUgPCAxMCkgPyAiMCIgOiAiIikgKyBTdHJpbmcudmFsdWVPZihtaW51dGUpKTsKKyAgICAgICAgaW50IHNlY29uZCA9IGdjLmdldChDYWxlbmRhci5TRUNPTkQpOworICAgICAgICBidWZmZXIuYXBwZW5kKCgoc2Vjb25kIDwgMTApID8gIjAiIDogIiIpICsgU3RyaW5nLnZhbHVlT2Yoc2Vjb25kKSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIloiKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOworICAgIH0KKwkKKyAgICBwcml2YXRlIFN0cmluZyBjb252ZXJ0RW5jb2RpbmcoQnVuZGxlSXRlbSBpdGVtKSB7CisgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgaXRlbS5nZXRQYXJlbnRHcm91cCgpICE9IG51bGwgJiYgaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldFBhcmVudEJ1bmRsZSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKS5nZXRMYW5ndWFnZUVuY29kaW5nKCk7CisgICAgICAgICAgICBTdHJpbmcgY291bnRyeSA9IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKS5nZXRDb3VudHJ5RW5jb2RpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyB2YXJpYW50ID0gaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldFBhcmVudEJ1bmRsZSgpLmdldFZhcmlhbnRFbmNvZGluZygpOworICAgICAgICAgICAgaWYgKGxhbmd1YWdlICE9IG51bGwgJiYgIWxhbmd1YWdlLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICAvL2xhbmd1YWdlID0gbGFuZ3VhZ2UudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoY291bnRyeSAhPSBudWxsICYmICFjb3VudHJ5LmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9jb3VudHJ5ID0gY291bnRyeS50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudCAhPSBudWxsICYmICF2YXJpYW50LmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyaWFudCA9IHZhcmlhbnQudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZSArICItIiArIGNvdW50cnkgKyAiLSIgKyB2YXJpYW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZSArICItIiArIGNvdW50cnk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCQorICAgIHByaXZhdGUgdm9pZCBhcHBlbmRUVVYoRG9jdW1lbnQgeG1sLCBFbGVtZW50IHR1LCBCdW5kbGVJdGVtIGl0ZW0pIHsKKyAgICAgICAgRWxlbWVudCB0dXYgPSB4bWwuY3JlYXRlRWxlbWVudCgidHV2Iik7CisgICAgICAgIHR1di5zZXRBdHRyaWJ1dGUoImxhbmciLCBjb252ZXJ0RW5jb2RpbmcoaXRlbSkpOworICAgICAgICB0dXYuc2V0QXR0cmlidXRlKCJjcmVhdGlvbmRhdGUiLGNvbnZlcnRUb0lTTyhpdGVtLmdldENyZWF0ZWREYXRlKCkpKTsKKyAgICAgICAgdHV2LnNldEF0dHJpYnV0ZSgiY3JlYXRpb25pZCIsaXRlbS5nZXRDcmVhdG9yKCkpOworICAgICAgICB0dXYuc2V0QXR0cmlidXRlKCJjaGFuZ2VkYXRlIixjb252ZXJ0VG9JU08oaXRlbS5nZXRNb2RpZmllZERhdGUoKSkpOworICAgICAgICB0dXYuc2V0QXR0cmlidXRlKCJjaGFuZ2VpZCIsaXRlbS5nZXRNb2RpZmllcigpKTsKKyAgICAgICAgaXRlbS5nZXRDb21tZW50KCk7CisgICAgICAgIGl0ZW0uaXNUcmFuc2xhdGVkKCk7CisJCQorICAgICAgICBFbGVtZW50IGNvbW1lbnRfcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisgICAgICAgIGNvbW1lbnRfcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoaXRlbS5nZXRDb21tZW50KCkpKTsKKyAgICAgICAgY29tbWVudF9wcm9wLnNldEF0dHJpYnV0ZSgidHlwZSIsIngtQ29tbWVudCIpOworICAgICAgICB0dXYuYXBwZW5kQ2hpbGQoY29tbWVudF9wcm9wKTsKKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQgdHJhbnNsYXRlZF9wcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKyAgICAgICAgdHJhbnNsYXRlZF9wcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcudmFsdWVPZihpdGVtLmlzVHJhbnNsYXRlZCgpKSkpOworICAgICAgICB0cmFuc2xhdGVkX3Byb3Auc2V0QXR0cmlidXRlKCJ0eXBlIiwieC1UcmFuc2xhdGVkIik7CisgICAgICAgIHR1di5hcHBlbmRDaGlsZCh0cmFuc2xhdGVkX3Byb3ApOworCQkKKyAgICAgICAgSGFzaHRhYmxlIGxvb2t1cHMgPSBpdGVtLmdldExvb2t1cHMoKTsKKyAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9IGxvb2t1cHMua2V5cygpOworICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIGtleSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gKFN0cmluZylsb29rdXBzLmdldChrZXkpOworICAgICAgICAgICAgRWxlbWVudCBsb29rdXBfcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisgICAgICAgICAgICBsb29rdXBfcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoa2V5ICsgIj0iICsgdmFsdWUpKTsKKyAgICAgICAgICAgIGxvb2t1cF9wcm9wLnNldEF0dHJpYnV0ZSgidHlwZSIsIngtTG9va3VwIik7CisgICAgICAgICAgICB0dXYuYXBwZW5kQ2hpbGQobG9va3VwX3Byb3ApOworICAgICAgICB9CisJCQorICAgICAgICBFbGVtZW50IHNlZyA9IHhtbC5jcmVhdGVFbGVtZW50KCJzZWciKTsKKyAgICAgICAgc2VnLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShpdGVtLmdldFRyYW5zbGF0aW9uKCkpKTsKKyAgICAgICAgdHV2LmFwcGVuZENoaWxkKHNlZyk7CisJCQorICAgICAgICB0dS5hcHBlbmRDaGlsZCh0dXYpOworICAgIH0KKwkKKyAgICBwdWJsaWMgdm9pZCBleHBvcnQoUkJNYW5hZ2VyIHJibSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHJibSA9PSBudWxsKSByZXR1cm47CisgICAgICAgIC8vIE9wZW4gdGhlIFNhdmUgRGlhbG9nCisgICAgICAgIGludCByZXRfdmFsID0gY2hvb3Nlci5zaG93U2F2ZURpYWxvZyhudWxsKTsKKyAgICAgICAgaWYgKHJldF92YWwgIT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSByZXR1cm47CisgICAgICAgIC8vIFJldHJpZXZlIGJhc2ljIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgRmlsZSBmaWxlID0gY2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlsZShzKSB3ZSB3aWxsIGJlIHdvcmtpbmcgd2l0aAorICAgICAgICBGaWxlIGRpcmVjdG9yeSA9IG5ldyBGaWxlKGZpbGUuZ2V0UGFyZW50KCkpOyAgICAgICAgICAgIC8vIFRoZSBkaXJlY3Rvcnkgd2Ugd2lsbCBiZSB3cml0aW5nIHRvCisgICAgICAgIFN0cmluZyBiYXNlX25hbWUgPSBmaWxlLmdldE5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGJhc2UgbmFtZSBvZiB0aGUgZmlsZXMgd2Ugd2lsbCB3cml0ZQorICAgICAgICBpZiAoYmFzZV9uYW1lID09IG51bGwgfHwgYmFzZV9uYW1lLmVxdWFscygiIikpIGJhc2VfbmFtZSA9IHJibS5nZXRCYXNlQ2xhc3MoKTsKKyAgICAgICAgaWYgKGJhc2VfbmFtZS5lbmRzV2l0aCgiLnRteCIpKSBiYXNlX25hbWUgPSBiYXNlX25hbWUuc3Vic3RyaW5nKDAsYmFzZV9uYW1lLmxlbmd0aCgpLTQpOworCQkKKyAgICAgICAgU3RyaW5nIGZpbGVfbmFtZSA9IGJhc2VfbmFtZSArICIudG14IjsKKyAgICAgICAgCisgICAgICAgIFZlY3RvciBidW5kbGVfdiA9IHJibS5nZXRCdW5kbGVzKCk7CisgICAgICAgIEJ1bmRsZSBtYWluX2J1bmRsZSA9IChCdW5kbGUpYnVuZGxlX3YuZWxlbWVudEF0KDApOworICAgICAgICAKKyAgICAgICAgRG9jdW1lbnQgeG1sID0gbmV3IERvY3VtZW50SW1wbCgpOworICAgICAgICBFbGVtZW50IHJvb3QgPSB4bWwuY3JlYXRlRWxlbWVudCgidG14Iik7CisgICAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwgIjEuMiIpOworICAgICAgICB4bWwuYXBwZW5kQ2hpbGQocm9vdCk7CisJCQorICAgICAgICBFbGVtZW50IGhlYWRlciA9IHhtbC5jcmVhdGVFbGVtZW50KCJoZWFkZXIiKTsKKyAgICAgICAgRWxlbWVudCBub3RlID0geG1sLmNyZWF0ZUVsZW1lbnQoIm5vdGUiKTsKKyAgICAgICAgbm90ZS5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBSQk1hbmFnZXIiKSk7CisgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChub3RlKTsKKyAgICAgICAgaGVhZGVyLnNldEF0dHJpYnV0ZSgiY3JlYXRpb250b29sIiwgIlJCTWFuYWdlciIpOworICAgICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKCJjcmVhdGlvbnRvb2x2ZXJzaW9uIiwgVkVSU0lPTik7CisgICAgICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoImRhdGF0eXBlIiwgIlBsYWluVGV4dCIpOworICAgICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKCJzZWd0eXBlIiwgInNlbnRhbmNlIik7CisgICAgICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoImFkbWlubGFuZyIsICJlbi11cyIpOworICAgICAgICBoZWFkZXIuc2V0QXR0cmlidXRlKCJzcmNsYW5nIiwgIkVOIik7CisgICAgICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoIm8tdG1mIiwgIm5vbmUiKTsKKyAgICAgICAgaGVhZGVyLnNldEF0dHJpYnV0ZSgiY3JlYXRpb25kYXRlIiwgY29udmVydFRvSVNPKG5ldyBEYXRlKCkpKTsKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChoZWFkZXIpOworCQkKKyAgICAgICAgRWxlbWVudCBib2R5ID0geG1sLmNyZWF0ZUVsZW1lbnQoImJvZHkiKTsKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChib2R5KTsKKwkJCisgICAgICAgIFZlY3RvciBncm91cF92ID0gbWFpbl9idW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKTsKKyAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggYnVuZGxlIGdyb3VwIGluIG1haW5fYnVuZGxlCisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGdyb3VwX3Yuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIG1haW5fZ3JvdXAgPSAoQnVuZGxlR3JvdXApZ3JvdXBfdi5lbGVtZW50QXQoaSk7CisgICAgICAgICAgICAvLyBHYXRoZXIgYSBncm91cCBvZiBncm91cHMgb2YgdGhlIHNhbWUgbmFtZSBhcyBtYWluX2dyb3VwCisgICAgICAgICAgICBWZWN0b3IgYWxsX2dyb3Vwc192ID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgZm9yIChpbnQgaj0xOyBqIDwgYnVuZGxlX3Yuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVfdi5lbGVtZW50QXQoaik7CisgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZS5oYXNHcm91cChtYWluX2dyb3VwLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yIGdyb3VwcyA9IGJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrPTA7IGsgPCBncm91cHMuc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUdyb3VwIGdyb3VwID0gKEJ1bmRsZUdyb3VwKWdyb3Vwcy5lbGVtZW50QXQoayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZ2V0TmFtZSgpLmVxdWFscyhtYWluX2dyb3VwLmdldE5hbWUoKSkpIGFsbF9ncm91cHNfdi5hZGRFbGVtZW50KGdyb3VwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGoKKyAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGl0ZW0gaW4gbWFpbl9ncm91cAorICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgbWFpbl9ncm91cC5nZXRJdGVtQ291bnQoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlSXRlbSBtYWluX2l0ZW0gPSBtYWluX2dyb3VwLmdldEJ1bmRsZUl0ZW0oaik7CisgICAgICAgICAgICAgICAgRWxlbWVudCB0dSA9IHhtbC5jcmVhdGVFbGVtZW50KCJ0dSIpOworICAgICAgICAgICAgICAgIHR1LnNldEF0dHJpYnV0ZSgidHVpZCIsbWFpbl9pdGVtLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICB0dS5zZXRBdHRyaWJ1dGUoImRhdGF0eXBlIiwiVGV4dCIpOworICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgZ3JvdXAgbmFtZSBmb3IgdGhlIGl0ZW0KKyAgICAgICAgICAgICAgICBFbGVtZW50IGdyb3VwX3Byb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcCIpOworICAgICAgICAgICAgICAgIGdyb3VwX3Byb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKG1haW5fZ3JvdXAuZ2V0TmFtZSgpKSk7CisgICAgICAgICAgICAgICAgZ3JvdXBfcHJvcC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAieC1Hcm91cCIpOworICAgICAgICAgICAgICAgIHR1LmFwcGVuZENoaWxkKGdyb3VwX3Byb3ApOworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbWFpbl9pdGVtIHRvIHRoZSB4bWwKKyAgICAgICAgICAgICAgICBhcHBlbmRUVVYoeG1sLCB0dSwgbWFpbl9pdGVtKTsKKyAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGdyb3VwcyBvZiB0aGUgc2FtZSBuYW1lIGFzIG1haW5fZ3JvdXAKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrPTA7IGsgPCBhbGxfZ3JvdXBzX3Yuc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQnVuZGxlR3JvdXAgZ3JvdXAgPSAoQnVuZGxlR3JvdXApYWxsX2dyb3Vwc192LmVsZW1lbnRBdChrKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBpdGVtcyBpbiBlYWNoIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGw9MDsgbCA8IGdyb3VwLmdldEl0ZW1Db3VudCgpOyBsKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1bmRsZUl0ZW0gaXRlbSA9IGdyb3VwLmdldEJ1bmRsZUl0ZW0obCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5nZXRLZXkoKS5lcXVhbHMobWFpbl9pdGVtLmdldEtleSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRVVih4bWwsIHR1LCBpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgZm9yIC0gbAorICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGsKKyAgICAgICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKHR1KTsKKyAgICAgICAgICAgIH0gLy8gZW5kIGZvciAtIGoKKyAgICAgICAgfSAvLyBlbmQgZm9yIC0gaQorICAgICAgICBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIobmV3IEZpbGUoZGlyZWN0b3J5LGZpbGVfbmFtZSkpOworICAgICAgICBPdXRwdXRGb3JtYXQgb2YgPSBuZXcgT3V0cHV0Rm9ybWF0KHhtbCk7CisgICAgICAgIG9mLnNldEluZGVudGluZyh0cnVlKTsKKyAgICAgICAgb2Yuc2V0RW5jb2RpbmcoIklTTy04ODU5LTEiKTsKKyAgICAgICAgWE1MU2VyaWFsaXplciBzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoZncsIG9mKTsKKyAgICAgICAgc2VyaWFsaXplci5zZXJpYWxpemUoeG1sKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCVE1YSW1wb3J0ZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlRNWEltcG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjOGQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQlRNWEltcG9ydGVyLmphdmEKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7CisKK2ltcG9ydCBvcmcudzNjLmRvbS4qOworaW1wb3J0IG9yZy54bWwuc2F4Lio7CisKK2ltcG9ydCBjb20uaWJtLnJibS5ndWkuUkJNYW5hZ2VyR1VJOworCisKKy8qKgorICogVGhpcyBpcyB0aGUgc3VwZXIgY2xhc3MgZm9yIGFsbCBpbXBvcnRlciBwbHVnLWluIGNsYXNzZXMuIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbWV0aG9kcworICogYW5kIGZ1bmN0aW9uYWxpdHkgY29tbW9uIHRvIGFsbCBpbXBvcnRlcnMuIFRoaXMgaW5jbHVkZXMgc2V0dGluZyB1cCB0aGUgb3B0aW9ucyBkaWFsb2cgYW5kCisgKiBkaXNwbGF5aW5nIGl0IHRvIHRoZSB1c2VyLCBwZXJmb3JtaW5nIHRoZSBhY3R1YWwgaW5zZXJ0aW9ucyBpbnRvIHRoZSByZXNvdXJjZSBidW5kbGUgbWFuYWdlciwKKyAqIGFuZCBtYW5hZ2luZyBhbnkgaW1wb3J0IGNvbmZsaWN0cy4KKyAqIAorICogQGF1dGhvciBKYXJlZCBKYWNrc29uCisgKiBAc2VlIGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgUkJUTVhJbXBvcnRlciBleHRlbmRzIFJCSW1wb3J0ZXIgeworCQorICAgIERvY3VtZW50IHRteF94bWwgPSBudWxsOworCisgICAgLyoqCisgICAgICogQmFzaWMgY29uc3RydWN0b3IgZm9yIHRoZSBUTVggaW1wb3J0ZXIgZnJvbSB0aGUgcGFyZW50IFJCTWFuYWdlciBkYXRhIGFuZCBhIERpYWxvZyB0aXRsZS4KKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgUkJUTVhJbXBvcnRlcihTdHJpbmcgdGl0bGUsIFJCTWFuYWdlciByYm0sIFJCTWFuYWdlckdVSSBndWkpIHsKKyAgICAgICAgc3VwZXIodGl0bGUsIHJibSwgZ3VpKTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0dXBGaWxlQ2hvb3NlcigpIHsKKyAgICAgICAgY2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCl7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGYuZ2V0TmFtZSgpLmVuZHNXaXRoKCIudG14IikpIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9UTVhfZmlsZV9kZXNjcmlwdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgYmVnaW5JbXBvcnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBzdXBlci5iZWdpbkltcG9ydCgpOworICAgICAgICBGaWxlIHRteF9maWxlID0gZ2V0Q2hvc2VuRmlsZSgpOworCQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgCUZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKHRteF9maWxlKTsKKyAgICAgICAgICAgIElucHV0U291cmNlIGlzID0gbmV3IElucHV0U291cmNlKGZpcyk7CisgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKyAgICAgICAgCXRteF94bWwgPSBidWlsZGVyLnBhcnNlKGlzKTsKKyAgICAgICAgICAgIGZpcy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIAl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgICAgIGlmICh0bXhfeG1sID09IG51bGwpCisgICAgICAgIAlyZXR1cm47CisgICAgICAgIAorICAgICAgICBpbXBvcnREb2MoKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGltcG9ydERvYygpIHsKKyAgICAgICAgaWYgKHRteF94bWwgPT0gbnVsbCkKKyAgICAgICAgCXJldHVybjsKKyAgICAgICAgRWxlbWVudCByb290ID0gdG14X3htbC5nZXREb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgTm9kZSBub2RlID0gcm9vdC5nZXRGaXJzdENoaWxkKCk7CisgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAhKG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJoZWFkZXIiKSkpKSB7CisgICAgICAgICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOworICAgICAgICB9CisgICAgICAgIC8vRWxlbWVudEltcGwgaGVhZGVyID0gKEVsZW1lbnRJbXBsKW5vZGU7CisgICAgICAgIG5vZGUgPSByb290LmdldEZpcnN0Q2hpbGQoKTsKKyAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiAobm9kZS5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFIHx8ICEobm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImJvZHkiKSkpKSB7CisgICAgICAgICAgICBub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOworICAgICAgICB9CisgICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KW5vZGU7CisgICAgICAgIHJlc29sdmVFbmNvZGluZ3MoZ2V0RW5jb2RpbmdzVmVjdG9yKGJvZHkpKTsKKwkJCisgICAgICAgIC8vIE5vdyBkbyB0aGUgYWN0dWFsIGltcG9ydCByZXNvdXJjZSBieSByZXNvdXJjZQorICAgICAgICBOb2RlTGlzdCB0dV9saXN0ID0gYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHUiKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdHVfbGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBFbGVtZW50IHR1X2VsZW0gPSAoRWxlbWVudCl0dV9saXN0Lml0ZW0oaSk7CisgICAgICAgICAgICAvLyBHZXQgdGhlIGtleSB2YWx1ZQorICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB0dV9lbGVtLmdldEF0dHJpYnV0ZSgidHVpZCIpOworICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDwgMSkKKyAgICAgICAgICAgIAljb250aW51ZTsKKyAgICAgICAgICAgIC8vIEdldCB0aGUgZ3JvdXAgaWYgaXQgZXhpc3RzCisgICAgICAgICAgICBTdHJpbmcgZ3JvdXAgPSBudWxsOworICAgICAgICAgICAgTm9kZUxpc3QgcHJvcF9saXN0ID0gdHVfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJvcCIpOworICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgcHJvcF9saXN0LmdldExlbmd0aCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50IHByb3BfZWxlbSA9IChFbGVtZW50KXByb3BfbGlzdC5pdGVtKGopOworICAgICAgICAgICAgICAgIFN0cmluZyB0eXBlID0gcHJvcF9lbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpOworICAgICAgICAgICAgICAgIGlmICh0eXBlICE9IG51bGwgJiYgdHlwZS5lcXVhbHMoIngtR3JvdXAiKSkgeworICAgICAgICAgICAgICAgICAgICBwcm9wX2VsZW0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGVMaXN0IHRleHRfbGlzdCA9IHByb3BfZWxlbS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0X2xpc3QuZ2V0TGVuZ3RoKCkgPCAxKQorICAgICAgICAgICAgICAgICAgICAJY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFRleHQgdGV4dF9lbGVtID0gKFRleHQpdGV4dF9saXN0Lml0ZW0oMCk7CisgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gdGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChncm91cCA9PSBudWxsIHx8IGdyb3VwLmxlbmd0aCgpIDwgMSkgZ3JvdXAgPSBnZXREZWZhdWx0R3JvdXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUxpc3QgdHV2X2xpc3QgPSB0dV9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0dXYiKTsKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIHR1diBlbGVtZW50CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCB0dXZfbGlzdC5nZXRMZW5ndGgoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCB0dXZfZWxlbSA9IChFbGVtZW50KXR1dl9saXN0Lml0ZW0oaik7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gdHV2X2VsZW0uZ2V0QXR0cmlidXRlKCJsYW5nIik7CisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGVuY29kaW5nCisgICAgICAgICAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYXIgYXJyYXlbXSA9IGVuY29kaW5nLnRvQ2hhckFycmF5KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgYXJyYXkubGVuZ3RoOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5W2tdID09ICctJykKKyAgICAgICAgICAgICAgICAgICAgCWFycmF5W2tdID0gJ18nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZy52YWx1ZU9mKGFycmF5KTsKKyAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHRyYW5zbGF0aW9uIHZhbHVlCisgICAgICAgICAgICAgICAgTm9kZUxpc3Qgc2VnX2xpc3QgPSB0dXZfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VnIik7CisgICAgICAgICAgICAgICAgaWYgKHNlZ19saXN0LmdldExlbmd0aCgpIDwgMSkKKyAgICAgICAgICAgICAgICAJY29udGludWU7CisgICAgICAgICAgICAgICAgRWxlbWVudCBzZWdfZWxlbSA9IChFbGVtZW50KXNlZ19saXN0Lml0ZW0oMCk7CisgICAgICAgICAgICAgICAgc2VnX2VsZW0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgTm9kZUxpc3QgdGV4dF9saXN0ID0gc2VnX2VsZW0uZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgIGlmICh0ZXh0X2xpc3QuZ2V0TGVuZ3RoKCkgPCAxKQorICAgICAgICAgICAgICAgIAljb250aW51ZTsKKyAgICAgICAgICAgICAgICBUZXh0IHRleHRfZWxlbSA9IChUZXh0KXRleHRfbGlzdC5pdGVtKDApOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHRleHRfZWxlbS5nZXROb2RlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGgoKSA8IDEpCisgICAgICAgICAgICAgICAgCWNvbnRpbnVlOworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYnVuZGxlIGl0ZW0KKyAgICAgICAgICAgICAgICBCdW5kbGVJdGVtIGl0ZW0gPSBuZXcgQnVuZGxlSXRlbShudWxsLCBuYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgLy8gR2V0IGNyZWF0aW9uLCBtb2RpZmljYXRpb24gdmFsdWVzCisgICAgICAgICAgICAgICAgaXRlbS5zZXRDcmVhdGVkRGF0ZSh0dXZfZWxlbS5nZXRBdHRyaWJ1dGUoImNyZWF0aW9uZGF0ZSIpKTsKKyAgICAgICAgICAgICAgICBpdGVtLnNldE1vZGlmaWVkRGF0ZSh0dXZfZWxlbS5nZXRBdHRyaWJ1dGUoImNoYW5nZWRhdGUiKSk7CisgICAgICAgICAgICAgICAgaWYgKHR1dl9lbGVtLmdldEF0dHJpYnV0ZSgiY2hhbmdlaWQiKSAhPSBudWxsKQorICAgICAgICAgICAgICAgIAlpdGVtLnNldE1vZGlmaWVyKHR1dl9lbGVtLmdldEF0dHJpYnV0ZSgiY2hhbmdlaWQiKSk7CisgICAgICAgICAgICAgICAgaWYgKHR1dl9lbGVtLmdldEF0dHJpYnV0ZSgiY3JlYXRpb25pZCIpICE9IG51bGwpCisgICAgICAgICAgICAgICAgCWl0ZW0uc2V0Q3JlYXRvcih0dXZfZWxlbS5nZXRBdHRyaWJ1dGUoImNyZWF0aW9uaWQiKSk7CisgICAgICAgICAgICAgICAgLy8gR2V0IHByb3BlcnRpZXMgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgcHJvcF9saXN0ID0gdHV2X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByb3AiKTsKKyAgICAgICAgICAgICAgICBIYXNodGFibGUgbG9va3VwcyA9IG51bGw7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgcHJvcF9saXN0LmdldExlbmd0aCgpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudCBwcm9wX2VsZW0gPSAoRWxlbWVudClwcm9wX2xpc3QuaXRlbShrKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBwcm9wX2VsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIik7CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9IG51bGwgJiYgdHlwZS5lcXVhbHMoIngtQ29tbWVudCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGNvbW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfZWxlbS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfbGlzdCA9IHByb3BfZWxlbS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF9saXN0LmdldExlbmd0aCgpIDwgMSkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2VsZW0gPSAoVGV4dCl0ZXh0X2xpc3QuaXRlbSgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb21tZW50ID0gdGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQgIT0gbnVsbCAmJiBjb21tZW50Lmxlbmd0aCgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIAlpdGVtLnNldENvbW1lbnQoY29tbWVudCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPSBudWxsICYmIHR5cGUuZXF1YWxzKCJ4LVRyYW5zbGF0ZWQiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSB0cmFuc2xhdGVkIGZsYWcgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfZWxlbS5ub3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfbGlzdCA9IHByb3BfZWxlbS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF9saXN0LmdldExlbmd0aCgpIDwgMSkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2VsZW0gPSAoVGV4dCl0ZXh0X2xpc3QuaXRlbSgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0X2VsZW0uZ2V0Tm9kZVZhbHVlKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0X2VsZW0uZ2V0Tm9kZVZhbHVlKCkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpdGVtLnNldFRyYW5zbGF0ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpLmVxdWFsc0lnbm9yZUNhc2UoImZhbHNlIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWl0ZW0uc2V0VHJhbnNsYXRlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpdGVtLnNldFRyYW5zbGF0ZWQoZ2V0RGVmYXVsdFRyYW5zbGF0ZWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAJaXRlbS5zZXRUcmFuc2xhdGVkKGdldERlZmF1bHRUcmFuc2xhdGVkKCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gbnVsbCAmJiB0eXBlLmVxdWFscygieC1Mb29rdXAiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGEgbG9va3VwIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX2VsZW0ubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2xpc3QgPSBwcm9wX2VsZW0uZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRfbGlzdC5nZXRMZW5ndGgoKSA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAJY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2VsZW0gPSAoVGV4dCl0ZXh0X2xpc3QuaXRlbSgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0X2VsZW0uZ2V0Tm9kZVZhbHVlKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gdGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0LmluZGV4T2YoIj0iKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29rdXBzID09IG51bGwpIGxvb2t1cHMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGtleSA9IHRleHQuc3Vic3RyaW5nKDAsdGV4dC5pbmRleE9mKCI9IikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGx2YWx1ZSA9IHRleHQuc3Vic3RyaW5nKHRleHQuaW5kZXhPZigiPSIpKzEsdGV4dC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBzLnB1dChsa2V5LCBsdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsgLyogU3RyaW5nIG91dCBvZiBib3VuZHMgLSBJZ25vcmUgYW5kIGdvIG9uICovIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAJaXRlbS5zZXRUcmFuc2xhdGVkKGdldERlZmF1bHRUcmFuc2xhdGVkKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsb29rdXBzICE9IG51bGwpIGl0ZW0uc2V0TG9va3Vwcyhsb29rdXBzKTsKKyAgICAgICAgICAgICAgICBpbXBvcnRSZXNvdXJjZShpdGVtLCBlbmNvZGluZywgZ3JvdXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCQorICAgIHByaXZhdGUgVmVjdG9yIGdldEVuY29kaW5nc1ZlY3RvcihFbGVtZW50IGJvZHkpIHsKKyAgICAgICAgU3RyaW5nIGVtcHR5ID0gIiI7CisgICAgICAgIGlmIChib2R5ID09IG51bGwpCisgICAgICAgIAlyZXR1cm4gbnVsbDsKKyAgICAgICAgSGFzaHRhYmxlIGhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIE5vZGVMaXN0IHR1X2xpc3QgPSBib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0dSIpOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB0dV9saXN0LmdldExlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIEVsZW1lbnQgdHVfZWxlbSA9IChFbGVtZW50KXR1X2xpc3QuaXRlbShpKTsKKyAgICAgICAgICAgIE5vZGVMaXN0IHR1dl9saXN0ID0gdHVfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHV2Iik7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCB0dXZfbGlzdC5nZXRMZW5ndGgoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCB0dXZfZWxlbSA9IChFbGVtZW50KXR1dl9saXN0Lml0ZW0oaik7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gdHV2X2VsZW0uZ2V0QXR0cmlidXRlKCJsYW5nIik7CisgICAgICAgICAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpCisgICAgICAgICAgICAgICAgCWNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYXIgYXJyYXlbXSA9IGVuY29kaW5nLnRvQ2hhckFycmF5KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgYXJyYXkubGVuZ3RoOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5W2tdID09ICctJykKKyAgICAgICAgICAgICAgICAgICAgCWFycmF5W2tdID0gJ18nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZy52YWx1ZU9mKGFycmF5KTsKKyAgICAgICAgICAgICAgICBpZiAoIShoYXNoLmNvbnRhaW5zS2V5KGVuY29kaW5nKSkpCisgICAgICAgICAgICAgICAgCWhhc2gucHV0KGVuY29kaW5nLGVtcHR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBWZWN0b3IgdiA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgRW51bWVyYXRpb24ga2V5cyA9IGhhc2gua2V5cygpOworICAgICAgICB3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAJdi5hZGRFbGVtZW50KGtleXMubmV4dEVsZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQnhsaWZmRXhwb3J0ZXIuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SQnhsaWZmRXhwb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2U3YjZiCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCeGxpZmZFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm07CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS50ZXh0Lio7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS4qOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLio7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uKjsKKworaW1wb3J0IG9yZy53M2MuZG9tLio7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHBsdWctaW4gdG8gUkJNYW5hZ2VyIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGV4cG9ydCBSZXNvdXJjZSBCdW5kbGVzCisgKiBhbG9uZyB3aXRoIHNvbWUgb2YgdGhlIG1ldGEtZGF0YSBhc3NvY2lhdGVkIGJ5IFJCTWFuYWdlciB0byB0aGUgWExJRkYgc3BlY2lmaWNhdGlvbi4KKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFhMSUZGIHZpc2l0IHRoZSB3ZWIgc2l0ZQorICogPGEgaHJlZj0iaHR0cDovL3d3dy5saXNhLm9yZy94bGlmZi8iPmh0dHA6Ly93d3cubGlzYS5vcmcveGxpZmYvPC9hPgorICogCisgKiBAYXV0aG9yIEdlb3JnZSBSaG90ZW4KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQnhsaWZmRXhwb3J0ZXIgZXh0ZW5kcyBSQkV4cG9ydGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSU0lPTiA9ICIwLjciOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTElGRl9EVEQgPSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL3hsaWZmL2RvY3VtZW50cy94bGlmZi5kdGQiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTElGRl9QVUJMSUNfTkFNRSA9ICItLy9YTElGRi8vRFREIFhMSUZGLy9FTiI7CisgICAgcHJpdmF0ZSBTaW1wbGVEYXRlRm9ybWF0IGRhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCIpOworCQorICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBYTElGRiBleHBvcnRlci4KKyAgICAgKi8KKyAgICAgICAgCisgICAgcHVibGljIFJCeGxpZmZFeHBvcnRlcigpIHsKKyAgICAgICAgc3VwZXIoKTsKKwkJCisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGZpbGUgY2hvb3NlciBpZiBuZWNlc3NhcnkKKyAgICAgICAgaWYgKGNob29zZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgY2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKyAgICAgICAgICAgIGNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpeworICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiWExJRkYgRmlsZXMiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZi5pc0RpcmVjdG9yeSgpIHx8IGYuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueGxmIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCQorICAgIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRUb0lTTyhEYXRlIGQpIHsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgZ2Muc2V0VGltZShkKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0lTTyhnYyk7CisgICAgfQorCQorICAgIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRUb0lTTyhHcmVnb3JpYW5DYWxlbmRhciBnYykgeworICAgIAlkYXRlRm9ybWF0LnNldENhbGVuZGFyKGdjKTsKKyAgICAgICAgcmV0dXJuIGRhdGVGb3JtYXQuZm9ybWF0KGdjLmdldFRpbWUoKSk7CisgICAgfQorCQorICAgIHByaXZhdGUgU3RyaW5nIGdldExvY2FsZShCdW5kbGUgaXRlbSkgeworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBpdGVtLmdldExhbmd1YWdlRW5jb2RpbmcoKTsKKyAgICAgICAgaWYgKGxhbmd1YWdlICE9IG51bGwgJiYgIWxhbmd1YWdlLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIC8vbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgU3RyaW5nIGNvdW50cnkgPSBpdGVtLmdldENvdW50cnlFbmNvZGluZygpOworICAgICAgICAgICAgaWYgKGNvdW50cnkgIT0gbnVsbCAmJiAhY291bnRyeS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgLy9jb3VudHJ5ID0gY291bnRyeS50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YXJpYW50ID0gaXRlbS5nZXRWYXJpYW50RW5jb2RpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFudCAhPSBudWxsICYmICF2YXJpYW50LmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy92YXJpYW50ID0gdmFyaWFudC50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2UgKyAiLSIgKyBjb3VudHJ5ICsgIi0iICsgdmFyaWFudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlICsgIi0iICsgY291bnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UGFyZW50TG9jYWxlKFN0cmluZyBsb2NhbGUpIHsKKyAgICAJCisgICAgCWludCB0cnVuY0luZGV4ID0gbG9jYWxlLmxhc3RJbmRleE9mKCctJyk7CisgICAgCWlmICh0cnVuY0luZGV4ID4gMCkgeworICAgIAkJbG9jYWxlID0gbG9jYWxlLnN1YnN0cmluZygwLCB0cnVuY0luZGV4KTsKKyAgICAJfQorICAgIAllbHNlIHsKKyAgICAJCWxvY2FsZSA9ICIiOworICAgIAl9CisgICAgCXJldHVybiBsb2NhbGU7CisgICAgfQorCQorICAgIHByaXZhdGUgdm9pZCBhZGRUcmFuc1VuaXQoRG9jdW1lbnQgeG1sLCBFbGVtZW50IGdyb3VwRWxlbSwgQnVuZGxlSXRlbSBpdGVtLCBCdW5kbGVJdGVtIHBhcmVudF9pdGVtKSB7CisgICAgICAgIEVsZW1lbnQgdHJhbnNVbml0ID0geG1sLmNyZWF0ZUVsZW1lbnQoInRyYW5zLXVuaXQiKTsKKyAgICAgICAgdHJhbnNVbml0LnNldEF0dHJpYnV0ZSgiZGF0ZSIsY29udmVydFRvSVNPKGl0ZW0uZ2V0TW9kaWZpZWREYXRlKCkpKTsKKyAgICAgICAgdHJhbnNVbml0LnNldEF0dHJpYnV0ZSgiaWQiLGl0ZW0uZ2V0S2V5KCkpOworCQkKKyAgICAgICAgU3RyaW5nIHNvdXJjZU9yVGFyZ2V0ID0gInRhcmdldCI7CisgICAgICAgIGlmIChwYXJlbnRfaXRlbSA9PSBudWxsKSB7CisgICAgICAgIAlzb3VyY2VPclRhcmdldCA9ICJzb3VyY2UiOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRWxlbWVudCBzb3VyY2UgPSB4bWwuY3JlYXRlRWxlbWVudCgic291cmNlIik7CisgICAgICAgICAgICBzb3VyY2Uuc2V0QXR0cmlidXRlKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpOworICAgICAgICAgICAgc291cmNlLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShwYXJlbnRfaXRlbS5nZXRUcmFuc2xhdGlvbigpKSk7CisgICAgICAgICAgICB0cmFuc1VuaXQuYXBwZW5kQ2hpbGQoc291cmNlKTsKKyAgICAgICAgfQorICAgICAgICBFbGVtZW50IHRhcmdldCA9IHhtbC5jcmVhdGVFbGVtZW50KHNvdXJjZU9yVGFyZ2V0KTsKKyAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgieG1sOnNwYWNlIiwicHJlc2VydmUiKTsKKyAgICAJLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdHJhbnNsYXRlIGF0dHJpYnV0ZQorICAgICAgICBpZiAoaXRlbS5pc1RyYW5zbGF0ZWQoKSkgeworICAgICAgICAJLy8gVE9ETyBIYW5kbGUgdGhlIG90aGVyIHN0YXRlcyBpbiB0aGUgZnV0dXJlLgorICAgICAgICAJdHJhbnNVbml0LnNldEF0dHJpYnV0ZSgic3RhdGUiLCAidHJhbnNsYXRlZCIpOworICAgICAgICB9CisgICAgICAgIHRhcmdldC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoaXRlbS5nZXRUcmFuc2xhdGlvbigpKSk7CisgICAgICAgIHRyYW5zVW5pdC5hcHBlbmRDaGlsZCh0YXJnZXQpOworCQkKKyAgICAgICAgaWYgKGl0ZW0uZ2V0Q29tbWVudCgpICE9IG51bGwgJiYgaXRlbS5nZXRDb21tZW50KCkubGVuZ3RoKCkgPiAxKSB7CisJICAgICAgICBFbGVtZW50IGNvbW1lbnRfcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJub3RlIik7CisJICAgICAgICBjb21tZW50X3Byb3Auc2V0QXR0cmlidXRlKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpOworCSAgICAgICAgY29tbWVudF9wcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShpdGVtLmdldENvbW1lbnQoKSkpOworCSAgICAgICAgdHJhbnNVbml0LmFwcGVuZENoaWxkKGNvbW1lbnRfcHJvcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgoaXRlbS5nZXRDcmVhdG9yKCkgIT0gbnVsbCAmJiBpdGVtLmdldENyZWF0b3IoKS5sZW5ndGgoKSA+IDEpCisgICAgICAgIAl8fCAoaXRlbS5nZXRNb2RpZmllcigpICE9IG51bGwgJiYgaXRlbS5nZXRNb2RpZmllcigpLmxlbmd0aCgpID4gMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVsZW1lbnQgdHJhbnNVbml0X3Byb3BfZ3JvdXBfZWxlbSA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wLWdyb3VwIik7CisKKyAgICAgICAgICAgIGlmIChpdGVtLmdldENyZWF0b3IoKSAhPSBudWxsICYmIGl0ZW0uZ2V0Q3JlYXRvcigpLmxlbmd0aCgpID4gMSkgeworCSAgICAgICAgICAgIEVsZW1lbnQgY3JlYXRvcl9wcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKwkgICAgICAgICAgICBjcmVhdG9yX3Byb3Auc2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiLCJjcmVhdG9yIik7CisJICAgICAgICAgICAgY3JlYXRvcl9wcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShpdGVtLmdldENyZWF0b3IoKSkpOworCQkgICAgICAgIHRyYW5zVW5pdF9wcm9wX2dyb3VwX2VsZW0uYXBwZW5kQ2hpbGQoY3JlYXRvcl9wcm9wKTsKKyAgICAgICAgICAgIH0KKwkgICAgICAgIAorICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0Q3JlYXRvcigpICE9IG51bGwgJiYgaXRlbS5nZXRDcmVhdG9yKCkubGVuZ3RoKCkgPiAxKSB7CisJICAgICAgICAgICAgRWxlbWVudCBjcmVhdGVkX3Byb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcCIpOworCSAgICAgICAgICAgIGNyZWF0ZWRfcHJvcC5zZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIsImNyZWF0ZWQiKTsKKwkgICAgICAgICAgICBjcmVhdGVkX3Byb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKGNvbnZlcnRUb0lTTyhpdGVtLmdldENyZWF0ZWREYXRlKCkpKSk7CisJCSAgICAgICAgdHJhbnNVbml0X3Byb3BfZ3JvdXBfZWxlbS5hcHBlbmRDaGlsZChjcmVhdGVkX3Byb3ApOworICAgICAgICAgICAgfQorCSAgICAgICAgCisgICAgICAgIAlpZiAoaXRlbS5nZXRNb2RpZmllcigpICE9IG51bGwgJiYgaXRlbS5nZXRNb2RpZmllcigpLmxlbmd0aCgpID4gMSkgeworCQkgICAgICAgIEVsZW1lbnQgbW9kaWZpZXJfcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisJCSAgICAgICAgbW9kaWZpZXJfcHJvcC5zZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIsIm1vZGlmaWVyIik7CisJCSAgICAgICAgbW9kaWZpZXJfcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUoaXRlbS5nZXRNb2RpZmllcigpKSk7CisJCSAgICAgICAgdHJhbnNVbml0X3Byb3BfZ3JvdXBfZWxlbS5hcHBlbmRDaGlsZChtb2RpZmllcl9wcm9wKTsKKyAgICAgICAgCX0KKwkgICAgICAgIAorCSAgICAgICAgdHJhbnNVbml0LmFwcGVuZENoaWxkKHRyYW5zVW5pdF9wcm9wX2dyb3VwX2VsZW0pOworICAgICAgICB9CisKKyAgICAgICAgZ3JvdXBFbGVtLmFwcGVuZENoaWxkKHRyYW5zVW5pdCk7CisgICAgfQorCQorICAgIHB1YmxpYyB2b2lkIGV4cG9ydChSQk1hbmFnZXIgcmJtKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAocmJtID09IG51bGwpCisgICAgICAgIAlyZXR1cm47CisgICAgICAgIC8vIE9wZW4gdGhlIFNhdmUgRGlhbG9nCisgICAgICAgIGludCByZXRfdmFsID0gY2hvb3Nlci5zaG93U2F2ZURpYWxvZyhudWxsKTsKKyAgICAgICAgaWYgKHJldF92YWwgIT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKQorICAgICAgICAJcmV0dXJuOworICAgICAgICAvLyBSZXRyaWV2ZSBiYXNpYyBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgIEZpbGUgZmlsZSA9IGNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7ICAgICAgICAgICAgICAvLyBUaGUgZmlsZShzKSB3ZSB3aWxsIGJlIHdvcmtpbmcgd2l0aAorICAgICAgICBGaWxlIGRpcmVjdG9yeSA9IG5ldyBGaWxlKGZpbGUuZ2V0UGFyZW50KCkpOyAgICAgICAgLy8gVGhlIGRpcmVjdG9yeSB3ZSB3aWxsIGJlIHdyaXRpbmcgdG8KKyAgICAgICAgU3RyaW5nIGJhc2VfbmFtZSA9IGZpbGUuZ2V0TmFtZSgpOyAgICAgICAgICAgICAgICAgIC8vIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGZpbGVzIHdlIHdpbGwgd3JpdGUKKyAgICAgICAgaWYgKGJhc2VfbmFtZSA9PSBudWxsIHx8IGJhc2VfbmFtZS5lcXVhbHMoIiIpKQorICAgICAgICAJYmFzZV9uYW1lID0gcmJtLmdldEJhc2VDbGFzcygpOworICAgICAgICBpZiAoYmFzZV9uYW1lLmVuZHNXaXRoKCIueGxmIikpCisgICAgICAgIAliYXNlX25hbWUgPSBiYXNlX25hbWUuc3Vic3RyaW5nKDAsYmFzZV9uYW1lLmxlbmd0aCgpLTQpOworCQkKKyAgICAgICAgU3RyaW5nIGZpbGVfbmFtZSA9IGJhc2VfbmFtZSArICIueGxmIjsKKyAgICAgICAgCisgICAgICAgIFZlY3RvciBidW5kbGVfdiA9IHJibS5nZXRCdW5kbGVzKCk7CisgICAgICAgIEVudW1lcmF0aW9uIGJ1bmRsZUl0ZXIgPSBidW5kbGVfdi5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYnVuZGxlSXRlci5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAJZXhwb3J0RmlsZShyYm0sIGRpcmVjdG9yeSwgYmFzZV9uYW1lLCAoQnVuZGxlKWJ1bmRsZUl0ZXIubmV4dEVsZW1lbnQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGFkZEhlYWRlclByb3BlcnRpZXMoRG9jdW1lbnQgeG1sLCBFbGVtZW50IGhlYWRlciwgQnVuZGxlIG1haW5fYnVuZGxlKSB7CisgICAgICAgIGlmIChtYWluX2J1bmRsZS5jb21tZW50ICE9IG51bGwgJiYgbWFpbl9idW5kbGUuY29tbWVudC5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIEVsZW1lbnQgbm90ZSA9IHhtbC5jcmVhdGVFbGVtZW50KCJub3RlIik7CisgICAgICAgIAloZWFkZXIuYXBwZW5kQ2hpbGQobm90ZSk7CisgICAgICAgICAgICBub3RlLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShtYWluX2J1bmRsZS5jb21tZW50KSk7CisgICAgICAgICAgICBub3RlLnNldEF0dHJpYnV0ZSgieG1sOnNwYWNlIiwicHJlc2VydmUiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1haW5fYnVuZGxlLm5hbWUgIT0gbnVsbCAmJiBtYWluX2J1bmRsZS5uYW1lLmxlbmd0aCgpID4gMCkKKyAgICAJCXx8IChtYWluX2J1bmRsZS5tYW5hZ2VyICE9IG51bGwgJiYgbWFpbl9idW5kbGUubWFuYWdlci5sZW5ndGgoKSA+IDApCisgICAgICAgIAl8fCAobWFpbl9idW5kbGUubGFuZ3VhZ2UgIT0gbnVsbCAmJiBtYWluX2J1bmRsZS5sYW5ndWFnZS5sZW5ndGgoKSA+IDApCisJCQl8fCAobWFpbl9idW5kbGUuY291bnRyeSAhPSBudWxsICYmIG1haW5fYnVuZGxlLmNvdW50cnkubGVuZ3RoKCkgPiAwKQorCQkJfHwgKG1haW5fYnVuZGxlLnZhcmlhbnQgIT0gbnVsbCAmJiBtYWluX2J1bmRsZS52YXJpYW50Lmxlbmd0aCgpID4gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVsZW1lbnQgcHJvcF9ncm91cCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wLWdyb3VwIik7CisgICAgICAgIAloZWFkZXIuYXBwZW5kQ2hpbGQocHJvcF9ncm91cCk7CisgICAgICAgICAgICBpZiAobWFpbl9idW5kbGUubmFtZSAhPSBudWxsICYmIG1haW5fYnVuZGxlLm5hbWUubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBwcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKyAgICAgICAgICAgIAloZWFkZXIuYXBwZW5kQ2hpbGQocHJvcCk7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIik7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIsIm5hbWUiKTsKKyAgICAgICAgICAgIAlwcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShtYWluX2J1bmRsZS5uYW1lKSk7CisgICAgICAgICAgICAJcHJvcF9ncm91cC5hcHBlbmRDaGlsZChwcm9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYWluX2J1bmRsZS5tYW5hZ2VyICE9IG51bGwgJiYgbWFpbl9idW5kbGUubWFuYWdlci5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBFbGVtZW50IHByb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgicHJvcCIpOworICAgICAgICAgICAgCWhlYWRlci5hcHBlbmRDaGlsZChwcm9wKTsKKyAgICAgICAgICAgIAlwcm9wLnNldEF0dHJpYnV0ZSgieG1sOnNwYWNlIiwicHJlc2VydmUiKTsKKyAgICAgICAgICAgIAlwcm9wLnNldEF0dHJpYnV0ZSgicHJvcC10eXBlIiwibWFuYWdlciIpOworICAgICAgICAgICAgCXByb3AuYXBwZW5kQ2hpbGQoeG1sLmNyZWF0ZVRleHROb2RlKG1haW5fYnVuZGxlLm1hbmFnZXIpKTsKKyAgICAgICAgICAgIAlwcm9wX2dyb3VwLmFwcGVuZENoaWxkKHByb3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1haW5fYnVuZGxlLmxhbmd1YWdlICE9IG51bGwgJiYgbWFpbl9idW5kbGUubGFuZ3VhZ2UubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBwcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKyAgICAgICAgICAgIAloZWFkZXIuYXBwZW5kQ2hpbGQocHJvcCk7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIik7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIsImxhbmd1YWdlIik7CisgICAgICAgICAgICAJcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUobWFpbl9idW5kbGUubGFuZ3VhZ2UpKTsKKyAgICAgICAgICAgIAlwcm9wX2dyb3VwLmFwcGVuZENoaWxkKHByb3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1haW5fYnVuZGxlLmNvdW50cnkgIT0gbnVsbCAmJiBtYWluX2J1bmRsZS5jb3VudHJ5Lmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIEVsZW1lbnQgcHJvcCA9IHhtbC5jcmVhdGVFbGVtZW50KCJwcm9wIik7CisgICAgICAgICAgICAJaGVhZGVyLmFwcGVuZENoaWxkKHByb3ApOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpOworICAgICAgICAgICAgCXByb3Auc2V0QXR0cmlidXRlKCJwcm9wLXR5cGUiLCJjb3VudHJ5Iik7CisgICAgICAgICAgICAJcHJvcC5hcHBlbmRDaGlsZCh4bWwuY3JlYXRlVGV4dE5vZGUobWFpbl9idW5kbGUuY291bnRyeSkpOworICAgICAgICAgICAgCXByb3BfZ3JvdXAuYXBwZW5kQ2hpbGQocHJvcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWFpbl9idW5kbGUudmFyaWFudCAhPSBudWxsICYmIG1haW5fYnVuZGxlLnZhcmlhbnQubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBwcm9wID0geG1sLmNyZWF0ZUVsZW1lbnQoInByb3AiKTsKKyAgICAgICAgICAgIAloZWFkZXIuYXBwZW5kQ2hpbGQocHJvcCk7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIik7CisgICAgICAgICAgICAJcHJvcC5zZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIsInZhcmlhbnQiKTsKKyAgICAgICAgICAgIAlwcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShtYWluX2J1bmRsZS52YXJpYW50KSk7CisgICAgICAgICAgICAJcHJvcF9ncm91cC5hcHBlbmRDaGlsZChwcm9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgZXhwb3J0RmlsZShSQk1hbmFnZXIgcmJtLCBGaWxlIGRpcmVjdG9yeSwgU3RyaW5nIGJhc2VfbmFtZSwgQnVuZGxlIG1haW5fYnVuZGxlKQorICAgIAl0aHJvd3MgSU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIEJ1bmRsZSBwYXJlbnRfYnVuZGxlID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIHBhcmVudF9idW5kbGVfbmFtZSA9IG51bGw7CisgICAgICAgIGlmICghZ2V0TG9jYWxlKG1haW5fYnVuZGxlKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIAkvLyBJZiB0aGlzIGlzbid0IHRoZSByb290IGxvY2FsZSwgZmluZCB0aGUgcGFyZW50CisgICAgICAgICAgICBwYXJlbnRfYnVuZGxlX25hbWUgPSBnZXRQYXJlbnRMb2NhbGUoZ2V0TG9jYWxlKG1haW5fYnVuZGxlKSk7CisJICAgICAgICBkbyB7CisJICAgICAgICAJcGFyZW50X2J1bmRsZSA9IHJibS5nZXRCdW5kbGUocGFyZW50X2J1bmRsZV9uYW1lKTsKKwkgICAgICAgIAlpZiAocGFyZW50X2J1bmRsZSAhPSBudWxsKSB7CisJICAgICAgICAJCWJyZWFrOworCSAgICAgICAgCX0KKwkgICAgICAgICAgICBwYXJlbnRfYnVuZGxlX25hbWUgPSBnZXRQYXJlbnRMb2NhbGUocGFyZW50X2J1bmRsZV9uYW1lKTsKKwkgICAgICAgIH0gd2hpbGUgKCFwYXJlbnRfYnVuZGxlX25hbWUuZXF1YWxzKCIiKSk7CisgICAgICAgIH0KKworICAgICAgICAKKyAgICAgICAgLy8gRmluZCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIHRyeSB7CisgICAgICAgIAlidWlsZGVyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkgeworICAgICAgICAJdGhyb3cgbmV3IElPRXhjZXB0aW9uKHBjZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgdGhlIGRvY3VtZW50CisgICAgICAgIERvY3VtZW50IHhtbCA9IGJ1aWxkZXIuZ2V0RE9NSW1wbGVtZW50YXRpb24oKS5jcmVhdGVEb2N1bWVudChudWxsLCAieGxpZmYiLCBudWxsKTsKKyAgICAgICAgIAorICAgICAgICAvLyBGaWxsIHRoZSBkb2N1bWVudAorICAgICAgICBFbGVtZW50IHJvb3QgPSB4bWwuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwgIjEuMSIpOworICAgICAgICAvL3Jvb3QuYXBwZW5kQ2hpbGQocm9vdCk7CisgICAgICAgIAorICAgICAgICBFbGVtZW50IGZpbGVfZWxlbSA9IHhtbC5jcmVhdGVFbGVtZW50KCJmaWxlIik7CisgICAgICAgIFN0cmluZyBtYWluTG9jYWxlID0gZ2V0TG9jYWxlKG1haW5fYnVuZGxlKTsKKyAgICAgICAgQnVuZGxlIHBhcmVudEJ1bmRsZSA9IG51bGw7CisgICAgICAgIGlmIChtYWluTG9jYWxlLmVxdWFscygiIikpIHsKKyAgICAgICAgCWZpbGVfZWxlbS5zZXRBdHRyaWJ1dGUoInNvdXJjZS1sYW5ndWFnZSIsIGdldExvY2FsZShtYWluX2J1bmRsZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAJZmlsZV9lbGVtLnNldEF0dHJpYnV0ZSgic291cmNlLWxhbmd1YWdlIiwgcGFyZW50X2J1bmRsZV9uYW1lKTsKKyAgICAgICAgCWZpbGVfZWxlbS5zZXRBdHRyaWJ1dGUoInRhcmdldC1sYW5ndWFnZSIsIGdldExvY2FsZShtYWluX2J1bmRsZSkpOworICAgICAgICB9CisgICAgICAgIGZpbGVfZWxlbS5zZXRBdHRyaWJ1dGUoImRhdGF0eXBlIiwgInBsYWludGV4dCIpOworICAgICAgICBmaWxlX2VsZW0uc2V0QXR0cmlidXRlKCJkYXRlIiwgY29udmVydFRvSVNPKG5ldyBEYXRlKCkpKTsKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChmaWxlX2VsZW0pOworCQkKKyAgICAgICAgRWxlbWVudCBoZWFkZXIgPSB4bWwuY3JlYXRlRWxlbWVudCgiaGVhZGVyIik7CisgICAgICAgIEVsZW1lbnQgdG9vbCA9IHhtbC5jcmVhdGVFbGVtZW50KCJ0b29sIik7CisgICAgICAgIHRvb2wuc2V0QXR0cmlidXRlKCJ0b29sLW5hbWUiLCAiUkJNYW5hZ2VyIik7CisgICAgICAgIHRvb2wuc2V0QXR0cmlidXRlKCJ0b29sLWlkIiwgIlJCTWFuYWdlciIpOworICAgICAgICB0b29sLnNldEF0dHJpYnV0ZSgidG9vbC12ZXJzaW9uIiwgVkVSU0lPTik7CisgICAgICAgIC8vIFRPRE8gQWRkIGZpbGUgYXR0cmlidXRlCisgICAgICAgIC8vaGVhZGVyLnNldEF0dHJpYnV0ZSgiZmlsZSIsICIiKTsKKyAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHRvb2wpOworICAgICAgICBhZGRIZWFkZXJQcm9wZXJ0aWVzKHhtbCwgaGVhZGVyLCBtYWluX2J1bmRsZSk7CisgICAgICAgIGZpbGVfZWxlbS5hcHBlbmRDaGlsZChoZWFkZXIpOworCQkKKyAgICAgICAgRWxlbWVudCBib2R5ID0geG1sLmNyZWF0ZUVsZW1lbnQoImJvZHkiKTsKKyAgICAgICAgZmlsZV9lbGVtLmFwcGVuZENoaWxkKGJvZHkpOworCQkKKyAgICAgICAgVmVjdG9yIGdyb3VwX3YgPSBtYWluX2J1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworICAgICAgICBWZWN0b3IgcGFyZW50X2dyb3VwX3YgPSBudWxsOworICAgICAgICBpZiAocGFyZW50X2J1bmRsZSAhPSBudWxsKSB7CisgICAgICAgIAlwYXJlbnRfZ3JvdXBfdiA9IHBhcmVudF9idW5kbGUuZ2V0R3JvdXBzQXNWZWN0b3IoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBidW5kbGUgZ3JvdXAgaW4gbWFpbl9idW5kbGUKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgZ3JvdXBfdi5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgQnVuZGxlR3JvdXAgY3Vycl9ncm91cCA9IChCdW5kbGVHcm91cClncm91cF92LmVsZW1lbnRBdChpKTsKKyAgICAgICAgICAgIEJ1bmRsZUdyb3VwIHBhcmVudF9ncm91cCA9IG51bGw7CisgICAgICAgICAgICBpZiAocGFyZW50X2dyb3VwX3YgIT0gbnVsbCkgeyAKKwkgICAgICAgICAgICBFbnVtZXJhdGlvbiBwYXJlbnRHcm91cEl0ZXIgPSBwYXJlbnRfZ3JvdXBfdi5lbGVtZW50cygpOworCSAgICAgICAgICAgIAorCSAgICAgICAgICAgIHdoaWxlIChwYXJlbnRHcm91cEl0ZXIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkgICAgICAgICAgICAJQnVuZGxlR3JvdXAgZ3JvdXBUb0ZpbmQgPSAoQnVuZGxlR3JvdXApcGFyZW50R3JvdXBJdGVyLm5leHRFbGVtZW50KCk7CisJICAgICAgICAgICAgCWlmIChncm91cFRvRmluZC5nZXROYW1lKCkuZXF1YWxzKGN1cnJfZ3JvdXAuZ2V0TmFtZSgpKSkgeworCSAgICAgICAgICAgIAkJcGFyZW50X2dyb3VwID0gZ3JvdXBUb0ZpbmQ7CisJICAgICAgICAgICAgCQlicmVhazsKKwkgICAgICAgICAgICAJfQorCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVsZW1lbnQgZ3JvdXBfZWxlbSA9IHhtbC5jcmVhdGVFbGVtZW50KCJncm91cCIpOworICAgICAgICAgICAgZ3JvdXBfZWxlbS5zZXRBdHRyaWJ1dGUoImlkIiwgY3Vycl9ncm91cC5nZXROYW1lKCkpOworICAgICAgICAgICAgaWYgKGN1cnJfZ3JvdXAuZ2V0Q29tbWVudCgpICE9IG51bGwgJiYgY3Vycl9ncm91cC5nZXRDb21tZW50KCkubGVuZ3RoKCkgPiAxKSB7CisgICAgCSAgICAgICAgRWxlbWVudCBjb21tZW50X3Byb3AgPSB4bWwuY3JlYXRlRWxlbWVudCgibm90ZSIpOworICAgIAkgICAgICAgIGNvbW1lbnRfcHJvcC5zZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIik7CisgICAgCSAgICAgICAgY29tbWVudF9wcm9wLmFwcGVuZENoaWxkKHhtbC5jcmVhdGVUZXh0Tm9kZShjdXJyX2dyb3VwLmdldENvbW1lbnQoKSkpOworICAgIAkgICAgICAgIGdyb3VwX2VsZW0uYXBwZW5kQ2hpbGQoY29tbWVudF9wcm9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yIGdyb3VwX2l0ZW1zID0gY3Vycl9ncm91cC5nZXRJdGVtc0FzVmVjdG9yKCk7CisgICAgICAgICAgICBmb3IgKGludCBqPTA7IGogPCBncm91cF9pdGVtcy5zaXplKCk7IGorKykgeworICAgICAgICAgICAgCUJ1bmRsZUl0ZW0gbWFpbl9pdGVtID0gKEJ1bmRsZUl0ZW0pZ3JvdXBfaXRlbXMuZ2V0KGopOworICAgICAgICAgICAgCUJ1bmRsZUl0ZW0gcGFyZW50X2l0ZW0gPSBudWxsOworICAgICAgICAgICAgCWlmIChwYXJlbnRfZ3JvdXAgIT0gbnVsbCkgeworCSAgICAgICAgICAgIAlFbnVtZXJhdGlvbiBwYXJlbnRJdGVyID0gcGFyZW50X2dyb3VwLmdldEl0ZW1zQXNWZWN0b3IoKS5lbGVtZW50cygpOworCSAgICAgICAgICAgIAlCdW5kbGVJdGVtIGl0ZW1Ub0ZpbmQgPSBudWxsOworCSAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50SXRlci5oYXNNb3JlRWxlbWVudHMoKSkgeworCSAgICAgICAgICAgICAgICAJaXRlbVRvRmluZCA9IChCdW5kbGVJdGVtKXBhcmVudEl0ZXIubmV4dEVsZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgCWlmIChpdGVtVG9GaW5kLmdldEtleSgpLmVxdWFscyhtYWluX2l0ZW0uZ2V0S2V5KCkpKSB7CisJICAgICAgICAgICAgICAgIAkJcGFyZW50X2l0ZW0gPSBpdGVtVG9GaW5kOworCSAgICAgICAgICAgICAgICAJCWJyZWFrOworCSAgICAgICAgICAgICAgICAJfQorCSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgIGFkZFRyYW5zVW5pdCh4bWwsIGdyb3VwX2VsZW0sIG1haW5faXRlbSwgcGFyZW50X2l0ZW0pOworICAgICAgICAgICAgICAgIC8vZ3JvdXBfZWxlbS5hcHBlbmRDaGlsZCh0dSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGdyb3VwX2VsZW0pOworICAgICAgICB9IC8vIGVuZCBmb3IgLSBpCisgICAgICAgIFN0cmluZyBzdWZmaXggPSBtYWluTG9jYWxlOworICAgICAgICBpZiAoIXN1ZmZpeC5lcXVhbHMoIiIpKSB7CisgICAgICAgIAlzdWZmaXggPSAnXycgKyBzdWZmaXg7CisgICAgICAgIH0KKyAgICAgICAgY2hhciBhcnJheVtdID0gc3VmZml4LnRvQ2hhckFycmF5KCk7CisgICAgICAgIGZvciAoaW50IGs9MDsgayA8IGFycmF5Lmxlbmd0aDsgaysrKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlba10gPT0gJy0nKQorICAgICAgICAgICAgICAgIGFycmF5W2tdID0gJ18nOworICAgICAgICB9CisgICAgICAgIHN1ZmZpeCA9IFN0cmluZy52YWx1ZU9mKGFycmF5KTsKKyAgICAgICAgCisgICAgICAgIC8vIHNlcmlhbGl6ZSBkb2N1bWVudAorICAgICAgICBPdXRwdXRTdHJlYW1Xcml0ZXIgb3N3ID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcigKKyAgICAgICAgCQluZXcgRmlsZU91dHB1dFN0cmVhbShuZXcgRmlsZShkaXJlY3RvcnksIGJhc2VfbmFtZSArIHN1ZmZpeCArICIueGxmIikpLCAiVVRGLTgiKTsKKyAgICAgICAgdHJ5IHsKKwkJCVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKKwkJCXRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuTUVUSE9ELCAieG1sIik7CisJCQl0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOworCQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjIiKTsKKwkJCXRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRE9DVFlQRV9TWVNURU0sIFhMSUZGX0RURCk7CisJCQl0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkRPQ1RZUEVfUFVCTElDLCBYTElGRl9QVUJMSUNfTkFNRSk7CisJCQl0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTgiKTsKKwkJCXRyYW5zZm9ybWVyLnRyYW5zZm9ybShuZXcgRE9NU291cmNlKHhtbCksIG5ldyBTdHJlYW1SZXN1bHQob3N3KSk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIHRlKSB7CisgICAgICAgIAl0aHJvdyBuZXcgSU9FeGNlcHRpb24odGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgb3N3LmNsb3NlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCeGxpZmZJbXBvcnRlci5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1JCeGxpZmZJbXBvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZWM0MzAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUkJ4bGlmZkltcG9ydGVyLmphdmEKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibTsKKworCitpbXBvcnQgamF2YS5pby4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLmd1aS5SQk1hbmFnZXJHVUk7CitpbXBvcnQgb3JnLnhtbC5zYXguKjsKK2ltcG9ydCBvcmcudzNjLmRvbS4qOworCisvKioKKyAqIFRoaXMgaW1wb3J0cyBYTElGRiBmaWxlcyBpbnRvIFJCTWFuYWdlci4KKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZQorICogPGEgaHJlZj0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL3hsaWZmL2RvY3VtZW50cy94bGlmZi1zcGVjaWZpY2F0aW9uLmh0bSI+CisgKiBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMveGxpZmYvZG9jdW1lbnRzL3hsaWZmLXNwZWNpZmljYXRpb24uaHRtPC9hPgorICogCisgKiBAYXV0aG9yIEdlb3JnZSBSaG90ZW4KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQnhsaWZmSW1wb3J0ZXIgZXh0ZW5kcyBSQkltcG9ydGVyIHsKKwkKKyAgICBEb2N1bWVudCB4bGZfeG1sID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIEJhc2ljIGNvbnN0cnVjdG9yIGZvciB0aGUgWExJRkYgaW1wb3J0ZXIgZnJvbSB0aGUgcGFyZW50IFJCTWFuYWdlciBkYXRhIGFuZCBhIERpYWxvZyB0aXRsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgUkJ4bGlmZkltcG9ydGVyKFN0cmluZyB0aXRsZSwgUkJNYW5hZ2VyIHJibSwgUkJNYW5hZ2VyR1VJIGd1aSkgeworICAgICAgICBzdXBlcih0aXRsZSwgcmJtLCBndWkpOworICAgIH0KKwkKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXR1cEZpbGVDaG9vc2VyKCkgeworICAgICAgICBjaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKXsKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGYuaXNEaXJlY3RvcnkoKSB8fCBmLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhsZiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9YTEZfZmlsZV9kZXNjcmlwdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisJCisgICAgcHJvdGVjdGVkIHZvaWQgYmVnaW5JbXBvcnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBzdXBlci5iZWdpbkltcG9ydCgpOworICAgICAgICBGaWxlIHhsZl9maWxlID0gZ2V0Q2hvc2VuRmlsZSgpOworCQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgCUZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKHhsZl9maWxlKTsKKyAgICAgICAgICAgIElucHV0U291cmNlIGlzID0gbmV3IElucHV0U291cmNlKGZpcyk7CisgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKyAgICAgICAgICAgIHhsZl94bWwgPSBidWlsZGVyLnBhcnNlKGlzKTsKKyAgICAgICAgICAgIGZpcy5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIAl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkgeworICAgICAgICAgICAgcGNlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKyAgICAgICAgCXRocm93IG5ldyBJT0V4Y2VwdGlvbihwY2UuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeGxmX3htbCA9PSBudWxsKQorICAgICAgICAJcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaW1wb3J0RG9jKCk7CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgaW1wb3J0RG9jKCkgeworICAgICAgICBpZiAoeGxmX3htbCA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSAiIjsKKyAgICAgICAgU3RyaW5nIGJ1bmRsZV9ub3RlID0gbnVsbDsKKyAgICAJU3RyaW5nIGJ1bmRsZV9uYW1lID0gbnVsbDsKKyAgICAJU3RyaW5nIG1hbmFnZXJfbmFtZSA9IG51bGw7CisgICAgCVN0cmluZyBsYW5ndWFnZV9uYW1lID0gbnVsbDsKKyAgICAJU3RyaW5nIGNvdW50cnlfbmFtZSA9IG51bGw7CisgICAgCVN0cmluZyB2YXJpYW50X25hbWUgPSBudWxsOworICAgICAgICAKKyAgICAgICAgRWxlbWVudCByb290ID0geGxmX3htbC5nZXREb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgTm9kZSBmaWxlTm9kZSA9IHJvb3QuZ2V0Rmlyc3RDaGlsZCgpOworICAgICAgICBOb2RlIGhlYWRlciA9IG51bGw7CisgICAgICAgIE5vZGUgbm9kZSA9IG51bGw7CisgICAgICAgIHdoaWxlIChmaWxlTm9kZSAhPSBudWxsICYmICEoZmlsZU5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmIGZpbGVOb2RlLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiZmlsZSIpKSkgeworICAgICAgICAgICAgZmlsZU5vZGUgPSBmaWxlTm9kZS5nZXROZXh0U2libGluZygpOworICAgICAgICB9CisgICAgICAgIGhlYWRlciA9IGZpbGVOb2RlLmdldEZpcnN0Q2hpbGQoKTsKKyAgICAgICAgd2hpbGUgKGhlYWRlciAhPSBudWxsCisgICAgICAgIAkJJiYgIShoZWFkZXIuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERQorICAgICAgICAJCSYmIChoZWFkZXIuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJoZWFkZXIiKQorCQkJCXx8IGhlYWRlci5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImJvZHkiKSkpKQorICAgICAgICB7CisgICAgICAgIAloZWFkZXIgPSBoZWFkZXIuZ2V0TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGVhZGVyLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiaGVhZGVyIikpIHsKKyAgICAgICAgCS8vIEdldCB0aGUgbm90ZXMgaWYgZnJvbSB0aGUgaGVhZGVyIGlmIHRoZXkgZXhpc3QuCisgICAgICAgICAgICBOb2RlTGlzdCBoZWFkZXJfbm90ZV9saXN0ID0gKChFbGVtZW50KWhlYWRlcikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm5vdGUiKTsKKyAgICAgICAgICAgIGlmIChoZWFkZXJfbm90ZV9saXN0LmdldExlbmd0aCgpID4gMCkgeworCSAgICAgICAgICAgIFRleHQgdGV4dF9lbGVtID0gKFRleHQpaGVhZGVyX25vdGVfbGlzdC5pdGVtKDApLmdldENoaWxkTm9kZXMoKS5pdGVtKDApOworCSAgICAgICAgICAgIGlmICh0ZXh0X2VsZW0gIT0gbnVsbCkgeworCQkgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0X2VsZW0uZ2V0Tm9kZVZhbHVlKCk7CisJCSAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmxlbmd0aCgpID4gMCkgeworCQkgICAgICAgICAgICAJYnVuZGxlX25vdGUgPSB2YWx1ZTsKKwkJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5vZGUgcHJvcF9ncm91cF9saXN0ID0gKChFbGVtZW50KWhlYWRlcikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByb3AtZ3JvdXAiKS5pdGVtKDApOworICAgICAgICAgICAgTm9kZUxpc3QgcHJvcF9saXN0ID0gcHJvcF9ncm91cF9saXN0LmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgCWludCBwcm9wZXJ0eU51bSA9IHByb3BfbGlzdC5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eU51bSA+IDApIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBwcm9wID0gMDsgcHJvcCA8IHByb3BlcnR5TnVtOyBwcm9wKyspIHsKKyAgICAgICAgICAgICAgICAJaWYgKHByb3BfbGlzdC5pdGVtKHByb3ApIGluc3RhbmNlb2YgRWxlbWVudCkgeworICAgIAkgICAgICAgICAgICAJRWxlbWVudCBwcm9wZXJ0eV9lbGVtID0gKEVsZW1lbnQpcHJvcF9saXN0Lml0ZW0ocHJvcCk7CisgICAgCSAgICAgICAgICAgIAlTdHJpbmcgcHJvcGVydHlUeXBlID0gcHJvcGVydHlfZWxlbS5nZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIpOworICAgIAkgICAgICAgICAgICAJaWYgKHByb3BlcnR5VHlwZSAhPSBudWxsKSB7CisgICAgCQkJICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcHJvcGVydHlfZWxlbS5nZXRDaGlsZE5vZGVzKCkuaXRlbSgwKS5nZXROb2RlVmFsdWUoKTsKKyAgICAJCQkgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGgoKSA+IDApIHsKKyAgICAJCQkgICAgICAgICAgICAJaWYgKHByb3BlcnR5VHlwZS5lcXVhbHMoIm5hbWUiKSkgeworICAgIAkJCQkgICAgICAgICAgICAJYnVuZGxlX25hbWUgPSB2YWx1ZTsKKyAgICAJCQkgICAgICAgICAgICAJfQorICAgIAkJCSAgICAgICAgICAgIAllbHNlIGlmIChwcm9wZXJ0eVR5cGUuZXF1YWxzKCJtYW5hZ2VyIikpIHsKKyAgICAJCQkJICAgICAgICAgICAgCW1hbmFnZXJfbmFtZSA9IHZhbHVlOworICAgIAkJCSAgICAgICAgICAgIAl9CisgICAgCQkJICAgICAgICAgICAgCWVsc2UgaWYgKHByb3BlcnR5VHlwZS5lcXVhbHMoImxhbmd1YWdlIikpIHsKKyAgICAJCQkJICAgICAgICAgICAgCWxhbmd1YWdlX25hbWUgPSB2YWx1ZTsKKyAgICAJCQkgICAgICAgICAgICAJfQorICAgIAkJCSAgICAgICAgICAgIAllbHNlIGlmIChwcm9wZXJ0eVR5cGUuZXF1YWxzKCJjb3VudHJ5IikpIHsKKyAgICAJCQkgICAgICAgICAgICAJCWNvdW50cnlfbmFtZSA9IHZhbHVlOworICAgIAkJCSAgICAgICAgICAgIAl9CisgICAgCQkJICAgICAgICAgICAgCWVsc2UgaWYgKHByb3BlcnR5VHlwZS5lcXVhbHMoInZhcmlhbnQiKSkgeworICAgIAkJCSAgICAgICAgICAgIAkJdmFyaWFudF9uYW1lID0gdmFsdWU7CisgICAgCQkJICAgICAgICAgICAgCX0KKyAgICAJCQkgICAgICAgICAgICB9CisgICAgCSAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IGhlYWRlci5nZXROZXh0U2libGluZygpOworICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgbm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImJvZHkiKSkpIHsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQgYm9keSA9IChFbGVtZW50KW5vZGU7CisgICAgICAgIC8vcmVzb2x2ZUVuY29kaW5ncyhnZXRFbmNvZGluZ3NWZWN0b3IoYm9keSkpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHNvdXJjZUxvY2FsZSA9ICgoRWxlbWVudClmaWxlTm9kZSkuZ2V0QXR0cmlidXRlKCJzb3VyY2UtbGFuZ3VhZ2UiKTsKKyAgICAgICAgU3RyaW5nIHRhcmdldExvY2FsZSA9ICgoRWxlbWVudClmaWxlTm9kZSkuZ2V0QXR0cmlidXRlKCJ0YXJnZXQtbGFuZ3VhZ2UiKTsKKyAgICAgICAgaWYgKCFzb3VyY2VMb2NhbGUuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgbGFuZ3VhZ2UgPSBzb3VyY2VMb2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0YXJnZXRMb2NhbGUuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBsYW5ndWFnZSBpcyB0aGUgcmVhbCBkYXRhLiBUaGUgc291cmNlIGlzIG9ubHkgZm9yIHJlZmVyZW5jZS4KKyAgICAgICAgICAgIC8vIFdlIGNvdWxkIGRvIHZlcmlmaWNhdGlvbiB0aGF0IGFsbCB0aGUgZGF0YSBpcyB0cmFuc2xhdGVkIHRoZSBzYW1lIHRob3VnaC4KKyAgICAgICAgICAgIGxhbmd1YWdlID0gdGFyZ2V0TG9jYWxlOworICAgICAgICB9CisJCQorICAgICAgICAvLyBOb3cgZG8gdGhlIGFjdHVhbCBpbXBvcnQgcmVzb3VyY2UgYnkgcmVzb3VyY2UKKyAgICAgICAgTm9kZUxpc3QgdHVfbGlzdCA9IGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImdyb3VwIik7CisgICAgICAgIGludCBib2R5X25vZGVzX2xlbmd0aCA9IGJvZHkuZ2V0Q2hpbGROb2RlcygpLmdldExlbmd0aCgpOworICAgICAgICBOb2RlTGlzdCBib2R5X2xpc3QgPSBib2R5LmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgaW50IGdyb3VwQ291bnQgPSAwLCBlbGVtZW50Q291bnQgPSAwOworICAgICAgICBOb2RlIGxhc3RfZ3JvdXBfbm9kZSA9IG51bGw7CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGJvZHlfbm9kZXNfbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIE5vZGUgYm9keV9lbGVtID0gYm9keV9saXN0Lml0ZW0oaSk7CisJICAgICAgICBpZiAoYm9keV9lbGVtLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKKwkgICAgICAgICAgICBpZiAoYm9keV9lbGVtLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgiZ3JvdXAiKSkgeworCQkgICAgICAgICAgICBncm91cENvdW50Kys7CisJCSAgICAgICAgICAgIGxhc3RfZ3JvdXBfbm9kZSA9IGJvZHlfZWxlbTsKKwkJICAgICAgICB9CisJICAgICAgICAgICAgZWxlbWVudENvdW50Kys7CisJICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGdyb3VwQ291bnQgPT0gMSkgeworCSAgICAgICAgLy8gSUNVIHN0eWxlIGdyb3VwIHdoZXJlIHRoZSB0b3AgZ3JvdXAgaXMganVzdCB0aGUgbG9jYWxlLgorCSAgICAgICAgRWxlbWVudCBsb2NhbGVOb2RlID0gKEVsZW1lbnQpbGFzdF9ncm91cF9ub2RlOyAKKwkgICAgICAgIHR1X2xpc3QgPSBsYXN0X2dyb3VwX25vZGUuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgU3RyaW5nIHJvb3RHcm91cE5hbWUgPSBsb2NhbGVOb2RlLmdldEF0dHJpYnV0ZSgiaWQiKTsKKyAgICAgICAgICAgIGlmIChyb290R3JvdXBOYW1lICE9IG51bGwgJiYgcm9vdEdyb3VwTmFtZS5lcXVhbHMoInJvb3QiKSkgeworICAgICAgICAgICAgICAgIHJvb3RHcm91cE5hbWUgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEl0J3MgZG9uZSB0aGlzIHdheSBiZWNhdXNlIElDVSBoYW5kbGVzIHJmYzMwNjZiaXMgKHRoZSBzdWNjZXNzb3Igb2YgcmZjMzA2NikKKyAgICAgICAgICAgIC8vIFhMSUZGIHJlcXVpcmVzIHJmYzMwNjYsIHdoaWNoIGRvZXNuJ3QgaGFuZGxlIHNjcmlwdHMuCisgICAgICAgICAgICBsYW5ndWFnZSA9IHJvb3RHcm91cE5hbWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCB0aGUgbG9jYWxlIGlmIG5lZWRlZCwgYW5kIG5vcm1hbGl6ZSBpdCB0byB0aGUgY29ycmVjdCBmb3JtYXQuCisgICAgICAgIFZlY3RvciBsb2NhbGVOYW1lcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgY2hhciBhcnJheVtdID0gbGFuZ3VhZ2UudG9DaGFyQXJyYXkoKTsKKyAgICAgICAgZm9yIChpbnQgaz0wOyBrIDwgYXJyYXkubGVuZ3RoOyBrKyspIHsKKyAgICAgICAgICAgIGlmIChhcnJheVtrXSA9PSAnLScpCisgICAgICAgICAgICAgICAgYXJyYXlba10gPSAnXyc7CisgICAgICAgIH0KKyAgICAgICAgbGFuZ3VhZ2UgPSBTdHJpbmcudmFsdWVPZihhcnJheSk7CisgICAgICAgIGxvY2FsZU5hbWVzLmFkZChsYW5ndWFnZSk7CisgICAgICAgIHJlc29sdmVFbmNvZGluZ3MobG9jYWxlTmFtZXMpOworICAgICAgICBCdW5kbGUgbWFpbl9idW5kbGUgPSByYm0uZ2V0QnVuZGxlKGxhbmd1YWdlKTsKKwkJbWFpbl9idW5kbGUubmFtZSA9IGJ1bmRsZV9uYW1lOworCQltYWluX2J1bmRsZS5jb21tZW50ID0gYnVuZGxlX25vdGU7CisJCW1haW5fYnVuZGxlLm1hbmFnZXIgPSBtYW5hZ2VyX25hbWU7CisJCW1haW5fYnVuZGxlLmxhbmd1YWdlID0gbGFuZ3VhZ2VfbmFtZTsKKwkJbWFpbl9idW5kbGUuY291bnRyeSA9IGNvdW50cnlfbmFtZTsKKwkJbWFpbl9idW5kbGUudmFyaWFudCA9IHZhcmlhbnRfbmFtZTsKKworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB0dV9saXN0LmdldExlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghKHR1X2xpc3QuaXRlbShpKSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFbGVtZW50IHR1X2VsZW0gPSAoRWxlbWVudCl0dV9saXN0Lml0ZW0oaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldCB0aGUga2V5IHZhbHVlCisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHR1X2VsZW0uZ2V0QXR0cmlidXRlKCJpZCIpOworICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDwgMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIEdldCB0aGUgZ3JvdXAgaWYgaXQgZXhpc3RzCisgICAgICAgICAgICBTdHJpbmcgZ3JvdXAgPSBudWxsOworICAgICAgICAgICAgaWYgKHR1X2VsZW0uZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJncm91cCIpKSB7CisgICAgICAgICAgICAgICAgZ3JvdXAgPSBuYW1lOworICAgICAgICAgICAgICAgIFN0cmluZyBncm91cENvbW1lbnQgPSAiIjsKKyAgICAgICAgICAgICAgICBOb2RlTGlzdCBub3Rlc19saXN0ID0gdHVfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibm90ZSIpOworICAgICAgICAgICAgICAgIGlmIChub3Rlc19saXN0LmdldExlbmd0aCgpID4gMCkgeworICAgIAkgICAgICAgICAgICBUZXh0IHRleHRfZWxlbSA9IChUZXh0KW5vdGVzX2xpc3QuaXRlbSgwKS5nZXRDaGlsZE5vZGVzKCkuaXRlbSgwKTsKKyAgICAJICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gdGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpOworICAgIAkgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGgoKSA+IDApIHsKKyAgICAJICAgICAgICAgICAgCWdyb3VwQ29tbWVudCA9IHZhbHVlOworICAgIAkgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJibS5jcmVhdGVHcm91cChncm91cCwgZ3JvdXBDb21tZW50KTsKKyAgICAgICAgICAgICAgICAvL05vZGVMaXN0IGdyb3VwX2xpc3QgPSB0dV9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJncm91cCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCB8fCBncm91cC5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICBncm91cCA9IGdldERlZmF1bHRHcm91cCgpOworICAgICAgICAgICAgICAgIHBhcnNlVHJhbnNsYXRpb25Vbml0KGxhbmd1YWdlLCBncm91cCwgdHVfZWxlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVMaXN0IHRyYW5zX3VuaXRfbGlzdCA9IHR1X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyYW5zLXVuaXQiKTsKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIHRyYW5zLXVuaXQgZWxlbWVudAorICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqIDwgdHJhbnNfdW5pdF9saXN0LmdldExlbmd0aCgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICBwYXJzZVRyYW5zbGF0aW9uVW5pdChsYW5ndWFnZSwgZ3JvdXAsIChFbGVtZW50KXRyYW5zX3VuaXRfbGlzdC5pdGVtKGopKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBwYXJzZVRyYW5zbGF0aW9uVW5pdChTdHJpbmcgbGFuZ3VhZ2UsIFN0cmluZyBncm91cCwgRWxlbWVudCB0cmFuc191bml0X2VsZW0pIHsKKyAgICAgICAgLy8gR2V0IHRoZSB0cmFuc2xhdGlvbiB2YWx1ZQorICAgIAlOb2RlIHRhcmdldF9lbGVtID0gdHJhbnNfdW5pdF9lbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YXJnZXQiKS5pdGVtKDApOworICAgICAgICBpZiAodGFyZ2V0X2VsZW0gPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHRlbXBsYXRlLCBvciBhIHNrZWxldG9uCisgICAgICAgICAgICB0YXJnZXRfZWxlbSA9IHRyYW5zX3VuaXRfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic291cmNlIikuaXRlbSgwKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHNvdXJjZSBvciB0YXJnZXQsIGV2ZW4gaWYgZW1wdHksIGl0IG11c3QgYmUgcGFyc2VkLgorICAgICAgICBpZiAodGFyZ2V0X2VsZW0gPT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFyZ2V0X2VsZW0ubm9ybWFsaXplKCk7CisgICAgICAgIE5vZGVMaXN0IHRleHRfbGlzdCA9IHRhcmdldF9lbGVtLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgaWYgKHRleHRfbGlzdC5nZXRMZW5ndGgoKSA8IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFRleHQgdGV4dF9lbGVtID0gKFRleHQpdGV4dF9saXN0Lml0ZW0oMCk7CisgICAgICAgIFN0cmluZyB0cmFuc1ZhbHVlID0gdGV4dF9lbGVtLmdldE5vZGVWYWx1ZSgpOworICAgICAgICBpZiAodHJhbnNWYWx1ZSA9PSBudWxsIHx8IHRyYW5zVmFsdWUubGVuZ3RoKCkgPCAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvKk5hbWVkTm9kZU1hcCBhdHRyaWJNYXAgPSB0cmFuc191bml0X2VsZW0uZ2V0QXR0cmlidXRlcygpOworICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGF0dHJpYk1hcC5nZXRMZW5ndGgoKTsgaysrKSB7CisgICAgICAgICAgICBTdHJpbmcgYXR0cmliTWFwTmFtZSA9IGF0dHJpYk1hcC5pdGVtKGspLmdldE5vZGVOYW1lKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYXR0cmliTWFwTmFtZSk7CisgICAgICAgIH0qLworICAgICAgICBTdHJpbmcgbmFtZSA9IHRyYW5zX3VuaXRfZWxlbS5nZXRBdHRyaWJ1dGUoImlkIik7CisgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIENyZWF0ZSB0aGUgYnVuZGxlIGl0ZW0KKyAgICAgICAgQnVuZGxlSXRlbSBpdGVtID0gbmV3IEJ1bmRsZUl0ZW0obnVsbCwgbmFtZSwgdHJhbnNWYWx1ZSk7CisgICAgICAgIC8vIEdldCBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uIHZhbHVlcworCisgICAgICAgIFN0cmluZyBzdGF0ZSA9IHRyYW5zX3VuaXRfZWxlbS5nZXRBdHRyaWJ1dGUoInN0YXRlIik7CisgICAgICAgIGlmIChzdGF0ZSAhPSBudWxsICYmIHN0YXRlLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgaXRlbS5zZXRUcmFuc2xhdGVkKHN0YXRlLmVxdWFsc0lnbm9yZUNhc2UoInRyYW5zbGF0ZWQiKSk7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZGF0ZSA9IHRyYW5zX3VuaXRfZWxlbS5nZXRBdHRyaWJ1dGUoImRhdGUiKTsKKyAgICAgICAgaWYgKGRhdGUgIT0gbnVsbCAmJiBkYXRlLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgaXRlbS5zZXRNb2RpZmllZERhdGUoZGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBFbGVtZW50IG5vdGVfZWxlbSA9IChFbGVtZW50KXRyYW5zX3VuaXRfZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibm90ZSIpLml0ZW0oMCk7CisgICAgICAgIGlmIChub3RlX2VsZW0gIT0gbnVsbCkgeworICAgICAgICAgICAgTm9kZUxpc3Qgbm90ZV9saXN0ID0gbm90ZV9lbGVtLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgIGlmIChub3RlX2xpc3QuZ2V0TGVuZ3RoKCkgPiAwKSB7CisJICAgICAgICAgICAgVGV4dCBub3RlX3RleHRfZWxlbSA9IChUZXh0KW5vdGVfbGlzdC5pdGVtKDApOworCSAgICAgICAgICAgIFN0cmluZyBjb21tZW50ID0gbm90ZV90ZXh0X2VsZW0uZ2V0Tm9kZVZhbHVlKCk7CisJICAgICAgICAgICAgaWYgKGNvbW1lbnQgIT0gbnVsbCAmJiBjb21tZW50Lmxlbmd0aCgpID4gMCkgeworCSAgICAgICAgICAgIAlpdGVtLnNldENvbW1lbnQoY29tbWVudCk7CisJICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgRWxlbWVudCBwcm9wX2dyb3VwX2VsZW0gPSAoRWxlbWVudCl0cmFuc191bml0X2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByb3AtZ3JvdXAiKS5pdGVtKDApOworICAgICAgICBpZiAocHJvcF9ncm91cF9lbGVtICE9IG51bGwpIHsKKyAgICAgICAgICAgIE5vZGVMaXN0IHByb3BfbGlzdCA9IHByb3BfZ3JvdXBfZWxlbS5nZXRDaGlsZE5vZGVzKCk7CisgICAgICAgIAlpbnQgcHJvcGVydHlMZW4gPSBwcm9wX2xpc3QuZ2V0TGVuZ3RoKCk7CisgICAgICAgICAgICBmb3IgKGludCBwcm9wID0gMDsgcHJvcCA8IHByb3BlcnR5TGVuOyBwcm9wKyspIHsKKyAgICAgICAgICAgIAlpZiAocHJvcF9saXN0Lml0ZW0ocHJvcCkgaW5zdGFuY2VvZiBFbGVtZW50KSB7CisJICAgICAgICAgICAgCUVsZW1lbnQgcHJvcGVydHlfZWxlbSA9IChFbGVtZW50KXByb3BfbGlzdC5pdGVtKHByb3ApOworCSAgICAgICAgICAgIAlTdHJpbmcgcHJvcGVydHlUeXBlID0gcHJvcGVydHlfZWxlbS5nZXRBdHRyaWJ1dGUoInByb3AtdHlwZSIpOworCSAgICAgICAgICAgIAlpZiAocHJvcGVydHlUeXBlICE9IG51bGwpIHsKKwkJCSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5X2VsZW0uZ2V0Q2hpbGROb2RlcygpLml0ZW0oMCkuZ2V0Tm9kZVZhbHVlKCk7CisJCQkgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGgoKSA+IDApIHsKKwkJCSAgICAgICAgICAgIAlpZiAocHJvcGVydHlUeXBlLmVxdWFscygiY3JlYXRvciIpKSB7CisJCQkJICAgICAgICAgICAgCWl0ZW0uc2V0Q3JlYXRvcih2YWx1ZSk7CisJCQkgICAgICAgICAgICAJfQorCQkJICAgICAgICAgICAgCWVsc2UgaWYgKHByb3BlcnR5VHlwZS5lcXVhbHMoImNyZWF0ZWQiKSkgeworCQkJCSAgICAgICAgICAgIAlpdGVtLnNldENyZWF0ZWREYXRlKHZhbHVlKTsKKwkJCSAgICAgICAgICAgIAl9CisJCQkgICAgICAgICAgICAJZWxzZSBpZiAocHJvcGVydHlUeXBlLmVxdWFscygibW9kaWZpZXIiKSkgeworCQkJCSAgICAgICAgICAgIAlpdGVtLnNldE1vZGlmaWVyKHZhbHVlKTsKKwkJCSAgICAgICAgICAgIAl9CisJCQkgICAgICAgICAgICB9CisJICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworLy8gICAgICAgIGlmIChsb29rdXBzICE9IG51bGwpCisvLyAgICAgICAgICAgIGl0ZW0uc2V0TG9va3Vwcyhsb29rdXBzKTsKKyAgICAgICAgaW1wb3J0UmVzb3VyY2UoaXRlbSwgbGFuZ3VhZ2UsIGdyb3VwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vUmVzb3VyY2VzLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vUmVzb3VyY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0OTc2YQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9SZXNvdXJjZXMuamF2YQpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEubmV0LkphclVSTENvbm5lY3Rpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKKworaW1wb3J0IGNvbS5pYm0ucmJtLmd1aS5SQk1hbmFnZXJHVUk7CisKKy8qKgorICogQSBjbGFzcyBub3QgdG8gYmUgaW5zdGFudGlhdGVkLiBQcm92aWRlcyBtZXRob2RzIGZvciB0cmFuc2xhdGluZyBpdGVtcyBmcm9tIGEgcmVzb3VyY2UgYnVuZGxlLiBUbyB1c2UgdGhpcyBjbGFzcworICogbWFrZSBzdXJlIHlvdSBmaXJzdCBjYWxsIGluaXRCdW5kbGUoKS4gT25jZSB0aGlzIGlzIGRvbmUsIGNhbGxpbmcgYW55IG9mIHRoZSBnZXRUcmFuc2xhdGlvbigpIG1ldGhvZHMgd2lsbCByZXR1cm4KKyAqIHRoZSBhcHByb3ByaWF0ZSBTdHJpbmcuCisgKiAKKyAqIEBhdXRob3IgSmFyZWQgSmFja3NvbgorICogQHNlZSBjb20uaWJtLnJibS5SQk1hbmFnZXIKKyAqLworcHVibGljIGNsYXNzIFJlc291cmNlcyB7CisgICAgcHJpdmF0ZSBzdGF0aWMgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VfYnVuZGxlOworICAgIHByaXZhdGUgc3RhdGljIExvY2FsZSBsb2NhbGU7CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIHRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgcmVzb3VyY2UgYnVuZGxlLiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBvbmNlIGJlZm9yZSBhbnkKKyAgICAgKiBvdGhlciBtZXRob2QgY2FuIGJlIGNhbGxlZCAodW5sZXNzIHRoYXQgbWV0aG9kIHBlcmZvcm1zIGEgY2hlY2sgdGhhdCBjYWxscyB0aGlzIG1ldGhvZCkuIFRoaXMgaXMKKyAgICAgKiBhbHNvIHRoZSBtZXRob2QgdG8gdXNlIGluIGNhc2UgdGhlIHJlc291cmNlIGRhdGEgb24gdGhlIGRhdGEgc3RvcmUgaGFzIGNoYW5nZWQgYW5kIHRob3NlIGNoYW5nZXMKKyAgICAgKiBuZWVkIHRvIGJlIHJlZmxlY3RlZCBpbiBmdXR1cmUgdXNlIG9mIHRoaXMgY2xhc3MuCisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGluaXRCdW5kbGUoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAobG9jYWxlID09IG51bGwpIGxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgICAgICAgICByZXNvdXJjZV9idW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoImNvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXIiLCBsb2NhbGUpOworICAgICAgICB9IGNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBSZXNvdXJjZSBmb3IgZGVmYXVsdCBsb2NhbGUsICIgKyBMb2NhbGUuZ2V0RGVmYXVsdCgpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgbXJlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGxvY2FsZSB0byBiZSB1c2VkIHdoZW4gbWFraW5nIGEgcXVlcnkgb24gdGhlIHJlc291cmNlCisgICAgICovCisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldExvY2FsZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBSZXNvdXJjZXMubG9jYWxlID0gbG9jYWxlOworICAgICAgICAgICAgUmVzb3VyY2VzLnJlc291cmNlX2J1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlciIsIGxvY2FsZSk7CisgICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBSZXNvdXJjZSBmb3IgbG9jYWxlLCAiICsgbG9jYWxlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgbXJlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZXQgTG9jYWxlcyBvYmplY3QuCisgICAgICovCisJCisgICAgcHVibGljIHN0YXRpYyBMb2NhbGUgZ2V0TG9jYWxlKCkgeworICAgICAgICBpZiAoUmVzb3VyY2VzLmxvY2FsZSA9PSBudWxsKSBSZXNvdXJjZXMuaW5pdEJ1bmRsZSgpOworICAgICAgICByZXR1cm4gUmVzb3VyY2VzLmxvY2FsZTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxvY2FsZSBlbmNvZGluZyAoZS5nLiAnZW5fVVMnLCAnZGUnLCBldGMuKQorICAgICAqIG9mIHRoZSBsb2NhbGVzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgcmVzb3VyY2UgYnVuZGxlLiBUaGVzZSBhcmUgYWxsIG9mIHRoZSBsb2NhbGVzIGZvcgorICAgICAqIHdoaWNoIHVuaXF1ZSB0cmFuc2xhdGlvbiBvZiByZXNvdXJjZSBidW5kbGUgaXRlbXMgYXJlIHBvc3NpYmxlLiBJZiBhIGxvY2FsZSBlbmNvZGluZyBpcworICAgICAqIHVzZWQgdG8gcXVlcnkgb24gdGhhdCBpcyBub3QgaW4gdGhpcyBhcnJheSwgdGhlIGJhc2UgY2xhc3MgdHJhbnNsYXRpb24gd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldEF2YWlsYWJsZUxvY2FsZXMoKSB7CisgICAgICAgIC8vTG9jYWxlIGxvY1tdID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGxpc3RbXSA9IG5ldyBTdHJpbmdbMF07CisgICAgICAgIFZlY3RvciBsb2NWZWN0ID0gbmV3IFZlY3RvcigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVVJMIHJlc1VSTCA9IENsYXNzTG9hZGVyLmdldFN5c3RlbVJlc291cmNlKCJjb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyLnByb3BlcnRpZXMiKTsKKyAgICAgICAgICAgIEphclVSTENvbm5lY3Rpb24gcmVzQ29ubmVjdGlvbiA9IChKYXJVUkxDb25uZWN0aW9uKXJlc1VSTC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICAgICAgRW51bWVyYXRpb24gZW51bVJlcyA9IHJlc0Nvbm5lY3Rpb24uZ2V0SmFyRmlsZSgpLmVudHJpZXMoKTsKKyAgICAgICAgICAgIFN0cmluZyBiYXNlTmFtZSA9ICJjb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyIjsKKyAgICAgICAgICAgIHdoaWxlIChlbnVtUmVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVudHJ5TmFtZSA9ICgoWmlwRW50cnkpZW51bVJlcy5uZXh0RWxlbWVudCgpKS5nZXROYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5TmFtZS5zdGFydHNXaXRoKGJhc2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeU5hbWUgPSBlbnRyeU5hbWUuc3Vic3RyaW5nKGJhc2VOYW1lLmxlbmd0aCgpLCBlbnRyeU5hbWUubGFzdEluZGV4T2YoJy4nKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeU5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeU5hbWUgPSBlbnRyeU5hbWUuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVudHJ5TmFtZS5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Igb3VyIHJlc291cmNlcyB3ZSBjb25zaWRlciByb290IGFzIEVuZ2xpc2ggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5TmFtZSA9ICJlbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbG9jVmVjdC5hZGQoZW50cnlOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKy8qICAgICAgICAgICAgRmlsZSBsb2NEaXIgPSBuZXcgRmlsZSgicmVzb3VyY2VzIik7CisgICAgICAgICAgICBsaXN0ID0gbG9jRGlyLmxpc3QobmV3IEZpbGVuYW1lRmlsdGVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGRpciwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBhY2NlcHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSkgYWNjZXB0ID0gZmFsc2U7IC8vIE11c3QgYmUgcHJvcGVydHkgZmlsZQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aCgiUkJNYW5hZ2VyIikpIGFjY2VwdCA9IGZhbHNlOyAgICAgICAgICAgICAgIC8vIE11c3QgYmUgYSBSQk1hbmFnZXIgZmlsZQorICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoIlJCTWFuYWdlci5wcm9wZXJ0aWVzIikpIGFjY2VwdCA9IGZhbHNlOyAgICAgICAgIC8vIEJhc2UgY2xhc3MgZG9lcyBub3QgY291bnQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY2VwdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyovCisgICAgICAgICAgICBpbnQgbGlzdFNpemUgPSBsb2NWZWN0LnNpemUoKTsKKyAgICAgICAgICAgIGxpc3QgPSBuZXcgU3RyaW5nW2xpc3RTaXplXTsKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGxpc3RTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBsaXN0W2ldID0gKFN0cmluZylsb2NWZWN0LmdldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhbid0IGdldCByZXNvdXJjZXMiKTsKKyAgICAgICAgICAgIGlvZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2FuJ3QgZ2V0IHJlc291cmNlcyIpOworICAgICAgICAgICAgY2NlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb29rcyB1cCBhIHRyYW5zbGF0aW9uIGluIHRoZSBjdXJyZW50bHkgc2V0IExvY2FsZSBieSB0aGUgTkxTIGxvb2t1cCBrZXkgcHJvdmlkZWQuCisgICAgICogSWYgbm8gcmVzb3VyY2UgYnkgdGhhdCBrZXkgaXMgZm91bmQsIHRoZSBrZXkgaXRzZWxmIGlzIHJldHVybmVkLgorICAgICAqLworCQorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRyYW5zbGF0aW9uKFN0cmluZyBrZXkpIHsKKyAgICAgICAgaWYgKGtleSA9PSBudWxsIHx8IHJlc291cmNlX2J1bmRsZSA9PSBudWxsKSByZXR1cm4gIiI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgcmV0U3RyID0gcmVzb3VyY2VfYnVuZGxlLmdldFN0cmluZyhrZXkpOworICAgICAgICAgICAgcmV0dXJuIHJldFN0cjsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgLyoqCisgICAgICogR2l2ZW4gYSBsb2NhbGUgZW5jb2RpbmcsIHJldHVybnMgdGhlIGxhbmd1YWdlIHBvcnRpb24gb2YgdGhhdCBlbmNvZGluZy4KKyAgICAgKjxicj4KKyAgICAgKiBGb3IgaW5zdGFuY2UgJ2VuJywgJ2VuX1VTJywgJ2VuX0dCJywgYWxsIHJldHVybiAnZW4nCisgICAgICovCisgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExhbmd1YWdlKFN0cmluZyBlbmNvZGluZykgeworICAgICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgICAgIGlmIChlbmNvZGluZy5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gZW5jb2RpbmcudHJpbSgpOworICAgICAgICByZXR1cm4gZW5jb2Rpbmcuc3Vic3RyaW5nKDAsIGVuY29kaW5nLmluZGV4T2YoIl8iKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdpdmVuIGEgbG9jYWxlIGVuY29kaW5nLCByZXR1cm5zIHRoZSBjb3VudHJ5IHBvcnRpb24gb2YgdGhhdCBlbmNvZGluZy4KKyAgICAgKiA8YnI+CisgICAgICogRm9yIGluc3RhbmNlICdlbl9VUycsICdzcF9VUycsIGJvdGggcmV0dXJuICdVUycKKyAgICAgKiA8YnI+CisgICAgICogUmV0dXJucyBudWxsIGlmIG5vIGNvdW50cnkgaXMgc3BlY2lmaWVkIChlLmcuICdlbicgb3IgJ2RlJykKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDb3VudHJ5KFN0cmluZyBlbmNvZGluZykgeworICAgICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisgICAgICAgIGlmIChlbmNvZGluZy5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gbnVsbDsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGVuY29kaW5nLnN1YnN0cmluZyhlbmNvZGluZy5pbmRleE9mKCJfIikrMSwgZW5jb2RpbmcubGVuZ3RoKCkpOworICAgICAgICBpZiAocmVzdWx0LmluZGV4T2YoIl8iKSA8IDApIHJldHVybiByZXN1bHQudHJpbSgpOworICAgICAgICByZXR1cm4gcmVzdWx0LnN1YnN0cmluZygwLCBlbmNvZGluZy5pbmRleE9mKCJfIikpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHaXZlbiBhIGxvY2FsZSBlbmNvZGluZywgcmV0dXJucyB0aGUgdmFyaWFudCBwb3J0aW9uIG9mIHRoYXQgZW5jb2RpbmcuCisgICAgICogPGJyPgorICAgICAqIEZvciBpbnN0YW5jZSAnZW5fR0JfRVVSTycsICdkZV9ERV9FVVJPJywgYm90aCByZXR1cm4gJ0VVUk8nCisgICAgICogPGJyPgorICAgICAqIFJldHVybnMgbnVsbCBpZiBubyB2YXJpYW50IGlzIHNwZWNpZmllZCAoZS5nLiAnZW4nIG9yICdlbl9VUycpCisgICAgICovCisgICAgCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VmFyaWFudChTdHJpbmcgZW5jb2RpbmcpIHsKKyAgICAgICAgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKGVuY29kaW5nKTsKKyAgICAgICAgaWYgKGVuY29kaW5nID09IG51bGwpIHJldHVybiBudWxsOworICAgICAgICBpZiAoZW5jb2RpbmcuaW5kZXhPZigiXyIpIDwgMCkgcmV0dXJuIG51bGw7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBlbmNvZGluZy5zdWJzdHJpbmcoZW5jb2RpbmcuaW5kZXhPZigiXyIpKzEsIGVuY29kaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pbmRleE9mKCJfIikgPCAwKSByZXR1cm4gbnVsbDsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXhPZigiXyIpKzEsIHJlc3VsdC5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgYSB0cmFuc2xhdGlvbiBnaXZlbiB0aGUgY3VycmVudGx5IHNldCBsb2NhbGUsIGEgbG9va3VwIGtleSwgYW5kIGEgc2luZ2xlIGxvb2t1cCBpdGVtIHJlcGxhY2VtZW50LgorICAgICAqIEZvciBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb29rdXAgaXRlbSByZXBsYWNlbWVudCBzZWUgZ2V0VHJhbnNsYXRpb24oU3RyaW5nIGtleSwgU3RyaW5nW10gbG9va3VwKS4KKyAgICAgKi8KKwkKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUcmFuc2xhdGlvbihTdHJpbmcga2V5LCBTdHJpbmcgbG9va3VwKSB7CisgICAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCByZXNvdXJjZV9idW5kbGUgPT0gbnVsbCkgcmV0dXJuICIiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0IG9iamVjdHNbXSA9IHtsb29rdXB9OworICAgICAgICAgICAgU3RyaW5nIHJldFN0ciA9IHJlc291cmNlX2J1bmRsZS5nZXRTdHJpbmcoa2V5KTsKKyAgICAgICAgICAgIHJldFN0ciA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KHJldFN0ciwgb2JqZWN0cyk7CisgICAgICAgICAgICByZXR1cm4gcmV0U3RyOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIGtleTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgdHJhbnNsYXRpb24gZ2l2ZW4gdGhlIGN1cnJlbnRseSBzZXQgbG9jYWxlLCBhIGxvb2t1cCBrZXksIGFuZCB6ZXJvIG9yIG1vcmUgbG9va3VwIGl0ZW0gcmVwbGFjZW1lbnRzLgorICAgICAqIExvb2t1cCBpdGVtcyBhcmUgY29udGV4dHVhbCB0cmFuc2xhdGlvbiBtYXRlcmlhbCBzdG9yZWQgaW4gdGhlIHJlc291cmNlIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IGRpY3RhdGVkIGluCisgICAgICogdGhlIGphdmEudGV4dCBwYWNrYWdlLiBJbiBzaG9ydCwgbnVtYmVyZWQgbWFya2VycyBhcmUgcmVwbGFjZWQgYnkgc3RyaW5ncyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycy4KKyAgICAgKiA8cD4KKyAgICAgKiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHJlc291cmNlOgorICAgICAqIDxwPgorICAgICAqIG15UmVzb3VyY2UgPSBIZWxsbyB7MX0sIElzbid0IHRoaXMgYSBncmVhdCB7Mn0/CisgICAgICogPHA+CisgICAgICogWW91IHdhbnQgdG8gcmVwbGFjZSB0aGUgJ3sxfScgd2l0aHQgdGhlIGN1cnJlbnQgdXNlciBuYW1lIGFuZCB0aGUgJ3syfScgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZGF5IHRvZGF5LgorICAgICAqIFlvdSBjYW4gZG8gdGhpcyBieSBjYWxsaW5nOgorICAgICAqIDxwPgorICAgICAqIFN0cmluZyBsb29rdXBzW10gPSB7ICJKb2UiLCAiRnJpZGF5IiB9OworICAgICAqIDxicj4KKyAgICAgKiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm15UmVzb3VyY2UiLCBsb29rdXBzKTsKKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgcmVzdWx0IHdvdWxkIGJlOgorICAgICAqIDxwPgorICAgICAqICdIZWxsbyBKb2UsIElzbid0IHRoaXMgYSBncmVhdCBGcmlkYXk/JworICAgICAqIDxwPgorICAgICAqIFRoaXMgbWV0aG9kIChhcyB3ZWxsIGFzIHRoZSBnZXRUcmFuc2xhdGlvbihTdHJpbmcga2V5LCBTdHJpbmcgbG9va3VwKSBtZXRob2QpIGlzIHVzZWZ1bCBmb3IgdXNpbmcgbmVzdGVkCisgICAgICogbG9va3VwcyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUuIEZvciBpbnN0YW5jZSwgdGhlIGFib3ZlIGxpbmUgY291bGQgYmUgcmVwbGFjZWQgd2l0aDoKKyAgICAgKiA8cD4KKyAgICAgKiBTdHJpbmcgbG9va3Vwc1tdID0geyBnZXRVc2VyTmFtZSgpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIkZyaWRheSIpIH07CisgICAgICovCisgICAgCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VHJhbnNsYXRpb24oU3RyaW5nIGtleSwgU3RyaW5nW10gbG9va3VwKSB7CisgICAgICAgIGlmIChrZXkgPT0gbnVsbCB8fCByZXNvdXJjZV9idW5kbGUgPT0gbnVsbCkgcmV0dXJuICIiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0IG9iamVjdHNbXSA9IG5ldyBPYmplY3RbbG9va3VwLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBsb29rdXAubGVuZ3RoOyBpKyspIG9iamVjdHNbaV0gPSBsb29rdXBbaV07CisgICAgICAgICAgICBTdHJpbmcgcmV0U3RyID0gcmVzb3VyY2VfYnVuZGxlLmdldFN0cmluZyhrZXkpOworICAgICAgICAgICAgcmV0U3RyID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQocmV0U3RyLCBsb29rdXApOworICAgICAgICAgICAgcmV0dXJuIHJldFN0cjsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL1NjYW5SZXN1bHQuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9TY2FuUmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhMmMwMQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9TY2FuUmVzdWx0LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtOworCisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHJlc3VsdHMgZm91bmQgZm9yIGVhY2ggcmVzb3VyY2Uga2V5IHdoaWxlCisgKiBwZXJmb3JtaW5nIHRoZSBjb2RlIHNjYW4gZG9uZSBieSBSQlJlcG9ydGVyLgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJSZXBvcnRlcgorICovCitwdWJsaWMgY2xhc3MgU2NhblJlc3VsdCB7CisgICAgQnVuZGxlSXRlbSBpdGVtOworICAgIFZlY3RvciBvY2N1cmFuY2VzOworICAgIAorICAgIFNjYW5SZXN1bHQoQnVuZGxlSXRlbSBpdGVtKSB7CisgICAgICAgIHRoaXMuaXRlbSA9IGl0ZW07CisgICAgICAgIG9jY3VyYW5jZXMgPSBuZXcgVmVjdG9yKCk7CisgICAgfQorCQorICAgIEJ1bmRsZUl0ZW0gZ2V0SXRlbSgpIHsKKyAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQorCQorICAgIGludCBnZXROdW1iZXJPY2N1cmFuY2VzKCkgeworICAgICAgICByZXR1cm4gb2NjdXJhbmNlcy5zaXplKCk7CisgICAgfQorCQorICAgIFZlY3RvciBnZXRPY2N1cmFuY2VzKCkgeworICAgICAgICByZXR1cm4gb2NjdXJhbmNlczsKKyAgICB9CisJCisgICAgdm9pZCBhZGRPY2N1cmFuY2UoT2NjdXJhbmNlIG8pIHsKKyAgICAgICAgb2NjdXJhbmNlcy5hZGRFbGVtZW50KG8pOworICAgIH0KKwkKKyAgICBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0S2V5KCk7CisgICAgfQorCQorICAgIFN0cmluZyBnZXRHcm91cE5hbWUoKSB7CisgICAgICAgIGlmIChpdGVtLmdldFBhcmVudEdyb3VwKCkgIT0gbnVsbCkgcmV0dXJuIGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXROYW1lKCk7CisgICAgICAgIHJldHVybiAiVW5rbm93biI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jb21waWxlLmJhdCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jb21waWxlLmJhdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NTEyZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2NvbXBpbGUuYmF0CkBAIC0wLDAgKzEsMjYgQEAKK0BlY2hvIG9mZgorCityZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3JlbSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorcmVtICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCityZW0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworY2QgLi5cLi5cLi5cCitlY2hvIGNvbXBpbGluZyBzb3VyY2UgY29kZSAlMQoramF2YWMgLWQgLiAtY2xhc3NwYXRoIGNvbS9pYm0vcmJtL2xpYi94ZXJjZXMuamFyIC1kZXByZWNhdGlvbiAlMSBjb20vaWJtL3JibS8qLmphdmEgY29tL2libS9yYm0vZ3VpLyouamF2YQoraWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3IKKworZWNobyBjcmVhdGluZyBqYXIgZmlsZQorZXJhc2UgY29tXGlibVxyYm1cUkJNYW5hZ2VyLmphcgoramFyIGNmbSBjb20vaWJtL3JibS9SQk1hbmFnZXIuamFyIGNvbS9pYm0vcmJtL21hbmlmZXN0LnN0dWIgY29tL2libS9yYm0vKi5jbGFzcyBjb20vaWJtL3JibS9ndWkvKi5jbGFzcyBjb20vaWJtL3JibS9ndWkvaW1hZ2VzLyouZ2lmIGNvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXIqLnByb3BlcnRpZXMKK2lmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yCisKK2VjaG8gY2xlYW5pbmcgdXAgY2xhc3MgZmlsZXMKK2NkIGNvbVxpYm1ccmJtCitlcmFzZSAqLmNsYXNzIGd1aVwqLmNsYXNzCitnb3RvIGVuZAorCis6ZXJyb3IKK2NkIGNvbVxpYm1ccmJtCitwYXVzZQorOmVuZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jb21waWxlLnNoIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2NvbXBpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzZhODc5OQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jb21waWxlLnNoCkBAIC0wLDAgKzEsMTkgQEAKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyMgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworY2QgLi4vLi4vLi4vCitlY2hvIGNvbXBpbGluZyBzb3VyY2UgY29kZSAkMQoramF2YWMgLWQgLiAtY2xhc3NwYXRoIGNvbS9pYm0vcmJtL2xpYi94ZXJjZXMuamFyIC1kZXByZWNhdGlvbiAkMSBjb20vaWJtL3JibS8qLmphdmEgY29tL2libS9yYm0vZ3VpLyouamF2YQorI2lmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yCisKK2VjaG8gY3JlYXRpbmcgamFyIGZpbGUKK3JtIGNvbS9pYm0vcmJtL1JCTWFuYWdlci5qYXIKK2phciBjZm0gY29tL2libS9yYm0vUkJNYW5hZ2VyLmphciBjb20vaWJtL3JibS9tYW5pZmVzdC5zdHViIGNvbS9pYm0vcmJtLyouY2xhc3MgY29tL2libS9yYm0vZ3VpLyouY2xhc3MgY29tL2libS9yYm0vZ3VpL2ltYWdlcy8qLmdpZiBjb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyKi5wcm9wZXJ0aWVzCisjaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3IKKworZWNobyBjbGVhbmluZyB1cCBjbGFzcyBmaWxlcworY2QgY29tL2libS9yYm0KK3JtIC1yZiAqLmNsYXNzIGd1aS8qLmNsYXNzCisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jcmVhdGVkb2MuYmF0IGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2NyZWF0ZWRvYy5iYXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODRhM2NkYgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9jcmVhdGVkb2MuYmF0CkBAIC0wLDAgKzEsOCBAQAorQHJlbSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQHJlbSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorQHJlbSAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorQHJlbSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorbWtkaXIgZG9jc1xhcGkKK0BzZXQgRE9DX1RZUEU9LXByaXZhdGUKK2phdmFkb2MgLWQgZG9jcy9hcGkgLWNsYXNzcGF0aCBsaWIveGVyY2VzLmphciAtc291cmNlcGF0aCAuLi8uLi8uLi8gLXdpbmRvd1RpdGxlICJSQk1hbmFnZXIiIC1ib3R0b20gIkNvcHlyaWdodCBJQk0gMjAwMC0yMDA0IiAlRE9DX1RZUEUlIGNvbS5pYm0ucmJtIGNvbS5pYm0ucmJtLmd1aQorQGlmIGVycm9ybGV2ZWwgMSBwYXVzZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL1JCUmVwb3J0ZXIuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL1JCUmVwb3J0ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTE2MjQzCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvUkJSZXBvcnRlci5odG1sCkBAIC0wLDAgKzEsMjA1IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJlc291cmNlIEJ1bmRsZSBSZXBvcnRlcjwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiAgdXJsKGltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9ImltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJsb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJtZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InR1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDEgQUxJR049IkNFTlRFUiI+UmVzb3VyY2UgQnVuZGxlIFJlcG9ydGVyPC9IMT4KKyAgICAgIDxIMSBBTElHTj0iQ0VOVEVSIj48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL1JCUmVwb3J0ZXIuZ2lmIiBXSURUSD0iNjAwIiBIRUlHSFQ9IjYwMCI+PC9IMT4KKyAgICAgIDxINCBBTElHTj0iTEVGVCI+V2hhdCBpcyBSQlJlcG9ydGVyPzwvSDQ+CisgICAgICA8UCBBTElHTj0iTEVGVCI+RnJlcXVlbnRseSwgbWFuYWdlcnMgYW5kIGRldmVsb3BlcnMgd29ya2luZyBvbiBhbiBpbmVybmF0aW9uYWxpemVkIAorICAgICAgICBwcm9kdWN0IHJlcXVlc3QgdGhlIGFiaWxpdHkgdG8gcXVpY2tseSB2aWV3IHRoZSBzdGF0dXMgYW5kIHByb2dyZXNzIG9mIAorICAgICAgICB0aGUgdHJhbnNsYXRpb24gZWZmb3J0cyBpbiB0aGVpciBwcm9qZWN0LiBSQlJlcG9ydGVyIGdlbmVyYXRlcyBzdWNoIHJlcG9ydHMgCisgICAgICAgIG9uIGEgcGVyaW9kaWMgYmFzaXMgYW5kIHN0b3JlcyB0aGVtIHRvIGEgc3BlY2lmaWVkIGxvY2F0aW9uIGluIGEgdmFyaWV0eSAKKyAgICAgICAgb2YgZm9ybWF0cy4gVGhlIGluZm9ybWF0aW9uIGluY2x1ZGVkIGluIHRoZSByZXBvcnRzIGluY2x1ZGVzIHRoZSBuYW1lcyAKKyAgICAgICAgYW5kIG1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggZWFjaCBvZiB0aGUgcmVzb3VyY2UgZmlsZXMsIHRoZSBudW1iZXIgb3IgCisgICAgICAgIHJlc291cmNlcyBoZWxkIGluIGVhY2ggZmlsZSwgdGhlIG51bWJlciBvZiB1bnRyYW5zbGF0ZWQgcmVzb3VyY2VzIGluIGVhY2ggCisgICAgICAgIGZpbGUsIGFuZCwgaWYgdGhlIGRldGFpbCBsZXZlbCBpcyBzZXQgdG8gJ0hpZ2gsJyBhIGxpc3Qgb2YgYWxsIG9mIHRoZSAKKyAgICAgICAgdW50cmFuc2xhdGVkIHJlc291cmNlIGtleXMgZm9yIGVhY2ggZmlsZS48L1A+CisgICAgICA8SDQgQUxJR049IkxFRlQiPkhvdyBpcyBSQlJlcG9ydGVyIHN0YXJ0ZWQ/PC9IND4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5Gcm9tIHRoZSBjb21tYW5kIGxpbmUsIFJCUmVwb3J0ZXIgaXMgcnVuIGJ5IHR5cGluZyBpbiB0aGUgCisgICAgICAgIGZvbGxvd2luZyBjb21tYW5kOjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj48Q09ERT5qYXZhIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXI8L0NPREU+PC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoaXMgd2lsbCBicmluZyB1cCB0aGUgd2luZG93IHNlZW4gYWJvdmUuIEFsdGVybmF0aXZlbHksIAorICAgICAgICBXaW5kb3dzIHVzZXJzIGNhbiBydW4gdGhlIGJhdGNoIGZpbGUgUkJSZXBvcnRlci5iYXQuIFJCUmVwb3J0ZXIgd2lsbCBhbHNvIAorICAgICAgICB0YWtlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdGhhdCB3aWxsIHJ1biB0aGUgcHJvZ3JhbSBpbiBhIHZhcmlldHkgb2YgCisgICAgICAgIG1vZGVzLiBBbiBlcXVpdmFsZW50IGNvbW1hbmQgbGluZSBhcmd1bWVudCB0byB0aGUgb25lIGFib3ZlIGlzOjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj48Q09ERT5qYXZhIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXIgLWd1aTwvQ09ERT48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+VGhpcyBhcmd1bWVudCB3b3JrcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3QsIGJyaW5naW5nIHVwIHRoZSAKKyAgICAgICAgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBzZXQgdGhlIHByb3BlcnRpZXMgb2YgCisgICAgICAgIHRoZSByZXBvcnRlciwgc3VjaCBhcyB0aGUgYnVuZGxlIHRvIHJlcG9ydCBvbiwgdGhlIHR5cGVzIG9mIHJlcG9ydHMgZ2VuZXJhdGVkLCAKKyAgICAgICAgYW5kIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHJlcG9ydCBnZW5lcmF0aW9uLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5Bbm90aGVyIG9wdGlvbiBpcyB0byBydW4gdGhlIHJlcG9ydGVyIHdpdGggdGhlIGZvbGxvd2luZyAKKyAgICAgICAgYXJndW1lbnQ6PC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPjxDT0RFPmphdmEgY29tLmlibS5yYm0uUkJSZXBvcnRlciAtbm93PC9DT0RFPjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5XaGVuIHRoZSAtbm93IG9wdGlvbiBpcyB1c2VkLCB0aGUgaW50ZXJ2YWwgc2V0dGluZyBiZXR3ZWVuIAorICAgICAgICByZXBvcnRzIGlzIGlnbm9yZWQsIGFuZCB0aGUgcmVwb3J0cyBhcmUgZ2VuZXJhdGVkIGltbWVkaWF0ZWx5IGFjY29yZGluZyAKKyAgICAgICAgdG8gdGhlIG90aGVyIHNhdmVkIHNldHRpbmdzLiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBicmluZyB1cCB0aGUgd2luZG93IAorICAgICAgICBmb3IgY2hhbmdpbmcgc2V0dGluZ3MuIFVzaW5nIHRoaXMgb3B0aW9uIGlzIGhlbHBmdWwgaWYgeW91IHdvdWxkIGxpa2UgCisgICAgICAgIHRvIHVzZSB5b3Ugb3BlcmF0aW5nIHN5c3RlbSBpbnN0ZWFkIG9mIFJCUmVwb3J0ZXIgdG8gc2NoZWR1bGUgdGhlIGdlbmVyYXRpb24gCisgICAgICAgIG9mIHJlcG9ydHMuPC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoZSBsYXN0IG9wdGlvbiBpcyB0aGUgZm9sbG93aW5nOjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj48Y29kZT5qYXZhIGNvbS5pYm0ucmJtLlJCUmVwb3J0ZXIgLWxpbmU8L0NPREU+PC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPldoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgdGhlIHJlcG9ydGVyIGlzIHJ1biB0aHJvdWdoIHRoZSAKKyAgICAgICAgY29tbWFuZCBsaW5lIG9ubHkuIE5vbmUgb2YgdGhlIHNldHRpbmdzIHdpbGwgYmUgYWNjZXNzaWJsZSBmb3IgY2hhbmdpbmcuIAorICAgICAgICBXaGVuZXZlciBpdCBpcyB0aW1lIGZvciBhIHJlcG9ydCB0byBiZSBnZW5lcmF0ZWQsIGEgbWVzc2FnZSB3aWxsIGFwcGVhciAKKyAgICAgICAgb24gdGhlIGNvbW1hbmQgbGluZS4gQW5vdGhlciBtZXNzYWdlIHdpbGwgYXBwZWFyIHdoZW4gdGhlIHJlcG9ydHMgaGF2ZSAKKyAgICAgICAgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gVGhpcyBsYXN0IG1lc3NhZ2Ugd2lsbCBpbmNsdWRlIHRoZSBkYXRlIGFuZCAKKyAgICAgICAgdGltZSBvZiB0aGUgbmV4dCByZXBvcnQgZ2VuZXJhdGlvbi48L1A+CisgICAgICA8SDQgQUxJR049IkxFRlQiPldoYXQgZG8gdGhlIHNldHRpbmdzIG1lYW4/PC9IND4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5XaGVuIHRoZSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgaXMgaW5pdGlhbGx5IGJyb3VnaHQgdXAsIAorICAgICAgICB0aGUgcmVwb3J0ZXIgbWF5IG5vdCBiZSBhY3RpdmUuIEFuIGluZGljYXRpb24gYXQgdGhlIHRvcCBvZiB0aGUgd2luZG93IAorICAgICAgICBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHJlcG9ydGVyIHdpbGwgcmVwb3J0IGF0IHRoZSB0aW1lIHRoYXQgaGFzIAorICAgICAgICBiZWVuIHNwZWNpZmllZC4gVGhlICdTdGFydGVkJyBtZXNzYWdlIGRvZXMgbm90IGluZGljYXRlIHRoYXQgcmVwb3J0IGdlbmVyYXRpb24gCisgICAgICAgIGhhcyBzdGFydGVkOyBpdCBtZXJlbHkgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcG9ydGVyIGhhcyBzdGFydGVkIGFuZCB3aWxsIAorICAgICAgICBnZW5lcmF0ZSByZXBvcnRzIGFjY29yZGluZyB0byB0aGUgb3RoZXIgc2V0dGluZ3MuIFRvIHRvZ2dsZSB3aGV0aGVyIG9yIAorICAgICAgICBub3QgdGhlIHJlcG9ydGVyIGlzIHJ1bm5pbmcgcHJlc3MgdGhlICdTdGFydCcgb3IgJ1N0b3AnIGJ1dHRvbiBuZWFyIHRoZSAKKyAgICAgICAgdG9wIG9mIHRoZSB3aW5kb3cuIFRvIGdlbmVyYXRlIGEgcmVwb3J0IGltbWVkaWF0ZWx5LCBwcmVzcyB0aGUgJ1VwZGF0ZSAKKyAgICAgICAgTm93JyBidXR0b24uPC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoZSByZXBvcnQgaW50ZXJ2YWwgZGV0ZXJtaW5lcyB3aGVuIGEgcmVwb3J0IGlzIGdlbmVyYXRlZC4gCisgICAgICAgIFRoZXJlIGFyZSB0d28gbWFpbiBvcHRpb25zIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZXJ2YWwuIEVpdGhlciBhbiBhbW91bnQgCisgICAgICAgIG9mIHRpbWUgaXMgc3BlY2lmaWVkIHRoYXQgbXVzdCBwYXNzIGluIGJldHdlZW4gcmVwb3J0cywgb3IgYSBzcGVjaWZpYyAKKyAgICAgICAgdGltZSBkdXJpbmcgdGhlIHdlZWsgb3IgZGF5IGlzIHNwZWNpZmllZCBhdCB3aGljaCB0aW1lIHRoZSByZXBvcnQgaXMgZ2VuZXJhdGVkIAorICAgICAgICBpcnJlZ2FyZGxlc3Mgb2Ygd2hlbiB0aGUgbGFzdCByZXBvcnQgd2FzIGdlbmVyYXRlZC48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+VGhlIFJlc291cmNlIEJ1bmRsZSBzZXR0aW5nIGlzIGFuIGluZGljYXRpb24gb2YgdGhlIGJhc2UgCisgICAgICAgIGZpbGUgZnJvbSBjb25jZXJuaW5nIHdoaWNoIHRoZSByZXBvcnQgaXMgZ2VuZXJhdGVkLiBUbyBjaGFuZ2UgdGhlIGJhc2UgCisgICAgICAgIGZpbGUsIGVpdGhlciB0eXBlIGluIHRoZSBuZXcgZmlsZSBwYXRoIHRvIGEgcmVzb3VyY2UgYnVuZGxlLCBvciBzZWxlY3QgCisgICAgICAgIHRoZSAnQ2hvb3NlJyBidXR0b24gaW1tZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IHRvIGJyaW5nIHVwIHRoZSBncmFwaGljYWwgCisgICAgICAgIGZpbGUgY2hvb3Nlci4gVGhlIG91dHB1dCBkaXJlY3RvcnkgaXMgdGhlIGZpbGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIAorICAgICAgICByZXBvcnRzIGFyZSBzYXZlZC4gTm90ZSB0aGF0IHRoZSByZXBvcnRzIGFyZSBvdmVyd3JpdHRlbiBlYWNoIHRpbWUgdGhleSAKKyAgICAgICAgYXJlIG5ld2x5IGdlbmVyYXRlZC48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+VGhlIG91dHB1dCBmb3JtYXQgaGFzIHRocmVlIG9wdGlvbnMuIEFueSBjb21iaW5hdGlvbiBvZiAKKyAgICAgICAgdGhlc2Ugb3B0aW9ucyBpcyBwZXJtaXNzaWJsZSwgdGhvdWdoIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byB0dXJuIHRoZW0gCisgICAgICAgIGFsbCBvZmYuIFRoZSAnVGV4dCcgZm9ybWF0IHByb2R1Y2VzIGEgc2ltcGxlIHRleHQgZmlsZSBpbiBFbmdsaXNoIHJlcG9ydGluZyAKKyAgICAgICAgb24gdGhlIHN0YXR1cyBvZiBlYWNoIG9mIHRoZSByZXNvdXJjZSBmaWxlcy4gVGhlICdIVE1MJyBmb3JtYXQgcHJvZHVjZXMgCisgICAgICAgIGEgcGFnZSB0aGF0IGlzIHZpZXdhYmxlIGluIGEgd2ViIGJyb3dzZXIuIFRoZSAnWE1MJyBmb3JtYXQgcHJvZHVjZXMgYSAKKyAgICAgICAgd2VsbCBmb3JtZWQgWE1MIHJlcG9ydCB0aGF0IGNhbiBiZSBpbXBvcnRlZCBpbnRvIGEgZGF0YWJhc2UsIHRyYW5zZm9ybWVkIAorICAgICAgICBpbnRvIGFub3RoZXIgZm9ybWF0LCBvciB1c2VkIGluIGEgdmFyaWV0eSBvZiBvdGhlciB3YXlzLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj5FYWNoIG91dHB1dCBmb3JtYXQgaGFzIGFzc29jaWF0ZWQgd2l0aCBpdCBhIGZpbGUgbmFtZS4gVGhpcyAKKyAgICAgICAgbmFtZSBjYW4gYmUgY2hvc2VuIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvamVjdCB0byB3aGljaCB0aGUgYnVuZGxlIAorICAgICAgICBiZWxvbmdzLiBBbHNvLCB0aGVzZSBmaWxlIG5hbWVzIGNhbiBiZSBtb2RpZmllZCBpbiBvcmRlciB0byBwbGFjZSB0aGUgCisgICAgICAgIGZpbGVzIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIG9uZSBzcGVjaWZpZWQgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkuIAorICAgICAgICBGb3IgaW5zdGFuY2UsIGEgVU5JWCB1c2VyIG1pZ2h0IGNoYW5nZSB0aGUgdGV4dCBmaWxlIG5hbWUgdG8gJy4uLy4uL2xvZy9yZXBvcnQudHh0Jy4gCisgICAgICAgIEEgZGV0YWlsIGxldmVsIGlzIGFsc28gYXNzb2NpYXRlZCB3aXRoIGVhY2ggcmVwb3J0LiBUaGUgJ0hpZ2gnIGRldGFpbCAKKyAgICAgICAgbGV2ZWwgbWVyZWx5IGluY2x1ZGVzIGVhY2ggb2YgdGhlIHJlc291cmNlIGtleXMgdGhhdCBhcmUgdW50cmFuc2xhdGVkIAorICAgICAgICBvciBkdXBsaWNhdGVkIGluc3RlYWQgb2YganVzdCByZXBvcnRpbmcgdGhlIG51bWJlciBvZiBzdWNoIHJlc291cmNlcy48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+VGhlIGxhc3QgYnV0dG9uIHNhdmVzIHRoZSBzZXR0aW5ncyBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkIAorICAgICAgICB0byBhIHByZWZlcmVuY2VzIGZpbGUgc28gdGhhdCB0aGVzZSBzZXR0aW5ncyB3aWxsIGJlIGluIHBsYWNlIHRoZSBuZXh0IAorICAgICAgICB0aW1lIHRoZSBwcm9ncmFtIGlzIHJ1bi4gSWYgdGhlIHNldHRpbmdzIGFyZSBub3QgbWVhbnQgdG8gYmUgc2F2ZWQgYXMgCisgICAgICAgIHN1Y2gsIGRvIG5vdCBjbGljayB0aGlzIGJ1dHRvbi4gVGhlIHJlcG9ydGVyIHdpbGwgc3RpbGwgcnVuIGFjY29yZGluZyAKKyAgICAgICAgdG8gdGhlIGRpc3BsYXllZCBzZXR0aW5ncyBhcyBsb25nIGFzIHRoZSBSQlJlcG9ydGVyIHByb2dyYW0gaXMgcnVubmluZy48L1A+CisgICAgICA8SDQgQUxJR049IkxFRlQiPldoYXQgaXMgdGhlIGNvZGUgc2Nhbj88L0g0PgorICAgICAgPFAgQUxJR049IkxFRlQiPlN0YXJ0aW5nIHdpdGggdmVyc2lvbiAwLjNhLCB0aGUgcmVwb3J0ZXIgaW5jbHVkZWQgYSBmdW5jdGlvbiAKKyAgICAgICAgdGhhdCBjYW4gc2NhbiB0ZXh0IGZpbGVzIGxvb2tpbmcgZm9yIGluc3RhbmNlcyBvZiByZXNvdXJjZSBidW5kbGUgdXNhZ2UgCisgICAgICAgIGFuZCBjb21wYXJlIHRob3NlIGluc3RhbmNlcyB3aXRoIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBidW5kbGUuIFRoaXMgc2NhbiAKKyAgICAgICAgY2FuIHRoZW4gcmVwb3J0IG9uIGFueSByZXNvdXJjZSBrZXlzIGNhbGxlZCBvbiBieSBhIHByb2dyYW0gYnV0IG5vdCBleGlzdGluZyAKKyAgICAgICAgaW4gYSByZXNvdXJjZSBidW5kbGUsIGFzIHdlbGwgYXMgcG9pbnQgb3V0IHJlc291cmNlcyBpbiB0aGUgYnVuZGxlIHRoYXQgCisgICAgICAgIGFyZSBwb3RlbnRpYWxseSBub3QgdXNlZCBhdCBhbGwgYnkgdGhlIGNvZGUuPC9QPgorICAgICAgPFAgQUxJR049IkxFRlQiPlRoZSByZXBvcnRlciBpcyB0dXJuZWQgb24gYnkgc2VsZWN0aW5nIHRoZSBjaGVjayBib3ggbmV4dCAKKyAgICAgICAgdG8gdGhlIHRleHQgJ1NjYW4gQ29kZSBGaWxlJyBhbmQgcG9pbnRpbmcgdGhlIHNjYW4gdG8gYSBwcm9wZXJseSBzcGVjaWZpZWQgCisgICAgICAgIHNjYW4gWE1MIGZpbGUuIFRoZSByZXBvcnQgZ2VuZXJhdGVkIGlzIGFwcGVuZGVkIHRvIHRoZSBub3JtYWwgcmVwb3J0cyAKKyAgICAgICAgZ2VuZXJhdGVkIGluIHRleHQsIEhUTUwsIG9yIFhNTC4gVGhlIHJlcG9ydCBpcyBhbHNvIHNlbnNpdGl2ZSB0byB0aGUgZGV0YWlsIAorICAgICAgICBsZXZlbCBzZWxlY3RlZCBmb3IgZWFjaCBvZiB0aGVzZSB0aHJlZSBvdXRwdXQgZm9ybWF0cy48L1A+CisgICAgICA8UCBBTElHTj0iTEVGVCI+VGhlIHNjYW4gWE1MIGZpbGUgcHJvdmlkZXMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gCisgICAgICAgIGZvciB0aGUgY29kZSBzY2FuLiBJbiBpdCBydWxlcyBmb3Igd2hhdCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgdG8gc2NhbiAKKyAgICAgICAgYXJlIHNldCBhcyB3ZWxsIGFzIHdoYXQgdHlwZSBvZiB0ZXh0IGlzIGxvb2tlZCBmb3IgdG8gZmluZCBhIHJlc291cmNlIAorICAgICAgICBrZXkuIE1vcmUgPEEgSFJFRj0ic2NhbmZpbGUuaHRtbCI+ZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIAorICAgICAgICBzY2FuIFhNTCBmaWxlPC9BPiBjYW4gYmUgZm91bmQgYnkgZm9sbG93aW5nIHRoZSBsaW5rLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJMRUZUIj4mbmJzcDs8L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvZmFxLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9mYXEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmNiZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvZmFxLmh0bWwKQEAgLTAsMCArMSwxNTkgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+VGVtcGxhdGU8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogIHVybChpbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSJpbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InN5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ2aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJ0dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgzIEFMSUdOPSJDRU5URVIiPkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zPC9IMz4KKyAgICAgIDxQPjxCPiBXaGF0IGlzIHRoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgUkIgTWFuYWdlciB3aGVuIEkgY2FuIGVkaXQgcmVzb3VyY2UgCisgICAgICAgIGJ1bmRsZSBwcm9wZXJ0eSBmaWxlcyBpbiBhIHNpbXBsZSB0ZXh0IGVkaXRvcj88L0I+PC9QPgorICAgICAgPFA+VHJ5aW5nIHRvIG1hbmFnZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBlZmZvcnRzIGluIGFueXRoaW5nIGJ1dCB0aGUgc21hbGxlc3QgCisgICAgICAgIG9mIHByb2plY3RzIGNhbiBiZSBhIGRpZmZpY3VsdCBhbmQgdGltZSBjb25zdW1pbmcgdGFzay4gSW4gZmFjdCwgUkIgTWFuYWdlciAKKyAgICAgICAgYXMgYSBwcm9qZWN0IGdyZXcgb3V0IG9mIHRoZSBmcnVzdHJhdGlvbnMgYW5kIGVycm9ycyB0aGF0IGRldmVsb3BlZCBhcyAKKyAgICAgICAgdGhlIHJlc3VsdCBvZiB0cnlpbmcgdG8gbWFpbnRhaW4gbXVsdGlwbGUgbGFuZ3VhZ2Ugc3VwcG9ydCBpbiBhIG1vZGVyYXRlbHkgCisgICAgICAgIGxhcmdlIHByb2plY3QuIFJlbHlpbmcgb24gdGV4dCBlZGl0b3JzIGFuZCB0aGUgbGlrZSBkZWNyZWFzZXMgdGhlIGNoYW5jZSAKKyAgICAgICAgdGhhdCBkZXZlbG9wZXJzIHdpbGwgcHJvcGVybHkgY29tbWVudCBlYWNoIGFzcGVjdCBvZiBlYWNoIHRyYW5zbGF0aW9uLCAKKyAgICAgICAgaW5jcmVhc2VzIHRoZSBjaGFuY2UgdGhhdCBlcnJvcnMgc3VjaCBhcyBkdXBsaWNhdGUga2V5IG5hbWVzIGFuZCBpbmNvbnNpc3RlbmNpZXMgCisgICAgICAgIGFjcm9zcyBsYW5ndWFnZSBmaWxlcywgYW5kIGluY3JlYXNlcyB0aGUgYW1vdW50IG9mIHRpbWUgZGV2ZWxvcGVycyBhbmQgCisgICAgICAgIHRyYW5zbGF0b3JzIGhhdmUgdG8gc3BlbmQgdHJhY2tpbmcgZG93biBpbmNvbnNpc3RlbmNpZXMgYW5kIHVudHJhbnNsYXRlZCAKKyAgICAgICAgcmVzb3VyY2VzLjwvUD4KKyAgICAgIDxQPlJCTWFuYWdlciBvZmZlcnMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyB0byBjb3JyZWN0IHRoZXNlIHByb2JsZW1zOjwvUD4KKyAgICAgIDxQPiAKKyAgICAgICAgPFVMPgorICAgICAgICAgIAorICAgICAgICA8TEk+IFJCIE1hbmFnZXIgY2FuIGVkaXQgbXVsdGlwbGUgbGFuZ3VhZ2UgZmlsZXMgd2hlbiBhcHByb3ByaWF0ZTwvTEk+CisgICAgICAgICAgPExJPkVudHJpZXMgYXJlIGNoZWNrZWQgZm9yIHByb3BlciBmb3JtYXQgYW5kIGFzc3VyZWQgbm90IHRvIGJlIGR1cGxpY2F0ZXM8L0xJPgorICAgICAgICAgIAorICAgICAgICA8TEk+UkIgTWFuYWdlciBwcm92aWRlcyBhIGJldHRlciBncm91cGluZyBvZiByZXNvdXJjZXMsIHNvIHRoYXQgaW5kaXZpZHVhbCAKKyAgICAgICAgICB0cmFuc2xhdGlvbnMgYXJlIGVhc3kgdG8gZmluZDwvTEk+CisgICAgICAgICAgPExJPkVhY2ggbGFuZ3VhZ2UgZmlsZSB3aWxsIGRpc3BsYXkgaW4gaXRzIG93biB2aWV3IGEgbGlzdCBvZiBvbmx5IHJlc291cmNlcyAKKyAgICAgICAgICAgIHRoYXQgYXJlIHVudHJhbnNsYXRlZDwvTEk+CisgICAgICAgICAgCisgICAgICAgIDxMST5SQiBNYW5hZ2VyIGtlZXBzIHRyYWNrIG9mIHN0YXRpc3RpY3Mgc3VjaCBhcyBudW1iZXIgb2YgcmVzb3VyY2VzLCAKKyAgICAgICAgICB1bnRyYW5zbGF0ZWQgaXRlbXMsIGV0Yy48L0xJPgorICAgICAgICAgIAorICAgICAgICA8TEk+UkIgTWFuYWdlciBhbGxvd3MgaW1wb3J0aW5nIGFuZCBleHBvcnRpbmcgb2YgdHJhbnNsYXRpb24gZGF0YSBpbnRvIAorICAgICAgICAgIG11bHRpcGxlIGZvcm1hdHM8L0xJPgorICAgICAgICAgIDxMST5Vc2Ugb2YgdGhlIGFwcGxpY2F0aW9uIGN1dHMgZG93biBvbiBkZXZlbG9wbWVudCwgdHJhbnNsYXRpb24sIGFuZCAKKyAgICAgICAgICAgIGRlYnVnZ2luZyB0aW1lIGluIGFueSBpbnRlcm5hdGlvbmFsaXplZCBzZXR0aW5nPC9MST4KKyAgICAgICAgPC9VTD4KKyAgICAgICAgCisgICAgICA8UD48Qj5XaWxsIFJCIE1hbmFnZXIgd29yayBvbiBteSBjb21wdXRlcj88L0I+PC9QPgorICAgICAgICAKKyAgICAgIDxQPlJCIE1hbmFnZXIgaXMgd3JpdHRlbiB1c2luZyBvbmx5IHRoZSBKYXZhIEFQSS4gSXQgaGFzIGJlZW4gdGVzdGVkIHVuZGVyIAorICAgICAgICB0aGUgSmF2YSAxLjIuMiBydW50aW1lIGVudmlyb25tZW50IGFuZCBoaWdoZXIuIElmIHlvdXIgY29tcHV0ZXIgaGFzIGEgCisgICAgICAgIEphdmEgVmlydHVhbCBNYWNoaW5lIChKVk0pIGluIHRoaXMgZW52aXJvbm1lbnQsIFJCTWFuYWdlciBzaG91bGQgd29yayAKKyAgICAgICAgZm9yIHlvdS4gSW5zdHJ1Y3Rpb25zIGZvciBzZXR0aW5nIHVwIGFuZCBydW5uaW5nIHRoZSBwcm9ncmFtIGFyZSBmb3VuZCAKKyAgICAgICAgaW4gPEEgSFJFRj0idHV0b3JpYWwvc3RlcDEuaHRtbCI+U3RlcCAxPC9BPiBvZiB0aGUgdHV0b3JpYWwuPC9QPgorICAgICAgICAKKyAgICAgIDxQPjxCPldoeSBkb2Vzbid0IFJCIE1hbmFnZXIgcnVuIGluIGxhbmd1YWdlIFg/PC9CPjwvUD4KKyAgICAgIDxQPjwvUD4KKyAgICAgIDxQPlJCIE1hbmFnZXIgd2lsbCBhbGxvdyB5b3UgdG8gZWRpdCBsYW5ndWFnZSBmaWxlcyBmb3IgYW55IGxhbmd1YWdlL2NvdW50cnkvdmFyaWFudCAKKyAgICAgICAgZW5jb2RpbmcuIFRvIGRlbW9uc3RyYXRlIHRoZSB1c2VmdWxuZXNzIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCBSQiBNYW5hZ2VyIAorICAgICAgICBoYXMgaXRzIG93biByZXNvdXJjZSBidW5kbGUuIFRoZSBhcHBsaWNhdGlvbiBjYW4gY3VycmVudGx5IGJlIHJ1biBpbiBFbmdsaXNoLCAKKyAgICAgICAgR2VybWFuLCBTd2VkaXNoLCBhbmQgRmlubmlzaC4gWW91IGFyZSB3ZWxjb21lIHRvIHVzZSB0aGUgcHJvZ3JhbSB0byBlZGl0IAorICAgICAgICBpdHMgb3duIHJlc291cmNlIGJ1bmRsZSBhbmQgYWRkIGFueSBvdGhlciBsYW5ndWFnZS4gSWYgeW91IGRvIHNvLCB5b3UgCisgICAgICAgIG1heSBzdWJtaXQgdGhlIG5ldyBsYW5ndWFnZSBmaWxlIHRvIHRoZQorICAgICAgICA8QSBIUkVGPSJodHRwOi8vd3d3Lmp0Y3N2LmNvbS9jZ2liaW4vaWN1LWJ1Z3MvIj5JQ1UgYnVnIGRhdGFiYXNlPC9BPi4gCisgICAgICAgIEVhY2ggc3VibWlzc2lvbiB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIGZ1dHVyZSBzdWJtaXNzaW9ucywgYnV0IHRoZSBzdWJtaXR0b3IgCisgICAgICAgIG11c3QgZ2l2ZSB0aGUgcmlnaHRzIHRvIHRoZSB0cmFuc2xhdGlvbiB0byBJQk0gaWYgdGhlIGZpbGUgaXMgdG8gYmUgaW5jbHVkZWQuPC9QPgorICAgICAgPFA+PEI+SSBmb3VuZCBhIGJ1Zy4gV2hlcmUgZG8gSSByZXBvcnQgaXQ/PC9CPjwvUD4KKyAgICAgIDxQPlBsZWFzZSBzdWJtaXQgYSBidWcgdG8gdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuanRjc3YuY29tL2NnaWJpbi9pY3UtYnVncy8iPklDVSBidWcgZGF0YWJhc2U8L2E+LjwvUD4KKyAgICAgIDxQPjxCPldoYXQgY2FuIEkgZXhwZWN0IGZyb20gZnV0dXJlIHZlcnNpb25zIG9mIFJCIE1hbmFnZXI/PC9CPjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5BbnN3ZXI8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+Cis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9mdXR1cmVfZmVhdHVyZXMuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2Z1dHVyZV9mZWF0dXJlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Y2U4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9mdXR1cmVfZmVhdHVyZXMuaHRtbApAQCAtMCwwICsxLDE2MyBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIC0gRmVhdHVyZXMgYW5kIFZlcnNpb24gSGlzdG9yeTwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiAgdXJsKGltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9ImltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJsb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJtZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InR1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgIDxVTD4KKyAgICAgICAgICAgIDxMST48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgPExJPjxBIEhSRUY9InNjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgzIEFMSUdOPSJDRU5URVIiPkZ1dHVyZSBGZWF0dXJlcyBhbmQgVmVyc2lvbiBIaXN0b3J5PC9IMz4KKyAgICAgIDxQPlNvbWUgb2YgdGhlIGZlYXR1cmVzIGFsbCByZWFkeSBpbiB0aGUgd29ya3MgZm9yIGZ1dHVyZSB2ZXJzaW9ucyBvZiBSQiAKKyAgICAgICAgTWFuYWdlcjo8L1A+CisgICAgICA8VUw+CisgICAgICAgIDxMST5UaGUgYWJpbGl0eSB0byBsb29rdXAgc3VnZ2VzdGVkIHRyYW5zbGF0aW9ucyB1c2luZyBpbXBvcnRlZCBkaWN0aW9uYXJpZXM8L0xJPgorICAgICAgICA8TEk+TXVsdGlwbGUgc2VsZWN0aW9ucyBhY3Jvc3MgcmVzb3VyY2UgdGFibGVzPC9MST4KKyAgICAgICAgPExJPkVkaXRpbmcgc3VidHJlZXMgd2l0aGluIHRoZSByZXNvdXJjZSBidW5kbGUgdHJlZTwvTEk+CisgICAgICAgIDxMST5UaGUgYWJpbGl0eSB0byBwcmludCB2YXJpb3VzIHZpZXdzIG9mIHJlc291cmNlczwvTEk+CisgICAgICAgIDxMST5BIGNoYXJhY3RlciB0YWJsZSBmb3Igc2VsZWN0aW5nIGNoYXJhY3RlcnMgbm90IGNvbW1vbiB0byBrZXlib2FyZHM8L0xJPgorICAgICAgICA8TEk+Li4uYW5kIG9mIGNvdXJzZSBhbGwgb2YgdGhlIGJ1ZyBmaXhlczwvTEk+CisgICAgICA8L1VMPgorICAgICAgCisgICAgICA8cD5GZWF0dXJlcyBhZGRlZCBpbiB0aGUgbGF0ZXN0IHZlcnNpb24gKDAuNykgb2YgUkIgTWFuYWdlcjo8L3A+CisgICAgICAgIAorICAgICAgPHVsPgorICAgICAgICA8bGk+QWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgaW1wb3J0aW5nIGFuZCBleHBvcnRpbmcgWExJRkYgZmlsZXM8L2xpPgorICAgICAgICA8bGk+Rml4IHNvbWUgcGFuZWwgdXBkYXRpbmcgaXNzdWVzPC9saT4KKyAgICAgICAgPGxpPi4uLiBhbmQgc29tZSBvdGhlciBidWcgZml4ZXM8L2xpPgorICAgICAgPC91bD4KKworICAgICAgPFA+RmVhdHVyZXMgYWRkZWQgaW4gdGhlIGxhdGVzdCB2ZXJzaW9uICgwLjYpIG9mIFJCIE1hbmFnZXI6PC9QPgorICAgICAgICAKKyAgICAgIDxVTD4KKyAgICAgICAgPExJPlRoZSBwcm9ncmFtIHdpbmRvdyBub3cgaGFzIGFuIGljb248L0xJPgorICAgICAgICA8TEk+SW50ZWdyYXRlIHRoZSBpbWFnZXMgYW5kIHJlc291cmNlcyBpbnRvIHRoZSBqYXIgZmlsZXM8L0xJPgorICAgICAgICA8TEk+U291cmNlIGNvZGUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGU8L0xJPgorICAgICAgICA8TEk+QWxsb3cgZXhwb3J0aW5nIG9mIElDVTRDIHJlc291cmNlIGJ1bmRsZXM8L0xJPgorICAgICAgICA8TEk+Li4uIGFuZCBzb21lIGJ1ZyBmaXhlczwvTEk+CisgICAgICA8L1VMPgorICAgICAgCisgICAgICA8UD5GZWF0dXJlcyBhZGRlZCBpbiB2ZXJzaW9uIDAuNGEgb2YgUkIgTWFuYWdlcjo8L1A+CisgICAgICAKKyAgICAgIDxVTD4KKyAgICAgICAgPExJPlJlY2VudGx5IGFjY2Vzc2VkIHJlc291cmNlIGJ1bmRsZXMgYXBwZWFyIGluIHRoZSBGaWxlIG1lbnUgZm9yIGVhc3kgCisgICAgICAgICAgb3BlbmluZzwvTEk+CisgICAgICAgIDxMST5OZXcgaWNvbnMgZm9yIHRoZSB0cmVlIHZpZXc8L0xJPgorICAgICAgICA8TEk+QWJpbGl0eSB0byBzYXZlLCBoaWRlLCBvciBkZWxldGUgc3BlY2lmaWMgcmVzb3VyY2UgZmlsZXMgd2l0aG91dCBhZmZlY3RpbmcgCisgICAgICAgICAgdGhlIHJlc291cmNlIGJ1bmRsZSBhcyBhIHdob2xlPC9MST4KKyAgICAgICAgPExJPkV4cG9ydGluZyB0byBKYXZhIGNsYXNzIGZpbGVzIGFsbG93cyBmb3Igc3BlY2lmaWNhdGlvbiBvZiB0aGUgcGFja2FnZSAKKyAgICAgICAgICBuYW1lIGFzIHdlbGwgYXMgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBwdWJsaWMgb3IgcHJvdGVjdGVkIG9iamVjdHM8L0xJPgorICAgICAgICA8TEk+VHJhbnNsYXRpb25zIGNhbiBub3cgZWFzaWx5IGFjY29taWRhdGUgbXVsdGlwbGUgbGluZSB0ZXh0PC9MST4KKyAgICAgICAgPExJPlJCIE1hbmFnZXIgaXMgbm8gbG9uZ2VyIHJlc3RyaWNlZCB0byByZXNvdXJjZSBidW5kbGVzIHRoYXQgZW5kIGluIAorICAgICAgICAgICcucHJvcGVydGllcycgaW4gbG93ZXItY2FzZTwvTEk+CisgICAgICAgIDxMST4uLi4gYW5kIHNvbWUgYnVnIGZpeGVzPC9MST4KKyAgICAgIDwvVUw+CisKKyAgICAgIDxQPkZlYXR1cmVzIGFkZGVkIGluIHZlcnNpb24gMC4zYSBvZiBSQiBNYW5hZ2VyOjwvUD4KKyAgICAgIDxVTD4KKyAgICAgICAgPExJPlRoZSBhYmlsaXR5IHRvIG1lcmdlIHByb3BlcnR5IGZpbGVzIGFuZCBvdGhlciByZXNvdXJjZSBidW5kbGVzIHdpdGggCisgICAgICAgICAgdGhlIG9wZW4gcmVzb3VyY2UgYnVuZGxlPC9MST4KKyAgICAgICAgPExJPkV4cG9ydGluZyBKYXZhIGNvbXBpbGFibGUgZmlsZXMgKExpc3RSZXNvdXJjZUJ1bmRsZSBleHRlbnNpb24gZmlsZXMpPC9MST4KKyAgICAgICAgPExJPkltcG9ydCBhbmQgZXhwb3J0IHN1cHBvcnQgZm9yIFRNWCBmb3JtYXR0ZWQgWE1MIHRyYW5zbGF0aW9uIGZpbGVzPC9MST4KKyAgICAgICAgPExJPlRoZSBhYmlsaXR5IHRvIHNlYXJjaCByZXNvdXJjZSBidW5kbGVzIGFuZCBsYW5ndWFnZSBmaWxlcyBmb3IgcGFydGljdWxhciAKKyAgICAgICAgICB0cmFuc2xhdGlvbnM8L0xJPgorICAgICAgICA8TEk+S2V5Ym9hcmQgc2hvcnRjdXRzIGZvciB0aGUgbW9zdCBjb21tb24gZnVuY3Rpb25zPC9MST4KKyAgICAgICAgPExJPkEgZmlsZSBzY2FubmluZyBleHRlbnNpb24gdG8gdGhlIHJlcG9ydGluZyB0b29sPC9MST4KKyAgICAgICAgPExJPi4uLiBhbmQgc29tZSBidWcgZml4ZXM8L0xJPgorICAgICAgPC9VTD4KKyAgICAgIDxQPkhhdmUgYW5vdGhlciBpZGVhPyBTZW5kIGFueSB0aG91Z2h0cyBvciBjb21tZW50cyB0bworICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5qdGNzdi5jb20vY2dpYmluL2ljdS1idWdzLyI+SUNVJ3MgSml0dGVyYnVnIGRhdGFiYXNlPC9hPi48L1A+CisgICAgICA8YnI+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlODQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjIxNGQ2YzI1YzRhMjIyZmVlYjVlY2QxZDdlNzAxYzZiZjE4MDFmMTU0OWI4NzUwMGYwNmRiYjUwNjUyZTU5YTcKK3NpemUgMTY3NApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL2Fycm93X2J1bGxldC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvYXJyb3dfYnVsbGV0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAxODI1Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL2Fycm93X2J1bGxldC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6Mjg1NGYzNTg2NDhkY2MyZWEyMWI0YTNjOWNhNjVhODI3NjJiM2QwMmIxOGI1MzM0ZTQ0ZWU5YTg4YzJiYTQ5MAorc2l6ZSA3MApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxZjI4OAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6MmIyOWI3NTAxYzdiMDYyZDg3NDM2Mzg0OTE2MTgyYTU3NTRjY2IzYzMzZmFmOTJkZjUyZjk2ZmNkNzlhZDI5Mgorc2l6ZSA5NApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL2libV9sb2dvX3NtYWxsX3doaXRlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9pYm1fbG9nb19zbWFsbF93aGl0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlNWJiNwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9pYm1fbG9nb19zbWFsbF93aGl0ZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6OTM2Yjg0ZDdjMzdjNGRmZTRjMjAwN2ExYjM2YTdjNGI5ZTdmOTlhNzZhOTkyZDZmZTUyYTg0NzgyNjhlODM4ZAorc2l6ZSAxMzgKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9SQlJlcG9ydGVyLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9SQlJlcG9ydGVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmEzZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL1JCUmVwb3J0ZXIuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjJjNTMzZWM0ODU5ODMzYjY1NDVjM2VjZTdiMDRmMjA1YzcwNmE1NTlkMWI5Y2MxM2IyMzU4ZThhNmMxZjdmYmIKK3NpemUgMTM5ODQKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19maWxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19maWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDdlMmQyCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX2ZpbGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjUwMDA0NDZmMGRlM2NkNmJiNTgwNjhmMGExODEyMTQzYzYxYmZhZjhmMTIzNzdkODU5NDRmMTk1NWZmNDM4MDIKK3NpemUgOTc0MQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX2dyb3VwLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19ncm91cC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwZDVhMgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19ncm91cC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6OGEwNjc3YmNhY2QzODFlNDA5ODEyZWMwODM3NjFhMzViZjAxYWFhNDZmYmU3NTRlZmYwY2UxMWEwOGU3OWQ5Mworc2l6ZSAxNTA0MgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3Jlc291cmNlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19yZXNvdXJjZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3MDY5NQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19yZXNvdXJjZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NWQ5YjAyZmQxN2U3ODc4MWFiMDA4Nzg0MWU1N2RiNWY0ZjAxODI5YWMyZDBlNDcwNWJlNzdjZTBmOWUwNzc3Mworc2l6ZSA2MjY2CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfdHJhbnNsYXRpb24uZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3RyYW5zbGF0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWM4ZTBhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3RyYW5zbGF0aW9uLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo2OWVkZTdhOGQzZDU2MTFiZmY2N2I4MTY3Njk5NzBiMDBiYmIyNjM3NWRkN2JjYjVkYzEyYmZmNmU2MzViYWI5CitzaXplIDc4NzUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY191bnRyYW5zbGF0ZWQuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX3VudHJhbnNsYXRlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkMzg2MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY191bnRyYW5zbGF0ZWQuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmU5Yzk1OTQ1YThhZWZiNmNjMGIzYWI0MGM0N2UzZGI5YmNjNDc3MjUzZGVlYmY4YzFkOTA2OGE1MWRiOTAxMmIKK3NpemUgMTMxODIKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9jcmVhdGVfZ3JvdXAuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2NyZWF0ZV9ncm91cC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlYmVhNwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9jcmVhdGVfZ3JvdXAuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2Ojk2YjdiZGNkOTM1ZGEyMGI0ZThkY2MyZjdhM2MwYjc5NGRiM2FiNmViYjk2NzFmN2ExMjRiOTA2YjhjNWJkOWUKK3NpemUgMzkwNwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X2dyb3VwLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9ncm91cC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MDI2MgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9ncm91cC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6N2Y3OWJhZmNiZDgzYzBiNDhkMDVlYTFlOTJlMzg3NzEzODBjN2YwMjM3ZTNkMTlhMTQ1NWI2NzllMWIxY2NlYgorc2l6ZSAxNDU2OQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3Jlc291cmNlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9yZXNvdXJjZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3NWJhYQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9yZXNvdXJjZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6YjEyNmVkYjJmNjhkMzQ5YmU3MWEzMThmYWE4NTdhZWE0NjczM2UyYjFmMDY5NzdjMzg3MmE2Yjg5MjNlMjY1Zgorc2l6ZSA1MTAzCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfc2NyZWVuLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9zY3JlZW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZThjZGQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvZW1wdHlfc2NyZWVuLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo0YmU5Y2MwMWFmNjYyMmIzMmI4OTkwYjAzMDI4ZjM1ZWIyYmYzNWEzOGY4MTc2NWUyMjAxN2IyNzViYjg5MzJkCitzaXplIDk5OTMKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV93aXRoX3ByZWZlcmVuY2VzLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV93aXRoX3ByZWZlcmVuY2VzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTUxMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3dpdGhfcHJlZmVyZW5jZXMuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmNlZjQ0MTlhNDgxYWFiODBiNmMyYjRlYmQzZDgyNWY0MWZmOWEzZTFkM2FkMzE2YjIzZDM4ZDZiNzMwNmJkMjUKK3NpemUgOTkwNwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tZXRhbC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbGFmX21ldGFsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTg4MDIwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tZXRhbC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NzViNjJkZmNlMzQ3OTUyYWIxODFhMDU4MDY4YTA3NzAzODZhZGRlN2I5ZTM2OWQ4MTRjNjUzMGMxNmRkNzJmZgorc2l6ZSA0NDQzMwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tb3RpZi5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbGFmX21vdGlmLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk1YTk5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tb3RpZi5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6ZTUzMjU5MGZjNmEyOTA5NDM4NWMyMmFhODM1MDVhM2QxNTgxZTljNTYzOWFiZTg1ZDRlODFlMmEyYWY0NzQ0Mworc2l6ZSA1MzMyMgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl93aW5kb3dzLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfd2luZG93cy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmNzY3MwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9sYWZfd2luZG93cy5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6ZWE0ZDg1ZTIwNTVkOGY1YjgwZjM1NzkxNDU5NGJlMTM2M2IwZGE4MWNjZDBkNThmNGUyY2I0NGRkYjQwMjBjMworc2l6ZSA0NjA3NwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xvb2t1cF9yZXNvdXJjZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbG9va3VwX3Jlc291cmNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQ0ZDdiCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL2xvb2t1cF9yZXNvdXJjZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6YTk3MWE0OTY4OTNmY2Q0NzMxNjg1NGM3OTRlYmE4NDE5NDdiZTM5OWI3MzRkYmM0MWE0OWI3YzRlNDc2NmNmZQorc2l6ZSA2NDQ1CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWFpbl9wYWdlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tYWluX3BhZ2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMDRiM2IKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWFpbl9wYWdlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo4Yzc5NTg5ZTdhNWIyNzc3Yzk1NWJmZjAwMTUzYWNiMTJjMDU3OGZhNjU0NGVjOGQ1ZDI5YzY2MzBkZTdhOWYxCitzaXplIDE5MDg1CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzUxZTEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo5ODY5ZDRiN2Q1YWJlZTRmMDhjNDFkNDcwNDBkZWNjNWFkN2I1YTEyYTU5NTZlNjlkNDQ5Mjg1ZjA5ZTIyNDIzCitzaXplIDI3NDEKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGVfZXhwb3J0LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2ZpbGVfZXhwb3J0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI1ZDhhCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZV9leHBvcnQuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjhiZjMwMTVhYzFhZWUwMzFhNzI3N2E1NjkyZTU0ZmY3NWRiNGRhODBhZWQxZmRkZjRmMDhmYjgyMDMxMGYwZDQKK3NpemUgMzk4NQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZV9pbXBvcnQuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZV9pbXBvcnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzY1NDYKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlX2ltcG9ydC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NjBlMGYwOTVjZTBjZWJjZDdiOWFiNGYwMjg4NTY1MWU0NDkxOWQ4ZDAxNzY0NWY3MTFjNzY1NjI4OGQ4MDQ3OAorc2l6ZSA0MDg2CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9oZWxwLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X2hlbHAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzUwNzcKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9oZWxwLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo1MDY2MDMxZjE0NjhhNGE2N2Y5NDc2YTliMmJlODk2NzQ2ZTk0MDhiYmM1NWI0YzEyYzBmOGE0YmY5NjBhYmVhCitzaXplIDk3NApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfb3B0aW9ucy5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9vcHRpb25zLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTAzNGQwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfb3B0aW9ucy5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6Mjc5ZDU1YTJhZTJjNmEzOWFkNWY5NWU1ZjM2MzdiOWRmNThiM2FlMGJjNjEzNTVhODhmNDA4YWE2NWNmMTQ5Ngorc2l6ZSAxMzYzCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9wb3B1cF90cmVlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9tZW51X3BvcHVwX3RyZWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OWNmYWQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9wb3B1cF90cmVlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjpiNWQ1YmFlZDlhYzU2ZmI0ODk0MTlmMTM0ZDAxY2ZlMDhkZGQyNjhhOGI1ZThlOTcyYWY5NTJjYmFlMGEyZjhkCitzaXplIDI0NDEzCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2Jhc2VjbGFzcy5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2Jhc2VjbGFzcy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2MDk3ZAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9uZXdfYmFzZWNsYXNzLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo5MGQ1ZDFmYWU4Y2FlZDY5MDZmMTQwYWZiNDk2MTAxYzkzMDIwMDQxODM3Yjc3MDk4ZmZjNjFiMWQzMmZmYjM2CitzaXplIDEzNDE5CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2J1bmRsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvbmV3X2J1bmRsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2ODFiNAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9uZXdfYnVuZGxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo2Y2RhZDcyMDU2Mjk4MjZlZTUwZDM1YzU2NDU5MWVhMDFjMWUyMjJjZDM0N2Y3ZjE3NTBkNjRmZWVlOGM2NjBkCitzaXplIDExNjk2CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvcHJlZmVyZW5jZXNfZGlhbG9nLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy9wcmVmZXJlbmNlc19kaWFsb2cuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZGExZTAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvcHJlZmVyZW5jZXNfZGlhbG9nLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjoyMzIwYTUxNWYwNzIzZmJhZGE4MGVkZjIwYzQzYzJmZGU3ODVkMmE4NTFlN2YwY2FmMTM0ZTk0M2Q4NjE4ZmYyCitzaXplIDcxODcKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19idW5kbGUuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfZ3JvdXBzX2J1bmRsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMDhiNgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19idW5kbGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjMwNDJiYmE2OTExMTNjYjBkZDYwMjJkYzg0MWQ2ZGM1ZDZmMzhkMmUxYTllOTJiMzdjYjYzMTI2MWY2MGQ0ZjQKK3NpemUgMTgwODcKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19maWxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19maWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmIzOWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfZ3JvdXBzX2ZpbGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmRjNmNiYTQyYzg5NDE3MTZlNTIyM2U4OTc2ZDZhZjQ4ZmY3MWQ3YTEwYmQ2Mjk5YjVjOTBmM2U5MzEwZTg2YWMKK3NpemUgMTkzNDMKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3NlYXJjaC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zZWFyY2guZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjY2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zZWFyY2guZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjBmYzc2OGQwMjY0MGUzMzEzNTJjZDVlNDdhMjcwZjczMDI5OTBkZGU2ZDYzM2U0OWQ0ZmM1NDVjZDk2ZTJkM2IKK3NpemUgMjE2ODEKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2J1bmRsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zdGF0c19idW5kbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZmZlYjUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19zdGF0c19idW5kbGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmM1OWJiZTE5NWVhZTk1N2YwN2MzMWQzMzRhZDgwMDZhMWViYjFjMjRkNzMzMzk2Mzc5NzU1ODU0MTc3N2RkNjQKK3NpemUgMTcwOTAKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2ZpbGUuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc3RhdHNfZmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyYjJhNgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3N0YXRzX2ZpbGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjgwZTM4NTEwNjZjZTNjYWQ1ZGNhMzJlMjI0NjUzMWNmYzMwYTQwYTk4Yzg1MTMyMDgzNTQzMjJjNTIwOGY5NmQKK3NpemUgMTY1MjUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3RyZWVfYmFzaWMuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdHJlZV9iYXNpYy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5ZDk3NAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3RyZWVfYmFzaWMuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjY1NjBjMjVkY2JhNjc5NzcwOTE1NmVmYmViNDc3MzI2YzRiNmQ3NjU2YWY2Nzg3ZjU4MDZhZDdlNzIxZWFlZGMKK3NpemUgMTYzMTMKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfYnVuZGxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfYnVuZGxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Q3MjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19idW5kbGUuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjBhODdkMzEyMzZhZTk1NTI0MjdlNmY2Y2EyYjYyZjMxZDA4MmVjMmUzMzczNjNkY2Q5NDAzMGE3MzUyODAxMzUKK3NpemUgMTk1NTgKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfZGlhbG9nMC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2RpYWxvZzAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmJjNTAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2RpYWxvZzAuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjRhMjM2ZTA2NWE4OTBmYWI0OWUwY2RhZGRlN2M1YjBmZjBhNGUzYzM4NTY2MmZlMGZiNTc1MjNkYWE3NTIwMjcKK3NpemUgNzM2NwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19maWxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfZmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NzY4MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X3VudHJhbnNfZmlsZS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6MTVkMzM5NTYxYTIyOTNjMDE0MDUxNTQwYjIwOGM0NDYzYjQwYjFiZTMyMjFjYTVhMDk5MjJmNmRmOTdhOTczYworc2l6ZSAyNDIzMApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NwYWNlci5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvc3BhY2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM1ZTNjCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3NwYWNlci5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6M2I0YzYzY2U1ZThiYjM2N2NjNDg2MzA3MmQ5ZDAxY2RiZmUxMWI2NTc4ZmEyZjYxZjEyMGY2NjY1YWJhNTBkMworc2l6ZSA4NzAKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzI5NTcyCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjNjZGY4YzM4MjEzNzdiMzI5MDY1YjdlM2IzMjNmMWQ4YTQ2ZTlmNDc3OTNkMjJiNmY4YjE2MzRlMzJjZjVmNDMKK3NpemUgMTI4CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlOTBjNgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjpjYzNjNzI0YjFkNTQwYmJlYWVmYzI4NDlmNWI1NTUzOTQ4YzI4MWNlOWY4N2UzM2MxZWY4MDA5NTdkN2NlZWI5CitzaXplIDg3CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWZkN2FmCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo4ODgxMWRjZWZkMTQzMjBkYTllYWZjYjAwOTFkMmIxMTQyMDNkMDAzNmQ1N2FkOTczZTYxZTQ4NGFhNmU2NjFlCitzaXplIDc0OApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjhjNDUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbWFnZXMvdGVtcGxhdGVfdS5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NWRiNzc2OTIwOGZmY2I5NTYzMWQ5NzI3ZTZmYzkzZDgyMDczZWVlNWU3YzI2ZGE3ODk0OWVjYzJhMzdhM2FiOAorc2l6ZSA5MwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwY2JjNQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6MDA4OWJhOWQ0MWYwZDYyMzRkNjIzYWVmOTY1ZmFiNDRjMTkwMDk3Yzk0Yzk0NzJmY2RjOTlhYmRkNTEyNGJkZgorc2l6ZSAxMDY5CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9pbmRleC5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTIzNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvaW5kZXguaHRtbApAQCAtMCwwICsxLDE0NSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SZXNvdXJjZSBCdW5kbGUgTWFuYWdlcjwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiAgdXJsKGltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9ImltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJsb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJtZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InR1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4KKyAgICAgIDxESVYgQUxJR049IkNFTlRFUiI+CisgICAgICAgIDxIMj5XZWxjb21lIHRvIFJlc291cmNlIEJ1bmRsZSBNYW5hZ2VyICh2MC42KTwvSDI+CisgICAgICAgIDxQIEFMSUdOPSJDRU5URVIiPjxJTUcgU1JDPSJpbWFnZXMvc2NyZWVuc2hvdHMvbWFpbl9wYWdlLmdpZiI+PC9QPgorICAgICAgICA8UCBBTElHTj0iQ0VOVEVSIj5UaGVzZSBwYWdlcyBhcmUgbWVhbnQgdG8gaGVscCB5b3UgYW5kIHlvdXIgZGV2ZWxvcG1lbnQgCisgICAgICAgICAgdGVhbSBnZXQgc3RhcnRlZCB3aXRoIHRoaXMgdHJhbnNsYXRpb24gbWFuYWdlbWVudCB0b29sLjwvUD4KKyAgICAgICAgPFAgQUxJR049IkNFTlRFUiI+VGhlIHRvb2wgd2FzIGRldmVsb3BlZCB0byBiZSBlYXN5IHRvIHVzZSBhbmQgaW50dXRpdGl2ZS4gCisgICAgICAgICAgSWYgeW91IGFsbCByZWFkeSB1bmRlcnN0YW5kIHRoZSBwcm9jZXNzIG9mIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCAKKyAgICAgICAgICBqdXN0IHdhbnQgdG8gbGVhcm4gaG93IHRoaXMgdG9vbCBjYW4gYmUgdXNlZCB0byBtYWtlIHlvdXIgZWZmb3J0cyBtb3JlIAorICAgICAgICAgIGVmZmljaWVudCBhbmQgbGVzcyBlcnJvciBwcm9uZSBnbyBzdHJhaWdodCB0byB0aGUgPEEgSFJFRj0idHV0b3JpYWwvaW5kZXguaHRtbCI+c3RlcC1ieS1zdGVwIAorICAgICAgICAgIHR1dG9yaWFsPC9BPiwgPEEgSFJFRj0idmlld3MvaW5kZXguaHRtbCI+ZnVuY3Rpb25zIGFuZCB2aWV3czwvQT4sIG9yIAorICAgICAgICAgIDxBIEhSRUY9ImZhcS5odG1sIj5mcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9uczwvQT4uIElmIHlvdSBhcmUgbmV3IHRvIAorICAgICAgICAgIGludGVybmF0aW9uYWxpemF0aW9uIGluIGRldmVsb3BtZW50LCB5b3UgbWF5IHdhbnQgdG8gZmlyc3QgY2hlY2sgb3V0IAorICAgICAgICAgIHRoaXM8QSBIUkVGPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpYnJhcnkvai1yYm1nci9pbmRleC5odG1sIj4gCisgICAgICAgICAgaW50cm9kdWN0aW9uIHRvIGludGVybmF0aW9uYWxpemF0aW9uPC9BPi48L1A+CisgICAgICAgIDxQIEFMSUdOPSJDRU5URVIiPklmIHlvdSB3b3VsZCBsaWtlIHRvIHJlcG9ydCBhIGJ1ZywgZmVlbCBmcmVlIHRvCisgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL3d3dy5qdGNzdi5jb20vY2dpYmluL2ljdS1idWdzLyI+c3VibWl0IGEgYnVnIHRvIG91cgorICAgICAgICAgIGJ1ZyBkYXRhYmFzZTwvQT4uPC9QPgorICAgICAgPC9ESVY+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKzwhLS0KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjIiPgorICA8VFI+CisgICAgPFREIFdJRFRIPSIyMDAiIEJHQ09MT1I9IiNDQ0NDRkYiPiZuYnNwOzwvVEQ+CisgICAgPFREPgorICAgICAgPERJViBBTElHTj0iQ0VOVEVSIj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFdJRFRIPSIxNzUiIEhFSUdIVD0iNTAiPjwvRElWPgorICAgIDwvVEQ+CisgIDwvVFI+CisgIDxUUiBWQUxJR049IlRPUCI+IAorICAgIDxURCBXSURUSD0iMjAwIiBCR0NPTE9SPSIjQ0NDQ0ZGIj4gCisgICAgICA8UD48QSBIUkVGPSJpbmRleC5odG1sIj5SQk1hbmFnZXI8L0E+PC9QPgorICAgICAgPFA+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5SQlJlcG9ydGVyPC9BPjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL3N0ZXAxLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9QPgorICAgICAgPFA+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L1A+CisgICAgICA8UD5Ub3BpY3M8L1A+CisgICAgICA8VUw+CisgICAgICAgIDxMST48QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5TdGVwLWJ5LXN0ZXAgVHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgPExJPjxBIEhSRUY9InN0ZXAxLmh0bWwiPkNoYW5naW5nIFByZWZlbmNlczwvQT48L0xJPgorICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlIEZlYXR1cmVzPC9BPjwvTEk+CisgICAgICA8L1VMPgorICAgIDwvVEQ+CisgICAgPFREPjwvVEQ+CisgIDwvVFI+Cis8L1RBQkxFPgorLS0+Cis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9sb29rYW5kZmVlbC5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvbG9va2FuZGZlZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWE2MDE2Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvbG9va2FuZGZlZWwuaHRtbApAQCAtMCwwICsxLDExOSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQk1hbmFnZXIgLSBMb29rIGFuZCBGZWVsPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6ICB1cmwoaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9ImltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ0dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Imxvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Im1lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0idHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9IlJCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InNjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5Mb29rIGFuZCBGZWVsPC9IMz4KKyAgICAgIDxQPlJCIE1hbmFnZXIgaXMgd3JpdHRlbiBwdXJlbHkgaW4gSmF2YSwgYW5kIHRoZXJlZm9yZSBpcyBhIGNyb3NzLXBsYXRmb3JtIAorICAgICAgICBhcHBsaWNhdGlvbi4gVXNpbmcgdGhlIFByZWZlcmVuY2VzIG1lbnUgaXRlbSwgdGhlIGxvb2sgYW5kIGZlZWwgb2YgdGhlIAorICAgICAgICBhcHBsaWNhdGlvbiBjYW4gYmUgY2hhbmdlZCB0byBhbnkgb25lIG9mIHRoZSBsb29rIGFuZCBmZWVscyBzdXBwb3J0ZWQgCisgICAgICAgIGJ5IHRoZSB2aXJ0dWFsIG1hY2hpbmUgcnVubmluZyBvbiB0aGUgc3lzdGVtLjwvUD4KKyAgICAgIDxQPlRoaXMgcGFnZSBzaG93cyBzb21lIGV4YW1wbGVzIG9mIGhvdyB0aGUgc3lzdGVtIGxvb2tzIHVuZGVyIGZvdXIgY29tbW9uIAorICAgICAgICBsb29rIGFuZCBmZWVsczogPEEgSFJFRj0iI1dpbmRvd3MiPldpbmRvd3M8L0E+LCA8QSBIUkVGPSIjTWV0YWwiPk1ldGFsPC9BPiwgCisgICAgICAgIDxBIEhSRUY9IiNNYWMiPk1hYyBPU1ggKGFxdWEpPC9BPiwgYW5kIDxBIEhSRUY9IiNNb3RpZiI+TW90aWY8L0E+LjwvUD4KKyAgICAgIDxQPjxCPjxhIG5hbWU9IldpbmRvd3MiPldpbmRvd3M8L0E+PC9CPjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSJpbWFnZXMvc2NyZWVuc2hvdHMvbGFmX3dpbmRvd3MuZ2lmIiBXSURUSD0iNjAwIiBIRUlHSFQ9IjQ0NCI+PC9QPgorICAgICAgPFA+PEI+PGEgbmFtZT0iTWV0YWwiPk1ldGFsPC9BPjwvQj48L1A+CisgICAgICA8UD48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL2xhZl9tZXRhbC5naWYiIFdJRFRIPSI2MDAiIEhFSUdIVD0iNDQ0Ij48L1A+CisgICAgICA8UD48Qj48YSBuYW1lPSJNYWMiPk1hYyBPU1ggKGFxdWEpPC9BPjwvQj48L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD48Qj48YSBuYW1lPSJNb3RpZiI+TW90aWY8L0E+PC9CPjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSJpbWFnZXMvc2NyZWVuc2hvdHMvbGFmX21vdGlmLmdpZiIgV0lEVEg9IjYwMCIgSEVJR0hUPSI0NDQiPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9tZW51Lmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy9tZW51Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhYzRjNAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL21lbnUuaHRtbApAQCAtMCwwICsxLDI1NyBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIC0gTWVudSBJdGVtczwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiAgdXJsKGltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9ImltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJsb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJtZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InR1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDIgQUxJR049IkNFTlRFUiI+UkIgTWFuYWdlciAtIE1lbnUgSXRlbXM8L0gyPgorICAgICAgPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIyIj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPiAKKyAgICAgICAgICAgIDxQPjxCPlRoZSBGaWxlIE1lbnU8L0I+PC9QPgorICAgICAgICAgIDwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfZmlsZS5naWYiIFdJRFRIPSIyNTgiIEhFSUdIVD0iMjE5IiBWU1BBQ0U9IjUiIEhTUEFDRT0iNSI+PC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPk5ldyBSZXNvdXJjZSBCdW5kbGUuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+Q3JlYXRlIGEgbmV3IHJlc291cmNlIGJ1bmRsZS4gWW91IHdpbGwgbmVlZCB0byBzZWxlY3QgdGhlIGJhc2UgY2xhc3MgCisgICAgICAgICAgICBuYW1lIGZvciB0aGlzIGJ1bmRsZS48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+T3BlbiBSZXNvdXJjZSBCdW5kbGUuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+U2VsZWN0IGEgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIGZpbGUgc3lzZXRlbS4gVGhlIGJ1bmRsZSBzaG91bGQgCisgICAgICAgICAgICBoYXZlIGJlZW4gb25lIGNyZWF0ZWQgYnkgUkIgTWFuYWdlciwgb3RoZXJ3aXNlIHVzZSB0aGUgTWVyZ2Ugb3B0aW9uLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5TYXZlIFJlc291cmNlIEJ1bmRsZTwvST48L1REPgorICAgICAgICAgIDxURD5TYXZlIHRoZSBidW5kbGUgdG8gdGhlIGZpbGUgc3lzdGVtLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5TYXZlIFJlc291cmNlIEJ1bmRsZSBBcy4uLjwvST48L1REPgorICAgICAgICAgIDxURD5TYXZlIHRoZSByZXNvdXJjZSBidW5kbGUgaW4gYSBzZWxlY3RlZCBsb2NhdGlvbiB3aXRoaW4gdGhlIGZpbGUgCisgICAgICAgICAgICBzeXN0ZW0uPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPjxJTUcgU1JDPSJpbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlX2ltcG9ydC5naWYiIFdJRFRIPSI0NTQiIEhFSUdIVD0iMjE5IiBWU1BBQ0U9IjUiIEhTUEFDRT0iNSI+PC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPjxCPk1lcmdlIFRvIFJlc291cmNlIEJ1bmRsZTwvQj48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+SW1wb3J0IHJlc291cmNlIGJ1bmRsZXMgZnJvbSBkaWZmZXJlbnQgZm9ybWF0cyBhbmQgbWVyZ2UgdGhlbSB3aXRoIAorICAgICAgICAgICAgdGhlIGN1cnJlbnRseSBvcGVuIHJlc291cmNlIGJ1bmRsZS48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+PElNRyBTUkM9ImltYWdlcy9hcnJvd19idWxsZXQuZ2lmIiBXSURUSD0iMTIiIEhFSUdIVD0iMTAiPlNpbXBsZSAKKyAgICAgICAgICAgIFJlc291cmNlIEJ1bmRsZXMuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+SW1wb3J0IGZyb20gb3RoZXIgcmVzb3VyY2UgYnVuZGxlcyBtYWRlIHVwIG9mIC5wcm9wZXJ0aWVzIHRleHQgZmlsZXMgCisgICAgICAgICAgICBjcmVhdGVkIGJ5IFJCIE1hbmFnZXIgb3Igbm90LjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST48SU1HIFNSQz0iaW1hZ2VzL2Fycm93X2J1bGxldC5naWYiIFdJRFRIPSIxMiIgSEVJR0hUPSIxMCI+VE1YIAorICAgICAgICAgICAgRG9jdW1lbnRzLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkltcG9ydCBmcm9tIFhNTCBkb2N1bWVudHMgdGhhdCBjb25mb3JtIHRvIHRoZSBUTVggc3BlY2lmaWNhdGlvbiAKKyAgICAgICAgICAgIGNyZWF0ZWQgYnkgdGhlIExJU0EgZ3JvdXAuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPjxJTUcgU1JDPSJpbWFnZXMvc2NyZWVuc2hvdHMvbWVudV9maWxlX2V4cG9ydC5naWYiIFdJRFRIPSI0MzkiIEhFSUdIVD0iMjE5IiBWU1BBQ0U9IjUiIEhTUEFDRT0iNSI+PC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPjxCPkV4cG9ydCBSZXNvdXJjZSBCdW5kbGVzPC9CPjwvST48L1REPgorICAgICAgICAgIDxURD5TYXZlIHRoZSB0cmFuc2xhdGlvbnMgaW4gb3RoZXIgZm9ybWF0cy48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+PElNRyBTUkM9ImltYWdlcy9hcnJvd19idWxsZXQuZ2lmIiBXSURUSD0iMTIiIEhFSUdIVD0iMTAiPkNvbXBpbGFibGUgCisgICAgICAgICAgICBKYXZhIEZpbGVzLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkV4cG9ydCB0byBjb21waWxhYmxlIGphdmEgY2xhc3MgZmlsZXMgdGhhdCBleHRlbmQgdGhlIExpc3RSZXNvdXJjZUJ1bmRsZSAKKyAgICAgICAgICAgIGNsYXNzLiA8L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+PElNRyBTUkM9ImltYWdlcy9hcnJvd19idWxsZXQuZ2lmIiBXSURUSD0iMTIiIEhFSUdIVD0iMTAiPk1pbmltYWwgCisgICAgICAgICAgICBQcm9wZXJ0aWVzIEZpbGVzLi4uPC9JPjwvVEQ+CisgICAgICAgICAgPFREPkV4cG9ydCB0byAucHJvcGVydGllcyB0ZXh0IGZpbGVzIGp1c3QgYXMgaW4gdGhlIFNhdmUgb3B0aW9uLCBleGNlcHQgCisgICAgICAgICAgICB0aGF0IHRoZXNlIGZpbGVzIHdpbGwgYmUgc3RyaXBwZWQgb2YgYWxsIHVubmVjZXNzYXJ5IG1ldGEgZGF0YS48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+PElNRyBTUkM9ImltYWdlcy9hcnJvd19idWxsZXQuZ2lmIiBXSURUSD0iMTIiIEhFSUdIVD0iMTAiPlRNWCAKKyAgICAgICAgICAgIERvY3VtZW50cy4uLjwvST48L1REPgorICAgICAgICAgIDxURD5FeHBvcnQgdG8gWE1MIGRvY3VtZW50cyB0aGF0IGNvbmZvcm0gdG8gdGhlIFRNWCBzcGVjaWZpY2F0aW9uIGNyZWF0ZWQgCisgICAgICAgICAgICBieSB0aGUgTElTQSBncm91cC48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PElNRyBTUkM9ImltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMTUiIEhFSUdIVD0iMTUiPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48Qj5UaGUgT3B0aW9ucyBNZW51PC9CPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfb3B0aW9ucy5naWYiIFdJRFRIPSIyMTEiIEhFSUdIVD0iMTExIiBWU1BBQ0U9IjUiIEhTUEFDRT0iNSI+PC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPkFkZCBOZXcgRW50cnkuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+Q3JlYXRlIGEgbmV3IHJlc291cmNlIGZvciB0aGUgZW50aXJlIHJlc291cmNlIGJ1bmRsZS48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+QWRkIE5ldyBHcm91cC4uLjwvST48L1REPgorICAgICAgICAgIDxURD5DcmVhdGUgYSBuZXcgcmVzb3VyY2UgZ3JvdXAgZm9yIHRoZSBlbnRpcmUgcmVzb3VyY2UgYnVuZGxlLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5BZGQgTmV3IFJlc291cmNlIEZpbGUuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+Q3JlYXRlIGEgbmV3IHJlc291cmNlIGZpbGUgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUuIE9wdGlvbmFsbHkgc2VsZWN0IAorICAgICAgICAgICAgd2hldGhlciBvciBub3QgdG8gcG9wdWxhdGUgdGhpcyBmaWxlIHdpdGggY3VycmVudGx5IGRlZmluZWQgcmVzb3VyY2VzLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5QcmVmZXJlbmNlcy4uLjwvST48L1REPgorICAgICAgICAgIDxURD5CcmluZyB1cCB0aGUgcHJlZmVyZW5jZXMgZGlhbG9nIGJveC48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PElNRyBTUkM9ImltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMTUiIEhFSUdIVD0iMTUiPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48Qj5UaGUgSGVscCBNZW51PC9CPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURCBDT0xTUEFOPSIyIj48SU1HIFNSQz0iaW1hZ2VzL3NjcmVlbnNob3RzL21lbnVfaGVscC5naWYiIFdJRFRIPSIzNTMiIEhFSUdIVD0iNDYiIFZTUEFDRT0iNSIgSFNQQUNFPSI1Ij48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQ+PEk+QWJvdXQgUmVzb3VyY2UgQnVuZGxlIE1hbmFnZXIuLi48L0k+PC9URD4KKyAgICAgICAgICA8VEQ+QnJpbmdzIHVwIGEgZGlhbG9nIGJveCBkaXNwbGF5aW5nIHRoZSB2ZXJzaW9uIG9mIFJCIE1hbmFnZXIgYW5kIAorICAgICAgICAgICAgb3RoZXIgaW5mb3JtYXRpb24uPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREIENPTFNQQU49IjIiPjxJTUcgU1JDPSJpbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjE1IiBIRUlHSFQ9IjE1Ij48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PEI+VGhlIFJlc291cmNlIEZpbGUgUG9wdXAgTWVudTwvQj48L1REPgorICAgICAgICA8L1RSPgorICAgICAgICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICAgICAgICA8VEQgQ09MU1BBTj0iMiI+PElNRyBTUkM9ImltYWdlcy9zY3JlZW5zaG90cy9tZW51X3BvcHVwX3RyZWUuZ2lmIiBXSURUSD0iNjcxIiBIRUlHSFQ9IjU0MyIgVlNQQUNFPSI1IiBIU1BBQ0U9IjUiPjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST48Qj5SZXNvdXJjZSBGaWxlIFBvcHVwIE1lbnU8L0I+PC9JPjwvVEQ+CisgICAgICAgICAgPFREPlBvcHMgdXAgZnJvbSBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPlNhdmUgUmVzb3VyY2UgRmlsZTwvST48L1REPgorICAgICAgICAgIDxURD5TYXZlIG9ubHkgdGhlIHNlbGVjdGVkIHJlc291cmNlIGZpbGUgdG8gdGhlIGZpbGUgc3lzdGVtLjwvVEQ+CisgICAgICAgIDwvVFI+CisgICAgICAgIDxUUiBWQUxJR049IlRPUCI+IAorICAgICAgICAgIDxURD48ST5IaWRlIFJlc291cmNlIEZpbGU8L0k+PC9URD4KKyAgICAgICAgICA8VEQ+UmVtb3ZlIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBmaWxlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZSB0cmVlLiAKKyAgICAgICAgICAgIEFsbCBmdXR1cmUgY2hhbmdlcyB0byB0aGUgYnVuZGxlIHdpbGwgbm90IGFmZmVjdCB0aGlzIGZpbGUuIFRoaXMgd2lsbCAKKyAgICAgICAgICAgIGFsc28gcmVtb3ZlIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgc2luY2UgbGFzdCBzYXZpbmcgaXQuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgICAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgICAgICAgPFREPjxJPkRlbGV0ZSBSZXNvdXJjZSBGaWxlPC9JPjwvVEQ+CisgICAgICAgICAgPFREPklmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFsbG93cywgZGVsZXRlcyB0aGUgcmVzb3VyY2UgZmlsZSBmcm9tIHRoZSAKKyAgICAgICAgICAgIGZpbGUgc3lzdGVtLiBUaGlzIGlzIGEgcGVybWFuZW50IGNoYW5nZSBhbmQgY2FuIG5vdCBiZSB1bmRvbmUuPC9URD4KKyAgICAgICAgPC9UUj4KKyAgICAgIDwvVEFCTEU+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8UD4mbmJzcDs8L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvc2NhbmZpbGUuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3NjYW5maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxYjMxNQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3NjYW5maWxlLmh0bWwKQEAgLTAsMCArMSwxOTUgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkJSZXBvcnRlciBTY2FuIEZpbGU8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogIHVybChpbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSJpbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InN5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ2aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ibWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJ0dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9ImltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0ic2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPEgxIEFMSUdOPSJDRU5URVIiPlJCUmVwb3J0ZXIgU2NhbiBYTUwgQ29uZmlndXJhdGlvbiBGaWxlPC9IMT4KKyAgICAgIDxQPjxCPkludHJvZHVjdGlvbjwvQj48L1A+CisgICAgICA8UD5UaGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBSQlJlcG9ydGVyIHNjYW5zIGlzIGEgdGV4dCBmaWxlIHN0b3JlZCBpbiAKKyAgICAgICAgWE1MLiBUaGUgZGVzaWduIG9uIHRoZSBmb3JtYXQgZm9yIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBrZXB0IHNpbXBsZSAKKyAgICAgICAgYW5kIHNvIHRoZSBnZW5lcmFsIGFwcGxpY2F0aW9uIG9mIHRoZSBzY2FubmVyIGlzIG5vdCBtZWFudCBmb3IgY29tcGxpY2F0ZWQgCisgICAgICAgIGFuYWx5c2lzLiBUaGUgZGVzaWduIHdvcmtzIGFyb3VuZCB0aHJlZSB0eXBlcyBvZiBydWxlczogRGlyZWN0b3J5IFJ1bGVzLCAKKyAgICAgICAgRmlsZSBSdWxlcywgYW5kIFBhcnNlIFJ1bGVzLiBFYWNoIG9mIHRoZXNlIHdpbGwgYmUgZXhwbGFpbmVkIGJlbG93LiBGaXJzdCwgCisgICAgICAgIGhlcmUgaXMgYW4gZXhhbXBsZSBmaWxlIGZvciByZWZlcmVuY2UuIFRoaXMgZmlsZSBpcyB0aGUgY29uZmlndXJhdGlvbiAKKyAgICAgICAgZmlsZSB1c2VkIHRvIHNjYW4gdGhlIHJlc291cmNlIGJ1bmRsZSBhc3NvY2lhdGVkIHdpdGggUkJNYW5hZ2VyLjwvUD4KKyAgICAgIDxQPjxCPlNhbXBsZSBTY2FuIEZpbGUgPC9CPihyYm1hbmFnZXJfc2Nhbi54bWw8Qj4pPC9CPjwvUD4KKyAgICAgIDxCTE9DS1FVT1RFPjxDT0RFPgorICAgICAgICA8UFJFPgorJmx0Oz94bWwgdmVyc2lvbj0iMS4wIiA/PgorJmx0O1JCRklMRVNDQU5ORVIgTkFNRT0iUkJNYW5hZ2VyIFNjYW5uZXIiIEZJTEVOQU1FPSJyYm1hbmFnZXJfc2Nhbm5lci54bWwiPgorCSZsdDtGSUxFUlVMRVM+CisJCSZsdDshLS0gIEZpbGVSdWxlcyBjYW4gaGF2ZSBhdHRyaWJ1dGVzIHN0YXJ0c193aXRoLCBlbmRzX3dpdGgsIGFuZCBjb250YWlucyAtLT4KKwkJJmx0O0ZJTEVSVUxFIE5BTUU9IkphdmEgRmlsZSIgRU5EU19XSVRIPSIuamF2YSIgLz4KKwkJJmx0O0ZJTEVSVUxFIE5BTUU9IlhTTCBGaWxlIiBFTkRTX1dJVEg9Ii54c2wiIC8+CisJJmx0Oy9GSUxFUlVMRVM+CisJJmx0O1BBUlNFUlVMRVM+CisJCSZsdDshLS0gIFBhcnNlUnVsZXMgY2FuIGhhdmUgYXR0cmlidXRlcyBmb2xsb3dzIGFuZCBwcmVjZWRlcyAtLT4gCisJCSZsdDtQQVJTRVJVTEUgTkFNRT0iSmF2YSBzdGF0aWMgcmVzb3VyY2UiIEZPTExPV1M9IlJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigmYW1wO3F1b3Q7IiBQUkVDRURFUz0iJmFtcDtxdW90OyIgLz4gCisJJmx0Oy9QQVJTRVJVTEVTPgorCSZsdDtTQ0FOPgorCQkmbHQ7RElSRUNUT1JZIExPQ0FUSU9OPSJcQzpcRGV2ZWxvcG1lbnRcUkJNYW5hZ2VyXFNvdXJjZSIgUkVDVVJTRV9ESVJFQ1RPUklFUz0idHJ1ZSI+IAorCQkJJmx0O1JVTEVTPgorCQkJCSZsdDtBUFBMWUZJTEVSVUxFIE5BTUU9IkphdmEgRmlsZSI+CisJCQkJCSZsdDtBUFBMWVBBUlNFUlVMRSBOQU1FPSJKYXZhIHN0YXRpYyByZXNvdXJjZSIgLz4KKwkJCQkmbHQ7L0FQUExZRklMRVJVTEU+CisJCQkmbHQ7L1JVTEVTPgorCQkmbHQ7L0RJUkVDVE9SWT4KKwkmbHQ7L1NDQU4+CismbHQ7L1JCRklMRVNDQU5ORVI+CisgICAgICAgIDwvUFJFPgorICAgICAgICA8L0NPREU+PC9CTE9DS1FVT1RFPgorPFA+PEI+RGV0YWlsczwvQj48L1A+CisgICAgICA8UD5UaGUgcm9vdCBlbGVtZW50IG9mIHRoZSBYTUwgZmlsZSBpcyBuYW1lZCAnUkJGSUxFU0NBTk5FUicuIFRoaXMgcm9vdCAKKyAgICAgICAgZWxlbWVudCBoYXMgdHdvIG9wdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIG5hbWluZyB0aGUgc2NhbiBmaWxlIGluIGEgaHVtYW4gCisgICAgICAgIHJlYWRhYmxlIG1hbm5lciBhbmQgc3BlY2lmeWluZyB0aGUgZmlsZSBuYW1lLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBmb3IgCisgICAgICAgIHRoZSBkZXZlbG9wZXJzIHJlZmVyZW5jZTsgdGhleSBtZWFuIG5vdGhpbmcgdG8gUkJSZXBvcnRlci4gQmVuZWF0aCB0aGUgCisgICAgICAgIHJvb3QgZWxlbWVudCBhcmUgdGhyZWUgcmVxdWlyZWQgZWxlbWVudHMgJ0ZJTEVSVUxFUycsICdQQVJTRVJVTEVTJyBhbmQgCisgICAgICAgICdTQ0FOJy4gPC9QPgorICAgICAgPFA+QmVuZWF0aCB0aGUgRklMRVJVTEVTIGVsZW1lbnQgYXJlIGZvdW5kIEZJTEVSVUxFIGVsZW1lbnRzLiBBbnkgbnVtYmVyIAorICAgICAgICBvZiB0aGVzZSBydWxlcyBjYW4gYmUgc3BlY2lmaWVkLCB0aG91Z2ggZWFjaCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZSBhcyAKKyAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBlbGVtZW50J3MgTkFNRSBhdHRyaWJ1dGUuIEFsb25nIHdpdGggdGhpcyBuYW1lIGF0dHJpYnV0ZSwgCisgICAgICAgIHRoZSBhdHRyaWJ1dGVzIFNUQVJUU19XSVRILCBFTkRTX1dJVEgsIGFuZCBDT05UQUlOUyBtYXkgYmUgb3B0aW9uYWxseSAKKyAgICAgICAgc3BlY2lmaWVkLiBUaGVzZSBhcmUgdGhlIHJ1bGVzIGFwcGxpZWQgdG8gZWFjaCBmaWxlIGluIGEgZGlyZWN0b3J5IHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhleSB3aWxsIGJlIHNjYW5uZWQuIFRoZSBhdHRyaWJ1dGUgcnVsZXMgYXJlIAorICAgICAgICBhcHBsaWVkIHRvIHRoZSBmaWxlIG5hbWVzIG9mIGVhY2ggZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGFuZCBpZiBlYWNoIGlzIAorICAgICAgICBmb3VuZCB0byBiZSB0cnVlLCB0aGF0IGZpbGUgaXMgZXZhbHVhdGVkIGFnYWluc3QgdGhlIHBhcnNlIHJ1bGVzLjwvUD4KKyAgICAgIDxQPkJlbmVhdGggdGhlIFBBUlNFUlVMRVMgZWxlbWVudCBhcmUgZm91bmQgUEFSU0VSVUxFIGVsZW1lbnRzLiBBbnkgbnVtYmVyIAorICAgICAgICBvZiB0aGVzZSBydWxlcyBjYW4gYmUgc3BlY2lmaWVkLCB0aG91Z2ggZWFjaCBtdXN0IGhhdmUgYSB1bmlxdWVzIG5hbWUgCisgICAgICAgIGFzIHNwZWNpZmllZG4gaW4gdGhlIGVsZW1lbnQncyBOQU1FIGF0dHJpbnV0ZS4gQWxvbmcgd2l0aCB0aGlzIG5hbWUgYXR0cmlidXRlLCAKKyAgICAgICAgdGhlIGF0dHJpYnV0ZXMgRk9MTE9XUyBhbmQgUFJFQ0VERVMgbWF5IG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkLiBUaGVzZSAKKyAgICAgICAgYXJlIHRoZSBydWxlcyBhcHBsaWVkIHRvIGVhY2ggbGluZSBvZiB0ZXh0IGluIGEgc2VsZWN0ZWQgZmlsZSB0byBkZXRlcm1pbmUgCisgICAgICAgIGlmIHRoYXQgbGluZSBvZiB0ZXh0IGNvbnRhaW5zIG9uZSBvciBtb3JlIHJlc291cmNlIGtleXMuPC9QPgorICAgICAgPFA+QmVuZWF0aCB0aGUgU0NBTiBlbGVtZW50IGFyZSBmb3VuZCBESVJFQ1RPUlkgZWxlbWVudHMuIEFueSBudW1iZXIgb2YgCisgICAgICAgIHRoZXNlIGVsZW1lbnRzIGNhbiBiZSBzcGVjaWZpZWQuIFRoZSByZXF1aXJlZCBMT0NBVElPTiBhdHRyaWJ1dGUgc3BlY2lmaWVzIAorICAgICAgICBpbiBhIG1hY2hpbmUgZGVwZW5kZW50IG1hbm5lciB0aGUgbG9jYXRpb24gb2YgYSBkaXJlY3RvcnkgZm9yIHdoaWNoIHRoZSAKKyAgICAgICAgZmlsZXMgYXJlIHRvIGJlIHNjYW5uZWQgZm9yIHJlc291cmNlIGJ1bmRsZXMuIEFuIG9wdGlvbmFsIFJFQ1VSU0VfRElSRUNUT1JJRVMgCisgICAgICAgIGF0dHJpYnV0ZSBtYXkgYmUgc3BlY2lmaWVkLiBJZiB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvICd0cnVlJywgCisgICAgICAgIHRoZW4gYWxsIGRpcmVjdG9yaWVzIGJlbmVhdGggdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXJlIGFsc28gc2Nhbm5lZC48L1A+CisgICAgICA8UD5CZW5lYXRoIGVhY2ggRElSRUNUT1JZIGVsZW1lbnQsIGV4YWN0bHkgb25lIFJVTEVTIGVsZW1lbnRzIGNhbiBiZSBzcGVjaWZpZWQuQmVuZWF0aCAKKyAgICAgICAgdGhpcyBlbGVtZW50LCBhbnkgbnVtYmVyIG9mIEFQUExZIEZJTEUgUlVMRSBlbGVtZW50cyBtYXkgYmUgc3BlY2lmaWVkLiAKKyAgICAgICAgVGhlIHJlcXVpcmVkIE5BTUUgYXR0cmlidXRlIHNwZWNpZmllcyB3aGljaCBvZiB0aGUgZmlsZSBydWxlcyBkZWZpbmVkIAorICAgICAgICBwcmV2aW91c2x5IGFyZSB0byBiZSBhcHBsaWVkLiBCZW5lYXRoIHRoZXNlIGVsZW1lbnQgYW55IG51bWJlciBvZiBBUFBMWVBBUlNFUlVMRSAKKyAgICAgICAgZWxlbWVudHMgbWF5IGJlIHNwZWNpZmllZC4gVGhlIHJlcXVpcmVkIE5BTUUgYXR0cmlidXRlIHNwZWNpZmllcyB3aGljaCAKKyAgICAgICAgb2YgdGhlIHBhcnNlIHJ1bGVzIGRlZmluZWQgcHJldmlvdXNseSBhcmUgdG8gYmUgYXBwbGllZCB0byB0aGUgZmlsZXMgYWNjZXB0ZWQgCisgICAgICAgIGJ5IHRoZSBwYXJlbnQgZmlsZSBydWxlLjwvUD4KKyAgICAgIDxQPjxCPlRoZSBFeGFtcGxlIEZpbGUgRXhwbGFpbmVkPC9CPjwvUD4KKyAgICAgIDxQPkdpdmVuIHRoZSBkZXRhaWxzIG9mIHRoZSBmaWxlIHN0cnVjdHVyZSwgd2UgY2FuIG5vdyBleGFtaW5lIGhvdyB0aGUgZXhhbXBsZSAKKyAgICAgICAgZmlsZSBzcGVjaWZpZXMgd2hpY2ggZmlsZXMgdG8gc2NhbiwgYW5kIHRoZW4gaG93IGl0IHNwZWNpZmllcyBob3cgdG8gZmluZCAKKyAgICAgICAgdGhlIHJlc291cmNlIGtleXMgY29udGFpbmVkIGluIHRob3NlIGZpbGVzLjwvUD4KKyAgICAgIDxQPlJCUmVwb3J0ZXIgZmlyc3QgYmVnaW5zIGJ5IGdvaW5nIHRocm91Z2ggZWFjaCBvZiB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkLiAKKyAgICAgICAgSW4gdGhlIGV4YW1wbGUgZmlsZSBjYXNlLCB0aGVyZSBpcyBvbmx5IG9uZSBkaXJlY3RvcnkuIEl0IHRoZW4gZ29lcyB0aHJvdWdoIAorICAgICAgICBlYWNoIG9mIHRoZSBmaWxlcyBjb250YWluZWQgaW4gdGhhdCBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyBsb29raW5nIAorICAgICAgICBmb3IgZmlsZXMgdGhhdCBwYXNzIHRoZSAnSmF2YSBGaWxlJyBmaWxlIHRlc3QuIFRoZSAnSmF2YSBGaWxlJyB0ZXN0IHNpbXBseSAKKyAgICAgICAgY2hlY2tzIHRoZSBmaWxlIG5hbWUgdG8gc2VlIGlmIGl0IGVuZHMgaW4gdGhlIGV4dGVuc2lvbiAnLmphdmEnLiBJZiB0aGUgCisgICAgICAgIGZpbGUgaGFzIHN1Y2ggYW4gZXh0ZW5zaW9uIHRoZSBwYXJzZSBydWxlICdKYXZhIHN0YXRpYyByZXNvdXJjZScgaXMgYXBwbGllZCAKKyAgICAgICAgdG8gZXZlcnkgbGluZSBvZiB0ZXh0IHdpdGhpbiB0aGF0IGZpbGUuPC9QPgorICAgICAgPFA+VGh1cyBpZiB0aGUgZm9sbG93aW5nIGZpbGUsIG5hbWVkIFNhbXBsZS5qYXZhLCB3ZXJlIHRvIGJlIGZvdW5kIGluIHRoZSAKKyAgICAgICAgZGlyZWN0b3J5LiBUaGUgdHdvIHJlc291cmNlIGtleXMgJ0hlbGxvJyBhbmQgJ1dvcmxkJyB3b3VsZCBiZSBmb3VuZC48L1A+CisgICAgICAgIDxibG9ja3F1b3RlPjxjb2RlPgorICAgICAgICAgIDxwcmU+CitwdWJsaWMgY2xhc3MgU2FtcGxlIHsKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CisJCVN5c3RlbS5vdXQucHJpbnRsbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oJnF1b3Q7SGVsbG8mcXVvdDspICsgJnF1b3Q7ICZxdW90OyArIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigmcXVvdFdvcmxkJnF1b3Q7KSk7CisJfQorfQorPC9wcmU+CisgICAgICAgICAgPC9jb2RlPjwvYmxvY2txdW90ZT4KKworICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9ImltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTFjMGY5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlRlbXBsYXRlPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6ICB1cmwoaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9ImltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJzeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJ0dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0idmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Imxvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Im1lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0idHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSJpbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9IlJCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9InNjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPgorICAgICAgPEgzIEFMSUdOPSJDRU5URVIiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0gzPgorICAgICAgPFA+UkIgTWFuYWdlciB3aWxsIHJ1biBvbiBhbnkgcGxhdGZvcm0gc3VwcG9ydGluZyBKYXZhIDEuNCBvciBoaWdoZXIuIEl0IAorICAgICAgICBoYXMgYmVlbiB0ZXN0ZWQgb24gV2luZG93cyBOVCwgV2luZG93cyAyMDAwLCBMaW51eCwgYW5kIE1hYyBPUyBYLiBJdCBpcyAKKyAgICAgICAgcmVjb21tZW5kZWQgdGhhdCB0aGUgbWFjaGluZSBydW5uaW5nIFJCIE1hbmFnZXIgaGF2ZSBhdCBsZWFzdCA2NCBNQiBvZiAKKyAgICAgICAgbWVtb3J5LjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSJpbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwNCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9pbmRleC5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzgxZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDE1OSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIFR1dG9yaWFsPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iLi4vaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2luZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi92aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJzdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPERJViBBTElHTj0iQ0VOVEVSIj4gCisgICAgICAgIDxIMj5TdGVwLWJ5LXN0ZXAgVHV0b3JpYWw8L0gyPgorICAgICAgICA8UCBBTElHTj0iQ0VOVEVSIj5UaGlzIHR1dG9yaWFsIHRha2VzIHlvdSBzdGVwIGJ5IHN0ZXAgdGhyb3VnaCB0aGUgcHJvY2VzcyAKKyAgICAgICAgICBvZiBjcmVhdGluZyBhIHJlc291cmNlIGJ1bmRsZSBhbmQgbWFuYWdpbmcgdGhlIHRyYW5zbGF0aW9ucyB5b3UgbmVlZCAKKyAgICAgICAgICBmb3IgeW91ciBhcHBsaWNhdGlvbiBvciB3ZWIgYmFzZWQgaW50ZXJmYWNlcy4gWW91IG1heSBiZWdpbiB3aXRoIHRoZSAKKyAgICAgICAgICBmaXJzdCBzdGVwLCBvciBzZWxlY3QgZnJvbSBhbnkgb2YgdGhlIHN0ZXBzIGxpc3RlZCBiZWxvdy4gVGhlIHR1dG9yaWFsIAorICAgICAgICAgIGlzIG5vdCBtZWFudCB0byBnaXZlIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBmZWF0dXJlcyBvZiBSQiBNYW5hZ2VyLCAKKyAgICAgICAgICBidXQgaXQgd2lsbCBoZWxwIHlvdSBmYW1pbGlhcml6ZSB3aXRoIGFsbCBvZiB0aGUgYmFzaWMgZmVhdHVyZXMuPC9QPgorICAgICAgICA8SDMgQUxJR049IkxFRlQiPiAKKyAgICAgICAgICA8VUw+CisgICAgICAgICAgICA8TEk+CisgICAgICAgICAgICAgIDxIND5TdGVwIDEuIDxBIEhSRUY9InN0ZXAxLmh0bWwiPlNldHRpbmcgWW91ciBQZXJzb25hbCBQcmVmZW5jZXM8L0E+PC9IND4KKyAgICAgICAgICAgIDwvTEk+CisgICAgICAgICAgICA8TEk+CisgICAgICAgICAgICAgIDxIND5TdGVwIDIuIDxBIEhSRUY9InN0ZXAyLmh0bWwiPkNyZWF0aW5nIGEgTmV3IFJlc291cmNlIEJ1bmRsZTwvQT48L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICAgIDxMST4KKyAgICAgICAgICAgICAgPEg0PlN0ZXAgMy4gPEEgSFJFRj0ic3RlcDMuaHRtbCI+Q3JlYXRpbmcgR3JvdXBzIHdpdGhpbiB0aGUgQnVuZGxlPC9BPjwvSDQ+CisgICAgICAgICAgICA8L0xJPgorICAgICAgICAgICAgPExJPgorICAgICAgICAgICAgICA8SDQ+U3RlcCA0LiA8QSBIUkVGPSJzdGVwNC5odG1sIj5Qb3B1bGF0aW5nIHRoZSBCdW5kbGUgd2l0aCBSZXNvdXJjZXM8L0E+PC9IND4KKyAgICAgICAgICAgIDwvTEk+CisgICAgICAgICAgICA8TEk+CisgICAgICAgICAgICAgIDxIND5TdGVwIDUuIDxBIEhSRUY9InN0ZXA1Lmh0bWwiPkFkZGluZyBSZXNvdXJjZSBGaWxlcyBmb3IgTmV3IExhbmd1YWdlczwvQT48L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICAgIDxMST4KKyAgICAgICAgICAgICAgPEg0PlN0ZXAgNi4gPEEgSFJFRj0ic3RlcDYuaHRtbCI+U2F2aW5nIHRoZSBSZXN1bHRzPC9BPiA8L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICA8L1VMPgorICAgICAgICA8L0gzPgorICAgICAgICA8SDQ+PEEgSFJFRj0ic3RlcDEuaHRtbCI+R28gdG8gU3RlcCAxPC9BPjwvSDQ+CisgICAgICA8L0RJVj4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorPCEtLQorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMiI+CisgIDxUUj4KKyAgICA8VEQgV0lEVEg9IjIwMCIgQkdDT0xPUj0iI0NDQ0NGRiI+Jm5ic3A7PC9URD4KKyAgICA8VEQ+CisgICAgICA8RElWIEFMSUdOPSJDRU5URVIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgV0lEVEg9IjE3NSIgSEVJR0hUPSI1MCI+PC9ESVY+CisgICAgPC9URD4KKyAgPC9UUj4KKyAgPFRSIFZBTElHTj0iVE9QIj4gCisgICAgPFREIFdJRFRIPSIyMDAiIEJHQ09MT1I9IiNDQ0NDRkYiPiAKKyAgICAgIDxQPjxBIEhSRUY9ImluZGV4Lmh0bWwiPlJCTWFuYWdlcjwvQT48L1A+CisgICAgICA8UD48QSBIUkVGPSJSQlJlcG9ydGVyLmh0bWwiPlJCUmVwb3J0ZXI8L0E+PC9QPgorICAgICAgPFA+PEEgSFJFRj0iLi4vdHV0b3JpYWwvc3RlcDEuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L1A+CisgICAgICA8UD48QSBIUkVGPSJmYXEuaHRtbCI+RkFRPC9BPjwvUD4KKyAgICAgIDxQPlRvcGljczwvUD4KKyAgICAgIDxVTD4KKyAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL2luZGV4Lmh0bWwiPlN0ZXAtYnktc3RlcCBUdXRvcmlhbDwvQT48L0xJPgorICAgICAgICA8TEk+PEEgSFJFRj0ic3RlcDEuaHRtbCI+Q2hhbmdpbmcgUHJlZmVuY2VzPC9BPjwvTEk+CisgICAgICAgIDxMST48QSBIUkVGPSJmdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2UgRmVhdHVyZXM8L0E+PC9MST4KKyAgICAgIDwvVUw+CisgICAgPC9URD4KKyAgICA8VEQ+PC9URD4KKyAgPC9UUj4KKzwvVEFCTEU+CistLT4KKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXAxLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzgzZTkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMS5odG1sCkBAIC0wLDAgKzEsMTY4IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgVHV0b3JpYWwgLSBQcmVmZXJlbmNlczwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0ic3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5TZXR0aW5nIFlvdXIgUGVyc29uYWwgUHJlZmVyZW5jZXM8L0gzPgorICAgICAgPFA+PEI+R2V0dGluZyBTdGFydGVkPC9CPjwvUD4KKyAgICAgIDxQPkJlZm9yZSB5b3UgY2FuIGRvIGFueXRoaW5nIHdpdGggdGhlIHByb2dyYW0sIG9mIGNvdXJzZSwgeW91IGhhdmUgdG8gZ2V0IAorICAgICAgICBpdCBydW5uaW5nLiBSQiBNYW5hZ2VyIGlzIHB1cmVseSBhIEphdmEgYXBwbGljYXRpb24uIFRoZSBkb3dubG9hZCBkb2VzIAorICAgICAgICBub3QgY29tZSB3aXRoIGEgSmF2YSBydW50aW1lIGVudmlyb25tZW50LiBJbiBvcmRlciB0byB1c2UgUkJNYW5hZ2VyLCB5b3UgCisgICAgICAgIHdpbGwgbmVlZCB0byBoYXZhIGEgSmF2YSBydW50aW1lIGVudmlyb25tZW50IGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmUuIAorICAgICAgICBUaGUgZW52aXJvbm1lbnQgaXMgYXZhaWxhYmxlIHRvIG1vc3QgY29tcHV0aW5nIHBsYXRmb3JtcyBhdCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tIj5TdW4ncyAKKyAgICAgICAgaW50ZXJuZXQgc2l0ZTwvQT4uIFJCIE1hbmFnZXIgaGFzIGJlZW4gdGVzdGVkIGZvciBKYXZhIHZlcnNpb25zIDEuMi4yIAorICAgICAgICBhbmQgaGlnaGVyLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgSmF2YSB2ZXJzaW9uIDEuMyBpZiBpdCBpcyBhdmFpbGFibGUgCisgICAgICAgIGZvciB5b3VyIHN5c3RlbS48L1A+CisgICAgICA8UD5UbyBydW4gdGhlIHByb2dyYW0gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBmaXJzdCBnbyB0byB0aGUgUkJNYW5hZ2VyIGRpcmVjdG9yeSAKKyAgICAgICAgb24geW91ciBzeXN0ZW0sIHRoZW4gZW50ZXI6PC9QPgorICAgICAgPFA+PENPREU+amF2YSAtY2xhc3NwYXRoIC4vbGliL1JCTWFuYWdlci5qYXI7Li9saWIveGVyY2VzLmphciBjb20uaWJtLnJibS5SQk1hbmFnZXI8L0NPREU+PC9QPgorICAgICAgPFA+QWx0ZXJuYXRpdmVseSwgV2luZG93cyB1c2VycyBjYW4gdXNlIHRoZSBiYXRjaCBmaWxlLCBSQk1hbmFnZXIuYmF0IHRvIAorICAgICAgICBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nLiBMaW51eCBhbmQgVW5peCB1c2VycyB0ZW5kIG5vdCB0byBuZWVkIHRoZWlyIAorICAgICAgICBoYW5kcyBoZWxkLCBhbmQgY2FuIHByb2JhYmx5IGZpZ3VyZSBvdXQgaG93IHRvIHdyaXRlIGEgc2ltcGxlIHNjcmlwdCBvciAKKyAgICAgICAgYWxpYXMgdG8gcnVuIHRoZSBhcHBsaWNhdGlvbiB3aXRob3V0IGhlbHAuIE1hYyBPUyBYIHVzZXJzIGNhbiBydW4gdGhlIAorICAgICAgICBwcm9ncmFtIGZyb20gdGhlIFRlcm1pbmFsIGFwcGxpY2F0aW9uIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgbGluZSwgc3Vic3RpdHV0aW5nIAorICAgICAgICBhIGNvbG9uIGZvciB0aGUgc2VtaS1jb2xvbiBpbiB0aGUgY2xhc3NwYXRoIGFyZ3VtZW50LjwvUD4KKyAgICAgIDxQPjxCPlRoZSBEaXNwbGF5PC9CPjwvUD4KKyAgICAgIDxQPk9uY2UgeW91IGdldCB0aGUgYXBwbGljYXRpb24gcnVubmluZywgeW91IHdpbGwgaG9wZWZ1bGx5IHNlZSBzb21ldGhpbmcgCisgICAgICAgIGxpa2UgdGhpczo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X3NjcmVlbi5naWYiPjwvUD4KKyAgICAgIDxQPlRoZSBkaXNwbGF5IG1heSBkaWZmZXIgYmVjYXVzZSBvZiBkaWZmZXJlbmNlcyBpbiB0aGUgdmFyaW91cyBKYXZhIFZpcnR1YWwgCisgICAgICAgIE1hY2hpbmVzIGFuZCBkaWZmZXJlbmNlcyBpbiBMb29rIGFuZCBGZWVscy4gQXQgdGhlIHRvcCBpcyBhIG1lbnUgYmFyIGFuZCAKKyAgICAgICAgYSBsb2dvLiBCZWxvdyB0aGUgbG9nbyBhbmQgdG8gdGhlIGxlZnQgaXMgYSBwYW5lIGluIHdoaWNoIGFsbCBvZiB0aGUgdmFyaW91cyAKKyAgICAgICAgbGFuZ3VhZ2UgZmlsZXMgd2lsbCBiZSBsaXN0ZWQgaW4gYSB0cmVlIHZpZXcuIFNpbmNlIG5vIHJlc291cmNlIGJ1bmRsZSAKKyAgICAgICAgaGFzIGJlZW4gc2VsZWN0ZWQsIHRoaXMgdHJlZSBpcyBjdXJyZW50bHkgZW1wdHkuIFRvIHRoZSByaWdodCBpcyBhIHRhYmJlZCAKKyAgICAgICAgcGFuZSBpbiB3aGljaCB0aHJlZSB2aWV3cyB3aWxsIGJlIHNob3duLiBUaGUgdmlld3Mgd2lsbCBlaXRoZXIgcHJlc2VudCAKKyAgICAgICAgaW5mb3JtYXRpb24gb3IgcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIGVkaXRpbmcgdGhlIHZhcmlvdXMgZGF0YSBjb250YWluZWQgCisgICAgICAgIGFjcm9zcyB5b3VyIHJlc291cmNlIGJ1bmRsZS48L1A+CisgICAgICA8UD48Qj5DdXN0b21pemluZyB0aGUgQXBwbGljYXRpb24gZm9yIFlvdTwvQj48L1A+CisgICAgICA8UD5HbyB0byB0aGUgT3B0aW9ucyBtZW51IGFuZCBzZWxlY3QgUHJlZmVyZW5jZXMuIFRoZSBmaXJzdCB0aW1lIGFmdGVyIG9wZW5pbmcgCisgICAgICAgIHRoZSBhcHBsaWNhdGlvbiwgaXQgbWF5IHRha2UgYSBmZXcgc2Vjb25kcyB0byBnZXQgdG8gdGhlIHByZWZlcmVuY2VzIGFzIAorICAgICAgICB0aGUgYXBwbGljYXRpb24gdHJpZXMgdG8gZ2V0IGluZm9ybWF0aW9uIGZyb20geW91ciB2aXJ0dWFsIG1hY2hpbmUuQSBkaWFsb2cgCisgICAgICAgIGJveCBzaG91bGQgYXBwZWFyIHRoYXQgbG9va3Mgc2ltaWxhciB0byB0aGlzOjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvcHJlZmVyZW5jZXNfZGlhbG9nLmdpZiIgV0lEVEg9IjQyOSIgSEVJR0hUPSIyNjkiPjwvUD4KKyAgICAgIDxQPlRoZSBmaXJzdCB0aGluZyB0byBkbyBpcyB0byBjaGFuZ2UgdGhlIHVzZXIgbmFtZSB0byB5b3VyIG93biBuYW1lLiBZb3UgCisgICAgICAgIHdpbGwgb25seSBoYXZlIHRvIGRvIHRoaXMgb25jZSB1bmxlc3Mgc29tZW9uZSBlbHNlIHVzZXMgdGhpcyBhcHBsaWNhdGlvbiAKKyAgICAgICAgYW5kIGNoYW5nZXMgdGhlIG5hbWUuIFNlY29uZCwgeW91IHNob3VsZCBjaGFuZ2UgdGhlIGxvb2sgYW5kIGZlZWwgb2YgdGhlIAorICAgICAgICBhcHBsaWNhdGlvbiB0byB5b3VyIHByZWZlcmVuY2UuIEFsbCBvZiB0aGUgbG9vayBhbmQgZmVlbHMgdGhhdCB5b3VyIEpWTSAKKyAgICAgICAgc3VwcG9ydHMgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgZHJvcCBkb3duIGJveC4gKE5vdGUgdGhhdCBjaGFuZ2VzIHdpbGwgCisgICAgICAgIG5vdCB0YWtlIGFmZmVjdCB1bnRpbCBhZnRlciB5b3UgYXJlIGRvbmUgYW5kIGhhdmUgcHJlc3NlZCB0aGUgVXBkYXRlIGJ1dHRvbikuPC9QPgorICAgICAgPFA+VGhlIGxhc3QgdGhpbmcgdG8gY2hhbmdlIGlzIHRoZSBsb2NhbGUgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRvIHdvcmsgCisgICAgICAgIHdpdGggdGhpcyBhcHBsaWNhdGlvbi4gV2hlbiB5b3UgZG93bmxvYWQgUkJNYW5hZ2VyLCBpdCBpcyBzZXQgYnkgZGVmYXVsdCAKKyAgICAgICAgdG8gZGlzcGxheSBpbiBVLlMuIEVuZ2xpc2guIEFzIG9mIHRoaXMgd3JpdGluZywgeW91IGNhbiB1c2UgdGhlIHByb2dyYW0gCisgICAgICAgIGluIEZpbm5pc2gsIFN3ZWRpc2gsIGFuZCBHZXJtYW4gYXMgd2VsbC4gVGhyZWUgbGlzdHMgY2hvaWNlcyBhcmUgcG9zc2libGUgCisgICAgICAgIGZvciBzZWxlY3RpbmcgYSBsb2NhbGUuIFRoZSBmaXJzdCwgY2FsbGVkICdNYWNoaW5lIFN1cHBvcnRlZCcsIGxpc3RzIGFsbCAKKyAgICAgICAgb2YgdGhlIGxvY2FscyBzdXBwb3J0ZWQgYnkgeW91ciBKVk0uIFRoZSBzZWNvbmQsIGNhbGxlZCAnRGVmaW5lZCBmb3IgUkJNYW5hZ2VyJywgCisgICAgICAgIGFuYWx5emVzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIFJCTWFuYWdlciBhbmQgbGV0cyB5b3Ugc2VsZWN0IGZyb20gdGhlIAorICAgICAgICBhdmFpbGFibGUgdHJhbnNsYXRpb24gZmlsZXMuIFRoZSB0aGlyZCBvcHRpb24sIGNhbGxlZCAnSVNPIFN0YW5kYXJkcycsIAorICAgICAgICBsaXN0cyBhbGwgb2YgdGhlIGxhbmd1YWdlIGFuZCBjb3VudHJ5IDItbGV0dGVyIGNvZGVzIGRlZmluZWQgYnkgdGhlIElTTy4gCisgICAgICAgIFlvdSBtYXkgc2VsZWN0IGFueSBvZiB0aGUgdGhyZWUgb3B0aW9ucyBieSB1c2Ugb2YgdGhlIHJhZGlvIGJ1dHRvbiBvbiAKKyAgICAgICAgdGhlIGxlZnQgYW5kIHRoZW4gc2VsZWN0IHRoZSBlbmNvZGluZyB5b3Ugd291bGQgbGlrZSB0byB1c2UuIE9mIGNvdXJzZSAKKyAgICAgICAgaWYgdGhlIGVuY29kaW5nIHlvdSBzZWxlY3QgaXMgbm90IHN1cHBvcnRlZCBieSBSQk1hbmFnZXIsIHRoZSB0cmFuc2xhdGlvbnMgCisgICAgICAgIGluIHRoZSBiYXNlIGNsYXNzIG9mIHRoZSBidW5kbGUgd2lsbCBiZSB1c2VkLCB3aGljaCBhcmUgaW4gRW5nbGlzaC4gQWxzbyAKKyAgICAgICAgbm90ZSwgdGhhdCB0aGUgYmFzZSBjbGFzcyBsYW5ndWFnZSBtYXkgbm90IGFwcGVhciBpbiB0aGUgJ0RlZmluZWQgZm9yIAorICAgICAgICBSQk1hbmFnZXInIHNlY3Rpb24gYmVjYXVzZSB0aGUgZW5jb2RpbmcgaXMgbm90IGFsd2F5cyBzcGVjaWZpZWQgZm9yIHRoYXQgCisgICAgICAgIGZpbGUuIDwvUD4KKyAgICAgIDxQPldoZW4geW91IGFyZSBkb25lIG1ha2luZyB5b3VyIHBlcnNvbmFsaXplZCBzZWxlY3Rpb25zLCBjbGljayBvbiB0aGUgVXBkYXRlIAorICAgICAgICBidXR0b24uIFRoZSBwcmVmZXJlbmNlcyB3aWxsIGJlIHNhdmVkIGluIGEgZmlsZSBjYWxsZWQgcHJlZmVyZW5jZXMucHJvcGVydGllcyAKKyAgICAgICAgc3RvcmVkIGluIHlvdXIgUkJNYW5hZ2VyIGRpcmVjdG9yeS4gWW91IHdpbGwgbm90IG5lZWQgdG8gbWFrZSB0aGVzZSBzZWxlY3Rpb25zIAorICAgICAgICBpbiB0aGUgZnV0dXJlLCB1bmxlc3MgeW91IHdhbnQgdG8gY2hhbmdlIHlvdXIgZGVmYXVsIG9wdGlvbnMuPC9QPgorICAgICAgPFA+PEEgSFJFRj0iaW5kZXguaHRtbCI+QmFjayB0byB0aGUgVHV0b3JpYWwgTWVudTwvQT4gLW9yLSA8QSBIUkVGPSJzdGVwMi5odG1sIj5Gb3J3YXJkIAorICAgICAgICB0byBTdGVwIDI8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXAyLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YmViNDcKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMi5odG1sCkBAIC0wLDAgKzEsMTQ4IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgVHV0b3JpYWwgLSBDcmVhdGluZyBSZXNvdXJjZXM8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3ZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InN0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+U3RlcCAyLiBDcmVhdGluZyBhIE5ldyBSZXNvdXJjZSBCdW5kbGU8L0gzPgorICAgICAgPFA+PEI+VGhpbmdzIHRvIENvbnNpZGVyPC9CPjwvUD4KKyAgICAgIDxQPkEgcmVzb3VyY2UgYnVuZGxlIGluIHRlcm1zIG9mIHRoaXMgYXBwbGljYXRpb24gaXMgYSBncm91cCBvZiBwcm9wZXJ0eSAKKyAgICAgICAgZmlsZXMgd2l0aCB0aGUgc2FtZSBiYXNlIGNsYXNzIG5hbWUuIEZvciBpbnN0YW5jZSwgdGhlIHJlc291cmNlIGJ1bmRsZSAKKyAgICAgICAgZm9yIFJCIE1hbmFnZXIgaW5jbHVkZXMgZmlsZXM6IDxjb2RlPlJCTWFuYWdlci5wcm9wZXJ0aWVzPC9DT0RFPiwgPGNvZGU+UkJNYW5hZ2VyX2RlLnByb3BlcnRpZXM8L0NPREU+LCAKKyAgICAgICAgPGNvZGU+UkJNYW5nZXJfZmkucHJvcGVydGllczwvQ09ERT4sIGV0Yy4gSW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBwcm9ncmFtLCAKKyAgICAgICAgUkIgTWFuYWdlciB3aWxsIGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgaW1wb3J0aW5nIGFuZCBleHBvcnRpbmcgZGF0YSBmcm9tIAorICAgICAgICBvdGhlciBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgc2NoZW1hcyBzdWNoIGFzIHRoZSBYTUwgaW50ZXJuYXRpb25hbGl6YXRpb24gCisgICAgICAgIHN0YW5kYXJkLCBUTVguPC9QPgorICAgICAgPFA+WW91IGNhbiBoYXZlIGFzIG1hbnkgUmVzb3VyY2UgQnVuZGxlcyBhcyB5b3UgbGlrZSBmb3IgYW4gYXBwbGljYXRpb24sIAorICAgICAgICB0aG91Z2ggbW9zdCB0ZWFtcyBjaG9vc2UgdG8gd29yayB3aXRoIGp1c3Qgb25lLiBSQiBNYW5hZ2VyIGFsbG93cyB5b3UgCisgICAgICAgIHRvIHdvcmsgb24gb25lIHJlc291cmNlIGJ1bmRsZSBhdCBhIHRpbWUsIGVkaXRpbmcgZWl0aGVyIGluZGl2aWR1YWwgdHJhbnNsYXRpb24gCisgICAgICAgIGZpbGVzIG9yIGdyb3VwcyBvZiB0cmFuc2xhdGlvbiBmaWxlcyB3aXRoaW4gdGhlIGJ1bmRsZS4gV2hlbiB5b3UgY3JlYXRlIAorICAgICAgICBhIHJlc291cmNlIGJ1bmRsZSB5b3Ugd2lsbCBiZSBjcmVhdGluZyB0aGUgYmFzZSBjbGFzcyB0cmFuc2xhdGlvbiBmaWxlIAorICAgICAgICBmb3IgdGhhdCBidW5kbGUuIE90aGVyIGZpbGVzIGNhbiBiZSBhZGRlZCBhdCBhbnkgdGltZSBsYXRlci4gVGhlIGJhc2UgCisgICAgICAgIGNsYXNzIHRyYW5zbGF0aW9uIGZpbGUgcHJvdmlkZXMgYSBkZWZhdWx0IHRyYW5zbGF0aW9uIGluIGNhc2UgbG9jYWxlcyAKKyAgICAgICAgYXJlIG5vdCBzcGVjaWZpZWQgb3IgYSByZXNvdXJjZSB0cmFuc2xhdGlvbiBmaWxlIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgCisgICAgICAgIGxvY2FsZSB0aGF0IGlzIHNwZWNpZmllZC48L1A+CisgICAgICA8UD5Zb3Ugd2lsbCBoYXZlIHRvIGNob29zZSBhIGJhc2UgY2xhc3MgbmFtZSBmb3IgdGhlIHJlc291cmNlIGJ1bmRsZS4gVGhhdCAKKyAgICAgICAgbmFtZSBtYXkgaGF2ZSBubyB3aGl0ZSBzcGFjZXMgYW5kIG5vIHVuZGVyc2NvcmVzLCBhbmQgaXQgc2hvdWxkIHJlbWluZCAKKyAgICAgICAgeW91IGluIHNvbWUgd2F5IG9mIHRoZSBwcm9qZWN0IG9yIGZ1bmN0aW9uIHRvIHdoaWNoIGl0IGlzIGF0dGFjaGVkLiBZb3UgCisgICAgICAgIHdpbGwgYWxzbyBoYXZlIHRvIGVudGVyIGEgbmFtZSBmb3IgdGhlIHBlcnNvbiBvciBwZW9wbGUgaW4gY2hhcmdlIG9mIG1hbmFnaW5nIAorICAgICAgICB0aGUgcmVzb3VyY2UgYnVuZGxlLjwvUD4KKyAgICAgIDxQPjxCPkNyZWF0aW5nIHRoZSBSZXNvdXJjZSBCdW5kbGU8L0I+PC9QPgorICAgICAgPFA+RnJvbSB0aGUgRmlsZSBtZW51LCBzZWxlY3QgJ05ldyBSZXNvdXJjZSBCdW5kbGUuLi4nIFlvdSB3aWxsIGJlIHByb21wdGVkIAorICAgICAgICB0byBlbnRlciB0aGUgYmFzZSBjbGFzcyBuYW1lLiBJZiB5b3UgZW50ZXIgYSBwcm9wZXJseSBmb3JtYXR0ZWQgbmFtZSwgCisgICAgICAgIHRoZSB0cmVlIGRpc3BsYXkgb24gdGhlIGxvd2VyIGxlZnQgd2lsbCBjaGFuZ2UgdG8gcmVmbGVjdCB0aGUgbmFtZSB5b3UgCisgICAgICAgIGVudGVyZWQuIENsaWNrIG9uIHRoZSBuYW1lIG9mIHlvdXIgcmVzb3VyY2UgYnVuZGxlLCBhbmQgbWFrZSBzdXJlIHRoZSAKKyAgICAgICAgJ1N0YXRpc3RpY3MnIHRhYiBpcyBzZWxlY3RlZC4gWW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL25ld19idW5kbGUuZ2lmIiBXSURUSD0iNTUyIiBIRUlHSFQ9IjM4NSI+PC9QPgorICAgICAgPFA+VGhlIG9ubHkgcmVzb3VyY2UgZmlsZSB5b3UgaGF2ZSBpcyB0aGF0IG9mIHRoZSBiYXNlIGNsYXNzLiBTZWxlY3QgdGhlIAorICAgICAgICAnKEJhc2UgQ2xhc3MpJyBub2RlIG9mIHRoZSB0cmVlIGJ5IGNsaWNraW5nIG9uIGl0LiBZb3Ugc2hvdWxkIG5vdyBzZWUgCisgICAgICAgIHRoZSBmb2xsb3dpbmc6PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9uZXdfYmFzZWNsYXNzLmdpZiIgV0lEVEg9IjY3NiIgSEVJR0hUPSI1MTEiPjwvUD4KKyAgICAgIDxQPlRoZSBmaWVsZHMgcmVwcmVzZW50ZWQgaGVyZSBoYXZlIG5vIGJlYXJpbmcgb24gaG93IHRoZSB0cmFuc2xhdGlvbnMgd2lsbCAKKyAgICAgICAgd29yayBpbiB5b3VyIGFwcGxpY2F0aW9uLCBidXQgZ2l2ZSBSQk1hbmFnZXIgc29tZSBtZXRhZGF0YSB0byBiZXR0ZXIgb3JnYW5pemUgCisgICAgICAgIHRoZSBmaWxlLiBSZXNvdXJjZSBUaXRsZSBzaG91bGQgYmUgYSBzaG9ydCB0aXRsZSB0aGF0IHJlcHJlc2VudHMgdGhpcyAKKyAgICAgICAgZmlsZSwgc3VjaCBhcyAnUkJUdXRvcmlhbCBCYXNlIENsYXNzJy4gWW91IGNhbiBlbnRlciBhbnkgY29tbWVudCBhbmQgZmlsZSAKKyAgICAgICAgbWFuYWdlciB2YWx1ZSB5b3UgbGlrZS4gVGhlIGxhbmd1YWdlLCBjb3VudHJ5LCBhbmQgdmFyaWFudCBmaWVsZHMgcHJvdmlkZSAKKyAgICAgICAgYSBwbGFjZSBmb3IgbGlzdGluZyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBsYW5ndWFnZSwgY291bnRyeSwgYW5kIHZhcmlhbnQgCisgICAgICAgIHNvIHRoYXQgeW91IGRvIG5vdCBoYXZlIHRvIHJlbHkgb24gdHdvIG9yIHRocmVlIGxldHRlciBlbmNvZGluZ3MuIFlvdSAKKyAgICAgICAgY2FuIGFsc28gbGVhdmUgdGhlc2UgZmllbGRzIGJsYW5rIGlmIHRoZXkgYXJlIG5vdCByZWxldmFudC4gT25jZSB5b3UgaGF2ZSAKKyAgICAgICAgZW50ZXJlZCB0aGVzZSB2YWx1ZXMgaW4sIGZpbmFsaXplIHRoZW0gYnkgcHJlc3NpbmcgdGhlICdVcGRhdGUnIGJ1dHRvbi48L1A+CisgICAgICA8UD48QSBIUkVGPSJzdGVwMS5odG1sIj5CYWNrIHRvIFN0ZXAgMTwvQT4gLW9yLSA8QSBIUkVGPSJzdGVwMy5odG1sIj5Gb3J3YXJkIAorICAgICAgICB0byBTdGVwIDM8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXAzLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NzhlZGUKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwMy5odG1sCkBAIC0wLDAgKzEsMTM1IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgVHV0b3JpYWwgLSBDcmVhdGluZyBHcm91cHM8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3ZpZXdzL2luZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9InN0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4KKyAgICAgIDxESVYgQUxJR049IkNFTlRFUiI+CisgICAgICAgIDxIMz5DcmVhdGluZyBHcm91cHMgd2l0aGluIHRoZSBCdW5kbGU8L0gzPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+PEI+V2hhdCBpcyBhIEdyb3VwPzwvQj48L1A+CisgICAgICAgIDxQIEFMSUdOPSJMRUZUIj5PbmUgb2YgdGhlIGZ1bmRhbWVudGFsIHByb2JsZW1zIHdpdGggbWFuYWdpbmcgcmVzb3VyY2UgCisgICAgICAgICAgYnVuZGxlcyBhY3Jvc3MgbGFyZ2UgcHJvamVjdHMgaXMgdGhhdCBpbmRpdmlkdWFsIHJlc291cmNlcyBvZnRlbiBnb3QgCisgICAgICAgICAgbG9zdCBpbiB0aGUgdmFzdCBudW1iZXIgb2YgdHJhbnNsYXRpb25zLiBCeSBjcmVhdGluZyBncm91cHMgd2l0aGluIHJlc291cmNlcywgCisgICAgICAgICAgUkJNYW5hZ2VyIG1ha2VzIGl0IG11Y2ggc2ltcGxlciB0byBtYW5hZ2UgdGhlIGRhdW50aW5nIG51bWJlciBvZiB0cmFuc2xhdGlvbnMuIAorICAgICAgICAgIFRoZSByZXNvdXJjZSBidW5kbGUgaXMgbGlrZSBhIHRyZWUgd2l0aCB0aGUgZmlsZXMgYXQgdGhlIHVwcGVyIGxldmVscy4gCisgICAgICAgICAgQmVuZWF0aCB0aGUgZmlsZSBsZXZlbCBpcyB0aGUgZ3JvdXAgbGV2ZWwsIGFuZCBiZW5lYXRoIHRoYXQsIHRoZSBpbmRpdmlkdWFsIAorICAgICAgICAgIHJlc291cmNlcy48L1A+CisgICAgICAgIDxQIEFMSUdOPSJMRUZUIj5UaGUgb25seSBtZXRhIGRhdGEgdGhhdCBncm91cHMgY29udGFpbiBhcmUgbmFtZSBhbmQgY29tbWVudC4gCisgICAgICAgICAgVGhlIG5hbWUgaXMgYSB3YXkgb2YgaWRlbnRpZnlpbmcgdGhlIGdyb3VwIGZyb20gYSBsaXN0IG9mIGdyb3VwcywgYW5kIAorICAgICAgICAgIHRoZSBjb21tZW50IGlzIGEgcXVpY2sgZGVzY3JpcHRpb24gYWJvdXQgd2hhdCB0aGUgZ3JvdXAgY29udGFpbnMuPC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+PEI+Q3JlYXRpbmcgYSBHcm91cDwvQj48L1A+CisgICAgICAgIDxQIEFMSUdOPSJMRUZUIj5MaWtlIGFueSBvdGhlciBlZGl0aW5nIHRoYXQgYWZmZWN0cyB0aGUgZW50aXJlIHJlc291cmNlIAorICAgICAgICAgIGJ1bmRsZSwgdGhlIGNyZWF0aW9uIG9mIGEgZ3JvdXAgY2FuIG5vdCBiZSBkb25lIGZyb20gdGhlIGluZGl2aWR1YWwgCisgICAgICAgICAgbGFuZ3VhZ2UgZmlsZSBsZXZlbC4gVHdvIHdheXMgZXhpc3QgdG8gY3JlYXRlIGEgZ3JvdXAuIFRoZSBmaXJzdCBpcyAKKyAgICAgICAgICB0byBzZWxlY3QgdGhlIGJhc2UgY2xhc3MgYXQgdGhlIHRvcCBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRyZWUsIHNlbGVjdCAKKyAgICAgICAgICB0aGUgJ0dyb3VwcycgdGFiLCBhbmQgY2xpY2sgdGhlICdDcmVhdGUgR3JvdXAnIGJ1dHRvbi4gVGhlIHNlY29uZCB3YXkgCisgICAgICAgICAgaXMgdG8gZ28gdG8gdGhlICdPcHRpb25zJyBtZW51IGFuZCBzZWxlY3QgJ0FkZCBOZXcgR3JvdXAnLiBUaGUgc2Vjb25kIAorICAgICAgICAgIG1ldGhvZCBjYW4gYmUgdXNlZCBubyBtYXR0ZXIgd2hhdCB5b3VyIGN1cnJlbnQgdmlldyBpcyBvbiB0aGUgbG93ZXIgCisgICAgICAgICAgcmlnaHQgcGFuZWwuPC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+T25jZSB5b3UgaGF2ZSBmb2xsb3dlZCBvbmUgb2YgdGhlc2UgdHdvIG1ldGhvZHMsIHRoZSBmb2xsb3dpbmcgCisgICAgICAgICAgZGlhbG9nIHNob3VsZCBhcHBlYXI6PC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9jcmVhdGVfZ3JvdXAuZ2lmIiBXSURUSD0iNDA4IiBIRUlHSFQ9IjEwOSI+PC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+RW50ZXIgYSBuYW1lIGFuZCBjb21tZW50IGZvciB0aGUgZ3JvdXAsIGFuZCBjbGljayBvbiAnQ3JlYXRlJy4gCisgICAgICAgICAgTm93IHlvdSBoYXZlIGEgZ3JvdXAuIFlvdSBjYW4gYWRkIG1vcmUgZ3JvdXBzIG5vdyBvciBhdCBhbnkgdGltZS4gWW91IAorICAgICAgICAgIGNhbiBhbHNvIGJlZ2luIHRvIGNyZWF0ZSBuZXcgcmVzb3VyY2VzIHVuZGVyIHRoZSBuZXcgZ3JvdXAgYXMgZXhwbGFpbmVkIAorICAgICAgICAgIGluIHRoZSBuZXh0IHN0ZXAuPC9QPgorICAgICAgICA8UCBBTElHTj0iTEVGVCI+PEEgSFJFRj0ic3RlcDIuaHRtbCI+QmFjayB0byBTdGVwIDI8L0E+IC1vci0gPEEgSFJFRj0ic3RlcDQuaHRtbCI+Rm9yd2FyZCAKKyAgICAgICAgICB0byBTdGVwIDQ8L0E+PC9QPgorICAgICAgPC9ESVY+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDQuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXA0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3ZjBlMQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXA0Lmh0bWwKQEAgLTAsMCArMSwxNjggQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciBUdXRvcmlhbCAtIFBvcHVsYXRpbmcgdGhlIEJ1bmRsZTwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0ic3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5TdGVwIDQuIFBvcHVsYXRpbmcgdGhlIEJ1bmRsZSB3aXRoIFJlc291cmNlczwvSDM+CisgICAgICA8UD48Qj5Xb3JraW5nIHdpdGhpbiBhIEdyb3VwPC9CPjwvUD4KKyAgICAgIDxQPkluIHRoZSB0dXRvcmlhbCBmaWxlLCBmb2xsb3dpbmcgdGhlIHByb2Nlc3MgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyAKKyAgICAgICAgc3RlcCwgSSBjcmVhdGVkIGEgZ3JvdXAgY2FsbGVkICdRdWVzdGlvbnMnIGFuZCBnYXZlIGl0IGEgY29tbWVudC4gVG8gdmlldyAKKyAgICAgICAgdGhlIGdyb3VwIHRoYXQgeW91IGNyZWF0ZWQsIG1ha2Ugc3VyZSB0aGF0IHRoZSBiYXNlIGNsYXNzIGF0IHRoZSB0b3Agb2YgCisgICAgICAgIHRoZSBmaWxlIHRyZWUgdG8gdGhlIGxlZnQgaXMgc2VsZWN0ZWQsIHByZXNzIHRoZSAnR3JvdXBzJyB0YWIgb24gdGhlIHJpZ2h0LCAKKyAgICAgICAgYW5kIHNlbGVjdCB5b3VyIGdyb3VwIG5hbWUgZnJvbSB0aGUgZHJvcCBkb3duIG1lbnUuIFdpdGggYW55IGx1Y2ssIHlvdSAKKyAgICAgICAgd2lsbCBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL2VtcHR5X2dyb3VwLmdpZiIgV0lEVEg9Ijc1MCIgSEVJR0hUPSI0MzIiPjwvUD4KKyAgICAgIDxQPkZyb20gdGhpcyB2aWV3LCB0aGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zIHRoYXQgYXJlIHRvIGJlIGZvdW5kIGluIHRoZSAKKyAgICAgICAgc2l4IGJ1dHRvbnMgdG8gdGhlIGxvd2VyIHJpZ2h0LiBXZSBhcmUgbm93IGdvaW5nIHRvIGNyZWF0ZSBhIHJlc291cmNlLiAKKyAgICAgICAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IGVpdGhlciBwcmVzc2luZyB0aGUgYnV0dG9uICdDcmVhdGUgUmVzb3VyY2UnIAorICAgICAgICBvciBzZWxlY3RpbmcgJ0FkZCBOZXcgUmVzb3VyY2UuLi4nIGZyb20gdGhlICdPcHRpb25zJyBtZW51IGF0IHRoZSB0b3AgCisgICAgICAgIG9mIHRoZSBzY3JlZW4uPC9QPgorICAgICAgPFA+PEI+RmlsbGluZyBpbiBSZXNvdXJjZSBJbmZvcm1hdGlvbjwvQj48L1A+CisgICAgICA8UD5PbmNlIHlvdSBmb2xsb3cgb25lIG9mIHRoZSBhYm92ZSB0d28gc3RlcHMsIHlvdSBzaG91bGQgc2VlIGEgZGlhbG9nIHNpbWlsYXIgCisgICAgICAgIHRvIHRoZSBmb2xsb3dpbmc6PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9lbXB0eV9yZXNvdXJjZS5naWYiPjwvUD4KKyAgICAgIDxQPlRoZSBncm91cCBzaG93biBpcyB0aGUgb25lIGN1cnJlbnRseSBiZWluZyB2aWV3ZWQgd2hlbiB5b3UgY2xpY2tlZCBvbiAKKyAgICAgICAgdGhlICdDcmVhdGUgUmVzb3VyY2UnIGJ1dHRvbi4gSWYgeW91IHVzZWQgdGhlIG1lbnUgdG8gYnJpbmcgdXAgdGhpcyBkaWFsb2csIAorICAgICAgICBpdCBtYXkgYmUgYSBkaWZmZXJlbnQgZ3JvdXAuIFlvdSBtYXkgbW92ZSB0aGUgcmVzb3VyY2UgdG8gYW55IGdyb3VwIHlvdSAKKyAgICAgICAgd2lzaCBieSBjaGFuZ2luZyB0aGUgdmFsdWUgaW4gdGhpcyBkcm9wIGRvd24gYm94LiBCb3RoIHRoZSBlbnRyeSBrZXkgYW5kIAorICAgICAgICB0aGUgdHJhbnNsYXRpb24gZmllbGRzIGFyZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gVGhlc2UgbWFrZSB1cCB0aGUgbG9va3VwIAorICAgICAgICB2YWx1ZSBhbmQgdGhlIHRyYW5zbGF0aW9uIHZhbHVlIHJlc3BlY3RpdmVseSBzdG9yZWQgaW4geW91ciBidW5kbGUuIFRoZSAKKyAgICAgICAgY29tbWVudCBmaWVsZCBpcyB0aGVyZSBpbiBvcmRlciB0byBhaWQgdGhvc2Ugd2hvIHdpbGwgYmUgdHJhbnNsYXRpbmcgeW91ciAKKyAgICAgICAgd29yayBpbnRvIG90aGVyIGxhbmd1YWdlcy4gVGhpcyBmaWVsZCBwcm92aWRlcyBhIHdheSBmb3IgeW91IHRvIGRlc2NyaWJlIAorICAgICAgICB0aGUgY29udGV4dCBvZiB0aGlzIHBhcnRpY3VsYXIgcmVzb3VyY2UuPC9QPgorICAgICAgPFA+VGhlcmUgYXJlIGEgZmV3IHdheXMgdG8gY3JlYXRlIHRoZSByZXNvdXJjZSBvbmNlIHRoZSBpbmZvcm1hdGlvbiBpcyBlbnRlcmVkLiAKKyAgICAgICAgUHJlc3NpbmcgJ0NyZWF0ZScgd2lsbCBhZGQgdGhlIHJlc291cmNlIGFuZCBjbG9zZSB0aGUgZGlhbG9nLiBJZiB5b3Ugd2lzaCAKKyAgICAgICAgdG8gY29udGludWUgY3JlYXRpbmcgcmVzb3VyY2VzIGFmdGVyIHRoZSBjdXJyZW50IG9uZSwgcHJlc3NpbmcgJ0NyZWF0ZSAKKyAgICAgICAgJmFtcDsgQ29udGludWUnIHdpbGwgY3JlYXRlIHRoZSByZXNvdXJjZSwgY2xlYXIgdGhlIGluZm9ybWF0aW9uIHlvdSBoYXZlIAorICAgICAgICBqdXN0IGVudGVyZWQsIGFuZCBhbGxvdyB5b3UgdG8gZW50ZXIgaW4gYSBuZXcgcmVzb3VyY2UuIFByZXNzaW5nICdDYW5jZWwnIAorICAgICAgICB3aWxsIGNsb3NlIHRoZSBkaWFsb2cgYm94IGFuZCBpZ25vcmUgYW55IGluZm9ybWF0aW9uIGN1cnJlbnRseSBlbnRlcmVkLiAKKyAgICAgICAgQXMgYSBzaG9ydCBjdXQsIHlvdSBjYW4gYWxzbyBoaXQgZW50ZXIgZnJvbSBhbnkgb2YgdGhlIHRleHQgYm94ZXMgYnV0IAorICAgICAgICAnVHJhbnNsYXRpb24nLiBUaGlzIHdpbGwgY3JlYXRlIHRoZSByZXNvdXJjZS4gUHJlc3NpbmcgZW50ZXIgZnJvbSB0aGUgCisgICAgICAgIHRyYW5zbGF0aW9uIHRleHQgYm94LCBjcmVhdGVzIGEgdHJhbnNsYXRpb24gdGhhdCBzcGFucyBtdWx0aXBsZSBsaW5lcyAKKyAgICAgICAgb2YgdGV4dC48L1A+CisgICAgICA8UD5BIHNhbXBsZSByZXNvdXJjZSBjcmVhdGlvbiBpcyBzaG93IGFzIGZvbGxvd3M6PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY19yZXNvdXJjZS5naWYiPjwvUD4KKyAgICAgIDxQPjxCPlVzaW5nICdMb29rLXVwcyc8L0I+PC9QPgorICAgICAgPFA+UmVzb3VyY2UgYnVuZGxlcyBwcm92aWRlIGEgd2F5IG9mIHRyYW5zbGF0aW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gCisgICAgICAgIGFzIHdlbGwuIEZvciBpbnN0YW5jZSwgd2hhdCBpZiBJIHdhbnRlZCBhIHRyYW5zbGF0aW9uIGFza2luZyB0aGUgdXNlciAKKyAgICAgICAgaG93IG9sZCB0aGV5IHdlcmUsIGFuZCBJIHdhbnRlZCB0byBhc2sgaXQgd2l0aCB0aGVpciBuYW1lIGluc2VydGVkIGludG8gCisgICAgICAgIHRoZSBxdWVzdGlvbi4gVGhlIHBsYWNlbWVudCBvZiB0aGVpciBuYW1lIG1pZ2h0IGJlIGRpZmZlcmVudCBpbiBkaWZmZXJlbnQgCisgICAgICAgIGxhbmd1YWdlcy4gVGhpcyBpcyB0aGUgcmVhc29uIGZvciAnbG9vay11cHMnLiBUaGUgamF2YS50ZXh0IHBhY2thZ2UgZGVmaW5lcyAKKyAgICAgICAgYSB3YXkgZm9yIGltcGxlbWVudGluZyB0aGVzZSBsb29rLXVwcyB1c2luZyBudW1iZXJzIHN1cnJvdW5kZWQgYnkgY3VybHkgCisgICAgICAgIGJyYWNlcy4gVGh1cywgSSBtaWdodCB3YW50IHRvIGNyZWF0ZSBhIHJlc291cmNlIGxpa2UgdGhlIG9uZSBiZWxvdzo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL2xvb2t1cF9yZXNvdXJjZS5naWYiPjwvUD4KKyAgICAgIDxQPk9uY2UgeW91IGVudGVyIGFueXRoaW5nIGludG8geW91ciB0cmFuc2xhdGlvbiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlcyAKKyAgICAgICAgYW5kIGNoYW5nZSB0aGUgZm9jdXMgYXdheSBmcm9tIHRoZSB0cmFuc2xhdGlvbiBmaWVsZCwgdGhlIGRpYWxvZyBib3ggd2lsbCAKKyAgICAgICAgdXBkYXRlIGl0c2VsZiB3aXRoIGFyZWFzIGZvciB5b3UgdG8gZW50ZXIgZGVzY3JpcHRpb25zIG9mIHRoZSBsb29rLXVwcyAKKyAgICAgICAgeW91IGhhdmUgZW50ZXJlZC4gVGhpcyBmZWF0dXJlIG9mIFJCTWFuYWdlciBhbGxvd3MgZnV0dXJlIHRyYW5zbGF0b3JzIAorICAgICAgICB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggbG9vay11cC48L1A+CisgICAgICA8UD48Qj5FZGl0aW5nIHRoZSBSZXNvdXJjZXM8L0I+PC9QPgorICAgICAgPFA+RnJvbSB0aGUgJ0dyb3VwcycgdGFiIHZpZXcsIHlvdSBjYW4gYXQgYW55IHRpbWUgZWRpdCB0aGUgZGVmYXVsdCB2YWx1ZXMgCisgICAgICAgIGZvciBhIHJlc291cmNlLiBBcyB5b3UgZW50ZXIgaW4gbmV3IHJlc291cmNlcyB0aGV5IHdpbGwgYXBwZWFyIGluIHRoZSAKKyAgICAgICAgZ3JvdXAgdmlldyBhcyBzaG93bjo8L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL2Jhc2ljX2dyb3VwLmdpZiIgV0lEVEg9Ijc1MCIgSEVJR0hUPSI0MzIiPjwvUD4KKyAgICAgIDxQPkRvdWJsZSBjbGlja2luZyBvbiBhIHJlc291cmNlIHdpbGwgYnJpbmcgYSBkaWFsb2cgYm94IHVwIHNpbWlsYXIgdG8gdGhlIAorICAgICAgICBvbmUgZm9yIGNyZWF0aW5nIGEgcmVzb3VyY2UuIFJlbWVtYmVyIHRoYXQgaXQgaXMgb25seSBmcm9tIHRoaXMgdmlldyB0aGF0IAorICAgICAgICB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcmVzb3VyY2UgaW4gYSB3YXkgdGhhdCB3aWxsIGVmZmVjdCB0aGUgCisgICAgICAgIGVudGlyZSBidW5kbGUuIFRodXMgaXQgaXMgb25seSBpbiB0aGlzIHZpZXcgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgcmVzb3VyY2UncyAKKyAgICAgICAgZ3JvdXAsIGtleSBuYW1lLCBhbmQgZGVmYXVsdCB0cmFuc2xhdGlvbiBhbmQgY29tbWVudC48L1A+CisgICAgICA8UD48QSBIUkVGPSJzdGVwMy5odG1sIj5CYWNrIHRvIFN0ZXAgMzwvQT4gLW9yLSA8QSBIUkVGPSJzdGVwNS5odG1sIj5Gb3J3YXJkIAorICAgICAgICB0byBTdGVwIDU8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3R1dG9yaWFsL3N0ZXA1Lmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDJlNGEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwNS5odG1sCkBAIC0wLDAgKzEsMTU4IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgVHV0b3JpYWwgLSBDcmVhdGluZyBSZXNvdXJjZSBGaWxlczwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdmlld3MvaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0ic3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5TdGVwIDUuIEFkZGluZyBSZXNvdXJjZSBGaWxlcyBmb3IgTmV3IExhbmd1YWdlczwvSDM+CisgICAgICA8UD48Qj5DcmVhdGluZyBhIE5ldyBMYW5ndWFnZSBGaWxlPC9CPjwvUD4KKyAgICAgIDxQPlRoZSBvbmx5IHdheSBieSB3aGljaCB0byBjcmVhdGUgYSBuZXcgbGFuZ3VhZ2UgZmlsZSBpcyBieSBzZWxlY3RpbmcgdGhlIAorICAgICAgICAnQWRkIE5ldyBSZXNvdXJjZSBGaWxlLi4uJyBvcHRpb24gZnJvbSB0aGUgJ09wdGlvbnMnIG1lbnUuIFdoZW4geW91IGRvIAorICAgICAgICBzbyBhIGRpYWxvZyBib3ggd2lsbCBhcHBlYXIgc2ltaWxhciB0byB0aGlzOjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfZmlsZS5naWYiIFdJRFRIPSI2MjAiIEhFSUdIVD0iNDIxIj48L1A+CisgICAgICA8UD5UaGUgdG9wIHRocmVlIGZpZWxkcyBpZGVudGlmeSB0aGUgZmlsZS4gVGhlIGJvdHRvbSB0aHJlZSBzZWN0aW9ucywgTGFuZ3VhZ2UsIAorICAgICAgICBDb3VudHJ5LCBhbmQgVmFyaWFudCBkZWZpbmUgdGhlIHJvbGUgb2YgdGhlIHJlc291cmNlIGZpbGUgd2l0aGluIHRoZSBidW5kbGUuIAorICAgICAgICBUaGUgb25seSByZXF1aXJlZCBmaWVsZCBpcyB0aGUgZW5jb2RpbmcgZmllbGQgZm9yIHRoZSBsYW5ndWFnZS4gVGhlIGVuY29kaW5nIAorICAgICAgICBmaWVsZHMgYXJlIGluc2VydGVkIGludG8gdGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIGZpbGUgd2hlbmV2ZXIgdGhlIGZpZWxkcyAKKyAgICAgICAgYXJlIGZpbGxlZC4gVGhlIGZpbGUgbmFtZSB3b3VsZCBmb2xsb3dpbmcgdGhlIHBhdHRlcm4gPENPREU+YmFzZWNsYXNzX2xhbmd1YWdlX2VuY29kaW5nX3ZhcmlhbnQucHJvcGVydGllczwvQ09ERT4uIAorICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGZpbGUgd291bGQgYmUgbmFtZWQ8Q09ERT4gUkJUdXRvcmlhbF9kZS5wcm9wZXJ0aWVzPC9DT0RFPi4gCisgICAgICAgIE5vdGUgdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gZGVmaW5lIGZhbGxiYWNrIGZpbGVzIGZvciBlYWNoIGxhbmd1YWdlIChpLmUuIAorICAgICAgICBpZiB5b3UgaGF2ZSBhIGZpbGUgZm9yIDxDT0RFPlJCVHV0b3JpYWxfZGVfREUucHJvcGVydGllczwvQ09ERT4sIHlvdSBzaG91bGQgCisgICAgICAgIGFsc28gaGF2ZSBhIGZpbGUgZm9yIDxDT0RFPlJCVHV0b3JpYWxfZGUucHJvcGVydGllczwvQ09ERT4pLjwvUD4KKyAgICAgIDxQPlNpbmNlIHRoZXJlIG1heSBiZSBpbnN0YW5jZXMgd2hlcmUgdGhlIGxhbmd1YWdlIGZpbGUgYmVpbmcgY3JlYXRlZCBtYXkgCisgICAgICAgIGhhdmUgZmV3IGRpZmZlcmVuY2VzIGZyb20gdGhlIGJhc2UgY2xhc3MgcHJvcGVydHkgZmlsZSwgYW4gb3B0aW9uIGlzIGdpdmVuIAorICAgICAgICBmb3IgY29weWluZyBvciBub3QgYWxsIG9mIHRoZSByZXNvdXJjZXMgZnJvbSB0aGUgYmFzZSBjbGFzcyBmaWxlIHRvIHRoZSAKKyAgICAgICAgbmV3IGZpbGUuIEJ5IGRlZmF1bHQsIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGFuZCBlYWNoIHJlc291cmNlIHdpbGwgYmUgCisgICAgICAgIGNvcGllZCBmcm9tIHRoZSBiYXNlIGZpbGUgYW5kIG1hcmtlZCBhcyB1bnRyYW5zbGF0ZWQgaW4gdGhlIG5ldyByZXNvdXJjZSAKKyAgICAgICAgZmlsZS48L1A+CisgICAgICA8UD48Qj5Xb3JraW5nIHdpdGggdGhlIE5ldyBMYW5ndWFnZSBGaWxlPC9CPjxCUj4KKyAgICAgIDwvUD4KKyAgICAgIDxQPk9uY2UgYSBsYW5ndWFnZSBmaWxlIGhhcyBiZWVuIGNyZWF0ZWQsIHRoZXJlIHdpbGwgYmUgcmVzb3VyY2VzIHRoYXQgbmVlZCAKKyAgICAgICAgdG8gYmUgdHJhbnNsYXRlZC4gVGhpcyBjYW4gYmUgZG9uZSBmcm9tIHR3byBkaWZmZXJlbnQgdmlld3MuIEZpcnN0LCBnbyAKKyAgICAgICAgdG8gdGhlIHRyZWUgb24gdGhlIGxvd2VyIGxlZnQgb2YgdGhlIHNjcmVlbiBhbmQgc2VsZWN0IHRoZSBmaWxlIHRoYXQgeW91IAorICAgICAgICBoYXZlIGp1c3QgY3JlYXRlZC4gSW4gdGhpcyBjYXNlIGl0IHdpbGwgYmUgdW5kZXIgdGhlIGxhbmd1YWdlIGVuY29kaW5nIAorICAgICAgICBkZSBub2RlIG9mIHRoZSB0cmVlLiBTZWxlY3QgdGhlIGZpbGUgYnkgY2xpY2tpbmcgb24gaXQgb25jZS4gU2VsZWN0aW5nIAorICAgICAgICB0aGUgJ1VudHJhbnNsYXRlZCcgdGFiIG9uIHRoZSByaWdodCBzaG91bGQgcmVzdWx0IGluIGEgdmlldyBzaW1pbGFyIHRvIAorICAgICAgICB0aGlzOjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvYmFzaWNfdW50cmFuc2xhdGVkLmdpZiIgV0lEVEg9Ijc1MCIgSEVJR0hUPSI0MTYiPiAKKyAgICAgIDwvUD4KKyAgICAgIDxQPlRoaXMgc2VjdGlvbiBkaXNwbGF5cyBhbGwgb2YgdGhlIHJlc291cmNlcyB0aGF0IGFyZSBtYXJrZWQgYXMgdW50cmFuc2xhdGVkIAorICAgICAgICBpbiB0aGUgZmlsZS4gQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHNlbGVjdCB0aGUgJ0dyb3VwcycgdGFiIGFuZCBzZWUgCisgICAgICAgIGFsbCBvZiB0aGUgcmVzb3VyY2VzLCBvbmUgZ3JvdXAgYXQgYSB0aW1lLCB3aGV0aGVyIG9yIG5vdCB0aGV5IGhhdmUgYmVlbiAKKyAgICAgICAgbWFya2VkIGFzIHRyYW5zbGF0ZWQuIERvdWJsZSBjbGlja2luZyBvbiBhIHJvdyBpbiB0aGUgdGhlIHRhYmxlcyBwcmVzZW50IAorICAgICAgICBpbiBlaXRoZXIgdmlldyB3aWxsIGJyaW5nIHVwIGEgZGlhbG9nIGJveCBzaW1pbGFyIHRvIG9uZSB5b3UgaGF2ZSBhbGwgCisgICAgICAgIHJlYWR5IHNlZW46PC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy9iYXNpY190cmFuc2xhdGlvbi5naWYiIFdJRFRIPSI1MTMiIEhFSUdIVD0iMjY5Ij48L1A+CisgICAgICA8UD5UaGUgdG9wIHRocmVlIGVkaXRhYmxlIGNvbXBvbmVudHMgYXJlIGFsbCBkaXNhYmxlZC4gVGhpcyBpcyBiZWNhdXNlIGNoYW5naW5nIAorICAgICAgICB0aGVtIHdvdWxkIHJlcXVpcmVkIGVkaXRpbmcgZmlsZXMgb3RoZXIgdGhhbiB0aGUgb25lIGN1cnJlbnRseSBiZWluZyB2aWV3ZWQuIAorICAgICAgICBUaGlzIHR5cGUgb2YgZWRpdGluZyBjYW4gYmUgYWNjb21wbGlzaGVkIG9ubHkgZnJvbSB0aGUgYmFzZSBjbGFzcy4gVG8gCisgICAgICAgIGNoYW5nZSB0aGUgdHJhbnNsYXRpb24gdmFsdWUsIGFsdGVyIHRoZSBmaWVsZCBsYWJlbGVkICdUcmFuc2xhdGlvbjonIHdpdGggCisgICAgICAgIHRoZSBuZXcgdHJhbnNsYXRpb24uIFlvdSBtYXkgYWxzbyBjaGFuZ2UgdGhlIHJlc291cmNlIGNvbW1lbnQgYW5kIGxvb2t1cCAKKyAgICAgICAgY29tbWVudHMgaWYgeW91IGxpa2UsIGJ1dCB0aGlzIGNoYW5nZSB3aWxsIGJlIHZpc2libGUgb25seSBmcm9tIFJCTWFuYWdlci4gCisgICAgICAgIFlvdSBhbHNvIG1heSBmaW5kIHRoYXQgdGhlIHJlc291cmNlIHJlcXVpcmVzIG5vIHRyYW5zbGF0aW9uIGlmIHRoaXMgaXMgCisgICAgICAgIHRoZSBjYXNlLCBqdXN0IHNlbGVjdCB0aGUgJ1RyYW5zbGF0ZWQnIGNoZWNrIGJveCBhdCB0aGUgYm90dG9tIG9mIHRoZSAKKyAgICAgICAgZGlhbG9nIGFuZCBwcmVzcyAnRWRpdCcuIElmIHlvdSBjaGFuZ2UgdGhlIHRyYW5zbGF0aW9uLCB0aGUgJ1RyYW5zbGF0ZWQnIAorICAgICAgICBjaGVjayBib3ggd2lsbCBhdXRvbWF0aWNhbGx5IGNoZWNrIGl0c2VsZiB3aGVuIHlvdSBhcmUgZmluaXNoZWQuPC9QPgorICAgICAgPFA+Q29udGludWUgdGhpcyBwcm9jZXNzIHVudGlsIHlvdSBoYXZlIGNvbXBsZXRlbHkgdHJhbnNsYXRlZCB0aGlzIGZpbGUsIAorICAgICAgICBvciBsZWF2ZSB0aGUgZmlsZSB1bnRyYW5zbGF0ZWQsIGJ1dCBzYXZlIHlvdXIgd29yayBzbyB0aGF0IHlvdSBvciBzb21lb25lIAorICAgICAgICBlbHNlIGNhbiByZXR1cm4gdG8gaXQgbGF0ZXIuIFRvIGxlYXJuIGhvdyB0byBzYXZlIHlvdXIgcmVzdWx0cywgZ28gdG8gCisgICAgICAgIHRoZSBuZXh0IHN0ZXAuPC9QPgorICAgICAgPFA+PEEgSFJFRj0ic3RlcDQuaHRtbCI+QmFjayB0byBTdGVwIDQ8L0E+IC1vci0gPEEgSFJFRj0ic3RlcDYuaHRtbCI+Rm9yd2FyZCAKKyAgICAgICAgdG8gU3RlcCA2PC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy90dXRvcmlhbC9zdGVwNi5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTI1ODBmCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3MvdHV0b3JpYWwvc3RlcDYuaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIFR1dG9yaWFsIC0gU2F2aW5nPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iLi4vaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2luZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi92aWV3cy9pbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSJzdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+CisgICAgICA8SDIgQUxJR049IkNFTlRFUiI+U3RlcCA2LiBTYXZpbmcgdGhlIFJlc3VsdHM8L0gyPgorICAgICAgPFA+PEI+QWx3YXlzIFNhdmUgUGVyaW9kaWNhbGx5PC9CPjwvUD4KKyAgICAgIDxQPk5vbmUgb2YgdGhlIHdvcmsgeW91IGRvIGluIG1hbmFnaW5nIHRoZSByZXNvdXJjZSBidW5kbGUgaXMgZmluYWwgdW50aWwgCisgICAgICAgIHlvdSBoYXZlIHNhdmVkIHRoZSByZXN1bHRzLiBUaGUgZmlyc3QgdGltZSB5b3Ugc2F2ZSB0aGUgcmVzb3VyY2UgYnVuZGxlLCAKKyAgICAgICAgeW91IHNob3VsZCBzZWxlY3QgdGhlICdTYXZlIFJlc291cmNlIEJ1bmRsZSBBcy4uLicgb3B0aW9uIGZyb20gdGhlIGZpbGUgCisgICAgICAgIG1lbnUuIFNlbGVjdCBhIGZvbGRlciBpbiB3aGljaCB0byBzYXZlIHRoZSBmaWxlIGFuZCBlbnRlciBpbiB0aGUgYmFzZSAKKyAgICAgICAgY2xhc3MgbmFtZSBvciB0aGUgYmFzZSBjbGFzcyBuYW1lIGZvbGxvd2VkIGJ5IHRoZSAucHJvcGVydGllcyBzdWZmaXggYW5kIAorICAgICAgICBwcmVzcyBzYXZlLjwvUD4KKyAgICAgIDxQPk9uY2UgdGhpcyBoYXMgYmVlbiBkb25lLCBpdCBpcyBzdWZmaWNpZW50IHRvIGNob3NlIHRoZSAnU2F2ZSBSZXNvdXJjZSAKKyAgICAgICAgQnVuZGxlJyBvcHRpb24gZnJvbSB0aGUgZmlsZSBtZW51LiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHZlcnNpb25pbmcgCisgICAgICAgIHRvb2wgc3VjaCBhcyBNaWNyb3NvZnQncyBWaXN1YWwgU291cmNlIFNhZmUsIGV0Yy4sIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSAKKyAgICAgICAgd3JpdGUgcHJpdmVsZWdlcyB0byB0aGUgZW50aXJlIGJ1bmRsZSBvZiBmaWxlcy4gT3RoZXJ3aXNlLCB5b3Ugd2lsbCByZWNpZXZlIAorICAgICAgICB3YXJuaW5nIGZyb20gUkJNYW5hZ2VyIHRoYXQgaXQgd2FzIHVuYWJsZSB0byB3cml0ZSB0byBhbGwgb2YgdGhlIGZpbGVzLjwvUD4KKyAgICAgIDxQPkEgd2F5IHRvIGdldCBhcm91bmQgdGhpcyBpcyB0byBzYXZlIHRoZSByZXNvdXJjZSBmaWxlcyBpbmRpdmlkdWFsbHkuIAorICAgICAgICBJbiBvcmRlciB0byBkbyB0aGlzLCByaWdodCBjbGljayBvbiBhIHJlc291cmNlIGZpbGUgaW4gdGhlIHRyZWUgdmlldyBhbmQgCisgICAgICAgIHNlbGVjdCB0aGUgJ1NhdmUgUmVzb3VyY2UgRmlsZScgb3B0aW9uLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpZiB5b3UgCisgICAgICAgIGhhdmUgbWFkZSBjaGFuZ2VzIHRvIHRoZSBlbnRpcmUgcmVzb3VyY2UgYnVuZGxlLCBidXQgaWYgeW91IGhhdmUgb25seSAKKyAgICAgICAgYmVlbiBkb2luZyB0cmFuc2xhdGlvbiB3b3JrIGZvciBhIHBhcnRpY3VsYXIgZmlsZSwgb3IgYSBmZXcgZmlsZXMsIHNhdmluZyAKKyAgICAgICAgaW4gdGhpcyBtYW5uZXIgY2FuIGJlIHVzZWZ1bC48L1A+CisgICAgICA8UD5JZiB5b3UgZXZlciB3YW50IHRvIGNoYW5nZSB0aGUgbG9jYXRpb24gb3IgYmFzZSBjbGFzcyBuYW1lIG9mIHRoZSByZXNvdXJjZSAKKyAgICAgICAgYnVuZGxlLCB5b3UgbWF5IGRvIHNvIGJ5IHJlc2F2aW5nIHdpdGggdGhlICdTYXZlIFJlc291cmNlIEJ1bmRsZSBBcy4uLicgCisgICAgICAgIG9wdGlvbi48L1A+CisgICAgICA8UD48Qj5Hb29kIEx1Y2s8L0I+PC9QPgorICAgICAgPFA+WW91IHdpbGwgZmluZCB0aGF0IHVzaW5nIHRoaXMgdG9vbCB3aWxsIHNwZWVkIHVwIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIAorICAgICAgICBmb3IgeW91ciBpbnRlcm5hdGlvbmFsIGFwcGxpY2F0aW9uIG9yIHdlYiBzZXJ2aWNlLiBBcyB0aGlzIGlzIG9ubHkgYW4gCisgICAgICAgIGFscGhhIHZlcnNpb24gcmVsZWFzZSwgYmUgc3VyZSB0byBjaGVjayBhbHBoYXdvcmtzIGZyZXF1ZW50bHkgZm9yIHVwZGF0ZXMgCisgICAgICAgIGluIGZ1bmN0aW9uYWxpdHkgYW5kIGJ1ZyBmaXhlcy48L1A+CisgICAgICA8UD48QSBIUkVGPSJzdGVwNS5odG1sIj5CYWNrIHRvIFN0ZXAgNTwvQT48L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvaW5kZXguaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhZjhhNgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNTUgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciAtIEZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9USVRMRT4KKzwhLS0gI0VuZEVkaXRhYmxlIC0tPiAKKzxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPFNUWUxFIFRZUEU9IlRFWFQvQ1NTIj4KKzwhLS0KKy50b3BpY0hlYWQgeyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogMTRwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMzMzMzMzN9CisudG9waWNMaXN0IHsgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICNGRjAwOTk7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGlhbW9uZF9idWxsZXQuZ2lmKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZH0KKy5tYWluQmxvY2sgeyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgbWFyZ2luLXRvcDogNXB4OyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogNXB4OyBwYWRkaW5nLXRvcDogNXB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogNXB4OyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHRleHQtYWxpZ246IGp1c3RpZnl9CistLT4KKzwvU1RZTEU+Cis8L0hFQUQ+CisKKzxCT0RZIEJHQ09MT1I9IiNGRkZGRkYiIExFRlRNQVJHSU49IjAiIFRPUE1BUkdJTj0iMCIgTUFSR0lOV0lEVEg9IjAiIE1BUkdJTkhFSUdIVD0iMCI+Cis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIwIj4KKyAgPFRSPgorICAgIDxURCBST1dTUEFOPSIyIiBDT0xTUEFOPSIyIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdWwuZ2lmIiBIRUlHSFQ9Ijc1Ij48SU1HIFNSQz0iLi4vaW1hZ2VzL3NwYWNlci5naWYiIFdJRFRIPSIyODAiIEhFSUdIVD0iMSIgSFNQQUNFPSIwIj48L1REPgorCQk8VEQgSEVJR0hUPSIxNSIgIFdJRFRIPSIxMDAlIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfdS5naWYiPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBIRUlHSFQ9IjYwIiA+CisJCQk8Q0VOVEVSPjxJTUcgU1JDPSIuLi9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiIgVlNQQUNFPSIwIj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorCTxUUj4KKwkJCisgICAgPFREIFdJRFRIPSIyMDAiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sLmdpZiIgVkFMSUdOPSJ0b3AiPgorCQk8VEFCTEUgV0lEVEg9IjE4MCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIxIj4gCisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPkdlbmVyYWw8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3N5c3RlbV9yZXF1aXJlbWVudHMuaHRtbCI+U3lzdGVtIFJlcXVpcmVtZW50czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZmFxLmh0bWwiPkZBUTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPkZ1dHVyZSBSZWxlYXNlczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vZnV0dXJlX2ZlYXR1cmVzLmh0bWwiPlZlcnNpb24gCisgICAgICAgICAgICAgICAgSGlzdG9yeTwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisgICAgICAJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIE1hbmFnZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgICAgICAgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2luZGV4Lmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSJpbmRleC5odG1sIj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbG9va2FuZGZlZWwuaHRtbCI+TG9vayBhbmQgRmVlbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vbWVudS5odG1sIj5NZW51IEl0ZW1zPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi90dXRvcmlhbC9zdGVwMS5odG1sIj5QcmVmZXJlbmNlczwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBSZXBvcnRlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vUkJSZXBvcnRlci5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgIDxMST5SZXBvcnQgVHlwZXM8L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc2NhbmZpbGUuaHRtbCI+Q29kZSBTY2FubmluZzwvQT48L0xJPgorICAgICAgICAgICAgPC9VTD4KKwkJCTwvVEQ+CisJCTwvVFI+CisJPC9UQUJMRT4KKworICAgICAgPFA+Jm5ic3A7IDwvUD4KKyAgICAgIDwvVEQ+CisJCQorICAgIDxURCBDT0xTUEFOPSIyIiBWQUxJR049InRvcCIgQ0xBU1M9Im1haW5CbG9jayI+PCEtLSAjQmVnaW5FZGl0YWJsZSAiTWFpbiIgLS0+IAorICAgICAgPERJViBBTElHTj0iQ0VOVEVSIj4gCisgICAgICAgIDxIMj5GdW5jdGlvbmFsaXR5IGFuZCBWaWV3czwvSDI+CisgICAgICAgIDxQIEFMSUdOPSJDRU5URVIiPlJCIE1hbmFnZXIgb2ZmZXJzIGZpdmUgZGlmZmVyZW50IHdheXMgdG8gbG9vayBhdCBhbmQgCisgICAgICAgICAgbWFuaXB1bGF0ZSByZXNvdXJjZSBidW5kbGVzLiBGb3VyIG9mIHRoZXNlIHZpZXdzIGFyZSBmb3VuZCBpbiB0aGUgdGFicyAKKyAgICAgICAgICBsb2NhdGVkIGluIHRoZSByaWdodCBwb3J0aW9uIG9mIHRoZSBkaXNwbGF5LiBUaGUgZmlmdGggaXMgdGhlIHRyZWUgdmlldyAKKyAgICAgICAgICBsb2NhdGVkIHRvIHRoZSBsZWZ0LiBJbiB0aGUgZm9sbG93aW5nIHBhZ2VzLCB0aGUgdXNlIG9mIGVhY2ggb2YgdGhlc2UgCisgICAgICAgICAgdmlld3MgaXMgZXhwbGFpbmVkLjwvUD4KKyAgICAgICAgPEgzIEFMSUdOPSJMRUZUIj4gCisgICAgICAgICAgPFVMPgorICAgICAgICAgICAgPExJPiAKKyAgICAgICAgICAgICAgPEg0PlZpZXcgMS4gPEEgSFJFRj0idmlldzEuaHRtbCI+VGhlIFJlc291cmNlIEJ1bmRsZSBUcmVlPC9BPjwvSDQ+CisgICAgICAgICAgICA8L0xJPgorICAgICAgICAgICAgPExJPiAKKyAgICAgICAgICAgICAgPEg0PlZpZXcgMi4gPEEgSFJFRj0idmlldzIuaHRtbCI+VGhlIFN0YXRpc3RpY3MgVGFiPC9BPjwvSDQ+CisgICAgICAgICAgICA8L0xJPgorICAgICAgICAgICAgPExJPiAKKyAgICAgICAgICAgICAgPEg0PlZpZXcgMy4gPEEgSFJFRj0idmlldzMuaHRtbCI+VGhlIFVudHJhbnNsYXRlZCBUYWI8L0E+PC9IND4KKyAgICAgICAgICAgIDwvTEk+CisgICAgICAgICAgICA8TEk+IAorICAgICAgICAgICAgICA8SDQ+VmlldyA0LiA8QSBIUkVGPSJ2aWV3NC5odG1sIj5UaGUgR3JvdXBzIFRhYjwvQT48L0g0PgorICAgICAgICAgICAgPC9MST4KKyAgICAgICAgICAgIDxMST4gCisgICAgICAgICAgICAgIDxIND5WaWV3IDUuIDxBIEhSRUY9InZpZXc1Lmh0bWwiPlRoZSBTZWFyY2ggVGFiPC9BPjwvSDQ+CisgICAgICAgICAgICA8L0xJPgorICAgICAgICAgIDwvVUw+CisgICAgICAgIDwvSDM+CisgICAgICAgIDxIND48QSBIUkVGPSJ2aWV3MS5odG1sIj5HbyB0byBWaWV3IDE8L0E+PC9IND4KKyAgICAgIDwvRElWPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+Cis8IS0tCis8VEFCTEUgV0lEVEg9IjEwMCUiIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiIENFTExQQURESU5HPSIyIj4KKyAgPFRSPgorICAgIDxURCBXSURUSD0iMjAwIiBCR0NPTE9SPSIjQ0NDQ0ZGIj4mbmJzcDs8L1REPgorICAgIDxURD4KKyAgICAgIDxESVYgQUxJR049IkNFTlRFUiI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBXSURUSD0iMTc1IiBIRUlHSFQ9IjUwIj48L0RJVj4KKyAgICA8L1REPgorICA8L1RSPgorICA8VFIgVkFMSUdOPSJUT1AiPiAKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkdDT0xPUj0iI0NDQ0NGRiI+IAorICAgICAgPFA+PEEgSFJFRj0iaW5kZXguaHRtbCI+UkJNYW5hZ2VyPC9BPjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9IlJCUmVwb3J0ZXIuaHRtbCI+UkJSZXBvcnRlcjwvQT48L1A+CisgICAgICA8UD48QSBIUkVGPSIuLi90dXRvcmlhbC9zdGVwMS5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvUD4KKyAgICAgIDxQPjxBIEhSRUY9ImZhcS5odG1sIj5GQVE8L0E+PC9QPgorICAgICAgPFA+VG9waWNzPC9QPgorICAgICAgPFVMPgorICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+U3RlcC1ieS1zdGVwIFR1dG9yaWFsPC9BPjwvTEk+CisgICAgICAgIDxMST48QSBIUkVGPSJzdGVwMS5odG1sIj5DaGFuZ2luZyBQcmVmZW5jZXM8L0E+PC9MST4KKyAgICAgICAgPExJPjxBIEhSRUY9ImZ1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZSBGZWF0dXJlczwvQT48L0xJPgorICAgICAgPC9VTD4KKyAgICA8L1REPgorICAgIDxURD48L1REPgorICA8L1RSPgorPC9UQUJMRT4KKy0tPgorPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzEuaHRtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXcxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1ZDk1NwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXcxLmh0bWwKQEAgLTAsMCArMSwxNTAgQEAKKzxIVE1MPjwhLS0gI0JlZ2luVGVtcGxhdGUgIi9UZW1wbGF0ZXMvTWFpblRlbXBsYXRlLmR3dCIgLS0+Cis8SEVBRD4KKzwhLS0gI0JlZ2luRWRpdGFibGUgImRvY3RpdGxlIiAtLT4gCis8VElUTEU+UkIgTWFuYWdlciAtIFRoZSBSZXNvdXJjZSBCdW5kbGUgVHJlZTwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vdHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5WaWV3IDEuIFRoZSBSZXNvdXJjZSBCdW5kbGUgVHJlZTwvSDM+CisgICAgICA8UD5Mb2NhdGVkIG9uIHRoZSBsZWZ0IG9mIHRoZSBSQiBNYW5hZ2VyIGFwcGxpY2F0aW9uIGlzIGEgc2VjdGlvbiBmb3IgZGlzcGxheWluZyAKKyAgICAgICAgYSByZXNvdXJjZSBidW5kbGUgaW4gYSB0cmVlIHZpZXcuIFJlc291cmNlIEJ1bmRsZXMgdXN1YWxseSBhcmUgbWFkZSB1cCAKKyAgICAgICAgb2YgdGV4dCBvciBjbGFzcyBmaWxlcyBpbiBhIGZsYXQgZGlyZWN0b3J5IHN0cnVjdHVyZS4gSG93ZXZlciwgdGhlIGxvY2FsZSAKKyAgICAgICAgZW5jb2RpbmdzIGdpdmVuIHRvIGVhY2ggZmlsZSBtYWtlcyBhIHRyZWUgdmlldyBhIG5hdHVyYWwgd2F5IHRvIGxvb2sgYXQgCisgICAgICAgIHRoZSBidW5kbGUuPC9QPgorICAgICAgPFA+V2hlbiBSQiBNYW5hZ2VyIGlzIGluaXRpYWxseSBsYXVuY2hlZCwgdGhpcyB2aWV3IGlzIGVtcHR5LCBzaW5jZSB0aGVyZSAKKyAgICAgICAgaXMgbm8gb3BlbiByZXNvdXJjZSBidW5kbGUuIFVwb24gb3BlbmluZyBhIHZhbGlkIHJlc291cmNlIGJ1bmRsZSwgdGhlIAorICAgICAgICB0cmVlIGlzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgb3BlbmVkIGJ1bmRsZS4gSW4gdGhlIGZvbGxvd2luZyBzY3JlZW4gCisgICAgICAgIHNob3RzLCB5b3Ugd2lsbCBzZWUgdGhlIHRyZWUgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUgYXNzb2NpYXRlIHdpdGggUkIgCisgICAgICAgIE1hbmFnZXIgaXRzZWxmLjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld190cmVlX2Jhc2ljLmdpZiIgV0lEVEg9IjY0MiIgSEVJR0hUPSI0OTkiPjwvUD4KKyAgICAgIDxQPlRoZSB0b3AgbW9zdCBlbGVtZW50IG9mIHRoZSB0cmVlICh0aGUgcm9vdCBvZiB0aGUgdHJlZSkgcmVwcmVzZW50cyB0aGUgCisgICAgICAgIHJlc291cmNlIGJ1bmRsZSBhcyBhIHdob2xlLiBCZWxvdyB0aGUgcm9vdCBhcmUgcmVzb3VyY2UgZmlsZXMsIHdoaWNoIGFyZSAKKyAgICAgICAgcmVwcmVzZW50ZWQgd2l0aCB0aGUgZmlsZSBpY29ucyB3aXRoIGEgbGV0dGVyIGluIHRoZSBtaWRkbGUsIGFuZCBsYW5ndWFnZSwgCisgICAgICAgIGNvdW50cnksIGFuZCB2YXJpYW50IGJyYW5jaGVzLiBMYW5ndWFnZSBicmFuY2hlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYW4gCisgICAgICAgIGljb24gd2l0aCBhIGdsb2JlLiBCZW5lYXRoIHRoZXNlIGNhbiBiZSBsYW5ndWFnZSBicmFuY2hlcyByZXByZXNlbnRlZCAKKyAgICAgICAgYnkgYW4gaWNvbiB3aXRoIGEgZmxhZy4gQmVuZWF0aCB0aGVzZSBjYW4gYmUgdmFyaWFudCBicmFuY2hlcyByZXByZXNlbnRlZCAKKyAgICAgICAgYnkgYW4gaWNvbiB3aXRoIGEgY2FydG9vbiBkaWFsb2cgc3ltYm9sLiBCZW5lYXRoIGFueSBvZiB0aGUgYnJhbmNoIG5vZGVzLCAKKyAgICAgICAgcmVzb3VyY2UgZmlsZXMgY2FuIGJlIGZvdW5kLjwvUD4KKyAgICAgIDxQPlRoZSBuYW1lIG9mIHRoZSByb290IG9mIHRoZSB0cmVlIGlzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIHJlc291cmNlIGJ1bmRsZSwgCisgICAgICAgIGluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgYnVuZGxlIGlzIGNhbGxlZCBSQk1hbmFnZXIuIFRoZSBuYW1lIG9mIHRoZSAKKyAgICAgICAgZmlsZSBub2RlcyBpbiB0aGUgdHJlZSB3aWxsIHZhcnkgYWNjb3JkaW5nIHRvIHdoZXJlIGluIHRoZSB0cmVlIHRoZXkgYXJlLiAKKyAgICAgICAgRWFjaCBsYW5ndWFnZSBmaWxlIHdpbGwgZGlzcGxheSB0aGUgbGFuZ3VhZ2UsIGNvdW50cnksIGFuZCB2YXJpYW50IGluZm9ybWF0aW9uIAorICAgICAgICB0aGF0IGl0IGtub3dzIGFib3V0IGZvbGxvd2VkIGJ5IHRoZSBlbmNvZGluZyBvZiB0aGUgZmlsZSdzIGxvY2FsZSBpbiBwYXJlbnRoZXNpZXMuIAorICAgICAgICBUaGUgYnJhbmNoIG5vZGVzIHdpbGwgaW5kaWNhdGUgd2hldGhlciB0aGV5IGFyZSBsYW5ndWFnZSwgY291bnRyeSwgb3IgCisgICAgICAgIHZhcmlhbnQgYnJhbmNoZXMsIGFuZCB3aWxsIGRpc3BsYXkgdGhlIGVuY29kaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGJyYW5jaC48L1A+CisgICAgICA8UD5SQiBNYW5hZ2VyIGZ1bmN0aW9ucyBpbiB0d28gYmFzaWMgd2F5cyBmb3IgZXZlcnl0aGluZyBpdCBkb2VzLCBlaXRoZXIgCisgICAgICAgIGZvciB0aGUgcmVzb3VyY2UgYnVuZGxlIGFzIGEgd2hvbGUgb3IgZm9yIGFuIGluZGl2aWR1YWwgcmVzb3VyY2UgZmlsZS4gCisgICAgICAgIFRvIG1ha2UgY2hhbmdlcyBhbmQgdXBkYXRlcyB0byB0aGUgZW50aXJlIHJlc291cmNlIGJ1bmRsZSwgc2VsZWN0IHRoZSAKKyAgICAgICAgcm9vdCBub2RlIG5vdGF0ZWQgYnkgdGhlICdSQicgaWNvbiBhdCB0aGUgdG9wIG9mIHRoZSB0cmVlLiBUaGlzIHdpbGwgYWxzbyAKKyAgICAgICAgY2F1c2UgdGhlIHN0YXRpc3RpY3MgYW5kIHNlYXJjaCB2aWV3cyB0byBwcmVzZW50IHJlc3VsdHMgcmVmbGVjdGluZyB0aGUgCisgICAgICAgIHN0YXR1cyBvZiB0aGUgZW50aXJlIGJ1bmRsZS4gVG8gd29yayB3aXRoIGFuIGluZGl2aWR1YWwgcmVzb3VyY2UgZmlsZSwgCisgICAgICAgIHNlbGVjdCBhIGZpbGUgZnJvbSB0aGUgdHJlZSBieSBjbGlja2luZyBvbiBpdC4gTm93IGNoYW5nZXMgYW5kIHZpZXdzIHdpbGwgCisgICAgICAgIHJlZmxlY3Qgb25seSB0aGlzIHNlbGVjdGVkIHJlc291cmNlIGZpbGUuPC9QPgorICAgICAgPFA+Tm90ZSB0aGF0IHNlbGVjdGluZyB0aGUgdmFyaW91cyBicmFuY2ggbm9kZXMgZG9lcyBub3QgaGF2ZSBhbnkgbWVhbmluZyAKKyAgICAgICAgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSQk1hbmFnZXIuIEluIGZ1dHVyZSB2ZXJzaW9ucyB0aGUgYWJpbGl0eSB0byAKKyAgICAgICAgd29yayBvbiBzdWJ0cmVlcyBtYXkgYmUgYWRkZWQsIGJ1dCBmb3Igbm93IGVpdGhlciBzZWxlY3QgdGhlIHJlc291cmNlIAorICAgICAgICBidW5kbGUgb3IgYW4gaW5kaXZpZHVhbCBmaWxlLjwvUD4KKyAgICAgIDxQPlVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3b3JraW5nIHdpdGggdGhlIHJlc291cmNlIGJ1bmRsZSAKKyAgICAgICAgYW5kIHdvcmtpbmcgd2l0aCBhIHJlc291cmNlIGZpbGUgaXMgY3J1Y2lhbCB0byB1c2luZyBSQiBNYW5hZ2VyLiBOb3JtYWxseSAKKyAgICAgICAgZGV2ZWxvcGVycyBhZGRpbmcgcmVzb3VyY2VzIG9yIG1hbmFnZXIgd2lzaGluZyB0byBrbm93IHRoZSBzdGF0dXRzIG9mIAorICAgICAgICB0cmFuc2xhdGlvbiBlZmZvcnRzIHdpbGwgd29yayBmcm9tIHRoZSByb290IGxldmVsLiBUcmFuc2xhdG9ycyBhbmQgbWFuYWdlcnMgCisgICAgICAgIG9mIGluZGl2aWR1YWwgcmVzb3VyY2UgZmlsZXMgd2lsbCBtb3JlIG9mdGVuIHdvcmsgZnJvbSB0aGUgcmVzb3VyY2UgZmlsZSAKKyAgICAgICAgbGV2ZWwuIE9uY2UgdGhlIGRpZmZlcmVuY2UgaXMgdW5kZXJzdG9vZCwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHZpZXdzIAorICAgICAgICBpbiB0aGUgdGFiIHdpbGwgYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQuPC9QPgorICAgICAgPFAgQUxJR049IkNFTlRFUiI+PEEgSFJFRj0idmlldzIuaHRtbCI+VmlldyAyLiBUaGUgU3RhdGlzdGljcyBUYWI8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXcyLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3Mi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDljNDkKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3Mi5odG1sCkBAIC0wLDAgKzEsMTYxIEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgLSBUaGUgU3RhdGlzdGljcyBUYWI8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+VmlldyAyLiBUaGUgU3RhdGlzdGljcyBUYWI8L0gzPgorICAgICAgPFA+VGhlIGZpcnN0IHRhYiBvbiB0aGUgcmlnaHQgcGFuZWwgb2YgdGhlIFJCIE1hbmFnZXIgYXBwbGljYXRpb24gaXMgdGhlIAorICAgICAgICBTdGF0aXN0aWNzIHRhYi4gQXMgd2l0aCBhbGwgb2YgdGhlIHRhYiB2aWV3cywgdGhlIHN0YXRpc3RpY3MgdGFiIGxvb2tzIAorICAgICAgICBhbmQgZnVuY3Rpb25zIGRpZmZlcmVudGx5IHdoZW4gd29ya2luZyB3aXRoIHRoZSByZXNvdXJjZSBidW5kbGUgYXMgYSB3aG9sZSAKKyAgICAgICAgdGhhbiB3aGVuIHdvcmtpbmcgd2l0aCBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuIEZvciBhbiBvdmVydmlldyBvZiAKKyAgICAgICAgdGhpcyBkaWZmZXJlbmNlIHNlZSA8QSBIUkVGPSJ2aWV3MS5odG1sIj5WaWV3IDE8L0E+LjwvUD4KKyAgICAgIDxQPjxCPldvcmtpbmcgd2l0aCBhIFJlc291cmNlIEJ1bmRsZTwvQj48L1A+CisgICAgICA8UD5UaGUgc2NyZWVuIHNob3QgYmVsb3cgc2hvd3MgUkIgTWFuYWdlciBhbmQgc29tZSBzdGF0aXN0aWNzIGNvbmNlcm5pbmcgCisgICAgICAgIHRoZSByZXNvdXJjZSBidW5kbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbi48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc3RhdHNfYnVuZGxlLmdpZiIgV0lEVEg9IjY0MiIgSEVJR0hUPSI1NDMiPjwvUD4KKyAgICAgIDxQPlRocmVlIGJhc2ljIGFyZWFzIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgdmlldywgUmVzb3VyY2UgRmlsZXMsIFJlc291cmNlIAorICAgICAgICBHcm91cHMsIGFuZCBSZXNvdXJjZSBJdGVtcy48L1A+CisgICAgICA8UD5JbiB0aGUgUmVzb3VyY2UgRmlsZXMgc2VjdGlvbiwgdGhlIHRvdGFsIG51bWJlciBvZiBpbmRpdmlkdWFsIGZpbGVzIGlzIAorICAgICAgICBzaG93biBhcyB3ZWxsIGFzIHRoZSBuYW1lcyBvZiB0aGVzZSBmaWxlcyAobWFkZSB1cCBvZiB0aGUgbGFuZ3VhZ2UsIGNvdW50cnksIAorICAgICAgICBhbmQgdmFyaWFudCBpbmZvcm1hdGlvbiBrbm93biBhYm91dCB0aGUgZmlsZXMpLiBOZXcgcmVzb3VyY2UgZmlsZXMgY2FuIAorICAgICAgICBiZSBhZGRlZCB0byB0aGUgYnVuZGxlIGJ5IHByZXNzaW5nIHRoZSAnQWRkIGEgTmV3IFJlc291cmNlIEZpbGUnIGJ1dHRvbiAKKyAgICAgICAgb3IgdXNpbmcgdGhlIGFjY2VsZXJhdG9yIGtleSAoaW4gdGhpcyBjYXNlICdOJykgaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgCisgICAgICAgIGJ5IHlvdXIgb3BlcmF0aW5nIHN5c3RlbS4gTmV3IGZpbGVzIGNhbiBhbHNvIGJlIGFkZGVkIHRocm91Z2ggdGhlIE9wdGlvbnMgCisgICAgICAgIG1lbnUuPC9QPgorICAgICAgPFA+SW4gdGhlIFJlc291cmNlIEdyb3VwcyBzZWN0aW9uLCB0aGUgdG90YWwgbnVtYmVyIG9mIGdyb3VwcyBhc3NvY2lhdGVkIAorICAgICAgICB3aXRoIHRoZSBidW5kbGUgYXMgd2VsbCBhcyBhbiBhbHBoYWJldGljYWwgbGlzdCBvZiB0aGUgZ3JvdXBzIGlzIGRpc3BsYXllZC4gCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFJlc291cmNlIEdyb3Vwcywgc2VlIHRoZSA8QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT4uIAorICAgICAgICBOZXcgZ3JvdXBzIGNhbiBiZSBjcmVhdGVkIGJ5IHByZXNzaW5nIHRoZSAnQWRkIGEgTmV3IFJlc291cmVjZSBHcm91cCcgCisgICAgICAgIGJ1dHRvbi4gVGhpcyBjYW4gYWxzbyBiZSBkb25lIGZyb20gdGhlIE9wdGlvbnMgbWVudSBvciB0aGUgR3JvdXBzIHRhYiAKKyAgICAgICAgdmlldy48L1A+CisgICAgICA8UD5JbiB0aGUgUmVzb3VyY2UgSXRlbXMgdmlldywgdGhlIHRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIGJ1bmRsZSAKKyAgICAgICAgaXMgZGlzcGxheWVkLiBUaGlzIG51bWJlciByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBiYXNlIAorICAgICAgICBjbGFzcyBmaWxlLCBhcyB0aGUgb3RoZXIgcmVzb3VyY2UgZmlsZXMgYXJlIG5vdCByZXF1aXJlZCB0byBwb3NzZXMgYWxsIAorICAgICAgICBvZiB0aGUgcmVzb3VyY2UgaXRlbXMuIEluIGFkZGl0aW9uLCB0aGUgbnVtYmVyIG9mIGR1cGxpY2F0ZWQgcmVzb3VyY2UgCisgICAgICAgIGtleXMgaXMgZGlzcGxheWVkLiBUaGlzIG51bWJlciBzaG91bGQgYmUgemVybyBvciB0aGUgcmVzb3VyY2UgYnVuZGxlIG1heSAKKyAgICAgICAgbm90IGZ1bmN0aW9uIHRoZSB3YXkgaXQgd2FzIGludGVuZGVkIHRvLiBUaGUgbGlzdCBib3ggd2lsbCBkaXNwbGF5IHRoZSAKKyAgICAgICAgbmFtZXMgb2YgdGhlIGR1cGxpY2F0ZWQga2V5cywgc28gdGhhdCB0aGUgZXJyb3JzIGNhbiBiZSByZW1vdmVkLiBOb3RlIAorICAgICAgICB0aGF0IGlmIHlvdSBjcmVhdGUgeW91ciBSZXNvdXJjZSBCdW5kbGVzIHRocm91Z2ggUkIgTWFuYWdlciwgeW91IHNob3VsZCAKKyAgICAgICAgbmV2ZXIgaGF2ZSBkdXBsaWNhdGUga2V5cy4gSG93ZXZlciwgaWYgeW91IGltcG9ydGVkIHRoZSBidW5kbGVzIGZyb20gYW5vdGhlciAKKyAgICAgICAgc291cmNlLCB0aGlzIGVycm9yIGNhbiBiZSBhIGNvbW1vbiBvbmUuPC9QPgorICAgICAgPFA+PEI+V29ya2luZyB3aXRoIGEgUmVzb3VyY2UgRmlsZTwvQj48L1A+CisgICAgICA8UD5UaGUgc2NyZWVuIHNob3QgYmVsb3cgc2hvd3MgdGhlIHN0YXRpc3RpY3MgdmlldyBmb3IgYW4gaW5kaXZpZHVhbCByZXNvdXJjZSAKKyAgICAgICAgZmlsZSwgaW4gdGhpcyBjYXNlIHRoZSBHZXJtYW4gKERldXRzY2gpIGZpbGUuIEZvciBvdXIgZXhhbXBsZSwgSSBoYXZlIAorICAgICAgICByZW1vdmVkIHNvbWUgb2YgdGhlIHRyYW5zbGF0aW9ucyBmcm9tIHRoaXMgZmlsZS48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc3RhdHNfZmlsZS5naWYiIFdJRFRIPSI2NzEiIEhFSUdIVD0iNTQzIj48L1A+CisgICAgICA8UD5UaGlzIHZpZXcgc2hvd3Mgc29tZSBtZXRhIGRhdGEgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFJlc291cmNlIEZpbGUuIAorICAgICAgICBUaGlzIG1ldGEgZGF0YSBoYXMgYWJzb2x1dGVseSBubyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uaW5nIG9mIHRoZSByZXNvdXJjZSAKKyAgICAgICAgYnVuZGxlIHdpdGhpbiBhbiBhcHBsaWNhdGlvbi4gSXQgaXMgdGhlcmUgc29sZWx5IHRvIGFpZCBkZXZlbG9wbWVudCBhbmQgCisgICAgICAgIHRyYW5zbGF0aW9uIHRlYW1zIGluIG1hbmFnaW5nIHRoZWlyIGVmZm9ydHMuPC9QPgorICAgICAgPFA+VGhlIFJlc291cmNlIFRpdGxlIGlzIGEgd2F5IHRvIGlkZW50aWZ5IHRoaXMgZmlsZSBhbmQgd2lsbCBzaG93IGF0IHRoZSAKKyAgICAgICAgdG9wIG9mIG1vc3Qgdmlld3Mgd2hlbiB3b3JraW5nIHdpdGggYSByZXNvdXJjZSBmaWxlLiBUaGUgQ29tbWVudCBjYW4gYmUgCisgICAgICAgIHVzZWQgdG8gc3BlY2lmeSBhbnl0aGluZyBzcGVjaWFsIGFib3V0IHRoaXMgZmlsZS4gVGhlIFJlc291cmNlIEZpbGUgTWFuYWdlciAKKyAgICAgICAgaXMgdGhlIHBlcnNvbiBpbiBjaGFyZ2Ugb2YgdHJhbnNsYXRpb25zIGluIHRoZSBsb2NhbGUgYXNzb2NpYXRlZCB3aXRoIAorICAgICAgICB0aGUgZmlsZS4gVGhlIExhbmd1YWdlLCBDb3VudHJ5LCBhbmQgVmFyaWFudCByZXByZXNlbnQgdGhlIGxvbmcgbmFtZXMgCisgICAgICAgIChpLmUuIG5vdCB0aGUgSVNPIGVuY29kaW5ncykgb2YgdGhlIGxhbmd1YWdlLCBjb3VudHJ5LCBhbmQgdmFyaWFudCBhc3NvY2lhdGUgCisgICAgICAgIHdpdGggdGhlIGZpbGUuIFRoZXNlIGFyZSB0aGUgbmFtZXMgdGhhdCBzaG93IHVwIGluIHRoZSBSZXNvdXJjZSBUcmVlLjwvUD4KKyAgICAgIDxQPkFsc28gZGlzcGxheWVkIGZvciB0aGUgc2VsZWN0ZWQgZmlsZSBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRyYW5zbGF0aW9ucyAKKyAgICAgICAgaW4gdGhpcyBmaWxlLiBUaGlzIG51bWJlciBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgCisgICAgICAgIHRyYW5zbGF0aW9ucyBpbiB0aGUgYnVuZGxlLiBUaGUgbnVtYmVyIG9mIHVudHJhbnNsYXRlZCByZXNvdXJjZSBpdGVtcyAKKyAgICAgICAgaXMgYWxzbyBzaG93bi4gVGhlc2Ugc3RhdGlzdGljcyBhcmUgdXNlZnVsIGluIG1vbml0b3JpbmcgdGhlIHByb2dyZXNzIAorICAgICAgICBvZiB0cmFuc2xhdGlvbi4gVG8gd29yayB3aXRoIHRoZSB1bnRyYW5zbGF0ZWQgaXRlbXMsIGEgY29udmVuaWVudCB2aWV3IAorICAgICAgICBpcyBnaXZlbiBpbiB0aGUgVW50cmFuc2xhdGVkIHRhYiB2aWV3LjwvUD4KKyAgICAgIDxQIEFMSUdOPSJDRU5URVIiPjxBIEhSRUY9InZpZXczLmh0bWwiPlZpZXcgMy4gVGhlIFVudHJhbnNsYXRlZCBUYWI8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXczLmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3My5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTJjNDcKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3My5odG1sCkBAIC0wLDAgKzEsMTU1IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgLSBUaGUgVW50cmFuc2xhdGVkIFRhYjwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vdHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5WaWV3IDMuIFRoZSBVbnRyYW5zbGF0ZWQgVGFiPC9IMz4KKyAgICAgIDxQPlRoZSBVbnRyYW5zbGF0ZWQgdGFiIHZpZXcsIGxpa2UgYWxsIHRhYiB2aWV3cywgbG9va3MgYW5kIGZ1bmN0aW9ucyBkaWZmZXJlbnRseSAKKyAgICAgICAgd2hlbiB3b3JraW5nIHdpdGggdGhlIHJlc291cmNlIGJ1bmRsZSBhcyBhIHdob2xlIHRoYW4gd2hlbiB3b3JraW5nIHdpdGggCisgICAgICAgIGFuIGluZGl2aWR1YWwgcmVzb3VyY2UgZmlsZS4gRm9yIGFuIG92ZXJ2aWV3IG9mIHRoaXMgZGlmZmVyZW5jZSBzZWUgPEEgSFJFRj0idmlldzEuaHRtbCI+VmlldyAKKyAgICAgICAgMTwvQT4uIFRoZSBVbnRyYW5zbGF0ZWQgdGFiIHZpZXcgaXMgbW9zdCBvZnRlbiB1c2VkIHdoZW4gd29ya2luZyB3aXRoIAorICAgICAgICBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGVzLCBhbmQgaXMgcHJvYmFibHkgdGhlIGxhcmdlc3QgY29udmVuaWVuY2UgdGhhdCAKKyAgICAgICAgUkIgTWFuYWdlciBvZmZlcnMgb3ZlciBvdGhlciBtZXRob2RzIG9mIHdvcmtpbmcgd2l0aCByZXNvdXJjZSBidW5kbGVzLjwvUD4KKyAgICAgIDxQPjxCPldvcmtpbmcgd2l0aCBhIFJlc291cmNlIEJ1bmRsZTwvQj48L1A+CisgICAgICA8UD5UaGUgc2NyZWVuIHNob3QgYmVsb3cgc2hvd3MgUkIgTWFuYWdlciBhbmQgYSB2aWV3IG9mIHVudHJhbnNsYXRlZCBpdGVtcyAKKyAgICAgICAgZm9yIHRoZSBlbnRpcmUgcmVzb3VyY2UgYnVuZGxlLjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2J1bmRsZS5naWYiIFdJRFRIPSI2NzEiIEhFSUdIVD0iNTQzIj48L1A+CisgICAgICA8UD5Gcm9tIHRoaXMgdmlldywgcmVzb3VyY2UgYnVuZGxlcyBjYW4gbm90IGJlIGVkaXRlZC4gVG8gZG8gdGhpcyB5b3UgZWl0aGVyIAorICAgICAgICBoYXZlIHRvIGdvIHRvIHRoZSBHcm91cHMgdGFiIHZpZXcgb3Igc2VsZWN0IGFuIGluZGl2aWR1YWwgcmVzb3VyY2UgZmlsZS4gCisgICAgICAgIFRoZSB2aWV3IGlzIHVzZWZ1bCB0aG91Z2ggZm9yIGdldHRpbmcgYSBwaWN0dXJlIG9mIHRoZSB0cmFuc2xhdGlvbiBzdGF0dXMgCisgICAgICAgIG9mIHRoZSBlbnRpcmUgcmVzb3VyY2UgYnVuZGxlLjwvUD4KKyAgICAgIDxQPkluIHRoaXMgdmlldywgZWFjaCBvZiB0aGUgcmVzb3VyY2UgZmlsZXMgaXMgcmVwcmVzZW50ZWQgYW5kIHRoZSBudW1iZXIgCisgICAgICAgIG9mIHVudHJhbnNsYXRlZCBpdGVtcyBpcyBkaXNwbGF5ZWQgYXMgd2VsbCBhcyB0aGUgcmVzb3VyY2Uga2V5IGZvciBlYWNoIAorICAgICAgICBvZiB0aG9zZSBpdGVtcy4gU2Nyb2xsaW5nIHVwIGFuZCBkb3duIHRoZSB2aWV3IGdpdmVzIGEgY29tcGxldGUgbG9vayBhdCAKKyAgICAgICAgdGhlIHZhcmlvdXMgZmlsZXMuPC9QPgorICAgICAgPFA+PEI+V29ya2luZyB3aXRoIGEgUmVzb3VyY2UgRmlsZTwvQj48L1A+CisgICAgICA8UD5UaGUgbmV4dCBzY3JlZW4gc2hvdCBzaG93cyB0aGUgVW50cmFuc2xhdGVkIHRhYiB2aWV3IHdoZW4gd29ya2luZyB3aXRoIAorICAgICAgICBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuIFRoaXMgaXMgdGhlIHZpZXcgdHJhbnNsYXRvcnMgd2lsbCBwcm9iYWJseSAKKyAgICAgICAgdXNlIHRoZSBtb3N0LjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld191bnRyYW5zX2ZpbGUuZ2lmIiBXSURUSD0iNjcxIiBIRUlHSFQ9IjU0MyI+PC9QPgorICAgICAgPFA+TGlzdGVkIGluIHRoZSB0YWJsZSBpcyBlYWNoIG9mIHRoZSByZXNvdXJjZSBjdXJyZW50bHkgbWFya2VkIGFzIHVudHJhbnNsYXRlZCAKKyAgICAgICAgKGZvciBtb3JlIG9uIHRoZSBtZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcmVzb3VyY2UsIHNlZSB0aGUgPEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+KS4gCisgICAgICAgIFRoZSB0YWJsZSBzaG93cyB0aGUgcmVzb3VyY2Uga2V5IGFuZCBncm91cCBvZiB0aGUgcmVzb3VyY2UsIHdoaWNoIGNhbiAKKyAgICAgICAgbm90IGJlIGVkaXRlZCBmcm9tIGEgcmVzb3VyY2UgZmlsZSB2aWV3LCBhbmQgdGhlIHRyYW5zbGF0aW9uIG9mIHRoZSByZXNvdXJjZSwgCisgICAgICAgIHdoaWNoIGNhbiBiZSBlZGl0ZWQgaGVyZS48L1A+CisgICAgICA8UD5UbyB0cmFuc2xhdGUgYSByZXNvdXJjZSwgc2ltcGx5IGRvdWJsZSBjbGljayB0aGUgcm93IGNvbnRhaW5pbmcgdGhlIHJlc291cmNlLiAKKyAgICAgICAgQSBkaWFsb2cgYm94IHdpbGwgcG9wIHVwIGFsbG93aW5nIHRoZSByZXNvdXJjZSBmaWxlIHNwZWNpZmljIGVsZW1lbnRzIAorICAgICAgICBvZiB0aGUgcmVzb3VyY2UgdG8gYmUgZWRpdGVkLiBUaGF0IGRpYWxvZyBib3ggaXMgc2hvd24gaGVyZS4gSXRzIHVzZSBjYW4gCisgICAgICAgIGJlIGZvdW5kIGluIHRoZSBUdXRvcmlhbC48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfdW50cmFuc19kaWFsb2cwLmdpZiIgV0lEVEg9IjUxMyIgSEVJR0hUPSIyNjkiPjwvUD4KKyAgICAgIDxQPkluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0byBsZWF2ZSB0aGUgdHJhbnNsYXRpb24gYXMgaXQgc3RhbmRzLiBUaGlzIAorICAgICAgICBpcyBjb21tb24gZm9yIGluc3RhbmNlIHdoZW4gd29ya2luZyB3aXRoIHZhcmlhbnRzIG9mIGEgbGFuZ3VhZ2Ugd2l0aCBsaXR0bGUgCisgICAgICAgIGNoYW5nZSBmcm9tIHRoZSBsYW5ndWFnZSBwYXJlbnQgKGUuZy4gQ2FuYWRpYW4gRW5nbGlzaCBhbmQgVS5TLiBFbmdsaXNoIAorICAgICAgICBoYXZlIHJlbGF0aXZlbHkgZmV3IGRpZmZlcmVuY2VzKS48L1A+CisgICAgICA8UD5UaGVyZSBhcmUgdHdvIHdheXMgdG8gaGFuZGxlIHRoaXMuIE9uZSB3YXkgaXMgdG8gc2VsZWN0IHRoZSByZXNvdXJjZSAKKyAgICAgICAgYW5kIG1hcmsgaXQgYXMgdHJhbnNsYXRlZC4gVGhpcyBjYW4gYmUgZG9uZSBieSBwcmVzc2luZyB0aGUgJ01hcmsgUmVzb3VyY2UgCisgICAgICAgIGFzIFRyYW5zbGF0ZWQnIGJ1dHRvbiBvciBkb3VibGUgY2xpY2tpbmcgdGhlIHJlc291cmNlLCBjaGVja2luZyB0aGUgJ1RyYW5zbGF0ZWQnIAorICAgICAgICBjaGVjayBib3ggYW5kIGNsaWNraW5nIHRoZSAnRWRpdCcgYnV0dG9uLiBUaGUgb3RoZXIgd2F5IGlzIHRvIHJlbW92ZSB0aGUgCisgICAgICAgIHJlc291cmNlIGZyb20gdGhlIHJlc291cmNlIGZpbGUgYnkgc2VsZWN0aW5nIHRoZSByZXNvdXJjZSBhbmQgY2xpY2tpbmcgCisgICAgICAgICdEZWxldGUgUmVzb3VyY2UnLjwvUD4KKyAgICAgIDxQPkVpdGhlciB3YXksIHRoZSByZXNvdXJjZSBidW5kbGUgc2hvdWxkIGFjdCB0aGUgc2FtZSB3aGVuIHByZXNlbnRpbmcgdHJhbnNsYXRpb25zIAorICAgICAgICB0byB0aGUgdXNlci4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgdHJhbnNsYXRpb24gZnJvbSB0aGUgcmVzb3VyY2UgZmlsZSAKKyAgICAgICAgaXMgdXNlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgdHJhbnNsYXRpb24gZmFsbHMgYmFjayB0byB0aGUgb25lIGZvdW5kIAorICAgICAgICBpbiBhbiBhbmNlc3RvciByZXNvdXJjZSBmaWxlLjwvUD4KKyAgICAgIDxQPk5vdGUgdGhhdCBvbmx5IG9uZSByZXNvdXJjZSBjYW4gYmUgZWRpdGVkIGF0IGEgdGltZSBpbiB0aGUgY3VycmVudCB2ZXJzaW9uIAorICAgICAgICBvZiBSQiBNYW5hZ2VyLiBGdXR1cmUgdmVyc2lvbnMgd2lsbCBhbGxvdyBtdWx0aXBsZSBzZWxlY3Rpb25zIG9mIHJlc291cmNlcyAKKyAgICAgICAgaW4gdGhpcyB2aWV3LjwvUD4KKyAgICAgIDxQIEFMSUdOPSJDRU5URVIiPjxBIEhSRUY9InZpZXc0Lmh0bWwiPlZpZXcgNC4gVGhlIEdyb3VwcyBUYWI8L0E+PC9QPgorICAgICAgPCEtLSAjRW5kRWRpdGFibGUgLS0+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9sbC5naWYiIEhFSUdIVD0iNDAiIFdJRFRIPSIyMDAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQgV0lEVEg9IjgwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREPgorCQkJPENFTlRFUj48U1BBTiBDTEFTUz0iQ29weXJpZ2h0Ij5Db3B5cmlnaHQgMjAwMC0yMDAxIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQ8L1NQQU4+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKzwvVEFCTEU+CisKKzwvQk9EWT4KKzwhLS0gI0VuZFRlbXBsYXRlIC0tPjwvSFRNTD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9kb2NzL3ZpZXdzL3ZpZXc0Lmh0bWwgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZTQyOTIKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3NC5odG1sCkBAIC0wLDAgKzEsMTQ1IEBACis8SFRNTD48IS0tICNCZWdpblRlbXBsYXRlICIvVGVtcGxhdGVzL01haW5UZW1wbGF0ZS5kd3QiIC0tPgorPEhFQUQ+Cis8IS0tICNCZWdpbkVkaXRhYmxlICJkb2N0aXRsZSIgLS0+IAorPFRJVExFPlJCIE1hbmFnZXIgLSBUaGUgR3JvdXBzIFRhYjwvVElUTEU+Cis8IS0tICNFbmRFZGl0YWJsZSAtLT4gCis8TUVUQSBIVFRQLUVRVUlWPSJDb250ZW50LVR5cGUiIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzxTVFlMRSBUWVBFPSJURVhUL0NTUyI+Cis8IS0tCisudG9waWNIZWFkIHsgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOyBmb250LXNpemU6IDE0cHQ7IGZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMzMzMzMzfQorLnRvcGljTGlzdCB7ICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiAjRkYwMDk5OyBsaXN0LXN0eWxlLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RpYW1vbmRfYnVsbGV0LmdpZik7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGR9CisubWFpbkJsb2NrIHsgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLXJpZ2h0OiA1cHg7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLWxlZnQ6IDVweDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDogMTBweDsgcGFkZGluZy1ib3R0b206IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyB0ZXh0LWFsaWduOiBqdXN0aWZ5fQorLS0+Cis8L1NUWUxFPgorPC9IRUFEPgorCis8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBMRUZUTUFSR0lOPSIwIiBUT1BNQVJHSU49IjAiIE1BUkdJTldJRFRIPSIwIiBNQVJHSU5IRUlHSFQ9IjAiPgorPFRBQkxFIFdJRFRIPSIxMDAlIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMCI+CisgIDxUUj4KKyAgICA8VEQgUk9XU1BBTj0iMiIgQ09MU1BBTj0iMiIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3VsLmdpZiIgSEVJR0hUPSI3NSI+PElNRyBTUkM9Ii4uL2ltYWdlcy9zcGFjZXIuZ2lmIiBXSURUSD0iMjgwIiBIRUlHSFQ9IjEiIEhTUEFDRT0iMCI+PC9URD4KKwkJPFREIEhFSUdIVD0iMTUiICBXSURUSD0iMTAwJSIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX3UuZ2lmIj48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgSEVJR0hUPSI2MCIgPgorCQkJPENFTlRFUj48SU1HIFNSQz0iLi4vaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYiIFZTUEFDRT0iMCI+PC9DRU5URVI+CisJCTwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCQorICAgIDxURCBXSURUSD0iMjAwIiBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbC5naWYiIFZBTElHTj0idG9wIj4KKwkJPFRBQkxFIFdJRFRIPSIxODAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElORz0iMSI+IAorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5HZW5lcmFsPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zeXN0ZW1fcmVxdWlyZW1lbnRzLmh0bWwiPlN5c3RlbSBSZXF1aXJlbWVudHM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2ZhcS5odG1sIj5GQVE8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5GdXR1cmUgUmVsZWFzZXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL2Z1dHVyZV9mZWF0dXJlcy5odG1sIj5WZXJzaW9uIAorICAgICAgICAgICAgICAgIEhpc3Rvcnk8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorICAgICAgCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNIZWFkIj5SQiBNYW5hZ2VyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICAgICAgICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9pbmRleC5odG1sIj5Ib21lPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iaW5kZXguaHRtbCI+RnVuY3Rpb25hbGl0eSBhbmQgVmlld3M8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL2xvb2thbmRmZWVsLmh0bWwiPkxvb2sgYW5kIEZlZWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL21lbnUuaHRtbCI+TWVudSBJdGVtczwvQT48L0xJPgorICAgICAgICAgICAgICA8TEkgQ0xBU1M9InRvcGljTGlzdCI+PEEgSFJFRj0iLi4vdHV0b3JpYWwvc3RlcDEuaHRtbCI+UHJlZmVyZW5jZXM8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgUmVwb3J0ZXI8L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgVkFMSUdOPSJjZW50ZXIiPjxJTUcgU1JDPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGluZS5naWYiPjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBDTEFTUz0idG9waWNMaXN0Ij4KKwkgIDxVTD4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL1JCUmVwb3J0ZXIuaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICA8TEk+UmVwb3J0IFR5cGVzPC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9Ii4uL3NjYW5maWxlLmh0bWwiPkNvZGUgU2Nhbm5pbmc8L0E+PC9MST4KKyAgICAgICAgICAgIDwvVUw+CisJCQk8L1REPgorCQk8L1RSPgorCTwvVEFCTEU+CisKKyAgICAgIDxQPiZuYnNwOyA8L1A+CisgICAgICA8L1REPgorCQkKKyAgICA8VEQgQ09MU1BBTj0iMiIgVkFMSUdOPSJ0b3AiIENMQVNTPSJtYWluQmxvY2siPjwhLS0gI0JlZ2luRWRpdGFibGUgIk1haW4iIC0tPiAKKyAgICAgIDxIMyBBTElHTj0iQ0VOVEVSIj5WaWV3IDQuIFRoZSBHcm91cHMgVGFiPC9IMz4KKyAgICAgIDxQPlRoZSBHcm91cHMgdGFiIHZpZXcsIGxpa2UgYWxsIHRhYiB2aWV3cywgbG9va3MgYW5kIGZ1bmN0aW9ucyBkaWZmZXJlbnRseSAKKyAgICAgICAgd2hlbiB3b3JraW5nIHdpdGggdGhlIHJlc291cmNlIGJ1bmRsZSBhcyBhIHdob2xlIHRoYW4gd2hlbiB3b3JraW5nIHdpdGggCisgICAgICAgIGFuIGluZGl2aWR1YWwgcmVzb3VyY2UgZmlsZS4gRm9yIGFuIG92ZXJ2aWV3IG9mIHRoaXMgZGlmZmVyZW5jZSBzZWUgPEEgSFJFRj0idmlldzEuaHRtbCI+VmlldyAKKyAgICAgICAgMTwvQT4uIFJCIE1hbmFnZXIgYWRkcyBhIGxldmVsIG9mIGhlaXJhcmNoeSBub3QgY29tbW9ubHkgZm91bmQgaW4gcmVzb3VyY2UgCisgICAgICAgIGJ1bmRsZXMuIFRoaXMgYWRkdGlvbmFsIGxldmVsIGlzIGNhbGxlZCBHcm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAgICAgICBSZXNvdXJjZSBHcm91cHMgc2VlIHRoZSA8QSBIUkVGPSIuLi90dXRvcmlhbC9pbmRleC5odG1sIj5UdXRvcmlhbDwvQT4uPC9QPgorICAgICAgPFA+PEI+V29ya2luZyB3aXRoIGEgUmVzb3VyY2UgQnVuZGxlPC9CPjwvUD4KKyAgICAgIDxQPlRoZSBzY3JlZW4gc2hvdCBiZWxvdyBzaG93cyBSQiBNYW5hZ2VyIGFuZCBhIHZpZXcgb2YgZ3JvdXBzIGZvciB0aGUgZW50aXJlIAorICAgICAgICByZXNvdXJjZSBidW5kbGUuPC9QPgorICAgICAgPFA+PElNRyBTUkM9Ii4uL2ltYWdlcy9zY3JlZW5zaG90cy92aWV3X2dyb3Vwc19idW5kbGUuZ2lmIiBXSURUSD0iNjcxIiBIRUlHSFQ9IjU0MyI+PC9QPgorICAgICAgPFA+VW5saWtlIHRoZSBVbnRyYW5zbGF0ZWQgdGFiIHZpZXcsIHRoaXMgdmlldyBhbGxvd3MgdGhlIGVkaXRpbmcgb2YgcmVzb3VyY2VzLiAKKyAgICAgICAgRWRpdGluZyBvciBhZGRpbmcgcmVzb3VyY2VzIGF0IHRoaXMgbGV2ZWwgYWZmZWN0cyB0aGUgcmVzb3VyY2UgYnVuZGxlIAorICAgICAgICBhcyBhIHdob2xlLiBUaHVzIGlmIGEgcmVzb3VyY2UgaGFzIGFsbCByZWFkeSBiZWVuIHRyYW5zbGF0ZWQgaW4gYSByZXNvdXJjZSAKKyAgICAgICAgZmlsZSwgaXQgd2lsbCBiZSBtYXJrZWQgYXMgdW50cmFuc2xhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiB0aGUgZW50aXJlIAorICAgICAgICBidW5kbGUuPC9QPgorICAgICAgPFA+RWRpdGluZyBhIHJlc291cmNlIGlzIGFzIHNpbXBsZSBhcyBzZWxlY3RpbmcgdGhlIGdyb3VwIGZyb20gdGhlIGRyb3AgCisgICAgICAgIGRvd24gYm94IGF0IHRoZSB0b3Agb2YgdGhlIHNjcmVlbiwgZG91YmxlIGNsaWNraW5nIGEgcmVzb3VyY2UsIG1ha2luZyAKKyAgICAgICAgdGhlIGRlc2lyZWQgY2hhbmdlLCBhbmQgY2xpY2tpbmcgJ0VkaXQnIG9uIHRoZSBkaWFsb2cgYm94IHJlc3VsdGluZyBmcm9tIAorICAgICAgICB0aGUgZG91YmxlIGNsaWNrLiBPcHRpb25hbGx5LCB0aGUgcmVzb3VyY2UgY2FuIGJlIGVkaXRlZCBieSBzZWxlY3RpbmcgCisgICAgICAgIGl0IGFuZCBwcmVzc2luZyB0aGUgJ0VkaXQgUmVzb3VyY2UnIGJ1dHRvbiBpbnN0ZWFkIG9mIGRvdWJsZSBjbGlja2luZy48L1A+CisgICAgICA8UD5UaGUgUmVzb3VyY2UgR3JvdXAgY2FuIGFsc28gYmUgZWRpdGVkLiBUaGUgbmFtZSBhbmQgY29tbWVudCBhc3NvY2lhdGUgCisgICAgICAgIHdpdGggdGhlIGdyb3VwIGNhbiBiZSBjaGFuZ2VkIGJ5IHByZXNzaW5nIHRoZSAnRWRpdCBHcm91cCcgYnV0dG9uLiBQcmVzc2luZyAKKyAgICAgICAgdGhlICdEZWxldGUgR3JvdXAnIGJ1dHRvbiB3aWxsIGRlbGV0ZSBib3RoIHRoZSBncm91cCBhbmQgYWxsIHJlc291cmNlcyAKKyAgICAgICAgY29udGFpbmVkIHdpdGhpbiBpdC4gQSBkaWFsb2cgd2lsbCBwcm9tcHQgeW91IHdoZW4gdGhpcyBidXR0b24gaXMgcHJlc3NlZCAKKyAgICAgICAgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCB5b3UgaW50ZW5kIHRvIGRvLjwvUD4KKyAgICAgIDxQPlJlc291cmNlcyBjcmVhdGVkIGluIHRoZSBHcm91cCB2aWV3IHdpbGwgYnkgZGVmYXVsdCBiZSBwbGFjZWQgaW4gdGhlIAorICAgICAgICBncm91cCBjdXJyZW50bHkgYmVpbmcgc2hvd24uIFRoaXMgY2FuIGJlIGNoYW5nZWQgaG93ZXZlciBieSBzZWxlY3RpbmcgCisgICAgICAgIGFub3RoZXIgZ3JvdXAgbmFtZSBmcm9tIHRoZSByZXNvdXJjZSBjcmVhdGlvbiBkaWFsb2cgYm94LjwvUD4KKyAgICAgIDxQPlRoaXMgdmlldyBpcyBwcm9iYWJseSB0aGUgbW9zdCBjb21tb25seSB1c2VkIHZpZXcgYnkgZGV2ZWxvcGVycyBpbnNlcnRpbmcgCisgICAgICAgIG5ldyByZXNvdXJjZXMgaW50byBhIGJ1bmRsZS48L1A+CisgICAgICA8UD48Qj5Xb3JraW5nIHdpdGggYSBSZXNvdXJjZSBGaWxlPC9CPjwvUD4KKyAgICAgIDxQPlRoZSBuZXh0IHNjcmVlbiBzaG90IHNob3dzIHRoZSBHcm91cCB0YWIgdmlldyB3aGVuIHdvcmtpbmcgd2l0aCBhbiBpbmRpdmlkdWFsIAorICAgICAgICByZXNvdXJjZSBmaWxlLjwvUD4KKyAgICAgIDxQPjxJTUcgU1JDPSIuLi9pbWFnZXMvc2NyZWVuc2hvdHMvdmlld19ncm91cHNfZmlsZS5naWYiIFdJRFRIPSI2NzEiIEhFSUdIVD0iNTQzIj48L1A+CisgICAgICA8UD5UaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIHZpZXcgbW9zdGx5IG1pcnJvcnMgdGhhdCBvZiB0aGUgVW50cmFuc2xhdGVkIAorICAgICAgICB0YWIgdmlldy4gTW9yZSBvbiB0aGF0IHZpZXcgaXMgZm91bmQgaW4gPEEgSFJFRj0idmlldzMuaHRtbCI+VmlldyAzPC9BPi4gCisgICAgICAgIFRoZSBvbmx5IGFkZGl0aW9uIGlzIHRoYXQgcmVzb3VyY2VzIGFsbCByZWFkeSBtYXJrZWQgYXMgdHJhbnNsYXRlZCBjYW4gCisgICAgICAgIGJlIHNlZW4gYW5kIGVkaXRlZCBmcm9tIHRoaXMgdmlldy4gU2VsZWN0aW5nIGEgZ3JvdXAgZnJvbSB0aGUgZHJvcCBkb3duIAorICAgICAgICBib3ggd2lsbCB1cGRhdGUgdGhlIGRpc3BsYXkgd2l0aCBhbGwgcmVzb3VyY2VzLCB0cmFuc2xhdGVkIG9yIG5vdCwgZnJvbSAKKyAgICAgICAgdGhhdCBncm91cC48L1A+CisgICAgICA8UCBBTElHTj0iQ0VOVEVSIj48QSBIUkVGPSJ2aWV3NS5odG1sIj5WaWV3IDUuIFRoZSBTZWFyY2ggVGFiPC9BPjwvUD4KKyAgICAgIDwhLS0gI0VuZEVkaXRhYmxlIC0tPjwvVEQ+CisJPC9UUj4KKwk8VFI+CisJCTxURCBCQUNLR1JPVU5EPSIuLi9pbWFnZXMvdGVtcGxhdGVfbGwuZ2lmIiBIRUlHSFQ9IjQwIiBXSURUSD0iMjAwIj4KKwkJCTwhLS0gQ29tbWVudCAtLT4KKwkJPC9URD4KKwkJPFREIFdJRFRIPSI4MCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURD4KKwkJCTxDRU5URVI+PFNQQU4gQ0xBU1M9IkNvcHlyaWdodCI+Q29weXJpZ2h0IDIwMDAtMjAwMSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBBbGwgUmlnaHRzIFJlc2VydmVkPC9TUEFOPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+Cis8L1RBQkxFPgorCis8L0JPRFk+Cis8IS0tICNFbmRUZW1wbGF0ZSAtLT48L0hUTUw+CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZG9jcy92aWV3cy92aWV3NS5odG1sIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2VjMDlkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2RvY3Mvdmlld3MvdmlldzUuaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPEhUTUw+PCEtLSAjQmVnaW5UZW1wbGF0ZSAiL1RlbXBsYXRlcy9NYWluVGVtcGxhdGUuZHd0IiAtLT4KKzxIRUFEPgorPCEtLSAjQmVnaW5FZGl0YWJsZSAiZG9jdGl0bGUiIC0tPiAKKzxUSVRMRT5SQiBNYW5hZ2VyIC0gVGhlIFNlYXJjaCBUYWI8L1RJVExFPgorPCEtLSAjRW5kRWRpdGFibGUgLS0+IAorPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05URU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8U1RZTEUgVFlQRT0iVEVYVC9DU1MiPgorPCEtLQorLnRvcGljSGVhZCB7ICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxNHB0OyBmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzMzMzMzM30KKy50b3BpY0xpc3QgeyAgZm9udC1mYW1pbHk6IEdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogI0ZGMDA5OTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kaWFtb25kX2J1bGxldC5naWYpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkfQorLm1haW5CbG9jayB7ICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0OyBtYXJnaW4tdG9wOiA1cHg7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiA1cHg7IG1hcmdpbi1sZWZ0OiA1cHg7IHBhZGRpbmctdG9wOiA1cHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IHBhZGRpbmctYm90dG9tOiA1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgdGV4dC1hbGlnbjoganVzdGlmeX0KKy0tPgorPC9TVFlMRT4KKzwvSEVBRD4KKworPEJPRFkgQkdDT0xPUj0iI0ZGRkZGRiIgTEVGVE1BUkdJTj0iMCIgVE9QTUFSR0lOPSIwIiBNQVJHSU5XSURUSD0iMCIgTUFSR0lOSEVJR0hUPSIwIj4KKzxUQUJMRSBXSURUSD0iMTAwJSIgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjAiPgorICA8VFI+CisgICAgPFREIFJPV1NQQU49IjIiIENPTFNQQU49IjIiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91bC5naWYiIEhFSUdIVD0iNzUiPjxJTUcgU1JDPSIuLi9pbWFnZXMvc3BhY2VyLmdpZiIgV0lEVEg9IjI4MCIgSEVJR0hUPSIxIiBIU1BBQ0U9IjAiPjwvVEQ+CisJCTxURCBIRUlHSFQ9IjE1IiAgV0lEVEg9IjEwMCUiIEJBQ0tHUk9VTkQ9Ii4uL2ltYWdlcy90ZW1wbGF0ZV91LmdpZiI+PC9URD4KKwk8L1RSPgorCTxUUj4KKwkJPFREIEhFSUdIVD0iNjAiID4KKwkJCTxDRU5URVI+PElNRyBTUkM9Ii4uL2ltYWdlcy9UaXRsZUxvZ29fdHJhbnNwYXJlbnQuZ2lmIiBWU1BBQ0U9IjAiPjwvQ0VOVEVSPgorCQk8L1REPgorCTwvVFI+CisJPFRSPgorCQkKKyAgICA8VEQgV0lEVEg9IjIwMCIgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2wuZ2lmIiBWQUxJR049InRvcCI+CisJCTxUQUJMRSBXSURUSD0iMTgwIiBDRUxMU1BBQ0lORz0iMCIgQ0VMTFBBRERJTkc9IjEiPiAKKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+R2VuZXJhbDwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vc3lzdGVtX3JlcXVpcmVtZW50cy5odG1sIj5TeXN0ZW0gUmVxdWlyZW1lbnRzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mYXEuaHRtbCI+RkFRPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+RnV0dXJlIFJlbGVhc2VzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMSSBDTEFTUz0idG9waWNMaXN0Ij48QSBIUkVGPSIuLi9mdXR1cmVfZmVhdHVyZXMuaHRtbCI+VmVyc2lvbiAKKyAgICAgICAgICAgICAgICBIaXN0b3J5PC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKyAgICAgIAk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljSGVhZCI+UkIgTWFuYWdlcjwvVEQ+CisJCTwvVFI+CisJCTxUUj4KKwkJCTxURCBWQUxJR049ImNlbnRlciI+PElNRyBTUkM9Ii4uL2ltYWdlcy90ZW1wbGF0ZV9saW5lLmdpZiI+PC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0xpc3QiPgorCSAgICAgICAgPFVMPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vaW5kZXguaHRtbCI+SG9tZTwvQT48L0xJPgorICAgICAgICAgICAgICA8TEk+PEEgSFJFRj0iLi4vdHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkZ1bmN0aW9uYWxpdHkgYW5kIFZpZXdzPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9sb29rYW5kZmVlbC5odG1sIj5Mb29rIGFuZCBGZWVsPC9BPjwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9tZW51Lmh0bWwiPk1lbnUgSXRlbXM8L0E+PC9MST4KKyAgICAgICAgICAgICAgPExJIENMQVNTPSJ0b3BpY0xpc3QiPjxBIEhSRUY9Ii4uL3R1dG9yaWFsL3N0ZXAxLmh0bWwiPlByZWZlcmVuY2VzPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIENMQVNTPSJ0b3BpY0hlYWQiPlJCIFJlcG9ydGVyPC9URD4KKwkJPC9UUj4KKwkJPFRSPgorCQkJPFREIFZBTElHTj0iY2VudGVyIj48SU1HIFNSQz0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xpbmUuZ2lmIj48L1REPgorCQk8L1RSPgorCQk8VFI+CisJCQk8VEQgQ0xBU1M9InRvcGljTGlzdCI+CisJICA8VUw+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9SQlJlcG9ydGVyLmh0bWwiPkhvbWU8L0E+PC9MST4KKyAgICAgICAgPExJPlJlcG9ydCBUeXBlczwvTEk+CisgICAgICAgICAgICAgIDxMST48QSBIUkVGPSIuLi9zY2FuZmlsZS5odG1sIj5Db2RlIFNjYW5uaW5nPC9BPjwvTEk+CisgICAgICAgICAgICA8L1VMPgorCQkJPC9URD4KKwkJPC9UUj4KKwk8L1RBQkxFPgorCisgICAgICA8UD4mbmJzcDsgPC9QPgorICAgICAgPC9URD4KKwkJCisgICAgPFREIENPTFNQQU49IjIiIFZBTElHTj0idG9wIiBDTEFTUz0ibWFpbkJsb2NrIj48IS0tICNCZWdpbkVkaXRhYmxlICJNYWluIiAtLT4gCisgICAgICA8SDMgQUxJR049IkNFTlRFUiI+VmlldyA1LiBUaGUgU2VhcmNoIFRhYjwvSDM+CisgICAgICA8UD5UaGUgR3JvdXBzIHRhYiB2aWV3LCBsaWtlIGFsbCB0YWIgdmlld3MsIGxvb2tzIGFuZCBmdW5jdGlvbnMgZGlmZmVyZW50bHkgCisgICAgICAgIHdoZW4gd29ya2luZyB3aXRoIHRoZSByZXNvdXJjZSBidW5kbGUgYXMgYSB3aG9sZSB0aGFuIHdoZW4gd29ya2luZyB3aXRoIAorICAgICAgICBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGZpbGUuIEhvd2V2ZXIsIHVubGlrZSB0aGUgb3RoZXIgdGFiIHZpZXdzLCB0aGUgCisgICAgICAgIGRpZmZlcmVuY2VzIGFyZSBtaW5pbWFsLiBTZWFyY2hpbmcgZnJvbSB0aGUgYnVuZGxlIHBlcmZvcm1zIHRoZSBzZWFyY2ggCisgICAgICAgIG9uIHRoZSBiYXNlIGNsYXNzIGFuZCBlZGl0cyB0byB0aGUgZm91bmQgcmVzb3VyY2VzIGFmZmVjdCB0aGUgZW50aXJlIGJ1bmRsZS4gCisgICAgICAgIFNlYXJjaGluZyBmcm9tIGEgcmVzb3VyY2UgZmlsZSByZXN0cmljdHMgdGhlIHNlYXJjaCB0byB0aGF0IGZpbGUgYW5kIHRoZSAKKyAgICAgICAgY2hhbmdlcyBhcmUgYWxzbyByZXN0cmljdGVkIHRvIHRoYXQgcmVzb3VyY2UgZmlsZS48L1A+CisgICAgICA8UD5BIHNjcmVlbiBzaG90IG9mIHRoZSBTZWFyY2ggdGFiIHZpZXcgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUgaXMgZ2l2ZW4gCisgICAgICAgIGJlbG93LiBUaGUgdmlldyBmb3IgdGhlIGluZGl2aWR1YWwgcmVzb3VyY2UgZmlsZXMgaXMgbmVhcmx5IGlkZW50aWNhbC48L1A+CisgICAgICA8UD48SU1HIFNSQz0iLi4vaW1hZ2VzL3NjcmVlbnNob3RzL3ZpZXdfc2VhcmNoLmdpZiIgV0lEVEg9IjY3MSIgSEVJR0hUPSI1NDMiPjwvUD4KKyAgICAgIDxQPlRoZXJlIGFyZSB0d28gYmFzaWMgZnVuY3Rpb25zIHRvIHRoaXMgdmlldywgRmluZCBBbGwgYW5kIFJlcGxhY2UgQWxsLiAKKyAgICAgICAgRmluZCBBbGwgdGFrZXMgdGhlIHBhcmFtZXRlcnMgZ2l2ZW4gaXQgYW5kIHBvcHVsYXRlcyB0aGUgcmVzdWx0IHRhYmxlIAorICAgICAgICB3aXRoIGFueSBtYXRjaGVzIGZvdW5kIChub3RlIHRoYXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSQiBNYW5hZ2VyIGRvZXMgCisgICAgICAgIG5vdCBzdXBwb3J0IHdpbGQgY2FyZCBjaGFyYWN0ZXJzIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMpLiBUaGUgcmVzdWx0aW5nIAorICAgICAgICB0YWJsZSBjYW4gYmUgZWRpdGVkIGFzIGluIHRoZSBvdGhlciB2aWV3cyBieSBkb3VibGluZyBjbGlja2luZyBhIHJvdyBpbiAKKyAgICAgICAgdGhlIHRhYmxlLjwvUD4KKyAgICAgIDxQPlJlcGxhY2UgQWxsIHdvcmtzIGJ5IGZpcnN0IGZpbmRpbmcgYWxsIG9mIHRoZSByZXNvdXJjZXMgaW4gdGhlIHNhbWUgbWFubmVyIAorICAgICAgICBhcyBGaW5kIEFsbCBhbmQgdGhlbiByZXBsYWNpbmcgdGhlIHRleHQgdGhhdCBpcyBmb3VuZCB3aXRoIHRoZSB0ZXh0IGdpdmVuIAorICAgICAgICBpbiB0aGUgUmVwbGFjZSB0ZXh0IGJveC4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZmlyc3QgcGVyZm9ybSBGaW5kIAorICAgICAgICBBbGwgYmVmb3JlIFJlcGxhY2UgQWxsLiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIFJCIE1hbmFnZXIgZG9lcyBhbiBhbGwgCisgICAgICAgIG9yIG5vdGhpbmcgcmVwbGFjZS4gRnV0dXJlIHZlcnNpb25zIG1heSBhbGxvdyBzdGVwIGJ5IHN0ZXAgcmVwbGFjZW1lbnQuPC9QPgorICAgICAgPFA+VXNpbmcgdGhlIGNoZWNrIGJveGVzIG9uIHRoZSBwYWdlLCB5b3UgY2FuIHNwZWNpZnkgYW55IGNvbWJpbmF0aW9uIG9mIAorICAgICAgICB0aHJlZSBwYXJ0cyBvZiB0aGUgcmVzb3VyY2VzIHRvIHNlYXJjaDogUmVzb3VyY2UgS2V5cywgVHJhbnNsYXRpb25zLCBhbmQgCisgICAgICAgIENvbW1lbnRzLiBBIGZvdXJ0aCBjaGVjayBib3ggYWxsb3dzIHlvdSB0byBtYWtlIHRoZSBzZWFyY2ggY2FzZSBzZW5zaXRpdmUuPC9QPgorICAgICAgPFA+VGhpcyB2aWV3IHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMC4zYSBvZiBSQiBNYW5hZ2VyLjwvUD4KKyAgICAgIDxQIEFMSUdOPSJDRU5URVIiPjxBIEhSRUY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gdGhlIEZ1bmN0aW9uYWxpdHkgYW5kIFZpZXcgCisgICAgICAgIEluZGV4IDwvQT48L1A+CisgICAgICA8IS0tICNFbmRFZGl0YWJsZSAtLT48L1REPgorCTwvVFI+CisJPFRSPgorCQk8VEQgQkFDS0dST1VORD0iLi4vaW1hZ2VzL3RlbXBsYXRlX2xsLmdpZiIgSEVJR0hUPSI0MCIgV0lEVEg9IjIwMCI+CisJCQk8IS0tIENvbW1lbnQgLS0+CisJCTwvVEQ+CisJCTxURCBXSURUSD0iODAiPgorCQkJPCEtLSBDb21tZW50IC0tPgorCQk8L1REPgorCQk8VEQ+CisJCQk8Q0VOVEVSPjxTUEFOIENMQVNTPSJDb3B5cmlnaHQiPkNvcHlyaWdodCAyMDAwLTIwMDEgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgQWxsIFJpZ2h0cyBSZXNlcnZlZDwvU1BBTj48L0NFTlRFUj4KKwkJPC9URD4KKwk8L1RSPgorPC9UQUJMRT4KKworPC9CT0RZPgorPCEtLSAjRW5kVGVtcGxhdGUgLS0+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9BYm91dERpYWxvZy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9BYm91dERpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MjVjYjgKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0Fib3V0RGlhbG9nLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKKworLyoqIEEgZGlhbG9nIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBhcHBsaWNhdGlvbiAqLworY2xhc3MgQWJvdXREaWFsb2cgeworCXByaXZhdGUgc3RhdGljIEpEaWFsb2cgZGlhbG9nID0gbnVsbDsKKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgc2hvd0RpYWxvZyhGcmFtZSBwYXJlbnQpIHsKKwkJaWYgKGRpYWxvZyA9PSBudWxsKSB7CisJCQlkaWFsb2cgPSBuZXcgSkRpYWxvZyhwYXJlbnQsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2Fib3V0X3JibWFuYWdlciIpLCBmYWxzZSk7CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9CisJCWRpYWxvZy5zZXRWaXNpYmxlKHRydWUpOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRDb21wb25lbnRzKCkgeworCQlkaWFsb2cuZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKyAgICAgICAgSkxhYmVsIGxvZ29MYWJlbCA9IG51bGw7CisJCUpMYWJlbCB0aXRsZUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJibWFuYWdlciIpKTsKKwkJSkxhYmVsIHZlcnNpb25MYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ2ZXJzaW9uIiwgUGFja2FnZS5nZXRQYWNrYWdlKCJjb20uaWJtLnJibSIpLmdldEltcGxlbWVudGF0aW9uVmVyc2lvbigpKSk7CisJCUpMYWJlbCBjb3B5cmlnaHRMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJjb3B5cmlnaHQiKSk7CisJCUpMYWJlbCBjb250YWN0TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmJtYW5hZ2VyX2NvbnRhY3QiKSk7CisJCUpQYW5lbCBwYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwkJQm94IGJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3MgdGhpc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiY29tLmlibS5yYm0uZ3VpLkFib3V0RGlhbG9nIik7CisJCSAgICBsb2dvTGFiZWwgPSBuZXcgSkxhYmVsKG5ldyBJbWFnZUljb24odGhpc0NsYXNzLmdldFJlc291cmNlKCJpbWFnZXMvIiArCisJCQkJCQkJCQkgICAgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxvZ29fZmlsZW5hbWUiKSkpKTsKKyAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBSQk1hbmFnZXJHVUkuZGVidWdNc2coZS50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisJCWJveC5hZGQodGl0bGVMYWJlbCk7CisJCWJveC5hZGQodmVyc2lvbkxhYmVsKTsKKwkJYm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCgxMCkpOworCQlib3guYWRkKGNvcHlyaWdodExhYmVsKTsKKwkJYm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCWJveC5hZGQoY29udGFjdExhYmVsKTsKKwkJCisJCXBhbmVsLmFkZChib3gpOworCQlkaWFsb2cuZ2V0Q29udGVudFBhbmUoKS5hZGQobG9nb0xhYmVsLCBCb3JkZXJMYXlvdXQuV0VTVCk7CisJCWRpYWxvZy5nZXRDb250ZW50UGFuZSgpLmFkZChwYW5lbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQorCQlkaWFsb2cuYWRkTW91c2VMaXN0ZW5lcihuZXcgTW91c2VBZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgbW91c2VSZWxlYXNlZChNb3VzZUV2ZW50IGV2KSB7CisJCQkJaGlkZURpYWxvZygpOworCQkJfQorCQl9KTsKKwkJCisJCS8vZGlhbG9nLnZhbGlkYXRlKCk7CisJCWRpYWxvZy5wYWNrKCk7CisJCVBvaW50IHBhcmVudExvYyA9IGRpYWxvZy5nZXRQYXJlbnQoKS5nZXRMb2NhdGlvbigpOworCQlkaWFsb2cuc2V0TG9jYXRpb24obmV3IFBvaW50KHBhcmVudExvYy54ICsgNTAsIHBhcmVudExvYy55ICsgNTApKTsKKwkJZGlhbG9nLnNldFJlc2l6YWJsZShmYWxzZSk7CisJfQorCQorCXByaXZhdGUgc3RhdGljIHZvaWQgaGlkZURpYWxvZygpIHsKKwkJZGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworCQlkaWFsb2cuZGlzcG9zZSgpOworCQlkaWFsb2cgPSBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVHcm91cENyZWF0aW9uRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhZDIxMgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm0uZ3VpOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICogQSBkaWFsb2cgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIGNyZWF0ZSBhIG5ldyBCdW5kbGUgR3JvdXAKKyAqLworY2xhc3MgQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZyBleHRlbmRzIEpEaWFsb2cgeworCVJCTWFuYWdlciByYm07CisJCisJLy8gSGVscGVyIGRhdGEKKwlpbnQgbGVmdF9jb2xfd2lkdGggPSAxMjU7CisJaW50IHJpZ2h0X2NvbF93aWR0aCA9IDI3NTsKKwlpbnQgcm93X2hlaWdodCA9IDI1OworCURpbWVuc2lvbiBsZWZ0RGltID0gbmV3IERpbWVuc2lvbihsZWZ0X2NvbF93aWR0aCwgcm93X2hlaWdodCk7CisJRGltZW5zaW9uIHJpZ2h0RGltID0gbmV3IERpbWVuc2lvbihyaWdodF9jb2xfd2lkdGgsIHJvd19oZWlnaHQpOworCQorCS8vIENvbXBvbmVudHMKKwlCb3ggbWFpbkJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJQm94IGJveDEgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3gyID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94MyA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJCisJSlRleHRBcmVhIGluc3RydWN0aW9uc0FyZWEgPSBuZXcgSlRleHRBcmVhKCIiKTsKKwlKTGFiZWwgbmFtZUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19ncm91cCIpKTsKKwlKTGFiZWwgY29tbWVudExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19ncm91cF9jb21tZW50IikpOworCUpUZXh0RmllbGQgbmFtZUZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpUZXh0RmllbGQgY29tbWVudEZpZWxkID0gbmV3IEpUZXh0RmllbGQoIiIpOworCUpCdXR0b24gY3JlYXRlQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY3JlYXRlIikpOworCUpCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY2FuY2VsIikpOworCQorCQorCXB1YmxpYyBCdW5kbGVHcm91cENyZWF0aW9uRGlhbG9nKFJCTWFuYWdlciByYm0sIEpGcmFtZSBmcmFtZSwgU3RyaW5nIHRpdGxlLCBib29sZWFuIG1vZGFsKSB7CisJCXN1cGVyKGZyYW1lLCB0aXRsZSwgbW9kYWwpOworCQl0aGlzLnJibSA9IHJibTsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwkJZW5hYmxlRXZlbnRzKEFXVEV2ZW50LktFWV9FVkVOVF9NQVNLKTsKKwl9CisJCisJYm9vbGVhbiBjcmVhdGVHcm91cCgpIHsKKwkJaWYgKHJibSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisJCXJldHVybiByYm0uY3JlYXRlR3JvdXAobmFtZUZpZWxkLmdldFRleHQoKS50cmltKCksIGNvbW1lbnRGaWVsZC5nZXRUZXh0KCkudHJpbSgpKTsKKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2KSB7CisJCWlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfRU5URVIpIHsKKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGNyZWF0ZUdyb3VwKCk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2NyZWF0ZV9ncm91cCIpICsgIiAiICsKKwkJCQkJCQkgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3RyeV9hZ2Fpbl9ncm91cCIpOworCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJfSBlbHNlIHsKKwkJCQlzZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQlkaXNwb3NlKCk7CisJCQl9CisJCX0gZWxzZSBpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0NBTkNFTCkgeworCQkJY2xvc2VXaW5kb3coKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgaW5pdENvbXBvbmVudHMoKXsKKwkJLy8gRXJyb3IgY2hlY2sKKwkJaWYgKHJibSA9PSBudWxsKSB7CisJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX25vX2J1bmRsZV9mb3JfZ3JvdXAiKTsKKwkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJY2xvc2VXaW5kb3coKTsKKwkJCXJldHVybjsKKwkJfQorCQkKKwkJLy8gSW5pdGlhbGl6ZSB2YWx1ZXMKKwkJCisJCS8vIFNldCB1cCB0aGUgY29tcG9uZW50cworCQluYW1lTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJbmFtZUZpZWxkLnNldENvbHVtbnMoMzApOworCQljb21tZW50TGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJY29tbWVudEZpZWxkLnNldENvbHVtbnMoMzApOworCQlnZXRSb290UGFuZSgpLnNldERlZmF1bHRCdXR0b24oY3JlYXRlQnV0dG9uKTsKKwkJCisJCWJveDEuYWRkKG5hbWVMYWJlbCk7IGJveDEuYWRkKG5hbWVGaWVsZCk7CisJCWJveDIuYWRkKGNvbW1lbnRMYWJlbCk7IGJveDIuYWRkKGNvbW1lbnRGaWVsZCk7CisJCWJveDMuYWRkKGNyZWF0ZUJ1dHRvbik7CisJCWJveDMuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlib3gzLmFkZChjYW5jZWxCdXR0b24pOworCQkKKwkJaW5zdHJ1Y3Rpb25zQXJlYS5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSk7CisJCQorCQkvLyBBZGQgdGhlIGFwcHJvcHJpYXRlIGxpc3RlbmVycworCQljYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJSkRpYWxvZyBkaWFsb2cgPSAoSkRpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJfQorCQl9KTsKKwkJCisJCWNyZWF0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlCdW5kbGVHcm91cENyZWF0aW9uRGlhbG9nIGRpYWxvZyA9CisJCQkJCShCdW5kbGVHcm91cENyZWF0aW9uRGlhbG9nKSgoSkJ1dHRvbilldi5nZXRTb3VyY2UoKSkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCk7CisJCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlhbG9nLmNyZWF0ZUdyb3VwKCk7CisJCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJCVN0cmluZyBhbGVydCA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfY3JlYXRlX2dyb3VwIikgKyAiICIgKworCQkJCQkJCQkgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3RyeV9hZ2Fpbl9ncm91cCIpOworCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhkaWFsb2csIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCX0gZWxzZSB7CisJCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkJZGlhbG9nLmRpc3Bvc2UoKTsKKwkJCQl9CisJCQl9CisJCX0pOworCQkKKwkJLy8gQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBmcmFtZQorCQlzZXRMb2NhdGlvbihuZXcgamF2YS5hd3QuUG9pbnQoNTAsIDUwKSk7CisJCW1haW5Cb3gucmVtb3ZlQWxsKCk7CisJCW1haW5Cb3guYWRkKGJveDEpOworCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCW1haW5Cb3guYWRkKGJveDIpOworCQlnZXRDb250ZW50UGFuZSgpLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQlnZXRDb250ZW50UGFuZSgpLnJlbW92ZUFsbCgpOworCQkvL2dldENvbnRlbnRQYW5lKCkuYWRkKGluc3RydWN0aW9uc0FyZWEsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCWdldENvbnRlbnRQYW5lKCkuYWRkKG1haW5Cb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQlnZXRDb250ZW50UGFuZSgpLmFkZChib3gzLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQl2YWxpZGF0ZVRyZWUoKTsKKwkJcGFjaygpOworCQlzZXRWaXNpYmxlKHRydWUpOworCQkvL3NldFJlc2l6YWJsZShmYWxzZSk7CisJfQorCQorCXZvaWQgY2xvc2VXaW5kb3coKSB7CisJCXNldFZpc2libGUoZmFsc2UpOworCQlkaXNwb3NlKCk7CisJfQorfQorCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0J1bmRsZUdyb3VwRWRpdERpYWxvZy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVHcm91cEVkaXREaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjc0YmVkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVHcm91cEVkaXREaWFsb2cuamF2YQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIEEgZGlhbG9nIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgYSBuZXcgQnVuZGxlIEdyb3VwCisgKi8KK2NsYXNzIEJ1bmRsZUdyb3VwRWRpdERpYWxvZyBleHRlbmRzIEpEaWFsb2cgeworCUJ1bmRsZUdyb3VwIGdyb3VwOworCQorCS8vIEhlbHBlciBkYXRhCisJaW50IGxlZnRfY29sX3dpZHRoID0gMTI1OworCWludCByaWdodF9jb2xfd2lkdGggPSAyNzU7CisJaW50IHJvd19oZWlnaHQgPSAyNTsKKwlEaW1lbnNpb24gbGVmdERpbSA9IG5ldyBEaW1lbnNpb24obGVmdF9jb2xfd2lkdGgsIHJvd19oZWlnaHQpOworCURpbWVuc2lvbiByaWdodERpbSA9IG5ldyBEaW1lbnNpb24ocmlnaHRfY29sX3dpZHRoLCByb3dfaGVpZ2h0KTsKKwkKKwkvLyBDb21wb25lbnRzCisJQm94IG1haW5Cb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCUJveCBib3gxID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94MiA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDMgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCQorCUpMYWJlbCBuYW1lTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2dyb3VwIikpOworCUpMYWJlbCBjb21tZW50TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2dyb3VwX2NvbW1lbnQiKSk7CisJSlRleHRGaWVsZCBuYW1lRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBjb21tZW50RmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSkJ1dHRvbiBlZGl0QnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZWRpdCIpKTsKKwlKQnV0dG9uIGNhbmNlbEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NhbmNlbCIpKTsKKwkKKwkKKwlwdWJsaWMgQnVuZGxlR3JvdXBFZGl0RGlhbG9nKEJ1bmRsZUdyb3VwIGdyb3VwLCBKRnJhbWUgZnJhbWUsIFN0cmluZyB0aXRsZSwgYm9vbGVhbiBtb2RhbCkgeworCQlzdXBlcihmcmFtZSwgdGl0bGUsIG1vZGFsKTsKKwkJdGhpcy5ncm91cCA9IGdyb3VwOworCQlpbml0Q29tcG9uZW50cygpOworCQllbmFibGVFdmVudHMoQVdURXZlbnQuS0VZX0VWRU5UX01BU0spOworCX0KKwkKKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzS2V5RXZlbnQoS2V5RXZlbnQgZXYpIHsKKwkJaWYgKGV2LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19FTlRFUikgeworCQkJYm9vbGVhbiBzdWNjZXNzID0gZWRpdEdyb3VwKCk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX21vZGlmeV9ncm91cCIpOworCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2ludGVybmFsIiksCisJCQkJCQkJCQkJCSAgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQl9IGVsc2UgeworCQkJCXNldFZpc2libGUoZmFsc2UpOworCQkJCWRpc3Bvc2UoKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfQ0FOQ0VMKSB7CisJCQljbG9zZVdpbmRvdygpOworCQl9CisJfQorCQorCWJvb2xlYW4gZWRpdEdyb3VwKCkgeworCQlpZiAoZ3JvdXAgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlncm91cC5zZXROYW1lKG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpKTsKKwkJZ3JvdXAuc2V0Q29tbWVudChjb21tZW50RmllbGQuZ2V0VGV4dCgpLnRyaW0oKSk7CisJCXJldHVybiB0cnVlOworCX0KKwkKKwlwcml2YXRlIHZvaWQgaW5pdENvbXBvbmVudHMoKXsKKwkJLy8gRXJyb3IgY2hlY2sKKwkJaWYgKGdyb3VwID09IG51bGwpIHsKKwkJCVN0cmluZyBhbGVydCA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfbW9kaWZ5X2dyb3VwIik7CisJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9pbnRlcm5hbCIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCWNsb3NlV2luZG93KCk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCS8vIEluaXRpYWxpemUgdmFsdWVzCisJCQorCQkvLyBTZXQgdXAgdGhlIGNvbXBvbmVudHMKKwkJbmFtZUxhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCW5hbWVGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJY29tbWVudExhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCWNvbW1lbnRGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJCisJCW5hbWVGaWVsZC5zZXRUZXh0KGdyb3VwLmdldE5hbWUoKSk7CisJCWNvbW1lbnRGaWVsZC5zZXRUZXh0KGdyb3VwLmdldENvbW1lbnQoKSk7CisJCWdldFJvb3RQYW5lKCkuc2V0RGVmYXVsdEJ1dHRvbihlZGl0QnV0dG9uKTsKKwkJCisJCWJveDEuYWRkKG5hbWVMYWJlbCk7IGJveDEuYWRkKG5hbWVGaWVsZCk7CisJCWJveDIuYWRkKGNvbW1lbnRMYWJlbCk7IGJveDIuYWRkKGNvbW1lbnRGaWVsZCk7CisJCWJveDMuYWRkKGVkaXRCdXR0b24pOworCQlib3gzLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJYm94My5hZGQoY2FuY2VsQnV0dG9uKTsKKwkJCisJCS8vIEFkZCB0aGUgYXBwcm9wcmlhdGUgbGlzdGVuZXJzCisJCWNhbmNlbEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlKRGlhbG9nIGRpYWxvZyA9IChKRGlhbG9nKSgoSkJ1dHRvbilldi5nZXRTb3VyY2UoKSkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCk7CisJCQkJZGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworCQkJCWRpYWxvZy5kaXNwb3NlKCk7CisJCQl9CisJCX0pOworCQkKKwkJZWRpdEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlCdW5kbGVHcm91cEVkaXREaWFsb2cgZGlhbG9nID0KKwkJCQkJKEJ1bmRsZUdyb3VwRWRpdERpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCWJvb2xlYW4gc3VjY2VzcyA9IGRpYWxvZy5lZGl0R3JvdXAoKTsKKwkJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQkJU3RyaW5nIGFsZXJ0ID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9tb2RpZnlfZ3JvdXAiKTsKKwkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2coZGlhbG9nLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9pbnRlcm5hbCIpLAorCQkJCQkJCQkJCQkJICBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCWRpYWxvZy5kaXNwb3NlKCk7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCS8vIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZnJhbWUKKwkJc2V0TG9jYXRpb24obmV3IGphdmEuYXd0LlBvaW50KDUwLCA1MCkpOworCQltYWluQm94LnJlbW92ZUFsbCgpOworCQltYWluQm94LmFkZChib3gxKTsKKwkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQltYWluQm94LmFkZChib3gyKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5yZW1vdmVBbGwoKTsKKwkJZ2V0Q29udGVudFBhbmUoKS5hZGQobWFpbkJveCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCWdldENvbnRlbnRQYW5lKCkuYWRkKGJveDMsIEJvcmRlckxheW91dC5TT1VUSCk7CisJCXZhbGlkYXRlVHJlZSgpOworCQlwYWNrKCk7CisJCXNldFZpc2libGUodHJ1ZSk7CisJCS8vc2V0UmVzaXphYmxlKGZhbHNlKTsKKwl9CisJCisJdm9pZCBjbG9zZVdpbmRvdygpIHsKKwkJc2V0VmlzaWJsZShmYWxzZSk7CisJCWRpc3Bvc2UoKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0J1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzNiYWQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0J1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNywgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm0uZ3VpOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmEudXRpbC4qOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICogQSBkaWFsb2cgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIGNyZWF0ZSBhIG5ldyBCdW5kbGUgSXRlbQorICovCitjbGFzcyBCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2cgZXh0ZW5kcyBKRGlhbG9nIHsKKwlSQk1hbmFnZXIgcmJtOworCVN0cmluZyBncm91cE5hbWU7CisJQnVuZGxlSXRlbSBpdGVtOworCWJvb2xlYW4gZmlyc3RJbml0ID0gdHJ1ZTsKKwkKKwkvLyBIZWxwZXIgZGF0YQorCWludCBsZWZ0X2NvbF93aWR0aCA9IDEyNTsKKwlpbnQgcmlnaHRfY29sX3dpZHRoID0gMjc1OworCWludCByb3dfaGVpZ2h0ID0gMjU7CisJRGltZW5zaW9uIGxlZnREaW0gPSBuZXcgRGltZW5zaW9uKGxlZnRfY29sX3dpZHRoLCByb3dfaGVpZ2h0KTsKKwlEaW1lbnNpb24gcmlnaHREaW0gPSBuZXcgRGltZW5zaW9uKHJpZ2h0X2NvbF93aWR0aCwgcm93X2hlaWdodCk7CisJCisJLy8gQ29tcG9uZW50cworCUJveCBtYWluQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwlCb3ggYm94MSA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDIgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3gzID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94NCA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDUgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3g2ID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwkKKwlKTGFiZWwgaW5zdHJ1Y3Rpb25zTGFiZWwgPSBuZXcgSkxhYmVsKCIiKTsKKwlKTGFiZWwgZ3JvdXBMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZ3JvdXAiKSk7CisJSkxhYmVsIG5hbWVMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfa2V5IikpOworCUpMYWJlbCB0cmFuc0xhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190cmFuc2xhdGlvbiIpKTsKKwlKTGFiZWwgY29tbWVudExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19jb21tZW50IikpOworCUpMYWJlbCBsb29rdXBMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfbG9va3VwcyIpKTsKKwkKKwlKQ29tYm9Cb3ggZ3JvdXBDb21ib0JveCA9IG5ldyBKQ29tYm9Cb3goKTsKKwlKVGV4dEZpZWxkIG5hbWVGaWVsZCA9IG5ldyBKVGV4dEZpZWxkKCIiKTsKKwlKVGV4dEZpZWxkIHRyYW5zRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBjb21tZW50RmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBsb29rdXBGaWVsZHNbXSA9IG51bGw7CisJSkxhYmVsIG5vTG9va3VwTGFiZWwgPSBudWxsOworCUJveCBsb29rdXBCb3ggPSBudWxsOworCUJveCBsb29rdXBCb3hlc1tdID0gbnVsbDsKKwlKTGFiZWwgbG9va3VwTGFiZWxzW10gPSBudWxsOworCQorCUpCdXR0b24gY3JlYXRlQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY3JlYXRlIikpOworCUpCdXR0b24gY3JlYXRlTW9yZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZV9tb3JlIikpOworCUpCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY2FuY2VsIikpOworCQorCUhhc2h0YWJsZSBsb29rdXBzID0gbmV3IEhhc2h0YWJsZSgpOworCQorCXB1YmxpYyBCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2coUkJNYW5hZ2VyIHJibSwgSkZyYW1lIGZyYW1lLCBTdHJpbmcgdGl0bGUsIGJvb2xlYW4gbW9kYWwpIHsKKwkJc3VwZXIoZnJhbWUsIHRpdGxlLCBtb2RhbCk7CisJCXRoaXMucmJtID0gcmJtOworCQlncm91cE5hbWUgPSBudWxsOworCQlpdGVtID0gbnVsbDsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwl9CisJCisJcHVibGljIEJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZyhTdHJpbmcgZ3JvdXBOYW1lLCBSQk1hbmFnZXIgcmJtLCBKRnJhbWUgZnJhbWUsIFN0cmluZyB0aXRsZSwgYm9vbGVhbiBtb2RhbCkgeworCQlzdXBlcihmcmFtZSwgdGl0bGUsIG1vZGFsKTsKKwkJdGhpcy5yYm0gPSByYm07CisJCXRoaXMuZ3JvdXBOYW1lID0gZ3JvdXBOYW1lOworCQlpdGVtID0gbnVsbDsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwl9CisJCisJcHVibGljIEJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZyhCdW5kbGVJdGVtIGl0ZW0sIFJCTWFuYWdlciByYm0sIEpGcmFtZSBmcmFtZSwgU3RyaW5nIHRpdGxlLCBib29sZWFuIG1vZGFsKSB7CisJCXN1cGVyKGZyYW1lLCB0aXRsZSwgbW9kYWwpOworCQl0aGlzLml0ZW0gPSBpdGVtOworCQl0aGlzLnJibSA9IHJibTsKKwkJZ3JvdXBOYW1lID0gaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldE5hbWUoKTsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwl9CisJCisJYm9vbGVhbiBjcmVhdGVJdGVtKCkgeworCQlpZiAocmJtID09IG51bGwpIHJldHVybiBmYWxzZTsKKwkJSGFzaHRhYmxlIGxvb2t1cEhhc2ggPSBuZXcgSGFzaHRhYmxlKCk7CisJCWlmIChsb29rdXBCb3hlcyAhPSBudWxsKSB7CisJCQlmb3IgKGludCBpPTA7IGkgPCBsb29rdXBCb3hlcy5sZW5ndGg7IGkrKykgeworCQkJCVN0cmluZyBuYW1lVGV4dCA9IGxvb2t1cExhYmVsc1tpXS5nZXRUZXh0KCkudHJpbSgpOworCQkJCVN0cmluZyBuYW1lID0gbmFtZVRleHQuc3Vic3RyaW5nKG5hbWVUZXh0LmluZGV4T2YoInsiKSsxLG5hbWVUZXh0LmluZGV4T2YoIn0iKSk7CisJCQkJU3RyaW5nIHZhbHVlID0gbG9va3VwRmllbGRzW2ldLmdldFRleHQoKS50cmltKCk7CisJCQkJbG9va3VwSGFzaC5wdXQobmFtZSx2YWx1ZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJibS5jcmVhdGVJdGVtKG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpLCB0cmFuc0ZpZWxkLmdldFRleHQoKS50cmltKCksCisJCQkJCQkJICAoKEJ1bmRsZUdyb3VwKWdyb3VwQ29tYm9Cb3guZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldE5hbWUoKSwKKwkJCQkJCQkgIGNvbW1lbnRGaWVsZC5nZXRUZXh0KCkudHJpbSgpLCBsb29rdXBIYXNoKTsKKwl9CisJCisJYm9vbGVhbiBlZGl0SXRlbSgpIHsKKwkJaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlIYXNodGFibGUgbG9va3VwSGFzaCA9IG5ldyBIYXNodGFibGUoKTsKKwkJaWYgKGxvb2t1cEJveGVzICE9IG51bGwpIHsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGxvb2t1cEJveGVzLmxlbmd0aDsgaSsrKSB7CisJCQkJU3RyaW5nIG5hbWVUZXh0ID0gbG9va3VwTGFiZWxzW2ldLmdldFRleHQoKS50cmltKCk7CisJCQkJU3RyaW5nIG5hbWUgPSBuYW1lVGV4dC5zdWJzdHJpbmcobmFtZVRleHQuaW5kZXhPZigieyIpKzEsbmFtZVRleHQuaW5kZXhPZigifSIpKTsKKwkJCQlTdHJpbmcgdmFsdWUgPSBsb29rdXBGaWVsZHNbaV0uZ2V0VGV4dCgpLnRyaW0oKTsKKwkJCQlsb29rdXBIYXNoLnB1dChuYW1lLHZhbHVlKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmJtLmVkaXRJdGVtKGl0ZW0sIG5hbWVGaWVsZC5nZXRUZXh0KCkudHJpbSgpLAorCQkJCQkJCXRyYW5zRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwgKChCdW5kbGVHcm91cClncm91cENvbWJvQm94LmdldFNlbGVjdGVkSXRlbSgpKS5nZXROYW1lKCksCisJCQkJCQkJY29tbWVudEZpZWxkLmdldFRleHQoKS50cmltKCksIGxvb2t1cEhhc2gpOyAKKwl9CisJCisJcHJpdmF0ZSB2b2lkIGNsZWFyQ29tcG9uZW50cygpIHsKKwkJbmFtZUZpZWxkLnNldFRleHQoIiIpOworCQl0cmFuc0ZpZWxkLnNldFRleHQoIiIpOworCQljb21tZW50RmllbGQuc2V0VGV4dCgiIik7CisJCWluaXRDb21wb25lbnRzKCk7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIHByb2Nlc3NLZXlFdmVudChLZXlFdmVudCBldikgeworCQlpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0VOVEVSICYmIGV2LmdldElEKCkgPT0gS2V5RXZlbnQuS0VZX1JFTEVBU0VEKSB7CisJCQlpZiAodHJhbnNGaWVsZC5oYXNGb2N1cygpKSB7CisJCQkJLy8gSWYgd2UgYXJlIGluIHRoZSB0cmFuc2xhdGlvbiBmaWVsZCwgdGhlbiBlbnRlciBzaG91bGQgY3JlYXRlIGEgbmV3IGxpbmUgY2hhcmFjdGVyLCBub3QgZXhpdCB0aGUgZGlhbG9nCisJCQkJaW50IGNhcmV0UG9zID0gdHJhbnNGaWVsZC5nZXRDYXJldFBvc2l0aW9uKCk7CisJCQkJU3RyaW5nIG9sZFRleHQgPSB0cmFuc0ZpZWxkLmdldFRleHQoKTsKKwkJCQl0cmFuc0ZpZWxkLnNldFRleHQob2xkVGV4dC5zdWJzdHJpbmcoMCxjYXJldFBvcykgKyAiXG4iICsgb2xkVGV4dC5zdWJzdHJpbmcoY2FyZXRQb3Msb2xkVGV4dC5sZW5ndGgoKSkpOworCQkJCXRyYW5zRmllbGQuc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcysxKTsKKwkJCQl2YWxpZGF0ZSgpOworCQkJCXNldFNpemUoZ2V0UHJlZmVycmVkU2l6ZSgpKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQkKKwkJCUJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZyBkaWFsb2cgPSB0aGlzOworCQkJYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CisJCQlpZiAoZGlhbG9nLml0ZW0gPT0gbnVsbCkgc3VjY2VzcyA9IGRpYWxvZy5jcmVhdGVJdGVtKCk7CisJCQllbHNlIHN1Y2Nlc3MgPSBkaWFsb2cuZWRpdEl0ZW0oKTsKKwkJCWlmICghc3VjY2VzcykgeworCQkJCVN0cmluZyBhbGVydCA9IChpdGVtID09IG51bGwgPyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2NyZWF0ZV9pdGVtIikgOgorCQkJCQkJCQkJCQkgICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX21vZGlmeV9pdGVtIikpOworCQkJCWFsZXJ0ICs9ICIgIiArIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfdHJ5X2FnYWluX2l0ZW0iKTsKKwkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhkaWFsb2csIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksCisJCQkJCQkJCQkJCSAgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQl9IGVsc2UgeworCQkJCSgoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkudXBkYXRlRGlzcGxheVBhbmVscygpOworCQkJCSgoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkuaW52YWxpZGF0ZSgpOworCQkJCS8vKChSQk1hbmFnZXJHVUkpZGlhbG9nLmdldFBhcmVudCgpKS52YWxpZGF0ZU15VHJlZSgpOworCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJfQorCQl9IGVsc2UgaWYgKGV2LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19FU0NBUEUpIHsKKwkJCWNsb3NlV2luZG93KCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCl7CisJCWVuYWJsZUV2ZW50cyhBV1RFdmVudC5LRVlfRVZFTlRfTUFTSyk7CisJCS8vIEVycm9yIGNoZWNrCisJCWlmIChyYm0gPT0gbnVsbCB8fCByYm0uZ2V0QnVuZGxlcygpID09IG51bGwpIHsKKwkJCVN0cmluZyBhbGVydCA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3Jfbm9fYnVuZGxlX2Zvcl9pdGVtIik7CisJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCWNsb3NlV2luZG93KCk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCS8vIEluaXRpYWxpemUgdmFsdWVzCisJCUJ1bmRsZSBtYWluQnVuZGxlID0gKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmZpcnN0RWxlbWVudCgpOworCQlpZiAoZmlyc3RJbml0KSB7CisJCQlncm91cENvbWJvQm94ID0gbmV3IEpDb21ib0JveChtYWluQnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCkpOworCQkJaWYgKGdyb3VwTmFtZSAhPSBudWxsKSB7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cENvbWJvQm94LmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKwkJCQkJQnVuZGxlR3JvdXAgYmcgPSAoQnVuZGxlR3JvdXApZ3JvdXBDb21ib0JveC5nZXRJdGVtQXQoaSk7CisJCQkJCWlmIChiZy5nZXROYW1lKCkuZXF1YWxzKGdyb3VwTmFtZSkpIHsKKwkJCQkJCWdyb3VwQ29tYm9Cb3guc2V0U2VsZWN0ZWRJbmRleChpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCisJCWlmIChmaXJzdEluaXQgJiYgaXRlbSAhPSBudWxsKSB7CisJCQkvLyBXZSBhcmUgZWRpdGluZywgbm90IGNyZWF0aW5nIGFuIGl0ZW0KKwkJCWNyZWF0ZUJ1dHRvbi5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2VkaXQiKSk7CisJCQljcmVhdGVNb3JlQnV0dG9uLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZWRpdF9tb3JlIikpOworCQkJaWYgKGl0ZW0uZ2V0S2V5KCkgIT0gbnVsbCkgbmFtZUZpZWxkLnNldFRleHQoaXRlbS5nZXRLZXkoKSk7CisJCQlpZiAoaXRlbS5nZXRDb21tZW50KCkgIT0gbnVsbCkgY29tbWVudEZpZWxkLnNldFRleHQoaXRlbS5nZXRDb21tZW50KCkpOworCQkJaWYgKGl0ZW0uZ2V0VHJhbnNsYXRpb24oKSAhPSBudWxsKSB0cmFuc0ZpZWxkLnNldFRleHQoaXRlbS5nZXRUcmFuc2xhdGlvbigpKTsKKwkJCWlmIChpdGVtLmdldExvb2t1cHMoKSAhPSBudWxsKSBsb29rdXBzID0gaXRlbS5nZXRMb29rdXBzKCk7CisJCX0KKwkJCisJCVN0cmluZyBjdXJyZW50VHJhbnMgPSB0cmFuc0ZpZWxkLmdldFRleHQoKTsKKwkJLy8gKiogTE9PS1VQUyAqKgorCQkvLyBVcGRhdGUgdGhlIGxvb2t1cHMgaWYgbmVjZXNzYXJ5CisJCWlmIChsb29rdXBCb3hlcyAhPSBudWxsKSB7CisJCQlmb3IgKGludCBpPTA7IGkgPCBsb29rdXBCb3hlcy5sZW5ndGg7IGkrKykgeworCQkJCVN0cmluZyBuYW1lVGV4dCA9IGxvb2t1cExhYmVsc1tpXS5nZXRUZXh0KCkudHJpbSgpOworCQkJCVN0cmluZyBuYW1lID0gbmFtZVRleHQuc3Vic3RyaW5nKG5hbWVUZXh0LmluZGV4T2YoInsiKSsxLG5hbWVUZXh0LmluZGV4T2YoIn0iKSk7CisJCQkJU3RyaW5nIHZhbHVlID0gbG9va3VwRmllbGRzW2ldLmdldFRleHQoKS50cmltKCk7CisJCQkJbG9va3Vwcy5wdXQobmFtZSx2YWx1ZSk7CisJCQl9CisJCX0KKwkJLy8gUmVtb3ZlIG9sZCBsb29rdXBzIGlmIG5lY2Vzc2FyeQorCQlFbnVtZXJhdGlvbiBrZXlzID0gbG9va3Vwcy5rZXlzKCk7CisJCXdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQlTdHJpbmcgbmFtZSA9IChTdHJpbmcpa2V5cy5uZXh0RWxlbWVudCgpOworCQkJaWYgKGN1cnJlbnRUcmFucy5pbmRleE9mKCJ7IiArIG5hbWUgKyAifSIpIDwgMCkgeworCQkJCWxvb2t1cHMucmVtb3ZlKG5hbWUpOworCQkJfQorCQl9CisJCS8vIEFkZCBuZXcgbG9va3VwcyBpZiBuZWNjZXNhcnkKKwkJaWYgKGN1cnJlbnRUcmFucyAhPSBudWxsICYmIGN1cnJlbnRUcmFucy5pbmRleE9mKCJ7IikgPj0gMCkgeworCQkJd2hpbGUgKGN1cnJlbnRUcmFucy5pbmRleE9mKCJ7IikgPj0gMCkgeworCQkJCWN1cnJlbnRUcmFucyA9IGN1cnJlbnRUcmFucy5zdWJzdHJpbmcoY3VycmVudFRyYW5zLmluZGV4T2YoInsiKSsxLGN1cnJlbnRUcmFucy5sZW5ndGgoKSk7CisJCQkJU3RyaW5nIG5hbWUgPSBjdXJyZW50VHJhbnMuc3Vic3RyaW5nKDAsY3VycmVudFRyYW5zLmluZGV4T2YoIn0iKSk7CisJCQkJaWYgKCFsb29rdXBzLmNvbnRhaW5zS2V5KG5hbWUpKSB7CisJCQkJCWxvb2t1cHMucHV0KG5hbWUsIiIpOworCQkJCX0KKwkJCX0KKwkJfQorCQkvLyBSZW1vdmUgY29tcG9uZW50cworCQlib3g1LnJlbW92ZUFsbCgpOworCQkKKwkJLy8gTm93IGNyZWF0ZSB0aGUgdmlzdWFsIGNvbXBvbmVudHMgZm9yIHRoZSBsb29rdXBzCisJCWlmIChsb29rdXBzLnNpemUoKSA+IDApIHsKKwkJCW5vTG9va3VwTGFiZWwgPSBudWxsOworCQkJbG9va3VwQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJCWxvb2t1cEJveGVzID0gbmV3IEJveFtsb29rdXBzLnNpemUoKV07CisJCQlsb29rdXBGaWVsZHMgPSBuZXcgSlRleHRGaWVsZFtsb29rdXBzLnNpemUoKV07CisJCQlsb29rdXBMYWJlbHMgPSBuZXcgSkxhYmVsW2xvb2t1cHMuc2l6ZSgpXTsKKwkJCWludCBjb3VudCA9IDA7CisJCQlrZXlzID0gbG9va3Vwcy5rZXlzKCk7CisJCQl3aGlsZSAoa2V5cy5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJCVN0cmluZyBuYW1lID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisJCQkJU3RyaW5nIHZhbHVlID0gKFN0cmluZylsb29rdXBzLmdldChuYW1lKTsKKwkJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIkxvb2t1cDogIiArIG5hbWUgKyAiIC0+ICIgKyB2YWx1ZSk7CisJCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKGxvb2t1cHMudG9TdHJpbmcoKSk7CisJCQkJbG9va3VwQm94ZXNbY291bnRdID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwkJCQlsb29rdXBGaWVsZHNbY291bnRdID0gbmV3IEpUZXh0RmllbGQoKHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlKSk7CisJCQkJbG9va3VwTGFiZWxzW2NvdW50XSA9IG5ldyBKTGFiZWwoInsiICsgbmFtZSArICJ9Iik7CisJCQkJbG9va3VwQm94ZXNbY291bnRdLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbEdsdWUoKSk7CisJCQkJbG9va3VwQm94ZXNbY291bnRdLmFkZChsb29rdXBMYWJlbHNbY291bnRdKTsKKwkJCQlsb29rdXBCb3hlc1tjb3VudF0uYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQkJCWxvb2t1cEJveGVzW2NvdW50XS5hZGQobG9va3VwRmllbGRzW2NvdW50XSk7CisJCQkJbG9va3VwQm94LmFkZChsb29rdXBCb3hlc1tjb3VudF0pOworCQkJCWNvdW50Kys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlsb29rdXBCb3ggPSBudWxsOworCQkJbG9va3VwQm94ZXMgPSBudWxsOworCQkJbG9va3VwRmllbGRzID0gbnVsbDsKKwkJCWxvb2t1cExhYmVscyA9IG51bGw7CisJCQlub0xvb2t1cExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm5vbmUiKSk7CisJCX0KKwkJCisJCS8vIFNldCB1cCB0aGUgY29tcG9uZW50cworCQlpZiAoZmlyc3RJbml0KSB7CisJCQlncm91cExhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCQlncm91cENvbWJvQm94LnNldFByZWZlcnJlZFNpemUocmlnaHREaW0pOworCQkJbmFtZUxhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCQluYW1lRmllbGQuc2V0Q29sdW1ucygzMCk7CisJCQljb21tZW50TGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJCWNvbW1lbnRGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJCXRyYW5zTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJCXRyYW5zRmllbGQuc2V0Q29sdW1ucygzMCk7CisJCQlsb29rdXBMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQkJCisJCQlib3gxLmFkZChncm91cExhYmVsKTsgYm94MS5hZGQoZ3JvdXBDb21ib0JveCk7CisJCQlib3gyLmFkZChuYW1lTGFiZWwpOyBib3gyLmFkZChuYW1lRmllbGQpOworCQkJYm94NC5hZGQoY29tbWVudExhYmVsKTsgYm94NC5hZGQoY29tbWVudEZpZWxkKTsKKwkJCWJveDMuYWRkKHRyYW5zTGFiZWwpOyBib3gzLmFkZCh0cmFuc0ZpZWxkKTsKKwkJCQorCQkJY3JlYXRlQnV0dG9uLnNldE1uZW1vbmljKFJCTWFuYWdlck1lbnVCYXIuZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY3JlYXRlX3RyaWdnZXIiKSkpOworCQkJY3JlYXRlTW9yZUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZV9tb3JlX3RyaWdnZXIiKSkpOworCQkJZ2V0Um9vdFBhbmUoKS5zZXREZWZhdWx0QnV0dG9uKGNyZWF0ZUJ1dHRvbik7CisJCX0KKwkJYm94NS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOyBib3g1LmFkZChsb29rdXBMYWJlbCk7IGJveDUuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlpZiAobm9Mb29rdXBMYWJlbCAhPSBudWxsKSB7CisJCQlub0xvb2t1cExhYmVsLnNldFByZWZlcnJlZFNpemUocmlnaHREaW0pOworCQkJYm94NS5hZGQobm9Mb29rdXBMYWJlbCk7CisJCX0KKwkJZWxzZQorCQkJYm94NS5hZGQobG9va3VwQm94KTsKKwkJaWYgKGZpcnN0SW5pdCkgeworCQkJYm94Ni5hZGQoY3JlYXRlQnV0dG9uKTsKKwkJCWJveDYuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQkJaWYgKGl0ZW0gPT0gbnVsbCkKKwkJCQlib3g2LmFkZChjcmVhdGVNb3JlQnV0dG9uKTsKKwkJCWJveDYuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQkJYm94Ni5hZGQoY2FuY2VsQnV0dG9uKTsKKwkJfQorCQkKKwkJaW5zdHJ1Y3Rpb25zTGFiZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCkpOworCQkKKwkJLy8gQWRkIHRoZSBhcHByb3ByaWF0ZSBsaXN0ZW5lcnMKKwkJaWYgKGZpcnN0SW5pdCkgeworCQkJY2FuY2VsQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJSkRpYWxvZyBkaWFsb2cgPSAoSkRpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCQlkaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCWRpYWxvZy5kaXNwb3NlKCk7CisJCQkJfQorCQkJfSk7CisJCQorCQkJY3JlYXRlQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nIGRpYWxvZyA9CisJCQkJCQkoQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nKSgoSkJ1dHRvbilldi5nZXRTb3VyY2UoKSkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCk7CisJCQkJCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOworCQkJCQlpZiAoZGlhbG9nLml0ZW0gPT0gbnVsbCkgc3VjY2VzcyA9IGRpYWxvZy5jcmVhdGVJdGVtKCk7CisJCQkJCWVsc2Ugc3VjY2VzcyA9IGRpYWxvZy5lZGl0SXRlbSgpOworCQkJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQkJCVN0cmluZyBhbGVydCA9IChpdGVtID09IG51bGwgPyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2NyZWF0ZV9pdGVtIikgOgorCQkJCQkJCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfbW9kaWZ5X2l0ZW0iKSk7CisJCQkJCQlhbGVydCArPSAiICIgKyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3RyeV9hZ2Fpbl9pdGVtIik7CisJCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhkaWFsb2csIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksCisJCQkJCQkJCQkJCQkJICBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCSgoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkudXBkYXRlRGlzcGxheVBhbmVscygpOworCQkJCQkJKChSQk1hbmFnZXJHVUkpZGlhbG9nLmdldFBhcmVudCgpKS5pbnZhbGlkYXRlKCk7CisJCQkJCQkvLygoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkudmFsaWRhdGVNeVRyZWUoKTsKKwkJCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkJCWRpYWxvZy5kaXNwb3NlKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJY3JlYXRlTW9yZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCUJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZyBkaWFsb2cgPQorCQkJCQkJKEJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZykoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCQlib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKKwkJCQkJaWYgKGRpYWxvZy5pdGVtID09IG51bGwpIHN1Y2Nlc3MgPSBjcmVhdGVJdGVtKCk7CisJCQkJCWVsc2Ugc3VjY2VzcyA9IGRpYWxvZy5lZGl0SXRlbSgpOworCQkJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQkJCVN0cmluZyBhbGVydCA9IChpdGVtID09IG51bGwgPyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2NyZWF0ZV9pdGVtIikgOgorCQkJCQkJCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfbW9kaWZ5X2l0ZW0iKSk7CisJCQkJCQlhbGVydCArPSAiICIgKyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3RyeV9hZ2Fpbl9pdGVtIik7CisJCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhkaWFsb2csIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksCisJCQkJCQkJCQkJCQkJICBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCSgoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkudXBkYXRlRGlzcGxheVBhbmVscygpOworCQkJCQkJKChSQk1hbmFnZXJHVUkpZGlhbG9nLmdldFBhcmVudCgpKS5pbnZhbGlkYXRlKCk7CisJCQkJCQkvLygoUkJNYW5hZ2VyR1VJKWRpYWxvZy5nZXRQYXJlbnQoKSkudmFsaWRhdGVNeVRyZWUoKTsKKwkJCQkJCWRpYWxvZy5jbGVhckNvbXBvbmVudHMoKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0pOworCQkKKwkJCXRyYW5zRmllbGQuYWRkRm9jdXNMaXN0ZW5lcihuZXcgRm9jdXNMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBmb2N1c0dhaW5lZChGb2N1c0V2ZW50IGV2KSB7fQorCQkJCXB1YmxpYyB2b2lkIGZvY3VzTG9zdChGb2N1c0V2ZW50IGV2KSB7CisJCQkJCUJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZyBkaWFsb2cgPQorCQkJCQkJKEJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZykoKEpUZXh0RmllbGQpZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFBhcmVudCgpOworCQkJCQlmaXJzdEluaXQgPSBmYWxzZTsKKwkJCQkJZGlhbG9nLmluaXRDb21wb25lbnRzKCk7CisJCQkJfQorCQkJfSk7CisJCX0KKwkJCisJCS8vIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZnJhbWUKKwkJaWYgKGZpcnN0SW5pdCkKKwkJCXNldExvY2F0aW9uKG5ldyBqYXZhLmF3dC5Qb2ludCg1MCwgNTApKTsKKwkJbWFpbkJveC5yZW1vdmVBbGwoKTsKKwkJLy9tYWluQm94LmFkZChpbnN0cnVjdGlvbnNMYWJlbCk7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94MSk7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94Mik7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94Myk7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94NCk7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJaWYgKG5vTG9va3VwTGFiZWwgPT0gbnVsbCkgeworCQkJbWFpbkJveC5hZGQoYm94NSk7CisJCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCX0KKwkJbWFpbkJveC5hZGQoYm94Nik7CisJCWdldENvbnRlbnRQYW5lKCkuYWRkKG1haW5Cb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQl2YWxpZGF0ZVRyZWUoKTsKKwkJcGFjaygpOworCQlzZXRWaXNpYmxlKHRydWUpOworCQkvL3NldFJlc2l6YWJsZShmYWxzZSk7CisJCWZpcnN0SW5pdCA9IGZhbHNlOworCX0KKwkKKwl2b2lkIGNsb3NlV2luZG93KCkgeworCQlzZXRWaXNpYmxlKGZhbHNlKTsKKwkJZGlzcG9zZSgpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVJdGVtRGlhbG9nLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL0J1bmRsZUl0ZW1EaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmVjNWNlCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9CdW5kbGVJdGVtRGlhbG9nLmphdmEKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CitpbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworCitpbXBvcnQgY29tLmlibS5yYm0uKjsKKworLy9BIGRpYWxvZyB3aGljaCBkaXNwbGF5cyB0aGUgcHJvcGVydGllcyBvZiBhIEJ1bmRsZSBJdGVtIGluIGFuIGVkaXRhYmxlIHdheQorCitjbGFzcyBCdW5kbGVJdGVtRGlhbG9nIGV4dGVuZHMgSkRpYWxvZyBpbXBsZW1lbnRzIEFjdGlvbkxpc3RlbmVyIHsKKwlSQk1hbmFnZXIgcmJtOworCUJ1bmRsZUl0ZW0gaXRlbTsKKwlTdHJpbmcgdXNlcjsKKwlib29sZWFuIGZpcnN0SW5pdCA9IHRydWU7CQorCQorCS8vIEhlbHBlciBkYXRhCisJaW50IGxlZnRfY29sX3dpZHRoID0gMTI1OworCWludCByaWdodF9jb2xfd2lkdGggPSAzNzU7CisJaW50IHJvd19oZWlnaHQgPSAyNTsKKwlEaW1lbnNpb24gbGVmdERpbSA9IG5ldyBEaW1lbnNpb24obGVmdF9jb2xfd2lkdGgsIHJvd19oZWlnaHQpOworCURpbWVuc2lvbiByaWdodERpbSA9IG5ldyBEaW1lbnNpb24ocmlnaHRfY29sX3dpZHRoLCByb3dfaGVpZ2h0KTsKKwkKKwkvLyBDb21wb25lbnRzCisJQm94IG1haW5Cb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCUJveCBib3gwID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94MSA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDIgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3gzID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94NCA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDUgPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCUJveCBib3g2ID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsKKwlCb3ggYm94NyA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJQm94IGJveDggPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCQorCUpMYWJlbCBncm91cExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19ncm91cCIpKTsgCisJSkxhYmVsIGtleUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19rZXkiKSk7CisJSkxhYmVsIGRlZlRyYW5zTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2RlZmF1bHRfdHJhbnNsYXRpb24iKSk7CisJSkxhYmVsIHRyYW5zTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RyYW5zbGF0aW9uIikpOworCUpMYWJlbCBjb21tZW50TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2NvbW1lbnQiKSk7CisJSkxhYmVsIGxvb2t1cExhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19sb29rdXBzIikpOworCUpMYWJlbCBjcmVhdGVkTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2NyZWF0ZWQiKSk7CisJSkxhYmVsIG1vZGlmaWVkTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX21vZGlmaWVkIikpOworCQorCUpDb21ib0JveCBncm91cENvbWJvQm94OworCUpUZXh0RmllbGQga2V5RmllbGQ7CisJSlRleHRGaWVsZCB0cmFuc0ZpZWxkOworCUpUZXh0RmllbGQgZGVmVHJhbnNGaWVsZDsKKwlKVGV4dEZpZWxkIGNvbW1lbnRGaWVsZDsKKwlKTGFiZWwgY3JlYXRlZExhYmVsMjsKKwlKTGFiZWwgbW9kaWZpZWRMYWJlbDI7CisJSkxhYmVsIGxvb2t1cExhYmVsMiA9IG51bGw7CisJSkNoZWNrQm94IHRyYW5zQ2hlY2tCb3g7CisJSkJ1dHRvbiBzYXZlQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZWRpdCIpKTsKKwlKQnV0dG9uIGNhbmNlbEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NhbmNlbCIpKTsKKwlCb3ggbG9va3VwQm94ID0gbnVsbDsKKwlCb3ggbG9va3Vwc1tdID0gbnVsbDsKKwlKTGFiZWwgbG9va3VwTGFiZWxzW10gPSBudWxsOworCUpUZXh0RmllbGQgbG9va3VwRmllbGRzW10gPSBudWxsOworCQorCXB1YmxpYyBCdW5kbGVJdGVtRGlhbG9nKFJCTWFuYWdlciByYm0sIEJ1bmRsZUl0ZW0gaXRlbSwgU3RyaW5nIHVzZXIsIEpGcmFtZSBmcmFtZSwgU3RyaW5nIHRpdGxlLCBib29sZWFuIG1vZGFsKSB7CisJCXN1cGVyKGZyYW1lLCB0aXRsZSwgbW9kYWwpOworCQl0aGlzLnJibSA9IHJibTsKKwkJdGhpcy51c2VyID0gdXNlcjsKKwkJdGhpcy5pdGVtID0gaXRlbTsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwkJZW5hYmxlRXZlbnRzKEFXVEV2ZW50LktFWV9FVkVOVF9NQVNLKTsKKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2KSB7CisJCWlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfRU5URVIgJiYgZXYuZ2V0SUQoKSA9PSBLZXlFdmVudC5LRVlfUkVMRUFTRUQpIHsKKwkJCWFjdGlvblBlcmZvcm1lZChudWxsKTsKKwkJfSBlbHNlIGlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfQ0FOQ0VMKSB7CisJCQljbG9zZVdpbmRvdygpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBpbml0Q29tcG9uZW50cygpeworCQkvLyBFcnJvciBjaGVjaworCQlpZiAoaXRlbSA9PSBudWxsKSBjbG9zZVdpbmRvdygpOworCQlpZiAoIWZpcnN0SW5pdCkgY2xvc2VXaW5kb3coKTsKKwkJCisJCS8vIEluaXRpYWxpemUgdmFsdWVzCisJCURhdGVGb3JtYXQgZGYgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LlNIT1JUKTsKKwkJQnVuZGxlIGJ1bmRsZSA9IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKTsKKwkJCisJCS8vIExvb2t1cCB0aGUgZGVmYXVsdCB0cmFuc2xhdGlvbgorCQlTdHJpbmcgZGVmVHJhbnMgPSBuZXcgU3RyaW5nKCk7CisJCU9iamVjdCBvID0gKChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5maXJzdEVsZW1lbnQoKSkuYWxsSXRlbXMuZ2V0KGl0ZW0uZ2V0S2V5KCkpOworCQlpZiAobyAhPSBudWxsKQorCQkJZGVmVHJhbnMgPSAoKEJ1bmRsZUl0ZW0pbykuZ2V0VHJhbnNsYXRpb24oKTsKKwkJCisJCWtleUZpZWxkID0gbmV3IEpUZXh0RmllbGQoaXRlbS5nZXRLZXkoKSk7CisJCWtleUZpZWxkLnNldEVuYWJsZWQoZmFsc2UpOworCQlkZWZUcmFuc0ZpZWxkID0gbmV3IEpUZXh0RmllbGQoZGVmVHJhbnMpOworCQlkZWZUcmFuc0ZpZWxkLnNldEVuYWJsZWQoZmFsc2UpOworCQl0cmFuc0ZpZWxkID0gbmV3IEpUZXh0RmllbGQoaXRlbS5nZXRUcmFuc2xhdGlvbigpKTsKKwkJY29tbWVudEZpZWxkID0gbmV3IEpUZXh0RmllbGQoaXRlbS5nZXRDb21tZW50KCkpOworCQlTdHJpbmcgY3JlYXRlZFtdID0ge2RmLmZvcm1hdChpdGVtLmdldENyZWF0ZWREYXRlKCkpLCBpdGVtLmdldENyZWF0b3IoKX07CisJCVN0cmluZyBtb2RpZmllZFtdID0ge2RmLmZvcm1hdChpdGVtLmdldE1vZGlmaWVkRGF0ZSgpKSwgaXRlbS5nZXRNb2RpZmllcigpfTsKKwkJU3RyaW5nIGNyZWF0ZWRTdHJpbmcgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19kYXRlX3BlcnNvbiIsIGNyZWF0ZWQpOworCQlTdHJpbmcgbW9kaWZpZWRTdHJpbmcgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19kYXRlX3BlcnNvbiIsIG1vZGlmaWVkKTsKKwkJY3JlYXRlZExhYmVsMiA9IG5ldyBKTGFiZWwoaXRlbS5nZXRDcmVhdG9yKCkgPT0gbnVsbCA/IGRmLmZvcm1hdChpdGVtLmdldENyZWF0ZWREYXRlKCkpIDogY3JlYXRlZFN0cmluZyk7CisJCW1vZGlmaWVkTGFiZWwyID0gbmV3IEpMYWJlbChpdGVtLmdldE1vZGlmaWVyKCkgPT0gbnVsbCA/IGRmLmZvcm1hdChpdGVtLmdldE1vZGlmaWVkRGF0ZSgpKSA6IG1vZGlmaWVkU3RyaW5nKTsKKwkJdHJhbnNDaGVja0JveCA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfY2hlY2tib3hfdHJhbnNsYXRlZCIpLGl0ZW0uaXNUcmFuc2xhdGVkKCkpOworCQkKKwkJZ3JvdXBDb21ib0JveCA9IG5ldyBKQ29tYm9Cb3goYnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCkpOworCQlmb3IgKGludCBpPTA7IGkgPCBncm91cENvbWJvQm94LmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKwkJCUJ1bmRsZUdyb3VwIGJnID0gKEJ1bmRsZUdyb3VwKWdyb3VwQ29tYm9Cb3guZ2V0SXRlbUF0KGkpOworCQkJaWYgKGJnLmdldE5hbWUoKS5lcXVhbHMoaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldE5hbWUoKSkpIHsKKwkJCQlncm91cENvbWJvQm94LnNldFNlbGVjdGVkSW5kZXgoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZ3JvdXBDb21ib0JveC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCisJCS8vIFNldCB1cCB0aGUgY29tcG9uZW50cworCQlncm91cExhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCWdyb3VwQ29tYm9Cb3guc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCWtleUxhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCS8va2V5RmllbGQuc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCWtleUZpZWxkLnNldENvbHVtbnMoMzApOworCQlkZWZUcmFuc0xhYmVsLnNldFByZWZlcnJlZFNpemUobGVmdERpbSk7CisJCS8vZGVmVHJhbnNGaWVsZC5zZXRQcmVmZXJyZWRTaXplKHJpZ2h0RGltKTsKKwkJZGVmVHJhbnNGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJdHJhbnNMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQkvL3RyYW5zRmllbGQuc2V0UHJlZmVycmVkU2l6ZShyaWdodERpbSk7CisJCXRyYW5zRmllbGQuc2V0Q29sdW1ucygzMCk7CisJCWNvbW1lbnRMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQkvL2NvbW1lbnRGaWVsZC5zZXRQcmVmZXJyZWRTaXplKHJpZ2h0RGltKTsKKwkJY29tbWVudEZpZWxkLnNldENvbHVtbnMoMzApOworCQlsb29rdXBMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQljcmVhdGVkTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsZWZ0RGltKTsKKwkJY3JlYXRlZExhYmVsMi5zZXRQcmVmZXJyZWRTaXplKHJpZ2h0RGltKTsKKwkJbW9kaWZpZWRMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxlZnREaW0pOworCQltb2RpZmllZExhYmVsMi5zZXRQcmVmZXJyZWRTaXplKHJpZ2h0RGltKTsKKwkJLy8gU3BlY2lhbCBzZXR1cCBmb3IgdGhlIGxvb2t1cCBpdGVtcyBpZiB0aGV5IGV4aXN0CisJCWlmIChpdGVtLmdldExvb2t1cHMoKS5zaXplKCkgPCAxKSB7CisJCQlsb29rdXBMYWJlbDIgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibm9uZSIpKTsKKwkJCWxvb2t1cExhYmVsMi5zZXRQcmVmZXJyZWRTaXplKHJpZ2h0RGltKTsKKwkJfSBlbHNlIHsKKwkJCWxvb2t1cEJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQlsb29rdXBzID0gbmV3IEJveFtpdGVtLmdldExvb2t1cHMoKS5zaXplKCldOworCQkJbG9va3VwTGFiZWxzID0gbmV3IEpMYWJlbFtpdGVtLmdldExvb2t1cHMoKS5zaXplKCldOworCQkJbG9va3VwRmllbGRzID0gbmV3IEpUZXh0RmllbGRbaXRlbS5nZXRMb29rdXBzKCkuc2l6ZSgpXTsKKwkJCUVudW1lcmF0aW9uIGtleXMgPSBpdGVtLmdldExvb2t1cHMoKS5rZXlzKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW0uZ2V0TG9va3VwcygpLnNpemUoKTsgaSsrKSB7CisJCQkJU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWtleXMubmV4dEVsZW1lbnQoKTsKKwkJCQlTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKWl0ZW0uZ2V0TG9va3VwcygpLmdldChuYW1lKTsKKwkJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIlggLSBMb29rdXA6ICIgKyBuYW1lICsgIiAtPiAiICsgdmFsdWUpOworCQkJCWxvb2t1cHNbaV0gPSBuZXcgQm94KEJveExheW91dC5YX0FYSVMpOworCQkJCWxvb2t1cExhYmVsc1tpXSA9IG5ldyBKTGFiZWwoInsiICsgbmFtZSArICJ9Iik7CisJCQkJbG9va3VwTGFiZWxzW2ldLnNldFByZWZlcnJlZFNpemUobmV3IERpbWVuc2lvbigzMCxyb3dfaGVpZ2h0KSk7CisJCQkJbG9va3VwRmllbGRzW2ldID0gbmV3IEpUZXh0RmllbGQodmFsdWUpOworCQkJCWxvb2t1cEZpZWxkc1tpXS5zZXRQcmVmZXJyZWRTaXplKG5ldyBEaW1lbnNpb24ocmlnaHRfY29sX3dpZHRoLTM1LHJvd19oZWlnaHQpKTsKKwkJCQlsb29rdXBzW2ldLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbEdsdWUoKSk7CisJCQkJbG9va3Vwc1tpXS5hZGQobG9va3VwTGFiZWxzW2ldKTsKKwkJCQlsb29rdXBzW2ldLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJCQlsb29rdXBzW2ldLmFkZChsb29rdXBGaWVsZHNbaV0pOworCQkJCWxvb2t1cEJveC5hZGQobG9va3Vwc1tpXSk7CisJCQl9CisJCX0KKwkJCisJCS8vIEFkZCB0aGUgYXBwcm9wcmlhdGUgbGlzdGVuZXJzCisJCWlmIChmaXJzdEluaXQpIHsKKwkJCWNhbmNlbEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCUpEaWFsb2cgZGlhbG9nID0gKEpEaWFsb2cpKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKTsKKwkJCQkJZGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworCQkJCQlkaWFsb2cuZGlzcG9zZSgpOworCQkJCX0KKwkJCX0pOworCQkKKwkJCXNhdmVCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQlnZXRSb290UGFuZSgpLnNldERlZmF1bHRCdXR0b24oc2F2ZUJ1dHRvbik7CisKKwkJCXRyYW5zRmllbGQuYWRkRm9jdXNMaXN0ZW5lcihuZXcgVHJhbnNsYXRpb25Gb2N1c0xpc3RlbmVyKGl0ZW0uZ2V0VHJhbnNsYXRpb24oKSx0cmFuc0NoZWNrQm94KSk7CisJCX0KKwkJCisJCWJveDAuYWRkKGdyb3VwTGFiZWwpOyBib3gwLmFkZChncm91cENvbWJvQm94KTsKKwkJYm94MS5hZGQoa2V5TGFiZWwpOyBib3gxLmFkZChrZXlGaWVsZCk7CisJCWJveDguYWRkKGRlZlRyYW5zTGFiZWwpOyBib3g4LmFkZChkZWZUcmFuc0ZpZWxkKTsKKwkJYm94Mi5hZGQodHJhbnNMYWJlbCk7IGJveDIuYWRkKHRyYW5zRmllbGQpOworCQlib3gzLmFkZChjb21tZW50TGFiZWwpOyBib3gzLmFkZChjb21tZW50RmllbGQpOworCQlib3g0LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbEdsdWUoKSk7IGJveDQuYWRkKGxvb2t1cExhYmVsKTsKKwkJaWYgKGxvb2t1cExhYmVsMiAhPSBudWxsKSB7CisJCQlib3g0LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJCWJveDQuYWRkKGxvb2t1cExhYmVsMik7CisJCX0gZWxzZSBpZiAobG9va3VwQm94ICE9IG51bGwpIHsKKwkJCWJveDQuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQkJYm94NC5hZGQobG9va3VwQm94KTsKKwkJfQorCQlib3g1LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbEdsdWUoKSk7IGJveDUuYWRkKGNyZWF0ZWRMYWJlbCk7CisJCWJveDUuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOyBib3g1LmFkZChjcmVhdGVkTGFiZWwyKTsKKwkJYm94Ni5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxHbHVlKCkpOyBib3g2LmFkZChtb2RpZmllZExhYmVsKTsKKwkJYm94Ni5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7IGJveDYuYWRkKG1vZGlmaWVkTGFiZWwyKTsKKwkJYm94Ny5hZGQodHJhbnNDaGVja0JveCk7IGJveDcuYWRkKHNhdmVCdXR0b24pOyBib3g3LmFkZChjYW5jZWxCdXR0b24pOworCQkKKwkJLy8gQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBmcmFtZQorCQlzZXRMb2NhdGlvbihuZXcgamF2YS5hd3QuUG9pbnQoNTAsIDUwKSk7CisJCW1haW5Cb3gucmVtb3ZlQWxsKCk7CisJCW1haW5Cb3guYWRkKGJveDApOworCQltYWluQm94LmFkZChib3gxKTsKKwkJbWFpbkJveC5hZGQoYm94OCk7CisJCW1haW5Cb3guYWRkKGJveDIpOworCQltYWluQm94LmFkZChib3gzKTsKKwkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQltYWluQm94LmFkZChib3g0KTsKKwkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQltYWluQm94LmFkZChib3g1KTsKKwkJbWFpbkJveC5hZGQoYm94Nik7CisJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbWFpbkJveC5hZGQoYm94Nyk7CisJCWdldENvbnRlbnRQYW5lKCkuYWRkKG1haW5Cb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQl2YWxpZGF0ZVRyZWUoKTsKKwkJcGFjaygpOworCQlzZXRWaXNpYmxlKHRydWUpOworCQkvL3NldFJlc2l6YWJsZShmYWxzZSk7CisJCQorCQlmaXJzdEluaXQgPSBmYWxzZTsKKwl9CisJCisJdm9pZCBjbG9zZVdpbmRvdygpIHsKKwkJc2V0VmlzaWJsZShmYWxzZSk7CisJCWRpc3Bvc2UoKTsKKwl9CisJCisJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCWlmIChldiA9PSBudWxsICYmIHRyYW5zRmllbGQuaGFzRm9jdXMoKSkgeworCQkJLy8gSWYgd2UgYXJlIGluIHRoZSB0cmFuc2xhdGlvbiBmaWVsZCwgdGhlbiBlbnRlciBzaG91bGQgY3JlYXRlIGEgbmV3IGxpbmUgY2hhcmFjdGVyLCBub3QgZXhpdCB0aGUgZGlhbG9nCisJCQlpbnQgY2FyZXRQb3MgPSB0cmFuc0ZpZWxkLmdldENhcmV0UG9zaXRpb24oKTsKKwkJCVN0cmluZyBvbGRUZXh0ID0gdHJhbnNGaWVsZC5nZXRUZXh0KCk7CisJCQl0cmFuc0ZpZWxkLnNldFRleHQob2xkVGV4dC5zdWJzdHJpbmcoMCxjYXJldFBvcykgKyAiXG4iICsgb2xkVGV4dC5zdWJzdHJpbmcoY2FyZXRQb3Msb2xkVGV4dC5sZW5ndGgoKSkpOworCQkJdHJhbnNGaWVsZC5zZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKzEpOworCQkJdmFsaWRhdGUoKTsKKwkJCXNldFNpemUoZ2V0UHJlZmVycmVkU2l6ZSgpKTsKKwkJCXJldHVybjsKKwkJfQorCQkKKwkJLy8gVGhpcyBhY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlICdFZGl0JyBidXR0b24gaXMgcHJlc3NlZAorCQlpdGVtLnNldFRyYW5zbGF0aW9uKHRyYW5zRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSk7CisJCWlmICghaXRlbS5nZXRLZXkoKS5lcXVhbHMoa2V5RmllbGQuZ2V0VGV4dCgpKSkgaXRlbS5zZXRLZXkoa2V5RmllbGQuZ2V0VGV4dCgpLnRyaW0oKSk7CisJCWl0ZW0uc2V0Q29tbWVudChjb21tZW50RmllbGQuZ2V0VGV4dCgpKTsKKwkJaXRlbS5zZXRNb2RpZmllZERhdGUobmV3IERhdGUoKSk7CisJCWl0ZW0uc2V0TW9kaWZpZXIodXNlcik7CisJCWl0ZW0uc2V0VHJhbnNsYXRlZCh0cmFuc0NoZWNrQm94LmlzU2VsZWN0ZWQoKSk7CisJCWlmICh0cmFuc0NoZWNrQm94LmlzU2VsZWN0ZWQoKSkgeworCQkJLy8gUmVtb3ZlIHRoaXMgaXRlbSBmcm9tIHRoZSB1bnRyYW5zbGF0ZWQgaXRlbXMsIGlmIGl0IGlzIHRoZXJlCisJCQlpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCkucmVtb3ZlVW50cmFuc2xhdGVkSXRlbShpdGVtLmdldEtleSgpKTsKKwkJfSBlbHNlIHsKKwkJCWl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKS5hZGRVbnRyYW5zbGF0ZWRJdGVtKGl0ZW0pOworCQl9CisJCWlmIChsb29rdXBzICE9IG51bGwpIHsKKwkJCWl0ZW0uc2V0TG9va3VwcyhuZXcgSGFzaHRhYmxlKCkpOworCQkJZm9yIChpbnQgaT0wOyBpIDwgbG9va3Vwcy5sZW5ndGg7IGkrKykgeworCQkJCVN0cmluZyBuYW1lID0gbG9va3VwTGFiZWxzW2ldLmdldFRleHQoKS50cmltKCk7CisJCQkJaWYgKG5hbWUuaW5kZXhPZigieyIpID49IDApIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhuYW1lLmluZGV4T2YoInsiKSsxLG5hbWUubGVuZ3RoKCkpOworCQkJCWlmIChuYW1lLmluZGV4T2YoIn0iKSA+PSAwKSBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5pbmRleE9mKCJ9IikpOworCQkJCVN0cmluZyB2YWx1ZSA9IGxvb2t1cEZpZWxkc1tpXS5nZXRUZXh0KCkudHJpbSgpOworCQkJCWl0ZW0uZ2V0TG9va3VwcygpLnB1dChuYW1lLHZhbHVlKTsKKwkJCX0KKwkJfQorCQljbG9zZVdpbmRvdygpOworCX0KK30KKyAKKy8qKgorICogQSBsaXN0ZW5lciB3aGljaCBjaGVja3MgYSB0cmFuc2xhdGlvbiBib3ggdG8gc2VlIGlmIGl0IGNoYW5nZXMsIGlmIGl0IGRvZXMsIGl0IG1hcmtzIHRoZSB3b3JkIGFzIHRyYW5zbGF0ZWQgaW4gYSBjaGVjayBib3gKKyAqLworY2xhc3MgVHJhbnNsYXRpb25Gb2N1c0xpc3RlbmVyIGltcGxlbWVudHMgRm9jdXNMaXN0ZW5lciB7CisJU3RyaW5nIG9yaWdpbmFsOworCUpDaGVja0JveCBjYm94OworCWJvb2xlYW4gc2VsZWN0ZWQ7CisJCisJcHVibGljIFRyYW5zbGF0aW9uRm9jdXNMaXN0ZW5lcihTdHJpbmcgb3JpZ2luYWwsIEpDaGVja0JveCBjYm94KSB7CisJCXRoaXMub3JpZ2luYWwgPSBvcmlnaW5hbDsKKwkJdGhpcy5jYm94ID0gY2JveDsKKwkJc2VsZWN0ZWQgPSBjYm94LmlzU2VsZWN0ZWQoKTsKKwl9CisJCisJcHVibGljIHZvaWQgZm9jdXNHYWluZWQoRm9jdXNFdmVudCBldikge30KKwkKKwlwdWJsaWMgdm9pZCBmb2N1c0xvc3QoRm9jdXNFdmVudCBldikgeworCQlKVGV4dEZpZWxkIGZpZWxkID0gKEpUZXh0RmllbGQpZXYuZ2V0U291cmNlKCk7CisJCWlmIChmaWVsZC5nZXRUZXh0KCkuZXF1YWxzKG9yaWdpbmFsKSkgeworCQkJY2JveC5zZXRTZWxlY3RlZChzZWxlY3RlZCk7CisJCQlyZXR1cm47CisJCX0KKwkJY2JveC5zZXRTZWxlY3RlZCh0cnVlKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUHJlZmVyZW5jZXNEaWFsb2cuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUHJlZmVyZW5jZXNEaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjNjZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9QcmVmZXJlbmNlc0RpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm0uZ3VpOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIERpYWxvZyB0byBkaXNwbGF5IHRvIGEgdXNlciBhYm91dCB0aGVpciBwcmVmZXJlbmNlcy4gCisgKi8KK2NsYXNzIFByZWZlcmVuY2VzRGlhbG9nIGV4dGVuZHMgSkRpYWxvZyB7CisJU3RyaW5nIHVzZXJOYW1lOworCUxvY2FsZSBsb2NhbGU7CisJTG9va0FuZEZlZWwgbGFmOworCVJCTWFuYWdlckdVSSBndWk7CisJCisJLy8gKiogQ09NUE9ORU5UUyAqKgorCUpUZXh0RmllbGQgICBuYW1lRmllbGQ7CisJSlJhZGlvQnV0dG9uIG1hY2hpbmVSYWRpbzsKKwlKUmFkaW9CdXR0b24gZGVmaW5lZFJhZGlvOworCUpSYWRpb0J1dHRvbiBpc29SYWRpbzsKKwlKQ29tYm9Cb3ggICAgbWFjaGluZUNvbWJvOworCUpDb21ib0JveCAgICBkZWZpbmVkQ29tYm87CisJSkNvbWJvQm94ICAgIGlzb0xhbmdDb21ibzsKKwlKQ29tYm9Cb3ggICAgaXNvQ291bkNvbWJvOworCUpDb21ib0JveCAgICBsYWZDb21ibzsKKwlKQnV0dG9uICAgICAgb2tCdXR0b247CisJSkJ1dHRvbiAgICAgIGNhbmNlbEJ1dHRvbjsKKwkKKwlwdWJsaWMgUHJlZmVyZW5jZXNEaWFsb2coUkJNYW5hZ2VyR1VJIGd1aSkgeworCQlzdXBlcihndWksIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX3ByZWZlcmVuY2VzIiksIHRydWUpOworCQl0aGlzLmd1aSA9IGd1aTsKKwkJdXNlck5hbWUgPSBndWkuZ2V0VXNlcigpOworCQlsb2NhbGUgPSBSZXNvdXJjZXMuZ2V0TG9jYWxlKCk7CisJCWxhZiA9IFVJTWFuYWdlci5nZXRMb29rQW5kRmVlbCgpOworCQkKKwkJaW5pdENvbXBvbmVudHMoKTsKKwkJZW5hYmxlRXZlbnRzKEFXVEV2ZW50LktFWV9FVkVOVF9NQVNLKTsKKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2KSB7CisJCWlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfRU5URVIpIHsKKwkJCXVwZGF0ZVByZWZlcmVuY2VzKCk7CisJCX0gZWxzZSBpZiAoZXYuZ2V0S2V5Q29kZSgpID09IEtleUV2ZW50LlZLX0NBTkNFTCkgeworCQkJdGhpc1dpbmRvd0Nsb3NpbmcoKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgaW5pdENvbXBvbmVudHMoKSB7CisJCVVJTWFuYWdlci5Mb29rQW5kRmVlbEluZm8gbGFmaVtdID0gVUlNYW5hZ2VyLmdldEluc3RhbGxlZExvb2tBbmRGZWVscygpOworCQlTdHJpbmcgbGFmbltdID0gbmV3IFN0cmluZ1tsYWZpLmxlbmd0aF07CisJCWZvciAoaW50IGk9MDsgaSA8IGxhZmkubGVuZ3RoOyBpKyspIHsKKwkJCWxhZm5baV0gPSBsYWZpW2ldLmdldE5hbWUoKTsKKwkJfQorCQkKKwkJLy8gQ09NUE9ORU5UUworCQkKKwkJSlBhbmVsIHBhbmVsMSA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsIHBhbmVsMiA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsIHBhbmVsMyA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsIHBhbmVsNCA9IG5ldyBKUGFuZWwoKTsKKwkJQm94ICAgIG1haW5Cb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQlCb3ggICAgbG9jYWxlQm94MSA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCUJveCAgICBsb2NhbGVCb3gyID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJSlBhbmVsIGxvY2FsZVBhbmVsID0gbmV3IEpQYW5lbCgpOworCQkKKwkJRGltZW5zaW9uIGxvY2FsZURpbTEgPSBuZXcgRGltZW5zaW9uKDIwMCwyNSk7CisJCURpbWVuc2lvbiBsb2NhbGVEaW0yID0gbmV3IERpbWVuc2lvbigxNTAsMjUpOworCQlEaW1lbnNpb24gbG9jYWxlRGltMyA9IG5ldyBEaW1lbnNpb24oNTAsMjUpOworCQkKKwkJSkxhYmVsIG5hbWVMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfcHJlZmVyZW5jZXNfdXNlcm5hbWUiKSk7CisJCUpMYWJlbCBsYWZMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfcHJlZmVyZW5jZXNfbG9va2FuZGZlZWwiKSk7CisJCUpMYWJlbCB3YXJuTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV93YXJuaW5nIikpOworCQlKTGFiZWwgdW5kZXJzY29yZUxhYmVsID0gbmV3IEpMYWJlbCgiXyIpOworCQkKKwkJbmFtZUZpZWxkID0gbmV3IEpUZXh0RmllbGQodXNlck5hbWUpOworCQltYWNoaW5lUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9tYWNoaW5lIiksIGZhbHNlKTsKKwkJZGVmaW5lZFJhZGlvID0gbmV3IEpSYWRpb0J1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfZGVmaW5lZCIpLCB0cnVlKTsKKwkJaXNvUmFkaW8gPSBuZXcgSlJhZGlvQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9pc28iKSwgZmFsc2UpOworCQltYWNoaW5lQ29tYm8gPSBuZXcgSkNvbWJvQm94KExvY2FsZS5nZXRBdmFpbGFibGVMb2NhbGVzKCkpOworCQlkZWZpbmVkQ29tYm8gPSBuZXcgSkNvbWJvQm94KFJlc291cmNlcy5nZXRBdmFpbGFibGVMb2NhbGVzKCkpOworCQlpc29MYW5nQ29tYm8gPSBuZXcgSkNvbWJvQm94KExvY2FsZS5nZXRJU09MYW5ndWFnZXMoKSk7CisJCWlzb0NvdW5Db21ibyA9IG5ldyBKQ29tYm9Cb3goTG9jYWxlLmdldElTT0NvdW50cmllcygpKTsKKwkJbGFmQ29tYm8gPSBuZXcgSkNvbWJvQm94KGxhZm4pOworCQlva0J1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX3VwZGF0ZSIpKTsKKwkJY2FuY2VsQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY2FuY2VsIikpOworCQkKKwkJbWFjaGluZVJhZGlvLnNldFByZWZlcnJlZFNpemUobG9jYWxlRGltMSk7CisJCWRlZmluZWRSYWRpby5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTEpOworCQlpc29SYWRpby5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTEpOworCQkKKwkJbmFtZUxhYmVsLnNldFByZWZlcnJlZFNpemUobG9jYWxlRGltMSk7CisJCWxhZkxhYmVsLnNldFByZWZlcnJlZFNpemUobG9jYWxlRGltMSk7CisJCQorCQkvL2xvY2FsZVBhbmVsLnNldFByZWZlcnJlZFNpemUobG9jYWxlRGltMik7CisJCW1hY2hpbmVDb21iby5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTIpOworCQlkZWZpbmVkQ29tYm8uc2V0UHJlZmVycmVkU2l6ZShsb2NhbGVEaW0yKTsKKwkJCisJCW5hbWVGaWVsZC5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTIpOworCQlsYWZDb21iby5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTIpOworCQkKKwkJaXNvTGFuZ0NvbWJvLnNldFByZWZlcnJlZFNpemUobG9jYWxlRGltMyk7CisJCWlzb0NvdW5Db21iby5zZXRQcmVmZXJyZWRTaXplKGxvY2FsZURpbTMpOworCQkKKwkJLy8gU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzIGluIHRoZSBjb21ibyBib3hlcworCQlTdHJpbmcgbGFmbmFtZSA9IFVJTWFuYWdlci5nZXRMb29rQW5kRmVlbCgpLmdldE5hbWUoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsYWZDb21iby5nZXRJdGVtQ291bnQoKTsgaSsrKSB7CisJCQlpZiAobGFmQ29tYm8uZ2V0SXRlbUF0KGkpLnRvU3RyaW5nKCkuZXF1YWxzKGxhZm5hbWUpKSB7CisJCQkJbGFmQ29tYm8uc2V0U2VsZWN0ZWRJbmRleChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlTdHJpbmcgbG9jbmFtZSA9IFJlc291cmNlcy5nZXRMb2NhbGUoKS50b1N0cmluZygpOworCQlTdHJpbmcgbG9jbGFuZyA9IFJlc291cmNlcy5nZXRMb2NhbGUoKS5nZXRMYW5ndWFnZSgpOworCQlTdHJpbmcgbG9jY291biA9IFJlc291cmNlcy5nZXRMb2NhbGUoKS5nZXRDb3VudHJ5KCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWFjaGluZUNvbWJvLmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKwkJCWlmIChtYWNoaW5lQ29tYm8uZ2V0SXRlbUF0KGkpLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZShsb2NuYW1lKSkgeworCQkJCW1hY2hpbmVDb21iby5zZXRTZWxlY3RlZEluZGV4KGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWZvciAoaW50IGkgPSAwOyBpIDwgZGVmaW5lZENvbWJvLmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKwkJCWlmIChkZWZpbmVkQ29tYm8uZ2V0SXRlbUF0KGkpLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZShsb2NuYW1lKSkgeworCQkJCWRlZmluZWRDb21iby5zZXRTZWxlY3RlZEluZGV4KGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaXNvTGFuZ0NvbWJvLmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKwkJCWlmIChpc29MYW5nQ29tYm8uZ2V0SXRlbUF0KGkpLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZShsb2NsYW5nKSkgeworCQkJCWlzb0xhbmdDb21iby5zZXRTZWxlY3RlZEluZGV4KGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaXNvQ291bkNvbWJvLmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKwkJCWlmIChpc29Db3VuQ29tYm8uZ2V0SXRlbUF0KGkpLnRvU3RyaW5nKCkuZXF1YWxzSWdub3JlQ2FzZShsb2Njb3VuKSkgeworCQkJCWlzb0NvdW5Db21iby5zZXRTZWxlY3RlZEluZGV4KGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCQorCQkvLyBTZXQgdGhlIHJhZGlvIGJ1dHRvbiBncm91cAorCQlCdXR0b25Hcm91cCBncm91cCA9IG5ldyBCdXR0b25Hcm91cCgpOworCQlncm91cC5hZGQobWFjaGluZVJhZGlvKTsKKwkJZ3JvdXAuYWRkKGRlZmluZWRSYWRpbyk7CisJCWdyb3VwLmFkZChpc29SYWRpbyk7CisJCQorCQluYW1lRmllbGQuc2V0Q29sdW1ucygxNSk7CisJCQorCQkvLyBBZGQgYWN0aW9uIGxpc3RlbmVycworCQljYW5jZWxCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJdGhpc1dpbmRvd0Nsb3NpbmcoKTsKKwkJCX0KKwkJfSk7CisJCQorCQlva0J1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQl1cGRhdGVQcmVmZXJlbmNlcygpOworCQkJfQorCQl9KTsKKwkJZ2V0Um9vdFBhbmUoKS5zZXREZWZhdWx0QnV0dG9uKG9rQnV0dG9uKTsKKwkJCisJCXBhbmVsMy5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGUiKSkpOworCQlwYW5lbDMuc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCQorCQlsb2NhbGVQYW5lbC5hZGQoaXNvTGFuZ0NvbWJvKTsKKwkJbG9jYWxlUGFuZWwuYWRkKHVuZGVyc2NvcmVMYWJlbCk7CisJCWxvY2FsZVBhbmVsLmFkZChpc29Db3VuQ29tYm8pOworCQkKKwkJbG9jYWxlQm94MS5hZGQobWFjaGluZVJhZGlvKTsKKwkJbG9jYWxlQm94MS5hZGQoZGVmaW5lZFJhZGlvKTsKKwkJbG9jYWxlQm94MS5hZGQoaXNvUmFkaW8pOworCQlsb2NhbGVCb3gyLmFkZChtYWNoaW5lQ29tYm8pOworCQlsb2NhbGVCb3gyLmFkZChkZWZpbmVkQ29tYm8pOworCQlsb2NhbGVCb3gyLmFkZChsb2NhbGVQYW5lbCk7CisJCWxvY2FsZUJveDEuYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJbG9jYWxlQm94Mi5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQkKKwkJcGFuZWwxLmFkZChuYW1lTGFiZWwpOworCQlwYW5lbDEuYWRkKG5hbWVGaWVsZCk7CisJCXBhbmVsMi5hZGQobGFmTGFiZWwpOworCQlwYW5lbDIuYWRkKGxhZkNvbWJvKTsKKwkJcGFuZWwzLmFkZChsb2NhbGVCb3gxLCBCb3JkZXJMYXlvdXQuV0VTVCk7CisJCXBhbmVsMy5hZGQobG9jYWxlQm94MiwgQm9yZGVyTGF5b3V0LkVBU1QpOworCQlwYW5lbDMuYWRkKHdhcm5MYWJlbCwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJcGFuZWw0LmFkZChva0J1dHRvbik7CisJCXBhbmVsNC5hZGQoY2FuY2VsQnV0dG9uKTsKKwkJCisJCW1haW5Cb3guYWRkKHBhbmVsMSk7CisJCW1haW5Cb3guYWRkKHBhbmVsMik7CisJCW1haW5Cb3guYWRkKHBhbmVsMyk7CisJCW1haW5Cb3guYWRkKHBhbmVsNCk7CisJCQorCQlnZXRDb250ZW50UGFuZSgpLmFkZChtYWluQm94KTsKKwkJLy92YWxpZGF0ZSgpOworCQlwYWNrKCk7CisJCXNldFZpc2libGUodHJ1ZSk7CisJfQorCQorCXByaXZhdGUgdm9pZCB0aGlzV2luZG93Q2xvc2luZygpIHsKKwkJc2V0VmlzaWJsZShmYWxzZSk7CisJCWRpc3Bvc2UoKTsKKwl9CisJCisJdm9pZCB1cGRhdGVQcmVmZXJlbmNlcygpIHsKKwkJLy8gU2V0IHRoZSB1c2VyIG5hbWUKKwkJZ3VpLnNldFVzZXIobmFtZUZpZWxkLmdldFRleHQoKS50cmltKCkpOworCQkvLyBTZXQgdGhlIGxvb2sgYW5kIGZlZWwKKwkJdHJ5IHsKKwkJCVVJTWFuYWdlci5Mb29rQW5kRmVlbEluZm8gbGFmaVtdID0gVUlNYW5hZ2VyLmdldEluc3RhbGxlZExvb2tBbmRGZWVscygpOworCQkJZm9yIChpbnQgaT0wOyBpIDwgbGFmaS5sZW5ndGg7IGkrKykgeworCQkJCWlmIChsYWZpW2ldLmdldE5hbWUoKS5lcXVhbHMobGFmQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSkpIHsKKwkJCQkJVUlNYW5hZ2VyLnNldExvb2tBbmRGZWVsKGxhZmlbaV0uZ2V0Q2xhc3NOYW1lKCkpOworCQkJCQlndWkudXBkYXRlVUkoKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJDb3VsZCBub3QgY2hhbmdlIHRoZSBsb29rIGFuZCBmZWVsIik7CisJCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJfQorCQkvLyBTZXQgdGhlIGxvY2FsZQorCQlTdHJpbmcgbGFuZ3VhZ2UgPSBudWxsOworCQlTdHJpbmcgY291bnRyeSA9IG51bGw7CisJCVN0cmluZyB2YXJpYW50ID0gbnVsbDsKKwkJaWYgKGRlZmluZWRSYWRpby5pc1NlbGVjdGVkKCkpIHsKKwkJCVN0cmluZyBlbmNvZGluZyA9ICIiOworCQkJaWYgKGRlZmluZWRDb21iby5nZXRTZWxlY3RlZEl0ZW0oKSAhPSBudWxsKSB7CisJCQkJZW5jb2RpbmcgPSBkZWZpbmVkQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKTsKKwkJCX0KKwkJCWxhbmd1YWdlID0gUmVzb3VyY2VzLmdldExhbmd1YWdlKGVuY29kaW5nKTsKKwkJCWNvdW50cnkgPSBSZXNvdXJjZXMuZ2V0Q291bnRyeShlbmNvZGluZyk7CisJCQl2YXJpYW50ID0gUmVzb3VyY2VzLmdldFZhcmlhbnQoZW5jb2RpbmcpOworCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJCZWZvcmU6ICIgKyBsYW5ndWFnZSArICJfIiArIGNvdW50cnkgKyAiXyIgKyB2YXJpYW50KTsKKwkJCWlmIChjb3VudHJ5ID09IG51bGwpIGNvdW50cnkgPSBuZXcgU3RyaW5nKCk7CisJCQlpZiAodmFyaWFudCA9PSBudWxsKSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5KTsKKwkJCWVsc2UgbG9jYWxlID0gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7CisJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIkFmdGVyOiAiICsgbG9jYWxlLnRvU3RyaW5nKCkpOworCQl9IGVsc2UgaWYgKG1hY2hpbmVSYWRpby5pc1NlbGVjdGVkKCkpIHsKKwkJCVN0cmluZyBlbmNvZGluZyA9IG1hY2hpbmVDb21iby5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpOworCQkJbGFuZ3VhZ2UgPSBSZXNvdXJjZXMuZ2V0TGFuZ3VhZ2UoZW5jb2RpbmcpOworCQkJY291bnRyeSA9IFJlc291cmNlcy5nZXRDb3VudHJ5KGVuY29kaW5nKTsKKwkJCXZhcmlhbnQgPSBSZXNvdXJjZXMuZ2V0VmFyaWFudChlbmNvZGluZyk7CisJCQlpZiAoY291bnRyeSA9PSBudWxsKSBjb3VudHJ5ID0gbmV3IFN0cmluZygpOworCQkJaWYgKHZhcmlhbnQgPT0gbnVsbCkgbG9jYWxlID0gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSk7CisJCQllbHNlIGxvY2FsZSA9IG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHZhcmlhbnQpOworCQl9IGVsc2UgaWYgKGlzb1JhZGlvLmlzU2VsZWN0ZWQoKSkgeworCQkJbGFuZ3VhZ2UgPSBpc29MYW5nQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKTsKKwkJCWNvdW50cnkgPSBpc29Db3VuQ29tYm8uZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKTsKKwkJCWlmICh2YXJpYW50ID09IG51bGwpIGxvY2FsZSA9IG5ldyBMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnkpOworCQkJZWxzZSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KTsKKwkJfQorCQlSZXNvdXJjZXMuc2V0TG9jYWxlKGxvY2FsZSk7CisJCWd1aS51cGRhdGVMb2NhbGUobG9jYWxlKTsKKwkJCQorCQkvLyBXcml0ZSB0aGUgcHJlZmVyZW5jZXMKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgidXNlcm5hbWUiLCBndWkuZ2V0VXNlcigpKTsKKwkJUHJlZmVyZW5jZXMuc2V0UHJlZmVyZW5jZSgibG9va2FuZGZlZWwiLCBVSU1hbmFnZXIuZ2V0TG9va0FuZEZlZWwoKS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisJCVByZWZlcmVuY2VzLnNldFByZWZlcmVuY2UoImxvY2FsZSIsIGxvY2FsZS50b1N0cmluZygpKTsKKwkJdHJ5IHsKKwkJCVByZWZlcmVuY2VzLnNhdmVQcmVmZXJlbmNlcygpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfcHJlZmVyZW5jZXNfc2F2ZSIpLAorCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCWlvZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKwkJCisJCS8vIENsb3NlIHRoZSB3aW5kb3cKKwkJdGhpc1dpbmRvd0Nsb3NpbmcoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCR3JvdXBQYW5lbC5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQkdyb3VwUGFuZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWI0MTlmCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQkdyb3VwUGFuZWwuamF2YQpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YXguc3dpbmcudGFibGUuKjsKK2ltcG9ydCBqYXZheC5zd2luZy5ldmVudC4qOworCitpbXBvcnQgY29tLmlibS5yYm0uKjsKKworLyoqCisgKiBUaGUgY2xhc3MgdXNlZCB0byBkaXNwbGF5IGdyb3VwcworICovCitjbGFzcyBSQkdyb3VwUGFuZWwgZXh0ZW5kcyBKUGFuZWwgeworCVJCTWFuYWdlciByYm07CisJQnVuZGxlIGJ1bmRsZTsKKwlSQk1hbmFnZXJHVUkgbGlzdGVuZXI7CisJCisJLy8gQ29tcG9uZW50cworCUpMYWJlbCAgICAgIGpMYWJlbEdyb3VwVGl0bGU7CisJSkxhYmVsICAgICAgakxhYmVsR3JvdXBOYW1lVGl0bGU7CisJSkxhYmVsICAgICAgakxhYmVsR3JvdXBDb21tZW50VGl0bGU7CisJSkxhYmVsICAgICAgakxhYmVsR3JvdXBDb21tZW50OworCUpDb21ib0JveCAgIGpDb21ib0JveEdyb3VwOworCUpUYWJsZSAgICAgIGpUYWJsZUdyb3VwVGFibGU7CisJSlNjcm9sbFBhbmUgalNjcm9sbFBhbmVHcm91cFRhYmxlOworCQorCS8vIENvbXBvbmVudHMgLSBNYW5hZ2VyCisJSkxpc3QgICAgICAgakxpc3RHcm91cDsKKwlKQnV0dG9uICAgICBjcmVhdGVJdGVtQnV0dG9uOworCUpCdXR0b24gICAgIGNyZWF0ZUdyb3VwQnV0dG9uOworCUpCdXR0b24gICAgIGVkaXRJdGVtQnV0dG9uOworCUpCdXR0b24gICAgIGVkaXRHcm91cEJ1dHRvbjsKKwlKQnV0dG9uICAgICBkZWxldGVJdGVtQnV0dG9uOworCUpCdXR0b24gICAgIGRlbGV0ZUdyb3VwQnV0dG9uOworCUpQYW5lbCAgICAgIGl0ZW1QYW5lbDsKKwlKUGFuZWwgICAgICBncm91cFBhbmVsOworCQorCXB1YmxpYyBSQkdyb3VwUGFuZWwoUkJNYW5hZ2VyR1VJIGd1aSkgeworCQlzdXBlcigpOworCQlsaXN0ZW5lciA9IGd1aTsKKwl9CisJCisJcHVibGljIHZvaWQgc2V0QnVuZGxlKEJ1bmRsZSBiKSB7CisJCXJibSA9IG51bGw7CisJCWlmIChidW5kbGUgPT0gbnVsbCkgeworCQkJYnVuZGxlID0gYjsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0gZWxzZSBpZiAoYnVuZGxlICE9IGIpIHsKKwkJCWJ1bmRsZSA9IGI7CisJCQl1cGRhdGVDb21wb25lbnRzKCk7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgc2V0TWFuYWdlcihSQk1hbmFnZXIgbSkgeworCQlidW5kbGUgPSBudWxsOworCQlpZiAocmJtID09IG51bGwpIHsKKwkJCXJibSA9IG07CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgaWYgKHJibSAhPSBtKSB7CisJCQlyYm0gPSBtOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHJlbW92ZUVsZW1lbnRzKCkgeworCQlpZiAocmJtICE9IG51bGwgfHwgYnVuZGxlICE9IG51bGwpIHsKKwkJCXJibSA9IG51bGw7CisJCQlidW5kbGUgPSBudWxsOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfQorCX0KKwkKKwkvLyBNYXJrcyB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgYXMgdHJhbnNsYXRlZCBhbmQgcmVtb3ZlcyBmcm9tIHRoaXMgdmlldworCXByaXZhdGUgdm9pZCBtYXJrU2VsZWN0ZWRSZXNvdXJjZUFzVHJhbnNsYXRlZCgpIHsKKwkJaWYgKGJ1bmRsZSA9PSBudWxsKSByZXR1cm47CisJCWlmIChqVGFibGVHcm91cFRhYmxlLmdldFNlbGVjdGVkUm93KCkgPCAwKSByZXR1cm47CisJCWlmIChqVGFibGVHcm91cFRhYmxlLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBHcm91cEl0ZW1zVGFibGVNb2RlbCkgeworCQkJaW50IHJvdyA9IGpUYWJsZUdyb3VwVGFibGUuZ2V0U2VsZWN0ZWRSb3coKTsKKwkJCUdyb3VwSXRlbXNUYWJsZU1vZGVsIG1vZGVsID0gKEdyb3VwSXRlbXNUYWJsZU1vZGVsKWpUYWJsZUdyb3VwVGFibGUuZ2V0TW9kZWwoKTsKKwkJCUJ1bmRsZUl0ZW0gaXRlbSA9IG1vZGVsLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwkJCWl0ZW0uc2V0VHJhbnNsYXRlZCh0cnVlKTsKKwkJCW1vZGVsLnVwZGF0ZSgpOworCQl9CisJfQorCQorCS8vIFJlbW92ZXMgdGhlIHNlbGVjdGVkIHJlc291cmNlIGZyb20gdGhlIHJlc291cmNlIGZpbGUKKwlwcml2YXRlIHZvaWQgZGVsZXRlU2VsZWN0ZWRSZXNvdXJjZSgpIHsKKwkJaWYgKGJ1bmRsZSA9PSBudWxsKSByZXR1cm47CisJCWlmIChqVGFibGVHcm91cFRhYmxlLmdldFNlbGVjdGVkUm93KCkgPCAwKSByZXR1cm47CisJCWlmIChqVGFibGVHcm91cFRhYmxlLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBHcm91cEl0ZW1zVGFibGVNb2RlbCkgeworCQkJaW50IHJvdyA9IGpUYWJsZUdyb3VwVGFibGUuZ2V0U2VsZWN0ZWRSb3coKTsKKwkJCUdyb3VwSXRlbXNUYWJsZU1vZGVsIG1vZGVsID0gKEdyb3VwSXRlbXNUYWJsZU1vZGVsKWpUYWJsZUdyb3VwVGFibGUuZ2V0TW9kZWwoKTsKKwkJCUJ1bmRsZUl0ZW0gaXRlbSA9IG1vZGVsLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwkJCWlmIChpdGVtLmdldFBhcmVudEdyb3VwKCkgIT0gbnVsbCAmJiBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCkgIT0gbnVsbCkgeworCQkJCUJ1bmRsZSBwYXJlbnRCdW5kbGUgPSBpdGVtLmdldFBhcmVudEdyb3VwKCkuZ2V0UGFyZW50QnVuZGxlKCk7CisJCQkJcGFyZW50QnVuZGxlLnJlbW92ZUl0ZW0oaXRlbS5nZXRLZXkoKSk7CisJCQl9CisJCQltb2RlbC51cGRhdGUoKTsKKwkJfQorCX0KKwkJCisJcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCkgeworCQkvLyBJbml0aWFsaXplIGNvbXBvbmVudHMKKwkJaWYgKGJ1bmRsZSAhPSBudWxsKSB7CisJCQlqTGFiZWxHcm91cFRpdGxlICAgICAgICAgID0gbmV3IEpMYWJlbChidW5kbGUubmFtZSk7CisJCQlqQ29tYm9Cb3hHcm91cCAgICAgICAgICAgID0gbmV3IEpDb21ib0JveChuZXcgR3JvdXBDb21ib0JveE1vZGVsKGJ1bmRsZSkpOworCQkJCisJCQlqVGFibGVHcm91cFRhYmxlICAgICAgICAgID0gbmV3IEpUYWJsZShuZXcgR3JvdXBJdGVtc1RhYmxlTW9kZWwoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKSk7CisJCQlqU2Nyb2xsUGFuZUdyb3VwVGFibGUgICAgID0gbmV3IEpTY3JvbGxQYW5lKGpUYWJsZUdyb3VwVGFibGUpOworCQkJakxhYmVsR3JvdXBOYW1lVGl0bGUgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlZ3JvdXBfZ3JvdXBfbmFtZSIpKTsKKwkJCWpMYWJlbEdyb3VwQ29tbWVudFRpdGxlICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZWdyb3VwX2dyb3VwX2NvbW1lbnQiKSk7CisJCQlqTGFiZWxHcm91cENvbW1lbnQgICAgICAgID0gbmV3IEpMYWJlbCgoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKS5nZXRDb21tZW50KCkpOworCQkJCisJCQkvLyBMb3dlciBwYW5lbCBjb21wb25lbnRzCisJCQlKUGFuZWwgIGxvd2VyUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJCQlKQnV0dG9uIGRlbGV0ZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZSIpKTsKKwkJCUpCdXR0b24gdHJhbnNsYXRlQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fbWFya190cmFuc2xhdGVkIikpOworCQkJCisJCQlkZWxldGVCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9kZWxldGVfcmVzb3VyY2VfdHJpZ2dlciIpKSk7CisJCQl0cmFuc2xhdGVCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9tYXJrX3RyYW5zbGF0ZWRfdHJpZ2dlciIpKSk7CisJCQlsb3dlclBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdldW50cmFuc19zZWxlY3RlZF9yZXNvdXJjZXNfb3B0aW9ucyIpKSk7CisJCQlsb3dlclBhbmVsLnNldExheW91dChuZXcgR3JpZExheW91dCgxLDIpKTsKKwkJCQorCQkJakxhYmVsR3JvdXBOYW1lVGl0bGUuc2V0SG9yaXpvbnRhbEFsaWdubWVudChTd2luZ0NvbnN0YW50cy5MRUZUKTsKKwkJCQorCQkJalRhYmxlR3JvdXBUYWJsZS5zZXRTZWxlY3Rpb25Nb2RlKExpc3RTZWxlY3Rpb25Nb2RlbC5TSU5HTEVfU0VMRUNUSU9OKTsKKwkJCWpUYWJsZUdyb3VwVGFibGUuYWRkTW91c2VMaXN0ZW5lcihsaXN0ZW5lcik7CisJCQkKKwkJCWpDb21ib0JveEdyb3VwLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBHcm91cENvbWJvQWN0aW9uTGlzdGVuZXIodGhpcykpOworCQkJCisJCQlqTGFiZWxHcm91cFRpdGxlLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsRm9udC5QTEFJTiwxOCkpOworCQkJCisJCQkvLyBBZGQgYWN0aW9uIGxpc3RlbmVycworCQkJZGVsZXRlQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQlkZWxldGVTZWxlY3RlZFJlc291cmNlKCk7CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCXRyYW5zbGF0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJbWFya1NlbGVjdGVkUmVzb3VyY2VBc1RyYW5zbGF0ZWQoKTsKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJLy8gVXBkYXRlIHRoZSBkaXNwbGF5CisJCQlzZXRMYXlvdXQobmV3IEdyaWRCYWdMYXlvdXQoKSk7CisJCQlHcmlkQmFnQ29uc3RyYWludHMgZ2JjID0gbmV3IEdyaWRCYWdDb25zdHJhaW50cygpOworCQkJcmVtb3ZlQWxsKCk7CisJCQlsb3dlclBhbmVsLmFkZChkZWxldGVCdXR0b24pOworCQkJbG93ZXJQYW5lbC5hZGQodHJhbnNsYXRlQnV0dG9uKTsKKworCQkJZ2JjLndlaWdodHggPSAxLjA7CisJCQlnYmMud2VpZ2h0eSA9IDAuMDsKKwkJCWdiYy5ncmlkd2lkdGggPSBHcmlkQmFnQ29uc3RyYWludHMuUkVNQUlOREVSOworCQkJZ2JjLmZpbGwgPSBHcmlkQmFnQ29uc3RyYWludHMuSE9SSVpPTlRBTDsKKwkJCWFkZChqTGFiZWxHcm91cFRpdGxlLCBnYmMpOworCQkJZ2JjLndlaWdodHggPSAwLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gMTsKKwkJCWFkZChqTGFiZWxHcm91cE5hbWVUaXRsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR4ID0gMS4wOworCQkJZ2JjLmdyaWR3aWR0aCA9IEdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVI7CisJCQlhZGQoakNvbWJvQm94R3JvdXAsIGdiYyk7CisJCQlnYmMud2VpZ2h0eCA9IDAuMDsKKwkJCWdiYy5ncmlkd2lkdGggPSAxOworCQkJYWRkKGpMYWJlbEdyb3VwQ29tbWVudFRpdGxlLCBnYmMpOworCQkJZ2JjLndlaWdodHggPSAxLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gR3JpZEJhZ0NvbnN0cmFpbnRzLlJFTUFJTkRFUjsKKwkJCWFkZChqTGFiZWxHcm91cENvbW1lbnQsIGdiYyk7CisJCQlnYmMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5CT1RIOworCQkJZ2JjLndlaWdodHkgPSAxLjA7CisJCQlhZGQoalNjcm9sbFBhbmVHcm91cFRhYmxlLCBnYmMpOworCQkJZ2JjLndlaWdodHkgPSAwLjA7CisJCQlnYmMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5IT1JJWk9OVEFMOworCQkJYWRkKGxvd2VyUGFuZWwsIGdiYyk7CisJCX0gZWxzZSBpZiAocmJtICE9IG51bGwpIHsKKwkJCUJ1bmRsZSBtYWluQnVuZGxlID0gKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmZpcnN0RWxlbWVudCgpOworCQkJakxhYmVsR3JvdXBUaXRsZSAgICAgICAgICA9IG5ldyBKTGFiZWwocmJtLmdldEJhc2VDbGFzcygpICsgIiAtICIgKyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImdyb3VwcyIpKTsKKwkJCWpDb21ib0JveEdyb3VwICAgICAgICAgICAgPSBuZXcgSkNvbWJvQm94KG5ldyBHcm91cENvbWJvQm94TW9kZWwobWFpbkJ1bmRsZSkpOy8vbWFpbkJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpKTsKKwkJCQorCQkJakxpc3RHcm91cCAgICAgICAgICAgICAgICA9IG5ldyBKTGlzdChuZXcgR3JvdXBJdGVtc0xpc3RNb2RlbCgoQnVuZGxlR3JvdXApakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJdGVtKCkpKTsKKwkJCWpTY3JvbGxQYW5lR3JvdXBUYWJsZSAgICAgPSBuZXcgSlNjcm9sbFBhbmUoakxpc3RHcm91cCk7CisJCQlqTGFiZWxHcm91cE5hbWVUaXRsZSAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2Vncm91cF9ncm91cF9uYW1lIikpOworCQkJakxhYmVsR3JvdXBDb21tZW50VGl0bGUgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlZ3JvdXBfZ3JvdXBfY29tbWVudCIpKTsKKwkJCXRyeSB7CisJCQkJakxhYmVsR3JvdXBDb21tZW50ICAgID0gbmV3IEpMYWJlbCgoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKS5nZXRDb21tZW50KCkpOworCQkJfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7CisJCQkJakxhYmVsR3JvdXBDb21tZW50ICAgID0gbmV3IEpMYWJlbCgiIik7CisJCQl9CisJCQkKKwkJCWNyZWF0ZUl0ZW1CdXR0b24gICAgICAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jcmVhdGVfcmVzb3VyY2UiKSk7CisJCQljcmVhdGVHcm91cEJ1dHRvbiAgICAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fY3JlYXRlX2dyb3VwIikpOworCQkJZGVsZXRlSXRlbUJ1dHRvbiAgICAgICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZSIpKTsKKwkJCWRlbGV0ZUdyb3VwQnV0dG9uICAgICAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9kZWxldGVfZ3JvdXAiKSk7CisJCQllZGl0SXRlbUJ1dHRvbiAgICAgICAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZWRpdF9yZXNvdXJjZSIpKTsKKwkJCWVkaXRHcm91cEJ1dHRvbiAgICAgICAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9lZGl0X2dyb3VwIikpOworCQkJCisJCQlpdGVtUGFuZWwgICAgICAgICAgICAgICAgID0gbmV3IEpQYW5lbCgpOworCQkJZ3JvdXBQYW5lbCAgICAgICAgICAgICAgICA9IG5ldyBKUGFuZWwoKTsKKwkJCQorCQkJaXRlbVBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlZ3JvdXBfaXRlbV9vcHRpb25zIikpKTsKKwkJCWdyb3VwUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQkJCQkJICBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2Vncm91cF9ncm91cF9vcHRpb25zIikpKTsKKwkJCWl0ZW1QYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMSwzKSk7CisJCQlncm91cFBhbmVsLnNldExheW91dChuZXcgR3JpZExheW91dCgxLDMpKTsKKwkJCWl0ZW1QYW5lbC5zZXRNYXhpbXVtU2l6ZShuZXcgRGltZW5zaW9uKDIwMDAwLDUwKSk7CisJCQlncm91cFBhbmVsLnNldE1heGltdW1TaXplKG5ldyBEaW1lbnNpb24oMjAwMDAsNTApKTsKKwkJCQorCQkJY3JlYXRlSXRlbUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZV9yZXNvdXJjZV90cmlnZ2VyIikpKTsKKwkJCWVkaXRJdGVtQnV0dG9uLnNldE1uZW1vbmljKFJCTWFuYWdlck1lbnVCYXIuZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZWRpdF9yZXNvdXJjZV90cmlnZ2VyIikpKTsKKwkJCWRlbGV0ZUl0ZW1CdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9kZWxldGVfcmVzb3VyY2VfdHJpZ2dlciIpKSk7CisJCQljcmVhdGVHcm91cEJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZV9ncm91cF90cmlnZ2VyIikpKTsKKwkJCQorCQkJakxpc3RHcm91cC5zZXRTZWxlY3Rpb25Nb2RlKExpc3RTZWxlY3Rpb25Nb2RlbC5TSU5HTEVfU0VMRUNUSU9OKTsKKwkJCQorCQkJakNvbWJvQm94R3JvdXAuYWRkQWN0aW9uTGlzdGVuZXIobmV3IEdyb3VwQ29tYm9BY3Rpb25MaXN0ZW5lcih0aGlzKSk7CisJCQkKKwkJCWpMYWJlbEdyb3VwVGl0bGUuc2V0Rm9udChuZXcgRm9udCgiU2Fuc1NlcmlmIixGb250LlBMQUlOLDE4KSk7CisKKwkJCS8vIEFkZCB0aGUgbGlzdGVuZXJzCisJCQlqTGlzdEdyb3VwLmFkZE1vdXNlTGlzdGVuZXIobmV3IE1vdXNlQWRhcHRlcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb3VzZUNsaWNrZWQoTW91c2VFdmVudCBldikgeyAKKwkJCQkJaWYoZXYuZ2V0Q2xpY2tDb3VudCgpID09IDIgJiYgZXYuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBKTGlzdCkgeworCQkJCQkJLy8gQSBkb3VibGUgY2xpY2sgbWVhbnMgdGhleSB3YW50IHRvIGVkaXQgYSBidW5kbGUgaXRlbQorCQkJCQkJaWYgKCgoSkxpc3QpZXYuZ2V0U291cmNlKCkpLmdldFNlbGVjdGVkVmFsdWUoKSAhPSBudWxsKQorCQkJCQkJCW5ldyBCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2coKEJ1bmRsZUl0ZW0pKChKTGlzdClldi5nZXRTb3VyY2UoKSkuZ2V0U2VsZWN0ZWRWYWx1ZSgpLAorCQkJCQkJCQlsaXN0ZW5lci5yYm0sIGxpc3RlbmVyLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lZGl0X2l0ZW0iKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJY3JlYXRlSXRlbUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJbmV3IEJ1bmRsZUl0ZW1DcmVhdGlvbkRpYWxvZygoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKS5nZXROYW1lKCksCisJCQkJCQkJCQkJCQkgbGlzdGVuZXIucmJtLCBsaXN0ZW5lciwKKwkJCQkJCQkJCQkJCSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9uZXdfaXRlbSIpLCB0cnVlKTsKKwkJCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQkJCX0KKwkJCX0pOworCQkJY3JlYXRlR3JvdXBCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkJZWRpdEl0ZW1CdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQlpZiAoakxpc3RHcm91cC5nZXRTZWxlY3RlZFZhbHVlKCkgIT0gbnVsbCkKKwkJCQkJCW5ldyBCdW5kbGVJdGVtQ3JlYXRpb25EaWFsb2coKEJ1bmRsZUl0ZW0pakxpc3RHcm91cC5nZXRTZWxlY3RlZFZhbHVlKCksCisJCQkJCQkJbGlzdGVuZXIucmJtLCBsaXN0ZW5lciwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZWRpdF9pdGVtIiksIHRydWUpOworCQkJCQl1cGRhdGVDb21wb25lbnRzKCk7CisJCQkJfQorCQkJfSk7CisJCQllZGl0R3JvdXBCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQluZXcgQnVuZGxlR3JvdXBFZGl0RGlhbG9nKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSwKKwkJCQkJCQkJCQkJICBsaXN0ZW5lciwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZWRpdF9ncm91cCIpLCB0cnVlKTsKKwkJCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQkJCX0KKwkJCX0pOworCQkJZGVsZXRlR3JvdXBCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCQlpbnQgcmVzcG9uc2UgPSBKT3B0aW9uUGFuZS5zaG93Q29uZmlybURpYWxvZyhsaXN0ZW5lciwKKwkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2dyb3VwIiksCisJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9kZWxldGVfZ3JvdXAiKSwgSk9wdGlvblBhbmUuT0tfQ0FOQ0VMX09QVElPTiwKKwkJCQkJCUpPcHRpb25QYW5lLldBUk5JTkdfTUVTU0FHRSk7CisJCQkJCWlmIChyZXNwb25zZSA9PSBKT3B0aW9uUGFuZS5PS19PUFRJT04pIHsKKwkJCQkJCS8vIERlbGV0ZSB0aGUgZ3JvdXAgCisJCQkJCQlpbnQgaW5kZXggPSBqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEluZGV4KCk7CisJCQkJCQlCdW5kbGVHcm91cCBncm91cCA9IChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKTsKKwkJCQkJCWlmIChncm91cC5nZXROYW1lKCkuZXF1YWxzKCJVbmdyb3VwZWQgSXRlbXMiKSkKKwkJCQkJCQlyZXR1cm47CisJCQkJCQlpZiAoaW5kZXggPCBqQ29tYm9Cb3hHcm91cC5nZXRJdGVtQ291bnQoKS0xKQorCQkJCQkJCWpDb21ib0JveEdyb3VwLnNldFNlbGVjdGVkSW5kZXgoaW5kZXgrMSk7CisJCQkJCQllbHNlCisJCQkJCQkJakNvbWJvQm94R3JvdXAuc2V0U2VsZWN0ZWRJbmRleChpbmRleC0xKTsKKwkJCQkJCXJibS5kZWxldGVHcm91cChncm91cC5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJZGVsZXRlSXRlbUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCWludCByZXNwb25zZSA9IEpPcHRpb25QYW5lLnNob3dDb25maXJtRGlhbG9nKGxpc3RlbmVyLAorCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfd2FybmluZ19kZWxldGVfaXRlbSIpLAorCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZGVsZXRlX2l0ZW0iKSwgSk9wdGlvblBhbmUuT0tfQ0FOQ0VMX09QVElPTiwKKwkJCQkJCUpPcHRpb25QYW5lLldBUk5JTkdfTUVTU0FHRSk7CisJCQkJCWlmIChyZXNwb25zZSA9PSBKT3B0aW9uUGFuZS5PS19PUFRJT04pIHsKKwkJCQkJCU9iamVjdCBvID0gakxpc3RHcm91cC5nZXRTZWxlY3RlZFZhbHVlKCk7CisJCQkJCQlpZiAobyAhPSBudWxsKSB7CisJCQkJCQkJQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0pIG87CisJCQkJCQkJaGFuZGxlRGVsZXRlSXRlbShpdGVtLmdldEtleSgpKTsKKwkJCQkJCQkvL3BhbmVsLnJibS5kZWxldGVJdGVtKGl0ZW0uZ2V0S2V5KCkpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJLy8gVXBkYXRlIHRoZSBkaXNwbGF5CisJCQlzZXRMYXlvdXQobmV3IEdyaWRCYWdMYXlvdXQoKSk7CisJCQlHcmlkQmFnQ29uc3RyYWludHMgZ2JjID0gbmV3IEdyaWRCYWdDb25zdHJhaW50cygpOworCQkJcmVtb3ZlQWxsKCk7CisJCQlpdGVtUGFuZWwuYWRkKGNyZWF0ZUl0ZW1CdXR0b24sIEJvcmRlckxheW91dC5XRVNUKTsKKwkJCWl0ZW1QYW5lbC5hZGQoZWRpdEl0ZW1CdXR0b24sIEJvcmRlckxheW91dC5DRU5URVIpOworCQkJaXRlbVBhbmVsLmFkZChkZWxldGVJdGVtQnV0dG9uLCBCb3JkZXJMYXlvdXQuRUFTVCk7CisJCQlncm91cFBhbmVsLmFkZChjcmVhdGVHcm91cEJ1dHRvbiwgQm9yZGVyTGF5b3V0LldFU1QpOworCQkJZ3JvdXBQYW5lbC5hZGQoZWRpdEdyb3VwQnV0dG9uLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCWdyb3VwUGFuZWwuYWRkKGRlbGV0ZUdyb3VwQnV0dG9uLCBCb3JkZXJMYXlvdXQuRUFTVCk7CisKKwkJCQorCQkJZ2JjLndlaWdodHggPSAxLjA7CisJCQlnYmMud2VpZ2h0eSA9IDAuMDsKKwkJCWdiYy5ncmlkd2lkdGggPSBHcmlkQmFnQ29uc3RyYWludHMuUkVNQUlOREVSOworCQkJZ2JjLmZpbGwgPSBHcmlkQmFnQ29uc3RyYWludHMuSE9SSVpPTlRBTDsKKwkJCWFkZChqTGFiZWxHcm91cFRpdGxlLCBnYmMpOworCQkJZ2JjLndlaWdodHggPSAwLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gMTsKKwkJCWFkZChqTGFiZWxHcm91cE5hbWVUaXRsZSwgZ2JjKTsKKwkJCWdiYy53ZWlnaHR4ID0gMS4wOworCQkJZ2JjLmdyaWR3aWR0aCA9IEdyaWRCYWdDb25zdHJhaW50cy5SRU1BSU5ERVI7CisJCQlhZGQoakNvbWJvQm94R3JvdXAsIGdiYyk7CisJCQlnYmMud2VpZ2h0eCA9IDAuMDsKKwkJCWdiYy5ncmlkd2lkdGggPSAxOworCQkJYWRkKGpMYWJlbEdyb3VwQ29tbWVudFRpdGxlLCBnYmMpOworCQkJZ2JjLndlaWdodHggPSAxLjA7CisJCQlnYmMuZ3JpZHdpZHRoID0gR3JpZEJhZ0NvbnN0cmFpbnRzLlJFTUFJTkRFUjsKKwkJCWFkZChqTGFiZWxHcm91cENvbW1lbnQsIGdiYyk7CisJCQlnYmMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5CT1RIOworCQkJZ2JjLndlaWdodHkgPSAxLjA7CisJCQlhZGQoalNjcm9sbFBhbmVHcm91cFRhYmxlLCBnYmMpOworCQkJZ2JjLndlaWdodHkgPSAwLjA7CisJCQlnYmMuZmlsbCA9IEdyaWRCYWdDb25zdHJhaW50cy5IT1JJWk9OVEFMOworCQkJYWRkKGdyb3VwUGFuZWwsIGdiYyk7CisJCQlhZGQoaXRlbVBhbmVsLCBnYmMpOworCQl9IGVsc2UgeworCQkJcmVtb3ZlQWxsKCk7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgdXBkYXRlQ29tcG9uZW50cygpIHsKKwkJLy8gSW5pdGlhbGl6ZSBjb21wb25lbnRzCisJCWlmIChidW5kbGUgIT0gbnVsbCkgeworCQkJakxhYmVsR3JvdXBUaXRsZS5zZXRUZXh0KGJ1bmRsZS5uYW1lKTsKKwkJCQorCQkJKChHcm91cEl0ZW1zVGFibGVNb2RlbClqVGFibGVHcm91cFRhYmxlLmdldE1vZGVsKCkpLnNldEdyb3VwKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSk7CisJCQlqTGFiZWxHcm91cENvbW1lbnQuc2V0VGV4dCgoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKS5nZXRDb21tZW50KCkpOworCQkJCisJCQlqVGFibGVHcm91cFRhYmxlLnNldFNlbGVjdGlvbk1vZGUoTGlzdFNlbGVjdGlvbk1vZGVsLlNJTkdMRV9TRUxFQ1RJT04pOworCQkJCisJCQkvLyBVcGRhdGUgdGhlIGdyb3VwIGNvbW1lbnQKKwkJCWpMYWJlbEdyb3VwQ29tbWVudC5zZXRUZXh0KCgoQnVuZGxlR3JvdXApakNvbWJvQm94R3JvdXAuZ2V0U2VsZWN0ZWRJdGVtKCkpLmdldENvbW1lbnQoKSk7CisJCQkoKEdyb3VwQ29tYm9Cb3hNb2RlbClqQ29tYm9Cb3hHcm91cC5nZXRNb2RlbCgpKS51cGRhdGUoKTsKKwkJfSBlbHNlIGlmIChyYm0gIT0gbnVsbCkgeworCQkJCisJCQkvLyBVcGRhdGUgdGhlIGxpc3Qgb2YgZ3JvdXBzCisvLwkJCXRyeSB7CisJCQkJKChHcm91cENvbWJvQm94TW9kZWwpakNvbWJvQm94R3JvdXAuZ2V0TW9kZWwoKSkudXBkYXRlKCk7CisvLwkJCX0KKy8vCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorCQkJLy8gVXBkYXRlIHRoZSBncm91cCBjb21tZW50CisJCQlpZiAoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpICE9IG51bGwpCisJCQkJakxhYmVsR3JvdXBDb21tZW50LnNldFRleHQoKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSkuZ2V0Q29tbWVudCgpKTsKKwkJCWVsc2UKKwkJCQlqTGFiZWxHcm91cENvbW1lbnQuc2V0VGV4dCgiIik7CisJCQkvLyBVcGRhdGUgdGhlIGxpc3Qgb2YgcmVzb3VyY2VzCisJCQlMaXN0TW9kZWwgbG1vZGVsID0gakxpc3RHcm91cC5nZXRNb2RlbCgpOworCQkJaWYgKGxtb2RlbCBpbnN0YW5jZW9mIEdyb3VwSXRlbXNMaXN0TW9kZWwpIHsKKwkJCQkvLygoR3JvdXBJdGVtc0xpc3RNb2RlbClsbW9kZWwpLnVwZGF0ZSgpOworCQkJCSgoR3JvdXBJdGVtc0xpc3RNb2RlbClsbW9kZWwpLnNldEdyb3VwKChCdW5kbGVHcm91cClqQ29tYm9Cb3hHcm91cC5nZXRTZWxlY3RlZEl0ZW0oKSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlHcm91cEl0ZW1zTGlzdE1vZGVsIG5ld01vZGVsID0gbmV3IEdyb3VwSXRlbXNMaXN0TW9kZWwoKEJ1bmRsZUdyb3VwKWpDb21ib0JveEdyb3VwLmdldFNlbGVjdGVkSXRlbSgpKTsKKwkJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIkxpc3QgTW9kZWwgbm90IGFzIGFudGljaXBhdGVkOiAiICsgbG1vZGVsLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKwkJCQlqTGlzdEdyb3VwLnNldE1vZGVsKG5ld01vZGVsKTsKKwkJCQluZXdNb2RlbC51cGRhdGUoKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVJCTWFuYWdlckdVSS5kZWJ1Z01zZygiVXBkYXRlLCBidXQgbm8gYWN0aXZlIGNvbXBvbmVudHMiKTsKKwkJCXJlbW92ZUFsbCgpOworCQl9CisJCS8vdmFsaWRhdGUoKTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIGhhbmRsZURlbGV0ZUl0ZW0oU3RyaW5nIGtleSkgeworCQlpZiAocmJtICE9IG51bGwpIHJibS5kZWxldGVJdGVtKGtleSk7CisJfQorfQorCisvKioKKyAqIFRoZSBhY3Rpb24gbGlzdGVuZXIgd2hpY2ggbW9uaXRvcnMgY2hhbmdlcyBpbiB0aGUgZ3JvdXAgdG8gZGlzcGxheQorICovCitjbGFzcyBHcm91cENvbWJvQWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciB7CisJUkJHcm91cFBhbmVsIHBhbmVsOworCQorCXByb3RlY3RlZCBHcm91cENvbWJvQWN0aW9uTGlzdGVuZXIoUkJHcm91cFBhbmVsIHBhbmVsKSB7CisJCXRoaXMucGFuZWwgPSBwYW5lbDsKKwl9CisJCisJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCXBhbmVsLnVwZGF0ZUNvbXBvbmVudHMoKTsKKwl9Cit9CisKKy8qKgorICogVGhlIGxpc3QgbW9kZWwgZm9yIGdyb3VwcworICovCitjbGFzcyBHcm91cEl0ZW1zTGlzdE1vZGVsIGV4dGVuZHMgQWJzdHJhY3RMaXN0TW9kZWwgeworCUJ1bmRsZUdyb3VwIGdyb3VwOworCQorCXB1YmxpYyB2b2lkIHNldEdyb3VwKEJ1bmRsZUdyb3VwIGdyb3VwKSB7CisJCXRoaXMuZ3JvdXAgPSBncm91cDsKKwkJdXBkYXRlKCk7CisJfQorCQorCXB1YmxpYyBHcm91cEl0ZW1zTGlzdE1vZGVsKEJ1bmRsZUdyb3VwIGdyb3VwKSB7CisJCXRoaXMuZ3JvdXAgPSBncm91cDsKKwl9CisJCisJcHVibGljIGludCBnZXRTaXplKCkgeworCQlpZiAoZ3JvdXAgPT0gbnVsbCkKKwkJCXJldHVybiAwOworCQlpbnQgcmVzdWx0ID0gZ3JvdXAuZ2V0SXRlbUNvdW50KCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCXB1YmxpYyBPYmplY3QgZ2V0RWxlbWVudEF0KGludCBpbmRleCkgeworCQlyZXR1cm4gZ3JvdXAuZ2V0QnVuZGxlSXRlbShpbmRleCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKKwkJZmlyZUNvbnRlbnRzQ2hhbmdlZCh0aGlzLCAwLCBnZXRTaXplKCktMSk7CisJfQorfQorCisvKioKKyAqIFRoZSB0YWJsZSBtb2RlbCBmb3Igc2VhcmNoZWQgSXRlbXMKKyAqLworY2xhc3MgR3JvdXBDb21ib0JveE1vZGVsIGV4dGVuZHMgRGVmYXVsdENvbWJvQm94TW9kZWwgeworCUJ1bmRsZSBidW5kbGU7CisJCisJcHVibGljIEdyb3VwQ29tYm9Cb3hNb2RlbCAoQnVuZGxlIGJ1bmRsZSkgeworCQl0aGlzLmJ1bmRsZSA9IGJ1bmRsZTsKKwkJc2V0U2VsZWN0ZWRJdGVtKGJ1bmRsZS5nZXRCdW5kbGVHcm91cCgwKSk7CisJfQorCQorCXB1YmxpYyBpbnQgZ2V0U2l6ZSgpIHsKKwkJcmV0dXJuIGJ1bmRsZS5nZXRHcm91cENvdW50KCk7CisJfQorCQorCXB1YmxpYyBPYmplY3QgZ2V0RWxlbWVudEF0KGludCBpbmRleCkgeworCQlyZXR1cm4gYnVuZGxlLmdldEJ1bmRsZUdyb3VwKGluZGV4KTsKKwl9CisJCisJcHVibGljIE9iamVjdCBnZXRTZWxlY3RlZEl0ZW0oKSB7CisJCXJldHVybiBzdXBlci5nZXRTZWxlY3RlZEl0ZW0oKTsKKwkJLy9yZXR1cm4gZ2V0RWxlbWVudEF0KDApOworCX0KKwkKKwlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7CisJCWZpcmVDb250ZW50c0NoYW5nZWQodGhpcywgMCwgZ2V0U2l6ZSgpLTEpOworCX0KK30KKworLyoqCisgKiBUaGUgdGFibGUgbW9kZWwgZm9yIGJ1bmRsZSBncm91cHMKKyAqLworY2xhc3MgR3JvdXBJdGVtc1RhYmxlTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdFRhYmxlTW9kZWwgeworCUJ1bmRsZUdyb3VwIGdyb3VwOworCQorCXB1YmxpYyBHcm91cEl0ZW1zVGFibGVNb2RlbChCdW5kbGVHcm91cCBncm91cCkgeworCQl0aGlzLmdyb3VwID0gZ3JvdXA7CisJfQorCQorCXB1YmxpYyBpbnQgZ2V0Q29sdW1uQ291bnQoKSB7IHJldHVybiAzOyB9CisJCSAgICAKKwlwdWJsaWMgaW50IGdldFJvd0NvdW50KCkgeworCQlyZXR1cm4gZ3JvdXAuZ2V0SXRlbUNvdW50KCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldEdyb3VwKEJ1bmRsZUdyb3VwIGJnKSB7CisJCWdyb3VwID0gYmc7CisJCWZpcmVUYWJsZUNoYW5nZWQobmV3IFRhYmxlTW9kZWxFdmVudCh0aGlzKSk7CisJfQorCQkJCisJcHVibGljIE9iamVjdCBnZXRWYWx1ZUF0KGludCByb3csIGludCBjb2wpIHsKKwkJQnVuZGxlSXRlbSBpdGVtID0gZ3JvdXAuZ2V0QnVuZGxlSXRlbShyb3cpOworCQkJCQorCQlTdHJpbmcgcmV0U3RyID0gbnVsbDsKKwkJCQkKKwkJc3dpdGNoKGNvbCkgeworCQljYXNlIDA6CisJCQlyZXRTdHIgPSBpdGVtLmdldEtleSgpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJldFN0ciA9IGl0ZW0uZ2V0VHJhbnNsYXRpb24oKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlyZXRTdHIgPSAoaXRlbS5nZXRDb21tZW50KCkgPT0gbnVsbCA/ICIiIDogaXRlbS5nZXRDb21tZW50KCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXRTdHIgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYmxlX2NlbGxfZXJyb3IiKTsKKwkJfQorCQkJCQorCQlyZXR1cm4gcmV0U3RyOworCX0KKwkKKwlwdWJsaWMgU3RyaW5nIGdldENvbHVtbk5hbWUoaW50IGNvbCkgeworCQlpZiAoY29sID09IDApIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlZ3JvdXBfY29sdW1uX2tleSIpOworCQllbHNlIGlmIChjb2wgPT0gMSkgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2Vncm91cF9jb2x1bW5fdHJhbnNsYXRpb24iKTsKKwkJZWxzZSBpZiAoY29sID09IDIpIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlZ3JvdXBfY29sdW1uX2NvbW1lbnQiKTsKKwkJZWxzZSByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJsZV9jb2x1bW5fZXJyb3IiKTsKKwl9CisJCisJcHVibGljIEJ1bmRsZUl0ZW0gZ2V0QnVuZGxlSXRlbShpbnQgcm93KSB7CisJCWlmIChyb3cgPj0gZ3JvdXAuZ2V0SXRlbUNvdW50KCkpCisJCSAgICByZXR1cm4gbnVsbDsKKwkJcmV0dXJuIGdyb3VwLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwl9CisJCisJcHVibGljIHZvaWQgdXBkYXRlKCkgeworCQlmaXJlVGFibGVEYXRhQ2hhbmdlZCgpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQk1hbmFnZXJHVUkuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJNYW5hZ2VyR1VJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmNDU2NgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJNYW5hZ2VyR1VJLmphdmEKQEAgLTAsMCArMSwxODE1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm0uZ3VpOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lio7CitpbXBvcnQgamF2YXguc3dpbmcudHJlZS4qOworCitpbXBvcnQgY29tLmlibS5yYm0uKjsKKworLyoqCisgKiBUaGUgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIGZvciB3b3JraW5nIHdpdGggYW5kIHRocm91Z2ggYSBSZXNvdXJjZSBCdW5kbGUgTWFuYWdlci4gVGhlIEdVSSBoYXMgbm8gcHVibGljIG1haW4KKyAqIG1ldGhvZC4gSXQgaXMgaW5zdGVhZCBpbnN0YW50aWF0ZWQgZnJvbSBydW5uaW5nIHRoZSBtYWluIG1ldGhvZCBpbiBSQk1hbmFnZXIuIEZvciBoZWxwIHdpdGggdXNpbmcgdGhpcyBpbnRlcmZhY2UsCisgKiBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIHRoZSBwcm9qZWN0LgorICogCisgKiBAYXV0aG9yIEphcmVkIEphY2tzb24KKyAqIEBzZWUgY29tLmlibS5yYm0uUkJNYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBSQk1hbmFnZXJHVUkgZXh0ZW5kcyBKRnJhbWUgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciwgTW91c2VMaXN0ZW5lciwgQ2hhbmdlTGlzdGVuZXIsIFRyZWVTZWxlY3Rpb25MaXN0ZW5lcgoreworCS8vIENPTlNUQU5UUworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBidWZmZXIgPSAyMDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBEaW1lbnNpb24gZGltTWFpbiA9IG5ldyBEaW1lbnNpb24oNzUwLDU1MCk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGltZW5zaW9uIGRpbU1haW5NYXggPSBuZXcgRGltZW5zaW9uKDIwMDAsMTUwMCk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGltZW5zaW9uIGRpbU1haW5NaW4gPSBuZXcgRGltZW5zaW9uKDU1MCwzNTApOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1Ub3AgPSBuZXcgRGltZW5zaW9uKGRpbU1haW4ud2lkdGggLSBidWZmZXIsNTApOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1Ub3BNYXggPSBuZXcgRGltZW5zaW9uKGRpbU1haW5NYXgud2lkdGggLSBidWZmZXIsNTApOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1Ub3BNaW4gPSBuZXcgRGltZW5zaW9uKGRpbU1haW5NaW4ud2lkdGggLSBidWZmZXIsNTApOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1Cb3R0b20gPSBuZXcgRGltZW5zaW9uKGRpbU1haW4ud2lkdGggLSBidWZmZXIsZGltTWFpbi5oZWlnaHQtZGltVG9wLmhlaWdodCAtIGJ1ZmZlcik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGltZW5zaW9uIGRpbUJvdHRvbU1heCA9IG5ldyBEaW1lbnNpb24oZGltTWFpbk1heC53aWR0aCAtIGJ1ZmZlcixkaW1NYWluTWF4LmhlaWdodC1kaW1Ub3BNaW4uaGVpZ2h0IC0gYnVmZmVyKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBEaW1lbnNpb24gZGltQm90dG9tTWluID0gbmV3IERpbWVuc2lvbihkaW1NYWluTWluLndpZHRoIC0gYnVmZmVyLGRpbU1haW5NaW4uaGVpZ2h0LWRpbVRvcE1heC5oZWlnaHQgLSBidWZmZXIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIERpbWVuc2lvbiBkaW1MZWZ0ID0gbmV3IERpbWVuc2lvbigxNzUsZGltQm90dG9tLmhlaWdodCAtIGJ1ZmZlcik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGltZW5zaW9uIGRpbVJpZ2h0ID0gbmV3IERpbWVuc2lvbihkaW1NYWluLndpZHRoLWRpbUxlZnQud2lkdGggLSBidWZmZXIsZGltQm90dG9tLmhlaWdodCAtIGJ1ZmZlcik7CisJCisJLyoqCisJICogVXNlZCBmb3IgdG9nZ2xpbmcgdGhlIGRlYnVnIG1vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKKwkvKioKKwkgKiBVc2VkIHRvIGNvdW50IGRlYnVnIG1lc3NhZ2VzCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgZGVidWdjb3VudCA9IDA7CisJCisJLy8gbWVtYmVyIGRlY2xhcmF0aW9ucworCQorCS8vICoqIERBVEEgKioKKwlSQk1hbmFnZXIgcmJtID0gbnVsbDsKKwlTdHJpbmcgdXNlck5hbWUgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInVua25vd25fdXNlciIpOworCQorCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgYWN0aXZlTm9kZSA9IG51bGw7CisJCisJLy8gKiogTUFJTiBNRU5VICoqCisJUkJNYW5hZ2VyTWVudUJhciAgICAgICAgIGpNZW51QmFyTWFpbiA9IG51bGw7CisKKwkvLyAqKiBDT05URU5UIFBBTkVTICoqCisJQm94ICAgICAgICAgIGJveE1haW4gPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCS8vSlBhbmVsICAgICAgIGpQYW5lbFRvcCA9IG5ldyBKUGFuZWwoKTsKKwlKUGFuZWwgICAgICAgalBhbmVsQm90dG9tID0gbmV3IEpQYW5lbCgpOworCUpTcGxpdFBhbmUgICBqU3BsaXRQYW5lTWFpbiA9IG5ldyBKU3BsaXRQYW5lKEpTcGxpdFBhbmUuSE9SSVpPTlRBTF9TUExJVCk7CisKKwkvLyAqKiBTUExJVCBQQU5FIENPTVBPTkVOVFMgKioKKwlKVHJlZSAgICAgICAgalRyZWVEaXNwbGF5ID0gbmV3IEpUcmVlKCk7CisJSlRhYmJlZFBhbmUgIGpUYWJiZWRQYW5lTWFpbiA9IG5ldyBKVGFiYmVkUGFuZSgpOworCVJCU3RhdGlzdGljc1BhbmVsICAgICAgICBqUGFuZWxTdGF0cyA9IG5ldyBSQlN0YXRpc3RpY3NQYW5lbCgpOworCVJCVW50cmFuc2xhdGVkUGFuZWwgICAgICBqUGFuZWxVbnRyYW5zID0gbmV3IFJCVW50cmFuc2xhdGVkUGFuZWwodGhpcyk7CisJUkJHcm91cFBhbmVsICAgICAgICAgICAgIGpQYW5lbEdyb3VwcyA9IG5ldyBSQkdyb3VwUGFuZWwodGhpcyk7CisJUkJTZWFyY2hQYW5lbCAgICAgICAgICAgIGpQYW5lbFNlYXJjaCA9IG5ldyBSQlNlYXJjaFBhbmVsKHRoaXMpOworCUpTY3JvbGxQYW5lICBqU2Nyb2xsUGFuZVRyZWUgPSBuZXcgSlNjcm9sbFBhbmUoalRyZWVEaXNwbGF5LAorCQkJCQkJCQkJCQkJCVNjcm9sbFBhbmVDb25zdGFudHMuVkVSVElDQUxfU0NST0xMQkFSX0FTX05FRURFRCwKKwkJCQkJCQkJCQkJCQlTY3JvbGxQYW5lQ29uc3RhbnRzLkhPUklaT05UQUxfU0NST0xMQkFSX0FTX05FRURFRCk7CisJLy8gKiogUFJPSkVDVCBWSUVXIFNQTElUIFBBTkUgQ09NUE9ORU5UUworCUpUYWJiZWRQYW5lICAgICAgICAgICAgICB0cmVlVGFiYmVkUGFuZSA9IG5ldyBKVGFiYmVkUGFuZSgpOworCUpUcmVlICAgICAgICAgICAgICAgICAgICBwcm9qZWN0VHJlZSA9IG5ldyBKVHJlZSgpOworCUpTY3JvbGxQYW5lICAgICAgICAgICAgICBwcm9qZWN0U2Nyb2xsUGFuZSA9IG5ldyBKU2Nyb2xsUGFuZShwcm9qZWN0VHJlZSwgCisJCQkJCQkJCQkJCQkJCQkJU2Nyb2xsUGFuZUNvbnN0YW50cy5WRVJUSUNBTF9TQ1JPTExCQVJfQVNfTkVFREVELAorCQkJCQkJCQkJCQkJCQkJCVNjcm9sbFBhbmVDb25zdGFudHMuSE9SSVpPTlRBTF9TQ1JPTExCQVJfQVNfTkVFREVEKTsKKwlSQlByb2plY3RJdGVtUGFuZWwgICAgICAgcHJvamVjdFBhbmVsID0gbmV3IFJCUHJvamVjdEl0ZW1QYW5lbCh0aGlzKTsKKwlSQlByb2plY3QgICAgICAgICAgICAgICAgcHJvamVjdCA9IG51bGw7CisJCisJLy8gKiogRmlsZSBDaG9vc2VyICoqCisJSkZpbGVDaG9vc2VyIG9wZW5GaWxlQ2hvb3NlciA9IG5ldyBKRmlsZUNob29zZXIoKTsKKwlKRmlsZUNob29zZXIgc2F2ZUZpbGVDaG9vc2VyID0gbmV3IEpGaWxlQ2hvb3NlcigpOworCUpGaWxlQ2hvb3NlciBwcm9qZWN0RmlsZUNob29zZXIgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisJCisJLyoqCisJICogQ3JlYXRpb24gb2YgdGhlIEdVSSBzaG91bGQgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgdGhlIG1ldGhvZCBjYWxscyB0byBpbml0Q29tcG9uZW50cygpIGFuZCBzZXRWaXNpYmxlKHRydWUpLgorCSAqIFRoZXNlIG1ldGhvZHMgd2VyZSBub3QgY2FsbGVkIGJ5IGRlZmF1bHQgZm9yIHByb2dyYW1taW5nIGRpc2NyZXRpb24KKwkgKi8KKwkKKwlwdWJsaWMgUkJNYW5hZ2VyR1VJKCkKKwl7CisJfQorCQorCS8qKgorCSAqIEluaGVyaXRzIGZyb20gSkZyYW1lLnZhbGlkYXRlKCksIHdpdGggc29tZSBjb21wb25lbnQgdXBkYXRlcworCSAqLworCQorCXB1YmxpYyB2b2lkIHZhbGlkYXRlKCkgeworCQlzdXBlci52YWxpZGF0ZSgpOworCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJfQorCQorCS8qKgorCSAqIEluaXRpYWwgY29uc3RydWN0aW9uIG9mIGFsbCBvZiB0aGUgR1VJIGNvbXBvbmVudHMuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQorCSAqIGNvbnN0cnVjdGlvbiBvZiB0aGUgR1VJIG9iamVjdC4KKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBpbml0Q29tcG9uZW50cygpIHRocm93cyBFeGNlcHRpb24KKwl7CisJCXRoaXMuc2V0RGVmYXVsdENsb3NlT3BlcmF0aW9uKFdpbmRvd0NvbnN0YW50cy5ET19OT1RISU5HX09OX0NMT1NFKTsKKwkJLy8gdGhlIGZvbGxvd2luZyBjb2RlIHNldHMgdGhlIGZyYW1lJ3MgaW5pdGlhbCBzdGF0ZQorCQkKKwkJb3BlbkZpbGVDaG9vc2VyLnNldEZpbGVGaWx0ZXIobmV3IGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLkZpbGVGaWx0ZXIoKSB7CisJCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmKSB7CisJCQkJaWYgKGYuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHRydWU7CisJCQkJCisJCQkJU3RyaW5nIG5hbWUgPSBmLmdldE5hbWUoKTsKKwkJCQlpZiAoIShuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpKSByZXR1cm4gZmFsc2U7CisJCQkJaWYgKG5hbWUuaW5kZXhPZigiXyIpID4gMCkgcmV0dXJuIGZhbHNlOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQorCQkJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJCQlyZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb24iKTsKKwkJCX0KKwkJfSk7CisJCQorCQlzYXZlRmlsZUNob29zZXIuc2V0RmlsZUZpbHRlcihuZXcgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZUZpbHRlcigpIHsKKwkJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGYpIHsKKwkJCQlpZiAoZi5pc0RpcmVjdG9yeSgpKSByZXR1cm4gdHJ1ZTsKKwkJCQkKKwkJCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOworCQkJCWlmICghKG5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnByb3BlcnRpZXMiKSkpIHJldHVybiBmYWxzZTsKKwkJCQlpZiAobmFtZS5pbmRleE9mKCJfIikgPiAwKSByZXR1cm4gZmFsc2U7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCisJCQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQkJCXJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbiIpOworCQkJfQorCQl9KTsKKwkJCisJCXByb2plY3RGaWxlQ2hvb3Nlci5zZXRGaWxlRmlsdGVyKG5ldyBqYXZheC5zd2luZy5maWxlY2hvb3Nlci5GaWxlRmlsdGVyKCkgeworCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworCQkJCWlmIChmLmlzRGlyZWN0b3J5KCkpIHJldHVybiB0cnVlOworCQkJCQorCQkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQkJaWYgKCEobmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIucmJwcm9qZWN0IikpKSByZXR1cm4gZmFsc2U7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQkKKwkJCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCQkJcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3Byb2plY3RfZmlsdGVyX2Rlc2NyaXB0aW9uIik7CQorCQkJfQorCQl9KTsKKworICAgICAgICAvLyAqKiBUaGUgTWFpbiBwcm9ncmFtIGljb24gKioKKyAgICAgICAgc2V0SWNvbkltYWdlKChuZXcgSW1hZ2VJY29uKGdldENsYXNzKCkuZ2V0UmVzb3VyY2UoImltYWdlcy90cmVlX2ljb25fYnVuZGxlLmdpZiIpKSkuZ2V0SW1hZ2UoKSk7CisJCQorCQkvLyAqKiBNQUlOIE1FTlUgQkFSIElURU1TICoqCisJCWpNZW51QmFyTWFpbiA9IG5ldyBSQk1hbmFnZXJNZW51QmFyKHRoaXMpOworCQkKKwkJLy8gKiogRElTUExBWSBUUkVFICoqCisJCS8valNjcm9sbFBhbmVUcmVlLnNldFNpemUoZGltTGVmdCk7CisJCXVwZGF0ZURpc3BsYXlUcmVlKCk7CisJCXVwZGF0ZVByb2plY3RUcmVlKCk7CisJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJCisJCWpQYW5lbFN0YXRzLnNldFNpemUoZGltUmlnaHQpOworCQlqUGFuZWxVbnRyYW5zLnNldFNpemUoZGltUmlnaHQpOworCQlqUGFuZWxHcm91cHMuc2V0U2l6ZShkaW1SaWdodCk7CisJCWpQYW5lbFNlYXJjaC5zZXRTaXplKGRpbVJpZ2h0KTsKKwkJCisJCS8vICoqIE1BSU4gVEFCQkVEIFBBTkUgKioKKwkJalRhYmJlZFBhbmVNYWluLnNldFNpemUoZGltUmlnaHQpOworCQlqVGFiYmVkUGFuZU1haW4uYWRkVGFiKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFiX3N0YXRpc3RpY3MiKSwgalBhbmVsU3RhdHMpOworCQlqVGFiYmVkUGFuZU1haW4uYWRkVGFiKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFiX3VudHJhbnNsYXRlZCIpLCBqUGFuZWxVbnRyYW5zKTsKKwkJalRhYmJlZFBhbmVNYWluLmFkZFRhYihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl9ncm91cHMiKSwgalBhbmVsR3JvdXBzKTsKKwkJalRhYmJlZFBhbmVNYWluLmFkZFRhYihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl9zZWFyY2giKSwgalBhbmVsU2VhcmNoKTsKKwkJCisJCS8vICoqIExFRlQgVEFCQkVEIFBBTkUgKioKKwkJdHJlZVRhYmJlZFBhbmUuc2V0U2l6ZShkaW1MZWZ0KTsKKwkJdHJlZVRhYmJlZFBhbmUuc2V0UHJlZmVycmVkU2l6ZShkaW1MZWZ0KTsKKwkJdHJlZVRhYmJlZFBhbmUuYWRkVGFiKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFiX2J1bmRsZSIpLCBqU2Nyb2xsUGFuZVRyZWUpOworCQl0cmVlVGFiYmVkUGFuZS5hZGRUYWIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJfcHJvamVjdCIpLCBwcm9qZWN0U2Nyb2xsUGFuZSk7CisJCXRyZWVUYWJiZWRQYW5lLmFkZENoYW5nZUxpc3RlbmVyKHRoaXMpOworCQkKKwkJLy8gKiogTUFJTiBTUExJVCBQQU5FICoqCisJCS8valNwbGl0UGFuZU1haW4uc2V0U2l6ZShkaW1Cb3R0b20pOworCQkvL2pTcGxpdFBhbmVNYWluLnNldExlZnRDb21wb25lbnQoalNjcm9sbFBhbmVUcmVlKTsKKwkJalNwbGl0UGFuZU1haW4uc2V0TGVmdENvbXBvbmVudCh0cmVlVGFiYmVkUGFuZSk7CisJCWpTcGxpdFBhbmVNYWluLnNldFJpZ2h0Q29tcG9uZW50KGpUYWJiZWRQYW5lTWFpbik7CisJCWpTcGxpdFBhbmVNYWluLnNldENvbnRpbnVvdXNMYXlvdXQodHJ1ZSk7CisJCQorCQkvLyAqKiBCT1RUT00gUEFORUwgKioKKwkJLy9qUGFuZWxCb3R0b20uc2V0UHJlZmVycmVkU2l6ZShkaW1Cb3R0b20pOworCQlqUGFuZWxCb3R0b20uc2V0TWF4aW11bVNpemUoZGltQm90dG9tTWF4KTsKKwkJalBhbmVsQm90dG9tLnNldE1pbmltdW1TaXplKGRpbUJvdHRvbU1pbik7CisJCWpQYW5lbEJvdHRvbS5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVMaW5lQm9yZGVyKENvbG9yLmJsYWNrKSk7CisJCWpQYW5lbEJvdHRvbS5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgxLDEpKTsKKwkJalBhbmVsQm90dG9tLnJlbW92ZUFsbCgpOworCQlqUGFuZWxCb3R0b20uYWRkKGpTcGxpdFBhbmVNYWluLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCisJCS8vICoqIE1BSU4gRlJBTUUgU0VUVVAgKioKKwkJZGltTWFpbi5oZWlnaHQgKz0gak1lbnVCYXJNYWluLmdldFByZWZlcnJlZFNpemUoKS5oZWlnaHQ7CisJCXNldFNpemUoZGltTWFpbik7CisJCSgoSkNvbXBvbmVudClnZXRDb250ZW50UGFuZSgpKS5zZXRNYXhpbXVtU2l6ZShkaW1NYWluTWF4KTsKKwkJKChKQ29tcG9uZW50KWdldENvbnRlbnRQYW5lKCkpLnNldE1pbmltdW1TaXplKGRpbU1haW5NaW4pOworCQlzZXRKTWVudUJhcihqTWVudUJhck1haW4pOworCQlnZXRDb250ZW50UGFuZSgpLnJlbW92ZUFsbCgpOworCQlnZXRDb250ZW50UGFuZSgpLmFkZChqUGFuZWxCb3R0b20sIEJvcmRlckxheW91dC5DRU5URVIpOworCQlzZXRUaXRsZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInJlc291cmNlX2J1bmRsZV9tYW5hZ2VyIikpOworCQl2YWxpZGF0ZVRyZWUoKTsKKwkJCisJCWFkZFdpbmRvd0xpc3RlbmVyKG5ldyBqYXZhLmF3dC5ldmVudC5XaW5kb3dBZGFwdGVyKCkgeworCQkJcHVibGljIHZvaWQgd2luZG93Q2xvc2luZyhqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudCBlKSB7CisJCQkJdGhpc1dpbmRvd0Nsb3NpbmcoZSk7CisJCQl9CisJCX0pOworCX0KKyAgCisgIAlwcml2YXRlIGJvb2xlYW4gbVNob3duID0gZmFsc2U7CisJCisJLyoqCisJICogUmV2ZWFscyB0aGUgcHJpdmF0ZSBtZXRob2Qgb2YgSkZyYW1lLnZhbGlkYXRlVHJlZSgpCisJICovCisJCisJcHVibGljIHZvaWQgdmFsaWRhdGVNeVRyZWUoKSB7CisJCXZhbGlkYXRlVHJlZSgpOworCX0KKwkKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IFJlc291cmNlIEZpbGUgKGkuZS4gRW5nbGlzaCwgRW5nbGlzaCBDYW5hZGEsIEZpbm5pc2gsIGV0Yy4pCisJICovCisJCisJcHVibGljIHZvaWQgY3JlYXRlUmVzb3VyY2VGaWxlKCkgeworCQluZXcgUmVzb3VyY2VDcmVhdGlvbkRpYWxvZyhyYm0sIHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX25ld19maWxlIiksIHRydWUpOworCX0KKwkKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGdyb3VwIGZvciBncm91cGluZyBCdW5kbGVJdGVtcworCSAqLworCQorCXB1YmxpYyB2b2lkIGNyZWF0ZUJ1bmRsZUdyb3VwKCkgeworCQluZXcgQnVuZGxlR3JvdXBDcmVhdGlvbkRpYWxvZyhyYm0sIHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX25ld19ncm91cCIpLCB0cnVlKTsKKwkJdXBkYXRlRGlzcGxheVBhbmVscygpOworCX0KKwkKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IEJ1bmRsZUl0ZW0KKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBjcmVhdGVCdW5kbGVJdGVtKCkgeworCQluZXcgQnVuZGxlSXRlbUNyZWF0aW9uRGlhbG9nKHJibSwgdGhpcywgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfbmV3X2l0ZW0iKSwgdHJ1ZSk7CisJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwl9CisJCisJLyoqCisJICogSGFuZGxlcyBldmVudHMgZ2VuZXJhdGVkCisJICovCisJCisJcHVibGljIHZvaWQgdmFsdWVDaGFuZ2VkKFRyZWVTZWxlY3Rpb25FdmVudCBldikgeworCQlpZiAoZXYuZ2V0U291cmNlKCkgPT0gcHJvamVjdFRyZWUpIHVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJZWxzZSBpZiAoZXYuZ2V0U291cmNlKCkgPT0galRyZWVEaXNwbGF5KSB7CisJCQlUcmVlUGF0aCBzZWxQYXRoID0galRyZWVEaXNwbGF5LmdldFNlbGVjdGlvblBhdGgoKTsKKwkJCWFjdGl2ZU5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSlzZWxQYXRoLmdldExhc3RQYXRoQ29tcG9uZW50KCk7CisJCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJCQkvKgorCQkJaW50IHNlbFJvdyA9IGpUcmVlRGlzcGxheS5nZXRSb3dGb3JMb2NhdGlvbihldi5nZXRYKCksIGV2LmdldFkoKSk7CisJCQlUcmVlUGF0aCBzZWxQYXRoID0galRyZWVEaXNwbGF5LmdldFBhdGhGb3JMb2NhdGlvbihldi5nZXRYKCksIGV2LmdldFkoKSk7CisJCQlpZiAoc2VsUm93ICE9IC0xKSB7CisgICAgICAgICAgICBpZiAoZXYuZ2V0Q2xpY2tDb3VudCgpID09IDEgJiYgZXYuZ2V0U291cmNlKCkgPT0galRyZWVEaXNwbGF5KSB7CisJCQkJCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdGhlciB0cmVlIik7CisJCQl9IGVsc2UgaWYgKGV2LmdldENsaWNrQ291bnQoKSA9PSAxICYmIGV2LmdldFNvdXJjZSgpID09IHByb2plY3RUcmVlKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJNb3VzZSBwcmVzc2VkIik7CisJCQkJdXBkYXRlUHJvamVjdFBhbmVscygpOwkKKwkJCX0gZWxzZSBTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nLnZhbHVlT2YoZXYuZ2V0Q2xpY2tDb3VudCgpKSArICIgIiArIGV2LmdldFNvdXJjZSgpLnRvU3RyaW5nKCkpOworCQkJCisJCQkqLworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHN0YXRlQ2hhbmdlZChDaGFuZ2VFdmVudCBldikgeworCQlpZiAoZXYuZ2V0U291cmNlKCkgPT0gdHJlZVRhYmJlZFBhbmUpIHsKKwkJCWludCBpbmRleCA9IHRyZWVUYWJiZWRQYW5lLmdldFNlbGVjdGVkSW5kZXgoKTsJCisJCQlTdHJpbmcgdGl0bGUgPSB0cmVlVGFiYmVkUGFuZS5nZXRUaXRsZUF0KGluZGV4KTsKKwkJCWlmICh0aXRsZS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0YWJfYnVuZGxlIikpKSB7CisJCQkJalNwbGl0UGFuZU1haW4uc2V0UmlnaHRDb21wb25lbnQoalRhYmJlZFBhbmVNYWluKTsKKwkJCQl1cGRhdGVEaXNwbGF5UGFuZWxzKCk7CisJCQl9IGVsc2UgaWYgKHRpdGxlLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl9wcm9qZWN0IikpKSB7CisJCQkJalNwbGl0UGFuZU1haW4uc2V0UmlnaHRDb21wb25lbnQocHJvamVjdFBhbmVsKTsKKwkJCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCQl9CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCWlmIChldi5nZXRJRCgpID09IEFjdGlvbkV2ZW50LkFDVElPTl9QRVJGT1JNRUQpIHsKKwkJCWlmIChldi5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIEpNZW51SXRlbSAmJiAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpICE9IG51bGwgJiYKKwkJCQkoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIl9fIikpIHsgICAgICAgICAgICAgICAvLyBNZW51IC0+IEZpbGUgLT4gX19SZWNlbnQgRmlsZQorCQkJCS8vIFRoaXMgaXRlbSBpcyBhIHJlY2VudCBmaWxlIHNlbGVjdGlvbi4gV2UgbmVlZCB0byBvcGVuIHRoYXQgZmlsZQorCQkJCVN0cmluZyBmaWxlTG9jYXRpb24gPSAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpOworCQkJCWZpbGVMb2NhdGlvbiA9IGZpbGVMb2NhdGlvbi5zdWJzdHJpbmcoMixmaWxlTG9jYXRpb24ubGVuZ3RoKCkpOworCQkJCXRyeSB7CisJCQkJCXJibSA9IG5ldyBSQk1hbmFnZXIobmV3IEZpbGUoZmlsZUxvY2F0aW9uKSk7CisJCQkJCXVwZGF0ZURpc3BsYXlUcmVlKCk7CisJCQkJCXVwZGF0ZVByb2plY3RUcmVlKCk7CisJCQkJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcyxSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX29wZW5pbmdfZmlsZSIsIGV2LmdldEFjdGlvbkNvbW1hbmQoKSksCisJCQkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2Vycm9yX29wZW5pbmdfZmlsZSIpLAorCQkJCQkJCQkJCQkJICBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQkJcmJtID0gbnVsbDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfc2F2ZSIpKSAmJgorCQkJCQkgICAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpICE9IG51bGwpIHsgICAgICAgICAgICAgICAgLy8gUG9wdXAgVHJlZSBNZW51IC0+IFNhdmUKKwkJCQlTdHJpbmcgc2VsZWN0ZWRFbmNvZGluZyA9ICgoSk1lbnVJdGVtKWV2LmdldFNvdXJjZSgpKS5nZXROYW1lKCk7CisJCQkJc2F2ZVJlc291cmNlcyhzZWxlY3RlZEVuY29kaW5nKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9oaWRlIikpICYmCisJCQkJCSAgICgoSk1lbnVJdGVtKWV2LmdldFNvdXJjZSgpKS5nZXROYW1lKCkgIT0gbnVsbCkgeyAgICAgICAgICAgICAgICAvLyBQb3B1cCBUcmVlIE1lbnUgLT4gSGlkZQorCQkJCVN0cmluZyBzZWxlY3RlZEVuY29kaW5nID0gKChKTWVudUl0ZW0pZXYuZ2V0U291cmNlKCkpLmdldE5hbWUoKTsKKwkJCQkvLyBTaG91bGQgSSBwcm9tcHQgZm9yIHRoaXM/CisJCQkJaGlkZVJlc291cmNlcyhzZWxlY3RlZEVuY29kaW5nKTsKKwkJCX0gIGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfZGVsZXRlIikpICYmCisJCQkJCSAgICgoSk1lbnVJdGVtKWV2LmdldFNvdXJjZSgpKS5nZXROYW1lKCkgIT0gbnVsbCkgeyAgICAgICAgICAgICAgICAvLyBQb3B1cCBUcmVlIE1lbnUgLT4gRGVsZXRlCisJCQkJU3RyaW5nIHNlbGVjdGVkRW5jb2RpbmcgPSAoKEpNZW51SXRlbSlldi5nZXRTb3VyY2UoKSkuZ2V0TmFtZSgpOworCQkJCWludCByZXNwb25zZSA9IEpPcHRpb25QYW5lLnNob3dDb25maXJtRGlhbG9nKHRoaXMsCisJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2RlbGV0ZV93YXJuaW5nIiksCisJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX3F1aXQiKSwgSk9wdGlvblBhbmUuWUVTX05PX0NBTkNFTF9PUFRJT04sCisJCQkJCUpPcHRpb25QYW5lLldBUk5JTkdfTUVTU0FHRSk7CisJCQkJaWYgKHJlc3BvbnNlID09IEpPcHRpb25QYW5lLllFU19PUFRJT04pIHsKKwkJCQkJZGVsZXRlUmVzb3VyY2VzKHNlbGVjdGVkRW5jb2RpbmcpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9uZXdfcHJvamVjdCIpKSkgeworCQkJCVN0cmluZyByZXNwb25zZSA9IEpPcHRpb25QYW5lLnNob3dJbnB1dERpYWxvZyh0aGlzLCAgICAgICAgICAgICAgICAgICAvLyBQb3B1cCBQcm9qZWN0IE1lbnUgLT4gTmV3IFByb2plY3QKKwkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfbmV3X3Byb2plY3QiKSwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfbmV3X3Byb2plY3QiKSwKKwkJCQkJSk9wdGlvblBhbmUuUVVFU1RJT05fTUVTU0FHRSk7CisJCQkJaWYgKHJlc3BvbnNlID09IG51bGwgfHwgcmVzcG9uc2UudHJpbSgpLmVxdWFscygiIikpIHJldHVybjsKKwkJCQlwcm9qZWN0ID0gbmV3IFJCUHJvamVjdChyZXNwb25zZSk7CisJCQkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfb3Blbl9wcm9qZWN0IikpKSB7CisJCQkJaW50IHJlc3VsdCA9IHByb2plY3RGaWxlQ2hvb3Nlci5zaG93T3BlbkRpYWxvZyh0aGlzKTsgICAgICAgICAgICAgICAgLy8gUG9wdXAgUHJvamVjdCBNZW51IC0+IE9wZW4gUHJvamVjdAorCQkJCWlmIChyZXN1bHQgPT0gSkZpbGVDaG9vc2VyLkFQUFJPVkVfT1BUSU9OKSB7CisJCQkJCUZpbGUgZiA9IHByb2plY3RGaWxlQ2hvb3Nlci5nZXRTZWxlY3RlZEZpbGUoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXByb2plY3QgPSBuZXcgUkJQcm9qZWN0KGYpOworCQkJCQkJdXBkYXRlUHJvamVjdFRyZWUoKTsKKwkJCQkJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisJCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLAorCQkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfY3JlYXRpbmdfcHJvamVjdCIpLAorCQkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2Vycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX3NhdmVfcHJvamVjdCIpKSkgeworCQkJCWludCByZXN1bHQgPSBwcm9qZWN0RmlsZUNob29zZXIuc2hvd1NhdmVEaWFsb2codGhpcyk7ICAgICAgICAgICAgICAgIC8vIFBvcHVwIFByb2plY3QgTWVudSAtPiBTYXZlIFByb2plY3QKKwkJCQlpZiAocmVzdWx0ID09IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgeworCQkJCQlGaWxlIGYgPSBwcm9qZWN0RmlsZUNob29zZXIuZ2V0U2VsZWN0ZWRGaWxlKCk7CisJCQkJCXRyeSB7CisJCQkJCQlwcm9qZWN0LndyaXRlKGYpOworCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKwkJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsCisJCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9zYXZpbmdfcHJvamVjdCIpLAorCQkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2Vycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX2FkZF9wcm9qZWN0X2J1bmRsZSIpKSkgeworCQkJCWludCByZXN1bHQgPSBvcGVuRmlsZUNob29zZXIuc2hvd09wZW5EaWFsb2codGhpcyk7ICAgICAgICAgICAgICAgICAgIC8vIFBvcHVwIFByb2plY3QgTWVudSAtPiBBZGQgQnVuZGxlCisJCQkJaWYgKHJlc3VsdCA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKwkJCQkJRmlsZSBmID0gb3BlbkZpbGVDaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOworCQkJCQl0cnkgeworCQkJCQkJcHJvamVjdC5hZGRCdW5kbGUoZi5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQkJCQkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKwkJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsCisJCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9hZGRpbmdfcHJvamVjdF9idW5kbGUiKSwKKwkJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9yZW1vdmVfcHJvamVjdF9idW5kbGUiKSkpIHsKKwkJCQlTdHJpbmcgYnVuZGxlTmFtZSA9ICgoSk1lbnVJdGVtKWV2LmdldFNvdXJjZSgpKS5nZXROYW1lKCk7ICAgICAgICAgICAvLyBQb3B1cCBQcm9qZWN0IE1lbnUgLT4gUmVtb3ZlIEJ1bmRsZQorCQkJCXByb2plY3QucmVtb3ZlQnVuZGxlKGJ1bmRsZU5hbWUpOworCQkJCXVwZGF0ZVByb2plY3RUcmVlKCk7CisJCQkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX3NlbGVjdF9wcm9qZWN0X2J1bmRsZSIpKSkgeworCQkJCVN0cmluZyBidW5kbGVOYW1lID0gKChKTWVudUl0ZW0pZXYuZ2V0U291cmNlKCkpLmdldE5hbWUoKTsgICAgICAgICAgIC8vIFBvcHVwIFByb2plY3QgTWVudSAtPiBTZWxlY3QgQnVuZGxlCisJCQkJUkJNYW5hZ2VyIGJ1bmRsZSA9IHByb2plY3QuZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOworCQkJCXJibSA9IGJ1bmRsZTsKKwkJCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQkJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9xdWl0IikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gUXVpdAorCQkJCXRoaXNXaW5kb3dDbG9zaW5nKG51bGwpOworCQkJCXJldHVybjsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9uZXciKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBOZXcgUmVzb3VyY2UgQnVuZGxlCisJCQkJcHJvbXB0Rm9yU2F2ZShudWxsKTsKKwkJCQlTdHJpbmcgb2xkVXNlciA9IGdldFVzZXIoKTsKKwkJCQlpZiAocmJtICE9IG51bGwgJiYgcmJtLmdldFVzZXIoKSAhPSBudWxsICYmICEocmJtLmdldFVzZXIoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bmtub3duX3VzZXIiKSkpKQorCQkJCQlvbGRVc2VyID0gcmJtLmdldFVzZXIoKTsKKwkJCQlTdHJpbmcgcmVzcG9uc2UgPSBKT3B0aW9uUGFuZS5zaG93SW5wdXREaWFsb2codGhpcywKKwkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfbmV3X2Jhc2VjbGFzcyIpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9uZXdfYnVuZGxlIiksCisJCQkJCUpPcHRpb25QYW5lLlFVRVNUSU9OX01FU1NBR0UpOworCQkJCWlmIChyZXNwb25zZSAhPSBudWxsKSB7CisJCQkJCS8vIFRlc3QgdGhlIHJlc3BvbnNlIGZvciB3aGl0ZSBzcGFjZQorCQkJCQlpZiAocmVzcG9uc2UuaW5kZXhPZigiICIpID4gMCB8fCByZXNwb25zZS5pbmRleE9mKCJcdCIpID4gMCB8fCByZXNwb25zZS5pbmRleE9mKCJcbiIpID4gMCkgeworCQkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywKKwkJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2Jhc2VjbGFzc193aGl0ZXNwYWNlIikgKyAiXG4iICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9idW5kbGVfbm90X2NyZWF0ZWQiKSwKKwkJCQkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lcnJvcl9jcmVhdGluZ19idW5kbGUiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlyYm0gPSBuZXcgUkJNYW5hZ2VyKHJlc3BvbnNlKTsKKwkJCQkJCXVwZGF0ZURpc3BsYXlUcmVlKCk7CisJCQkJCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQkJCQkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQkJCQkJdXBkYXRlRGlzcGxheVBhbmVscygpOworCQkJCQl9CisJCQkJfQorCQkJCS8vIFVwZGF0ZSB0aGUgdXNlciBpbmZvcm1hdGlvbgorCQkJCWlmIChvbGRVc2VyLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInVua25vd25fdXNlciIpKSkgeworCQkJCQlTdHJpbmcgdXNlciA9IEpPcHRpb25QYW5lLnNob3dJbnB1dERpYWxvZyh0aGlzLAorCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdXNlcl9uYW1lIiksIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX3VzZXJfbmFtZSIpLAorCQkJCQkJSk9wdGlvblBhbmUuUVVFU1RJT05fTUVTU0FHRSk7CisJCQkJCWlmICh1c2VyICE9IG51bGwgJiYgISh1c2VyLmVxdWFscygiIikpKSBzZXRVc2VyKHVzZXIpOworCQkJCX0gZWxzZSByYm0uc2V0VXNlcihvbGRVc2VyKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9vcGVuIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gT3BlbiBSZXNvdXJjZSBCdW5kbGUKKwkJCQlwcm9tcHRGb3JTYXZlKG51bGwpOworCQkJCVN0cmluZyBvbGRVc2VyID0gZ2V0VXNlcigpOworCQkJCWlmIChyYm0gIT0gbnVsbCAmJiByYm0uZ2V0VXNlcigpICE9IG51bGwgJiYgIShyYm0uZ2V0VXNlcigpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInVua25vd25fdXNlciIpKSkpCisJCQkJCW9sZFVzZXIgPSByYm0uZ2V0VXNlcigpOworCQkJCW9wZW5GaWxlQ2hvb3Nlci5zZXRTZWxlY3RlZEZpbGUobmV3IEZpbGUoIlJlc291cmNlcyIgKyBGaWxlLnNlcGFyYXRvciArICJSQk1hbmFnZXIucHJvcGVydGllcyIpKTsKKwkJCQlpbnQgc3RhdHVzID0gb3BlbkZpbGVDaG9vc2VyLnNob3dPcGVuRGlhbG9nKHRoaXMpOworCQkJCWlmIChzdGF0dXMgPT0gSkZpbGVDaG9vc2VyLkNBTkNFTF9PUFRJT04pIHsKKwkJCQkJLy8gRmlsZSBvcGVuaW5nIGNhbmNlbGVkCisJCQkJfSBlbHNlIGlmIChzdGF0dXMgPT0gSkZpbGVDaG9vc2VyLkVSUk9SX09QVElPTikgeworCQkJCQkvLyBFcnJvciBpbiBmaWxlIG9wZW4KKwkJCQl9IGVsc2UgeworCQkJCQkvLyBBIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWQKKwkJCQkJdHJ5IHsKKwkJCQkJCXJibSA9IG5ldyBSQk1hbmFnZXIob3BlbkZpbGVDaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpKTsKKwkJCQkJCXVwZGF0ZURpc3BsYXlUcmVlKCk7CisJCQkJCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQkJCQkJdXBkYXRlUHJvamVjdFBhbmVscygpOworCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkJCS8vIFNob3VsZCBwcm92aWRlIHNvbWUgYWxlcnQgaGVyZQorCQkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJDb3VsZCBub3Qgb3BlbiB0aGUgZmlsZSAiICsgb3BlbkZpbGVDaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpLmdldEFic29sdXRlUGF0aCgpICsKKwkJCQkJCQkJCQkgICAiOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisJCQkJCQlyYm0gPSBudWxsOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChyYm0gPT0gbnVsbCkgcmV0dXJuOworCQkJCS8vIFVwZGF0ZSB0aGUgdXNlciBpbmZvcm1hdGlvbgorCQkJCWlmIChvbGRVc2VyLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInVua25vd25fdXNlciIpKSkgeworCQkJCQlTdHJpbmcgdXNlciA9IEpPcHRpb25QYW5lLnNob3dJbnB1dERpYWxvZyh0aGlzLAorCQkJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdXNlcl9uYW1lIiksIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX3VzZXJfbmFtZSIpLAorCQkJCQkJSk9wdGlvblBhbmUuUVVFU1RJT05fTUVTU0FHRSk7CisJCQkJCWlmICh1c2VyICE9IG51bGwgJiYgISh1c2VyLmVxdWFscygiIikpKQorCQkJCQkJc2V0VXNlcih1c2VyKTsKKwkJCQl9IGVsc2UKKwkJCQkJcmJtLnNldFVzZXIob2xkVXNlcik7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfc2F2ZSIpKSkgeworCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBGaWxlIC0+IFNhdmUgUmVzb3VyY2UgQnVuZGxlCisJCQkJc2F2ZVJlc291cmNlcygpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3NhdmVhcyIpKSkgeworCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBGaWxlIC0+IFNhdmUgUmVzb3VyY2UgQnVuZGxlIEFzCisJCQkJc2F2ZVJlc291cmNlc0FzKCk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXMiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBJbXBvcnQgLT4gUHJvcGVydGllcworCQkJCWlmIChyYm0gPT0gbnVsbCB8fCByYm0uZ2V0QnVuZGxlcygpID09IG51bGwpIHJldHVybjsKKwkJCQlSQlByb3BlcnRpZXNJbXBvcnRlciBpbXBvcnRlciA9IG5ldyBSQlByb3BlcnRpZXNJbXBvcnRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9wcm9wZXJ0aWVzX3RpdGxlIiksIHJibSwgdGhpcyk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X2phdmEiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBJbXBvcnQgLT4gSmF2YQorCQkJCWlmIChyYm0gPT0gbnVsbCB8fCByYm0uZ2V0QnVuZGxlcygpID09IG51bGwpIHJldHVybjsKKwkJCQlSQkphdmFJbXBvcnRlciBpbXBvcnRlciA9IG5ldyBSQkphdmFJbXBvcnRlcihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImltcG9ydF9qYXZhX3RpdGxlIiksIHJibSwgdGhpcyk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X1RNWCIpKSkgeworCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBGaWxlIC0+IEltcG9ydCAtPiBUTVgKKwkJCQlpZiAocmJtID09IG51bGwgfHwgcmJtLmdldEJ1bmRsZXMoKSA9PSBudWxsKQorCQkJCQlyZXR1cm47CisJCQkJUkJUTVhJbXBvcnRlciBpbXBvcnRlciA9IG5ldyBSQlRNWEltcG9ydGVyKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiaW1wb3J0X1RNWF90aXRsZSIpLCByYm0sIHRoaXMpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9YTEYiKSkpIHsKKwkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gSW1wb3J0IC0+IFhMSUZGCisJCQkJaWYgKHJibSA9PSBudWxsIHx8IHJibS5nZXRCdW5kbGVzKCkgPT0gbnVsbCkKKwkJCQkgICAgcmV0dXJuOworCQkJCVJCeGxpZmZJbXBvcnRlciBpbXBvcnRlciA9IG5ldyBSQnhsaWZmSW1wb3J0ZXIoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJpbXBvcnRfWExGX3RpdGxlIiksIHJibSwgdGhpcyk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X3Byb3BlcnRpZXMiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBFeHBvcnQgLT4gUHJvcGVydGllcworCQkJCVJCUHJvcGVydGllc0V4cG9ydGVyIGV4cCA9IG5ldyBSQlByb3BlcnRpZXNFeHBvcnRlcigpOworCQkJCXRyeSB7CisJCQkJCWlmIChyYm0gIT0gbnVsbCAmJiByYm0uZ2V0QnVuZGxlcygpICE9IG51bGwpCisJCQkJCQlleHAuZXhwb3J0KHJibSk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfZXhwb3J0IiksCisJCQkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9qYXZhIikpKSB7CisJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICAvLyBNZW51IC0+IEZpbGUgLT4gRXhwb3J0IC0+IEphdmEKKwkJCQlSQkphdmFFeHBvcnRlciBleHAgPSBuZXcgUkJKYXZhRXhwb3J0ZXIoKTsKKwkJCQl0cnkgeworCQkJCQlpZiAocmJtICE9IG51bGwgJiYgcmJtLmdldEJ1bmRsZXMoKSAhPSBudWxsKSBleHAuZXhwb3J0KHJibSk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfZXhwb3J0IiksCisJCQkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9JQ1UiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBFeHBvcnQgLT4gSmF2YQorCQkJCVJCSUNVRXhwb3J0ZXIgZXhwID0gbmV3IFJCSUNVRXhwb3J0ZXIoKTsKKwkJCQl0cnkgeworCQkJCQlpZiAocmJtICE9IG51bGwgJiYgcmJtLmdldEJ1bmRsZXMoKSAhPSBudWxsKSBleHAuZXhwb3J0KHJibSk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfZXhwb3J0IiksCisJCQkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9UTVgiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBFeHBvcnQgLT4gVE1YCisJCQkJUkJUTVhFeHBvcnRlciBleHAgPSBuZXcgUkJUTVhFeHBvcnRlcigpOworCQkJCXRyeSB7CisJCQkJCWlmIChyYm0gIT0gbnVsbCAmJiByYm0uZ2V0QnVuZGxlcygpICE9IG51bGwpIGV4cC5leHBvcnQocmJtKTsKKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9leHBvcnQiKSwKKwkJCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X1hMRiIpKSkgeworCQkJCSAgIC8vIE1lbnUgLT4gRmlsZSAtPiBFeHBvcnQgLT4gWExJRkYKKwkJCQlSQnhsaWZmRXhwb3J0ZXIgZXhwID0gbmV3IFJCeGxpZmZFeHBvcnRlcigpOworCQkJCXRyeSB7CisJCQkJCWlmIChyYm0gIT0gbnVsbCAmJiByYm0uZ2V0QnVuZGxlcygpICE9IG51bGwpCisJCQkJCSAgICBleHAuZXhwb3J0KHJibSk7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfZXhwb3J0IiksCisJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGZpbGUiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gT3B0aW9ucyAtPiBBZGQgTmV3IFJlc291cmNlCisJCQkJY3JlYXRlUmVzb3VyY2VGaWxlKCk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZ3JvdXAiKSkgfHwKKwkJCQkJICAgZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9jcmVhdGVfZ3JvdXAiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gT3B0aW9ucyAtPiBBZGQgTmV3IEdyb3VwCisJCQkJY3JlYXRlQnVuZGxlR3JvdXAoKTsKKwkJCX0gZWxzZSBpZiAoZXYuZ2V0QWN0aW9uQ29tbWFuZCgpLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRlbnRyeSIpKSkgeworCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBPcHRpb25zIC0+IEFkZCBOZXcgRW50cnkKKwkJCQljcmVhdGVCdW5kbGVJdGVtKCk7CisJCQl9IGVsc2UgaWYgKGV2LmdldEFjdGlvbkNvbW1hbmQoKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfcHJlZmVyZW5jZXMiKSkpIHsKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIC8vIE1lbnUgLT4gT3B0aW9ucyAtPiBQcmVmZXJlbmNlcworCQkJCVByZWZlcmVuY2VzRGlhbG9nIHBkID0gbmV3IFByZWZlcmVuY2VzRGlhbG9nKHRoaXMpOworCQkJfSBlbHNlIGlmIChldi5nZXRBY3Rpb25Db21tYW5kKCkuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9oZWxwX2Fib3V0IikpKSB7IAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgLy8gTWVudSAtPiBIZWxwIC0+IEFib3V0IFJCTWFuYWdlcgorCQkJCUFib3V0RGlhbG9nLnNob3dEaWFsb2codGhpcyk7CisJCQl9IGVsc2UgUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKCJNaXNzZWQgQWN0aW9uIENvbW1hbmQ6ICIgKyBldi5nZXRBY3Rpb25Db21tYW5kKCkpOworCQkJCisJCX0KKwkJCisJfQorCQorCS8qKgorCSAqIEhhbmRsZXMgZXZlbnRzIGdlbmVyYXRlZAorCSAqLworCQorCXB1YmxpYyB2b2lkIG1vdXNlUG9wdXAoTW91c2VFdmVudCBldikgeworCQlpZiAoZXYuZ2V0U291cmNlKCkgPT0galRyZWVEaXNwbGF5KSB7CisJCQlpbnQgc2VsUm93ID0galRyZWVEaXNwbGF5LmdldFJvd0ZvckxvY2F0aW9uKGV2LmdldFgoKSwgZXYuZ2V0WSgpKTsKKwkJCVRyZWVQYXRoIHNlbFBhdGggPSBqVHJlZURpc3BsYXkuZ2V0UGF0aEZvckxvY2F0aW9uKGV2LmdldFgoKSwgZXYuZ2V0WSgpKTsKKwkJCWlmIChzZWxSb3cgIT0gLTEpIHsKKwkJCSAgICBpZiAoZXYuZ2V0Q2xpY2tDb3VudCgpID09IDEpIHsKKwkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBub2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpc2VsUGF0aC5nZXRMYXN0UGF0aENvbXBvbmVudCgpOworCQkJCQlPYmplY3Qgb2JqID0gbm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCQkJCWlmIChvYmogPT0gbnVsbCB8fCAhKG9iaiBpbnN0YW5jZW9mIEJ1bmRsZSkpIHJldHVybjsKKwkJCQkJQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpb2JqOworCQkJCQlTdHJpbmcgZW5jb2RpbmcgPSBidW5kbGUuZW5jb2Rpbmc7CisJCQkJCWlmIChlbmNvZGluZyA9PSBudWxsKSBlbmNvZGluZyA9IG5ldyBTdHJpbmcoKTsKKwkJCQkJCQkKKwkJCQkJLy8gQ3JlYXRlIHRoZSBtZW51IHRvIGRpc3BsYXkKKwkJCQkJSlBvcHVwTWVudSBwb3B1cE1lbnUgPSBuZXcgSlBvcHVwTWVudSgpOworCQkJCQlKTWVudUl0ZW0gc2F2ZUl0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX3NhdmUiKSk7CisJCQkJCUpNZW51SXRlbSBoaWRlSXRlbSA9IG5ldyBKTWVudUl0ZW0oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfaGlkZSIpKTsKKwkJCQkJSk1lbnVJdGVtIGRlbGV0ZUl0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX2RlbGV0ZSIpKTsKKwkJCQkJCQkKKwkJCQkJc2F2ZUl0ZW0uc2V0TmFtZShlbmNvZGluZyk7IHNhdmVJdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQloaWRlSXRlbS5zZXROYW1lKGVuY29kaW5nKTsgaGlkZUl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCWRlbGV0ZUl0ZW0uc2V0TmFtZShlbmNvZGluZyk7IGRlbGV0ZUl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCQkJCisJCQkJCXBvcHVwTWVudS5hZGQoc2F2ZUl0ZW0pOworCQkJCQlpZiAobm9kZS5nZXRMZXZlbCgpICE9IDEpIHsKKwkJCQkJCXBvcHVwTWVudS5hZGQoaGlkZUl0ZW0pOworCQkJCQkJcG9wdXBNZW51LmFkZChkZWxldGVJdGVtKTsKKwkJCQkJfQorCQkJCQkJCQorCQkJCQlwb3B1cE1lbnUuc2hvdyhldi5nZXRDb21wb25lbnQoKSwgZXYuZ2V0WCgpLCBldi5nZXRZKCkpOworCQkJICAgIH0KKwkJCX0KKwkJfSBlbHNlIGlmIChldi5nZXRTb3VyY2UoKSA9PSBwcm9qZWN0VHJlZSkgeworCQkJaW50IHNlbFJvdyA9IHByb2plY3RUcmVlLmdldFJvd0ZvckxvY2F0aW9uKGV2LmdldFgoKSwgZXYuZ2V0WSgpKTsKKwkJCVRyZWVQYXRoIHNlbFBhdGggPSBwcm9qZWN0VHJlZS5nZXRQYXRoRm9yTG9jYXRpb24oZXYuZ2V0WCgpLCBldi5nZXRZKCkpOworCQkJaWYgKHNlbFJvdyAhPSAtMSAmJiBldi5nZXRDbGlja0NvdW50KCkgPT0gMSkgeworCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKXNlbFBhdGguZ2V0TGFzdFBhdGhDb21wb25lbnQoKTsKKwkJCQlPYmplY3Qgb2JqID0gbm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCQkJaWYgKG9iaiA9PSBudWxsKSByZXR1cm47CisJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkJCUpQb3B1cE1lbnUgcG9wdXBNZW51ID0gbmV3IEpQb3B1cE1lbnUoKTsKKwkJCQkJSk1lbnVJdGVtIG5ld0l0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX25ld19wcm9qZWN0IikpOworCQkJCQlKTWVudUl0ZW0gb3Blbkl0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX29wZW5fcHJvamVjdCIpKTsKKwkJCQkJSk1lbnVJdGVtIHNhdmVJdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9zYXZlX3Byb2plY3QiKSk7CisJCQkJCW5ld0l0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCW9wZW5JdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlzYXZlSXRlbS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJcG9wdXBNZW51LmFkZChuZXdJdGVtKTsKKwkJCQkJcG9wdXBNZW51LmFkZChvcGVuSXRlbSk7CisJCQkJCXBvcHVwTWVudS5hZGQoc2F2ZUl0ZW0pOworCQkJCQlwb3B1cE1lbnUuc2hvdyhldi5nZXRDb21wb25lbnQoKSwgZXYuZ2V0WCgpLCBldi5nZXRZKCkpOworCQkJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgUkJQcm9qZWN0KSB7CisJCQkJCUpQb3B1cE1lbnUgcG9wdXBNZW51ID0gbmV3IEpQb3B1cE1lbnUoKTsKKwkJCQkJSk1lbnVJdGVtIG5ld0l0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX25ld19wcm9qZWN0IikpOworCQkJCQlKTWVudUl0ZW0gb3Blbkl0ZW0gPSBuZXcgSk1lbnVJdGVtKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV90cmVlX29wZW5fcHJvamVjdCIpKTsKKwkJCQkJSk1lbnVJdGVtIHNhdmVJdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9zYXZlX3Byb2plY3QiKSk7CisJCQkJCUpNZW51SXRlbSBhZGRJdGVtID0gbmV3IEpNZW51SXRlbShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdHJlZV9hZGRfcHJvamVjdF9idW5kbGUiKSk7CisJCQkJCW5ld0l0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCW9wZW5JdGVtLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlzYXZlSXRlbS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJYWRkSXRlbS5hZGRBY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJcG9wdXBNZW51LmFkZChuZXdJdGVtKTsKKwkJCQkJcG9wdXBNZW51LmFkZChvcGVuSXRlbSk7CisJCQkJCXBvcHVwTWVudS5hZGQoc2F2ZUl0ZW0pOworCQkJCQlwb3B1cE1lbnUuYWRkKGFkZEl0ZW0pOworCQkJCQlwb3B1cE1lbnUuc2hvdyhldi5nZXRDb21wb25lbnQoKSwgZXYuZ2V0WCgpLCBldi5nZXRZKCkpOworCQkJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgUkJNYW5hZ2VyKSB7CisJCQkJCVJCTWFuYWdlciByYm0gPSAoUkJNYW5hZ2VyKW9iajsKKwkJCQkJSlBvcHVwTWVudSBwb3B1cE1lbnUgPSBuZXcgSlBvcHVwTWVudSgpOworCQkJCQlKTWVudUl0ZW0gc2VsZWN0SXRlbSA9IG5ldyBKTWVudUl0ZW0oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfc2VsZWN0X3Byb2plY3RfYnVuZGxlIikpOworCQkJCQlKTWVudUl0ZW0gcmVtb3ZlSXRlbSA9IG5ldyBKTWVudUl0ZW0oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3RyZWVfcmVtb3ZlX3Byb2plY3RfYnVuZGxlIikpOworCQkJCQlzZWxlY3RJdGVtLnNldE5hbWUocmJtLmdldEJhc2VDbGFzcygpKTsKKwkJCQkJcmVtb3ZlSXRlbS5zZXROYW1lKHJibS5nZXRCYXNlQ2xhc3MoKSk7CisJCQkJCXNlbGVjdEl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCXJlbW92ZUl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCXBvcHVwTWVudS5hZGQoc2VsZWN0SXRlbSk7CisJCQkJCXBvcHVwTWVudS5hZGQocmVtb3ZlSXRlbSk7CisJCQkJCXBvcHVwTWVudS5zaG93KGV2LmdldENvbXBvbmVudCgpLCBldi5nZXRYKCksIGV2LmdldFkoKSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIG1vdXNlUHJlc3NlZChNb3VzZUV2ZW50IGV2KSAgeworCQlpZiAoZXYuaXNQb3B1cFRyaWdnZXIoKSkgeworCQkJbW91c2VQb3B1cChldik7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgbW91c2VSZWxlYXNlZChNb3VzZUV2ZW50IGV2KSB7CisJCWlmIChldi5pc1BvcHVwVHJpZ2dlcigpKSB7CisJCQltb3VzZVBvcHVwKGV2KTsKKwkJCXJldHVybjsKKwkJfQorCQkvLyBOb3QgdGhlIHBvcHVwIHRyaWdnZXIKKwl9CisJCisJcHVibGljIHZvaWQgbW91c2VFbnRlcmVkKE1vdXNlRXZlbnQgZXYpICB7IH0KKwkKKwlwdWJsaWMgdm9pZCBtb3VzZUV4aXRlZChNb3VzZUV2ZW50IGV2KSAgIHsgfQorCQorCXB1YmxpYyB2b2lkIG1vdXNlQ2xpY2tlZChNb3VzZUV2ZW50IGV2KSB7CisJCWlmIChldi5nZXRDbGlja0NvdW50KCkgPT0gMiAmJiBldi5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIEpUYWJsZSkgeworCQkJLy8gV2UgYXJlIGdvaW5nIHRvIGRpc3BsYXkgdGhlIGVkaXQgZnJhbWUgZm9yIHRoZSBpdGVtIHNlbGVjdGVkCisJCQlCdW5kbGVJdGVtIGl0ZW0gPSBudWxsOworCQkJSlRhYmxlIHRhYmxlID0gKEpUYWJsZSkgZXYuZ2V0U291cmNlKCk7CisJCQlpZiAodGFibGUuZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCkgeworCQkJCWludCByb3cgPSB0YWJsZS5nZXRTZWxlY3RlZFJvdygpOworCQkJCVVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCBtb2RlbCA9IChVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwpdGFibGUuZ2V0TW9kZWwoKTsKKwkJCQlpdGVtID0gbW9kZWwuZ2V0QnVuZGxlSXRlbShyb3cpOworCQkJCUJ1bmRsZUl0ZW1EaWFsb2cgYmlEaWFsb2cgPSBuZXcgQnVuZGxlSXRlbURpYWxvZyhyYm0sIGl0ZW0sIChyYm0gPT0gbnVsbCA/ICIiIDogcmJtLmdldFVzZXIoKSksCisJCQkJCQkJCQkJCQkJCQkgdGhpcywgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfdGl0bGVfZWRpdF9pdGVtIiksIHRydWUpOworCQkJCW1vZGVsLnVwZGF0ZSgpOworCQkJfSBlbHNlIGlmICh0YWJsZS5nZXRNb2RlbCgpIGluc3RhbmNlb2YgU2VhcmNoSXRlbXNUYWJsZU1vZGVsKSB7CisJCQkJaW50IHJvdyA9IHRhYmxlLmdldFNlbGVjdGVkUm93KCk7CisJCQkJU2VhcmNoSXRlbXNUYWJsZU1vZGVsIG1vZGVsID0gKFNlYXJjaEl0ZW1zVGFibGVNb2RlbCl0YWJsZS5nZXRNb2RlbCgpOworCQkJCWl0ZW0gPSBtb2RlbC5nZXRCdW5kbGVJdGVtKHJvdyk7CisJCQkJQnVuZGxlSXRlbURpYWxvZyBiaURpYWxvZyA9IG5ldyBCdW5kbGVJdGVtRGlhbG9nKHJibSwgaXRlbSwgKHJibSA9PSBudWxsID8gIiIgOiByYm0uZ2V0VXNlcigpKSwKKwkJCQkJCQkJCQkJCQkJCSB0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9lZGl0X2l0ZW0iKSwgdHJ1ZSk7CisJCQkJbW9kZWwudXBkYXRlKCk7CisJCQl9IGVsc2UgaWYgKHRhYmxlLmdldE1vZGVsKCkgaW5zdGFuY2VvZiBHcm91cEl0ZW1zVGFibGVNb2RlbCkgeworCQkJCWludCByb3cgPSB0YWJsZS5nZXRTZWxlY3RlZFJvdygpOworCQkJCUdyb3VwSXRlbXNUYWJsZU1vZGVsIG1vZGVsID0gKEdyb3VwSXRlbXNUYWJsZU1vZGVsKXRhYmxlLmdldE1vZGVsKCk7CisJCQkJaXRlbSA9IG1vZGVsLmdldEJ1bmRsZUl0ZW0ocm93KTsKKwkJCQlCdW5kbGVJdGVtRGlhbG9nIGJpRGlhbG9nID0gbmV3IEJ1bmRsZUl0ZW1EaWFsb2cocmJtLCBpdGVtLCAocmJtID09IG51bGwgPyAiIiA6IHJibS5nZXRVc2VyKCkpLAorCQkJCQkJCQkJCQkJCQkJIHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3RpdGxlX2VkaXRfaXRlbSIpLCB0cnVlKTsKKwkJCQltb2RlbC51cGRhdGUoKTsKKwkJCX0KKwkJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJfQorCX0KKwkKKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9qZWN0UGFuZWxzKCkgeworCQlwcm9qZWN0UGFuZWwudXBkYXRlQ29tcG9uZW50cygpOworCX0KKwkKKwkvLyBVcGRhdGUgdGhlIGRpc3BsYXkgb2YgdGhlIG1haW4gcGFuZWxzIChzdGF0cywgdW50cmFucywgZ3JvdXBzKS4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhIG5ldyB0cmVlIHNlbGVjdGlvbgorCXByb3RlY3RlZCB2b2lkIHVwZGF0ZURpc3BsYXlQYW5lbHMoKSB7CisJCWRlYnVnTXNnKCJVcGRhdGluZyBEaXNwbGF5IFBhbmVscyIpOworCQkKKwkJQnVuZGxlIGJ1bmRsZSA9IG51bGw7CisJCWlmIChhY3RpdmVOb2RlID09IG51bGwpIHJldHVybjsKKwkJT2JqZWN0IG8gPSBhY3RpdmVOb2RlLmdldFVzZXJPYmplY3QoKTsKKwkJaWYgKG8gPT0gbnVsbCkKKwkJCXJldHVybjsKKwkJaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCS8vIEEgbm9kZSB0aGF0IGlzIG5vdCBhIHJvb3Qgd2FzIHNlbGVjdGVkLi4uLiBJIG5lZWQgdG8gZG8gc29tZXRoaW5nIGhlcmUKKwkJCVN0cmluZyBzdHIgPSAoU3RyaW5nKW87CisJCQlpZiAocmJtID09IG51bGwpIHJldHVybjsKKwkJCWlmIChzdHIuZXF1YWxzKHJibS5nZXRCYXNlQ2xhc3MoKSkpIHsKKwkJCQkvLyBUaGUgYmFzZSBjbGFzcyBub2RlIHdhcyBzZWxlY3RlZAorCQkJCWpQYW5lbFN0YXRzLnNldE1hbmFnZXIocmJtKTsKKwkJCQlqUGFuZWxVbnRyYW5zLnNldE1hbmFnZXIocmJtKTsKKwkJCQlqUGFuZWxHcm91cHMuc2V0TWFuYWdlcihyYm0pOworCQkJCWpQYW5lbFNlYXJjaC5zZXRNYW5hZ2VyKHJibSk7CisJCQl9IGVsc2UgeworCQkJCWpQYW5lbFN0YXRzLnJlbW92ZUVsZW1lbnRzKCk7CisJCQkJalBhbmVsVW50cmFucy5yZW1vdmVFbGVtZW50cygpOworCQkJCWpQYW5lbEdyb3Vwcy5yZW1vdmVFbGVtZW50cygpOworCQkJCWpQYW5lbFNlYXJjaC5yZW1vdmVFbGVtZW50cygpOworCQkJfQorCQkJLy9yZXR1cm47CisJCX0KKwkJZWxzZSBpZiAobyBpbnN0YW5jZW9mIEJ1bmRsZSkgeworCQkJYnVuZGxlID0gKEJ1bmRsZSkgYWN0aXZlTm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCQlqUGFuZWxTdGF0cy5zZXRCdW5kbGUoYnVuZGxlKTsKKwkJCWpQYW5lbFVudHJhbnMuc2V0QnVuZGxlKGJ1bmRsZSk7CisJCQlqUGFuZWxHcm91cHMuc2V0QnVuZGxlKGJ1bmRsZSk7CisJCQlqUGFuZWxTZWFyY2guc2V0QnVuZGxlKGJ1bmRsZSk7CisJCX0KKwkJZWxzZQorCQkJUkJNYW5hZ2VyR1VJLmRlYnVnTXNnKG8udG9TdHJpbmcoKSk7CisJCQorCQlqUGFuZWxTdGF0cy51cGRhdGVDb21wb25lbnRzKCk7CisJCWpQYW5lbFVudHJhbnMudXBkYXRlQ29tcG9uZW50cygpOworCQlqUGFuZWxHcm91cHMudXBkYXRlQ29tcG9uZW50cygpOworCQlqUGFuZWxTZWFyY2gudXBkYXRlQ29tcG9uZW50cygpOworCQkKKwkJdmFsaWRhdGVUcmVlKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZVByb2plY3RUcmVlKCkgeworCQlkZWJ1Z01zZygiVXBkYXRpbmcgUHJvamVjdCBUcmVlcyIpOworCQkKKwkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSByb290ID0gbnVsbDsKKwkJCisJCWlmIChwcm9qZWN0ICE9IG51bGwpIHsKKwkJCXJvb3QgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShwcm9qZWN0KTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IHByb2plY3QuZ2V0U2l6ZSgpOyBpKyspIHsKKwkJCQlSQk1hbmFnZXIgcmJtID0gcHJvamVjdC5nZXRCdW5kbGUoaSk7CisJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBidW5kbGVOb2RlID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUocmJtKTsKKwkJCQlyb290LmFkZChidW5kbGVOb2RlKTsKKwkJCQlCdW5kbGUgbWFpbkJ1bmRsZSA9IChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5maXJzdEVsZW1lbnQoKTsKKwkJCQlWZWN0b3IgZ3JvdXBzID0gbWFpbkJ1bmRsZS5nZXRHcm91cHNBc1ZlY3RvcigpOworCQkJCWZvciAoaW50IGo9MDsgaiA8IGdyb3Vwcy5zaXplKCk7IGorKykgeworCQkJCQlCdW5kbGVHcm91cCBncm91cCA9IChCdW5kbGVHcm91cClncm91cHMuZWxlbWVudEF0KGopOworCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGdyb3VwTm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGdyb3VwKTsKKwkJCQkJYnVuZGxlTm9kZS5hZGQoZ3JvdXBOb2RlKTsKKwkJCQkJVmVjdG9yIGl0ZW1zID0gZ3JvdXAuZ2V0SXRlbXNBc1ZlY3RvcigpOworCQkJCQlmb3IgKGludCBrPTA7IGsgPCBpdGVtcy5zaXplKCk7IGsrKykgeworCQkJCQkJQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlbXMuZWxlbWVudEF0KGspOworCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBpdGVtTm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGl0ZW0pOworCQkJCQkJZ3JvdXBOb2RlLmFkZChpdGVtTm9kZSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAocmJtICE9IG51bGwpIHsKKwkJCS8vIFRoZXJlIGlzIGEgcmVzb3VyY2UgYnVuZGxlIG9wZW4sIGJ1dCBubyBwcm9qZWN0CisJCQlyb290ID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJub19wcm9qZWN0IikpOworCQkJQnVuZGxlIG1haW5CdW5kbGUgPSAoQnVuZGxlKXJibS5nZXRCdW5kbGVzKCkuZmlyc3RFbGVtZW50KCk7CisJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGJ1bmRsZU5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShyYm0pOy8vKHJibS5nZXRCYXNlQ2xhc3MoKSk7CisJCQlyb290LmFkZChidW5kbGVOb2RlKTsKKwkJCVZlY3RvciBncm91cHMgPSBtYWluQnVuZGxlLmdldEdyb3Vwc0FzVmVjdG9yKCk7CisJCQlmb3IgKGludCBpPTA7IGkgPCBncm91cHMuc2l6ZSgpOyBpKyspIHsKKwkJCQlCdW5kbGVHcm91cCBncm91cCA9IChCdW5kbGVHcm91cClncm91cHMuZWxlbWVudEF0KGkpOworCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgZ3JvdXBOb2RlID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoZ3JvdXApOworCQkJCWJ1bmRsZU5vZGUuYWRkKGdyb3VwTm9kZSk7CisJCQkJVmVjdG9yIGl0ZW1zID0gZ3JvdXAuZ2V0SXRlbXNBc1ZlY3RvcigpOworCQkJCWZvciAoaW50IGo9MDsgaiA8IGl0ZW1zLnNpemUoKTsgaisrKSB7CisJCQkJCUJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1zLmVsZW1lbnRBdChqKTsKKwkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBpdGVtTm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGl0ZW0pOworCQkJCQlncm91cE5vZGUuYWRkKGl0ZW1Ob2RlKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlyb290ID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJub19wcm9qZWN0X2J1bmRsZSIpKTsKKwkJfQorCQkKKwkJLy8gQ3JlYXRlIHRoZSB0cmVlIGZyb20gdGhlIHJvb3RzCisJCXByb2plY3RUcmVlID0gbmV3IEpUcmVlKHJvb3QpOworCQlwcm9qZWN0VHJlZS5hZGRNb3VzZUxpc3RlbmVyKHRoaXMpOworCQlwcm9qZWN0VHJlZS5hZGRUcmVlU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCXByb2plY3RUcmVlLnNldENlbGxSZW5kZXJlcihSQlRyZWVDZWxsUmVuZGVyZXIuZ2V0SW5zdGFuY2UoKSk7CisJCXByb2plY3RTY3JvbGxQYW5lLmdldFZpZXdwb3J0KCkucmVtb3ZlQWxsKCk7CisJCXByb2plY3RTY3JvbGxQYW5lLmdldFZpZXdwb3J0KCkuYWRkKHByb2plY3RUcmVlKTsKKwkJcmVwYWludCgpOworCQl2YWxpZGF0ZVRyZWUoKTsKKwkJcmV0dXJuOworCX0KKwkKKwkvLyBVcGRhdGUgdGhlIGRpc3BsYXkgb2YgdGhlIHRyZWUgZmlsZSBtYXAuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgdHJlZSBpcyBjaGFuZ2VkL3VwZGF0ZWQKKwlwdWJsaWMgdm9pZCB1cGRhdGVEaXNwbGF5VHJlZSgpIHsKKwkJZGVidWdNc2coIlVwZGF0aW5nIERpc3BsYXkgVHJlZXMiKTsKKwkJCisJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgcm9vdCA9IG51bGw7CisJCQorCQlpZiAocmJtID09IG51bGwgfHwgcmJtLmdldEJ1bmRsZXMoKSA9PSBudWxsKSB7CisJCQlyb290ID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJub19yZXNvdXJjZV9idW5kbGUiKSk7CisJCX0gZWxzZSB7CisJCQkvLyBGcm9tIGhlcmUgb24gb3V0LCB0aGVyZSBpcyBhIGRlZmluZWQgcmVzb3VyY2UgYnVuZGxlIG1hbmFnZXIKKwkJCUJ1bmRsZSBtYWluQnVuZGxlID0gKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmZpcnN0RWxlbWVudCgpOworCQkJcm9vdCA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKHJibS5nZXRCYXNlQ2xhc3MoKSk7CisJCQkvLyBBZGQgdGhlIGJhc2UgY2xhc3MKKwkJCXJvb3QuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKG1haW5CdW5kbGUpKTsKKwkJCQorCQkJLy9EZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGN1cnJOb2RlID0gcm9vdDsKKwkJCWZvciAoaW50IGkgPSAxOyBpIDwgcmJtLmdldEJ1bmRsZXMoKS5zaXplKCk7IGkrKykgeworCQkJCUJ1bmRsZSBjdXJyQnVuZGxlID0gKEJ1bmRsZSlyYm0uZ2V0QnVuZGxlcygpLmVsZW1lbnRBdChpKTsKKwkJCQlTdHJpbmcgdmFyaWFudCA9IGN1cnJCdW5kbGUuZ2V0VmFyaWFudEVuY29kaW5nKCk7CisJCQkJU3RyaW5nIGNvdW50cnkgPSBjdXJyQnVuZGxlLmdldENvdW50cnlFbmNvZGluZygpOworCQkJCVN0cmluZyBsYW5ndWFnZSA9IGN1cnJCdW5kbGUuZ2V0TGFuZ3VhZ2VFbmNvZGluZygpOworCQkJCS8vRGVmYXVsdE11dGFibGVUcmVlTm9kZSBsYW5ndWFnZU5vZGUgPSBudWxsOworCQkJCS8vIExvb2sgZm9yIGEgbm9kZSByZXByZXNlbnRpbmcgdGhpcyBsYW5ndWFnZQorCQkJCWlmIChsYW5ndWFnZSA9PSBudWxsIHx8IGxhbmd1YWdlLmVxdWFscygiIikpIGNvbnRpbnVlOworCQkJCWJvb2xlYW4gbGFuZ3VhZ2VOb2RlRm91bmQgPSBmYWxzZTsKKwkJCQlmb3IgKGludCBqPTA7IGogPCByb290LmdldENoaWxkQ291bnQoKTsgaisrKSB7CisJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbGFuZ05vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSlyb290LmdldENoaWxkQXQoaik7CisJCQkJCU9iamVjdCBvID0gbGFuZ05vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJCQlpZiAobyA9PSBudWxsIHx8ICEobyBpbnN0YW5jZW9mIFN0cmluZykpIGNvbnRpbnVlOworCQkJCQlTdHJpbmcgc3RyID0gKFN0cmluZylvOworCQkJCQlpZiAoc3RyLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfbGFuZ3VhZ2Vfbm9kZSIsIGxhbmd1YWdlKSkpIHsKKwkJCQkJCS8vIFRoZXJlIGlzIGEgbm9uLWxlYWYgbm9kZSB3aXRoIHRoaXMgbGFuZ3VhZ2UKKwkJCQkJCWxhbmd1YWdlTm9kZUZvdW5kID0gdHJ1ZTsKKwkJCQkJCWlmIChjb3VudHJ5ID09IG51bGwgfHwgY291bnRyeS5lcXVhbHMoIiIpKQorCQkJCQkJCSBsYW5nTm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJZWxzZSB7CisJCQkJCQkJLy8gV2UgbmVlZCB0byBsb29rIGF0IGNvdW50cnksIHZhcmlhbnQKKwkJCQkJCQlib29sZWFuIGNvdW50cnlOb2RlRm91bmQgPSBmYWxzZTsKKwkJCQkJCQlmb3IgKGludCBrPTA7IGsgPCBsYW5nTm9kZS5nZXRDaGlsZENvdW50KCk7IGsrKykgeworCQkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIGNvdW50cnlOb2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpbGFuZ05vZGUuZ2V0Q2hpbGRBdChrKTsKKwkJCQkJCQkJT2JqZWN0IG8yID0gY291bnRyeU5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJCQkJCQlpZiAobzIgPT0gbnVsbCB8fCAhKG8yIGluc3RhbmNlb2YgU3RyaW5nKSkgY29udGludWU7CisJCQkJCQkJCVN0cmluZyBzdHIyID0gKFN0cmluZylvMjsKKwkJCQkJCQkJaWYgKHN0cjIuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV9jb3VudHJ5X25vZGUiLCBjb3VudHJ5KSkpIHsKKwkJCQkJCQkJCS8vIFRoZXJlIGlzIGEgbm9uLWxlYWYgbm9kZSBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQkJCQljb3VudHJ5Tm9kZUZvdW5kID0gdHJ1ZTsKKwkJCQkJCQkJCWlmICh2YXJpYW50ID09IG51bGwgfHwgdmFyaWFudC5lcXVhbHMoIiIpKSB7CisJCQkJCQkJCQkJY291bnRyeU5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQkJLy8gV2UgbmVlZCB0byBsb29rIGF0IHZhcmlhbnQKKwkJCQkJCQkJCQlib29sZWFuIHZhcmlhbnROb2RlRm91bmQgPSBmYWxzZTsKKwkJCQkJCQkJCQlmb3IgKGludCBsPTA7IGwgPCBjb3VudHJ5Tm9kZS5nZXRDaGlsZENvdW50KCk7IGwrKykgeworCQkJCQkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHZhcmlhbnROb2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpY291bnRyeU5vZGUuZ2V0Q2hpbGRBdChsKTsKKwkJCQkJCQkJCQkJT2JqZWN0IG8zID0gdmFyaWFudE5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJCQkJCQkJCQlpZiAobzMgPT0gbnVsbCB8fCAhKG8zIGluc3RhbmNlb2YgU3RyaW5nKSkgY29udGludWU7CisJCQkJCQkJCQkJCVN0cmluZyBzdHIzID0gKFN0cmluZylvMzsKKwkJCQkJCQkJCQkJaWYgKHN0cjMuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV92YXJpYW50X25vZGUiKSkpIHsKKwkJCQkJCQkJCQkJCXZhcmlhbnROb2RlRm91bmQgPSB0cnVlOworCQkJCQkJCQkJCQkJdmFyaWFudE5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQkJCQkJfSAKKwkJCQkJCQkJCQl9IC8vIGVuZCBmb3IgLSBjb3VudHJ5IG5vZGUgbG9vcAorCQkJCQkJCQkJCWlmICghdmFyaWFudE5vZGVGb3VuZCkgeworCQkJCQkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHZhcmlhbnROb2RlID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX3ZhcmlhbnRfbm9kZSIpKTsKKwkJCQkJCQkJCQkJY291bnRyeU5vZGUuYWRkKHZhcmlhbnROb2RlKTsKKwkJCQkJCQkJCQkJdmFyaWFudE5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9IC8vIGVuZCBmb3IgLSBsYW5ndWFnZSBub2RlIGxvb3AKKwkJCQkJCQlpZiAoIWNvdW50cnlOb2RlRm91bmQpIHsKKwkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBjb3VudHJ5Tm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV9jb3VudHJ5X25vZGUiLCBjb3VudHJ5KSk7CisJCQkJCQkJCWxhbmdOb2RlLmFkZChjb3VudHJ5Tm9kZSk7CisJCQkJCQkJCWlmICh2YXJpYW50ID09IG51bGwgfHwgdmFyaWFudC5lcXVhbHMoIiIpKSB7CisJCQkJCQkJCQljb3VudHJ5Tm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJLy8gV2UgbmVlZCB0byBsb29rIGF0IHRoZSB2YXJpYW50CQorCQkJCQkJCQkJYm9vbGVhbiB2YXJpYW50Tm9kZUZvdW5kID0gZmFsc2U7CisJCQkJCQkJCQlmb3IgKGludCBsPTA7IGwgPCBjb3VudHJ5Tm9kZS5nZXRDaGlsZENvdW50KCk7IGwrKykgeworCQkJCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgdmFyaWFudE5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSljb3VudHJ5Tm9kZS5nZXRDaGlsZEF0KGwpOworCQkJCQkJCQkJCU9iamVjdCBvMyA9IHZhcmlhbnROb2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCQkJCQkJCQlpZiAobzMgPT0gbnVsbCB8fCAhKG8zIGluc3RhbmNlb2YgU3RyaW5nKSkgY29udGludWU7CisJCQkJCQkJCQkJU3RyaW5nIHN0cjMgPSAoU3RyaW5nKW8zOworCQkJCQkJCQkJCWlmIChzdHIzLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfdmFyaWFudF9ub2RlIikpKSB7CisJCQkJCQkJCQkJCXZhcmlhbnROb2RlRm91bmQgPSB0cnVlOworCQkJCQkJCQkJCQl2YXJpYW50Tm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJCQkJCX0gCisJCQkJCQkJCQl9IC8vIGVuZCBmb3IgLSBjb3VudHJ5IG5vZGUgbG9vcAorCQkJCQkJCQkJaWYgKCF2YXJpYW50Tm9kZUZvdW5kKSB7CisJCQkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSB2YXJpYW50Tm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV92YXJpYW50X25vZGUiKSk7CisJCQkJCQkJCQkJY291bnRyeU5vZGUuYWRkKHZhcmlhbnROb2RlKTsKKwkJCQkJCQkJCQl2YXJpYW50Tm9kZS5hZGQobmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoY3VyckJ1bmRsZSkpOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWlmICghbGFuZ3VhZ2VOb2RlRm91bmQpIHsKKwkJCQkJLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBub2RlIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBsYW5nTm9kZSA9IG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV9sYW5ndWFnZV9ub2RlIiwgbGFuZ3VhZ2UpKTsKKwkJCQkJcm9vdC5hZGQobGFuZ05vZGUpOworCQkJCQlpZiAoY291bnRyeSA9PSBudWxsIHx8IGNvdW50cnkuZXF1YWxzKCIiKSkgeworCQkJCQkJbGFuZ05vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vIFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgY291bnRyeSwgdmFyaWFudAorCQkJCQkJYm9vbGVhbiBjb3VudHJ5Tm9kZUZvdW5kID0gZmFsc2U7CisJCQkJCQlmb3IgKGludCBrPTA7IGsgPCBsYW5nTm9kZS5nZXRDaGlsZENvdW50KCk7IGsrKykgeworCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgY291bnRyeU5vZGUgPSAoRGVmYXVsdE11dGFibGVUcmVlTm9kZSlsYW5nTm9kZS5nZXRDaGlsZEF0KGspOworCQkJCQkJCU9iamVjdCBvMiA9IGNvdW50cnlOb2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCQkJCQlpZiAobzIgPT0gbnVsbCB8fCAhKG8yIGluc3RhbmNlb2YgU3RyaW5nKSkgY29udGludWU7CisJCQkJCQkJU3RyaW5nIHN0cjIgPSAoU3RyaW5nKW8yOworCQkJCQkJCWlmIChzdHIyLmVxdWFscyhSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfY291bnRyeV9ub2RlIiwgY291bnRyeSkpKSB7CisJCQkJCQkJCS8vIFRoZXJlIGlzIGEgbm9uLWxlYWYgbm9kZSBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQkJCWNvdW50cnlOb2RlRm91bmQgPSB0cnVlOworCQkJCQkJCQlpZiAodmFyaWFudCA9PSBudWxsIHx8IHZhcmlhbnQuZXF1YWxzKCIiKSkgeworCQkJCQkJCQkJY291bnRyeU5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCS8vIFdlIG5lZWQgdG8gbG9vayBhdCB2YXJpYW50CisJCQkJCQkJCQlib29sZWFuIHZhcmlhbnROb2RlRm91bmQgPSBmYWxzZTsKKwkJCQkJCQkJCWZvciAoaW50IGw9MDsgbCA8IGNvdW50cnlOb2RlLmdldENoaWxkQ291bnQoKTsgbCsrKSB7CisJCQkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSB2YXJpYW50Tm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKWNvdW50cnlOb2RlLmdldENoaWxkQXQobCk7CisJCQkJCQkJCQkJT2JqZWN0IG8zID0gdmFyaWFudE5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkJCQkJCQkJCWlmIChvMyA9PSBudWxsIHx8ICEobzMgaW5zdGFuY2VvZiBTdHJpbmcpKSBjb250aW51ZTsKKwkJCQkJCQkJCQlTdHJpbmcgc3RyMyA9IChTdHJpbmcpbzM7CisJCQkJCQkJCQkJaWYgKHN0cjMuZXF1YWxzKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidHJlZV92YXJpYW50X25vZGUiKSkpIHsKKwkJCQkJCQkJCQkJdmFyaWFudE5vZGVGb3VuZCA9IHRydWU7CisJCQkJCQkJCQkJCXZhcmlhbnROb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCQkJfSAKKwkJCQkJCQkJCX0gLy8gZW5kIGZvciAtIGNvdW50cnkgbm9kZSBsb29wCisJCQkJCQkJCQlpZiAoIXZhcmlhbnROb2RlRm91bmQpIHsKKwkJCQkJCQkJCQlEZWZhdWx0TXV0YWJsZVRyZWVOb2RlIHZhcmlhbnROb2RlID0gbmV3IERlZmF1bHRNdXRhYmxlVHJlZU5vZGUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX3ZhcmlhbnRfbm9kZSIpKTsKKwkJCQkJCQkJCQljb3VudHJ5Tm9kZS5hZGQodmFyaWFudE5vZGUpOworCQkJCQkJCQkJCXZhcmlhbnROb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9IC8vIGVuZCBmb3IgLSBsYW5ndWFnZSBub2RlIGxvb3AKKwkJCQkJCWlmICghY291bnRyeU5vZGVGb3VuZCkgeworCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgY291bnRyeU5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfY291bnRyeV9ub2RlIiwgY291bnRyeSkpOworCQkJCQkJCWxhbmdOb2RlLmFkZChjb3VudHJ5Tm9kZSk7CisJCQkJCQkJaWYgKHZhcmlhbnQgPT0gbnVsbCB8fCB2YXJpYW50LmVxdWFscygiIikpIHsKKwkJCQkJCQkJY291bnRyeU5vZGUuYWRkKG5ldyBEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKGN1cnJCdW5kbGUpKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIHZhcmlhbnQJCisJCQkJCQkJCWJvb2xlYW4gdmFyaWFudE5vZGVGb3VuZCA9IGZhbHNlOworCQkJCQkJCQlmb3IgKGludCBsPTA7IGwgPCBjb3VudHJ5Tm9kZS5nZXRDaGlsZENvdW50KCk7IGwrKykgeworCQkJCQkJCQkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSB2YXJpYW50Tm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKWNvdW50cnlOb2RlLmdldENoaWxkQXQobCk7CisJCQkJCQkJCQlPYmplY3QgbzMgPSB2YXJpYW50Tm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCQkJCQkJCQlpZiAobzMgPT0gbnVsbCB8fCAhKG8zIGluc3RhbmNlb2YgU3RyaW5nKSkgY29udGludWU7CisJCQkJCQkJCQlTdHJpbmcgc3RyMyA9IChTdHJpbmcpbzM7CisJCQkJCQkJCQlpZiAoc3RyMy5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ0cmVlX3ZhcmlhbnRfbm9kZSIpKSkgeworCQkJCQkJCQkJCXZhcmlhbnROb2RlRm91bmQgPSB0cnVlOworCQkJCQkJCQkJCXZhcmlhbnROb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCQl9IAorCQkJCQkJCQl9IC8vIGVuZCBmb3IgLSBjb3VudHJ5IG5vZGUgbG9vcAorCQkJCQkJCQlpZiAoIXZhcmlhbnROb2RlRm91bmQpIHsKKwkJCQkJCQkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgdmFyaWFudE5vZGUgPSBuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRyZWVfdmFyaWFudF9ub2RlIiwgdmFyaWFudCkpOworCQkJCQkJCQkJY291bnRyeU5vZGUuYWRkKHZhcmlhbnROb2RlKTsKKwkJCQkJCQkJCXZhcmlhbnROb2RlLmFkZChuZXcgRGVmYXVsdE11dGFibGVUcmVlTm9kZShjdXJyQnVuZGxlKSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJCisJCS8vIENyZWF0ZSB0aGUgdHJlZSBmcm9tIHRoZSByb290cworCQlqVHJlZURpc3BsYXkgPSBuZXcgSlRyZWUocm9vdCk7CisJCWpUcmVlRGlzcGxheS5hZGRNb3VzZUxpc3RlbmVyKHRoaXMpOworCQlqVHJlZURpc3BsYXkuYWRkVHJlZVNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCQlqVHJlZURpc3BsYXkuc2V0Q2VsbFJlbmRlcmVyKFJCVHJlZUNlbGxSZW5kZXJlci5nZXRJbnN0YW5jZSgpKTsKKwkJalNjcm9sbFBhbmVUcmVlLmdldFZpZXdwb3J0KCkucmVtb3ZlQWxsKCk7CisJCWpTY3JvbGxQYW5lVHJlZS5nZXRWaWV3cG9ydCgpLmFkZChqVHJlZURpc3BsYXkpOworCQlyZXBhaW50KCk7CisJCXZhbGlkYXRlVHJlZSgpOworCQlyZXR1cm47CisJfQorCQorCS8qKgorCSAqIEluaGVyaXRzIGZyb20gSkZyYW1lLmFkZE5vdGlmeSgpLCBidXQgYWxzbyBpbnNlcnRzIHRoZSBtZW51IGJhcgorCSAqLworCQorCXB1YmxpYyB2b2lkIGFkZE5vdGlmeSgpIAorCXsKKwkJc3VwZXIuYWRkTm90aWZ5KCk7CisJCQorCQlpZiAobVNob3duKQorCQkJcmV0dXJuOworCQkJCisJCS8vIHJlc2l6ZSBmcmFtZSB0byBhY2NvdW50IGZvciBtZW51YmFyCisJCUpNZW51QmFyIGpNZW51QmFyID0gZ2V0Sk1lbnVCYXIoKTsKKwkJaWYgKGpNZW51QmFyICE9IG51bGwpIHsKKwkJCWludCBqTWVudUJhckhlaWdodCA9IGpNZW51QmFyLmdldFByZWZlcnJlZFNpemUoKS5oZWlnaHQ7CisJCQlEaW1lbnNpb24gZGltZW5zaW9uID0gZ2V0U2l6ZSgpOworCQkJZGltZW5zaW9uLmhlaWdodCArPSBqTWVudUJhckhlaWdodDsKKwkJCXNldFNpemUoZGltZW5zaW9uKTsKKwkJfQorCisJCW1TaG93biA9IHRydWU7CisJfQorCisJLyoqCisJICogQ2FsbGVkIHdoZW4gaXQgbWF5IGJlIGFwcHJvcHJpYXRlIHRvIGNoZWNrIHdpdGggdGhlIHVzZXIgaWYgdGhleSB3YW50IHRvIHNhdmUgdGhlIGZpbGUKKwkgKi8KKwkKKwlib29sZWFuIHByb21wdEZvclNhdmUoU3RyaW5nIG1lc3NhZ2UpIHsKKwkJaWYgKHJibSAhPSBudWxsKSB7CisJCQlpbnQgcmVzcG9uc2UgPSBKT3B0aW9uUGFuZS5zaG93Q29uZmlybURpYWxvZyh0aGlzLAorCQkJCShtZXNzYWdlID09IG51bGwgPyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19zYXZlIikgOiBtZXNzYWdlKSwKKwkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ190aXRsZV9xdWl0IiksIEpPcHRpb25QYW5lLllFU19OT19DQU5DRUxfT1BUSU9OLAorCQkJCUpPcHRpb25QYW5lLlFVRVNUSU9OX01FU1NBR0UpOworCQkJaWYgKHJlc3BvbnNlID09IEpPcHRpb25QYW5lLkNBTkNFTF9PUFRJT04pIHJldHVybiBmYWxzZTsKKwkJCWlmIChyZXNwb25zZSA9PSBKT3B0aW9uUGFuZS5ZRVNfT1BUSU9OKSB7CisJCQkJcmV0dXJuIHNhdmVSZXNvdXJjZXMoKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJcHVibGljIGJvb2xlYW4gZGVsZXRlUmVzb3VyY2VzKFN0cmluZyBlbmNvZGluZykgeworCQlpZiAocmJtID09IG51bGwpIHJldHVybiBmYWxzZTsgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbgorCQl0cnkgeworCQkJcmJtLmVyYXNlRmlsZShlbmNvZGluZyk7CQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCUpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfZGVsZXRpbmciLCBpb2UuZ2V0TWVzc2FnZSgpKSwKKwkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQlpZiAoUkJNYW5hZ2VyR1VJLmRlYnVnKSBTeXN0ZW0uZXJyLnByaW50bG4oaW9lKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCQorCXB1YmxpYyB2b2lkIGhpZGVSZXNvdXJjZXMoU3RyaW5nIGVuY29kaW5nKSB7CisJCXJibS5oaWRlUmVzb3VyY2UoZW5jb2RpbmcpOworCQl1cGRhdGVEaXNwbGF5VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0VHJlZSgpOworCQl1cGRhdGVQcm9qZWN0UGFuZWxzKCk7CisJCXVwZGF0ZURpc3BsYXlQYW5lbHMoKTsKKwl9CisJCisJLyoqCisJICogU2F2ZSBhIHBhcnRpY3VsYXIgcmVzb3VyY2VzIGZpbGUgd2l0aGluIHRoZSBidW5kbGUuCisJICovCisJCisJcHVibGljIGJvb2xlYW4gc2F2ZVJlc291cmNlcyhTdHJpbmcgZW5jb2RpbmcpIHsKKwkJaWYgKHJibSA9PSBudWxsKSByZXR1cm4gZmFsc2U7ICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJcmV0dXJuIHNhdmVSZXNvdXJjZXMocmJtLCBlbmNvZGluZyk7CisJfQorCQorCXB1YmxpYyBib29sZWFuIHNhdmVSZXNvdXJjZXMoUkJNYW5hZ2VyIGJ1bmRsZSwgU3RyaW5nIGVuY29kaW5nKSB7CisJCXRyeSB7CisJCQlidW5kbGUud3JpdGVUb0ZpbGUoZW5jb2RpbmcpOwkKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3NhdmluZyIsIGlvZS5nZXRNZXNzYWdlKCkpLAorCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCWlmIChSQk1hbmFnZXJHVUkuZGVidWcpIFN5c3RlbS5lcnIucHJpbnRsbihpb2UpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKwkKKwkvKioKKwkgKiBDYWxsZWQgd2hlbiB0aGUgcmVzb3VyY2VzIGFyZSB0byBiZSBzYXZlZAorCSAqLworCQorCXB1YmxpYyBib29sZWFuIHNhdmVSZXNvdXJjZXMoKSB7CisJCWlmIChyYm0gPT0gbnVsbCkgcmV0dXJuIHRydWU7CisJCXJldHVybiBzYXZlUmVzb3VyY2VzKHJibSk7CisJfQorCQorCXB1YmxpYyBib29sZWFuIHNhdmVSZXNvdXJjZXMoUkJNYW5hZ2VyIGJ1bmRsZSkgeworCQl0cnkgeworCQkJYnVuZGxlLndyaXRlVG9GaWxlKCk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9zYXZpbmciLCBpb2UuZ2V0TWVzc2FnZSgpKSwKKwkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQlpZiAoUkJNYW5hZ2VyR1VJLmRlYnVnKSBTeXN0ZW0uZXJyLnByaW50bG4oaW9lKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogQ2FsbGVkIHdoZW4gdGhlIHJlc291cmNlIGJ1bmRsZSBpcyB0byBiZSBzYXZlZCwgYnV0IGRpc3BsYXlzIGEgd2luZG93IHRvIHRoZSB1c2VyIGFsbG93aW5nIHRoZW0KKwkgKiB0byBzZWxlY3RlIHRoZSBmaWxlIGRlc3RpbmF0aW9uIG9mIHRoZSBmb2xkZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgYnVuZGxlIGFzIHdlbGwgYXMgdGhlIGJhc2UKKwkgKiBjbGFzcyBuYW1lIGZvciB0aGUgYnVuZGxlLgorCSAqLworCQorCXB1YmxpYyBib29sZWFuIHNhdmVSZXNvdXJjZXNBcygpIHsKKwkJaWYgKHJibSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKKwkJaW50IHJlc3VsdCA9IHNhdmVGaWxlQ2hvb3Nlci5zaG93U2F2ZURpYWxvZyh0aGlzKTsKKwkJaWYgKHJlc3VsdCA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKwkJCXRyeSB7CisJCQkJRmlsZSBuZXdGaWxlID0gc2F2ZUZpbGVDaG9vc2VyLmdldFNlbGVjdGVkRmlsZSgpOworCQkJCVN0cmluZyBmaWxlTmFtZSA9IG5ld0ZpbGUuZ2V0TmFtZSgpOworCQkJCVN0cmluZyBiYXNlTmFtZSA9IGZpbGVOYW1lOworCQkJCWlmIChmaWxlTmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIucHJvcGVydGllcyIpKQorCQkJCQliYXNlTmFtZSA9IGJhc2VOYW1lLnN1YnN0cmluZygwLGJhc2VOYW1lLmxlbmd0aCgpLTExKTsKKwkJCQlyYm0uc2V0QmFzZUNsYXNzKGJhc2VOYW1lKTsKKwkJCQlyYm0uc2V0RmlsZURpcmVjdG9yeShuZXdGaWxlLmdldFBhcmVudEZpbGUoKSk7CisJCQkJcmJtLndyaXRlVG9GaWxlKCk7CisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX3NhdmluZyIsIGlvZS5nZXRNZXNzYWdlKCkpLAorCQkJCQkJCQkJCQkgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3IiKSwgSk9wdGlvblBhbmUuRVJST1JfTUVTU0FHRSk7CisJCQkJaWYgKFJCTWFuYWdlckdVSS5kZWJ1ZykgU3lzdGVtLmVyci5wcmludGxuKGlvZSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisJCXJldHVybiB0cnVlOworCX0KKwkKKwl2b2lkIHVwZGF0ZUxvY2FsZShMb2NhbGUgbCkgeworCQkvLyBVcGRhdGUgdGhlIG1lbnViYXJzCisJCWpNZW51QmFyTWFpbi51cGRhdGVMb2NhbGUoKTsKKwkJCisJCXVwZGF0ZUxvY2FsZShnZXRDb250ZW50UGFuZSgpLCBsKTsKKwkJdXBkYXRlTG9jYWxlKG9wZW5GaWxlQ2hvb3NlciwgbCk7CisJCXVwZGF0ZUxvY2FsZShzYXZlRmlsZUNob29zZXIsIGwpOworCQkvLyBSZWRyYXcgdGhlIHBhbmVzCisJCXVwZGF0ZURpc3BsYXlUcmVlKCk7CisJCXVwZGF0ZVByb2plY3RUcmVlKCk7CisJCXVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJdXBkYXRlRGlzcGxheVBhbmVscygpOworCQkvLyB1cGRhdGUgdGhlIHRhYiB0aXRsZXMKKwkJalRhYmJlZFBhbmVNYWluLnNldFRpdGxlQXQoMCxSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl9zdGF0aXN0aWNzIikpOworCQlqVGFiYmVkUGFuZU1haW4uc2V0VGl0bGVBdCgxLFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFiX3VudHJhbnNsYXRlZCIpKTsKKwkJalRhYmJlZFBhbmVNYWluLnNldFRpdGxlQXQoMixSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYl9ncm91cHMiKSk7CisJCXNldFRpdGxlKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicmVzb3VyY2VfYnVuZGxlX21hbmFnZXIiKSk7CisJfQorCQorCXN0YXRpYyB2b2lkIHVwZGF0ZUxvY2FsZShDb250YWluZXIgYywgTG9jYWxlIGwpIHsKKwkJQ29tcG9uZW50IGNvbXBbXSA9IGMuZ2V0Q29tcG9uZW50cygpOworCQlmb3IgKGludCBpPTA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7CisJCQlpZiAoY29tcFtpXSBpbnN0YW5jZW9mIEpDb21wb25lbnQpIHsKKwkJCQkoKEpDb21wb25lbnQpY29tcFtpXSkuc2V0TG9jYWxlKGwpOworCQkJfQorCQkJaWYgKGNvbXBbaV0gaW5zdGFuY2VvZiBDb250YWluZXIpIHsKKwkJCQl1cGRhdGVMb2NhbGUoKENvbnRhaW5lciljb21wW2ldLGwpOworCQkJfQorCQl9CisJCWlmIChjIGluc3RhbmNlb2YgSk1lbnUpIHsKKwkJCWNvbXAgPSAoKEpNZW51KWMpLmdldE1lbnVDb21wb25lbnRzKCk7CisJCQlmb3IgKGludCBpPTA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7CisJCQkJaWYgKGNvbXBbaV0gaW5zdGFuY2VvZiBKQ29tcG9uZW50KSB7CisJCQkJCSgoSkNvbXBvbmVudCljb21wW2ldKS5zZXRMb2NhbGUobCk7CisJCQkJfQorCQkJCWlmIChjb21wW2ldIGluc3RhbmNlb2YgQ29udGFpbmVyKSB7CisJCQkJCXVwZGF0ZUxvY2FsZSgoQ29udGFpbmVyKWNvbXBbaV0sbCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkJCisJdm9pZCB1cGRhdGVVSSgpIHsKKwkJdXBkYXRlVUkoZ2V0Q29udGVudFBhbmUoKSk7CisJCWpNZW51QmFyTWFpbi51cGRhdGVVSSgpOworCQl1cGRhdGVVSShqTWVudUJhck1haW4pOworCQl1cGRhdGVVSShvcGVuRmlsZUNob29zZXIpOworCQl1cGRhdGVVSShzYXZlRmlsZUNob29zZXIpOworCX0KKwkKKwlzdGF0aWMgdm9pZCB1cGRhdGVVSShDb250YWluZXIgYykgeworCQlDb21wb25lbnQgY29tcFtdID0gYy5nZXRDb21wb25lbnRzKCk7CisJCWZvciAoaW50IGk9MDsgaSA8IGNvbXAubGVuZ3RoOyBpKyspIHsKKwkJCWlmIChjb21wW2ldIGluc3RhbmNlb2YgSkNvbXBvbmVudCkgeworCQkJCSgoSkNvbXBvbmVudCljb21wW2ldKS51cGRhdGVVSSgpOworCQkJfQorCQkJaWYgKGNvbXBbaV0gaW5zdGFuY2VvZiBDb250YWluZXIpIHsKKwkJCQl1cGRhdGVVSSgoQ29udGFpbmVyKWNvbXBbaV0pOworCQkJfQorCQl9CisJCWlmIChjIGluc3RhbmNlb2YgSk1lbnUpIHsKKwkJCWNvbXAgPSAoKEpNZW51KWMpLmdldE1lbnVDb21wb25lbnRzKCk7CisJCQlmb3IgKGludCBpPTA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7CisJCQkJaWYgKGNvbXBbaV0gaW5zdGFuY2VvZiBKQ29tcG9uZW50KSB7CisJCQkJCSgoSkNvbXBvbmVudCljb21wW2ldKS51cGRhdGVVSSgpOworCQkJCX0KKwkJCQlpZiAoY29tcFtpXSBpbnN0YW5jZW9mIENvbnRhaW5lcikgeworCQkJCQl1cGRhdGVVSSgoQ29udGFpbmVyKWNvbXBbaV0pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwkvLyBDbG9zZSB0aGUgd2luZG93IHdoZW4gdGhlIGNsb3NlIGJveCBpcyBjbGlja2VkCisJdm9pZCB0aGlzV2luZG93Q2xvc2luZyhqYXZhLmF3dC5ldmVudC5XaW5kb3dFdmVudCBlKQorCXsKKwkJaWYgKHByb21wdEZvclNhdmUoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfcXVpdF9zYXZlIikpKSB7CisJCQlzZXRWaXNpYmxlKGZhbHNlKTsKKwkJCWRpc3Bvc2UoKTsKKwkJCVN5c3RlbS5leGl0KDApOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXJOYW1lKSB7CisJCXRoaXMudXNlck5hbWUgPSB1c2VyTmFtZTsKKwkJaWYgKHJibSAhPSBudWxsKSByYm0uc2V0VXNlcih1c2VyTmFtZSk7CisJfQorCQorCXB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKKwkJcmV0dXJuIHVzZXJOYW1lOworCX0KKwkKKwlwdWJsaWMgQnVuZGxlSXRlbSBnZXRTZWxlY3RlZFByb2plY3RCdW5kbGVJdGVtKCkgeworCQlUcmVlUGF0aCBwYXRoID0gcHJvamVjdFRyZWUuZ2V0U2VsZWN0aW9uUGF0aCgpOworCQlpZiAocGF0aCA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBub2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpcGF0aC5nZXRMYXN0UGF0aENvbXBvbmVudCgpOworCQlPYmplY3Qgb2JqID0gbm9kZS5nZXRVc2VyT2JqZWN0KCk7CisJCWlmIChvYmogPT0gbnVsbCB8fCAhKG9iaiBpbnN0YW5jZW9mIEJ1bmRsZUl0ZW0pKSByZXR1cm4gbnVsbDsKKwkJcmV0dXJuIChCdW5kbGVJdGVtKW9iajsKKwl9CisJCisJcHVibGljIFJCTWFuYWdlciBnZXRTZWxlY3RlZFByb2plY3RCdW5kbGUoKSB7CisJCVRyZWVQYXRoIHBhdGggPSBwcm9qZWN0VHJlZS5nZXRTZWxlY3Rpb25QYXRoKCk7CisJCWlmIChwYXRoID09IG51bGwpIHJldHVybiBudWxsOworCQlmb3IgKGludCBpPTA7IGkgPCBwYXRoLmdldFBhdGhDb3VudCgpOyBpKyspIHsKKwkJCURlZmF1bHRNdXRhYmxlVHJlZU5vZGUgbm9kZSA9IChEZWZhdWx0TXV0YWJsZVRyZWVOb2RlKXBhdGguZ2V0UGF0aENvbXBvbmVudChpKTsKKwkJCU9iamVjdCBvYmogPSBub2RlLmdldFVzZXJPYmplY3QoKTsKKwkJCWlmIChvYmogIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiBSQk1hbmFnZXIpIHJldHVybiAoUkJNYW5hZ2VyKW9iajsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJcHVibGljIHN0YXRpYyB2b2lkIGRlYnVnTXNnKFN0cmluZyBtc2cpIHsKKwkJaWYgKGRlYnVnKSBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnIE1lc3NhZ2UgWyIgKyBkZWJ1Z2NvdW50KysgKyAiXTogIiArIG1zZyk7CisJfQorfQorCitjbGFzcyBSQlRyZWVDZWxsUmVuZGVyZXIgZXh0ZW5kcyBEZWZhdWx0VHJlZUNlbGxSZW5kZXJlciB7CisJcHJpdmF0ZSBzdGF0aWMgUkJUcmVlQ2VsbFJlbmRlcmVyIGNlbGxSZW5kID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gYnVuZGxlSWNvbiAgID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gbGFuZ3VhZ2VJY29uID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gY291bnRyeUljb24gID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gdmFyaWFudEljb24gID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gZmlsZUljb24gICAgID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gZ3JvdXBJY29uICAgID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gaXRlbUljb24gICAgID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBJbWFnZUljb24gcHJvamVjdEljb24gID0gbnVsbDsKKwkKKwlwcml2YXRlIFJCVHJlZUNlbGxSZW5kZXJlcigpIHsKKwkJCisJfQorCQorCXB1YmxpYyBDb21wb25lbnQgZ2V0VHJlZUNlbGxSZW5kZXJlckNvbXBvbmVudChKVHJlZSB0cmVlLCBPYmplY3QgdmFsdWUsIGJvb2xlYW4gc2VsZWN0ZWQsIGJvb2xlYW4gZXhwYW5kZWQsCisJCQkJCQkJCQkJCQkgIGJvb2xlYW4gbGVhZiwgaW50IHJvdywgYm9vbGVhbiBoYXNGb2N1cykgeworCQlzdXBlci5nZXRUcmVlQ2VsbFJlbmRlcmVyQ29tcG9uZW50KHRyZWUsIHZhbHVlLCBzZWxlY3RlZCwgZXhwYW5kZWQsIGxlYWYsIHJvdywgaGFzRm9jdXMpOworCQkKKwkJRGVmYXVsdE11dGFibGVUcmVlTm9kZSBub2RlID0gKERlZmF1bHRNdXRhYmxlVHJlZU5vZGUpdmFsdWU7CisJCWludCBsZXZlbCA9IG5vZGUuZ2V0TGV2ZWwoKTsKKwkJT2JqZWN0IG9iaiA9IG5vZGUuZ2V0VXNlck9iamVjdCgpOworCQkKKwkJaWYgKG9iaiBpbnN0YW5jZW9mIEJ1bmRsZUdyb3VwKSB7CisJCQlzZXRJY29uKGdyb3VwSWNvbik7CisJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgQnVuZGxlSXRlbSkgeworCQkJc2V0SWNvbihpdGVtSWNvbik7CisJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgUkJNYW5hZ2VyKSB7CisJCQlzZXRJY29uKGJ1bmRsZUljb24pOworCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFJCUHJvamVjdCkgeworCQkJc2V0SWNvbihwcm9qZWN0SWNvbik7CisJCX0gZWxzZSBpZiAobGVhZikgeworCQkJaWYgKGxldmVsICE9IDApIHNldEljb24oZmlsZUljb24pOwkKKwkJfSBlbHNlIHsJCisJCQlpZiAobGV2ZWwgPT0gMCkgeworCQkJCWlmIChvYmogaW5zdGFuY2VvZiBTdHJpbmcgJiYgKChTdHJpbmcpb2JqKS5lcXVhbHMoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJub19wcm9qZWN0IikpKSAKKwkJCQkJc2V0SWNvbihwcm9qZWN0SWNvbik7CisJCQkJZWxzZSBzZXRJY29uKGJ1bmRsZUljb24pOworCQkJfQorCQkJZWxzZSBpZiAobGV2ZWwgPT0gMSkgc2V0SWNvbihsYW5ndWFnZUljb24pOworCQkJZWxzZSBpZiAobGV2ZWwgPT0gMikgc2V0SWNvbihjb3VudHJ5SWNvbik7CisJCQllbHNlIGlmIChsZXZlbCA9PSAzKSBzZXRJY29uKHZhcmlhbnRJY29uKTsKKwkJfQorCQkKKwkJcmV0dXJuIHRoaXM7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgUkJUcmVlQ2VsbFJlbmRlcmVyIGdldEluc3RhbmNlKCkgeworCQlpZiAoY2VsbFJlbmQgPT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBDbGFzcyB0aGlzQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKCJjb20uaWJtLnJibS5ndWkuUkJNYW5hZ2VyR1VJIik7CisJCQkgICAgLy8gQ3JlYXRlIGluc3RhbmNlcyBvZiB0aGUgaWNvbnMKKyAgICAgICAgICAgICAgICBJbWFnZSBzY2FsZWRJbWFnZSA9IChuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzL3RyZWVfaWNvbl9idW5kbGUuZ2lmIikpKS5nZXRJbWFnZSgpLmdldFNjYWxlZEluc3RhbmNlKDE2LCAxNiwgSW1hZ2UuU0NBTEVfREVGQVVMVCk7CisJCQkgICAgYnVuZGxlSWNvbiAgID0gbmV3IEltYWdlSWNvbihzY2FsZWRJbWFnZSk7CisJCQkgICAgbGFuZ3VhZ2VJY29uID0gbmV3IEltYWdlSWNvbih0aGlzQ2xhc3MuZ2V0UmVzb3VyY2UoImltYWdlcy90cmVlX2ljb25fbGFuZ3VhZ2UuZ2lmIikpOworCQkJICAgIGNvdW50cnlJY29uICA9IG5ldyBJbWFnZUljb24odGhpc0NsYXNzLmdldFJlc291cmNlKCJpbWFnZXMvdHJlZV9pY29uX2NvdW50cnkuZ2lmIikpOworCQkJICAgIHZhcmlhbnRJY29uICA9IG5ldyBJbWFnZUljb24odGhpc0NsYXNzLmdldFJlc291cmNlKCJpbWFnZXMvdHJlZV9pY29uX3ZhcmlhbnQuZ2lmIikpOworCQkJICAgIGZpbGVJY29uICAgICA9IG5ldyBJbWFnZUljb24odGhpc0NsYXNzLmdldFJlc291cmNlKCJpbWFnZXMvdHJlZV9pY29uX2ZpbGUuZ2lmIikpOworCQkJICAgIGdyb3VwSWNvbiAgICA9IG5ldyBJbWFnZUljb24odGhpc0NsYXNzLmdldFJlc291cmNlKCJpbWFnZXMvdHJlZV9pY29uX2dyb3VwLmdpZiIpKTsKKwkJCSAgICBpdGVtSWNvbiAgICAgPSBuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzL3RyZWVfaWNvbl9pdGVtLmdpZiIpKTsKKwkJCSAgICBwcm9qZWN0SWNvbiAgPSBuZXcgSW1hZ2VJY29uKHRoaXNDbGFzcy5nZXRSZXNvdXJjZSgiaW1hZ2VzL3RyZWVfaWNvbl9wcm9qZWN0LmdpZiIpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFJCTWFuYWdlckdVSS5kZWJ1Z01zZyhlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorCQkJLy8gQ3JlYXRlIHRoZSBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyZXIKKwkJCWNlbGxSZW5kID0gbmV3IFJCVHJlZUNlbGxSZW5kZXJlcigpOworCQl9CisJCXJldHVybiBjZWxsUmVuZDsKKwl9Cit9CisKKy8qKgorICogVGFibGUgbW9kZWwgZm9yIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0cworICovCitjbGFzcyBSQlByb2plY3QgeworCWphdmEudXRpbC5MaXN0IGJ1bmRsZU5hbWVzOworCWphdmEudXRpbC5MaXN0IGJ1bmRsZUZpbGVOYW1lczsKKwlqYXZhLnV0aWwuTGlzdCBidW5kbGVzOworCVN0cmluZyBwcm9qZWN0TmFtZTsKKwkKKwlwdWJsaWMgUkJQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgeworCQl0aGlzLnByb2plY3ROYW1lID0gcHJvamVjdE5hbWU7CisJCWJ1bmRsZU5hbWVzID0gbmV3IGphdmEudXRpbC5MaW5rZWRMaXN0KCk7CisJCWJ1bmRsZUZpbGVOYW1lcyA9IG5ldyBqYXZhLnV0aWwuTGlua2VkTGlzdCgpOworCQlidW5kbGVzID0gbmV3IGphdmEudXRpbC5MaW5rZWRMaXN0KCk7CisJfQorCQorCXB1YmxpYyBSQlByb2plY3QoRmlsZSBpbnB1dEZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRoaXMoaW5wdXRGaWxlLmdldE5hbWUoKSk7CisJCQorCQlpZiAocHJvamVjdE5hbWUuaW5kZXhPZigiLiIpID4gMCkgeworCQkJcHJvamVjdE5hbWUgPSBwcm9qZWN0TmFtZS5zdWJzdHJpbmcoMCxwcm9qZWN0TmFtZS5sYXN0SW5kZXhPZigiLiIpKTsKKwkJfQorCQkKKwkJRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKGlucHV0RmlsZSk7CisJCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsKKwkJU3RyaW5nIGxpbmUgPSBudWxsOworCQlpbnQgbGluZWNvdW50ID0gMDsKKwkJd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkJaWYgKGxpbmVjb3VudCAlIDIgPT0gMCkgeworCQkJCWJ1bmRsZU5hbWVzLmFkZChsaW5lLnRyaW0oKSk7CisJCQl9IGVsc2UgeworCQkJCWJ1bmRsZUZpbGVOYW1lcy5hZGQobGluZS50cmltKCkpOworCQkJfQorCQkJbGluZWNvdW50Kys7CisJCX0KKwkJZnIuY2xvc2UoKTsKKwkJdHJ5IHsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZUZpbGVOYW1lcy5zaXplKCk7IGkrKykgeworCQkJCVJCTWFuYWdlciByYm0gPSBuZXcgUkJNYW5hZ2VyKG5ldyBGaWxlKChTdHJpbmcpYnVuZGxlRmlsZU5hbWVzLmdldChpKSkpOworCQkJCWJ1bmRsZXMuYWRkKHJibSk7CisJCQl9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2cobmV3IEpGcmFtZSgpLCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2xvYWRfcHJvamVjdCIpLAorCQkJCQkJCQkJCSAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCWV4LnByaW50U3RhY2tUcmFjZSgpOworCQkJYnVuZGxlTmFtZXMuY2xlYXIoKTsKKwkJCWJ1bmRsZUZpbGVOYW1lcy5jbGVhcigpOworCQl9CisJfQorCQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBwcm9qZWN0TmFtZTsgfQorCQorCXB1YmxpYyBpbnQgZ2V0U2l6ZSgpIHsgcmV0dXJuIGJ1bmRsZU5hbWVzLnNpemUoKTsgfQorCQorCXB1YmxpYyBTdHJpbmcgZ2V0QnVuZGxlTmFtZShpbnQgaW5kZXgpIHsKKwkJcmV0dXJuIChTdHJpbmcpYnVuZGxlTmFtZXMuZ2V0KGluZGV4KTsJCisJfQorCQorCXB1YmxpYyBTdHJpbmcgZ2V0RmlsZU5hbWUoaW50IGluZGV4KSB7CisJCXJldHVybiAoU3RyaW5nKWJ1bmRsZUZpbGVOYW1lcy5nZXQoaW5kZXgpOwkKKwl9CisJCisJcHVibGljIFJCTWFuYWdlciBnZXRCdW5kbGUoaW50IGluZGV4KSB7CisJCXJldHVybiAoUkJNYW5hZ2VyKWJ1bmRsZXMuZ2V0KGluZGV4KTsKKwl9CisJCisJcHVibGljIFJCTWFuYWdlciBnZXRCdW5kbGUoU3RyaW5nIGJ1bmRsZU5hbWUpIHsKKwkJaW50IGluZGV4ID0gYnVuZGxlTmFtZXMuaW5kZXhPZihidW5kbGVOYW1lKTsKKwkJaWYgKGluZGV4ID49IDApIHJldHVybiBnZXRCdW5kbGUoaW5kZXgpOworCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJcHVibGljIHZvaWQgd3JpdGUoRmlsZSBvdXRwdXRGaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIob3V0cHV0RmlsZSk7CisJCWZvciAoaW50IGk9MDsgaSA8IGJ1bmRsZU5hbWVzLnNpemUoKTsgaSsrKSB7CisJCQlmdy53cml0ZSgoU3RyaW5nKWJ1bmRsZU5hbWVzLmdldChpKSk7CisJCQlmdy53cml0ZSgiXG4iKTsKKwkJCWZ3LndyaXRlKChTdHJpbmcpYnVuZGxlRmlsZU5hbWVzLmdldChpKSk7CisJCQlpZiAoaSAhPSBidW5kbGVOYW1lcy5zaXplKCktMSkgZncud3JpdGUoIlxuIik7CisJCX0KKwkJZncuZmx1c2goKTsKKwkJZncuY2xvc2UoKTsKKwl9CisJCisJcHVibGljIHZvaWQgYWRkQnVuZGxlKFN0cmluZyBidW5kbGVGaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJUkJNYW5hZ2VyIGJ1bmRsZSA9IG5ldyBSQk1hbmFnZXIobmV3IEZpbGUoYnVuZGxlRmlsZU5hbWUpKTsKKwkJYnVuZGxlcy5hZGQoYnVuZGxlKTsKKwkJYnVuZGxlTmFtZXMuYWRkKGJ1bmRsZS5nZXRCYXNlQ2xhc3MoKSk7CisJCWJ1bmRsZUZpbGVOYW1lcy5hZGQoYnVuZGxlRmlsZU5hbWUpOworCX0KKwkKKwlwdWJsaWMgdm9pZCByZW1vdmVCdW5kbGUoU3RyaW5nIGJ1bmRsZU5hbWUpIHsKKwkJaW50IGluZGV4ID0gYnVuZGxlTmFtZXMuaW5kZXhPZihidW5kbGVOYW1lKTsKKwkJaWYgKGluZGV4ID49IDApIHsKKwkJCWJ1bmRsZU5hbWVzLnJlbW92ZShpbmRleCk7CisJCQlidW5kbGVGaWxlTmFtZXMucmVtb3ZlKGluZGV4KTsKKwkJCWJ1bmRsZXMucmVtb3ZlKGluZGV4KTsKKwkJfQorCX0KK30KKworY2xhc3MgUkJNYW5hZ2VyTWVudUJhciBleHRlbmRzIEpNZW51QmFyIHsKKwlSQk1hbmFnZXJHVUkgICAgICAgICAgICAgbGlzdGVuZXI7CisJCisJSk1lbnUgICAgICAgIGpNZW51RmlsZSA9IG5ldyBKTWVudSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZW51IC0+IEZpbGUKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlTmV3UmVzb3VyY2VCdW5kbGUgPSBuZXcgSk1lbnVJdGVtKCk7ICAgICAgICAgICAgICAgIAorCUpNZW51SXRlbSAgICBqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZSA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnUgICAgICAgIGpNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlID0gbmV3IEpNZW51KCk7ICAgICAgICAgICAgICAgICAvLyBNZW51IC0+IEZpbGUgLT4gSW1wb3J0CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZUltcG9ydEphdmEgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZUltcG9ydFByb3BlcnRpZXMgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZUltcG9ydFRNWCA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlSW1wb3J0WExGID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51ICAgICAgICBqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZSA9IG5ldyBKTWVudSgpOyAgICAgICAgICAgICAgICAgLy8gTWVudSAtPiBGaWxlIC0+IEV4cG9ydAorCUpNZW51SXRlbSAgICBqTWVudUZpbGVFeHBvcnRKYXZhID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUZpbGVFeHBvcnRJQ1UgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZUV4cG9ydFByb3BlcnRpZXMgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RmlsZUV4cG9ydFRNWCA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVGaWxlRXhwb3J0WExGID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudUZpbGVFeGl0ID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51ICAgICAgICBqTWVudUVkaXQgPSBuZXcgSk1lbnUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVudSAtPiBFZGl0CisJSk1lbnVJdGVtICAgIGpNZW51RWRpdEN1dCA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVFZGl0Q29weSA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVFZGl0UGFzdGUgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51RWRpdERlbGV0ZSA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudSAgICAgICAgak1lbnVPcHRpb25zID0gbmV3IEpNZW51KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lbnUgLT4gT3B0aW9ucworCUpNZW51SXRlbSAgICBqTWVudU9wdGlvbnNBZGROZXdFbnRyeSA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudUl0ZW0gICAgak1lbnVPcHRpb25zQWRkTmV3R3JvdXAgPSBuZXcgSk1lbnVJdGVtKCk7CisJSk1lbnVJdGVtICAgIGpNZW51T3B0aW9uc0FkZE5ld1Jlc291cmNlRmlsZSA9IG5ldyBKTWVudUl0ZW0oKTsKKwkvL0pNZW51SXRlbSAgICBqTWVudU9wdGlvbnNQcm9qZWN0Vmlld2VyID0gbmV3IEpNZW51SXRlbSgpOworCUpNZW51SXRlbSAgICBqTWVudU9wdGlvbnNQcmVmZXJlbmNlcyA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudSAgICAgICAgak1lbnVWaWV3ID0gbmV3IEpNZW51KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lbnUgLT4gVmlldworCUpNZW51SXRlbSAgICBqTWVudVZpZXdWaWV3U3RhdGlzdGljcyA9IG5ldyBKTWVudUl0ZW0oKTsKKwlKTWVudSAgICAgICAgak1lbnVIZWxwID0gbmV3IEpNZW51KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lbnUgLT4gSGVscAorCUpNZW51SXRlbSAgICBqTWVudUhlbHBBYm91dFJlc291cmNlQnVuZGxlTWFuYWdlciA9IG5ldyBKTWVudUl0ZW0oKTsKKwkKKwl2b2lkIHVwZGF0ZUxvY2FsZSgpIHsKKwkJLy9GSUxFCisJCWpNZW51RmlsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlIikpOworCQlqTWVudUZpbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZU5ld1Jlc291cmNlQnVuZGxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfbmV3IikpOworCQlqTWVudUZpbGVOZXdSZXNvdXJjZUJ1bmRsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9uZXdfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZU9wZW5SZXNvdXJjZUJ1bmRsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX29wZW4iKSk7CisJCWpNZW51RmlsZU9wZW5SZXNvdXJjZUJ1bmRsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9vcGVuX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9zYXZlIikpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfc2F2ZV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9zYXZlYXMiKSk7CisJCWpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZUFzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3NhdmVhc190cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnQiKSk7CisJCWpNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlSW1wb3J0SmF2YS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9qYXZhIikpOworCQlqTWVudUZpbGVJbXBvcnRKYXZhLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9qYXZhX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVJbXBvcnRQcm9wZXJ0aWVzLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXMiKSk7CisJCWpNZW51RmlsZUltcG9ydFByb3BlcnRpZXMuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXNfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUltcG9ydFRNWC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9UTVgiKSk7CisJCWpNZW51RmlsZUltcG9ydFRNWC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfVE1YX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVJbXBvcnRYTEYuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfWExGIikpOworCQlqTWVudUZpbGVJbXBvcnRYTEYuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X1hMRl90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnQiKSk7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0SmF2YS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9qYXZhIikpOworCQlqTWVudUZpbGVFeHBvcnRKYXZhLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9qYXZhX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeHBvcnRJQ1Uuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfSUNVIikpOworCQlqTWVudUZpbGVFeHBvcnRJQ1Uuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X0lDVV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0UHJvcGVydGllcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzIikpOworCQlqTWVudUZpbGVFeHBvcnRQcm9wZXJ0aWVzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeHBvcnRUTVguc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfVE1YIikpOworCQlqTWVudUZpbGVFeHBvcnRUTVguc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X1RNWF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0WExGLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X1hMRiIpKTsKKwkJak1lbnVGaWxlRXhwb3J0WExGLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9YTEZfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4aXQuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9xdWl0IikpOworCQlqTWVudUZpbGVFeGl0LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3F1aXRfdHJpZ2dlciIpKSk7CisJCS8vRURJVAorCQlqTWVudUVkaXQuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdCIpKTsKKwkJak1lbnVFZGl0LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X3RyaWdnZXIiKSkpOworCQlqTWVudUVkaXRDdXQuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9jdXQiKSk7CisJCWpNZW51RWRpdEN1dC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9jdXRfdHJpZ2dlciIpKSk7CisJCWpNZW51RWRpdENvcHkuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9jb3B5IikpOworCQlqTWVudUVkaXRDb3B5LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X2NvcHlfdHJpZ2dlciIpKSk7CisJCWpNZW51RWRpdFBhc3RlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfcGFzdGUiKSk7CisJCWpNZW51RWRpdFBhc3RlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X3Bhc3RlX3RyaWdnZXIiKSkpOworCQlqTWVudUVkaXREZWxldGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9kZWxldGUiKSk7CisJCWpNZW51RWRpdERlbGV0ZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9kZWxldGVfdHJpZ2dlciIpKSk7CisJCS8vT1BUSU9OUworCQlqTWVudU9wdGlvbnMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9ucyIpKTsKKwkJak1lbnVPcHRpb25zLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3RyaWdnZXIiKSkpOworCQlqTWVudU9wdGlvbnNBZGROZXdFbnRyeS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGVudHJ5IikpOworCQlqTWVudU9wdGlvbnNBZGROZXdFbnRyeS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRlbnRyeV90cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3R3JvdXAuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRncm91cCIpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3R3JvdXAuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZ3JvdXBfdHJpZ2dlciIpKSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld1Jlc291cmNlRmlsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGZpbGUiKSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld1Jlc291cmNlRmlsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRmaWxlX3RyaWdnZXIiKSkpOworCQkvL2pNZW51T3B0aW9uc1Byb2plY3RWaWV3ZXIuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlciIpKTsKKwkJLy9qTWVudU9wdGlvbnNQcm9qZWN0Vmlld2VyLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyX3RyaWdnZXIiKSkpOworCQlqTWVudU9wdGlvbnNQcmVmZXJlbmNlcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3ByZWZlcmVuY2VzIikpOworCQlqTWVudU9wdGlvbnNQcmVmZXJlbmNlcy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19wcmVmZXJlbmNlc190cmlnZ2VyIikpKTsKKwkJLy9WSUVXCisJCWpNZW51Vmlldy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV92aWV3IikpOworCQlqTWVudVZpZXcuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3ZpZXdfdHJpZ2dlciIpKSk7CisJCWpNZW51Vmlld1ZpZXdTdGF0aXN0aWNzLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3ZpZXdfc3RhdGlzdGljcyIpKTsKKwkJak1lbnVWaWV3Vmlld1N0YXRpc3RpY3Muc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X3ZpZXdfc3RhdGlzdGljc190cmlnZ2VyIikpKTsKKwkJLy9IRUxQCisJCWpNZW51SGVscC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9oZWxwIikpOworCQlqTWVudUhlbHAuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfdHJpZ2dlciIpKSk7CisJCWpNZW51SGVscEFib3V0UmVzb3VyY2VCdW5kbGVNYW5hZ2VyLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2hlbHBfYWJvdXQiKSk7CisJCWpNZW51SGVscEFib3V0UmVzb3VyY2VCdW5kbGVNYW5hZ2VyLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9oZWxwX2Fib3V0X3RyaWdnZXIiKSkpOworCX0KKwkKKwlwdWJsaWMgUkJNYW5hZ2VyTWVudUJhcihSQk1hbmFnZXJHVUkgZ3VpKSB7CisJCXN1cGVyKCk7CQorCQkKKyAgICAgICAgYm9vbGVhbiB4bWxBdmFpbGFibGU7CisJCXRyeSB7CisgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLkRPTVBhcnNlciIpOworICAgICAgICAgICAgQ2xhc3MuZm9yTmFtZSgiamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyIik7CisgICAgICAgICAgICB4bWxBdmFpbGFibGUgPSB0cnVlOworICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHhtbEF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICB9CisJCWxpc3RlbmVyID0gZ3VpOworCQkKKwkJLy8gQWRkIHRoZSBtZW51cyB0byB0aGUgbWVudSBiYXIgCisJCXNldFZpc2libGUodHJ1ZSk7CisJCWFkZChqTWVudUZpbGUpOworCQkvL2FkZChqTWVudUVkaXQpOworCQlhZGQoak1lbnVPcHRpb25zKTsKKwkJLy9hZGQoak1lbnVWaWV3KTsKKwkJYWRkKGpNZW51SGVscCk7CisKKwkJLy8gQWRkIEZpbGUgTWVudSBJdGVtcyB0byB0aGUgRmlsZSBNZW51CisJCWpNZW51RmlsZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZSIpKTsKKwkJak1lbnVGaWxlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGUuYWRkKGpNZW51RmlsZU5ld1Jlc291cmNlQnVuZGxlKTsKKwkJak1lbnVGaWxlLmFkZChqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUpOworCQlqTWVudUZpbGUuYWRkKGpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZSk7CisJCWpNZW51RmlsZS5hZGQoak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMpOworCQlqTWVudUZpbGUuYWRkU2VwYXJhdG9yKCk7CisJCWpNZW51RmlsZS5hZGQoak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUpOworCQlqTWVudUZpbGUuYWRkKGpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlKTsKKwkJak1lbnVGaWxlLmFkZFNlcGFyYXRvcigpOworCQkvLyBBZGQgdGhlIHJlY2VudCBmaWxlcyB0byB0aGUgZmlsZSBtZW51CisJCVZlY3RvciByZWNlbnRGaWxlcyA9IFByZWZlcmVuY2VzLmdldFJlY2VudEZpbGVzUHJlZmVyZW5jZXMoKTsKKwkJaWYgKHJlY2VudEZpbGVzLnNpemUoKSA+IDApIHsKKwkJCWZvciAoaW50IGk9MDsgaSA8IHJlY2VudEZpbGVzLnNpemUoKTsgaSs9MikgeworCQkJCVN0cmluZyBuYW1lID0gKFN0cmluZylyZWNlbnRGaWxlcy5lbGVtZW50QXQoaSk7CisJCQkJU3RyaW5nIGxvY2F0aW9uID0gKFN0cmluZylyZWNlbnRGaWxlcy5lbGVtZW50QXQoaSsxKTsKKwkJCQlKTWVudUl0ZW0gcmVjZW50TWVudUl0ZW0gPSBuZXcgSk1lbnVJdGVtKCk7CisJCQkJcmVjZW50TWVudUl0ZW0uc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQlyZWNlbnRNZW51SXRlbS5zZXRUZXh0KG5hbWUpOworCQkJCXJlY2VudE1lbnVJdGVtLnNldE5hbWUoIl9fIiArIGxvY2F0aW9uLnRyaW0oKSk7CisJCQkJcmVjZW50TWVudUl0ZW0uYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkJCWpNZW51RmlsZS5hZGQocmVjZW50TWVudUl0ZW0pOworCQkJfQorCQkJak1lbnVGaWxlLmFkZFNlcGFyYXRvcigpOworCQl9CisJCWpNZW51RmlsZS5hZGQoak1lbnVGaWxlRXhpdCk7CisJCQorCQkvL2pNZW51RmlsZUltcG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVJbXBvcnRKYXZhKTsKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuYWRkKGpNZW51RmlsZUltcG9ydFByb3BlcnRpZXMpOworICAgICAgICBqTWVudUZpbGVJbXBvcnRUTVguc2V0RW5hYmxlZCh4bWxBdmFpbGFibGUpOworCQlqTWVudUZpbGVJbXBvcnRSZXNvdXJjZUJ1bmRsZS5hZGQoak1lbnVGaWxlSW1wb3J0VE1YKTsKKyAgICAgICAgak1lbnVGaWxlSW1wb3J0WExGLnNldEVuYWJsZWQoeG1sQXZhaWxhYmxlKTsKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuYWRkKGpNZW51RmlsZUltcG9ydFhMRik7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVFeHBvcnRKYXZhKTsKKwkJak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUuYWRkKGpNZW51RmlsZUV4cG9ydElDVSk7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVFeHBvcnRQcm9wZXJ0aWVzKTsKKyAgICAgICAgak1lbnVGaWxlRXhwb3J0VE1YLnNldEVuYWJsZWQoeG1sQXZhaWxhYmxlKTsKKwkJak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUuYWRkKGpNZW51RmlsZUV4cG9ydFRNWCk7CisgICAgICAgIGpNZW51RmlsZUV4cG9ydFhMRi5zZXRFbmFibGVkKHhtbEF2YWlsYWJsZSk7CisJCWpNZW51RmlsZUV4cG9ydFJlc291cmNlQnVuZGxlLmFkZChqTWVudUZpbGVFeHBvcnRYTEYpOworCisJCWpNZW51RmlsZU5ld1Jlc291cmNlQnVuZGxlLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZU5ld1Jlc291cmNlQnVuZGxlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfbmV3IikpOworCQlqTWVudUZpbGVOZXdSZXNvdXJjZUJ1bmRsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9uZXdfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZU5ld1Jlc291cmNlQnVuZGxlLnNldEFjY2VsZXJhdG9yKEtleVN0cm9rZS5nZXRLZXlTdHJva2UoCisgICAgICAgICAgICAgICAgICBLZXlFdmVudC5WS19OLCBBY3Rpb25FdmVudC5DVFJMX01BU0spKTsKKwkJak1lbnVGaWxlTmV3UmVzb3VyY2VCdW5kbGUuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlT3BlblJlc291cmNlQnVuZGxlLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZU9wZW5SZXNvdXJjZUJ1bmRsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX29wZW4iKSk7CisJCWpNZW51RmlsZU9wZW5SZXNvdXJjZUJ1bmRsZS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9vcGVuX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUuc2V0QWNjZWxlcmF0b3IoS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgKKyAgICAgICAgICAgICAgICAgIEtleUV2ZW50LlZLX08sIEFjdGlvbkV2ZW50LkNUUkxfTUFTSykpOworCQlqTWVudUZpbGVPcGVuUmVzb3VyY2VCdW5kbGUuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCisJCWpNZW51RmlsZVNhdmVSZXNvdXJjZUJ1bmRsZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9zYXZlIikpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfc2F2ZV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlLnNldEFjY2VsZXJhdG9yKEtleVN0cm9rZS5nZXRLZXlTdHJva2UoCisgICAgICAgICAgICAgICAgICBLZXlFdmVudC5WS19TLCBBY3Rpb25FdmVudC5DVFJMX01BU0spKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGVBcy5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGVBcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3NhdmVhcyIpKTsKKwkJak1lbnVGaWxlU2F2ZVJlc291cmNlQnVuZGxlQXMuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfc2F2ZWFzX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGVBcy5zZXRBY2NlbGVyYXRvcihLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKAorICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuVktfUywgQWN0aW9uRXZlbnQuQ1RSTF9NQVNLIHwgQWN0aW9uRXZlbnQuU0hJRlRfTUFTSykpOworCQlqTWVudUZpbGVTYXZlUmVzb3VyY2VCdW5kbGVBcy5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVJbXBvcnRSZXNvdXJjZUJ1bmRsZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVJbXBvcnRSZXNvdXJjZUJ1bmRsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydCIpKTsKKwkJak1lbnVGaWxlSW1wb3J0UmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVJbXBvcnRSZXNvdXJjZUJ1bmRsZS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVJbXBvcnRKYXZhLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUltcG9ydEphdmEuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfamF2YSIpKTsKKwkJak1lbnVGaWxlSW1wb3J0SmF2YS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfamF2YV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlSW1wb3J0SmF2YS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVJbXBvcnRQcm9wZXJ0aWVzLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUltcG9ydFByb3BlcnRpZXMuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllcyIpKTsKKwkJak1lbnVGaWxlSW1wb3J0UHJvcGVydGllcy5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllc190cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlSW1wb3J0UHJvcGVydGllcy5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVJbXBvcnRUTVguc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlSW1wb3J0VE1YLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X1RNWCIpKTsKKwkJak1lbnVGaWxlSW1wb3J0VE1YLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9UTVhfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUltcG9ydFRNWC5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVJbXBvcnRYTEYuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlSW1wb3J0WExGLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfaW1wb3J0X1hMRiIpKTsKKwkJak1lbnVGaWxlSW1wb3J0WExGLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2ltcG9ydF9YTEZfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUltcG9ydFhMRi5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydCIpKTsKKwkJak1lbnVGaWxlRXhwb3J0UmVzb3VyY2VCdW5kbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeHBvcnRSZXNvdXJjZUJ1bmRsZS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVFeHBvcnRKYXZhLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUV4cG9ydEphdmEuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfamF2YSIpKTsKKwkJak1lbnVGaWxlRXhwb3J0SmF2YS5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfamF2YV90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhwb3J0SmF2YS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudUZpbGVFeHBvcnRJQ1Uuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlRXhwb3J0SUNVLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X0lDVSIpKTsKKwkJak1lbnVGaWxlRXhwb3J0SUNVLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9JQ1VfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4cG9ydElDVS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisKKwkJak1lbnVGaWxlRXhwb3J0UHJvcGVydGllcy5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUZpbGVFeHBvcnRQcm9wZXJ0aWVzLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X3Byb3BlcnRpZXMiKSk7CisJCWpNZW51RmlsZUV4cG9ydFByb3BlcnRpZXMuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfZXhwb3J0X3Byb3BlcnRpZXNfdHJpZ2dlciIpKSk7CisJCWpNZW51RmlsZUV4cG9ydFByb3BlcnRpZXMuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlRXhwb3J0VE1YLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUV4cG9ydFRNWC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9UTVgiKSk7CisJCWpNZW51RmlsZUV4cG9ydFRNWC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfVE1YX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeHBvcnRUTVguYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCQkKKwkJak1lbnVGaWxlRXhwb3J0WExGLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RmlsZUV4cG9ydFhMRi5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX2V4cG9ydF9YTEYiKSk7CisJCWpNZW51RmlsZUV4cG9ydFhMRi5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZmlsZV9leHBvcnRfWExGX3RyaWdnZXIiKSkpOworCQlqTWVudUZpbGVFeHBvcnRYTEYuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCisJCWpNZW51RmlsZUV4aXQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVGaWxlRXhpdC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9maWxlX3F1aXQiKSk7CisJCWpNZW51RmlsZUV4aXQuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2ZpbGVfcXVpdF90cmlnZ2VyIikpKTsKKwkJak1lbnVGaWxlRXhpdC5zZXRBY2NlbGVyYXRvcihLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKAorICAgICAgICAgICAgICAgICAgS2V5RXZlbnQuVktfUSwgQWN0aW9uRXZlbnQuQ1RSTF9NQVNLKSk7CisJCWpNZW51RmlsZUV4aXQuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCisJCS8vIEFkZCBFZGl0IE1lbnUgSXRlbXMgdG8gdGhlIEVkaXQgTWVudQorCQlqTWVudUVkaXQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVFZGl0LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXQiKSk7CisJCWpNZW51RWRpdC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF90cmlnZ2VyIikpKTsKKwkJak1lbnVFZGl0LmFkZChqTWVudUVkaXRDdXQpOworCQlqTWVudUVkaXQuYWRkKGpNZW51RWRpdENvcHkpOworCQlqTWVudUVkaXQuYWRkKGpNZW51RWRpdFBhc3RlKTsKKwkJak1lbnVFZGl0LmFkZChqTWVudUVkaXREZWxldGUpOworCisJCWpNZW51RWRpdEN1dC5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUVkaXRDdXQuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9jdXQiKSk7CisJCWpNZW51RWRpdEN1dC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfZWRpdF9jdXRfdHJpZ2dlciIpKSk7CisJCWpNZW51RWRpdEN1dC5zZXRBY2NlbGVyYXRvcihLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKAorCQkJCUtleUV2ZW50LlZLX1gsIEFjdGlvbkV2ZW50LkNUUkxfTUFTSykpOworCisJCWpNZW51RWRpdENvcHkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVFZGl0Q29weS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X2NvcHkiKSk7CisJCWpNZW51RWRpdENvcHkuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfY29weV90cmlnZ2VyIikpKTsKKwkJak1lbnVFZGl0Q29weS5zZXRBY2NlbGVyYXRvcihLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKAorCQkJCUtleUV2ZW50LlZLX0MsIEFjdGlvbkV2ZW50LkNUUkxfTUFTSykpOworCisJCWpNZW51RWRpdFBhc3RlLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RWRpdFBhc3RlLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X2VkaXRfcGFzdGUiKSk7CisJCWpNZW51RWRpdFBhc3RlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X3Bhc3RlX3RyaWdnZXIiKSkpOworCQlqTWVudUVkaXRQYXN0ZS5zZXRBY2NlbGVyYXRvcihLZXlTdHJva2UuZ2V0S2V5U3Ryb2tlKAorCQkJCUtleUV2ZW50LlZLX1YsIEFjdGlvbkV2ZW50LkNUUkxfTUFTSykpOworCQkKKwkJak1lbnVFZGl0RGVsZXRlLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51RWRpdERlbGV0ZS5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X2RlbGV0ZSIpKTsKKwkJak1lbnVFZGl0RGVsZXRlLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9lZGl0X2RlbGV0ZV90cmlnZ2VyIikpKTsKKworCQkvLyBBZGQgT3B0aW9ucyBNZW51IEl0ZW1zIHRvIHRoZSBPcHRpb25zIE1lbnUKKwkJak1lbnVPcHRpb25zLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51T3B0aW9ucy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zIikpOworCQlqTWVudU9wdGlvbnMuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfdHJpZ2dlciIpKSk7CisJCWpNZW51T3B0aW9ucy5hZGQoak1lbnVPcHRpb25zQWRkTmV3RW50cnkpOworCQlqTWVudU9wdGlvbnMuYWRkKGpNZW51T3B0aW9uc0FkZE5ld0dyb3VwKTsKKwkJak1lbnVPcHRpb25zLmFkZChqTWVudU9wdGlvbnNBZGROZXdSZXNvdXJjZUZpbGUpOworCQkvL2pNZW51T3B0aW9ucy5hZGRTZXBhcmF0b3IoKTsKKwkJLy9qTWVudU9wdGlvbnMuYWRkKGpNZW51T3B0aW9uc1Byb2plY3RWaWV3ZXIpOworCQlqTWVudU9wdGlvbnMuYWRkU2VwYXJhdG9yKCk7CisJCWpNZW51T3B0aW9ucy5hZGQoak1lbnVPcHRpb25zUHJlZmVyZW5jZXMpOworCisJCWpNZW51T3B0aW9uc0FkZE5ld0VudHJ5LnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld0VudHJ5LnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZW50cnkiKSk7CisJCWpNZW51T3B0aW9uc0FkZE5ld0VudHJ5LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGVudHJ5X3RyaWdnZXIiKSkpOworCQlqTWVudU9wdGlvbnNBZGROZXdFbnRyeS5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlqTWVudU9wdGlvbnNBZGROZXdHcm91cC5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudU9wdGlvbnNBZGROZXdHcm91cC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX2FkZGdyb3VwIikpOworCQlqTWVudU9wdGlvbnNBZGROZXdHcm91cC5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRncm91cF90cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3R3JvdXAuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCisJCWpNZW51T3B0aW9uc0FkZE5ld1Jlc291cmNlRmlsZS5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudU9wdGlvbnNBZGROZXdSZXNvdXJjZUZpbGUuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfb3B0aW9uc19hZGRmaWxlIikpOworCQlqTWVudU9wdGlvbnNBZGROZXdSZXNvdXJjZUZpbGUuc2V0TW5lbW9uaWMoZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfYWRkZmlsZV90cmlnZ2VyIikpKTsKKwkJak1lbnVPcHRpb25zQWRkTmV3UmVzb3VyY2VGaWxlLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJCisJCS8qCisJCWpNZW51T3B0aW9uc1Byb2plY3RWaWV3ZXIuc2V0VmlzaWJsZSh0cnVlKTsKKwkJak1lbnVPcHRpb25zUHJvamVjdFZpZXdlci5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyIikpOworCQlqTWVudU9wdGlvbnNQcm9qZWN0Vmlld2VyLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyX3RyaWdnZXIiKSkpOworCQlqTWVudU9wdGlvbnNQcm9qZWN0Vmlld2VyLmFkZEFjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJKi8KKwkJCisJCWpNZW51T3B0aW9uc1ByZWZlcmVuY2VzLnNldFZpc2libGUodHJ1ZSk7CisJCWpNZW51T3B0aW9uc1ByZWZlcmVuY2VzLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJtZW51X29wdGlvbnNfcHJlZmVyZW5jZXMiKSk7CisJCWpNZW51T3B0aW9uc1ByZWZlcmVuY2VzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9vcHRpb25zX3ByZWZlcmVuY2VzX3RyaWdnZXIiKSkpOworCQlqTWVudU9wdGlvbnNQcmVmZXJlbmNlcy5hZGRBY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisKKwkJLy8gQWRkIFZpZXcgTWVudSBJdGVtcyB0byB0aGUgVmlldyBNZW51CisJCWpNZW51Vmlldy5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudVZpZXcuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfdmlldyIpKTsKKwkJak1lbnVWaWV3LnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV92aWV3X3RyaWdnZXIiKSkpOworCQlqTWVudVZpZXcuYWRkKGpNZW51Vmlld1ZpZXdTdGF0aXN0aWNzKTsKKworCQlqTWVudVZpZXdWaWV3U3RhdGlzdGljcy5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudVZpZXdWaWV3U3RhdGlzdGljcy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV92aWV3X3N0YXRpc3RpY3MiKSk7CisJCWpNZW51Vmlld1ZpZXdTdGF0aXN0aWNzLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV92aWV3X3N0YXRpc3RpY3NfdHJpZ2dlciIpKSk7CisKKwkJLy8gQWRkIEhlbHAgTWVudSBJdGVtcyB0byB0aGUgSGVscCBNZW51CisJCWpNZW51SGVscC5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUhlbHAuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfaGVscCIpKTsKKwkJak1lbnVIZWxwLnNldE1uZW1vbmljKGdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9oZWxwX3RyaWdnZXIiKSkpOworCQlqTWVudUhlbHAuYWRkKGpNZW51SGVscEFib3V0UmVzb3VyY2VCdW5kbGVNYW5hZ2VyKTsKKworCQlqTWVudUhlbHBBYm91dFJlc291cmNlQnVuZGxlTWFuYWdlci5zZXRWaXNpYmxlKHRydWUpOworCQlqTWVudUhlbHBBYm91dFJlc291cmNlQnVuZGxlTWFuYWdlci5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibWVudV9oZWxwX2Fib3V0IikpOworCQlqTWVudUhlbHBBYm91dFJlc291cmNlQnVuZGxlTWFuYWdlci5zZXRNbmVtb25pYyhnZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oIm1lbnVfaGVscF9hYm91dF90cmlnZ2VyIikpKTsKKwkJak1lbnVIZWxwQWJvdXRSZXNvdXJjZUJ1bmRsZU1hbmFnZXIuc2V0QWNjZWxlcmF0b3IoS2V5U3Ryb2tlLmdldEtleVN0cm9rZSgKKwkJCQlLZXlFdmVudC5WS19ILCBBY3Rpb25FdmVudC5DVFJMX01BU0spKTsKKwkJak1lbnVIZWxwQWJvdXRSZXNvdXJjZUJ1bmRsZU1hbmFnZXIuYWRkQWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIGludCBnZXRLZXlFdmVudEtleShTdHJpbmcgY2hhcmFjdGVyKSB7CisJCWlmIChjaGFyYWN0ZXIgPT0gbnVsbCkgcmV0dXJuIEtleUV2ZW50LlZLX0E7CisJCWNoYXJhY3RlciA9IGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpOworCQorCQlpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkEiKSkgcmV0dXJuIEtleUV2ZW50LlZLX0E7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJCIikpIHJldHVybiBLZXlFdmVudC5WS19COworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiQyIpKSByZXR1cm4gS2V5RXZlbnQuVktfQzsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkQiKSkgcmV0dXJuIEtleUV2ZW50LlZLX0Q7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJFIikpIHJldHVybiBLZXlFdmVudC5WS19FOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiRiIpKSByZXR1cm4gS2V5RXZlbnQuVktfRjsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkciKSkgcmV0dXJuIEtleUV2ZW50LlZLX0c7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJIIikpIHJldHVybiBLZXlFdmVudC5WS19IOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiSSIpKSByZXR1cm4gS2V5RXZlbnQuVktfSTsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIkoiKSkgcmV0dXJuIEtleUV2ZW50LlZLX0o7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJLIikpIHJldHVybiBLZXlFdmVudC5WS19LOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiTCIpKSByZXR1cm4gS2V5RXZlbnQuVktfTDsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIk0iKSkgcmV0dXJuIEtleUV2ZW50LlZLX007CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJOIikpIHJldHVybiBLZXlFdmVudC5WS19OOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiTyIpKSByZXR1cm4gS2V5RXZlbnQuVktfTzsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIlAiKSkgcmV0dXJuIEtleUV2ZW50LlZLX1A7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJRIikpIHJldHVybiBLZXlFdmVudC5WS19ROworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiUiIpKSByZXR1cm4gS2V5RXZlbnQuVktfUjsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIlMiKSkgcmV0dXJuIEtleUV2ZW50LlZLX1M7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJUIikpIHJldHVybiBLZXlFdmVudC5WS19UOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiVSIpKSByZXR1cm4gS2V5RXZlbnQuVktfVTsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIlYiKSkgcmV0dXJuIEtleUV2ZW50LlZLX1Y7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJXIikpIHJldHVybiBLZXlFdmVudC5WS19XOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiWCIpKSByZXR1cm4gS2V5RXZlbnQuVktfWDsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIlkiKSkgcmV0dXJuIEtleUV2ZW50LlZLX1k7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCJaIikpIHJldHVybiBLZXlFdmVudC5WS19aOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiMCIpKSByZXR1cm4gS2V5RXZlbnQuVktfMDsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIjEiKSkgcmV0dXJuIEtleUV2ZW50LlZLXzE7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCIyIikpIHJldHVybiBLZXlFdmVudC5WS18yOworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiMyIpKSByZXR1cm4gS2V5RXZlbnQuVktfMzsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIjQiKSkgcmV0dXJuIEtleUV2ZW50LlZLXzQ7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCI1IikpIHJldHVybiBLZXlFdmVudC5WS181OworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiNiIpKSByZXR1cm4gS2V5RXZlbnQuVktfNjsKKwkJZWxzZSBpZiAoY2hhcmFjdGVyLnN0YXJ0c1dpdGgoIjciKSkgcmV0dXJuIEtleUV2ZW50LlZLXzc7CisJCWVsc2UgaWYgKGNoYXJhY3Rlci5zdGFydHNXaXRoKCI4IikpIHJldHVybiBLZXlFdmVudC5WS184OworCQllbHNlIGlmIChjaGFyYWN0ZXIuc3RhcnRzV2l0aCgiOSIpKSByZXR1cm4gS2V5RXZlbnQuVktfOTsKKworCQlyZXR1cm4gS2V5RXZlbnQuVktfQTsKKwl9CisJCit9CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCUHJvamVjdEl0ZW1QYW5lbC5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlByb2plY3RJdGVtUGFuZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDFkZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlByb2plY3RJdGVtUGFuZWwuamF2YQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICovCitjbGFzcyBSQlByb2plY3RJdGVtUGFuZWwgZXh0ZW5kcyBKUGFuZWwgaW1wbGVtZW50cyBBY3Rpb25MaXN0ZW5lciB7CisJUkJNYW5hZ2VyR1VJIGd1aTsKKwkKKwkvLyBWaXN1YWwgQ29tcG9uZW50cworCUJveCBtYWluQm94OworCUpUZXh0RmllbGQgaXRlbUZpZWxkc1tdOworCUpMYWJlbCAgICAgaXRlbUxhYmVsc1tdOworCUpCdXR0b24gICAgY29tbWl0QnV0dG9uc1tdOworCUpCdXR0b24gICAgY29tbWl0QnV0dG9uOworCUpMYWJlbCAgICAgdGl0bGVMYWJlbDsKKwlKTGFiZWwgICAgIGtleUxhYmVsOworCUpMYWJlbCAgICAgY29tbWVudExhYmVsOworCQorCXB1YmxpYyBSQlByb2plY3RJdGVtUGFuZWwoUkJNYW5hZ2VyR1VJIGd1aSkgeworCQlzdXBlcigpOworCQl0aGlzLmd1aSA9IGd1aTsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwl9CisJCisJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCUpCdXR0b24gYnV0dG9uID0gKEpCdXR0b24pZXYuZ2V0U291cmNlKCk7CisJCVN0cmluZyBidXR0b25OYW1lID0gYnV0dG9uLmdldE5hbWUoKTsKKwkJaWYgKGJ1dHRvbk5hbWUgPT0gbnVsbCkgeworCQkJLy8gU2F2ZSBhbGwgY29tcG9uZW50cworCQkJUkJNYW5hZ2VyIGJ1bmRsZSA9IGd1aS5nZXRTZWxlY3RlZFByb2plY3RCdW5kbGUoKTsKKwkJCVZlY3RvciBidW5kbGVzID0gYnVuZGxlLmdldEJ1bmRsZXMoKTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGl0ZW1GaWVsZHMubGVuZ3RoOyBpKyspIHsKKwkJCQlTdHJpbmcgZW5jb2RpbmcgPSBjb21taXRCdXR0b25zW2ldLmdldE5hbWUoKTsKKwkJCQlTdHJpbmcgdHJhbnNsYXRpb24gPSBpdGVtRmllbGRzW2ldLmdldFRleHQoKTsKKwkJCQlTdHJpbmcga2V5ID0gaXRlbUZpZWxkc1tpXS5nZXROYW1lKCk7CisJCQkJZm9yIChpbnQgaj0wOyBqIDwgYnVuZGxlcy5zaXplKCk7IGorKykgeworCQkJCQlCdW5kbGUgcmJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaik7CisJCQkJCWlmIChyYnVuZGxlLmVuY29kaW5nLmVxdWFscyhlbmNvZGluZykpIHsKKwkJCQkJCUJ1bmRsZUl0ZW0gaXRlbSA9IHJidW5kbGUuZ2V0QnVuZGxlSXRlbShrZXkpOworCQkJCQkJaWYgKGl0ZW0gIT0gbnVsbCkgaXRlbS5zZXRUcmFuc2xhdGlvbih0cmFuc2xhdGlvbik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWd1aS5zYXZlUmVzb3VyY2VzKGJ1bmRsZSk7CisJCX0gZWxzZSB7CisJCQkvLyBTYXZlIGEgcGFydGljdWxhciBlbmNvZGluZworCQkJU3RyaW5nIGVuY29kaW5nID0gYnV0dG9uTmFtZTsKKwkJCVJCTWFuYWdlciBidW5kbGUgPSBndWkuZ2V0U2VsZWN0ZWRQcm9qZWN0QnVuZGxlKCk7CisJCQlpbnQgaW5kZXggPSAtMTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IGNvbW1pdEJ1dHRvbnMubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAoY29tbWl0QnV0dG9uc1tpXSA9PSBidXR0b24pIHsKKwkJCQkJaW5kZXggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlTdHJpbmcgdHJhbnNsYXRpb24gPSBpdGVtRmllbGRzW2luZGV4XS5nZXRUZXh0KCk7CisJCQlTdHJpbmcga2V5ID0gaXRlbUZpZWxkc1tpbmRleF0uZ2V0TmFtZSgpOworCQkJVmVjdG9yIGJ1bmRsZXMgPSBidW5kbGUuZ2V0QnVuZGxlcygpOworCQkJZm9yIChpbnQgaT0wOyBpIDwgYnVuZGxlcy5zaXplKCk7IGkrKykgeworCQkJCUJ1bmRsZSByYnVuZGxlID0gKEJ1bmRsZSlidW5kbGVzLmVsZW1lbnRBdChpKTsKKwkJCQlpZiAocmJ1bmRsZS5lbmNvZGluZy5lcXVhbHMoZW5jb2RpbmcpKSB7CisJCQkJCUJ1bmRsZUl0ZW0gaXRlbSA9IHJidW5kbGUuZ2V0QnVuZGxlSXRlbShrZXkpOworCQkJCQlpZiAoaXRlbSAhPSBudWxsKSB7CisJCQkJCQlpdGVtLnNldFRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uKTsKKwkJCQkJCVJCTWFuYWdlckdVSS5kZWJ1Z01zZygiU2V0IHRyYW5zbGF0aW9uIHRvIDogIiArIHRyYW5zbGF0aW9uKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCSAgICBSQk1hbmFnZXJHVUkuZGVidWdNc2coIkl0ZW0gd2FzIG51bGwiKTsKKwkJCQkJYnJlYWs7CisJCQkJfSAKKwkJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIkNvbXBhcmVkICIgKyByYnVuZGxlLmVuY29kaW5nICsgIiB3aXRoICIgKyBlbmNvZGluZyk7CisJCQl9CisJCQlndWkuc2F2ZVJlc291cmNlcyhidW5kbGUsIGVuY29kaW5nKTsKKwkJfQorCQl1cGRhdGVDb21wb25lbnRzKCk7CisJfQorCQorCXByaXZhdGUgdm9pZCBpbml0Q29tcG9uZW50cygpIHsKKwkJc2V0TGF5b3V0KG5ldyBCb3JkZXJMYXlvdXQoKSk7CisJCUpQYW5lbCB0b3BQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEdyaWRMYXlvdXQoMiwxKSk7CisJCXRpdGxlTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9kZWZhdWx0X3RpdGxlIiksIFN3aW5nQ29uc3RhbnRzLkNFTlRFUik7CisJCXRpdGxlTGFiZWwuc2V0Rm9udChuZXcgRm9udCgic2VyaWYiLEZvbnQuQk9MRCwxOCkpOworCQlKUGFuZWwgY29tbWVudFBhbmVsID0gbmV3IEpQYW5lbChuZXcgR3JpZExheW91dCgyLDEpKTsKKwkJSkxhYmVsIGNvbW1lbnRMYWJlbDIgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9jb21tZW50IiksIFN3aW5nQ29uc3RhbnRzLkxFRlQpOworCQljb21tZW50TGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9jb21tZW50X25vbmUiKSwgU3dpbmdDb25zdGFudHMuTEVGVCk7CisJCWNvbW1lbnRQYW5lbC5hZGQoY29tbWVudExhYmVsMik7CisJCWNvbW1lbnRQYW5lbC5hZGQoY29tbWVudExhYmVsKTsKKwkJdG9wUGFuZWwuYWRkKHRpdGxlTGFiZWwpOworCQl0b3BQYW5lbC5hZGQoY29tbWVudFBhbmVsKTsKKwkJSlBhbmVsIGNlbnRlclBhbmVsID0gbmV3IEpQYW5lbChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQltYWluQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJSlNjcm9sbFBhbmUgc2Nyb2xsUGFuZSA9IG5ldyBKU2Nyb2xsUGFuZShtYWluQm94LAorCQkJCQkJCQkJCQkJU2Nyb2xsUGFuZUNvbnN0YW50cy5WRVJUSUNBTF9TQ1JPTExCQVJfQVNfTkVFREVELAorCQkJCQkJCQkJCQkJU2Nyb2xsUGFuZUNvbnN0YW50cy5IT1JJWk9OVEFMX1NDUk9MTEJBUl9BU19ORUVERUQpOworCQljZW50ZXJQYW5lbC5hZGQoc2Nyb2xsUGFuZSwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKwkJY2VudGVyUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCkpOworCQlKUGFuZWwgYm90UGFuZWwgPSBuZXcgSlBhbmVsKG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuUklHSFQpKTsKKwkJY29tbWl0QnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b25fYWxsIikpOworCQljb21taXRCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCWJvdFBhbmVsLmFkZChjb21taXRCdXR0b24pOworCQlhZGQodG9wUGFuZWwsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCWFkZChjZW50ZXJQYW5lbCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCWFkZChib3RQYW5lbCwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKwkJCisJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwl9CisJCisJcHVibGljIHZvaWQgdXBkYXRlQ29tcG9uZW50cygpIHsKKwkJQnVuZGxlSXRlbSBpdGVtID0gZ3VpLmdldFNlbGVjdGVkUHJvamVjdEJ1bmRsZUl0ZW0oKTsKKwkJCisJCWlmIChpdGVtID09IG51bGwpIHsKKwkJCWNvbW1lbnRMYWJlbC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9jb21tZW50X25vbmUiKSk7CisJCQl0aXRsZUxhYmVsLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJwcm9qZWN0X3BhbmVsX2RlZmF1bHRfdGl0bGUiKSk7CisJCQlpdGVtRmllbGRzID0gbnVsbDsKKwkJCWl0ZW1MYWJlbHMgPSBudWxsOworCQkJY29tbWl0QnV0dG9ucyA9IG51bGw7CisJCQljb21taXRCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCX0gZWxzZSB7CisJCQlTdHJpbmcgY29tbWVudCA9IGl0ZW0uZ2V0Q29tbWVudCgpOworCQkJU3RyaW5nIGtleSA9IGl0ZW0uZ2V0S2V5KCk7CisJCQljb21tZW50TGFiZWwuc2V0VGV4dChjb21tZW50KTsKKwkJCXRpdGxlTGFiZWwuc2V0VGV4dChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfdGl0bGUiLCBrZXkpKTsKKwkJCQorCQkJUkJNYW5hZ2VyIG1hbmFnZXIgPSBndWkuZ2V0U2VsZWN0ZWRQcm9qZWN0QnVuZGxlKCk7CisJCQlWZWN0b3IgYnVuZGxlcyA9IG1hbmFnZXIuZ2V0QnVuZGxlcygpOworCQkJaXRlbUZpZWxkcyA9IG5ldyBKVGV4dEZpZWxkW2J1bmRsZXMuc2l6ZSgpXTsKKwkJCWl0ZW1MYWJlbHMgPSBuZXcgSkxhYmVsW2J1bmRsZXMuc2l6ZSgpXTsKKwkJCWNvbW1pdEJ1dHRvbnMgPSBuZXcgSkJ1dHRvbltidW5kbGVzLnNpemUoKV07CisJCQlmb3IgKGludCBpPTA7IGkgPCBidW5kbGVzLnNpemUoKTsgaSsrKSB7CisJCQkJQnVuZGxlIGJ1bmRsZSA9IChCdW5kbGUpYnVuZGxlcy5lbGVtZW50QXQoaSk7CisJCQkJQnVuZGxlSXRlbSBidW5kbGVJdGVtID0gYnVuZGxlLmdldEJ1bmRsZUl0ZW0oa2V5KTsKKwkJCQkvL2Jvb2xlYW4gdHJhbnNsYXRlZCA9IGJ1bmRsZUl0ZW0uaXNUcmFuc2xhdGVkKCk7CisJCQkJSkxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9idW5kbGUiLCBidW5kbGUudG9TdHJpbmcoKSksCisJCQkJCQkJCQkJCQkgIFN3aW5nQ29uc3RhbnRzLkxFRlQpOworCQkJCWlmIChidW5kbGVJdGVtID09IG51bGwgfHwgIWJ1bmRsZUl0ZW0uaXNUcmFuc2xhdGVkKCkpIHsKKwkJCQkgICAgZW5jb2RpbmdMYWJlbC5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigicHJvamVjdF9wYW5lbF9idW5kbGVfdW50cmFuc2xhdGVkIiwKKwkJCQkJCQkJCQkJCQkJCQkJYnVuZGxlLnRvU3RyaW5nKCkpKTsKKwkJCQl9CisJCQkJU3RyaW5nIGZpZWxkVGV4dCA9IChidW5kbGVJdGVtID09IG51bGwgPyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfaXRlbV9pbmhlcml0cyIpIDoKKwkJCQkJCQkJCQkJCQkJIGJ1bmRsZUl0ZW0uZ2V0VHJhbnNsYXRpb24oKSk7CisJCQkJSlRleHRGaWVsZCBpdGVtRmllbGQgPSBuZXcgSlRleHRGaWVsZChmaWVsZFRleHQpOworCQkJCWl0ZW1GaWVsZC5zZXRNYXhpbXVtU2l6ZShuZXcgRGltZW5zaW9uKHRoaXMuZ2V0U2l6ZSgpLndpZHRoLTE1MCwgMjAwKSk7CisJCQkJaXRlbUZpZWxkLnNldE5hbWUoa2V5KTsKKwkJCQlKQnV0dG9uIGNvbW1pdEl0ZW1CdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInByb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbiIpKTsKKwkJCQljb21taXRJdGVtQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCWNvbW1pdEl0ZW1CdXR0b24uc2V0TmFtZShidW5kbGUuZW5jb2RpbmcpOworCQkJCWl0ZW1GaWVsZHNbaV0gPSBpdGVtRmllbGQ7CisJCQkJaXRlbUxhYmVsc1tpXSA9IGVuY29kaW5nTGFiZWw7CisJCQkJY29tbWl0QnV0dG9uc1tpXSA9IGNvbW1pdEl0ZW1CdXR0b247CisJCQl9CisJCQljb21taXRCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJfQorCQkKKwkJbWFpbkJveC5yZW1vdmVBbGwoKTsKKwkJaWYgKGl0ZW1GaWVsZHMgIT0gbnVsbCkgeworCQkJZm9yIChpbnQgaT0wOyBpIDwgaXRlbUZpZWxkcy5sZW5ndGg7IGkrKykgeworCQkJCUpQYW5lbCBidW5kbGVQYW5lbCA9IG5ldyBKUGFuZWwobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCQlidW5kbGVQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVMaW5lQm9yZGVyKENvbG9yLmRhcmtHcmF5KSk7CisJCQkJYnVuZGxlUGFuZWwuYWRkKGl0ZW1MYWJlbHNbaV0sIEJvcmRlckxheW91dC5OT1JUSCk7CisJCQkJYnVuZGxlUGFuZWwuYWRkKGl0ZW1GaWVsZHNbaV0sIEJvcmRlckxheW91dC5DRU5URVIpOworCQkJCWJ1bmRsZVBhbmVsLmFkZChjb21taXRCdXR0b25zW2ldLCBCb3JkZXJMYXlvdXQuRUFTVCk7CisJCQkJbWFpbkJveC5hZGQoYnVuZGxlUGFuZWwpOworCQkJfQorCQl9CisJCQorCQlyZXZhbGlkYXRlKCk7CisJfQorfQorCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCU2VhcmNoUGFuZWwuamF2YSBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJTZWFyY2hQYW5lbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjN2ZkNTAKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCU2VhcmNoUGFuZWwuamF2YQpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDcsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YXguc3dpbmcudGFibGUuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICogVGhlIGNsYXNzIHVzZWQgdG8gZGlzcGxheSB1bnRyYW5zbGF0ZWQgaXRlbXMKKyAqLworY2xhc3MgUkJTZWFyY2hQYW5lbCBleHRlbmRzIEpQYW5lbCB7CisJUkJNYW5hZ2VyIHJibTsKKwlCdW5kbGUgYnVuZGxlOworCVJCTWFuYWdlckdVSSBsaXN0ZW5lcjsKKwkKKwkvLyBDb21wb25lbnRzCisJSkxhYmVsIHRpdGxlTGFiZWwgICAgICAgPSBuZXcgSkxhYmVsKCk7CisJSkxhYmVsIGZpbmRMYWJlbCAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigic2VhcmNoX2ZpbmQiKSk7CisJSkxhYmVsIHJlcGxhY2VMYWJlbCAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigic2VhcmNoX3JlcGxhY2UiKSk7CisJCisJSlRleHRGaWVsZCBmaW5kRmllbGQgICAgPSBuZXcgSlRleHRGaWVsZCgpOworCUpUZXh0RmllbGQgcmVwbGFjZUZpZWxkID0gbmV3IEpUZXh0RmllbGQoKTsKKwkKKwlKQ2hlY2tCb3gga2V5c0NoZWNrICAgICA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJzZWFyY2hfa2V5cyIpLCBmYWxzZSk7CisJSkNoZWNrQm94IHRyYW5zQ2hlY2sgICAgPSBuZXcgSkNoZWNrQm94KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigic2VhcmNoX3ZhbHVlcyIpLCB0cnVlKTsKKwlKQ2hlY2tCb3ggY29tbWVudHNDaGVjayA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJzZWFyY2hfY29tbWVudHMiKSwgZmFsc2UpOworCUpDaGVja0JveCBjYXNlQ2hlY2sgICAgID0gbmV3IEpDaGVja0JveChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInNlYXJjaF9jYXNlX3NlbnNpdGl2ZSIpLCBmYWxzZSk7CisJCisJSkJ1dHRvbiBmaW5kQnV0dG9uICAgICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9zZWFyY2hfZmluZF9hbGwiKSk7CisJSkJ1dHRvbiByZXBsYWNlQnV0dG9uICAgPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGwiKSk7CisJCisJU2VhcmNoSXRlbXNUYWJsZU1vZGVsICAgICBtb2RlbDsKKwlKVGFibGUgICAgICAgICAgICAgICAgICAgIHRhYmxlOworCUpTY3JvbGxQYW5lICAgICAgICAgICAgICAgdGFibGVTY3JvbGw7CisJCisJcHVibGljIFJCU2VhcmNoUGFuZWwoUkJNYW5hZ2VyR1VJIGd1aSkgeworCQlzdXBlcigpOworCQlsaXN0ZW5lciA9IGd1aTsKKwl9CisJCisJcHVibGljIHZvaWQgc2V0QnVuZGxlKEJ1bmRsZSBiKSB7CisJCXJibSA9IG51bGw7CisJCWlmIChidW5kbGUgPT0gbnVsbCkgeworCQkJYnVuZGxlID0gYjsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0gZWxzZSBpZiAoYnVuZGxlICE9IGIpIHsKKwkJCWJ1bmRsZSA9IGI7CisJCQl1cGRhdGVDb21wb25lbnRzKCk7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgc2V0TWFuYWdlcihSQk1hbmFnZXIgbSkgeworCQlidW5kbGUgPSBudWxsOworCQlpZiAocmJtID09IG51bGwpIHsKKwkJCXJibSA9IG07CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgaWYgKHJibSAhPSBtKSB7CisJCQlyYm0gPSBtOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHJlbW92ZUVsZW1lbnRzKCkgeworCQlpZiAocmJtICE9IG51bGwgfHwgYnVuZGxlICE9IG51bGwpIHsKKwkJCXJibSA9IG51bGw7CisJCQlidW5kbGUgPSBudWxsOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfQorCX0KKwkKKwlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtU2VhcmNoKCkgeworCQlTdHJpbmcgc2VhcmNoX3Rlcm0gPSBmaW5kRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJaWYgKHNlYXJjaF90ZXJtLmxlbmd0aCgpIDwgMSkgcmV0dXJuOworCQlpZiAoYnVuZGxlICE9IG51bGwpIHsKKwkJCXBlcmZvcm1TZWFyY2goc2VhcmNoX3Rlcm0sIGJ1bmRsZSwgY2FzZUNoZWNrLmlzU2VsZWN0ZWQoKSk7CisJCX0gZWxzZSBpZiAocmJtICE9IG51bGwpIHsKKwkJCXBlcmZvcm1TZWFyY2goc2VhcmNoX3Rlcm0sIChCdW5kbGUpcmJtLmdldEJ1bmRsZXMoKS5lbGVtZW50QXQoMCksIGNhc2VDaGVjay5pc1NlbGVjdGVkKCkpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBwZXJmb3JtU2VhcmNoKFN0cmluZyB0ZXJtLCBCdW5kbGUgYnVuZGxlLCBib29sZWFuIGNhc2Vfc2Vuc2l0aXZlKSB7CisJCVZlY3RvciByZXRfdiA9IG5ldyBWZWN0b3IoKTsKKwkJRW51bWVyYXRpb24ga2V5cyA9IGJ1bmRsZS5hbGxJdGVtcy5rZXlzKCk7CisJCXdoaWxlIChrZXlzLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQlTdHJpbmcga2V5ID0gKFN0cmluZylrZXlzLm5leHRFbGVtZW50KCk7CisJCQlCdW5kbGVJdGVtIGl0ZW0gPSAoQnVuZGxlSXRlbSlidW5kbGUuYWxsSXRlbXMuZ2V0KGtleSk7CisJCQlpZiAoY2FzZV9zZW5zaXRpdmUpIHsKKwkJCQlpZiAoa2V5c0NoZWNrLmlzU2VsZWN0ZWQoKSAmJiBrZXkuaW5kZXhPZih0ZXJtKSA+PSAwKSB7CisJCQkJCXJldF92LmFkZEVsZW1lbnQoaXRlbSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gLy8gZW5kIGlmIC0ga2V5cworCQkJCWlmICh0cmFuc0NoZWNrLmlzU2VsZWN0ZWQoKSAmJiBpdGVtLmdldFRyYW5zbGF0aW9uKCkuaW5kZXhPZih0ZXJtKSA+PSAwKSB7CisJCQkJCXJldF92LmFkZEVsZW1lbnQoaXRlbSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gLy8gZW5kIGlmIC0gdHJhbnNsYXRpb25zCisJCQkJaWYgKGNvbW1lbnRzQ2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQkJCWlmIChpdGVtLmdldENvbW1lbnQoKS5pbmRleE9mKHRlcm0pID49IDApIHsKKwkJCQkJCXJldF92LmFkZEVsZW1lbnQoaXRlbSk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlIYXNodGFibGUgbG9va3VwcyA9IGl0ZW0uZ2V0TG9va3VwcygpOworCQkJCQlFbnVtZXJhdGlvbiBlbnVtMiA9IGxvb2t1cHMua2V5cygpOworCQkJCQl3aGlsZSAoZW51bTIuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCQkJCVN0cmluZyBsb29rdXBfa2V5ID0gKFN0cmluZyllbnVtMi5uZXh0RWxlbWVudCgpOworCQkJCQkJU3RyaW5nIGxvb2t1cF92YWx1ZSA9IChTdHJpbmcpbG9va3Vwcy5nZXQobG9va3VwX2tleSk7CisJCQkJCQlpZiAobG9va3VwX3ZhbHVlLmluZGV4T2YodGVybSkgPj0gMCkgeworCQkJCQkJCXJldF92LmFkZEVsZW1lbnQoaXRlbSk7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0gLy8gZW5kIHdoaWxlCisJCQkJfSAvLyBlbmQgaWYgLSBjb21tZW50cworCQkJfSBlbHNlIHsKKwkJCQkvLyBOb3QgY2FzZSBzZW5zaXRpdmUJCisJCQkJaWYgKGtleXNDaGVjay5pc1NlbGVjdGVkKCkgJiYga2V5LnRvVXBwZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvVXBwZXJDYXNlKCkpID49IDApIHsKKwkJCQkJcmV0X3YuYWRkRWxlbWVudChpdGVtKTsKKwkJCQkJY29udGludWU7CisJCQkJfSAvLyBlbmQgaWYgLSBrZXlzCisJCQkJaWYgKHRyYW5zQ2hlY2suaXNTZWxlY3RlZCgpICYmIGl0ZW0uZ2V0VHJhbnNsYXRpb24oKS50b1VwcGVyQ2FzZSgpLmluZGV4T2YodGVybS50b1VwcGVyQ2FzZSgpKSA+PSAwKSB7CisJCQkJCXJldF92LmFkZEVsZW1lbnQoaXRlbSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gLy8gZW5kIGlmIC0gdHJhbnNsYXRpb25zCisJCQkJaWYgKGNvbW1lbnRzQ2hlY2suaXNTZWxlY3RlZCgpKSB7CisJCQkJCWlmIChpdGVtLmdldENvbW1lbnQoKS50b1VwcGVyQ2FzZSgpLmluZGV4T2YodGVybS50b1VwcGVyQ2FzZSgpKSA+PSAwKSB7CisJCQkJCQlyZXRfdi5hZGRFbGVtZW50KGl0ZW0pOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJSGFzaHRhYmxlIGxvb2t1cHMgPSBpdGVtLmdldExvb2t1cHMoKTsKKwkJCQkJRW51bWVyYXRpb24gZW51bTIgPSBsb29rdXBzLmtleXMoKTsKKwkJCQkJd2hpbGUgKGVudW0yLmhhc01vcmVFbGVtZW50cygpKSB7CisJCQkJCQlTdHJpbmcgbG9va3VwX2tleSA9IChTdHJpbmcpZW51bTIubmV4dEVsZW1lbnQoKTsKKwkJCQkJCVN0cmluZyBsb29rdXBfdmFsdWUgPSAoU3RyaW5nKWxvb2t1cHMuZ2V0KGxvb2t1cF9rZXkpOworCQkJCQkJaWYgKGxvb2t1cF92YWx1ZS50b1VwcGVyQ2FzZSgpLmluZGV4T2YodGVybS50b1VwcGVyQ2FzZSgpKSA+PSAwKSB7CisJCQkJCQkJcmV0X3YuYWRkRWxlbWVudChpdGVtKTsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBlbmQgd2hpbGUKKwkJCQl9IC8vIGVuZCBpZiAtIGNvbW1lbnRzCisJCQl9CisJCX0gLy8gZW5kIHdoaWxlCisJCW1vZGVsLnNldEl0ZW1zKHJldF92KTsKKwkJbW9kZWwudXBkYXRlKCk7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1SZXBsYWNlKCkgeworCQlTdHJpbmcgc2VhcmNoX3Rlcm0gPSBmaW5kRmllbGQuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJU3RyaW5nIHJlcGxhY2VfdGVybSA9IHJlcGxhY2VGaWVsZC5nZXRUZXh0KCkudHJpbSgpOworCQlwZXJmb3JtU2VhcmNoKCk7CisJCWlmIChzZWFyY2hfdGVybS5sZW5ndGgoKSA8IDEgfHwgcmVwbGFjZV90ZXJtLmxlbmd0aCgpIDwgMSkgcmV0dXJuOworCQlpZiAoa2V5c0NoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJSk9wdGlvblBhbmUuc2hvd01lc3NhZ2VEaWFsb2codGhpcywKKwkJCQlSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX25vX2tleV9yZXBsYWNlIiksCisJCQkJUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ3YXJuaW5nIiksIEpPcHRpb25QYW5lLldBUk5JTkdfTUVTU0FHRSk7CisJCX0KKwkJVmVjdG9yIGl0ZW1zID0gbW9kZWwuZ2V0QnVuZGxlSXRlbXMoKTsKKwkJZm9yIChpbnQgaT0wOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKwkJCUJ1bmRsZUl0ZW0gaXRlbSA9IChCdW5kbGVJdGVtKWl0ZW1zLmVsZW1lbnRBdChpKTsKKwkJCWlmICh0cmFuc0NoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJCWl0ZW0uc2V0VHJhbnNsYXRpb24ocmVwbGFjZShpdGVtLmdldFRyYW5zbGF0aW9uKCksIHNlYXJjaF90ZXJtLCByZXBsYWNlX3Rlcm0pKTsKKwkJCX0KKwkJCWlmIChjb21tZW50c0NoZWNrLmlzU2VsZWN0ZWQoKSkgeworCQkJCWl0ZW0uc2V0Q29tbWVudChyZXBsYWNlKGl0ZW0uZ2V0Q29tbWVudCgpLCBzZWFyY2hfdGVybSwgcmVwbGFjZV90ZXJtKSk7CisJCQl9CisJCX0KKwkJbW9kZWwudXBkYXRlKCk7CisJfQorCQorCS8vIFJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgbWF0Y2ggaW4gb3JpZ2luYWwgd2l0aCByZXBsYWNlCisJCisJcHJpdmF0ZSBTdHJpbmcgcmVwbGFjZShTdHJpbmcgb3JpZ2luYWwsIFN0cmluZyBtYXRjaCwgU3RyaW5nIHJlcGxhY2UpIHsKKwkJaW50IGN1cnJlbnRfaW5kZXggPSAtMTsKKwkJd2hpbGUgKG9yaWdpbmFsLmluZGV4T2YobWF0Y2gsKytjdXJyZW50X2luZGV4KSA+PSAwKSB7CisJCQljdXJyZW50X2luZGV4ID0gb3JpZ2luYWwuaW5kZXhPZihtYXRjaCwgY3VycmVudF9pbmRleCk7CisJCQlvcmlnaW5hbCA9IG9yaWdpbmFsLnN1YnN0cmluZygwLGN1cnJlbnRfaW5kZXgpICsgcmVwbGFjZSArCisJCQkJCSAgIG9yaWdpbmFsLnN1YnN0cmluZyhjdXJyZW50X2luZGV4K21hdGNoLmxlbmd0aCgpLCBvcmlnaW5hbC5sZW5ndGgoKSk7CisJCX0KKwkJcmV0dXJuIG9yaWdpbmFsOworCX0KKwkKKwlwdWJsaWMgdm9pZCBpbml0Q29tcG9uZW50cygpIHsKKwkJLy8gSW5pdGlhbGl6ZSBjb21wb25lbnRzCisJCWlmIChidW5kbGUgIT0gbnVsbCkgeworCQkJdGl0bGVMYWJlbC5zZXRUZXh0KGJ1bmRsZS5uYW1lKTsKKwkJfQorCQllbHNlIGlmIChyYm0gIT0gbnVsbCkgeworCQkJdGl0bGVMYWJlbC5zZXRUZXh0KHJibS5nZXRCYXNlQ2xhc3MoKSArICIgLSAiICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJzZWFyY2giKSk7CisJCX0KKwkJbW9kZWwgPSBuZXcgU2VhcmNoSXRlbXNUYWJsZU1vZGVsKG5ldyBWZWN0b3IoKSk7CisJCQorCQl0aXRsZUxhYmVsLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsRm9udC5QTEFJTiwxOCkpOworCQkKKwkJcmVtb3ZlQWxsKCk7CisJCXNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQl0YWJsZSA9IG5ldyBKVGFibGUobW9kZWwpOworCQl0YWJsZVNjcm9sbCA9IG5ldyBKU2Nyb2xsUGFuZSh0YWJsZSk7CisJCQorCQl0YWJsZS5zZXRTZWxlY3Rpb25Nb2RlKExpc3RTZWxlY3Rpb25Nb2RlbC5TSU5HTEVfSU5URVJWQUxfU0VMRUNUSU9OKTsKKwkJdGFibGUuYWRkTW91c2VMaXN0ZW5lcihsaXN0ZW5lcik7CisJCQorCQlEaW1lbnNpb24gZGltID0gbmV3IERpbWVuc2lvbig3NSwxNSk7CisJCQorCQlmaW5kRmllbGQuc2V0Q29sdW1ucygyMCk7CisJCXJlcGxhY2VGaWVsZC5zZXRDb2x1bW5zKDIwKTsKKwkJZmluZExhYmVsLnNldFByZWZlcnJlZFNpemUoZGltKTsKKwkJcmVwbGFjZUxhYmVsLnNldFByZWZlcnJlZFNpemUoZGltKTsKKwkJCisJCUpQYW5lbCBpbm5lclBhbmVsID0gbmV3IEpQYW5lbChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQlKUGFuZWwgc291dGhQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwkJSlBhbmVsIHdlc3RQYW5lbDEgPSBuZXcgSlBhbmVsKG5ldyBGbG93TGF5b3V0KEZsb3dMYXlvdXQuTEVGVCkpOworCQlKUGFuZWwgd2VzdFBhbmVsMiA9IG5ldyBKUGFuZWwobmV3IEZsb3dMYXlvdXQoRmxvd0xheW91dC5MRUZUKSk7CisJCUJveCByaWdodEJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCUJveCBsZWZ0Qm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJCisJCS8vIEFkZCBhY3Rpb24gbGlzdGVuZXJzCisJCWZpbmRCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlwZXJmb3JtU2VhcmNoKCk7CisJCQl9CisJCX0pOworCQkKKwkJcmVwbGFjZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCXBlcmZvcm1SZXBsYWNlKCk7CisJCQl9CisJCX0pOworCQkKKwkJZmluZEJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX3NlYXJjaF9maW5kX2FsbF90cmlnZ2VyIikpKTsKKwkJcmVwbGFjZUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX3NlYXJjaF9yZXBsYWNlX2FsbF90cmlnZ2VyIikpKTsKKwkJCisJCS8vIFBsYWNlIGNvbXBvbmVudHMKKwkJd2VzdFBhbmVsMS5hZGQoZmluZExhYmVsKTsKKwkJd2VzdFBhbmVsMS5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCg1KSk7CisJCXdlc3RQYW5lbDEuYWRkKGZpbmRGaWVsZCk7CisJCQorCQl3ZXN0UGFuZWwyLmFkZChyZXBsYWNlTGFiZWwpOworCQl3ZXN0UGFuZWwyLmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbFN0cnV0KDUpKTsKKwkJd2VzdFBhbmVsMi5hZGQocmVwbGFjZUZpZWxkKTsKKwkJCisJCWxlZnRCb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbEdsdWUoKSk7CisJCWxlZnRCb3guYWRkKHdlc3RQYW5lbDEpOworCQlsZWZ0Qm94LmFkZCh3ZXN0UGFuZWwyKTsKKwkJLy9sZWZ0Qm94LmFkZChjYXNlQ2hlY2spOworCQkKKwkJcmlnaHRCb3guYWRkKGtleXNDaGVjayk7CisJCXJpZ2h0Qm94LmFkZCh0cmFuc0NoZWNrKTsKKwkJcmlnaHRCb3guYWRkKGNvbW1lbnRzQ2hlY2spOworCQkKKwkJc291dGhQYW5lbC5hZGQoZmluZEJ1dHRvbik7CisJCXNvdXRoUGFuZWwuYWRkKEJveC5jcmVhdGVIb3Jpem9udGFsU3RydXQoNSkpOworCQlzb3V0aFBhbmVsLmFkZChyZXBsYWNlQnV0dG9uKTsKKwkJc291dGhQYW5lbC5hZGQoQm94LmNyZWF0ZUhvcml6b250YWxTdHJ1dCgxMCkpOworCQlzb3V0aFBhbmVsLmFkZChjYXNlQ2hlY2spOworCQkKKwkJaW5uZXJQYW5lbC5hZGQodGl0bGVMYWJlbCwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKwkJaW5uZXJQYW5lbC5hZGQobGVmdEJveCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCWlubmVyUGFuZWwuYWRkKHJpZ2h0Qm94LCBCb3JkZXJMYXlvdXQuRUFTVCk7CisJCWlubmVyUGFuZWwuYWRkKHNvdXRoUGFuZWwsIEJvcmRlckxheW91dC5TT1VUSCk7CisJCQorCQlhZGQoaW5uZXJQYW5lbCwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKwkJYWRkKHRhYmxlU2Nyb2xsLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkKKwkJaWYgKHJibSA9PSBudWxsICYmIGJ1bmRsZSA9PSBudWxsKSB7CisJCQlyZW1vdmVBbGwoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCB1cGRhdGVDb21wb25lbnRzKCkgeworCQkKKwl9Cit9CisKKy8vIFRoZSB0YWJsZSBtb2RlbCBmb3Igc2VhcmNoZWQgSXRlbXMKKworY2xhc3MgU2VhcmNoSXRlbXNUYWJsZU1vZGVsIGV4dGVuZHMgQWJzdHJhY3RUYWJsZU1vZGVsIHsKKwlWZWN0b3IgaXRlbXM7CisJCisJcHVibGljIFNlYXJjaEl0ZW1zVGFibGVNb2RlbChWZWN0b3IgaXRlbXMpIHsKKwkJdGhpcy5pdGVtcyA9IGl0ZW1zOworCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRJdGVtcyhWZWN0b3IgaXRlbXMpIHsKKwkJdGhpcy5pdGVtcyA9IGl0ZW1zOworCX0KKwkKKwlwdWJsaWMgaW50IGdldENvbHVtbkNvdW50KCkgeyByZXR1cm4gMzsgfQorCQkgICAgCisJcHVibGljIGludCBnZXRSb3dDb3VudCgpIHsKKwkJcmV0dXJuIGl0ZW1zLnNpemUoKTsKKwl9CisJCisJcHVibGljIE9iamVjdCBnZXRWYWx1ZUF0KGludCByb3csIGludCBjb2wpIHsKKwkJQnVuZGxlSXRlbSBpdGVtID0gKEJ1bmRsZUl0ZW0paXRlbXMuZWxlbWVudEF0KHJvdyk7CisJCVN0cmluZyByZXRTdHIgPSBudWxsOworCQkJCQorCQlzd2l0Y2goY29sKSB7CisJCWNhc2UgMDoKKwkJCXJldFN0ciA9IGl0ZW0uZ2V0S2V5KCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmV0U3RyID0gaXRlbS5nZXRUcmFuc2xhdGlvbigpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXJldFN0ciA9IChpdGVtLmdldFBhcmVudEdyb3VwKCkgPT0gbnVsbCA/ICIiIDogaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldE5hbWUoKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldFN0ciA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFibGVfY2VsbF9lcnJvciIpOworCQl9CisJCQkJCisJCXJldHVybiByZXRTdHI7CisJfQorCQkJCisJcHVibGljIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpIHsKKwkJaWYgKGNvbCA9PSAwKSByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXVudHJhbnNfY29sdW1uX2tleSIpOworCQllbHNlIGlmIChjb2wgPT0gMSkgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl90cmFuc2xhdGlvbiIpOworCQllbHNlIGlmIChjb2wgPT0gMikgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl9ncm91cCIpOworCQllbHNlIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYmxlX2NvbHVtbl9lcnJvciIpOworCX0KKwkKKwlwdWJsaWMgQnVuZGxlSXRlbSBnZXRCdW5kbGVJdGVtKGludCByb3cpIHsKKwkJcmV0dXJuIChCdW5kbGVJdGVtKWl0ZW1zLmVsZW1lbnRBdChyb3cpOworCX0KKwkKKwlwdWJsaWMgVmVjdG9yIGdldEJ1bmRsZUl0ZW1zKCkgeworCQlyZXR1cm4gaXRlbXM7CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKKwkJZmlyZVRhYmxlRGF0YUNoYW5nZWQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCU3RhdGlzdGljc1BhbmVsLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCU3RhdGlzdGljc1BhbmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjOGUzMwotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUkJTdGF0aXN0aWNzUGFuZWwuamF2YQpAQCAtMCwwICsxLDM5MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIGNvbS5pYm0ucmJtLmd1aTsKKworaW1wb3J0IGphdmEuYXd0Lio7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsKKworaW1wb3J0IGphdmF4LnN3aW5nLio7CitpbXBvcnQgamF2YXguc3dpbmcudGV4dC5KVGV4dENvbXBvbmVudDsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICogVGhlIGNsYXNzIHVzZWQgdG8gZGlzcGxheSBzdGF0aXN0aWNzCisgKi8KK2NsYXNzIFJCU3RhdGlzdGljc1BhbmVsIGV4dGVuZHMgSlBhbmVsIHsKKwlSQk1hbmFnZXIgcmJtOworCUJ1bmRsZSBidW5kbGU7CisJCisJLy8gQ29tcG9uZW50cyAtIEJ1bmRsZQorCUpMYWJlbCAgICAgakxhYmVsU3RhdHNUaXRsZTsKKwkJCisJSkxhYmVsICAgICBqTGFiZWxTdGF0c05hbWU7CisJSkxhYmVsICAgICBqTGFiZWxTdGF0c0NvbW1lbnQ7CisJSkxhYmVsICAgICBqTGFiZWxTdGF0c01hbmFnZXI7CisJSkxhYmVsICAgICBqTGFiZWxTdGF0c0xhbmd1YWdlOworCUpMYWJlbCAgICAgakxhYmVsU3RhdHNDb3VudHJ5OworCUpMYWJlbCAgICAgakxhYmVsU3RhdHNWYXJpYW50OworCUpMYWJlbCAgICAgakxhYmVsU3RhdHNOdW1UcmFuczsKKwlKTGFiZWwgICAgIGpMYWJlbFN0YXRzTnVtVW50cmFuczsKKwkJCisJSlRleHRGaWVsZCBqVGV4dEZpZWxkU3RhdHNOYW1lOworCUpUZXh0RmllbGQgalRleHRGaWVsZFN0YXRzQ29tbWVudDsKKwlKVGV4dEZpZWxkIGpUZXh0RmllbGRTdGF0c01hbmFnZXI7CisJSlRleHRGaWVsZCBqVGV4dEZpZWxkU3RhdHNMYW5ndWFnZTsKKwlKVGV4dEZpZWxkIGpUZXh0RmllbGRTdGF0c0NvdW50cnk7CisJSlRleHRGaWVsZCBqVGV4dEZpZWxkU3RhdHNWYXJpYW50OworCQorCUpCdXR0b24gICAgdXBkYXRlQnV0dG9uOworCQorCUJveCAgICAgICAgYm94U3RhdHNMZWZ0UmlnaHQxOworCUJveCAgICAgICAgYm94U3RhdHNMZWZ0UmlnaHQyOworCQorCS8vIENvbXBvbmVudHMgLSBidW5kbGUgbWFuYWdlcgorCUpMYWJlbCAgICAgIHRpdGxlTGFiZWw7CisJSkxhYmVsICAgICAgbnVtRmlsZUxhYmVsOworCUpMYWJlbCAgICAgIG51bUR1cExhYmVsOworCUpMYWJlbCAgICAgIG51bUdyb3VwTGFiZWw7CisJSkxhYmVsICAgICAgbnVtSXRlbUxhYmVsOworCQorCUpMaXN0ICAgICAgIGdyb3VwTGlzdDsKKwlKTGlzdCAgICAgICBmaWxlTGlzdDsKKwlKTGlzdCAgICAgICBkdXBMaXN0OworCQorCUpTY3JvbGxQYW5lIGdyb3VwU2Nyb2xsOworCUpTY3JvbGxQYW5lIGR1cFNjcm9sbDsKKwlKU2Nyb2xsUGFuZSBmaWxlU2Nyb2xsOworCQorCUpQYW5lbCAgICAgIGZpbGVQYW5lbDsKKwlKUGFuZWwgICAgICBpdGVtUGFuZWw7CisJSlBhbmVsICAgICAgZ3JvdXBQYW5lbDsKKwkKKwlKQnV0dG9uICAgICBmaWxlQnV0dG9uOworCUpCdXR0b24gICAgIGdyb3VwQnV0dG9uOworCUpCdXR0b24gICAgIGl0ZW1CdXR0b247CisJCisJQm94ICAgICAgICAgbWFpbkJveDsKKwlCb3ggICAgICAgICBkdXBCb3g7CisJCisJCisJcHVibGljIHZvaWQgc2V0QnVuZGxlKEJ1bmRsZSBiKSB7CisJCXJibSA9IG51bGw7CisJCWlmIChidW5kbGUgPT0gbnVsbCkgeworCQkJYnVuZGxlID0gYjsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0gZWxzZSBpZiAoYnVuZGxlICE9IGIpIHsKKwkJCWJ1bmRsZSA9IGI7CisJCQl1cGRhdGVDb21wb25lbnRzKCk7CisJCX0KKwl9CisJCisJcHVibGljIHZvaWQgc2V0TWFuYWdlcihSQk1hbmFnZXIgbSkgeworCQlidW5kbGUgPSBudWxsOworCQlpZiAocmJtID09IG51bGwpIHsKKwkJCXJibSA9IG07CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgaWYgKHJibSAhPSBtKSB7CisJCQlyYm0gPSBtOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHJlbW92ZUVsZW1lbnRzKCkgeworCQlpZiAocmJtICE9IG51bGwgfHwgYnVuZGxlICE9IG51bGwpIHsKKwkJCXJibSA9IG51bGw7CisJCQlidW5kbGUgPSBudWxsOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfQorCX0JCisJCQorCXB1YmxpYyB2b2lkIGluaXRDb21wb25lbnRzKCkgeworCQkvLyBJbml0aWFsaXplIGNvbXBvbmVudHMKKwkJaWYgKGJ1bmRsZSAhPSBudWxsKSB7CisJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIkluaXRpYWxpemluZyBjb21wb25lbnRzIGZvciBSZXNvdXJjZSBGaWxlIik7CisJCQlpbnQgdW50cmFuc2xhdGVkID0gYnVuZGxlLmdldFVudHJhbnNsYXRlZEl0ZW1zU2l6ZSgpOworCQkJCisJCQlqTGFiZWxTdGF0c1RpdGxlICAgICAgICAgID0gbmV3IEpMYWJlbChidW5kbGUubmFtZSk7CisJCQorCQkJakxhYmVsU3RhdHNOYW1lICAgICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXN0YXRzX3RpdGxlIikpOworCQkJakxhYmVsU3RhdHNDb21tZW50ICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXN0YXRzX2NvbW1lbnQiKSk7CisJCQlqTGFiZWxTdGF0c01hbmFnZXIgICAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlc3RhdHNfbWFuYWdlciIpKTsKKwkJCWpMYWJlbFN0YXRzTGFuZ3VhZ2UgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c19sYW5ndWFnZSIpKTsKKwkJCWpMYWJlbFN0YXRzQ291bnRyeSAgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c19jb3VudHJ5IikpOworCQkJakxhYmVsU3RhdHNWYXJpYW50ICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXN0YXRzX3ZhcmlhbnQiKSk7CisJCQlqTGFiZWxTdGF0c051bVRyYW5zICAgICAgID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImxhbmd1YWdlc3RhdHNfaXRlbV9jb3VudCIpICsgIiAiICsKKwkJCQkJCQkJCQkJCSAgIFN0cmluZy52YWx1ZU9mKGJ1bmRsZS5hbGxJdGVtcy5zaXplKCkpKTsKKwkJCWpMYWJlbFN0YXRzTnVtVW50cmFucyAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c190cmFuc2xhdGlvbl9jb3VudCIpICsgCisJCQkJCQkJCQkJCQkgICBTdHJpbmcudmFsdWVPZih1bnRyYW5zbGF0ZWQpKTsKKwkJCisJCQlqVGV4dEZpZWxkU3RhdHNOYW1lICAgICAgID0gbmV3IEpUZXh0RmllbGQoKGJ1bmRsZS5uYW1lID09IG51bGwgPyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInVudGl0bGVkIikgOiBidW5kbGUubmFtZSkpOworCQkJalRleHRGaWVsZFN0YXRzQ29tbWVudCAgICA9IG5ldyBKVGV4dEZpZWxkKChidW5kbGUuY29tbWVudCA9PSBudWxsID8gIiIgOiBidW5kbGUuY29tbWVudCkpOworCQkJalRleHRGaWVsZFN0YXRzTWFuYWdlciAgICA9IG5ldyBKVGV4dEZpZWxkKChidW5kbGUubWFuYWdlciA9PSBudWxsID8gIiIgOiBidW5kbGUubWFuYWdlcikpOworCQkJalRleHRGaWVsZFN0YXRzTGFuZ3VhZ2UgICA9IG5ldyBKVGV4dEZpZWxkKChidW5kbGUubGFuZ3VhZ2UgPT0gbnVsbCA/ICIiIDogYnVuZGxlLmxhbmd1YWdlKSwyNSk7CisJCQlqVGV4dEZpZWxkU3RhdHNDb3VudHJ5ICAgID0gbmV3IEpUZXh0RmllbGQoKGJ1bmRsZS5jb3VudHJ5ID09IG51bGwgPyAiIiA6IGJ1bmRsZS5jb3VudHJ5KSwyNSk7CisJCQlqVGV4dEZpZWxkU3RhdHNWYXJpYW50ICAgID0gbmV3IEpUZXh0RmllbGQoKGJ1bmRsZS52YXJpYW50ID09IG51bGwgPyAiIiA6IGJ1bmRsZS52YXJpYW50KSwyNSk7CisJCQorCQkJYm94U3RhdHNMZWZ0UmlnaHQxICAgICAgICA9IG5ldyBCb3goQm94TGF5b3V0LlhfQVhJUyk7CisJCQlib3hTdGF0c0xlZnRSaWdodDIgICAgICAgID0gbmV3IEJveChCb3hMYXlvdXQuWF9BWElTKTsJCisJCQorCQkJdXBkYXRlQnV0dG9uICAgICAgICAgICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX3VwZGF0ZSIpKTsKKwkJCXVwZGF0ZUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX3VwZGF0ZV90cmlnZ2VyIikpKTsKKwkJCQorCQkJLy8gU2V0IHVwIHRoZSBjb21wb25lbnRzCisJCQlqTGFiZWxTdGF0c1RpdGxlLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsRm9udC5QTEFJTiwxOCkpOworCQkJCisJCQlCdXR0b25FbmFibGVyRm9jdXNMaXN0ZW5lciBiZWZsID0gbmV3IEJ1dHRvbkVuYWJsZXJGb2N1c0xpc3RlbmVyKHVwZGF0ZUJ1dHRvbik7CisJCQkKKwkJCS8vIEFkZCBsaXN0ZW5lcnMKKwkJCXVwZGF0ZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJdXBkYXRlQnVuZGxlSW5mbygpOworCQkJCX0KKwkJCX0pOworCQkJCisJCQlqVGV4dEZpZWxkU3RhdHNOYW1lLmFkZEZvY3VzTGlzdGVuZXIoYmVmbCk7CisJCQlqVGV4dEZpZWxkU3RhdHNDb21tZW50LmFkZEZvY3VzTGlzdGVuZXIoYmVmbCk7CisJCQlqVGV4dEZpZWxkU3RhdHNNYW5hZ2VyLmFkZEZvY3VzTGlzdGVuZXIoYmVmbCk7CisJCQlqVGV4dEZpZWxkU3RhdHNMYW5ndWFnZS5hZGRGb2N1c0xpc3RlbmVyKGJlZmwpOworCQkJalRleHRGaWVsZFN0YXRzQ291bnRyeS5hZGRGb2N1c0xpc3RlbmVyKGJlZmwpOworCQkJalRleHRGaWVsZFN0YXRzVmFyaWFudC5hZGRGb2N1c0xpc3RlbmVyKGJlZmwpOworCQkJCisJCQlqVGV4dEZpZWxkU3RhdHNOYW1lLnNldENvbHVtbnMoMzUpOworCQkJalRleHRGaWVsZFN0YXRzQ29tbWVudC5zZXRDb2x1bW5zKDM1KTsKKwkJCWpUZXh0RmllbGRTdGF0c01hbmFnZXIuc2V0Q29sdW1ucygzNSk7CisJCQlqVGV4dEZpZWxkU3RhdHNMYW5ndWFnZS5zZXRDb2x1bW5zKDI1KTsKKwkJCWpUZXh0RmllbGRTdGF0c0NvdW50cnkuc2V0Q29sdW1ucygyNSk7CisJCQlqVGV4dEZpZWxkU3RhdHNWYXJpYW50LnNldENvbHVtbnMoMjUpOworCQkJCisJCQkvL3VwZGF0ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQorCQkJLy8gVXBkYXRlIHRoZSBkaXNwbGF5CisJCQlpZiAobWFpbkJveCAhPSBudWxsKXsKKwkJCQltYWluQm94LnJlbW92ZUFsbCgpOworCQkJfSBlbHNlIHsKKwkJCQltYWluQm94ID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJCX0KKwkJCWlmIChkdXBCb3ggIT0gbnVsbCkKKwkJCQlkdXBCb3gucmVtb3ZlQWxsKCk7CisJCQlyZW1vdmVBbGwoKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzVGl0bGUpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoMTApKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzTmFtZSk7CisJCQltYWluQm94LmFkZChqVGV4dEZpZWxkU3RhdHNOYW1lKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzQ29tbWVudCk7CisJCQltYWluQm94LmFkZChqVGV4dEZpZWxkU3RhdHNDb21tZW50KTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzTWFuYWdlcik7CisJCQltYWluQm94LmFkZChqVGV4dEZpZWxkU3RhdHNNYW5hZ2VyKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDUpKTsKKwkJCW1haW5Cb3guYWRkKGpMYWJlbFN0YXRzTGFuZ3VhZ2UpOworCQkJbWFpbkJveC5hZGQoalRleHRGaWVsZFN0YXRzTGFuZ3VhZ2UpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQkJbWFpbkJveC5hZGQoakxhYmVsU3RhdHNDb3VudHJ5KTsKKwkJCW1haW5Cb3guYWRkKGpUZXh0RmllbGRTdGF0c0NvdW50cnkpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQkJbWFpbkJveC5hZGQoakxhYmVsU3RhdHNWYXJpYW50KTsKKwkJCW1haW5Cb3guYWRkKGpUZXh0RmllbGRTdGF0c1ZhcmlhbnQpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoNSkpOworCQkJbWFpbkJveC5hZGQoakxhYmVsU3RhdHNOdW1UcmFucyk7CisJCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCQltYWluQm94LmFkZChqTGFiZWxTdGF0c051bVVudHJhbnMpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoMTApKTsKKwkJCW1haW5Cb3guYWRkKHVwZGF0ZUJ1dHRvbik7CisJCQltYWluQm94LmFkZChCb3guY3JlYXRlSG9yaXpvbnRhbEdsdWUoKSk7CisJCQlpZiAoIShnZXRMYXlvdXQoKSBpbnN0YW5jZW9mIEZsb3dMYXlvdXQpKSB7CisJCQkJc2V0TGF5b3V0KG5ldyBGbG93TGF5b3V0KCkpOworCQkJfQorCQkJYWRkKG1haW5Cb3gpOworCQl9IGVsc2UgaWYgKHJibSAhPSBudWxsKSB7CisJCQlSQk1hbmFnZXJHVUkuZGVidWdNc2coIkluaXRpYWxpemluZyBjb21wb25lbnRzIGZvciBSZXNvdXJjZSBCdW5kbGUiKTsKKwkJCXRpdGxlTGFiZWwgICAgICAgICAgPSBuZXcgSkxhYmVsKHJibS5nZXRCYXNlQ2xhc3MoKSArICIgLSAiICsgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlY2xhc3MiKSk7CisJCQorCQkJbnVtRmlsZUxhYmVsICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlc3RhdHNfZmlsZV9jb3VudCIpICsgIiAiICsgcmJtLmdldE51bWJlckxhbmd1YWdlcygpKTsKKwkJCW51bUdyb3VwTGFiZWwgICAgICAgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXN0YXRzX2dyb3VwX2NvdW50IikgKyAiICIgKyByYm0uZ2V0TnVtYmVyR3JvdXBzKCkpOworCQkJbnVtSXRlbUxhYmVsICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlc3RhdHNfaXRlbV9jb3VudCIpICsgIiAiICsgcmJtLmdldE51bWJlclRvdGFsVHJhbnNsYXRpb25zKCkpOworCQkJbnVtRHVwTGFiZWwgICAgICAgICA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlc3RhdHNfZHVwbGljYXRlc19jb3VudCIpICsgIiAiICsgcmJtLmdldE51bWJlckR1cGxpY2F0ZXMoKSk7CisJCQkKKwkJCWZpbGVMaXN0ICAgICAgICAgICAgPSBuZXcgSkxpc3QocmJtLmdldExhbmd1YWdlTGlzdGluZ1ZlY3RvcigpKTsKKwkJCWdyb3VwTGlzdCAgICAgICAgICAgPSBuZXcgSkxpc3QocmJtLmdldEdyb3VwTGlzdGluZ1ZlY3RvcigpKTsKKwkJCWR1cExpc3QgICAgICAgICAgICAgPSBuZXcgSkxpc3QocmJtLmdldER1cGxpY2F0ZXNMaXN0aW5nVmVjdG9yKCkpOworCQkJCisJCQlmaWxlQnV0dG9uICAgICAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fYWRkX2ZpbGUiKSk7CisJCQlncm91cEJ1dHRvbiAgICAgICAgID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fYWRkX2dyb3VwIikpOworCQkJaXRlbUJ1dHRvbiAgICAgICAgICA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2FkZF9yZXNvdXJjZSIpKTsKKwkJCQorCQkJZmlsZVBhbmVsICAgICAgICAgICA9IG5ldyBKUGFuZWwoKTsKKwkJCWdyb3VwUGFuZWwgICAgICAgICAgPSBuZXcgSlBhbmVsKCk7CisJCQlpdGVtUGFuZWwgICAgICAgICAgID0gbmV3IEpQYW5lbCgpOworCQkJCisJCQlmaWxlU2Nyb2xsICAgICAgICAgID0gbmV3IEpTY3JvbGxQYW5lKGZpbGVMaXN0KTsKKwkJCWdyb3VwU2Nyb2xsICAgICAgICAgPSBuZXcgSlNjcm9sbFBhbmUoZ3JvdXBMaXN0KTsKKwkJCWR1cFNjcm9sbCAgICAgICAgICAgPSBuZXcgSlNjcm9sbFBhbmUoZHVwTGlzdCk7CisJCQkKKwkJCWlmIChtYWluQm94ID09IG51bGwpIHsKKwkJCQltYWluQm94ICAgICAgICAgPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCQkJfSBlbHNlIHsKKwkJCQltYWluQm94LnJlbW92ZUFsbCgpOworCQkJfQorCQkJZHVwQm94ICAgICAgICAgICAgICA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJCQkKKwkJCS8vIFNldCB1cCB0aGUgY29tcG9uZW50cworCQkJZmlsZVBhbmVsLnNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQkJZ3JvdXBQYW5lbC5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCWl0ZW1QYW5lbC5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCQorCQkJZmlsZVBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJCSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJhc2VzdGF0c19maWxlX2dyb3VwIikpKTsKKwkJCWdyb3VwUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlRXRjaGVkQm9yZGVyKCksCisJCQkJCQkJCQkJCQkJCQkJIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXN0YXRzX2dyb3VwX2dyb3VwIikpKTsKKwkJCWl0ZW1QYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCQkgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJiYXNlc3RhdHNfaXRlbV9ncm91cCIpKSk7CisJCQkKKwkJCXRpdGxlTGFiZWwuc2V0Rm9udChuZXcgRm9udCgiU2Fuc1NlcmlmIixGb250LlBMQUlOLDE4KSk7CisJCQkKKwkJCWZpbGVCdXR0b24uc2V0TW5lbW9uaWMoUkJNYW5hZ2VyTWVudUJhci5nZXRLZXlFdmVudEtleShSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9hZGRfZmlsZV90cmlnZ2VyIikpKTsKKwkJCWdyb3VwQnV0dG9uLnNldE1uZW1vbmljKFJCTWFuYWdlck1lbnVCYXIuZ2V0S2V5RXZlbnRLZXkoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fYWRkX2dyb3VwX3RyaWdnZXIiKSkpOworCQkJaXRlbUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2FkZF9yZXNvdXJjZV90cmlnZ2VyIikpKTsKKwkJCQorCQkJLy8gQWRkIGxpc3RlbmVycworCQkJZmlsZUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJQ29udGFpbmVyIGMgPSAoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpOworCQkJCQlSQk1hbmFnZXJHVUkgZ3VpID0gbnVsbDsKKwkJCQkJd2hpbGUgKCEoYy5nZXRQYXJlbnQoKSBpbnN0YW5jZW9mIFJCTWFuYWdlckdVSSkpIGMgPSBjLmdldFBhcmVudCgpOworCQkJCQlndWkgPSAoUkJNYW5hZ2VyR1VJKWMuZ2V0UGFyZW50KCk7CisJCQkJCWd1aS5jcmVhdGVSZXNvdXJjZUZpbGUoKTsKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJZ3JvdXBCdXR0b24uYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCl7CisJCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGV2KSB7CisJCQkJCUNvbnRhaW5lciBjID0gKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKTsKKwkJCQkJUkJNYW5hZ2VyR1VJIGd1aSA9IG51bGw7CisJCQkJCXdoaWxlICghKGMuZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBSQk1hbmFnZXJHVUkpKSBjID0gYy5nZXRQYXJlbnQoKTsKKwkJCQkJZ3VpID0gKFJCTWFuYWdlckdVSSljLmdldFBhcmVudCgpOworCQkJCQlndWkuY3JlYXRlQnVuZGxlR3JvdXAoKTsKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJaXRlbUJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKXsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJQ29udGFpbmVyIGMgPSAoKEpCdXR0b24pZXYuZ2V0U291cmNlKCkpLmdldFBhcmVudCgpOworCQkJCQlSQk1hbmFnZXJHVUkgZ3VpID0gbnVsbDsKKwkJCQkJd2hpbGUgKCEoYy5nZXRQYXJlbnQoKSBpbnN0YW5jZW9mIFJCTWFuYWdlckdVSSkpIGMgPSBjLmdldFBhcmVudCgpOworCQkJCQlndWkgPSAoUkJNYW5hZ2VyR1VJKWMuZ2V0UGFyZW50KCk7CisJCQkJCWd1aS5jcmVhdGVCdW5kbGVJdGVtKCk7CisJCQkJfQorCQkJfSk7CisJCQkKKwkJCS8vIFVwZGF0ZSB0aGUgZGlzcGxheQorCQkJZmlsZVBhbmVsLnJlbW92ZUFsbCgpOworCQkJZmlsZVBhbmVsLmFkZChudW1GaWxlTGFiZWwsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCQlmaWxlUGFuZWwuYWRkKGZpbGVTY3JvbGwsIEJvcmRlckxheW91dC5DRU5URVIpOworCQkJZmlsZVBhbmVsLmFkZChmaWxlQnV0dG9uLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQkJCisJCQlncm91cFBhbmVsLnJlbW92ZUFsbCgpOworCQkJZ3JvdXBQYW5lbC5hZGQobnVtR3JvdXBMYWJlbCwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKwkJCWdyb3VwUGFuZWwuYWRkKGdyb3VwU2Nyb2xsLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCWdyb3VwUGFuZWwuYWRkKGdyb3VwQnV0dG9uLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQkJCisJCQlkdXBCb3gucmVtb3ZlQWxsKCk7CisJCQlkdXBCb3guYWRkKG51bUR1cExhYmVsKTsKKwkJCWR1cEJveC5hZGQoZHVwU2Nyb2xsKTsKKwkJCQorCQkJaXRlbVBhbmVsLnJlbW92ZUFsbCgpOworCQkJaXRlbVBhbmVsLmFkZChudW1JdGVtTGFiZWwsIEJvcmRlckxheW91dC5OT1JUSCk7CisJCQlpdGVtUGFuZWwuYWRkKGR1cEJveCwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQlpdGVtUGFuZWwuYWRkKGl0ZW1CdXR0b24sIEJvcmRlckxheW91dC5TT1VUSCk7CisJCQkKKwkJCW1haW5Cb3gucmVtb3ZlQWxsKCk7CisJCQltYWluQm94LmFkZCh0aXRsZUxhYmVsKTsKKwkJCW1haW5Cb3guYWRkKEJveC5jcmVhdGVWZXJ0aWNhbFN0cnV0KDEwKSk7CisJCQltYWluQm94LmFkZChmaWxlUGFuZWwpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoMTApKTsKKwkJCW1haW5Cb3guYWRkKGdyb3VwUGFuZWwpOworCQkJbWFpbkJveC5hZGQoQm94LmNyZWF0ZVZlcnRpY2FsU3RydXQoMTApKTsKKwkJCW1haW5Cb3guYWRkKGl0ZW1QYW5lbCk7CisJCQkKKwkJCXJlbW92ZUFsbCgpOworCQkJaWYgKCEoZ2V0TGF5b3V0KCkgaW5zdGFuY2VvZiBCb3JkZXJMYXlvdXQpKQorCQkJCXNldExheW91dChuZXcgQm9yZGVyTGF5b3V0KCkpOworCQkJYWRkKG1haW5Cb3gsIEJvcmRlckxheW91dC5DRU5URVIpOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9IGVsc2UgeworCQkJcmVtb3ZlQWxsKCk7CQorCQl9CisJCXJlcGFpbnQoKTsKKwl9CisJCisJcHVibGljIHZvaWQgdXBkYXRlQ29tcG9uZW50cygpIHsKKwkJaWYgKGJ1bmRsZSAhPSBudWxsKSB7CisJCQlpbnQgdW50cmFuc2xhdGVkID0gYnVuZGxlLmdldFVudHJhbnNsYXRlZEl0ZW1zU2l6ZSgpOworCQkJCisJCQlqTGFiZWxTdGF0c1RpdGxlLnNldFRleHQoYnVuZGxlLm5hbWUpOworCQkKKwkJCWpUZXh0RmllbGRTdGF0c05hbWUuc2V0VGV4dChidW5kbGUubmFtZSA9PSBudWxsID8gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJ1bnRpdGxlZCIpIDogYnVuZGxlLm5hbWUpOworCQkJalRleHRGaWVsZFN0YXRzQ29tbWVudC5zZXRUZXh0KGJ1bmRsZS5jb21tZW50ID09IG51bGwgPyAiIiA6IGJ1bmRsZS5jb21tZW50KTsKKwkJCWpUZXh0RmllbGRTdGF0c01hbmFnZXIuc2V0VGV4dChidW5kbGUubWFuYWdlciA9PSBudWxsID8gIiIgOiBidW5kbGUubWFuYWdlcik7CisJCQlqVGV4dEZpZWxkU3RhdHNMYW5ndWFnZS5zZXRUZXh0KGJ1bmRsZS5sYW5ndWFnZSA9PSBudWxsID8gIiIgOiBidW5kbGUubGFuZ3VhZ2UpOworCQkJalRleHRGaWVsZFN0YXRzQ291bnRyeS5zZXRUZXh0KGJ1bmRsZS5jb3VudHJ5ID09IG51bGwgPyAiIiA6IGJ1bmRsZS5jb3VudHJ5KTsKKwkJCWpUZXh0RmllbGRTdGF0c1ZhcmlhbnQuc2V0VGV4dChidW5kbGUudmFyaWFudCA9PSBudWxsID8gIiIgOiBidW5kbGUudmFyaWFudCk7CisJCQlqTGFiZWxTdGF0c051bVRyYW5zLnNldFRleHQoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXN0YXRzX2l0ZW1fY291bnQiKSArICIgIiArCisJCQkJCSAgIFN0cmluZy52YWx1ZU9mKGJ1bmRsZS5hbGxJdGVtcy5zaXplKCkpKTsKKwkJCWpMYWJlbFN0YXRzTnVtVW50cmFucy5zZXRUZXh0KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2VzdGF0c190cmFuc2xhdGlvbl9jb3VudCIpICsgCisJCQkJCSAgIFN0cmluZy52YWx1ZU9mKHVudHJhbnNsYXRlZCkpOworCQl9IGVsc2UgaWYgKHJibSA9PSBudWxsKSB7CisJCQlyZW1vdmVBbGwoKTsKKwkJfQorCQkKKwl9CisJCisJdm9pZCB1cGRhdGVCdW5kbGVJbmZvKCkgeworCQlidW5kbGUubmFtZSAgICAgPSBqVGV4dEZpZWxkU3RhdHNOYW1lLmdldFRleHQoKS50cmltKCk7CisJCWJ1bmRsZS5jb21tZW50ICA9IGpUZXh0RmllbGRTdGF0c0NvbW1lbnQuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJYnVuZGxlLm1hbmFnZXIgID0galRleHRGaWVsZFN0YXRzTWFuYWdlci5nZXRUZXh0KCkudHJpbSgpOworCQlidW5kbGUubGFuZ3VhZ2UgPSBqVGV4dEZpZWxkU3RhdHNMYW5ndWFnZS5nZXRUZXh0KCkudHJpbSgpOworCQlidW5kbGUuY291bnRyeSAgPSBqVGV4dEZpZWxkU3RhdHNDb3VudHJ5LmdldFRleHQoKS50cmltKCk7CisJCWJ1bmRsZS52YXJpYW50ICA9IGpUZXh0RmllbGRTdGF0c1ZhcmlhbnQuZ2V0VGV4dCgpLnRyaW0oKTsKKwkJdXBkYXRlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCX0KKwkKKwlwdWJsaWMgUkJTdGF0aXN0aWNzUGFuZWwoKSB7CisJCXN1cGVyKCk7CisJCWJ1bmRsZSA9IG51bGw7CisJCXJibSA9IG51bGw7CisJfQorCQorfQorCitjbGFzcyBCdXR0b25FbmFibGVyRm9jdXNMaXN0ZW5lciBpbXBsZW1lbnRzIEZvY3VzTGlzdGVuZXIgeworCUpCdXR0b24gYnV0dG9uOworCVN0cmluZyBiZWZvcmVUZXh0ID0gbnVsbDsKKwkKKwlwdWJsaWMgQnV0dG9uRW5hYmxlckZvY3VzTGlzdGVuZXIoSkJ1dHRvbiBidXR0b24pIHsKKwkJc3VwZXIoKTsKKwkJdGhpcy5idXR0b24gPSBidXR0b247CisJfQorCQorCXB1YmxpYyB2b2lkIGZvY3VzR2FpbmVkKEZvY3VzRXZlbnQgZXYpIHsKKwkJT2JqZWN0IG8gPSBldi5nZXRTb3VyY2UoKTsKKwkJaWYgKG8gaW5zdGFuY2VvZiBKVGV4dENvbXBvbmVudCkgeworCQkJSlRleHRDb21wb25lbnQganRjID0gKEpUZXh0Q29tcG9uZW50KW87CisJCQliZWZvcmVUZXh0ID0ganRjLmdldFRleHQoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCBmb2N1c0xvc3QoRm9jdXNFdmVudCBldikgeworCQlPYmplY3QgbyA9IGV2LmdldFNvdXJjZSgpOworCQlpZiAobyBpbnN0YW5jZW9mIEpUZXh0Q29tcG9uZW50KSB7CisJCQlKVGV4dENvbXBvbmVudCBqdGMgPSAoSlRleHRDb21wb25lbnQpbzsKKwkJCVN0cmluZyBhZnRlclRleHQgPSBqdGMuZ2V0VGV4dCgpOworCQkJaWYgKCFhZnRlclRleHQuZXF1YWxzKGJlZm9yZVRleHQpKSBidXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJfSBlbHNlIGJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlVudHJhbnNsYXRlZFBhbmVsLmphdmEgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL1JCVW50cmFuc2xhdGVkUGFuZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg3ZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SQlVudHJhbnNsYXRlZFBhbmVsLmphdmEKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCAgKgorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBjb20uaWJtLnJibS5ndWk7CisKK2ltcG9ydCBqYXZhLmF3dC4qOworaW1wb3J0IGphdmEuYXd0LmV2ZW50Lio7CisKK2ltcG9ydCBqYXZheC5zd2luZy4qOworaW1wb3J0IGphdmF4LnN3aW5nLnRhYmxlLio7CisKK2ltcG9ydCBjb20uaWJtLnJibS4qOworCisvKioKKyAqIFRoZSBjbGFzcyB1c2VkIHRvIGRpc3BsYXkgdW50cmFuc2xhdGVkIGl0ZW1zCisgKi8KK2NsYXNzIFJCVW50cmFuc2xhdGVkUGFuZWwgZXh0ZW5kcyBKUGFuZWwgeworCVJCTWFuYWdlciByYm07CisJQnVuZGxlIGJ1bmRsZTsKKwlSQk1hbmFnZXJHVUkgbGlzdGVuZXI7CisJCisJLy8gQ29tcG9uZW50cyAtIEJ1bmRsZQorCUpMYWJlbCAgICAgICAgICAgICAgICAgICAgICBqTGFiZWxVbnRyYW5zVGl0bGU7CisJVW50cmFuc2xhdGVkSXRlbXNUYWJsZU1vZGVsIHVudHJhbnNUYWJsZU1vZGVsOworCUpUYWJsZSAgICAgICAgICAgICAgICAgICAgICBqVGFibGVVbnRyYW5zOworCUpTY3JvbGxQYW5lICAgICAgICAgICAgICAgICBqU2Nyb2xsUGFuZVVudHJhbnNUYWJsZTsKKwkKKwkvLyBDb21wb25lbnRzIC0gQnVuZGxlIE1hbmFnZXIKKwlCb3ggICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkJveDsKKwlKUGFuZWwgICAgICAgICAgICAgICAgICAgICAgbWFpblBhbmVsc1tdOworCUpMYWJlbCAgICAgICAgICAgICAgICAgICAgICBudW1VbnRyYW5zTGFiZWxzW107CisJSlNjcm9sbFBhbmUgICAgICAgICAgICAgICAgIG1haW5TY3JvbGw7CisJSlNjcm9sbFBhbmUgICAgICAgICAgICAgICAgIGxpc3RTY3JvbGxzW107CisJSkxpc3QgICAgICAgICAgICAgICAgICAgICAgIHVudHJhbnNMaXN0c1tdOworCQorCXB1YmxpYyBSQlVudHJhbnNsYXRlZFBhbmVsKFJCTWFuYWdlckdVSSBndWkpIHsKKwkJc3VwZXIoKTsKKwkJbGlzdGVuZXIgPSBndWk7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldEJ1bmRsZShCdW5kbGUgYikgeworCQlyYm0gPSBudWxsOworCQlpZiAoYnVuZGxlID09IG51bGwpIHsKKwkJCWJ1bmRsZSA9IGI7CisJCQlpbml0Q29tcG9uZW50cygpOworCQl9IGVsc2UgaWYgKGJ1bmRsZSAhPSBiKSB7CisJCQlidW5kbGUgPSBiOworCQkJdXBkYXRlQ29tcG9uZW50cygpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHNldE1hbmFnZXIoUkJNYW5hZ2VyIG0pIHsKKwkJYnVuZGxlID0gbnVsbDsKKwkJaWYgKHJibSA9PSBudWxsKSB7CisJCQlyYm0gPSBtOworCQkJaW5pdENvbXBvbmVudHMoKTsKKwkJfSBlbHNlIGlmIChyYm0gIT0gbSkgeworCQkJcmJtID0gbTsKKwkJCXVwZGF0ZUNvbXBvbmVudHMoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgdm9pZCByZW1vdmVFbGVtZW50cygpIHsKKwkJaWYgKHJibSAhPSBudWxsIHx8IGJ1bmRsZSAhPSBudWxsKSB7CisJCQlyYm0gPSBudWxsOworCQkJYnVuZGxlID0gbnVsbDsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0KKwl9CQorCQorCS8vIE1hcmtzIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBhcyB0cmFuc2xhdGVkIGFuZCByZW1vdmVzIGZyb20gdGhpcyB2aWV3CisJcHJpdmF0ZSB2b2lkIG1hcmtTZWxlY3RlZFJlc291cmNlQXNUcmFuc2xhdGVkKCkgeworCQlpZiAoYnVuZGxlID09IG51bGwpIHJldHVybjsKKwkJaWYgKGpUYWJsZVVudHJhbnMuZ2V0U2VsZWN0ZWRSb3coKSA8IDApIHJldHVybjsKKwkJaWYgKGpUYWJsZVVudHJhbnMuZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCkgeworCQkJaW50IHJvdyA9IGpUYWJsZVVudHJhbnMuZ2V0U2VsZWN0ZWRSb3coKTsKKwkJCVVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCBtb2RlbCA9IChVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwpalRhYmxlVW50cmFucy5nZXRNb2RlbCgpOworCQkJQnVuZGxlSXRlbSBpdGVtID0gbW9kZWwuZ2V0QnVuZGxlSXRlbShyb3cpOworCQkJaXRlbS5zZXRUcmFuc2xhdGVkKHRydWUpOworCQkJbW9kZWwudXBkYXRlKCk7CisJCX0KKwl9CisJCisJLy8gUmVtb3ZlcyB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgZnJvbSB0aGUgcmVzb3VyY2UgZmlsZQorCXByaXZhdGUgdm9pZCBkZWxldGVTZWxlY3RlZFJlc291cmNlKCkgeworCQlpZiAoYnVuZGxlID09IG51bGwpIHJldHVybjsKKwkJaWYgKGpUYWJsZVVudHJhbnMuZ2V0U2VsZWN0ZWRSb3coKSA8IDApIHJldHVybjsKKwkJaWYgKGpUYWJsZVVudHJhbnMuZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIFVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCkgeworCQkJaW50IHJvdyA9IGpUYWJsZVVudHJhbnMuZ2V0U2VsZWN0ZWRSb3coKTsKKwkJCVVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCBtb2RlbCA9IChVbnRyYW5zbGF0ZWRJdGVtc1RhYmxlTW9kZWwpalRhYmxlVW50cmFucy5nZXRNb2RlbCgpOworCQkJQnVuZGxlSXRlbSBpdGVtID0gbW9kZWwuZ2V0QnVuZGxlSXRlbShyb3cpOworCQkJaWYgKGl0ZW0uZ2V0UGFyZW50R3JvdXAoKSAhPSBudWxsICYmIGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKSAhPSBudWxsKSB7CisJCQkJQnVuZGxlIGJ1bmRsZSA9IGl0ZW0uZ2V0UGFyZW50R3JvdXAoKS5nZXRQYXJlbnRCdW5kbGUoKTsKKwkJCQlidW5kbGUucmVtb3ZlSXRlbShpdGVtLmdldEtleSgpKTsKKwkJCX0KKwkJCW1vZGVsLnVwZGF0ZSgpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBwcmludFRhYmxlKCkgeworCQlQcmludEpvYiBwam9iID0gZ2V0VG9vbGtpdCgpLmdldFByaW50Sm9iKG5ldyBGcmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW50aW5nIFRlc3QiLCBudWxsKTsKKworICAgICAgICBpZiAocGpvYiAhPSBudWxsKSB7ICAgICAgICAgIAorICAgICAgICAgICAgR3JhcGhpY3MgcGcgPSBwam9iLmdldEdyYXBoaWNzKCk7CisKKyAgICAgICAgICAgIGlmIChwZyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy9qVGFibGVVbnRyYW5zLnByaW50KHBnKTsKKyAgICAgICAgICAgICAgICBEaW1lbnNpb24gcGFnZV9kaW0gPSBwam9iLmdldFBhZ2VEaW1lbnNpb24oKTsKKwkJCQlwZy5zZXRDb2xvcihDb2xvci5ibGFjayk7CisJCQkJaW50IHlfb2ZmID0gNTA7CisJCQkJaW50IHhfb2ZmID0gMzA7CisJCQkJVGFibGVNb2RlbCBtb2RlbCA9IGpUYWJsZVVudHJhbnMuZ2V0TW9kZWwoKTsKKwkJCQlwZy5zZXRGb250KG5ldyBGb250KCJTYW5zU2VyaWYiLCBGb250LkJPTEQsIDE0KSk7CisJCQkJcGcuZHJhd1N0cmluZygiVW50cmFuc2xhdGVkIEl0ZW1zOiAgICAgICBQYWdlIDEiLCB4X29mZiwgeV9vZmYpOworCQkJCXBnLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsIEZvbnQuUExBSU4sIDEwKSk7CisJCQkJCisJCQkJZm9yIChpbnQgaT0wIDsgaSA8IG1vZGVsLmdldFJvd0NvdW50KCk7IGkrKykgeworCQkJCQlpZiAoeV9vZmYgPCBwYWdlX2RpbS5oZWlnaHQgLSA1MCkgeworCQkJCQkJeV9vZmYgKz0gMTU7CisJCQkJCQlTdHJpbmcga2V5ID0gbW9kZWwuZ2V0VmFsdWVBdChpLCAwKS50b1N0cmluZygpOworCQkJCQkJU3RyaW5nIHRyYW5zbGF0aW9uID0gbW9kZWwuZ2V0VmFsdWVBdChpLDEpLnRvU3RyaW5nKCk7CisJCQkJCQlwZy5kcmF3U3RyaW5nKGtleSArICIgLT4gIiArIHRyYW5zbGF0aW9uLCB4X29mZiwgeV9vZmYpOworCQkJCQl9CisJCQkJfQorCQkJCXBnLmRpc3Bvc2UoKTsgLy8gZmx1c2ggcGFnZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcGpvYi5lbmQoKTsKKworICAgICAgICB9CisJfQorCQorCXB1YmxpYyB2b2lkIGluaXRDb21wb25lbnRzKCkgeworCQkvLyBJbml0aWFsaXplIGNvbXBvbmVudHMKKwkJaWYgKGJ1bmRsZSAhPSBudWxsKSB7CisJCQlqTGFiZWxVbnRyYW5zVGl0bGUgICAgICAgID0gbmV3IEpMYWJlbChidW5kbGUubmFtZSk7CisJCQl1bnRyYW5zVGFibGVNb2RlbCAgICAgICAgID0gbmV3IFVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbChidW5kbGUpOworCQkJalRhYmxlVW50cmFucyAgICAgICAgICAgICA9IG5ldyBKVGFibGUodW50cmFuc1RhYmxlTW9kZWwpOworCQkJalNjcm9sbFBhbmVVbnRyYW5zVGFibGUgICA9IG5ldyBKU2Nyb2xsUGFuZShqVGFibGVVbnRyYW5zKTsKKwkKKwkJCS8vIExvd2VyIHBhbmVsIGNvbXBvbmVudHMKKwkJCUpQYW5lbCAgbG93ZXJQYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwkJCUpCdXR0b24gZGVsZXRlQnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fZGVsZXRlX3Jlc291cmNlIikpOworCQkJSkJ1dHRvbiB0cmFuc2xhdGVCdXR0b24gPSBuZXcgSkJ1dHRvbihSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImJ1dHRvbl9tYXJrX3RyYW5zbGF0ZWQiKSk7CisJCQlKQnV0dG9uIHByaW50QnV0dG9uID0gbmV3IEpCdXR0b24oUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJidXR0b25fcHJpbnRfdGFibGUiKSk7CisJCQkKKwkJCWRlbGV0ZUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZV90cmlnZ2VyIikpKTsKKwkJCXRyYW5zbGF0ZUJ1dHRvbi5zZXRNbmVtb25pYyhSQk1hbmFnZXJNZW51QmFyLmdldEtleUV2ZW50S2V5KFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX21hcmtfdHJhbnNsYXRlZF90cmlnZ2VyIikpKTsKKwkJCWxvd2VyUGFuZWwuc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2V1bnRyYW5zX3NlbGVjdGVkX3Jlc291cmNlc19vcHRpb25zIikpKTsKKwkJCWxvd2VyUGFuZWwuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsMikpOworCQkJCisJCQlqVGFibGVVbnRyYW5zLnNldFNlbGVjdGlvbk1vZGUoTGlzdFNlbGVjdGlvbk1vZGVsLlNJTkdMRV9TRUxFQ1RJT04pOworCQkJalRhYmxlVW50cmFucy5hZGRNb3VzZUxpc3RlbmVyKGxpc3RlbmVyKTsKKwkJCQorCQkJakxhYmVsVW50cmFuc1RpdGxlLnNldEZvbnQobmV3IEZvbnQoIlNhbnNTZXJpZiIsRm9udC5QTEFJTiwxOCkpOworCQkJCisJCQkvLyBBZGQgYWN0aW9uIGxpc3RlbmVycworCQkJZGVsZXRlQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJZGVsZXRlU2VsZWN0ZWRSZXNvdXJjZSgpOworCQkJCX0KKwkJCX0pOworCQkJdHJhbnNsYXRlQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJbWFya1NlbGVjdGVkUmVzb3VyY2VBc1RyYW5zbGF0ZWQoKTsKKwkJCQl9CisJCQl9KTsKKwkJCXByaW50QnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQkJcHJpbnRUYWJsZSgpOworCQkJCX0KKwkJCX0pOwkKKwkJCQorCQkJcmVtb3ZlQWxsKCk7CisJCQlzZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCWxvd2VyUGFuZWwuYWRkKGRlbGV0ZUJ1dHRvbik7CisJCQlsb3dlclBhbmVsLmFkZCh0cmFuc2xhdGVCdXR0b24pOworCQkJLy9sb3dlclBhbmVsLmFkZChwcmludEJ1dHRvbik7CisJCQlhZGQoakxhYmVsVW50cmFuc1RpdGxlLCBCb3JkZXJMYXlvdXQuTk9SVEgpOworCQkJYWRkKGpTY3JvbGxQYW5lVW50cmFuc1RhYmxlLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJCWFkZChsb3dlclBhbmVsLCBCb3JkZXJMYXlvdXQuU09VVEgpOworCQl9IGVsc2UgaWYgKHJibSAhPSBudWxsKSB7CisJCQkKKwkJCWludCBsYW5nQ291bnQgPSAwOyAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGxhbmd1YWdlcyB3aXRoIHVudHJhbnNsYXRlZCBJdGVtcworCQkJZm9yIChpbnQgaT0wOyBpIDwgcmJtLmdldEJ1bmRsZXMoKS5zaXplKCk7IGkrKykgeworCQkJCUJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKXJibS5nZXRCdW5kbGVzKCkuZWxlbWVudEF0KGkpOworCQkJCWlmIChidW5kbGUuZ2V0VW50cmFuc2xhdGVkSXRlbXNTaXplKCkgPiAwKSBsYW5nQ291bnQrKzsKKwkJCX0KKwkJCQorCQkJLy8gSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50cworCQkJbWFpblBhbmVscyAgICAgICAgICAgICAgID0gbmV3IEpQYW5lbFtsYW5nQ291bnRdOworCQkJbnVtVW50cmFuc0xhYmVscyAgICAgICAgID0gbmV3IEpMYWJlbFtsYW5nQ291bnRdOworCQkJbGlzdFNjcm9sbHMgICAgICAgICAgICAgID0gbmV3IEpTY3JvbGxQYW5lW2xhbmdDb3VudF07CisJCQl1bnRyYW5zTGlzdHMgICAgICAgICAgICAgPSBuZXcgSkxpc3RbbGFuZ0NvdW50XTsKKwkJCQorCQkJbWFpbkJveCAgICAgICAgICAgICAgICAgID0gbmV3IEJveChCb3hMYXlvdXQuWV9BWElTKTsKKwkJCW1haW5TY3JvbGwgICAgICAgICAgICAgICA9IG5ldyBKU2Nyb2xsUGFuZShtYWluQm94KTsKKwkJCWpMYWJlbFVudHJhbnNUaXRsZSAgICAgICA9IG5ldyBKTGFiZWwocmJtLmdldEJhc2VDbGFzcygpICsgIiAtICIgKyBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInVudHJhbnNsYXRlZF9pdGVtcyIpKTsKKwkJCQorCQkJLy8gU2V0IGNvbXBvbmVudCBwcm9wZXJ0aWVzCisJCQlqTGFiZWxVbnRyYW5zVGl0bGUuc2V0Rm9udChuZXcgRm9udCgiU2Fuc1NlcmlmIixGb250LlBMQUlOLDE4KSk7CisJCQltYWluQm94LmFkZChqTGFiZWxVbnRyYW5zVGl0bGUpOworCQkJCisJCQlpbnQgY291bnQgPSAwOworCQkJZm9yIChpbnQgaT0wOyBpIDwgcmJtLmdldEJ1bmRsZXMoKS5zaXplKCk7IGkrKykgeworCQkJCUJ1bmRsZSBidW5kbGUgPSAoQnVuZGxlKXJibS5nZXRCdW5kbGVzKCkuZWxlbWVudEF0KGkpOworCQkJCWlmIChidW5kbGUuZ2V0VW50cmFuc2xhdGVkSXRlbXNTaXplKCkgPiAwKSB7CisJCQkJCW1haW5QYW5lbHNbY291bnRdID0gbmV3IEpQYW5lbCgpOworCQkJCQltYWluUGFuZWxzW2NvdW50XS5zZXRMYXlvdXQobmV3IEJvcmRlckxheW91dCgpKTsKKwkJCQkJbnVtVW50cmFuc0xhYmVsc1tjb3VudF0gPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXVudHJhbnNfdW50cmFuc19jb3VudCIpICsKKwkJCQkJCQkJCQkJCQkJIGJ1bmRsZS5nZXRVbnRyYW5zbGF0ZWRJdGVtc1NpemUoKSk7CisJCQkJCS8vIFRPRE86IEltcGxlbWVudCBhIExpc3QgTW9kZWwgZm9yIHRoaXMgbGlzdCwgcmVtb3ZlIHVzZSBvZiB2ZWN0b3IKKwkJCQkJdW50cmFuc0xpc3RzW2NvdW50XSA9IG5ldyBKTGlzdChidW5kbGUuZ2V0VW50cmFuc2xhdGVkSXRlbXNBc1ZlY3RvcigpKTsKKwkJCQkJbGlzdFNjcm9sbHNbY291bnRdID0gbmV3IEpTY3JvbGxQYW5lKHVudHJhbnNMaXN0c1tjb3VudF0pOworCQkJCQkKKwkJCQkJbWFpblBhbmVsc1tjb3VudF0uc2V0Qm9yZGVyKEJvcmRlckZhY3RvcnkuY3JlYXRlVGl0bGVkQm9yZGVyKAorCQkJCQkJCQkJCQkJQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCVJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYmFzZXVudHJhbnNfZmlsZSIpICsgIiAiICsgYnVuZGxlLnRvU3RyaW5nKCkpKTsKKwkJCQkJbWFpblBhbmVsc1tjb3VudF0ucmVtb3ZlQWxsKCk7CisJCQkJCW1haW5QYW5lbHNbY291bnRdLmFkZChudW1VbnRyYW5zTGFiZWxzW2NvdW50XSwgQm9yZGVyTGF5b3V0Lk5PUlRIKTsKKwkJCQkJbWFpblBhbmVsc1tjb3VudF0uYWRkKGxpc3RTY3JvbGxzW2NvdW50XSwgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisJCQkJCQorCQkJCQltYWluQm94LmFkZChCb3guY3JlYXRlVmVydGljYWxTdHJ1dCg1KSk7CisJCQkJCW1haW5Cb3guYWRkKG1haW5QYW5lbHNbY291bnRdKTsKKwkJCQkJCisJCQkJCWNvdW50Kys7CisJCQkJfQorCQkJfQorCQkJbWFpblNjcm9sbC5zZXRQcmVmZXJyZWRTaXplKGdldFNpemUoKSk7CisJCQlyZW1vdmVBbGwoKTsKKwkJCWFkZChtYWluU2Nyb2xsKTsKKwkJfSBlbHNlIHsKKwkJCXJlbW92ZUFsbCgpOworCQl9CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZUNvbXBvbmVudHMoKSB7CisJCS8vIFVwZGF0ZSBjb21wb25lbnRzCisJCWlmIChidW5kbGUgIT0gbnVsbCkgeworCQkJakxhYmVsVW50cmFuc1RpdGxlLnNldFRleHQoYnVuZGxlLm5hbWUpOworCQkJdW50cmFuc1RhYmxlTW9kZWwuc2V0QnVuZGxlKGJ1bmRsZSk7CisJCX0gZWxzZSBpZiAocmJtICE9IG51bGwpIHsKKwkJCWluaXRDb21wb25lbnRzKCk7CisJCX0gZWxzZSB7CisJCQlyZW1vdmVBbGwoKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBUaGUgdGFibGUgbW9kZWwgZm9yIHVudHJhbnNsYXRlZCBJdGVtcworICovCisKK2NsYXNzIFVudHJhbnNsYXRlZEl0ZW1zVGFibGVNb2RlbCBleHRlbmRzIEFic3RyYWN0VGFibGVNb2RlbCB7CisJQnVuZGxlIGJ1bmRsZTsKKwkKKwlwdWJsaWMgVW50cmFuc2xhdGVkSXRlbXNUYWJsZU1vZGVsKEJ1bmRsZSBidW5kbGUpIHsKKwkJdGhpcy5idW5kbGUgPSBidW5kbGU7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldEJ1bmRsZShCdW5kbGUgYnVuZGxlKSB7CisJCXRoaXMuYnVuZGxlID0gYnVuZGxlOworCQl1cGRhdGUoKTsKKwl9CisJCisJcHVibGljIGludCBnZXRDb2x1bW5Db3VudCgpIHsgcmV0dXJuIDM7IH0KKwkJICAgIAorCXB1YmxpYyBpbnQgZ2V0Um93Q291bnQoKSB7CisJCXJldHVybiBidW5kbGUuZ2V0VW50cmFuc2xhdGVkSXRlbXNTaXplKCk7CisJfQorCQorCXB1YmxpYyBPYmplY3QgZ2V0VmFsdWVBdChpbnQgcm93LCBpbnQgY29sKSB7CisJCUJ1bmRsZUl0ZW0gaXRlbSA9IGJ1bmRsZS5nZXRVbnRyYW5zbGF0ZWRJdGVtKHJvdyk7CisJCVN0cmluZyByZXRTdHIgPSBudWxsOworCQkJCQorCQlzd2l0Y2goY29sKSB7CisJCWNhc2UgMDoKKwkJCXJldFN0ciA9IGl0ZW0uZ2V0S2V5KCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmV0U3RyID0gaXRlbS5nZXRUcmFuc2xhdGlvbigpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXJldFN0ciA9IChpdGVtLmdldFBhcmVudEdyb3VwKCkgPT0gbnVsbCA/ICIiIDogaXRlbS5nZXRQYXJlbnRHcm91cCgpLmdldE5hbWUoKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldFN0ciA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigidGFibGVfY2VsbF9lcnJvciIpOworCQl9CisJCQkJCisJCXJldHVybiByZXRTdHI7CisJfQorCQkJCisJcHVibGljIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpIHsKKwkJaWYgKGNvbCA9PSAwKSByZXR1cm4gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJsYW5ndWFnZXVudHJhbnNfY29sdW1uX2tleSIpOworCQllbHNlIGlmIChjb2wgPT0gMSkgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl90cmFuc2xhdGlvbiIpOworCQllbHNlIGlmIChjb2wgPT0gMikgcmV0dXJuIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigibGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl9ncm91cCIpOworCQllbHNlIHJldHVybiBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oInRhYmxlX2NvbHVtbl9lcnJvciIpOworCX0KKwkKKwlwdWJsaWMgQnVuZGxlSXRlbSBnZXRCdW5kbGVJdGVtKGludCByb3cpIHsKKwkJcmV0dXJuIGJ1bmRsZS5nZXRVbnRyYW5zbGF0ZWRJdGVtKHJvdyk7CisJfQorCQorCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKKwkJZmlyZVRhYmxlRGF0YUNoYW5nZWQoKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUmVzb3VyY2VDcmVhdGlvbkRpYWxvZy5qYXZhIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9SZXNvdXJjZUNyZWF0aW9uRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhMmI3OQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvUmVzb3VyY2VDcmVhdGlvbkRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgICoKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2UgY29tLmlibS5yYm0uZ3VpOworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC4qOworCitpbXBvcnQgamF2YXguc3dpbmcuKjsKKworaW1wb3J0IGNvbS5pYm0ucmJtLio7CisKKy8qKgorICogQSBkaWFsb2cgZm9yIGNyZWF0aW5nIG5ldyBSZXNvdXJjZSBGaWxlcworICovCitjbGFzcyBSZXNvdXJjZUNyZWF0aW9uRGlhbG9nIGV4dGVuZHMgSkRpYWxvZyB7CisJUkJNYW5hZ2VyIHJibTsKKwlSQk1hbmFnZXJHVUkgZ3VpOworCQorCS8vIENvbXBvbmVudHMKKwlCb3ggbWFpbkJveCA9IG5ldyBCb3goQm94TGF5b3V0LllfQVhJUyk7CisJQm94IGluZm9Cb3ggPSBuZXcgQm94KEJveExheW91dC5ZX0FYSVMpOworCUpQYW5lbCBpbmZvUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJSlBhbmVsIGluZm9UaXRsZVBhbmVsID0gbmV3IEpQYW5lbCgpOworCUpQYW5lbCBpbmZvQ29tbWVudFBhbmVsID0gbmV3IEpQYW5lbCgpOworCUpQYW5lbCBpbmZvTWFuYWdlclBhbmVsID0gbmV3IEpQYW5lbCgpOworCUpQYW5lbCBsYW5nUGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJSlBhbmVsIGNvdW5QYW5lbCA9IG5ldyBKUGFuZWwoKTsKKwlKUGFuZWwgdmFyaVBhbmVsID0gbmV3IEpQYW5lbCgpOworCUpQYW5lbCBidXR0UGFuZWwgPSBuZXcgSlBhbmVsKCk7CisJCisJSkxhYmVsIGluc3RydWN0aW9uc0xhYmVsID0gbmV3IEpMYWJlbCgiIik7CisJSkxhYmVsIHRpdGxlTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2ZpbGVfdGl0bGUiKSk7CisJSkxhYmVsIGNvbW1lbnRMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfZmlsZV9jb21tZW50IikpOworCUpMYWJlbCBtYW5hZ2VyTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2ZpbGVfbWFuYWdlciIpKTsKKwlKTGFiZWwgZW5jMUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19lbmNvZGluZyIpKTsKKwlKTGFiZWwgZW5jMkxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19lbmNvZGluZyIpKTsKKwlKTGFiZWwgZW5jM0xhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19lbmNvZGluZyIpKTsKKwlKTGFiZWwgbmFtMUxhYmVsID0gbmV3IEpMYWJlbChSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19uYW1lIikpOworCUpMYWJlbCBuYW0yTGFiZWwgPSBuZXcgSkxhYmVsKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX25hbWUiKSk7CisJSkxhYmVsIG5hbTNMYWJlbCA9IG5ldyBKTGFiZWwoUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfbmFtZSIpKTsKKwkKKwlKVGV4dEZpZWxkIHRpdGxlRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBjb21tZW50RmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBtYW5hZ2VyRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBlbmMxRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBlbmMyRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBlbmMzRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBuYW0xRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBuYW0yRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJSlRleHRGaWVsZCBuYW0zRmllbGQgPSBuZXcgSlRleHRGaWVsZCgiIik7CisJCisJSkNoZWNrQm94IGNvcHlDaGVja0JveCA9IG5ldyBKQ2hlY2tCb3goUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJkaWFsb2dfY2hlY2tib3hfY29weV9lbGVtZW50cyIpLCB0cnVlKTsKKwkKKwlKQnV0dG9uIGNyZWF0ZUJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NyZWF0ZSIpKTsKKwlKQnV0dG9uIGNhbmNlbEJ1dHRvbiA9IG5ldyBKQnV0dG9uKFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiYnV0dG9uX2NhbmNlbCIpKTsKKwkKKwlwdWJsaWMgUmVzb3VyY2VDcmVhdGlvbkRpYWxvZyhSQk1hbmFnZXIgcmJtLCBKRnJhbWUgZnJhbWUsIFN0cmluZyB0aXRsZSwgYm9vbGVhbiBtb2RhbCkgeworCQlzdXBlcihmcmFtZSwgdGl0bGUsIG1vZGFsKTsKKwkJdGhpcy5ndWkgPSAoUkJNYW5hZ2VyR1VJKWZyYW1lOworCQl0aGlzLnJibSA9IHJibTsKKwkJaW5pdENvbXBvbmVudHMoKTsKKwkJZW5hYmxlRXZlbnRzKEFXVEV2ZW50LktFWV9FVkVOVF9NQVNLKTsKKwl9CisJCisJcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0tleUV2ZW50KEtleUV2ZW50IGV2KSB7CisJCWlmIChldi5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuVktfRU5URVIpIHsKKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGNyZWF0ZVJlc291cmNlKCk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlTdHJpbmcgYWxlcnQgPSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yX2NyZWF0ZV9maWxlIikgKyAiICIgKworCQkJCQkJCSAgIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3JfdHJ5X2FnYWluX2ZpbGUiKTsKKwkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCX0gZWxzZSB7CisJCQkJc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJZGlzcG9zZSgpOworCQkJfQorCQl9IGVsc2UgaWYgKGV2LmdldEtleUNvZGUoKSA9PSBLZXlFdmVudC5WS19DQU5DRUwpIHsKKwkJCWNsb3NlV2luZG93KCk7CisJCX0KKwl9CisJCisJYm9vbGVhbiBjcmVhdGVSZXNvdXJjZSgpIHsKKwkJaWYgKHJibSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisJCVN0cmluZyBlbmNvZGluZyA9IGVuYzFGaWVsZC5nZXRUZXh0KCkudHJpbSgpOworCQlTdHJpbmcgZW5jMiA9IGVuYzJGaWVsZC5nZXRUZXh0KCkudHJpbSgpOworCQlpZiAoZW5jMiAhPSBudWxsICYmICFlbmMyLmVxdWFscygiIikpIGVuY29kaW5nICs9ICJfIiArIGVuYzI7CisJCVN0cmluZyBlbmMzID0gZW5jM0ZpZWxkLmdldFRleHQoKS50cmltKCk7CisJCWlmIChlbmMzICE9IG51bGwgJiYgIWVuYzMuZXF1YWxzKCIiKSkgZW5jb2RpbmcgKz0gIl8iICsgZW5jMzsKKwkJYm9vbGVhbiByZXQgPSByYm0uY3JlYXRlUmVzb3VyY2UodGl0bGVGaWVsZC5nZXRUZXh0KCkudHJpbSgpLCBjb21tZW50RmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwgbWFuYWdlckZpZWxkLmdldFRleHQoKS50cmltKCksCisJCQkJCQkJZW5jb2RpbmcsIG5hbTFGaWVsZC5nZXRUZXh0KCkudHJpbSgpLCBuYW0yRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwKKwkJCQkJCQluYW0zRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSwgY29weUNoZWNrQm94LmlzU2VsZWN0ZWQoKSk7CisJCWlmIChyZXQpIHsgCisJCQlndWkudXBkYXRlRGlzcGxheVRyZWUoKTsKKwkJCWd1aS51cGRhdGVQcm9qZWN0VHJlZSgpOworCQkJZ3VpLnVwZGF0ZVByb2plY3RQYW5lbHMoKTsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKwkKKwlwdWJsaWMgdm9pZCBpbml0Q29tcG9uZW50cygpeworCQkvLyBFcnJvciBjaGVjaworCQlpZiAocmJtID09IG51bGwpIHsKKwkJCVN0cmluZyBhbGVydCA9IFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZXJyb3Jfbm9fYnVuZGxlX2Zvcl9maWxlIik7CisJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyh0aGlzLCBhbGVydCwgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvciIpLCBKT3B0aW9uUGFuZS5FUlJPUl9NRVNTQUdFKTsKKwkJCWNsb3NlV2luZG93KCk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCS8vIEluaXRpYWxpemUgdmFsdWVzCisJCWludCB0ZW1wV2lkdGggPSAxNzU7CisJCURpbWVuc2lvbiBsYWJlbERpbSA9IG5ldyBEaW1lbnNpb24odGVtcFdpZHRoLCAzMCk7CisJCXRpdGxlTGFiZWwuc2V0UHJlZmVycmVkU2l6ZShsYWJlbERpbSk7CisJCWNvbW1lbnRMYWJlbC5zZXRQcmVmZXJyZWRTaXplKGxhYmVsRGltKTsKKwkJbWFuYWdlckxhYmVsLnNldFByZWZlcnJlZFNpemUobGFiZWxEaW0pOworCQkKKwkJaW5mb1BhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX2ZpbGVfaW5mbyIpKSk7CisJCWxhbmdQYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19sYW5ndWFnZSIpKSk7CisJCWNvdW5QYW5lbC5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVUaXRsZWRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVFdGNoZWRCb3JkZXIoKSwKKwkJCQkJCQkJCQkJCQkJCSBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImRpYWxvZ19jb3VudHJ5IikpKTsKKwkJdmFyaVBhbmVsLnNldEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZVRpdGxlZEJvcmRlcihCb3JkZXJGYWN0b3J5LmNyZWF0ZUV0Y2hlZEJvcmRlcigpLAorCQkJCQkJCQkJCQkJCQkJIFJlc291cmNlcy5nZXRUcmFuc2xhdGlvbigiZGlhbG9nX3ZhcmlhbnQiKSkpOworCQkKKwkJdGl0bGVGaWVsZC5zZXRDb2x1bW5zKDMwKTsKKwkJY29tbWVudEZpZWxkLnNldENvbHVtbnMoMzApOworCQltYW5hZ2VyRmllbGQuc2V0Q29sdW1ucygzMCk7CisJCQorCQllbmMxRmllbGQuc2V0Q29sdW1ucygzKTsKKwkJZW5jMkZpZWxkLnNldENvbHVtbnMoMyk7CisJCWVuYzNGaWVsZC5zZXRDb2x1bW5zKDMpOworCQluYW0xRmllbGQuc2V0Q29sdW1ucygyMCk7CisJCW5hbTJGaWVsZC5zZXRDb2x1bW5zKDIwKTsKKwkJbmFtM0ZpZWxkLnNldENvbHVtbnMoMjApOworCQkKKwkJLy8gU2V0IHVwIHRoZSBjb21wb25lbnRzCisJCWluZm9UaXRsZVBhbmVsLmFkZCh0aXRsZUxhYmVsKTsgaW5mb1RpdGxlUGFuZWwuYWRkKHRpdGxlRmllbGQpOworCQlpbmZvQ29tbWVudFBhbmVsLmFkZChjb21tZW50TGFiZWwpOyBpbmZvQ29tbWVudFBhbmVsLmFkZChjb21tZW50RmllbGQpOworCQlpbmZvTWFuYWdlclBhbmVsLmFkZChtYW5hZ2VyTGFiZWwpOyBpbmZvTWFuYWdlclBhbmVsLmFkZChtYW5hZ2VyRmllbGQpOworCQlpbmZvQm94LmFkZChpbmZvVGl0bGVQYW5lbCk7CisJCWluZm9Cb3guYWRkKGluZm9Db21tZW50UGFuZWwpOworCQlpbmZvQm94LmFkZChpbmZvTWFuYWdlclBhbmVsKTsKKwkJaW5mb1BhbmVsLmFkZChpbmZvQm94KTsKKwkJCisJCWxhbmdQYW5lbC5hZGQoZW5jMUxhYmVsKTsgbGFuZ1BhbmVsLmFkZChlbmMxRmllbGQpOyBsYW5nUGFuZWwuYWRkKG5hbTFMYWJlbCk7IGxhbmdQYW5lbC5hZGQobmFtMUZpZWxkKTsKKwkJY291blBhbmVsLmFkZChlbmMyTGFiZWwpOyBjb3VuUGFuZWwuYWRkKGVuYzJGaWVsZCk7IGNvdW5QYW5lbC5hZGQobmFtMkxhYmVsKTsgY291blBhbmVsLmFkZChuYW0yRmllbGQpOworCQl2YXJpUGFuZWwuYWRkKGVuYzNMYWJlbCk7IHZhcmlQYW5lbC5hZGQoZW5jM0ZpZWxkKTsgdmFyaVBhbmVsLmFkZChuYW0zTGFiZWwpOyB2YXJpUGFuZWwuYWRkKG5hbTNGaWVsZCk7CisJCQorCQlidXR0UGFuZWwuYWRkKGNyZWF0ZUJ1dHRvbik7IGJ1dHRQYW5lbC5hZGQoY2FuY2VsQnV0dG9uKTsKKwkJCisJCS8vIEFkZCB0aGUgYXBwcm9wcmlhdGUgbGlzdGVuZXJzCisJCWNhbmNlbEJ1dHRvbi5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZXYpIHsKKwkJCQlKRGlhbG9nIGRpYWxvZyA9IChKRGlhbG9nKSgoSkJ1dHRvbilldi5nZXRTb3VyY2UoKSkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCk7CisJCQkJZGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworCQkJCWRpYWxvZy5kaXNwb3NlKCk7CisJCQl9CisJCX0pOworCQkKKwkJY3JlYXRlQnV0dG9uLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBldikgeworCQkJCVJlc291cmNlQ3JlYXRpb25EaWFsb2cgZGlhbG9nID0KKwkJCQkJKFJlc291cmNlQ3JlYXRpb25EaWFsb2cpKChKQnV0dG9uKWV2LmdldFNvdXJjZSgpKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKTsKKwkJCQlib29sZWFuIHN1Y2Nlc3MgPSBkaWFsb2cuY3JlYXRlUmVzb3VyY2UoKTsKKwkJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQkJU3RyaW5nIGFsZXJ0ID0gUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl9jcmVhdGVfZmlsZSIpICsgIiAiICsKKwkJCQkJCQkJICAgUmVzb3VyY2VzLmdldFRyYW5zbGF0aW9uKCJlcnJvcl90cnlfYWdhaW5fZmlsZSIpOworCQkJCQlKT3B0aW9uUGFuZS5zaG93TWVzc2FnZURpYWxvZyhkaWFsb2csIGFsZXJ0LCBSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oImVycm9yIiksIEpPcHRpb25QYW5lLkVSUk9SX01FU1NBR0UpOworCQkJCX0gZWxzZSB7CisJCQkJCWRpYWxvZy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkJZGlhbG9nLmRpc3Bvc2UoKTsKKwkJCQl9CisJCQl9CisJCX0pOworCQlnZXRSb290UGFuZSgpLnNldERlZmF1bHRCdXR0b24oY3JlYXRlQnV0dG9uKTsKKwkJCisJCS8vIENvbXBsZXRlIHRoZSBjb21wb25lbnQgbGF5b3V0CisJCW1haW5Cb3gucmVtb3ZlQWxsKCk7CisJCS8vbWFpbkJveC5hZGQoaW5zdHJ1Y3Rpb25zTGFiZWwpOworCQltYWluQm94LmFkZChpbmZvUGFuZWwpOworCQltYWluQm94LmFkZChsYW5nUGFuZWwpOworCQltYWluQm94LmFkZChjb3VuUGFuZWwpOworCQltYWluQm94LmFkZCh2YXJpUGFuZWwpOworCQltYWluQm94LmFkZChjb3B5Q2hlY2tCb3gpOworCQltYWluQm94LmFkZChidXR0UGFuZWwpOworCQkKKwkJc2V0TG9jYXRpb24obmV3IGphdmEuYXd0LlBvaW50KDUwLCA1MCkpOworCQlnZXRDb250ZW50UGFuZSgpLmFkZChtYWluQm94LCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKwkJdmFsaWRhdGVUcmVlKCk7CisJCXBhY2soKTsKKwkJc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy9zZXRSZXNpemFibGUoZmFsc2UpOworCX0KKwkKKwl2b2lkIGNsb3NlV2luZG93KCkgeworCQlzZXRWaXNpYmxlKGZhbHNlKTsKKwkJZGlzcG9zZSgpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvVGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMjdmZAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL1RpdGxlTG9nb190cmFuc3BhcmVudC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6MmFhMjIwYzJhNzMyMjMwYzFlZjI3OTI5OTY2N2NlN2I2OTg0NWQ4YWJkY2JlZWVjZTJmNTQ4ZDU0ZmVhZmI1OQorc2l6ZSAxNjE5CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fYnVuZGxlLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9idW5kbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZmUzOGEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fYnVuZGxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjowZDAyMjY3NTQzMDk2YmE1ZDJkZGMzNDk0ZDQ4ODc2OWNmYzEzOTY5ODYwMDQ5NDkzZDMzOTkyNzhjYjQyNGFiCitzaXplIDEwODYKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9jb3VudHJ5LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9jb3VudHJ5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGE3YWNkCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2NvdW50cnkuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjJmY2U4ZWU3OTYwOTZjYmMxYTZhZjZjNGMxY2UxYTM1NzEyZDNhNWFlZTRlZDU3YjljNGUzZDQ2NzdkZmU5ZGYKK3NpemUgNTc2CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fZmlsZS5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fZmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkOGZlZgotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9maWxlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo5MTJmOTQ2ZTdjYjRkYzI5ZWM1MmZlMDg5NTk1MTFiMWJiZjU4MmJiNDNlMjUyN2EyNDM5ZjEzN2IzMWZiMzBiCitzaXplIDI4NQpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2dyb3VwLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9ncm91cC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3MWRhZAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9ncm91cC5naWYKQEAgLTAsMCArMSwzIEBACit2ZXJzaW9uIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tL3NwZWMvdjEKK29pZCBzaGEyNTY6NmY2ZDIxMmY0NmRhMGVhMjA3NmNkYmNkMjIzNzZiM2U3MzgwNmNhNDFmYzNjZGU5NTU1NjAwODlkZTJkNTAwNAorc2l6ZSAzNjkKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9pdGVtLmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9pdGVtLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWZlNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2l0ZW0uZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OjgwYWFhMDk4YjVmNzZhYjIyNTM0ZTNlZTE0YzgwY2MyOWZmNDYyZjkxNGMxZTg3ZmU1MzY4MDg3OTg4MGZhOWIKK3NpemUgMjAwCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fbGFuZ3VhZ2UuZ2lmIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2xhbmd1YWdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWEyZWUxCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX2xhbmd1YWdlLmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1NjpjZGZkNThjOGFmOWMwYmI4M2IzZmFkNjhlOTBjOGQ4ZjBjYWJhMjhmNTcxZWQyYWM2MmQ2YThjM2M0ODYwMTlmCitzaXplIDEwNzgKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9wcm9qZWN0LmdpZiBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl9wcm9qZWN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODEyMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2d1aS9pbWFnZXMvdHJlZV9pY29uX3Byb2plY3QuZ2lmCkBAIC0wLDAgKzEsMyBAQAordmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxCitvaWQgc2hhMjU2OmIxYTkxZDNlZTc5MmIxZDE5YjVlMzRjMGNmMzIwN2I1ZjBiNzQ1ZmI1NTkxYzJjYjU2Y2ExZWFkNGQ5MDVhN2MKK3NpemUgMjkxCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fdmFyaWFudC5naWYgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vZ3VpL2ltYWdlcy90cmVlX2ljb25fdmFyaWFudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMmI0MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9ndWkvaW1hZ2VzL3RyZWVfaWNvbl92YXJpYW50LmdpZgpAQCAtMCwwICsxLDMgQEAKK3ZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MQorb2lkIHNoYTI1Njo0ZmVkNmE0ODk4MjI4ZmRjZjk3YTk4MmZmNDNhNzkwMTQ5Mjk5YjdjYTkzZjJmNDJiNDNlNGU0ZWI1OGRlNjc5CitzaXplIDQ1MApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2luc3RhbGwuYmF0IGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL2luc3RhbGwuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmMzcwMTEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vaW5zdGFsbC5iYXQKQEAgLTAsMCArMSw2NCBAQAorQGVjaG8gb2ZmCisKK3JlbSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorcmVtICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAqCityZW0gKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK3JlbSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitjYWxsIGNvbXBpbGUuYmF0IC1PCisKK2VjaG8gKiBNYWtpbmcgRGlyZWN0b3JpZXMKKworbWtkaXIgemlwCitjZCB6aXAKK21rZGlyIGxpYgorbWtkaXIgZG9jcworY2QgZG9jcworbWtkaXIgSW1hZ2VzCitjZCBJbWFnZXMKK21rZGlyIFNjcmVlbnNob3RzCitjZCAuLgorbWtkaXIgVHV0b3JpYWwKK21rZGlyIFZpZXdzCitjZCAuLgorbWtkaXIgUmVwb3J0cworY2QgLi4KKworZWNobyAqIENvcHlpbmcgRmlsZXMKKworZWNobyAqKiBDb3B5aW5nIEJhdGNoIEZpbGVzIGFuZCBQcm9wZXJ0aWVzCisKK2NvcHkgUkJNYW5hZ2VyLmphciB6aXAKK2NvcHkgUkJSZXBvcnRlci5iYXQgemlwCitjb3B5IHJibWFuYWdlcl9zY2FubmVyLnhtbCB6aXAKK2NvcHkgcmVzb3VyY2VzXHByZWZlcmVuY2VzLnByb3BlcnRpZXMgemlwCithdHRyaWIgLXIgemlwL3ByZWZlcmVuY2VzLnByb3BlcnRpZXMKKworZWNobyAqKiBDb3B5aW5nIERvY3VtZW50YXRpb24KKworY2QgZG9jcworY29weSAqLmh0bWwgLi5cemlwXGRvY3NcCitjZCBJbWFnZXMKK2NvcHkgKi5naWYgLi5cLi5cemlwXGRvY3NcSW1hZ2VzXAorY29weSAqLmpwZyAuLlwuLlx6aXBcZG9jc1xJbWFnZXNcCitjZCBTY3JlZW5zaG90cworY29weSAqLmdpZiAuLlwuLlwuLlx6aXBcZG9jc1xJbWFnZXNcU2NyZWVuc2hvdHNcCitjb3B5ICouanBnIC4uXC4uXC4uXHppcFxkb2NzXEltYWdlc1xTY3JlZW5zaG90c1wKK2NkIC4uXC4uXFR1dG9yaWFsCitjb3B5ICouaHRtbCAuLlwuLlx6aXBcZG9jc1xUdXRvcmlhbFwKK2NkIC4uXFZpZXdzCitjb3B5ICouaHRtbCAuLlwuLlx6aXBcZG9jc1xWaWV3c1wKK2NkIC4uXC4uCisKK2VjaG8gKiogQ29weWluZyBKYXIgRmlsZXMKKworY2QgbGliCitjb3B5ICouamFyIC4uXHppcFxsaWJcCitjZCAuLgorCitlY2hvICoqIENvcHlpbmcgTGljZW5zZQorY29weSAuLlwuLlwuLlxsaWNlbnNlLmh0bWwgemlwCisKK0BlY2hvICogRGlyZWN0b3J5IGNyZWF0ZWQ6IHppcAorQGVjaG8gKiogRG9uJ3QgZm9yZ2V0IHRvIG1vZGlmeSBwcmVmZXJlbmNlcy5wcm9wZXJ0aWVzCitwYXVzZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9tYW5pZmVzdC5zdHViIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL21hbmlmZXN0LnN0dWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2NzQyOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9tYW5pZmVzdC5zdHViCkBAIC0wLDAgKzEsMTIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorU3BlY2lmaWNhdGlvbi1UaXRsZTogUmVzb3VyY2UgQnVuZGxlIE1hbmFnZXIKK1NwZWNpZmljYXRpb24tVmVyc2lvbjogMC43LjEKK1NwZWNpZmljYXRpb24tVmVuZG9yOiBJQk0gQ29ycG9yYXRpb24KK0ltcGxlbWVudGF0aW9uLVRpdGxlOiBSZXNvdXJjZSBCdW5kbGUgTWFuYWdlcgorSW1wbGVtZW50YXRpb24tVmVyc2lvbjogMC43LjEKK0ltcGxlbWVudGF0aW9uLVZlbmRvcjogSUJNIENvcnBvcmF0aW9uCitJbXBsZW1lbnRhdGlvbi1WZW5kb3ItSWQ6IGNvbS5pYm0KK01haW4tQ2xhc3M6IGNvbS5pYm0ucmJtLlJCTWFuYWdlcgorQ2xhc3MtUGF0aDogbGliL3hlcmNlcy5qYXIKKworTmFtZTogY29tL2libS9yYm0KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9wcmVmZXJlbmNlcy5wcm9wZXJ0aWVzIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3ByZWZlcmVuY2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjZmU4MAotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9wcmVmZXJlbmNlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzMgQEAKKyNSQk1hbmFnZXIgUHJlZmVyZW5jZXMKKyNGcmkgTWF5IDEwIDA4OjU3OjE5IFBEVCAyMDAyCityZXBvcnRlcl9mb3JtYXRfaHRtbF9maWxlPXJlcG9ydC5odG1sCit1c2VybmFtZT1Vbmtub3duCityZXBvcnRlcl9mb3JtYXRfdGV4dF9kZXRhaWw9SGlnaAorcmVwb3J0ZXJfZm9ybWF0X3htbF9kZXRhaWw9SGlnaAorcmVwb3J0ZXJfZm9ybWF0X2htdGxfZW5hYmxlZD1ZZXMKK3JlcG9ydGVyX2VuYWJsZWQ9WWVzCityZXBvcnRlcl9mb3JtYXRfeG1sX2ZpbGU9cmVwb3J0LnhtbAorcmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9ob3VyPTEKK3JlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWxfdmFsdWU9MQorcmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbF91bml0cz1Ib3VycworcmVwb3J0ZXJfcGVyZm9ybV9zY2FuPVllcworcmVwb3J0ZXJfZm9ybWF0X3RleHRfZmlsZT1yZXBvcnQudHh0CityZXBvcnRlcl9mb3JtYXRfeG1sX2VuYWJsZWQ9WWVzCityZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX2RheT1TYXR1cmRheQorbG9jYWxlPWVuCityZXBvcnRlcl9pbnRlcnZhbD1TZXF1ZW50aWFsCityZWNlbnRmaWxlbG9jMz0KK3JlY2VudGZpbGVsb2MyPQorcmVjZW50ZmlsZWxvYzE9CityZWNlbnRmaWxlbG9jMD0KK3JlcG9ydGVyX3NjYW5fZmlsZT0uL3JibWFuYWdlcl9zY2FubmVyLnhtbAorcmVwb3J0ZXJfZm9ybWF0X2h0bWxfZW5hYmxlZD1ZZXMKK3JlY2VudGZpbGVpZDM9CityZWNlbnRmaWxlaWQyPQorcmVjZW50ZmlsZWlkMT0KK3JlY2VudGZpbGVpZDA9CityZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX21pbnV0ZT0wMAorcmVwb3J0ZXJfZm9ybWF0X3RleHRfZW5hYmxlZD1ZZXMKK3JlcG9ydGVyX2Jhc2VfY2xhc3NfZmlsZT0KK3JlcG9ydGVyX291dHB1dF9kaXJlY3Rvcnk9CityZXBvcnRlcl9mb3JtYXRfaHRtbF9kZXRhaWw9SGlnaApkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3JibWFuYWdlcl9zY2FubmVyLnhtbCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yYm1hbmFnZXJfc2Nhbm5lci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkYWIyOQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yYm1hbmFnZXJfc2Nhbm5lci54bWwKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PiAKKzxSQkZpbGVTY2FubmVyIG5hbWU9IlJCTWFuYWdlciBTY2FubmVyIiBmaWxlbmFtZT0icmJtYW5hZ2VyX3NjYW5uZXIueG1sIj4KKwk8RmlsZVJ1bGVzPgorCQk8IS0tICBGaWxlUnVsZXMgY2FuIGhhdmUgYXR0cmlidXRlcyBzdGFydHNfd2l0aCwgZW5kc193aXRoLCBhbmQgY29udGFpbnMgLS0+IAorCQk8RmlsZVJ1bGUgbmFtZT0iSmF2YSBGaWxlIiBlbmRzX3dpdGg9Ii5qYXZhIiAvPiAKKwkJPEZpbGVSdWxlIG5hbWU9IlhTTCBGaWxlIiBlbmRzX3dpdGg9Ii54c2wiIC8+IAorCTwvRmlsZVJ1bGVzPgorCTxQYXJzZVJ1bGVzPgorCQk8IS0tICBQYXJzZVJ1bGVzIGNhbiBoYXZlIGF0dHJpYnV0ZXMgZm9sbG93cyBhbmQgcHJlY2VkZXMgLS0+IAorCQk8UGFyc2VSdWxlIG5hbWU9IkphdmEgc3RhdGljIHJlc291cmNlIiBmb2xsb3dzPSJSZXNvdXJjZXMuZ2V0VHJhbnNsYXRpb24oJnF1b3Q7IiBwcmVjZWRlcz0iJnF1b3Q7IiAvPgorCTwvUGFyc2VSdWxlcz4KKwk8U2Nhbj4KKwkJPERpcmVjdG9yeSBsb2NhdGlvbj0iLiIgcmVjdXJzZV9kaXJlY3Rvcmllcz0idHJ1ZSI+CisJCQk8UnVsZXM+CisJCQkJPEFwcGx5RmlsZVJ1bGUgbmFtZT0iSmF2YSBGaWxlIj4KKwkJCQkJPEFwcGx5UGFyc2VSdWxlIG5hbWU9IkphdmEgc3RhdGljIHJlc291cmNlIiAvPgorCQkJCTwvQXBwbHlGaWxlUnVsZT4KKwkJCTwvUnVsZXM+CisJCTwvRGlyZWN0b3J5PgorCTwvU2Nhbj4KKzwvUkJGaWxlU2Nhbm5lcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVhZG1lLnR4dCBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOGYxZTgKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVhZG1lLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgUkJNYW5hZ2VyIChSZXNvdXJjZSBCdW5kbGUgTWFuYWdlcikKKworVG8gcnVuIHRoZSBSQk1hbmFnZXIuamFyLCBkb3VibGUgY2xpY2sgb24gUkJNYW5hZ2VyLmphciBpbiBXaW5kb3dzCisJb3IgcnVuICJqYXZhIC1qYXIgUkJNYW5hZ2VyLmphciIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorVG8gY3JlYXRlIHRoZSBSQk1hbmFnZXIuamFyIGZpbGUsIHVzZTogY29tcGlsZS5iYXQKK1RvIGNyZWF0ZSB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgdXNlOiBpbnN0YWxsLmJhdAorCitIZWxwIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBjb250YWluZWQgaW4gdGhlIGRvY3MgZGlyZWN0b3J5LgorCitUaGlzIHZlcnNpb24gb2YgdGhlIFJCTWFuYWdlciByZXF1aXJlcyB2ZXJzaW9uIDMuMS4wIG9mIHRoZQoreGVyY2VzLmphciBmaWxlIHRvIGNvbXBpbGUsIGJ1dCBkb2VzIG5vdCByZXF1aXJlIGl0IGZvciBiYXNpYworZnVuY3Rpb25hbGl0eS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlci5wcm9wZXJ0aWVzIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXIucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGNiNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXIucHJvcGVydGllcwpAQCAtMCwwICsxLDEyMTMgQEAKKyMgQGZpbGUgICAgICAgICAgUmVzb3VyY2UgQnVuZGxlIE1hbmFnZXIgQmFzZSBDbGFzcworIyBAZmlsZUVuY29kaW5nICAKKyMgQGZpbGVMYW5ndWFnZSAgRW5nbGlzaAorIyBAZmlsZUNvdW50cnkgICBVLlMuCisjIEBmaWxlVmFyaWFudCAgIAorIyBAZmlsZU1hbmFnZXIgICBKYXJlZCBKYWNrc29uCisjIEBmaWxlQ29tbWVudCAgIFRoaXMgaXMgdGhlIEJhc2UgQ2xhc3Mgb2YgdGhlIHRyYW5zbGF0aW9uIHJlc291cmNlIGJ1bmRsZSB1c2VkIGJ5IHRoaXMgYXBwbGljYXRpb24KKworCisjCisjIEBncm91cCBCYXNlIENsYXNzIEdyb3VwcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb24gSXRlbXMgZm9yIHRoZSBCYXNlIENsYXNzIEdyb3VwIHRhYmJlZCBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9jb21tZW50PUdyb3VwXCBDb21tZW50XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9uYW1lPUdyb3VwXCBOYW1lXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9vcHRpb25zPVJlc291cmNlXCBHcm91cFwgT3B0aW9ucworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorYmFzZWdyb3VwX2l0ZW1fb3B0aW9ucz1SZXNvdXJjZVwgSXRlbVwgT3B0aW9ucworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2ZpbGVfZ3JvdXA9UmVzb3VyY2VcIEZpbGVzCisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgU3RhdGlzdGljcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgQWxsIHRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBhcHBlYXJpbmcgb24gdGhlIHN0YXRpc3RpY3MgcGFuZSBmb3IgdGhlIGJhc2UgY2xhc3MKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2R1cGxpY2F0ZXNfY291bnQ9TnVtYmVyXCBvZlwgRHVwbGljYXRlXCBSZXNvdXJjZVwgS2V5c1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZmlsZV9jb3VudD1OdW1iZXJcIG9mXCBSZXNvdXJjZVwgRmlsZXNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2dyb3VwX2NvdW50PU51bWJlclwgb2ZcIFJlc291cmNlXCBHcm91cHNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2dyb3VwX2dyb3VwPVJlc291cmNlXCBHcm91cHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19pdGVtX2NvdW50PU51bWJlclwgb2ZcIFJlc291cmNlXCBJdGVtc1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfaXRlbV9ncm91cD1SZXNvdXJjZVwgSXRlbXMKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBVbnRyYW5zbGF0ZWQgSXRlbXMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBhcHBlYXJpbmcgb24gdGhlIEJhc2UgQ2xhc3MgVW50cmFuc2xhdGVkIEl0ZW1zIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIGZpbGUgYmVpbmcgdmlld2VkCitiYXNldW50cmFuc19maWxlPUZpbGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiByZXNvdXJjZSBpdGVtcyBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZmlsZQorYmFzZXVudHJhbnNfdW50cmFuc19jb3VudD1OdW1iZXJcIG9mXCBVbnRyYW5zbGF0ZWRcIEl0ZW1zXDoKKworIworIyBAZ3JvdXAgQnV0dG9uIE5hbWVzCisjCisjIEBncm91cENvbW1lbnQgVGhlIG5hbWVzIGRpc3BsYXllZCBvbiB0aGUgdmFyaW91cyBidXR0b25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGxhbmd1YWdlIGZpbGUKK2J1dHRvbl9hZGRfZmlsZT1BZGRcIGFcIE5ld1wgUmVzb3VyY2VcIEZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fYWRkX2ZpbGVfdHJpZ2dlcj1uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorYnV0dG9uX2FkZF9ncm91cD1BZGRcIGFcIE5ld1wgUmVzb3VyY2VcIEdyb3VwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9ncm91cF90cmlnZ2VyPWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIHRyYW5zbGF0aW9uIGl0ZW0KK2J1dHRvbl9hZGRfcmVzb3VyY2U9QWRkXCBhXCBOZXdcIFJlc291cmNlXCBJdGVtCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9yZXNvdXJjZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIGEgQG1vZGlmaWVyIGEKKyMgQGNvbW1lbnQgR2VuZXJpYyBidXR0b24gZm9yIGNhbmNlbGluZyBhY3Rpb25zCitidXR0b25fY2FuY2VsPUNhbmNlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgYSBjaG9pY2Ugb3Igc2VsZWN0aW9uIG9wdGlvbgorYnV0dG9uX2Nob29zZT1DaG9vc2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY2hvb3NlX3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgZ2VuZXJpYyBjcmVhdGlvbiBvZiBncm91cHMsIGl0ZW1zLCBmaWxlcywgZXRjLgorYnV0dG9uX2NyZWF0ZT1DcmVhdGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIGEgQG1vZGlmaWVyIGEKKyMgQGNvbW1lbnQgRm9yIGNyZWF0aW9uIG9mIGEgcmVzb3VyY2UgZ3JvdXAKK2J1dHRvbl9jcmVhdGVfZ3JvdXA9Q3JlYXRlXCBHcm91cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfZ3JvdXBfdHJpZ2dlcj1nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3IgY3JlYXRpbmcgYW4gaXRlbSB0aGVuIGNvbnRpbnVpbmcgY3JlYXRpbmcgbW9yZSBpdGVtcworYnV0dG9uX2NyZWF0ZV9tb3JlPUNyZWF0ZVwgJlwgQ29udGludWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTAyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX21vcmVfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBhIEBtb2RpZmllciBhCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSByZXNvdXJjZSB0cmFuc2xhdGlvbiBpdGVtCitidXR0b25fY3JlYXRlX3Jlc291cmNlPUNyZWF0ZVwgUmVzb3VyY2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX3Jlc291cmNlX3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBhIEBtb2RpZmllciBhCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcmVtb3ZpbmcgYSBncm91cCBhbmQgaXRzIGNvbnRlbnRzCitidXR0b25fZGVsZXRlX2dyb3VwPURlbGV0ZVwgR3JvdXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIGEgQG1vZGlmaWVyIGEKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBwZXJtYW5lbnRseSByZW1vdmluZyBhIHJlc291cmNlIGZyb20gdGhlIGJ1bmRsZQorYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZT1EZWxldGVcIFJlc291cmNlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZV90cmlnZ2VyPWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBHZW5lcmljIGVkaXQgYnV0dG9uCitidXR0b25fZWRpdD1FZGl0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBhIEBtb2RpZmllciBhCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgZWRpdGluZyBncm91cCBuYW1lIGFuZCBjb21tZW50CitidXR0b25fZWRpdF9ncm91cD1FZGl0XCBHcm91cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgYSBAbW9kaWZpZXIgYQorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgcmVzb3VyY2UgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBrZXkgYW5kIHRyYW5zbGF0aW9uCitidXR0b25fZWRpdF9yZXNvdXJjZT1FZGl0XCBSZXNvdXJjZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9lZGl0X3Jlc291cmNlX3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIGluaXRpYXRpbmcgYW4gaW1wb3J0IG9mIHJlc291cmNlcyBmcm9tIGFuIGFsdGVybmF0ZSBzb3VyY2UKK2J1dHRvbl9pbXBvcnQ9SW1wb3J0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2ltcG9ydF90cmlnZ2VyPWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIGFsbG93cyBhIHNlbGVjdGVkIHJlc291cmNlIHRvIGJlIG1hcmtlZCBhcyB0cmFuc2xhdGVkIHdpdGhvdXQgZnVydGhlciBlZGl0aW5nCitidXR0b25fbWFya190cmFuc2xhdGVkPU1hcmtcIFJlc291cmNlXCBhc1wgVHJhbnNsYXRlZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9tYXJrX3RyYW5zbGF0ZWRfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgYWRkaW5nIHRoZSBjdXJyZW50IHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgbWFpbiBhcHBsaWNhdGlvbiB0byB0aGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfYWRkPUFkZFwgQ3VycmVudFwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfYWRkX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNsb3NpbmcgdGhlIHByb2plY3Qgd2luZG93CitidXR0b25fcHJvamVjdF9jbG9zZT1DbG9zZVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X2Nsb3NlX3RyaWdnZXI9YworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CitidXR0b25fcHJvamVjdF9uZXc9TmV3XCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfbmV3X3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIG9wZW5pbmcgYSBwcm9qZWN0IGZpbGUKK2J1dHRvbl9wcm9qZWN0X29wZW49T3BlblwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X29wZW5fdHJpZ2dlcj1vCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcmVtb3ZpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfcmVtb3ZlPVJlbW92ZVwgU2VsZWN0aW9uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfcmVtb3ZlX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNhdXNpbmcgdGhlIHNlbGVjdGVkIHJlc291cmNlIGJ1bmRsZSB0byBiZSB0aGUgb25lIGJlaW5nIGVkaXRlZCBpbiB0aGUgbWFpbiBhcHBsaWNhdGlvbgorYnV0dG9uX3Byb2plY3Rfc2VsZWN0PUVkaXRcIFNlbGVjdGVkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3Rfc2VsZWN0X3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGVyZm9ybWluZyBhIGNvbXBsZXRlIHNlYXJjaAorYnV0dG9uX3NlYXJjaF9maW5kX2FsbD1GaW5kXCBBbGwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fc2VhcmNoX2ZpbmRfYWxsX3RyaWdnZXI9ZgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGVyZm9ybWluZyBjb21wbGV0ZSBzZWFyY2ggYW5kIHJlcGxhY2UKK2J1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGw9UmVwbGFjZVwgQWxsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3NlYXJjaF9yZXBsYWNlX2FsbF90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgdXBkYXRpbmcgaW5mb3JtYXRpb24KK2J1dHRvbl91cGRhdGU9VXBkYXRlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3VwZGF0ZV90cmlnZ2VyPXUKKworIworIyBAZ3JvdXAgRGlhbG9ncworIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9ucyB2YXJpb3VzIGRpYWxvZyBib3hlcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB3ZXRoZXIgb3Igbm90IGEgbmV3IGZpbGUgd2lsbCBiZSBwb3B1bGF0ZWQgZnJvbSB0aGUgZWxlbWVudHMgaW4gdGhlIGJhc2UgY2xhc3MKK2RpYWxvZ19jaGVja2JveF9jb3B5X2VsZW1lbnRzPUNvcHlcIGVudHJpZXNcIGZyb21cIHRoZVwgYmFzZVwgY2xhc3NcIHRvXCB0aGVcIG5ld1wgZmlsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEluZGljYXRvciBvZiB3ZXRoZXIgYW4gaXRlbSBpcyB0cmFuc2xhdGVkIG9yIG5vdAorZGlhbG9nX2NoZWNrYm94X3RyYW5zbGF0ZWQ9VHJhbnNsYXRlZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2NvbW1lbnQ9Q29tbWVudFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfY291bnRyeT1Db3VudHJ5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfY3JlYXRlZD1DcmVhdGVkXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19jcmVhdG9yPUNyZWF0ZWRcIEJ5XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAezF9IFRoZSBkYXRlCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiBpbnZvbHZlZAorIyBAY29tbWVudCBUaGUgZGF0ZSBhbmQgcGVyc29uIGFzc29jaWF0ZWQgd2l0aCBhIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBhbiBpdGVtCitkaWFsb2dfZGF0ZV9wZXJzb249ezB9XCBieVwgezF9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVmYXVsdF9jb21tZW50PURlZmF1bHRcIENvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2RlZmF1bHRfdHJhbnNsYXRpb249RGVmYXVsdFwgVHJhbnNsYXRpb25cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2RlbGV0ZV9maWxlPURlbGV0ZVwgYVwgUmVzb3VyY2VcIEZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfZ3JvdXA9RGVsZXRlXCBhXCBSZXNvdXJjZVwgR3JvdXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfaXRlbT1EZWxldGVcIGFcIFJlc291cmNlXCBJdGVtCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFdhcm5pbmcgZGlzcGxheWVkIHdoZW4gYSB1c2VyIGFza3MgZm9yIGEgZGVsZXRpb24gb2YgYSBmaWxlLiBQcm9tcHRzIGZvciAnWWVzJyBvciAnTm8nCitkaWFsb2dfZGVsZXRlX3dhcm5pbmc9V2FybmluZ1whXCBUaGVcIGRlbGV0aW9uXCBvcGVyYXRpb25cIGNhblwgbm9cIGJlXCB1bmRvbmUuXG5BcmVcIHlvdVwgc3VyZVwgeW91XCB3YW50XCB0b1wgY29udGludWU/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZW5jb2Rpbmc9RW5jb2RpbmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfY29tbWVudD1SZXNvdXJjZVwgRmlsZVwgQ29tbWVudFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb249QmFzZVwgQ2xhc3NcIFByb3BlcnR5XCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEZXNjcmlwdGlvbiBvZiBGaWxlIEZpbHRlciBmb3IgUkJSZXBvcnRlciBYTUwgc2NhbiBjb25maWd1cmF0aW9uIGZpbGVzCitkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb25fc2Nhbj1YTUxcIFJCUmVwb3J0ZXJcIFNjYW5cIEZpbGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9pbmZvPUZpbGVcIEluZm9ybWF0aW9uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9tYW5hZ2VyPVJlc291cmNlXCBNYW5hZ2VyXCBOYW1lXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX3RpdGxlPVJlc291cmNlXCBGaWxlXCBUaXRsZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfZ3JvdXA9R3JvdXBcIE5hbWVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2dyb3VwX2NvbW1lbnQ9R3JvdXBcIENvbW1lbnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2tleT1FbnRyeVwgS2V5XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19sYW5ndWFnZT1MYW5ndWFnZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX2xvb2t1cHM9TG9va3Vwc1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfbW9kaWZpZWQ9TGFzdFwgTW9kaWZpZWRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX21vZGlmaWVyPUxhc3RcIE1vZGlmaWVkXCBCeVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgYSBsYW5ndWFnZSwgY291bnRyeSwgb3IgdmFyaWFudCBvZiBhIGxhbmd1YWdlIGZpbGUKK2RpYWxvZ19uYW1lPU5hbWVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgYSBuYW1lIGZvciB0aGUgcmVzb3VyY2UgYnVuZGxlLCBiZWZvcmUgY3JlYXRpbmcgdGhhdCBidW5kbGUKK2RpYWxvZ19uZXdfYmFzZWNsYXNzPVBsZWFzZVwgZW50ZXJcIGFcIGJhc2VcIGNsYXNzXCBuYW1lXCBmb3JcIHRoZVwgbmV3XCByZXNvdXJjZVwgYnVuZGxlLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEaWFsb2cgcG9wdXAgd2luZG93IHRleHQgcHJvbXB0aW5nIHRoZSB1c2VyIGZvciB0aGUgbmFtZSBvZiBhIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CitkaWFsb2dfbmV3X3Byb2plY3Q9UGxlYXNlXCBlbnRlclwgYVwgdGl0bGVcIGZvclwgeW91clwgbmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEEgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzIG1ha2luZyBpdCB0aHJvdWdoIHRoZSBmaWx0ZXIgdXBvbiBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlCitkaWFsb2dfb3Blbl9maWxlX2ZpbHRlcj1CYXNlXCBDbGFzc1wgUHJvcGVydHlcIEZpbGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhpcyBpcyBhIHNlY3Rpb24gaGVhZGluZyBmb3Igc2V0dGluZyB0aGUgbG9jYWxlCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlPUxvY2FsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IExvY2FsZXMgY3VycmVudGx5IGRlZmluZWQgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMgZm9yIHRoZSBhcHBsaWNhdGlvbgorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9kZWZpbmVkPURlZmluZWRcIGZvclwgUkJNYW5hZ2VyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX2lzbz1JU09cIFN0YW5kYXJkc1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgTG9jYWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgSmF2YSBWaXJ0dWFsIE1hY2hpbmUKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfbWFjaGluZT1NYWNoaW5lXCBTdXBwb3J0ZWRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfd2FybmluZz1OT1RFXDpcIExvY2FsZVwgY2hhbmdlc1wgYXJlXCBub3RcIGFwcGxpZWRcIHVudGlsXCBhcHBsaWNhdGlvblwgaXNcIHJlc3RhcnRlZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX2xvb2thbmRmZWVsPUxvb2tcIEFuZFwgRmVlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfdXNlcm5hbWU9VXNlclwgTmFtZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERlc2NyaXB0b3IgdGhhdCBnb2VzIGludG8gR1VJIGZpbGUgY2hvb3NlcgorZGlhbG9nX3Byb2plY3RfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb249UkJNYW5hZ2VyXCBQcm9qZWN0XCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBGaWxlIEZpbHRlciBkZXNjcmlwdGlvbiBmb3IgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QgZmlsZXMKK2RpYWxvZ19wcm9qZWN0X2ZpbHRlcl9kZXNjcmlwdGlvbj1SZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIHRoYXQgbm8gcHJvamVjdCBpcyBvcGVuLCBwbGFjZWQgaW4gdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cgd2hlcmUgdGhlIHByb2plY3QgbmFtZSB3b3VsZCBub3JtYWxseSBnbworZGlhbG9nX3Byb2plY3Rfbm9uZV9zZWxlY3RlZD1Ob1wgQWN0aXZlXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHByb2plY3QKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSB3aW5kb3cgc2hvd2luZyBhbGwgdGhlIHJlc291cmNlIGJ1bmRsZXMgaW4gYSBwcm9qZWN0CitkaWFsb2dfcHJvamVjdF90aXRsZT1SZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0XDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFByb21wdHMgdGhlIHVzZXIgaWYgdGhleSB3b3VsZCBsaWtlIHRvIHNhdmUgY2hhbmdlcyBiZWZvcmUgZXhpdGluZworZGlhbG9nX3F1aXRfc2F2ZT1Xb3VsZFwgeW91XCBsaWtlXCB0b1wgc2F2ZVwgeW91clwgY2hhbmdlc1wgYmVmb3JlXCBxdWl0aW5nXCBSQk1hbmFnZXI/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEEgZ2VuZXJpYyBwcm9wbXB0IHRvIGFzayB0aGUgdXNlciBpZiB0aGV5IHdpc2ggdG8gc2F2ZSBjaGFuZ2VzCitkaWFsb2dfc2F2ZT1Xb3VsZFwgeW91XCBsaWtlXCB0b1wgc2F2ZVwgeW91clwgY2hhbmdlc1wgdG9cIHRoZVwgcmVzb3VyY2VcIGJ1bmRsZT8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19zZWFyY2hfb3B0aW9ucz1TZWFyY2hcIE9wdGlvbnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ19zZWFyY2hfcGFyYW09U2VhcmNoXCBGb3JcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSB0aXRsZSBvZiB0aGUgYWJvdXQgZGlhbG9nIGJveAorZGlhbG9nX3RpdGxlX2Fib3V0X3JibWFuYWdlcj1BYm91dFwgUkJNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMS0yMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBkaWFsb2cgcHJvbXB0aW5nIGZvciBkZWxldGlvbiBvZiBhbiBlbnRpcmUgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9kZWxldGVfZ3JvdXA9RGVsZXRlXCBSZXNvdXJjZVwgR3JvdXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIyIEBtb2RpZmllZCAyMDAxLTAxLTIyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgd2hlbiBwcm9tcHRpbmcgdG8gZGVsZXRlIGEgcmVzb3VyY2UKK2RpYWxvZ190aXRsZV9kZWxldGVfaXRlbT1EZWxldGVcIFJlc291cmNlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZWRpdF9ncm91cD1FZGl0XCBhXCBSZXNvdXJjZVwgR3JvdXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lZGl0X2l0ZW09RWRpdFwgYVwgUmVzb3VyY2VcIEl0ZW0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZXJyb3I9RXJyb3IKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lcnJvcl9jcmVhdGluZ19idW5kbGU9RXJyb3JcIENyZWF0aW5nXCBSZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMS0yMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSB3aGVuIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUgbm90IGNyZWF0ZWQgYnkgUkJNYW5hZ2VyCitkaWFsb2dfdGl0bGVfZXJyb3Jfbm90X3JibWFuYWdlcl9mb3JtYXQ9RXJyb3JcOlwgVW5yZWFkYWJsZVwgUmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaXRsZSBvbiBhIHdhcm5pbmcgZGlhbG9nIHRoYXQgSS9PIG1hbGZ1bmN0aW9uZWQgb3BlbmluZyBhIGZpbGUKK2RpYWxvZ190aXRsZV9lcnJvcl9vcGVuaW5nX2ZpbGU9RXJyb3JcIE9wZW5pbmdcIEZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIGZvciBhIGRpYWxvZyBib3ggZm9yIGVudGVyaW5nIHNwZWNpYWwgcGFyYW1ldGVycyBuZWVkZWQgdG8gZXhwb3J0IGEgcmVzb3VyY2UgYnVuZGxlIHRvIGphdmEgY2xhc3MgY29kZQorZGlhbG9nX3RpdGxlX2V4cG9ydF9qYXZhX29wdGlvbnM9RXhwb3J0XCBQYXJhbWV0ZXJzXDpcIEphdmFcIGNsYXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBhIGRpYWxvZyB3aXRoIGEgcHJvZ3Jlc3MgYmFyIGdvdmVybmluZyBpbXBvcnQgc3RhdHVzCitkaWFsb2dfdGl0bGVfaW1wb3J0X3Byb2dyZXNzPUltcG9ydFwgUHJvZ3Jlc3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgbmV3IGJ1bmRsZQorZGlhbG9nX3RpdGxlX25ld19idW5kbGU9Q3JlYXRlXCBhXCBOZXdcIFJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZmlsZQorZGlhbG9nX3RpdGxlX25ld19maWxlPUNyZWF0ZVwgYVwgTmV3XCBSZXNvdXJjZVwgRmlsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorZGlhbG9nX3RpdGxlX25ld19ncm91cD1DcmVhdGVcIGFcIE5ld1wgUmVzb3VyY2VcIEdyb3VwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIHJlc291cmNlCitkaWFsb2dfdGl0bGVfbmV3X2l0ZW09Q3JlYXRlXCBhXCBOZXdcIFJlc291cmNlXCBJdGVtCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRpdGxlIG9mIHRoZSBkaWFsb2cgYm94IHNob3dpbmcgd2hlbiBjcmVhdGluZyBhIG5ldyBwcm9qZWN0CitkaWFsb2dfdGl0bGVfbmV3X3Byb2plY3Q9TmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfcHJlZmVyZW5jZXM9UHJlZmVyZW5jZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaXRsZSBmb3IgY29uZmlybWluZyBleGl0IGZyb20gYXBwbGljYXRpb24KK2RpYWxvZ190aXRsZV9xdWl0PVF1aXRcIFJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX3NlYXJjaD1TZWFyY2gKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV91c2VyX25hbWU9RW50ZXJcIFVzZXJcIE5hbWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2RpYWxvZ190cmFuc2xhdGlvbj1UcmFuc2xhdGlvblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdXNlcl9uYW1lPVBsZWFzZVwgZW50ZXJcIHlvdXJcIG5hbWUuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdmFyaWFudD1WYXJpYW50CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfd2FybmluZ19kZWxldGVfZ3JvdXA9RGVsZXRpbmdcIHRoaXNcIGdyb3VwXCB3aWxsXCBjYXVzZVwgYWxsXCBpdGVtc1wgaW5cIHRoZVwgZ3JvdXBcIHRvXCBiZVwgcGVybWFuZW50bHlcIHJlbW92ZWQuXCBEb1wgeW91XCB3aXNoXCB0b1wgY29udGludWU/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitkaWFsb2dfd2FybmluZ19kZWxldGVfaXRlbT1EZWxldGluZ1wgdGhlXCByc291cmNlXCBpdGVtXCB3aWxsXCBjYXVzZVwgaXRcIHRvXCBiZVwgcGVybWFuZW50bHlcIHJlbW92ZWQuXCBEb1wgeW91XCB3aXNoXCB0b1wgY29udGludWU/CisKKyMKKyMgQGdyb3VwIEVycm9yIE1lc3NhZ2VzCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Vycm9yPUVycm9yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byBhZGQgYSByZXNvdXJjZSBidW5kbGUgdG8gYSBwcm9qZWN0LgorZXJyb3JfYWRkaW5nX3Byb2plY3RfYnVuZGxlPUFuXCBlcnJvclwgb2NjdXJyZWRcIHRyeWluZ1wgdG9cIGFkZFwgdGhlXCBSZXNvdXJjZVwgQnVuZGxlXCB5b3VcIHNlbGVjdGVkLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfYmFzZWNsYXNzX3doaXRlc3BhY2U9UmVzb3VyY2VcIG5hbWVzXCBjYW5cIG5vdFwgaGF2ZVwgYW55XCB3aGl0ZVwgc3BhY2VcIGNoYXJhY3RlcnNcIGluXCB0aGVtLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfYnVuZGxlX25vdF9jcmVhdGVkPU5vXCBSZXNvdXJjZVwgQnVuZGxlXCB3YXNcIGNyZWF0ZWQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl9jcmVhdGVfZmlsZT1BXCBwcm9ibGVtXCB3YXNcIGVuY291bnRlcmVkXCB0cnlpbmdcIHRvXCBjcmVhdGVcIHRoZVwgcmVzb3VyY2VcIGZpbGUuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl9jcmVhdGVfZ3JvdXA9QVwgcHJvYmxlbVwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgY3JlYXRlXCB0aGVcIGdyb3VwLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2l0ZW09QVwgcHJvYmxlbVwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgY3JlYXRlXCB0aGVcIGVudHJ5LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiBjcmVhdGluZyBhIHByb2plY3QKK2Vycm9yX2NyZWF0aW5nX3Byb2plY3Q9QW5cIGVycm9yXCB3YXNcIGVuY291bnRlcmVkXCB0cnlpbmdcIHRvXCBjcmVhdGVcIGFcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG1lc3NhZ2UgZnJvbSBhbiBJT0V4Y2VwdGlvbiB0aGF0IGlzIHRocm93bgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhIGZpbGUKK2Vycm9yX2RlbGV0aW5nPVRoZXJlXCB3YXNcIGFuXCBlcnJvclwgdHJ5aW5nXCB0b1wgZGVsZXRlXCB0aGVcIGZpbGVcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEFuIGVycm9yIHRoYXQgb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGRlbGV0ZSBhIGZpbGUsIGJ1dCB0aGUgdmlydHVhbCBtYWNoaW5lIGNhbiBub3QgZG8gc28KK2Vycm9yX2RlbGV0aW9uX25vdF9wb3NzaWJsZT1SQk1hbmFnZXJcIHdhc1wgdW5hYmxlXCB0b1wgZGVsZXRlXCB0aGVcIGZpbGUuXCBQZXJtaXNzaW9uXCBkZW5pZWQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSBmb3IgZXhwb3J0aW5nIHJlc291cmNlIGJ1bmRsZXMKK2Vycm9yX2V4cG9ydD1UaGVyZVwgaGFzXCBiZWVuXCBhblwgZXJyb3JcIGV4cG9ydGluZ1wgdGhlXCByZXNvdXJjZVwgYnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl9pbnRlcm5hbD1JbnRlcm5hbFwgRXJyb3IKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9maWxlPUFuXCBlcnJvclwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgbW9kaWZ5XCB0aGVcIHJlc291cmNlXCBmaWxlLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2dyb3VwPVRoZXJlXCB3YXNcIGFcIHByb2JsZW1cIHRyeWluZ1wgdG9cIG1vZGlmeVwgdGhpc1wgZ3JvdXAuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfaXRlbT1BblwgcHJvYmxlbVwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgbW9kaWZ5XCB0aGVcIGVudHJ5CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl9ub19idW5kbGVfZm9yX2ZpbGU9SW5cIG9yZGVyXCB0b1wgY3JlYXRlXCBhXCByZXNvdXJjZVwgZmlsZSxcIHlvdVwgbXVzdFwgZmlyc3RcIG9wZW5cIG9yXCBjcmVhdGVcIGFcIFJlc291cmNlXCBCdW5kbGUuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl9ub19idW5kbGVfZm9yX2dyb3VwPUluXCBvcmRlclwgdG9cIGNyZWF0ZVwgYVwgZ3JvdXAsXCB5b3VcIG11c3RcIGZpcnN0XCBvcGVuXCBvclwgY3JlYXRlXCBhXCBSZXNvdXJjZVwgQnVuZGxlLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGEgcmVzb3VyY2UsIHdpdGhvdXQgYW4gb3BlbiByZXNvdXJjZSBidW5kbGUKK2Vycm9yX25vX2J1bmRsZV9mb3JfaXRlbT1QbGVhc2VcIGNyZWF0ZVwgb3JcIG9wZW5cIGFcIHJlc291cmNlXCBidW5kbGVcIGJlZm9yZVwgYXR0ZW1wdGluZ1wgdG9cIGNyZWF0ZVwgYVwgcmVzb3VyY2VcIGl0ZW0uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorZXJyb3Jfbm9fa2V5X3JlcGxhY2U9UmVwbGFjZVwgZG9lc1wgbm90XCBmdW5jdGlvblwgZm9yXCBSZXNvdXJjZVwgS2V5cy5cIEFsbFwgb3RoZXJcIHJlcGxhY2VzXCB3aWxsXCBiZVwgcGVyZm9ybWVkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMS0yMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gdGhhdCBSQk1hbmFnZXIgY2FuIG5vdCByZWFkIHRoZSBmaWxlIGFzIGNyZWF0ZWQgYnkgUkJNYW5hZ2VyCitlcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdD1UaGVcIHNlbGVjdGVkXCByZXNvdXJjZVwgYnVuZGxlXCB3YXNcIG5vdFwgY3JlYXRlZFwgYnlcIFJCTWFuYWdlclwgb3JcIGhhc1wgYmVlblwgZGFtYWdlZC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHdvdWxkIG5vdCBvcGVuCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2Ugb2NjdXJpbmcgb24gYW4gSS9PIGVycm9yIHRyeWluZyB0byBvcGVuIGEgZmlsZQorZXJyb3Jfb3BlbmluZ19maWxlPUNvdWxkXCBub3RcIG9wZW5cIHRoZVwgZmlsZVwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gUkJNYW5hZ2VyIGVuY291bnRlcnMgYW4gZXJyb3Igd3JpdGluZyBwcmVmZXJlbmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0KK2Vycm9yX3ByZWZlcmVuY2VzX3NhdmU9VGhlcmVcIHdhc1wgYW5cIGVycm9yXCBhdHRlbXB0aW5nXCB0b1wgc2F2ZVwgeW91clwgcHJlZmVyZW5jZXMuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkCisjIEBjb21tZW50IEEgbWVzc2FnZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgd2hlbiBhbiBlcnJvciBvY2N1cnMgaW4gc2F2aW5nIHRoZSByZXNvdXJjZSBidW5kbGUKK2Vycm9yX3NhdmluZz1UaGVyZVwgd2FzXCBhblwgZXJyb3JcIHNhdmluZ1wgdGhlXCByZXNvdXJjZVwgYnVuZGxlXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiBzYXZpbmcgYSBwcm9qZWN0CitlcnJvcl9zYXZpbmdfcHJvamVjdD1BblwgZXJyb3JcIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIHNhdmVcIHRoZVwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIyIEBtb2RpZmllZCAyMDAxLTAxLTIyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU3VnZ2VzdCB0cnlpbmcgdG8gaW1wb3J0IHRoZSByZXNvdXJjZSBidW5kbGUgaW5zdGVhZCBvZiBvcGVuaW5nIGl0LgorZXJyb3Jfc3VnZ2VzdF9pbXBvcnRfcHJvcGVydGllcz1UcnlcIGltcG9ydGluZ1wgdGhlXCByZXNvdXJjZVwgYnVuZGxlXCBpbnN0ZWFkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCitlcnJvcl90cnlfYWdhaW5fZmlsZT1QbGVhc2VcIHRyeVwgYWdhaW5cIHdpdGhcIGRpZmZlcmVudFwgZW5jb2RpbmdcIHZhbHVlcy4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2dyb3VwPVBsZWFzZVwgdHJ5XCBhZ2Fpblwgd2l0aFwgYVwgZGlmZmVyZW50XCBncm91cFwgbmFtZS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2l0ZW09UGxlYXNlXCB0cnlcIGFnYWluXCB3aXRoXCBhXCBkaWZmZXJlbnRcIGVudHJ5XCBrZXkuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFZhbHVlIGluc2VydGVkIGludG8gdGFibGUgY2VsbHMgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJlZAordGFibGVfY2VsbF9lcnJvcj0qRXJyb3IqCisKKyMKKyMgQGdyb3VwIEV4cG9ydAorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBkZWFsaW5nIHdpdGggZXhwb3J0IG9wdGlvbnMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBPcHRpb24gZm9yIHRoZSBwYXJhbWV0ZXIgZm9yIGNyZWF0ZWQgYSBwcm90ZWN0ZWQgY2xhc3MKK2V4cG9ydF9qYXZhX2NsYXNzX3Byb3RlY3RlZD1DcmVhdGVcIGFcIHByb3RlY3RlZFwgY2xhc3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgc2V0dGluZyB0aGUgY3JlYXRlZCBjbGFzcyBhcyBwdWJsaWMKK2V4cG9ydF9qYXZhX2NsYXNzX3B1YmxpYz1DcmVhdGVcIGFcIHB1YmxpY1wgY2xhc3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHByb3RlY3RlZCBtZXRob2RzIGluIHRoZSBqYXZhIGNsYXNzCitleHBvcnRfamF2YV9tZXRob2RzX3Byb3RlY3RlZD1DcmVhdGVcIHByb3RlY3RlZFwgbWV0aG9kcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBPcHRpb24gZm9yIHBhcmFtZXRlciBmb3IgY3JlYXRpbmcgcHVibGljIG1ldGhvZHMKK2V4cG9ydF9qYXZhX21ldGhvZHNfcHVibGljPUNyZWF0ZVwgcHVibGljXCBtZXRob2RzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRpdGxlIG9mIGEgY2hlY2sgYm94IGZvbGxvd2VkIGJ5IGEgdGV4dCBmaWVsZCBmb3Igc3BlY2lmeWluZyB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYSBwYWNrYWdlIGluIHRoZSBnZW5lcmF0ZWQgamF2YSBjbGFzcyBhbmQgd2hhdCB0aGUgcGFja2FnZSBzaG91bGQgYmUgY2FsbGVkCitleHBvcnRfamF2YV9wYWNrYWdlPVNwZWNpZnlcIGFcIHBhY2thZ2VcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUZXh0IHBsYWNlZCBpbiBhIGxhYmVsIGF0IHRoZSB0b3Agb2YgdGhlIGRpYWxvZyBib3ggZm9yIHNwZWNpZnlpbmcgcGFyYW1ldGVycyBjb25jZXJuaW5nIHRoZSBleHBvcnQgb2YgcmVzb3VyY2UgYnVuZGxlcyBpbnRvIGEgamF2YSBjbGFzcworZXhwb3J0X2phdmFfdGl0bGU9UGxlYXNlXCBzcGVjaWZ5XCB0aGVcIGZvbGxvd2luZ1wgcGFyYW1ldGVyc1wgZm9yXCB5b3VyXCBKYXZhXCBjbGFzc1w6CisKKyMKKyMgQGdyb3VwIEdlbmVyYWwKKyMKKyMgQGdyb3VwQ29tbWVudCBTb21lIGl0ZW1zIHRoYXQgYXJlIGNvbW1vbiBhY2Nyb3NzIGdyb3VwcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIGZpbGUgb3IgY2xhc3MgY29tcG9zZWQgb2YgdGhlIGRlZmF1bHQgdHJhbnNsYXRpb25zIGZvciB0aGUgYnVuZGxlCitiYXNlY2xhc3M9QmFzZVwgQ2xhc3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDA0LTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBHZW9yZ2UKKyMgQGNvbW1lbnQgVGhpcyBpcyB0aGUgbGVnYWwgY29weXJpZ2h0IG5vdGljZQorY29weXJpZ2h0PShDKVwgQ29weXJpZ2h0XCBJQk1cIENvcnAuXCAyMDAwLTIwMDRcIC1cIEFsbFwgUmlnaHRzXCBSZXNlcnZlZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZXJuZXJhbCB1c2UgZm9yIGZpbGUgZGlyZWN0b3JpZXMKK2RpcmVjdG9yeT1EaXJlY3RvcnkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2dyb3Vwcz1Hcm91cHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgZmlsZSBpbiB0aGUgJ0ltYWdlcycgZGlyZWN0b3J5IHRoYXQgcmVwcmVzZW50cyB0aGUgbG9nbyBzZWVuIGF0IHRoZSB0b3Agb2YgdGhlIGFwcGxpY2F0aW9uCitsb2dvX2ZpbGVuYW1lPVRpdGxlTG9nb190cmFuc3BhcmVudC5naWYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVHJlZSBub2RlIHRpdGxlIHdoZW4gdmlld2luZyBhIHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgcHJvamVjdCB2aWV3IHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIHByb2plY3QKK25vX3Byb2plY3Q9RGVmYXVsdFwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUcmVlIG5vZGUgdGl0bGUgZGVmYXVsdGVkIHRvIHdoZW4gbm8gcmVzb3VyY2UgYnVuZGxlIG9yIHByb2plY3QgaGFzIGJlZW4gb3BlbmVkIGJ5IHRoZSB1c2VyCitub19wcm9qZWN0X2J1bmRsZT1Ob1wgUHJvamVjdFwgb3JcIFJlc291cmNlXCBCdW5kbGVcIE9wZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUgdG9wIHRyZWUgbm9kZSB0aXRsZSwgd2hlbiBubyByZXNvdXJjZSBidW5kbGUgaGFzIGJlZW4gb3BlbmVkIG9yIGNyZWF0ZWQKK25vX3Jlc291cmNlX2J1bmRsZT1Ob1wgUmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAorbm9uZT1Ob25lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFByb2plY3QgdGFibGUgY29sdW1uIG5hbWUgLSBMb2NhdGlvbiBvZiBhIHJlc291cmNlIGJ1bmRsZQorcHJvamVjdF90YWJsZV9maWxlX2xvY2F0aW9uPUZpbGVcIExvY2F0aW9uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRhYmxlIENvbHVtbiBOYW1lIGZvciByZXNvdXJjZSBidW5kbGUgbmFtZQorcHJvamVjdF90YWJsZV9yZXNvdXJjZV9idW5kbGU9UmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEFuIGFiYnJldmlhdGVkIG5hbWUgb2YgdGhpcyBhcHBsaWNhdGlvbgorcmJtYW5hZ2VyPVJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDQtMDYtMjkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEdlb3JnZQorIyBAY29tbWVudCAKK3JibWFuYWdlcl9jb250YWN0PUF1dGhvcnNcOlwgSmFyZWRcIEphY2tzb25cICZcIEdlb3JnZVwgUmhvdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIGZ1bGwgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uCityZXNvdXJjZV9idW5kbGVfbWFuYWdlcj1SZXNvdXJjZVwgQnVuZGxlXCBNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgCit0YWJsZV9jb2x1bW5fZXJyb3I9VGFibGVcIENvbHVtblwgRXJyb3IKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAxLTAxLTIyIEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gQ291bnRyeSBJU08gY29kZQorIyBAY29tbWVudCBOb2RlIHRpdGxlLCB1bmRlciB3aGljaCBhbGwgZmlsZXMgb2YgdGhlIHNhbWUgY291bnRyeSwgbGFuZ3VhZ2UgcmVzaWRlCit0cmVlX2NvdW50cnlfbm9kZT1Db3VudHJ5XCBDb2RlXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEB7MH0gTGFuZ3VhZ2UgRW5jb2RpbmcKKyMgQGNvbW1lbnQgVGhlIG5vZGUgYmVsb3cgd2hpY2ggbGFuZ3VhZ2VzIG9mIG9uZSBlbmNvZGluZyBhcmUgZ3JvdXBlZAordHJlZV9sYW5ndWFnZV9ub2RlPUxhbmd1YWdlXCBDb2RlXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAordHJlZV92YXJpYW50X25vZGU9VmFyaWFudHNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBuYW1lIGFzc2lnbmVkIGFzIGEgdXNlciBuYW1lIHdoZW4gdGhlIHVzZXIgbmFtZSBpcyBub3Qgc3BlY2lmaWVkCit1bmtub3duX3VzZXI9VW5rbm93bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IAordW50aXRsZWQ9VW50aXRsZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK3VudHJhbnNsYXRlZF9pdGVtcz1VbnRyYW5zbGF0ZWRcIEl0ZW1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQHswfSBUaGUgdmVyc2lvbiBudW1iZXIKKyMgQGNvbW1lbnQgVGhlIHZlcnNpb24gb2YgdGhpcyBhcHBsaWNhdGlvbgordmVyc2lvbj1WZXJzaW9uXCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZ2VuZXJhbCB1c2UgV2FybmluZword2FybmluZz1XYXJuaW5nCisKKyMKKyMgQGdyb3VwIEltcG9ydAorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBkZWFsaW5nIHdpdGggaW1wb3J0IG9wdGlvbnMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZmlsZSBjaG9vc2VyIGZvciBjaG9vc2luZyBUTVggZmlsZXMKK2ltcG9ydF9UTVhfZmlsZV9kZXNjcmlwdGlvbj1UTVhcIEZpbGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gVE1YIFhNTCBmaWxlcworaW1wb3J0X1RNWF90aXRsZT1UTVhcIEZpbGVcIEltcG9ydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBUaXRsZSBmb3IgdGhlIGZpbGUgY2hvb3NlciBmb3IgY2hvb3NpbmcgWExJRkYgKC54bGYpIGZpbGVzCitpbXBvcnRfWExGX2ZpbGVfZGVzY3JpcHRpb249WExJRkZcIEZpbGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gWExJRkYgKC54bGYpIGZpbGVzCitpbXBvcnRfWExGX3RpdGxlPVhMSUZGXCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyBjb25mbGNpdHMgb24gYSBjYXNlIGJ5IGNhc2UgYmFzaXMKK2ltcG9ydF9jb25mbGljdF9wcm9tcHQ9UHJvbXB0XCBmb3JcIGVhY2hcIGNvbmZsaWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBzcGVjaWZ5aW5nIHdoZXRoZXIgYSBncm91cCBmb3VuZCBpbiB0aGUgdGFyZ2V0IGJ1dCBub3QgZm91bmQgaW4gdGhlIGFjdGl2ZSByZXNvdXJjZSBidW5kbGUgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSBvciBub3QKK2ltcG9ydF9kZWZhdWx0X2dyb3VwX2NyZWF0aW9uPUNyZWF0ZVwgZ3JvdXBzXCBub3RcIGV4aXN0aW5nXCBpblwgdGhlXCBjdXJyZW50XCBidW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0b2luIGZvciBtYXJraW5nIHRoZSBpbmNvbWluZyB2YWx1ZXMgYXMgdHJhbnNsYXRlZCBvciBub3QKK2ltcG9ydF9kZWZhdWx0X3RyYW5zbGF0ZWQ9TWFya1wgYXNcIHRyYW5zbGF0ZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIG9wdGlvbnMgc3BlY2lmeWluZyB0aGUgbWV0YSBkYXRhIHRvIGJlIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCByZXNvdXJjZXMgaWYgaXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgaW1wb3J0IHNvdXJjZQoraW1wb3J0X2RlZmF1bHRfdmFsdWVzPURlZmF1bHRcIFZhbHVlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSBsb2NhbGUgZW5jb2Rpbmcgb2YgdGhlIGZpbGUgaW4gcXVlc3Rpb24KKyMgQGNvbW1lbnQgSW5zdHJ1Y3Rpb25zIGZvciBwcm9tcHRpbmcgdGhlIHVzZXIgdG8gcmVzb2x2ZSBhIGNvbmZsaWN0IHdoZW4gaW1wb3J0aW5nIHJlc291cmNlcyBmcm9tIGEgbG9jYWxlIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgcmVzb3VyY2UgYnVuZGxlCitpbXBvcnRfZmlsZV9jb25mbGljdF9jaG9vc2U9VGhlXCBlbmNvZGluZ1wgezB9XCBkb2VzXCBub3RcIGV4aXN0LlwgU2VsZWN0XCBhblwgb3B0aW9uXCB0b1wgcmVzb2x2ZVwgb3JcIGNhbmNlbFwgdG9cIGlnbm9yZVwgdGhpc1wgY29uZmxpY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggYSBuZXcgZmlsZSBpcyBnZW5lcmF0ZWQsIGJ1dCBub3QgcG9wdWxhdGVkCitpbXBvcnRfZmlsZV9jb25mbGljdF9nZW5lcmF0ZV9lbXB0eT1HZW5lcmF0ZVwgYVwgbmV3LFwgZW1wdHlcIHJlc291cmNlXCBmaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkIGFuZCBwb3B1bGF0ZWQgd2l0aCBhbGwgdGhlIGV4aXN0aW5nIHJlc291cmNlcworaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfcG9wdWxhdGU9R2VuZXJhdGVcIGFcIG5ld1wgcmVzb3VyY2VcIGZpbGVcIGFuZFwgcG9wdWxhdGVcIGl0XCB3aXRoXCB0aGVcIGJhc2VcIGNsYXNzXCByZXNvdXJjZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBmaWxlIGNvbmZsaWN0cyBpbiB3aGljaCB0aGUgY29uZmxpY3RzIGFyZSBpZ25vcmVkCitpbXBvcnRfZmlsZV9jb25mbGljdF9pZ25vcmU9U2tpcFwgYW5kXCBpZ25vcmVcIGFsbFwgcmVzb3VyY2VzXCBmcm9tXCBsb2NhbGVzXCBub3RcIGV4aXN0YW50XCBpblwgdGhlXCBjdXJyZW50XCByZXNvdXJjZVwgYnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBzZWN0aW9uIGxpc3Rpbmcgb3B0aW9ucyBmb3Igd2hhdCB0byBkbyB3aGVuIGFuIGltcG9ydGVkIHZhbHVlIGV4aXN0cyBpbiBhIGxvY2FsZSBub3QgZGVmaW5lZCBpbiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgYnVuZGxlCitpbXBvcnRfZmlsZV9jb25mbGljdHM9TWlzc2luZ1wgUmVzb3VyY2VcIEZpbGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMS0yNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFNlbGVjdGlvbiBvZiB0aGUgZGVmYXVsdCBncm91cC4gQSBsaXN0IG9mIGdyb3VwcyB3aWxsIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhpcyByZXNvdXJjZSBpbiBhIENvbWJvQm94CitpbXBvcnRfaW5zZXJ0X2dyb3VwPUluc2VydFwgaW50b1wgZ3JvdXBcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgdGhlIHR5cGVzIG9mIGZpbGVzIGFjY2VwdGVkIGZvciB0aGlzIGltcG9ydCB0eXBlCitpbXBvcnRfamF2YV9maWxlX2Rlc2NyaXB0aW9uPUphdmFcIExpc3RSZXNvdXJjZUJ1bmRsZVwgQmFzZVwgQ2xhc3NlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZGlhbG9nIHByb21wdGluZyBmb3IgaW1wb3J0IGZyb20gamF2YSBjbGFzc2VzCitpbXBvcnRfamF2YV90aXRsZT1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIENsYXNzXCBJbXBvcnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgaW5kaWNhdGluZyBzZWN0aW9uIGNvbnRhaW5pbmcgdXNlciBvcHRpb25zCitpbXBvcnRfb3B0aW9ucz1JbXBvcnRcIE9wdGlvbnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGZpbGUgY2hvb3NlciBmb3Igc2VsZWN0aW9uIG9mIHJlc291cmNlIGJ1bmRsZXMgc3RvcmVkIGluIC5wcm9wZXJ0aWVzIGZpbGVzCitpbXBvcnRfcHJvcGVydGllc19maWxlX2Rlc2NyaXB0aW9uPVJlc291cmNlXCBCdW5kbGVcIEJhc2VcIENsYXNzZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIGZvciBpbXBvcnRpbmcgZnJvbSBwcm9wZXJ0aWVzIGZpbGVzIChjcmVhdGVkIG9yIG5vdCBieSBSQk1hbmFnZXIpCitpbXBvcnRfcHJvcGVydGllc190aXRsZT1SZXNvdXJjZVwgQnVuZGxlXCBQcm9wZXJ0aWVzXCBGaWxlc1wgSW1wb3J0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MX0gRW5jb2Rpbmcgb2YgdGhlIHJlc291cmNlIHZhbHVlIHdpdGggYSBjb25mbGljdAorIyBAezB9IFRoZSBrZXkgdmFsdWUgb2YgdGhlIHJlc291cmNlIGluIGNvbmZsaWN0CisjIEBjb21tZW50IFRoaXMgaXMgYSB3YXJuaW5nIGFuZCBpbnN0cnVjdGlvbiBmb3Igd2hlbiBhIHJlc291cmNlIGNvbmZsaWN0IG9jY3VycyBkdXJpbmcgYW4gaW1wb3J0CitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlPVRoZVwga2V5XCB7MH1cIGFsbFwgcmVhZHlcIGV4aXN0c1wgaW5cIHRoZVwgezF9XCByZXNvdXJjZVwgYnVuZGxlLkNob29zZVwgYW5cIG9wdGlvblwgdG9cIHJlc29sdmVcIHRoaXNcIGNvbmZsaWN0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTAyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZSBpdGVtCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoZSByZXNvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGltcG9ydCBmaWxlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3NvdXJjZT1JbXBvcnRcIFRyYW5zbGF0aW9uXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgaXRlbQorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBoZWxkIGJ5IHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlIGR1cmluZyBhIHRyYW5zbGF0aW9uIHJlc291cmNlIGNvbmZsaWN0CitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3RhcmdldD1SZXNvdXJjZVwgQnVuZGxlXCB0cmFuc2xhdGlvblw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgcmVzb3VyY2UgY29uZmxpY3RzIGJ5IGlnbm9yaW5nIGltcG9ydCB2YWx1ZQoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2lnbm9yZT1JZ25vcmVcIHRoZVwgY29uZmxpY3RcIGFuZFwgbGVhdmVcIHRoZVwgb3JpZ2luYWxcIHJlc291cmNlXCB1bmNoYW5nZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgY29uZmxpY3RzIGJ5IHVzaW5nIHRoZSBpbXBvcnQgdmFsdWUKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9vdmVyd3JpdGU9T3ZlcndyaXRlXCByZXNvdXJjZVwgd2l0aFwgdGhlXCB2YWx1ZVwgZnJvbVwgdGhlXCBpbXBvcnRcIGZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgbGlzdGluZyBvcHRpb25zIGZvciByZXNvbHZpbmcgY29uZmxpY3RzIGJldHdlZW4gcmVzb3VyY2VzCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RzPVJlc291cmNlXCBDb25mbGljdHMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAxLTI2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgc291cmNlIGZpbGUgZm9yIHRoZSBpbXBvcnQKK2ltcG9ydF9zb3VyY2VfZmlsZT1Tb3VyY2VcIEZpbGVcOlwgezB9CisKKyMKKyMgQGdyb3VwIE1lbnUgSXRlbXMKKyMKKyMgQGdyb3VwQ29tbWVudCBUaGVzZSByZXNvdXJjZXMgcmVwcmVzZW50IGFsbCBvZiB0aGUgbWVudSBhbmQgbWVudSBpdGVtIHRpdGxlcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRoZSBtZW51IHRpdGxlIGNvdmVyaW5nIGNvcHlpbmcsIHBhc3RpbmcsIGRlbGV0aW5nIG9mIGl0ZW1zCittZW51X2VkaXQ9RWRpdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jb3B5PUNvcHkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY29weV90cmlnZ2VyPWMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY3V0PUN1dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jdXRfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2RlbGV0ZT1EZWxldGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfZGVsZXRlX3RyaWdnZXI9ZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9wYXN0ZT1QYXN0ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9wYXN0ZV90cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfZWRpdCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9lZGl0X3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciB0aGUgb3BlbmluZywgc2F2aW5nLCBldGMuIGRvY3VtZW50cyBhbmQgZXhpdGluZyB0aGUgcHJvZ3JhbQorbWVudV9maWxlPUZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgcmVzb3VyY2UgYnVuZGxlcyBpbiBhIHZhcmlldHkgb2YgZm9ybWF0cworbWVudV9maWxlX2V4cG9ydD1FeHBvcnRcIFJlc291cmNlXCBCdW5kbGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMi0wNS0xNyBAbW9kaWZpZWQgMjAwMi0wNS0xNyBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IEFibGl0eSB0byBleHBvcnQgdG8gSUNVIFJlc291cmNlIEJ1bmRsZSBmaWxlcworbWVudV9maWxlX2V4cG9ydF9JQ1U9SUNVXCBGaWxlcy4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDItMDUtMTcgQG1vZGlmaWVkIDIwMDItMDUtMTcgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfSUNVX3RyaWdnZXI9aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBYmxpdHkgdG8gZXhwb3J0IHRvIFRNWCBYTUwgZmlsZXMKK21lbnVfZmlsZV9leHBvcnRfVE1YPVRNWFwgRmlsZXMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X1RNWF90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgWExJRkYgWE1MIGZpbGVzCittZW51X2ZpbGVfZXhwb3J0X1hMRj1YTElGRlwgRmlsZXMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X1hMRl90cmlnZ2VyPXgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgdG8gamF2YSBmaWxlcyB0aGF0IGNvbXBpbGUgdG8gYmUgTGlzdFJlc291cmNlQnVuZGxlIGNsYXNzIGV4dGVuc2lvbnMKK21lbnVfZmlsZV9leHBvcnRfamF2YT1Db21waWxhYmxlXCBKYXZhXCBGaWxlcy4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRXhwb3J0IGFiaWxpdHkgdG8gcHJvcGVydGllcyBmaWxlcyBtaW51cyB0aGUgbWV0YWRhdGEKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllcz1NaW5pbWFsXCBQcm9wZXJ0aWVzXCBGaWxlcy4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllc190cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X3RyaWdnZXI9eAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGltcG9ydCBhbmQgbWVyZ2luZyBhbm90aGVyIHJlc291cmNlIGZpbGUgd2l0aCB0aGUgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfaW1wb3J0PU1lcmdlXCAoSW1wb3J0XCBpbnRvKVwgVG9cIFJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFibGlpdHkgZnJvbSBYTUwgVE1YIGRvY3VtZW50cworbWVudV9maWxlX2ltcG9ydF9UTVg9VE1YXCBEb2N1bWVudHMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X1RNWF90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTA2IEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBYTUwgWExJRkYgKC54bGYpIGZpbGVzCittZW51X2ZpbGVfaW1wb3J0X1hMRj1YTElGRlwgRG9jdW1lbnRzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wNiBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9YTEZfdHJpZ2dlcj1YCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gamF2YSBjbGFzc2VzIChMaXN0UmVzb3VyY2VCdW5kbGUpCittZW51X2ZpbGVfaW1wb3J0X2phdmE9TGlzdFJlc291cmNlQnVuZGxlXCBKYXZhXCBDbGFzc2VzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9qYXZhX3RyaWdnZXI9agorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbXBvcnQgYWJpbGl0eSBmcm9tIHByb3BlcnRpZXMgZmlsZXMgbm90IGdlbmVyYXRlZCBieSBSQk1hbmFnZXIKK21lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllcz1TaW1wbGVcIFJlc291cmNlXCBCdW5kbGVzLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXI9UworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfdHJpZ2dlcj1tCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgYnVuZGxlCittZW51X2ZpbGVfbmV3PU5ld1wgUmVzb3VyY2VcIEJ1bmRsZS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9uZXdfdHJpZ2dlcj1uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3Igb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZQorbWVudV9maWxlX29wZW49T3BlblwgUmVzb3VyY2VcIEJ1bmRsZS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9vcGVuX3RyaWdnZXI9bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGNsb3NpbmcgdGhlIGFwcGxpY2F0aW9uCittZW51X2ZpbGVfcXVpdD1RdWl0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorbWVudV9maWxlX3F1aXRfdHJpZ2dlcj1xCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3Igc2F2aW5nIHRoZSByZXNvdXJjZSBidW5kbGUgYmVpbmcgd29ya2VkIHdpdGgKK21lbnVfZmlsZV9zYXZlPVNhdmVcIFJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIGEKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfc2F2ZV90cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBzYXZpbmcgYSByZXNvdXJjZSBidW5kbGUgdG8gYSBwYXJ0aWN1bGFyIGxvY2F0aW9uIGFuZCBmaWxlIG5hbWUKK21lbnVfZmlsZV9zYXZlYXM9U2F2ZVwgUmVzb3VyY2VcIEJ1bmRsZVwgQXMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfc2F2ZWFzX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9maWxlJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X2ZpbGVfdHJpZ2dlcj1mCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIGhlbHAgaW5mb3JtYXRpb24gYW5kIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2dyYW0KK21lbnVfaGVscD1IZWxwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgaXRlbSB3aGljaCBicmluZ3MgdXAgYSBkaWFsb2cgZGVzY3JpYmluZyB0aGUgYXBwbGljYXRpb24KK21lbnVfaGVscF9hYm91dD1BYm91dFwgUmVzb3VyY2VcIEJ1bmRsZVwgTWFuYWdlci4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfaGVscF9hYm91dF90cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfaGVscCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9oZWxwX3RyaWdnZXI9aAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBvcHRpb25zIHN1Y2ggYXMgY3JlYXRpbmcgbmV3IHJlc291cmNlcywgZ3JvdXBzLCBhbmQgcmVzb3VyY2UgZmlsZXMKK21lbnVfb3B0aW9ucz1PcHRpb25zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgaXRlbQorbWVudV9vcHRpb25zX2FkZGVudHJ5PUFkZFwgTmV3XCBFbnRyeS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19hZGRlbnRyeV90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBmaWxlIGZvciBhIHBhcnRpY3VsYXIgbGFuZ3VhZ2UvY291bnRyeS92YXJpYW50CittZW51X29wdGlvbnNfYWRkZmlsZT1BZGRcIE5ld1wgUmVzb3VyY2VcIEZpbGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZmlsZV90cmlnZ2VyPWYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorbWVudV9vcHRpb25zX2FkZGdyb3VwPUFkZFwgTmV3XCBHcm91cC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjQgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19hZGRncm91cF90cmlnZ2VyPWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI1IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGVkaXRpbmcgdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBmb3IgdGhlIGFwcGxpY2F0aW9uCittZW51X29wdGlvbnNfcHJlZmVyZW5jZXM9UHJlZmVyZW5jZXMuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI1IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19wcmVmZXJlbmNlc190cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTWVudSBpdGVtIHRoYXQgbWFrZXMgdmlzaWJsZSB0aGUgcHJvamVjdCB2aWV3ZXIKK21lbnVfb3B0aW9uc19wcm9qZWN0X3ZpZXdlcj1PcGVuXCBQcm9qZWN0XCBWaWV3ZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfcHJvamVjdF92aWV3ZXJfdHJpZ2dlcj12CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X29wdGlvbnMnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfb3B0aW9uc190cmlnZ2VyPW8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBhZGRpbmcgYSBuZXcgcmVzb3VyY2UgYnVuZGxlIHRvIHRoZSBwcm9qZWN0CittZW51X3RyZWVfYWRkX3Byb2plY3RfYnVuZGxlPUFkZFwgUmVzb3VyY2VcIEJ1bmRsZS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGRlbGV0aW5nIHBlcm1hbmVudGx5IGEgcmVzb3VyY2UgZmlsZQorbWVudV90cmVlX2RlbGV0ZT1EZWxldGVcIFJlc291cmNlXCBGaWxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgcmVtb3ZpbmcgYSBzcGVjaWZpYyByZXNvdXJjZSBmaWxlIGZyb20gdGhlIHRyZWUgdmlldyBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlCittZW51X3RyZWVfaGlkZT1IaWRlXCBSZXNvdXJjZVwgRmlsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHByb2plY3QKK21lbnVfdHJlZV9uZXdfcHJvamVjdD1OZXdcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK21lbnVfdHJlZV9vcGVuX3Byb2plY3Q9T3BlblwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgcHJvamVjdCB0cmVlCittZW51X3RyZWVfcmVtb3ZlX3Byb2plY3RfYnVuZGxlPVJlbW92ZVwgZnJvbVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHNhdmluZyBhIHNwZWNpZmljIHJlc291cmNlIGJ1bmRsZSBmaWxlCittZW51X3RyZWVfc2F2ZT1TYXZlXCBSZXNvdXJjZVwgRmlsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHNhdmluZyBjaGFuZ2VzIHRvIHRoZSByZXNvdXJjZSBwcm9qZWN0IGZpbGUsIG5vdCB0aGUgcmVzb3VyY2UgYnVuZGxlcyB0aGVtc2VsdmVzIHdpdGhpbiB0aGUgcHJvamVjdAorbWVudV90cmVlX3NhdmVfcHJvamVjdD1TYXZlXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0XCBGaWxlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgZm9yIHNlbGVjdGluZyBhIHJlc291cmNlIGJ1bmRsZSBmcm9tIHRoZSBwcm9qZWN0IHRyZWUgdG8gYmUgZWRpdGVkIGluIHRoZSByZXNvdXJjZSBidW5kbGUgdHJlZQorbWVudV90cmVlX3NlbGVjdF9wcm9qZWN0X2J1bmRsZT1Xb3JrXCB3aXRoXCB0aGlzXCBSZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIGNoYW5naW5nIHRoZSBkaXNwbGF5IGJlaW5nIHNlZW4gYnkgdGhlIHVzZXIKK21lbnVfdmlldz1WaWV3CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IE1lbnUgaXRlbSB0aGF0IHRha2VzIHlvdSBkaXJlY3RseSB0byB0aGUgc3RhdGlzdGljcyBwYW5lbCBmb3IgdGhlIGVudGlyZSBidW5kbGUKK21lbnVfdmlld19zdGF0aXN0aWNzPVZpZXdcIFJlc291cmNlXCBCdW5kbGVcIFN0YXRpc3RpY3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X3ZpZXdfc3RhdGlzdGljc190cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfdmlldycgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV92aWV3X3RyaWdnZXI9dgorCisjCisjIEBncm91cCBQcm9qZWN0IFBhbmVsCisjCisjIEBncm91cENvbW1lbnQgUGFuZWwgYXNzb2NpYXRlZCB3aXRoIFByb2plY3QgZWRpdGluZworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorIyBAY29tbWVudCBMYWJlbCBpbmRpY2F0b3IgYXNzb2NpYXRpbmcgYSB0ZXh0IGJveCBjb250YWluaW5nIGEgdHJhbnNsYXRpb24gd2l0aCB0aGUgcmVzb3VyY2UgYnVuZGxlIHRoZSB0cmFuc2xhdGlvbiBjb21lcyBmcm9tCitwcm9qZWN0X3BhbmVsX2J1bmRsZT1SZXNvdXJjZVwgQnVuZGxlXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IE5hbWUgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorIyBAY29tbWVudCBTcGVjaWFsIGluZGljYXRvciBvZiB0aGUgcmVzb3VyY2UgaXRlbSByZXNvdXJjZSBidW5kbGUgd2hlbiB0aGUgaXRlbSBpcyB1bnRyYW5zbGF0ZWQKK3Byb2plY3RfcGFuZWxfYnVuZGxlX3VudHJhbnNsYXRlZD1SZXNvdXJjZVwgQnVuZGxlXDpcIHswfVwgKFVudHJhbnNsYXRlZCkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTGFiZWwgdGV4dCBtYXJraW5nIHRoZSBsaW5lIGFib3ZlIG9yIHRvIHRoZSBsZWZ0IG9mIGEgcmVzb3VyY2UgY29tbWVudAorcHJvamVjdF9wYW5lbF9jb21tZW50PUJhc2VcIENsYXNzXCBSZXNvdXJjZVwgQ29tbWVudFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IExhYmVsIHRleHQgZm9yIGEgY29tbWVudCB3aGVuIG5vbmUgaXMgZm91bmQgZm9yIGEgcmVzb3VyY2UKK3Byb2plY3RfcGFuZWxfY29tbWVudF9ub25lPU5vXCBjb21tZW50XCBzdXBwbGllZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgc2hvd24gb24gdGhlIHByb2plY3QgcGFuZWwgZm9yIGNvbW1pdHRpbmcgY2hhbmdlIHRvIG9uZSByZXNvdXJjZSBvbmx5Citwcm9qZWN0X3BhbmVsX2NvbW1pdF9idXR0b249Q29tbWl0XCBDaGFuZ2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIG9uIHRoZSBwcm9qZWN0IHBhbmVsIGZvciBzYXZpbmcgYWxsIG9mIHRoZSByZXNvdXJjZXMgZGlzcGxheWVkLiBUaGlzIG1lYW5zIG11bHRpcGxlIHJlc291cmNlIGZpbGVzIGdldCBzYXZlZC4KK3Byb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbl9hbGw9Q29tbWl0XCBBbGxcIFJlc291cmNlXCBDaGFuZ2VzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERlZmF1bHQgdGl0bGUgc2hvd24gb24gdGhlIHByb2plY3QgcGFuZWwgd2hlbiBubyBwYXJ0aWN1bGFyIHJlc291cmNlIGhhcyBiZWVuIHNlbGVjdGVkCitwcm9qZWN0X3BhbmVsX2RlZmF1bHRfdGl0bGU9UHJvamVjdFwgUmVzb3VyY2VcIEVkaXRpbmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGV4dCBmaWVsZCBtYXJrZXIgZm9yIHRoZSB0cmFuc2xhdGlvbiBvZiBhIHJlc291cmNlIHdoZW4gdGhhdCByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhlIGVuY29kaW5nIGZpbGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoCitwcm9qZWN0X3BhbmVsX2l0ZW1faW5oZXJpdHM9PE5vXCBUcmFuc2xhdGlvblw6XCBSZXNvdXJjZVwgSW5oZXJpdHNcIGZyb21cIHBhcmVudD4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUga2V5IG9mIHRoZSBzZWxlY3RlZCByZXNvdXJjZQorIyBAY29tbWVudCBUaXRsZSBvbiB0aGUgcHJvamVjdCBwYW5lbCB3aGlsZSBhIHJlc291cmNlIGlzIHNlbGVjdGVkCitwcm9qZWN0X3BhbmVsX3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nXDpcIHswfQorCisjCisjIEBncm91cCBSQlJlcG9ydGVyCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGZvciB0aGUgUkJSZXBvcnRlciBhcHBsaWNhdGlvbgorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBzZWxlY3RpbmcgZmlsZSBsb2NhdGlvbnMgZm9yIGlucHV0L291dHB1dAorcmVwb3J0ZXJfYnV0dG9uX2Nob29zZT1DaG9vc2UuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBCdXR0b24gaW5kaWNhdGluZyB0aGUgcmVwb3J0IGdlbmVyYXRpb24gc2hvdWxkIG9jY3VyIGltbWVkaWF0ZWx5CityZXBvcnRlcl9idXR0b25fbm93PVVwZGF0ZVwgTm93CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0yOSBAbW9kaWZpZWQgMjAwMC0xMS0yOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3Igc2F2aW5nIHRoZSBjdXJyZW50IHNldHRpbmdzIGFzIGRlZmF1bHQKK3JlcG9ydGVyX2J1dHRvbl9zYXZlX2RlZmF1bHRzPVNhdmVcIHRoZVwgQ3VycmVudFwgU2V0dGluZ3NcIGFzXCBEZWZhdWx0cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEJ1dHRvbiB0byBhY3RpdmF0ZSB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX2J1dHRvbl9zdGFydD1TdGFydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEJ1dHRvbiB0byBkZWFjdGl2ZSB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX2J1dHRvbl9zdG9wPVN0b3AKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBMZXZlbCBvZiBkZXRhaWw6IG1vc3QgaW5mb3JtYXRpb24gYXZhaWxhYmxlCityZXBvcnRlcl9kZXRhaWxfaGlnaD1IaWdoCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiBhIHNlbGVjdGlvbiBvcHRpb24gb2YgdGhlIGxldmVsIG9mIGRldGFpbCBpbiByZXBvcnRpbmcKK3JlcG9ydGVyX2RldGFpbF9sZXZlbD1EZXRhaWxcIExldmVsXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBMZXZlbCBvZiBkZXRhaWw6IHN0YW5kYXJkCityZXBvcnRlcl9kZXRhaWxfbm9ybWFsPU5vcm1hbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQ6IEhUTUwKK3JlcG9ydGVyX2Zvcm1hdF9odG1sPUhUTUwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBBbiBvdXRwdXQgZm9ybWF0IHR5cGU6IHBsYWluIHRleHQKK3JlcG9ydGVyX2Zvcm1hdF90ZXh0PVRleHQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBBbiBvdXRwdXQgZm9ybWF0OiBYTUwKK3JlcG9ydGVyX2Zvcm1hdF94bWw9WE1MCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiBmaWxlIGxvY2F0aW9uIG9mIHRoZSByZXNvdXJjZSBidW5kbGUgdG8gcmVwb3J0IG9uCityZXBvcnRlcl9pbnB1dF9idW5kbGU9UmVzb3VyY2VcIEJ1bmRsZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiB0aGF0IHJlcG9ydGluZyB3aWxsIGhhcHBlbiBhdCBhIHNwZWNpaWZpZWQgdGltZSBvZiBkYXkuIEZvbGxvd2VkIGJ5IGEgdGltZSBhbmQgZGF5IG9wdGlvbi4KK3JlcG9ydGVyX2ludGVydmFsX2RlZmluZWQ9UmVwb3J0XCBhdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRleHQgaW5kaWNhdGlvbiBvZiBzZXF1ZW50aWFsIHJlcG9ydGluZyBwYXVzZWQgZm9yIGEgZGVmaW5lZCBpbnRlcnZhbCBiZXR3ZWVuIHJlcG9ydGluZy4gSW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBudW1iZXIgYW5kIGEgdW5pdCBvZiBtZWFzdXJlIG9mIHRpbWUKK3JlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWw9UmVwb3J0XCBldmVyeQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEB7MH0gRGF0ZS9UaW1lIG9mIGxhc3QgcmVwb3J0IGdlbmVyYXRpb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgdGltZSBvZiB0aGUgbGFzdCByZXBvcnQKK3JlcG9ydGVyX2xhc3RfcmVwb3J0PUxhc3RcIFJlcG9ydFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAezB9IERhdGUvVGltZSBvZiBuZXh0IHJlcG9ydAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHdoZW4gdGhlIG5leHQgcmVwb3J0IHdpbGwgYmUgZ2VuZXJhdGVkCityZXBvcnRlcl9uZXh0X3JlcG9ydD1OZXh0XCBSZXBvcnRcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSByZXBvcnRzIGFyZSBwbGFjZWQKK3JlcG9ydGVyX291dHB1dF9kaXJlY3Rvcnk9T3V0cHV0XCBEaXJlY3RvcnlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlIGZvciBhIHBhcnRpY3VsYXIgb3V0cHV0IGZvcm1hdAorcmVwb3J0ZXJfb3V0cHV0X2ZpbGU9RmlsZVwgTmFtZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIHNldHRpbmcgaW50ZXJ2YWwgb2YgcmVwb3J0aW5nCityZXBvcnRlcl9wYW5lbF9pbnRlcnZhbD1SZXBvcnRcIEludGVydmFsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIGNvbmZpZ3VyYWJsZSBvcHRpb25zIG9mIHRoZSByZXBvcnRpbmcKK3JlcG9ydGVyX3BhbmVsX29wdGlvbnM9UmVwb3J0XCBPcHRpb25zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgU3VicGFuZWwgdGl0bGUgZm9yIGNob29zaW5nIG91dHB1dCBmb3JtYXRzIGZvciB0aGUgcmVwb3J0cworcmVwb3J0ZXJfcGFuZWxfb3V0cHV0X2Zvcm1hdD1PdXRwdXRcIEZvcm1hdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBpbmRpY2F0aW9uIG9mIHJ1bm5pbmcgc3RhdHVzIG9mIHRoZSByZXBvcnRlcgorcmVwb3J0ZXJfcGFuZWxfc3RhdHVzPVN0YXR1cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTaG9ydCB0aXRsZSBmb3Igc2VsZWN0aW5nIGEgY29kZSBzY2FuIGNvbmZpZ3VyYXRpb24gZmlsZQorcmVwb3J0ZXJfcGVyZm9ybV9zY2FuPUNvZGVcIFNjYW5cIEZpbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBRdWljayBpbmRpY2F0aW9uIHRoYXQgdGhlIHJlcG9ydGVyIGlzIGFjdGl2ZSAocGVyaGFwcyB3YWl0aW5nKQorcmVwb3J0ZXJfc3RhdHVzX3J1bm5pbmc9U3RhcnRlZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFF1aWNrIHN0YXR1cyBpbmRpY2F0aW9uIHRoYXQgdGhlIHJlcG9ydGVyIGlzIG5vdCBhY3RpdmUKK3JlcG9ydGVyX3N0YXR1c19zdG9wcGVkPVN0b3BwZWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBkYXlzIG9wdGlvbgorcmVwb3J0ZXJfdGltZV9kYXlzPURheXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBldmVyeSBkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX2V2ZXJ5ZGF5PUV2ZXJ5XCBkYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBmcmlkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX2ZyaWRheT1GcmlkYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBob3VycyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfaG91cnM9SG91cnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBtaW51dGVzIG9wdGlvbgorcmVwb3J0ZXJfdGltZV9taW51dGVzPU1pbnV0ZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBtb25kYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX21vbmRheT1Nb25kYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBzYXR1cmRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfc2F0dXJkYXk9U2F0dXJkYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBzdW5kYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3N1bmRheT1TdW5kYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCB0aHVyc2RheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfdGh1cnNkYXk9VGh1cnNkYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCB0dWVzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV90dWVzZGF5PVR1ZXNkYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCB3ZWRuZXNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3dlZG5lc2RheT1XZWRuZXNkYXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAwLTExLTE3IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaXRsZSBvZiB0aGUgYXBwbGljYXRpb24KK3Jlc291cmNlX2J1bmRsZV9yZXBvcnRlcj1SQlJlcG9ydGVyCisKKyMKKyMgQGdyb3VwIFNlYXJjaCBhbmQgUmVwbGFjZQorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBmb3VuZCBvbiB0aGUgc2VhcmNoIHRhYiBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VuZXJhbCBzZWFyY2ggdGl0bGUKK3NlYXJjaD1TZWFyY2gKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3IgbWFraW5nIHRoZSBzZWFyY2ggY2FzZSBzZW5zaXRpdmUgb3Igbm90CitzZWFyY2hfY2FzZV9zZW5zaXRpdmU9Q2FzZVwgU2Vuc2l0aXZlXCBTZWFyY2gKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3Igc2VhcmNoaW5nIHRocm91Z2ggcmVzb3VyY2UgY29tbWVudHMKK3NlYXJjaF9jb21tZW50cz1Db21tZW50cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2YgdGhlIGZpZWxkIGZvciBlbnRlcmluZyB0ZXh0IHRvIHNlYXJjaCBvbgorc2VhcmNoX2ZpbmQ9RmluZFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wNiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBzZWxlY3Rpb24gZm9yIHNlYXJjaGluZyBvcHRpb24gdGhyb3VnaCByZXNvdXJjZSBrZXlzCitzZWFyY2hfa2V5cz1SZXNvdXJjZVwgS2V5cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2YgdGhlIGZpZWxkIGZvciBlbnRlcmluZyB0ZXh0IGZvciByZXBsYWNpbmcgdGhlIGZvdW5kIHZhbHVlCitzZWFyY2hfcmVwbGFjZT1SZXBsYWNlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3Igc2VhcmNoaW5nIHRocm91Z2ggdHJhbnNsYXRpb24gdmFsdWVzCitzZWFyY2hfdmFsdWVzPVRyYW5zbGF0aW9ucworCisjCisjIEBncm91cCBUYWJzCisjCisjIEBncm91cENvbW1lbnQgR1VJIFRhYnMgaW4gdGhlIG1haW4gcGFuZWwKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHVUkgVGFiIGZvciBUYWJiZWQgUGFuZSBvdmVyIHRoZSB0cmVlIHNob3dpbmcgYSBzaW5nbGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBpdHMgdmFyaW91cyBmaWxlcwordGFiX2J1bmRsZT1CdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUYWIgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSB2YXJpb3VzIGdyb3VwcyBpbiB0aGUgYnVuZGxlCit0YWJfZ3JvdXBzPUdyb3VwcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHVUkgVGFiIGZvciB0YWIgb3ZlciB0cmVlIHNob3dpbmcgYSByZXNvdXJjZSBidW5kbGUgcHJvamVjdAordGFiX3Byb2plY3Q9UHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGFuZSBhbGxvd2luZyBmb3Igc2VhcmNoIGFuZCByZXBsYWNlIGZ1bmN0aW9ucwordGFiX3NlYXJjaD1TZWFyY2gKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI0IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUYWIgZm9yIHN0YXRpc3RpY3MgZGlzcGxheSBmb3IgZWl0aGVyIHRoZSBSZXNvdXJjZSBCdW5kbGUgYXMgYSB3aG9sZSBvciBwYXJ0aWN1bGFyIGxhbmd1YWdlIGZpbGVzCit0YWJfc3RhdGlzdGljcz1TdGF0aXN0aWNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGFiIGZvciBkaXNwbGF5IG9mIHVudHJhbnNsYXRlZCBpdGVtcyBpbiB0aGUgZGlmZmVyZW50IGxhbmd1YWdlIGZpbGVzCit0YWJfdW50cmFuc2xhdGVkPVVudHJhbnNsYXRlZAorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIEdyb3VwcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBDb2x1bW4gdGl0bGUgZm9yIGl0ZW0gY29tbWVudHMKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX2NvbW1lbnQ9Q29tbWVudAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IENvbHVtbiB0aXRsZSBmb3IgaXRlbSdzIHJlc291cmNlIGtleQorbGFuZ3VhZ2Vncm91cF9jb2x1bW5fa2V5PVJlc291cmNlXCBLZXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCAKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX3RyYW5zbGF0aW9uPVRyYW5zbGF0aW9uCisKKyMKKyMgQGdyb3VwIFRyYW5zbGF0aW9uIEZpbGUgU3RhdGlzdGljcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGluIHRoZSBsYW5ndWFnZSBmaWxlIHN0YXRpc3RpY3MgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQSBjb21tZW50IGdpdmVuIHRvIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2NvbW1lbnQ9Q29tbWVudFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIGNvdW50cnkgYmVpbmcgZGVzY3JpYmVkIGJ5IHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2NvdW50cnk9Q291bnRyeVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfaXRlbV9jb3VudD1OdW1iZXJcIG9mXCBSZXNvdXJjZXNcIGluXCB0aGlzXCBMYW5ndWFnZVwgRmlsZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIGxhbmd1YWdlIGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19sYW5ndWFnZT1MYW5ndWFnZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgYSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoZSB0cmFuc2xhdGlvbnMgaW4gdGhpcyBsYW5ndWFnZSBmaWxlCitsYW5ndWFnZXN0YXRzX21hbmFnZXI9UmVzb3VyY2VcIEZpbGVcIE1hbmFnZXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBuYW1lIGdpdmVuIHRvIHRoZSBsYW5ndWFnZSBmaWxlCitsYW5ndWFnZXN0YXRzX3RpdGxlPVJlc291cmNlXCBUaXRsZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgTnVtYmVyIG9mIHJlc291cmNlcyBuZWVkaW5nIHRyYW5zbGF0aW9uIGluIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX3RyYW5zbGF0aW9uX2NvdW50PU51bWJlclwgb2ZcIFVudHJhbnNsYXRlZFwgUmVzb3VyY2VcIEl0ZW1zXCBpblwgdGhpc1wgRmlsZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMC0yNiBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgVGhlIGxhbmd1YWdlL3JlZ2lvbiB2YXJpYW50IGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c192YXJpYW50PVZhcmlhbnRcOgorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFVudHJhbnNsYXRlZCBJdGVtcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUgY29sdW1uIHRpdGxlIGZvciBncm91cCBuYW1lcyBvZiBpdGVtcyBpbiB0aGUgcm93cworbGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl9ncm91cD1Hcm91cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTAtMjYgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRoZSBrZXkgb2YgdGhlIGl0ZW0gYSByb3cKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fa2V5PVJlc291cmNlXCBLZXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTEwLTI2IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZAorIyBAY29tbWVudCBUaGUgdHJhbnNsYXRlZCB2YWx1ZSBvZiBhbiBpdGVtIGluIGEgcm93CitsYW5ndWFnZXVudHJhbnNfY29sdW1uX3RyYW5zbGF0aW9uPVRyYW5zbGF0aW9uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGNvdmVyaW5nIGJ1dHRvbnMgdGhhdCBhcHBseSB0byBhIHNlbGVjdGVkIHJlc291cmNlIGZyb20gYSB0YWJsZSBvZiByZXNvdXJjZXMKK2xhbmd1YWdldW50cmFuc19zZWxlY3RlZF9yZXNvdXJjZXNfb3B0aW9ucz1PcHRpb25zXCBmb3JcIFNlbGVjdGVkXCBSZXNvdXJjZXMKZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyX2RlLnByb3BlcnRpZXMgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlcl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMGI5MDQKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlcl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIxMyBAQAorIyBAZmlsZSAgICAgICAgICBSQk0vR2VybWFuCisjIEBmaWxlRW5jb2RpbmcgIGRlCisjIEBmaWxlTGFuZ3VhZ2UgIERldXRzY2gKKyMgQGZpbGVDb3VudHJ5ICAgCisjIEBmaWxlVmFyaWFudCAgIAorIyBAZmlsZU1hbmFnZXIgICBNYXJ0aW4gR2VybGFjaAorIyBAZmlsZUNvbW1lbnQgICAKKworCisjCisjIEBncm91cCBCYXNlIENsYXNzIEdyb3VwcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb24gSXRlbXMgZm9yIHRoZSBCYXNlIENsYXNzIEdyb3VwIHRhYmJlZCBwYW5lCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9jb21tZW50PUdydXBwZW5rb21tZW50YXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorYmFzZWdyb3VwX2dyb3VwX25hbWU9R3J1cHBlbm5hbWVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorYmFzZWdyb3VwX2dyb3VwX29wdGlvbnM9UmVzb3VyY2VuZ3J1cHBlbi1PcHRpb25lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorYmFzZWdyb3VwX2l0ZW1fb3B0aW9ucz1SZXNvdXJjZW4tT3B0aW9uZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19maWxlX2dyb3VwPVJlc291cmNlbmRhdGVpZW4KKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBTdGF0aXN0aWNzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBBbGwgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGFwcGVhcmluZyBvbiB0aGUgc3RhdGlzdGljcyBwYW5lIGZvciB0aGUgYmFzZSBjbGFzcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZHVwbGljYXRlc19jb3VudD1BbnphaGxcIG1laHJmYWNoZXJcIFJlc291cmNlbnNjaGxcdTAwRkNzc2VsXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19maWxlX2NvdW50PUFuemFobFwgUmVzb3VyY2VuZGF0ZWllblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZ3JvdXBfY291bnQ9QW56YWhsXCBSZXNvdXJjZW5ncnVwcGVuXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19ncm91cF9ncm91cD1SZXNvdXJjZW5ncnVwcGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfaXRlbV9jb3VudD1BbnphaGxcIFJlc291cmNlblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfaXRlbV9ncm91cD1SZXNvdXJjZW4KKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBVbnRyYW5zbGF0ZWQgSXRlbXMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBhcHBlYXJpbmcgb24gdGhlIEJhc2UgQ2xhc3MgVW50cmFuc2xhdGVkIEl0ZW1zIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIGZpbGUgYmVpbmcgdmlld2VkCitiYXNldW50cmFuc19maWxlPURhdGVpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBudW1iZXIgb2YgcmVzb3VyY2UgaXRlbXMgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGZpbGUKK2Jhc2V1bnRyYW5zX3VudHJhbnNfY291bnQ9QW56YWhsXCBuaWNodFwgXHUwMEZDYmVyc2V0enRlclwgUmVzb3VyY2VuXDoKKworIworIyBAZ3JvdXAgQnV0dG9uIE5hbWVzCisjCisjIEBncm91cENvbW1lbnQgVGhlIG5hbWVzIGRpc3BsYXllZCBvbiB0aGUgdmFyaW91cyBidXR0b25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGxhbmd1YWdlIGZpbGUKK2J1dHRvbl9hZGRfZmlsZT1SZXNvdXJjZW5kYXRlaVwgaGluenVmXHUwMEZDZ2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMi0xMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9maWxlX3RyaWdnZXI9aAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK2J1dHRvbl9hZGRfZ3JvdXA9UmVzb3VyY2VuZ3J1cHBlXCBoaW56dWZcdTAwRkNnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fYWRkX2dyb3VwX3RyaWdnZXI9ZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgdHJhbnNsYXRpb24gaXRlbQorYnV0dG9uX2FkZF9yZXNvdXJjZT1SZXNvdXJjZVwgaGluenVmXHUwMEZDZ2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9yZXNvdXJjZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciBjYW5jZWxpbmcgYWN0aW9ucworYnV0dG9uX2NhbmNlbD1BYmJyZWNoZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VuZXJpYyBidXR0b24gZm9yIGEgY2hvaWNlIG9yIHNlbGVjdGlvbiBvcHRpb24KK2J1dHRvbl9jaG9vc2U9QXVzd1x1MDBFNGhsZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY2hvb3NlX3RyaWdnZXI9QQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgZ2VuZXJpYyBjcmVhdGlvbiBvZiBncm91cHMsIGl0ZW1zLCBmaWxlcywgZXRjLgorYnV0dG9uX2NyZWF0ZT1FcnpldWdlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgRm9yIGNyZWF0aW9uIG9mIGEgcmVzb3VyY2UgZ3JvdXAKK2J1dHRvbl9jcmVhdGVfZ3JvdXA9R3J1cHBlXCBlcnpldWdlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfZ3JvdXBfdHJpZ2dlcj1nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3IgY3JlYXRpbmcgYW4gaXRlbSB0aGVuIGNvbnRpbnVpbmcgY3JlYXRpbmcgbW9yZSBpdGVtcworYnV0dG9uX2NyZWF0ZV9tb3JlPUVyemV1Z2VuXCAmXCBXZWl0ZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX21vcmVfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgcmVzb3VyY2UgdHJhbnNsYXRpb24gaXRlbQorYnV0dG9uX2NyZWF0ZV9yZXNvdXJjZT1SZXNvdXJjZVwgZXJ6ZXVnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAyLTEyIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX3Jlc291cmNlX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMTIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIHJlbW92aW5nIGEgZ3JvdXAgYW5kIGl0cyBjb250ZW50cworYnV0dG9uX2RlbGV0ZV9ncm91cD1HcnVwcGVcIGxcdTAwRjZzY2hlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBwZXJtYW5lbnRseSByZW1vdmluZyBhIHJlc291cmNlIGZyb20gdGhlIGJ1bmRsZQorYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZT1SZXNvdXJjZVwgbFx1MDBGNnNjaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMi0xMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZV90cmlnZ2VyPWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBHZW5lcmljIGVkaXQgYnV0dG9uCitidXR0b25fZWRpdD1CZWFyYmVpdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgZ3JvdXAgbmFtZSBhbmQgY29tbWVudAorYnV0dG9uX2VkaXRfZ3JvdXA9R3J1cHBlXCBiZWFyYmVpdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgcmVzb3VyY2UgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBrZXkgYW5kIHRyYW5zbGF0aW9uCitidXR0b25fZWRpdF9yZXNvdXJjZT1SZXNvdXJjZVwgYmVhcmJlaXRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMTIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9lZGl0X3Jlc291cmNlX3RyaWdnZXI9YgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIGluaXRpYXRpbmcgYW4gaW1wb3J0IG9mIHJlc291cmNlcyBmcm9tIGFuIGFsdGVybmF0ZSBzb3VyY2UKK2J1dHRvbl9pbXBvcnQ9SW1wb3J0aWVyZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25faW1wb3J0X3RyaWdnZXI9aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gYWxsb3dzIGEgc2VsZWN0ZWQgcmVzb3VyY2UgdG8gYmUgbWFya2VkIGFzIHRyYW5zbGF0ZWQgd2l0aG91dCBmdXJ0aGVyIGVkaXRpbmcKK2J1dHRvbl9tYXJrX3RyYW5zbGF0ZWQ9UmVzb3VyY2VcIGFsc1wgXHUwMEZDYmVyc2V0enRcIG1hcmtpZXJlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9tYXJrX3RyYW5zbGF0ZWRfdHJpZ2dlcj1tCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGFkZGluZyB0aGUgY3VycmVudCByZXNvdXJjZSBidW5kbGUgaW4gdGhlIG1haW4gYXBwbGljYXRpb24gdG8gdGhlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X2FkZD1BZGRcIEN1cnJlbnRcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9hZGRfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNsb3NpbmcgdGhlIHByb2plY3Qgd2luZG93CitidXR0b25fcHJvamVjdF9jbG9zZT1DbG9zZVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9jbG9zZV90cmlnZ2VyPWMKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X25ldz1OZXdcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfbmV3X3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBvcGVuaW5nIGEgcHJvamVjdCBmaWxlCitidXR0b25fcHJvamVjdF9vcGVuPU9wZW5cIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3Rfb3Blbl90cmlnZ2VyPW8KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcmVtb3ZpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfcmVtb3ZlPVJlbW92ZVwgU2VsZWN0aW9uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X3JlbW92ZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY2F1c2luZyB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgYnVuZGxlIHRvIGJlIHRoZSBvbmUgYmVpbmcgZWRpdGVkIGluIHRoZSBtYWluIGFwcGxpY2F0aW9uCitidXR0b25fcHJvamVjdF9zZWxlY3Q9RWRpdFwgU2VsZWN0ZWQKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3Rfc2VsZWN0X3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGVyZm9ybWluZyBhIGNvbXBsZXRlIHNlYXJjaAorYnV0dG9uX3NlYXJjaF9maW5kX2FsbD1BbGxlXCBmaW5kZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fc2VhcmNoX2ZpbmRfYWxsX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGVyZm9ybWluZyBjb21wbGV0ZSBzZWFyY2ggYW5kIHJlcGxhY2UKK2J1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGw9QWxsZVwgZXJzZXR6ZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fc2VhcmNoX3JlcGxhY2VfYWxsX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciB1cGRhdGluZyBpbmZvcm1hdGlvbgorYnV0dG9uX3VwZGF0ZT1cdTAwQzRuZGVybgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDItMTIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl91cGRhdGVfdHJpZ2dlcj1uCisKKyMKKyMgQGdyb3VwIERpYWxvZ3MKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbnMgdmFyaW91cyBkaWFsb2cgYm94ZXMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEluZGljYXRpb24gb2Ygd2V0aGVyIG9yIG5vdCBhIG5ldyBmaWxlIHdpbGwgYmUgcG9wdWxhdGVkIGZyb20gdGhlIGVsZW1lbnRzIGluIHRoZSBiYXNlIGNsYXNzCitkaWFsb2dfY2hlY2tib3hfY29weV9lbGVtZW50cz1FaW50clx1MDBFNGdlXCBhdXNcIGRlclwgQmFzaXNrbGFzc2VcIGluXCBkaWVcIG5ldWVcIERhdGVpXCBcdTAwRkNiZXJuZWhtZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBJbmRpY2F0b3Igb2Ygd2V0aGVyIGFuIGl0ZW0gaXMgdHJhbnNsYXRlZCBvciBub3QKK2RpYWxvZ19jaGVja2JveF90cmFuc2xhdGVkPVx1MDBEQ2JlcnNldHp0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfY29tbWVudD1Lb21tZW50YXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2NvdW50cnk9TGFuZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2NyZWF0ZWQ9RXJ6ZXVndFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfY3JlYXRvcj1FcnpldWd0XCBkdXJjaFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQHsxfSBUaGUgZGF0ZQorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gaW52b2x2ZWQKKyMgQGNvbW1lbnQgVGhlIGRhdGUgYW5kIHBlcnNvbiBhc3NvY2lhdGVkIHdpdGggYSBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYW4gaXRlbQorZGlhbG9nX2RhdGVfcGVyc29uPXswfVwgYW1cIHsxfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2RlZmF1bHRfY29tbWVudD1EZWZhdWx0LUtvbW1lbnRhclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVmYXVsdF90cmFuc2xhdGlvbj1EZWZhdWx0LVx1MDBEQ2JlcnNldHp1bmdcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2RlbGV0ZV9maWxlPVJlc291cmNlbmRhdGVpXCBsXHUwMEY2c2NoZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfZ3JvdXA9UmVzb3VyY2VuZ3J1cHBlXCBsXHUwMEY2c2NoZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfaXRlbT1SZXNvdXJjZVwgbFx1MDBGNnNjaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgV2FybmluZyBkaXNwbGF5ZWQgd2hlbiBhIHVzZXIgYXNrcyBmb3IgYSBkZWxldGlvbiBvZiBhIGZpbGUuIFByb21wdHMgZm9yICdZZXMnIG9yICdObycKK2RpYWxvZ19kZWxldGVfd2FybmluZz1XYXJudW5nXCFcIERpZXNlXCBPcGVyYXRpb25cIGthbm5cIG5pY2h0XCBydWVja2dhZW5naWdcIGdlbWFjaHRcbndlcmRlbi5cIFNpbmRcIFNpZVwgc2ljaHJlLFwgZGFzc1wgc2llXCBmb3J0ZmFocmVuXCBtb2VjaHRlbj8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19lbmNvZGluZz1FbmNvZGluZ1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9jb21tZW50PVJlc291cmNlbmRhdGVpa29tbWVudGFyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2ZpbHRlcl9kZXNjcmlwdGlvbj1CYXNpc2tsYXNzZW4tUmVzb3VyY2VuZGF0ZWllblwgKC5wcm9wZXJ0aWVzKQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEZXNjcmlwdGlvbiBvZiBGaWxlIEZpbHRlciBmb3IgUkJSZXBvcnRlciBYTUwgc2NhbiBjb25maWd1cmF0aW9uIGZpbGVzCitkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb25fc2Nhbj1YTUxcIFJCUmVwb3J0ZXJcIFNjYW5cIERhdGVpZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2luZm89RGF0ZWlpbmZvcm1hdGlvbmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9tYW5hZ2VyPU5hbWVcIGRlc1wgUmVzb3VyY2VubWFuYWdlcnNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfdGl0bGU9VGl0ZWxcIGRlclwgUmVzb3VyY2VuZGF0ZWlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2dyb3VwPUdydXBwZW5uYW1lXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19ncm91cF9jb21tZW50PUdydXBwZW5rb21tZW50YXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX2tleT1FaW50cmFnc3NjaGxcdTAwRkNzc2VsXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19sYW5ndWFnZT1TcHJhY2hlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfbG9va3Vwcz1QYXJhbWV0ZXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX21vZGlmaWVkPVp1bGV0enRcIGdlXHUwMEU0bmRlcnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX21vZGlmaWVyPVp1bGV0enRcIGdlXHUwMEU0bmRlcnRcIGR1cmNoXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgbmFtZSBvZiBhIGxhbmd1YWdlLCBjb3VudHJ5LCBvciB2YXJpYW50IG9mIGEgbGFuZ3VhZ2UgZmlsZQorZGlhbG9nX25hbWU9TmFtZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciBhIG5hbWUgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUsIGJlZm9yZSBjcmVhdGluZyB0aGF0IGJ1bmRsZQorZGlhbG9nX25ld19iYXNlY2xhc3M9Qml0dGVcIGdlYmVuXCBTaWVcIGVpbmVuXCBOYW1lblwgZlx1MDBGQ3JcIGRpZVwgQmFzaXNrbGFzc2VcIGRlc1wgbmV1ZW5cIFJlc291cmNlLUJ1bmRsZXNcIGVpbi4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERpYWxvZyBwb3B1cCB3aW5kb3cgdGV4dCBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK2RpYWxvZ19uZXdfcHJvamVjdD1QbGVhc2VcIGVudGVyXCBhXCB0aXRsZVwgZm9yXCB5b3VyXCBuZXdcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlsZXMgbWFraW5nIGl0IHRocm91Z2ggdGhlIGZpbHRlciB1cG9uIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUKK2RpYWxvZ19vcGVuX2ZpbGVfZmlsdGVyPUJhc2lza2xhc3Nlbi1SZXNvdXJjZW5kYXRlaWVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhpcyBpcyBhIHNlY3Rpb24gaGVhZGluZyBmb3Igc2V0dGluZyB0aGUgbG9jYWxlCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlPUxvY2FsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IExvY2FsZXMgY3VycmVudGx5IGRlZmluZWQgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMgZm9yIHRoZSBhcHBsaWNhdGlvbgorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9kZWZpbmVkPURlZmluaWVydFwgZlx1MDBGQ3JcIFJCTWFuYWdlclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfaXNvPUlTTy1TdGFuZGFyZHNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IExvY2FsZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IEphdmEgVmlydHVhbCBNYWNoaW5lCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX21hY2hpbmU9Vm9uXCBkaWVzZW1cIFN5c3RlbVwgdW50ZXJzdFx1MDBGQ3R6dFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfd2FybmluZz1BTk1FUktVTkdcOlwgXHUwMEM0bmRlcnVuZ2VuXCBkZXJcIExvY2FsZVwgd2lya2VuXCBzaWNoXCBlcnN0XCBiZWltXCBuXHUwMEU0Y2hzdGVuXCBTdGFydFwgZGVyXCBBbndlbmR1bmdcIGF1cy4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb29rYW5kZmVlbD1Mb29rXCBBbmRcIEZlZWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX3VzZXJuYW1lPUJlbnV0emVybmFtZVw6CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEZXNjcmlwdG9yIHRoYXQgZ29lcyBpbnRvIEdVSSBmaWxlIGNob29zZXIKK2RpYWxvZ19wcm9qZWN0X2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uPVJCTWFuYWdlclwgUHJvamVjdFwgRmlsZXMKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEZpbGUgRmlsdGVyIGRlc2NyaXB0aW9uIGZvciByZXNvdXJjZSBidW5kbGUgcHJvamVjdCBmaWxlcworZGlhbG9nX3Byb2plY3RfZmlsdGVyX2Rlc2NyaXB0aW9uPVJlc291cmNlXCBCdW5kbGVcIFByb2plY3RzCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIHRoYXQgbm8gcHJvamVjdCBpcyBvcGVuLCBwbGFjZWQgaW4gdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cgd2hlcmUgdGhlIHByb2plY3QgbmFtZSB3b3VsZCBub3JtYWxseSBnbworZGlhbG9nX3Byb2plY3Rfbm9uZV9zZWxlY3RlZD1Ob1wgQWN0aXZlXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0CisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgd2luZG93IHNob3dpbmcgYWxsIHRoZSByZXNvdXJjZSBidW5kbGVzIGluIGEgcHJvamVjdAorZGlhbG9nX3Byb2plY3RfdGl0bGU9UmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBQcm9tcHRzIHRoZSB1c2VyIGlmIHRoZXkgd291bGQgbGlrZSB0byBzYXZlIGNoYW5nZXMgYmVmb3JlIGV4aXRpbmcKK2RpYWxvZ19xdWl0X3NhdmU9TVx1MDBGNmNodGVuXCBTaWVcIElocmVcIFx1MDBDNG5kZXJ1bmdlblwgdm9yXCBiZWVuZGVuXCB2b25cIFJCTWFuYWdlclwgc3BlaWNoZXJuPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBIGdlbmVyaWMgcHJvcG1wdCB0byBhc2sgdGhlIHVzZXIgaWYgdGhleSB3aXNoIHRvIHNhdmUgY2hhbmdlcworZGlhbG9nX3NhdmU9TVx1MDBGNmNodGVuXCBTaWVcIElocmVcIFx1MDBDNG5kZXJ1bmdlblwgc3BlaWNoZXJuPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3NlYXJjaF9vcHRpb25zPVN1Y2hvcHRpb25lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3NlYXJjaF9wYXJhbT1TdWNoZVwgbmFjaFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIHRpdGxlIG9mIHRoZSBhYm91dCBkaWFsb2cgYm94CitkaWFsb2dfdGl0bGVfYWJvdXRfcmJtYW5hZ2VyPVx1MDBEQ2JlclwgUkJNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBkaWFsb2cgcHJvbXB0aW5nIGZvciBkZWxldGlvbiBvZiBhbiBlbnRpcmUgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9kZWxldGVfZ3JvdXA9UmVzb3VyY2VuZ3J1cHBlblwgbFx1MDBGNnNjaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIHdoZW4gcHJvbXB0aW5nIHRvIGRlbGV0ZSBhIHJlc291cmNlCitkaWFsb2dfdGl0bGVfZGVsZXRlX2l0ZW09UmVzb3VyY2VcIGxcdTAwRjZzY2hlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2VkaXRfZ3JvdXA9UmVzb3VyY2VuZ3J1cHBlXCBiZWFyYmVpdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZWRpdF9pdGVtPVJlc291cmNlXCBiZWFyYmVpdGVuCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lcnJvcj1FcnJvcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2Vycm9yX2NyZWF0aW5nX2J1bmRsZT1GZWhsZXJcIGJlaW1cIGVyemV1Z2VuXCBkZXNcIFJlc291cmNlLUJ1bmRsZXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIyIEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIHdoZW4gb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZSBub3QgY3JlYXRlZCBieSBSQk1hbmFnZXIKK2RpYWxvZ190aXRsZV9lcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdD1GZWhsZXJcOlwgUmVzb3VyY2VcIEJ1bmRsZVwgaXN0XCBuaWNodFwgbGVzYmFyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgVGl0bGUgb24gYSB3YXJuaW5nIGRpYWxvZyB0aGF0IEkvTyBtYWxmdW5jdGlvbmVkIG9wZW5pbmcgYSBmaWxlCitkaWFsb2dfdGl0bGVfZXJyb3Jfb3BlbmluZ19maWxlPUZlaGxlclwgYmVpbVwgT2VmZm5lblwgZGVyXCBEYXRlaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgYSBkaWFsb2cgYm94IGZvciBlbnRlcmluZyBzcGVjaWFsIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGV4cG9ydCBhIHJlc291cmNlIGJ1bmRsZSB0byBqYXZhIGNsYXNzIGNvZGUKK2RpYWxvZ190aXRsZV9leHBvcnRfamF2YV9vcHRpb25zPUV4cG9ydC1QYXJhbWV0ZXJcOlwgSmF2YS1LbGFzc2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGEgZGlhbG9nIHdpdGggYSBwcm9ncmVzcyBiYXIgZ292ZXJuaW5nIGltcG9ydCBzdGF0dXMKK2RpYWxvZ190aXRsZV9pbXBvcnRfcHJvZ3Jlc3M9SW1wb3J0c2ZvcnRzY2hyaXR0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIG5ldyBidW5kbGUKK2RpYWxvZ190aXRsZV9uZXdfYnVuZGxlPU5ldWVzXCBSZXNvdXJjZS1CdW5kbGVcIGVyemV1Z2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGZpbGUKK2RpYWxvZ190aXRsZV9uZXdfZmlsZT1OZXVlXCBSZXNvdXJjZW5kYXRlaVwgZXJ6ZXVnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9uZXdfZ3JvdXA9TmV1ZVwgUmVzb3VyY2VuZ3J1cHBlXCBlcnpldWdlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyByZXNvdXJjZQorZGlhbG9nX3RpdGxlX25ld19pdGVtPU5ldWVcIFJlc291cmNlXCBlcnpldWdlbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGl0bGUgb2YgdGhlIGRpYWxvZyBib3ggc2hvd2luZyB3aGVuIGNyZWF0aW5nIGEgbmV3IHByb2plY3QKK2RpYWxvZ190aXRsZV9uZXdfcHJvamVjdD1OZXdcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9wcmVmZXJlbmNlcz1FaW5zdGVsbHVuZ2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNvbmZpcm1pbmcgZXhpdCBmcm9tIGFwcGxpY2F0aW9uCitkaWFsb2dfdGl0bGVfcXVpdD1SQk1hbmFnZXJcIGJlZW5kZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9zZWFyY2g9U3VjaGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV91c2VyX25hbWU9QmVudXR6ZXJuYW1lblwgZWluZ2ViZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ190cmFuc2xhdGlvbj1cdTAwRENiZXJzZXR6dHVuZ1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfdXNlcl9uYW1lPUJpdHRlXCBnZWJlblwgU2llXCBJaHJlblwgTmFtZW5cIGVpbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2RpYWxvZ192YXJpYW50PVZhcmlhbnRlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfd2FybmluZ19kZWxldGVfZ3JvdXA9RGFzXCBMXHUwMEY2c2NoZW5cIGRpZXNlclwgR3J1cHBlXCBiZXdpcmt0XCBkaWVcIHBlcm1hbmVudGVcIExcdTAwRjZzY2h1bmdcIGFsbGVyXCBSZXNvdXJjZW5cIGRpZXNlclwgR3J1cHBlLlwgTVx1MDBGNmNodGVuXCBTaWVcIGRpZVwgR3J1cHBlXCBkZW5ub2NoXCBsXHUwMEY2c2NoZW4/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitkaWFsb2dfd2FybmluZ19kZWxldGVfaXRlbT1NXHUwMEY2Y2h0ZW5cIFNpZVwgZGllc2VcIFJlc291cmNlXCB3aXJrbGljaFwgbFx1MDBGNnNjaGVuPworCisjCisjIEBncm91cCBFcnJvciBNZXNzYWdlcworIworIyBAZ3JvdXBDb21tZW50IAorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcj1GZWhsZXIKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSB3aGVuIHRyeWluZyB0byBhZGQgYSByZXNvdXJjZSBidW5kbGUgdG8gYSBwcm9qZWN0LgorZXJyb3JfYWRkaW5nX3Byb2plY3RfYnVuZGxlPUFuXCBlcnJvclwgb2NjdXJyZWRcIHRyeWluZ1wgdG9cIGFkZFwgdGhlXCBSZXNvdXJjZVwgQnVuZGxlXCB5b3VcIHNlbGVjdGVkLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfYmFzZWNsYXNzX3doaXRlc3BhY2U9UmVzb3VyY2VubmFtZW5cIGRcdTAwRkNyZmVuXCBrZWluZVwgV2hpdGUtU3BhY2VzXCBlbnRoYWx0ZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcl9idW5kbGVfbm90X2NyZWF0ZWQ9RXNcIHd1cmRlXCBrZWluXCBSZXNvdXJjZS1CdW5kbGVcIGVyemV1Z3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcl9jcmVhdGVfZmlsZT1CZWltXCBFcnpldWdlblwgZGVyXCBSZXNvdXJjZW5kYXRlaVwgaXN0XCBlaW5cIFByb2JsZW1cIGF1ZmdldHJldGVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2dyb3VwPUJlaW1cIEVyemV1Z2VuXCBkZXJcIFJlc291cmNlbmdydXBwZVwgaXN0XCBlaW5cIFByb2JsZW1cIGF1ZmdldHJldGVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2l0ZW09QmVpbVwgRXJ6ZXVnZW5cIGRlc1wgRWludHJhZ3NcIGlzdFwgZWluXCBQcm9ibGVtXCBhdWZnZXRyZXRlbi4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSB3aGVuIGNyZWF0aW5nIGEgcHJvamVjdAorZXJyb3JfY3JlYXRpbmdfcHJvamVjdD1BblwgZXJyb3JcIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIGNyZWF0ZVwgYVwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUgbWVzc2FnZSBmcm9tIGFuIElPRXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gZGVsZXRlIGEgZmlsZQorZXJyb3JfZGVsZXRpbmc9QmVpbVwgbFx1MDBGNnNjaGVuXCBkZXJcIERhdGVpXCB7MH1cIGlzdFwgZWluXCBGZWhsZXJcIGF1ZmdldHJldGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgQW4gZXJyb3IgdGhhdCBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gZGVsZXRlIGEgZmlsZSwgYnV0IHRoZSB2aXJ0dWFsIG1hY2hpbmUgY2FuIG5vdCBkbyBzbworZXJyb3JfZGVsZXRpb25fbm90X3Bvc3NpYmxlPVJCTWFuYWdlclwga29ubnRlXCBkaWVcIERhdGVpXCBuaWNodFwgbG9lc2NoZW4uXCBadWdhbmdcIHZlcndlaWdlcnQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSBmb3IgZXhwb3J0aW5nIHJlc291cmNlIGJ1bmRsZXMKK2Vycm9yX2V4cG9ydD1FaW5cIEZlaGxlclwgaXN0XCBiZWltXCBFeHBvcnRpZXJlblwgZGVzXCBSZXNvdXJjZW5iXHUwMEZDbmRlbHNcIGF1ZmdldHJldGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcl9pbnRlcm5hbD1JbnRlcm5lclwgRmVobGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfZmlsZT1CZWltXCBcdTAwQzRuZGVyblwgZGVyXCBSZXNvdXJjZW5kYXRlaVwgaXN0XCBlaW5cIFByb2JsZW1cIGF1ZmdldHJldGVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2dyb3VwPUJlaW1cIFx1MDBDNG5kZXJuXCBkZXJcIFJlc291cmNlbmdydXBwZVwgaXN0XCBlaW5cIFByb2JsZW1cIGF1ZmdldHJldGVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2l0ZW09QmVpbVwgXHUwMEM0bmRlcm5cIGRlc1wgRWludHJhZ3NcIGlzdFwgZWluXCBQcm9ibGVtXCBhdWZnZXRyZXRlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX25vX2J1bmRsZV9mb3JfZmlsZT1VbVwgZWluZVwgUmVzb3VyY2VuZGF0ZWlcIHp1XCBlcnpldWdlbixcIG1cdTAwRkNzc2VuXCBTaWVcIHp1blx1MDBFNGNoc3RcIGVpblwgUmVzb3VyY2UtQnVuZGxlXCBlcnpldWdlblwgb2RlclwgXHUwMEY2ZmZuZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCitlcnJvcl9ub19idW5kbGVfZm9yX2dyb3VwPVVtXCBlaW5lXCBSZXNvdXJjZW5ncnVwcGVcIHp1XCBlcnpldWdlbixcIG1cdTAwRkNzc2VuXCBTaWVcIHp1blx1MDBFNGNoc3RcIGVpblwgUmVzb3VyY2UtQnVuZGxlXCBlcnpldWdlblwgb2RlclwgXHUwMEY2ZmZuZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB0aGUgdXNlciB0cmllcyB0byBjcmVhdGUgYSByZXNvdXJjZSwgd2l0aG91dCBhbiBvcGVuIHJlc291cmNlIGJ1bmRsZQorZXJyb3Jfbm9fYnVuZGxlX2Zvcl9pdGVtPVVtXCBlaW5lXCBSZXNvdXJjZVwgenVcIGVyemV1Z2VuLFwgbVx1MDBGQ3NzZW5cIFNpZVwgenVuXHUwMEU0Y2hzdFwgZWluXCBSZXNvdXJjZS1CdW5kbGVcIGVyemV1Z2VuXCBvZGVyXCBcdTAwRjZmZm5lbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitlcnJvcl9ub19rZXlfcmVwbGFjZT1FcnNldHplblwgZlx1MDBGQ3JcIFJlc291cmNlbnNjaGxcdTAwRkNzc2VsXCBpc3RcIG5pY2h0XCBlcmxhdWJ0LlwgQWxsZVwgYW5kZXJlblwgRXJzZXR6dW5nZW5cIHdlcmRlblwgZHVyY2hnZWZcdTAwRkNocnQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gdGhhdCBSQk1hbmFnZXIgY2FuIG5vdCByZWFkIHRoZSBmaWxlIGFzIGNyZWF0ZWQgYnkgUkJNYW5hZ2VyCitlcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdD1EaWVcIGF1c2dld1x1MDBFNGhsdGVcIFJlc291cmNlXCB3dXJkZVwgbmljaHRcIHZvbVwgUkJNYW5hZ2VyXCBlcnpldWd0XCBvZGVyXCBpc3RcIGJlc2NoXHUwMEU0ZGlndC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHdvdWxkIG5vdCBvcGVuCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2Ugb2NjdXJpbmcgb24gYW4gSS9PIGVycm9yIHRyeWluZyB0byBvcGVuIGEgZmlsZQorZXJyb3Jfb3BlbmluZ19maWxlPUtvbm50ZVwgZGllXCBEYXRlaVwgezB9XCBuaWNodFwgXHUwMEY2ZmZuZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiBSQk1hbmFnZXIgZW5jb3VudGVycyBhbiBlcnJvciB3cml0aW5nIHByZWZlcmVuY2VzIHRvIHRoZSBmaWxlIHN5c3RlbQorZXJyb3JfcHJlZmVyZW5jZXNfc2F2ZT1FaW5cIEZlaGxlclwgaXN0XCBiZWltXCBTcGVpY2hlcm5cIGRlclwgRWluc3RlbGx1bmdlblwgYXVmZ2V0cmV0ZW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkCisjIEBjb21tZW50IEEgbWVzc2FnZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgd2hlbiBhbiBlcnJvciBvY2N1cnMgaW4gc2F2aW5nIHRoZSByZXNvdXJjZSBidW5kbGUKK2Vycm9yX3NhdmluZz1CZWltXCBTcGVpY2hlcm5cIGRlc1wgUmVzb3VyY2VcIEJ1bmRsZXNcIGlzdFwgZWluXCBGZWhsZXJcIGF1ZmdldHJldGVuXDpcIHswfQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gc2F2aW5nIGEgcHJvamVjdAorZXJyb3Jfc2F2aW5nX3Byb2plY3Q9QW5cIGVycm9yXCB3YXNcIGVuY291bnRlcmVkXCB0cnlpbmdcIHRvXCBzYXZlXCB0aGVcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFN1Z2dlc3QgdHJ5aW5nIHRvIGltcG9ydCB0aGUgcmVzb3VyY2UgYnVuZGxlIGluc3RlYWQgb2Ygb3BlbmluZyBpdC4KK2Vycm9yX3N1Z2dlc3RfaW1wb3J0X3Byb3BlcnRpZXM9VmVyc3VjaGVuXCBTaWVcIGFsdGVybmF0aXZcIGRhc1wgUmVzb3VyY2VuYlx1MDBGQ25kZWxcIHp1XCBpbXBvcnRpZXJlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9maWxlPUJpdHRlXCB3XHUwMEU0aGxlblwgU2llXCBhbmRlcmVcIEVuY29kaW5nLVdlcnRlLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2dyb3VwPUJpdHRlXCB3XHUwMEU0aGxlblwgU2llXCBlaW5lblwgYW5kZXJlblwgR3J1cHBlbm5hbWVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2l0ZW09Qml0dGVcIHdcdTAwRTRobGVuXCBTaWVcIGVpbmVuXCBhbmRlcmVuXCBFaW50cmFnc3NjaGxcdTAwRkNzc2VsLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBWYWx1ZSBpbnNlcnRlZCBpbnRvIHRhYmxlIGNlbGxzIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VyZWQKK3RhYmxlX2NlbGxfZXJyb3I9KkZlaGxlcioKKworIworIyBAZ3JvdXAgRXhwb3J0CisjCisjIEBncm91cENvbW1lbnQgUmVzb3VyY2VzIGRlYWxpbmcgd2l0aCBleHBvcnQgb3B0aW9ucworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciB0aGUgcGFyYW1ldGVyIGZvciBjcmVhdGVkIGEgcHJvdGVjdGVkIGNsYXNzCitleHBvcnRfamF2YV9jbGFzc19wcm90ZWN0ZWQ9J3Byb3RlY3RlZFwgY2xhc3MnXCBlcnN0ZWxsZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHBhcmFtZXRlciBzZXR0aW5nIHRoZSBjcmVhdGVkIGNsYXNzIGFzIHB1YmxpYworZXhwb3J0X2phdmFfY2xhc3NfcHVibGljPSdwdWJsaWNcIGNsYXNzJ1wgZXJzdGVsbGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHByb3RlY3RlZCBtZXRob2RzIGluIHRoZSBqYXZhIGNsYXNzCitleHBvcnRfamF2YV9tZXRob2RzX3Byb3RlY3RlZD0ncHJvdGVjdGVkXCBtZXRob2RzJ1wgZXJzdGVsbGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHB1YmxpYyBtZXRob2RzCitleHBvcnRfamF2YV9tZXRob2RzX3B1YmxpYz0ncHVibGljXCBtZXRob2RzJ1wgZXJzdGVsbGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4KKyMgQGNvbW1lbnQgVGl0bGUgb2YgYSBjaGVjayBib3ggZm9sbG93ZWQgYnkgYSB0ZXh0IGZpZWxkIGZvciBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBhIHBhY2thZ2UgaW4gdGhlIGdlbmVyYXRlZCBqYXZhIGNsYXNzIGFuZCB3aGF0IHRoZSBwYWNrYWdlIHNob3VsZCBiZSBjYWxsZWQKK2V4cG9ydF9qYXZhX3BhY2thZ2U9R2ViZW5cIHNpZVwgZWluXCAncGFja2FnZSdcIGFuXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbgorIyBAY29tbWVudCBUZXh0IHBsYWNlZCBpbiBhIGxhYmVsIGF0IHRoZSB0b3Agb2YgdGhlIGRpYWxvZyBib3ggZm9yIHNwZWNpZnlpbmcgcGFyYW1ldGVycyBjb25jZXJuaW5nIHRoZSBleHBvcnQgb2YgcmVzb3VyY2UgYnVuZGxlcyBpbnRvIGEgamF2YSBjbGFzcworZXhwb3J0X2phdmFfdGl0bGU9Qml0dGVcIGdlYmVuXCBTaWVcIGRpZVwgZm9sZ2VuZGVuXCBQYXJhbWV0ZXJcIGZ1ZXJcIGRpZVwgSmF2YS1LbGFzc2VcIGFuXDoKKworIworIyBAZ3JvdXAgR2VuZXJhbAorIworIyBAZ3JvdXBDb21tZW50IFNvbWUgaXRlbXMgdGhhdCBhcmUgY29tbW9uIGFjY3Jvc3MgZ3JvdXBzCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgZmlsZSBvciBjbGFzcyBjb21wb3NlZCBvZiB0aGUgZGVmYXVsdCB0cmFuc2xhdGlvbnMgZm9yIHRoZSBidW5kbGUKK2Jhc2VjbGFzcz1CYXNpc2tsYXNzZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDQtMDYtMjkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEdlb3JnZQorIyBAY29tbWVudCBUaGlzIGlzIHRoZSBsZWdhbCBjb3B5cmlnaHQgbm90aWNlCitjb3B5cmlnaHQ9KEMpXCBDb3B5cmlnaHRcIElCTVwgQ29ycC5cIDIwMDAtMjAwNFwgLVwgQWxsZVwgUmVjaHRlXCB2b3JiZWhhbHRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZXJuZXJhbCB1c2UgZm9yIGZpbGUgZGlyZWN0b3JpZXMKK2RpcmVjdG9yeT1WZXJ6ZWljaG5pcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorZ3JvdXBzPUdydXBwZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgZmlsZSBpbiB0aGUgJ0ltYWdlcycgZGlyZWN0b3J5IHRoYXQgcmVwcmVzZW50cyB0aGUgbG9nbyBzZWVuIGF0IHRoZSB0b3Agb2YgdGhlIGFwcGxpY2F0aW9uCitsb2dvX2ZpbGVuYW1lPVRpdGxlTG9nb190cmFuc3BhcmVudC5naWYKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRyZWUgbm9kZSB0aXRsZSB3aGVuIHZpZXdpbmcgYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdmlldyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBwcm9qZWN0Citub19wcm9qZWN0PURlZmF1bHRcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRyZWUgbm9kZSB0aXRsZSBkZWZhdWx0ZWQgdG8gd2hlbiBubyByZXNvdXJjZSBidW5kbGUgb3IgcHJvamVjdCBoYXMgYmVlbiBvcGVuZWQgYnkgdGhlIHVzZXIKK25vX3Byb2plY3RfYnVuZGxlPU5vXCBQcm9qZWN0XCBvclwgUmVzb3VyY2VcIEJ1bmRsZVwgT3BlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSB0b3AgdHJlZSBub2RlIHRpdGxlLCB3aGVuIG5vIHJlc291cmNlIGJ1bmRsZSBoYXMgYmVlbiBvcGVuZWQgb3IgY3JlYXRlZAorbm9fcmVzb3VyY2VfYnVuZGxlPUtlaW5cIFJlc291cmNlLUJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbm9uZT1LZWluKGUpCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQcm9qZWN0IHRhYmxlIGNvbHVtbiBuYW1lIC0gTG9jYXRpb24gb2YgYSByZXNvdXJjZSBidW5kbGUKK3Byb2plY3RfdGFibGVfZmlsZV9sb2NhdGlvbj1GaWxlXCBMb2NhdGlvbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVGFibGUgQ29sdW1uIE5hbWUgZm9yIHJlc291cmNlIGJ1bmRsZSBuYW1lCitwcm9qZWN0X3RhYmxlX3Jlc291cmNlX2J1bmRsZT1SZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgQW4gYWJicmV2aWF0ZWQgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uCityYm1hbmFnZXI9UkJNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwNC0wNi0yOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgR2VvcmdlCisjIEBjb21tZW50IAorcmJtYW5hZ2VyX2NvbnRhY3Q9QXV0b3JcOlwgSmFyZWRcIEphY2tzb25cICZcIEdlb3JnZVwgUmhvdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIGZ1bGwgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uCityZXNvdXJjZV9idW5kbGVfbWFuYWdlcj1SZXNvdXJjZVwgQnVuZGxlXCBNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCit0YWJsZV9jb2x1bW5fZXJyb3I9VGFiZWxsZW5zcGFsdGVuZmVobGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQHswfSBDb3VudHJ5IElTTyBjb2RlCisjIEBjb21tZW50IE5vZGUgdGl0bGUsIHVuZGVyIHdoaWNoIGFsbCBmaWxlcyBvZiB0aGUgc2FtZSBjb3VudHJ5LCBsYW5ndWFnZSByZXNpZGUKK3RyZWVfY291bnRyeV9ub2RlPUxcdTAwRTRuZGVyLUNvZGVcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQHswfSBMYW5ndWFnZSBFbmNvZGluZworIyBAY29tbWVudCBUaGUgbm9kZSBiZWxvdyB3aGljaCBsYW5ndWFnZXMgb2Ygb25lIGVuY29kaW5nIGFyZSBncm91cGVkCit0cmVlX2xhbmd1YWdlX25vZGU9U3ByYWNoZW4tQ29kZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK3RyZWVfdmFyaWFudF9ub2RlPVZhcmlhbnRlblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIG5hbWUgYXNzaWduZWQgYXMgYSB1c2VyIG5hbWUgd2hlbiB0aGUgdXNlciBuYW1lIGlzIG5vdCBzcGVjaWZpZWQKK3Vua25vd25fdXNlcj1VbmJla2FubnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK3VudGl0bGVkPVVuYmVuYW5udAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAordW50cmFuc2xhdGVkX2l0ZW1zPU5pY2h0XCBcdTAwRkNiZXJzZXR6dGVcIFJlc291cmNlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEB7MH0gVGhlIHZlcnNpb24gbnVtYmVyCisjIEBjb21tZW50IFRoZSB2ZXJzaW9uIG9mIHRoaXMgYXBwbGljYXRpb24KK3ZlcnNpb249VmVyc2lvblwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGdlbmVyYWwgdXNlIFdhcm5pbmcKK3dhcm5pbmc9V2FybnVuZworCisjCisjIEBncm91cCBJbXBvcnQKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZGVhbGluZyB3aXRoIGltcG9ydCBvcHRpb25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGZpbGUgY2hvb3NlciBmb3IgY2hvb3NpbmcgVE1YIGZpbGVzCitpbXBvcnRfVE1YX2ZpbGVfZGVzY3JpcHRpb249VE1YXCBEYXRlaWVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gVE1YIFhNTCBmaWxlcworaW1wb3J0X1RNWF90aXRsZT1UTVhcIERhdGVpXCBpbVwgcG9ydGllcmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgZmlsZSBjaG9vc2VyIGZvciBjaG9vc2luZyBYTElGRiAoLnhsZikgZmlsZXMKK2ltcG9ydF9YTEZfZmlsZV9kZXNjcmlwdGlvbj1YTElGRlwgRGF0ZWllbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIFhMSUZGICgueGxmKSBmaWxlcworaW1wb3J0X1hMRl90aXRsZT1YTElGRlwgRGF0ZWlcIGltXCBwb3J0aWVyZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgY29uZmxjaXRzIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzCitpbXBvcnRfY29uZmxpY3RfcHJvbXB0PUJlaVwgamVkZW1cIEtvbmZpbGt0XCBuYWNoZnJhZ2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBzcGVjaWZ5aW5nIHdoZXRoZXIgYSBncm91cCBmb3VuZCBpbiB0aGUgdGFyZ2V0IGJ1dCBub3QgZm91bmQgaW4gdGhlIGFjdGl2ZSByZXNvdXJjZSBidW5kbGUgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSBvciBub3QKK2ltcG9ydF9kZWZhdWx0X2dyb3VwX2NyZWF0aW9uPUdydXBwZW5cIGVyemV1Z2VuLFwgZGllXCBuaWNodFwgaW1cIGFrdHVlbGxlblwgQlx1MDBGQ25kZWxcIGVudGhhbHRlblwgc2luZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRvaW4gZm9yIG1hcmtpbmcgdGhlIGluY29taW5nIHZhbHVlcyBhcyB0cmFuc2xhdGVkIG9yIG5vdAoraW1wb3J0X2RlZmF1bHRfdHJhbnNsYXRlZD1BbHNcIFx1MDBGQ2JlcnNldHp0XCBtYXJraWVyZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIG9wdGlvbnMgc3BlY2lmeWluZyB0aGUgbWV0YSBkYXRhIHRvIGJlIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCByZXNvdXJjZXMgaWYgaXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgaW1wb3J0IHNvdXJjZQoraW1wb3J0X2RlZmF1bHRfdmFsdWVzPVZvcmVpbnN0ZWxsdW5nZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgbG9jYWxlIGVuY29kaW5nIG9mIHRoZSBmaWxlIGluIHF1ZXN0aW9uCisjIEBjb21tZW50IEluc3RydWN0aW9ucyBmb3IgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIHJlc29sdmUgYSBjb25mbGljdCB3aGVuIGltcG9ydGluZyByZXNvdXJjZXMgZnJvbSBhIGxvY2FsZSB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHJlc291cmNlIGJ1bmRsZQoraW1wb3J0X2ZpbGVfY29uZmxpY3RfY2hvb3NlPURpZVwgQ29kaWVydW5nXCB7MH1cIGV4aXN0aWVydFwgbmljaHQuXCBXXHUwMEU0aGxlblwgU2llXCBlaW5lXCBPcHRpb24sXCB1bVwgZGFzXCBQcm9ibGVtXCB6dVwgbFx1MDBGNnNlbixcIG9kZXJcIENhbmNlbFwgdW1cIGRlblwgS29uZmxpa3RcIHp1XCBpZ25vcmllcmVuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkLCBidXQgbm90IHBvcHVsYXRlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfZW1wdHk9RWluZVwgbmV1ZSxcIGxlZXJlXCBSZXNvdXJjZW5kYXRlaVwgZXJ6ZXVnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggYSBuZXcgZmlsZSBpcyBnZW5lcmF0ZWQgYW5kIHBvcHVsYXRlZCB3aXRoIGFsbCB0aGUgZXhpc3RpbmcgcmVzb3VyY2VzCitpbXBvcnRfZmlsZV9jb25mbGljdF9nZW5lcmF0ZV9wb3B1bGF0ZT1FaW5lXCBuZXVlXCBSZXNvdXJjZW5kYXRlaVwgZXJ6ZXVnZW5cIHVuZFwgbWl0XCBkZW5cIFJlc291cmNlblwgZGVyXCBCYXNpc2tsYXNzZVwgZlx1MDBGQ2xsZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBmaWxlIGNvbmZsaWN0cyBpbiB3aGljaCB0aGUgY29uZmxpY3RzIGFyZSBpZ25vcmVkCitpbXBvcnRfZmlsZV9jb25mbGljdF9pZ25vcmU9QWxsZVwgUmVzb3VyY2VuXCBhdXNcIExva2FsZ3J1cHBlbixcIGRpZVwgbmljaHRcIGluXCBpbVwgYWt0dWVsbGVuXCBSZXNvdXJjZW5iXHUwMEZDbmRlbFwgZXhpc3RpZXJlbixcIFx1MDBGQ2JlcnNwcmluZ2VuXCB1bmRcIGlnbm9yaWVyZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHNlY3Rpb24gbGlzdGluZyBvcHRpb25zIGZvciB3aGF0IHRvIGRvIHdoZW4gYW4gaW1wb3J0ZWQgdmFsdWUgZXhpc3RzIGluIGEgbG9jYWxlIG5vdCBkZWZpbmVkIGluIHRoZSBleGlzdGluZyByZXNvdXJjZSBidW5kbGUKK2ltcG9ydF9maWxlX2NvbmZsaWN0cz1SZXNvdXJjZW5kYXRlaVwgbmljaHRcIGdlZnVuZGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFNlbGVjdGlvbiBvZiB0aGUgZGVmYXVsdCBncm91cC4gQSBsaXN0IG9mIGdyb3VwcyB3aWxsIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhpcyByZXNvdXJjZSBpbiBhIENvbWJvQm94CitpbXBvcnRfaW5zZXJ0X2dyb3VwPUVpbmZcdTAwRkNnZW5cIGluXCBHcnVwcGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgdGhlIHR5cGVzIG9mIGZpbGVzIGFjY2VwdGVkIGZvciB0aGlzIGltcG9ydCB0eXBlCitpbXBvcnRfamF2YV9maWxlX2Rlc2NyaXB0aW9uPUphdmFcIExpc3RSZXNvdXJjZUJ1bmRsZVwgQmFzaXNrbGFzc2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBkaWFsb2cgcHJvbXB0aW5nIGZvciBpbXBvcnQgZnJvbSBqYXZhIGNsYXNzZXMKK2ltcG9ydF9qYXZhX3RpdGxlPUphdmFcIExpc3RSZXNvdXJjZUJ1bmRsZVwgS2xhc3NlbmltcG9ydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBpbmRpY2F0aW5nIHNlY3Rpb24gY29udGFpbmluZyB1c2VyIG9wdGlvbnMKK2ltcG9ydF9vcHRpb25zPUltcG9ydG9wdGlvbmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBmaWxlIGNob29zZXIgZm9yIHNlbGVjdGlvbiBvZiByZXNvdXJjZSBidW5kbGVzIHN0b3JlZCBpbiAucHJvcGVydGllcyBmaWxlcworaW1wb3J0X3Byb3BlcnRpZXNfZmlsZV9kZXNjcmlwdGlvbj1CYXNpc2tsYXNzZW5cIGRlc1wgUmVzb3VyY2VuYlx1MDBGQ25kZWxzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gcHJvcGVydGllcyBmaWxlcyAoY3JlYXRlZCBvciBub3QgYnkgUkJNYW5hZ2VyKQoraW1wb3J0X3Byb3BlcnRpZXNfdGl0bGU9UHJvcGVydHktRGF0ZWllblwgaW1wb3J0aWVyZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHsxfSBFbmNvZGluZyBvZiB0aGUgcmVzb3VyY2UgdmFsdWUgd2l0aCBhIGNvbmZsaWN0CisjIEB7MH0gVGhlIGtleSB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgaW4gY29uZmxpY3QKKyMgQGNvbW1lbnQgVGhpcyBpcyBhIHdhcm5pbmcgYW5kIGluc3RydWN0aW9uIGZvciB3aGVuIGEgcmVzb3VyY2UgY29uZmxpY3Qgb2NjdXJzIGR1cmluZyBhbiBpbXBvcnQKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2U9RGVyXCBTY2hsXHUwMEZDc3NlbFwgezB9XCBleGlzdGllcnRcIGJlcmVpdHNcIGltXCBSZXNvdXJjZW5iXHUwMEZDbmRlbFwgezF9LlwgV1x1MDBFNGhsZW5cIFNpZVwgZWluZVwgT3B0aW9uXCBhdXMsXCB1bVwgZGllc2VuXCBLb25mbGlrdFwgenVcIGxcdTAwRjZzZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlIGl0ZW0KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhlIHJlc291cmNlIGFjY29yZGluZyB0byB0aGUgaW1wb3J0IGZpbGUKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2Vfc291cmNlPVx1MDBEQ2JlcnNldHp1bmdcIGltcG9ydGllcmVuXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgaXRlbQorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBoZWxkIGJ5IHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlIGR1cmluZyBhIHRyYW5zbGF0aW9uIHJlc291cmNlIGNvbmZsaWN0CitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3RhcmdldD1cdTAwRENiZXJzdHp1bmdcIGRlc1wgUmVzb3VyY2VuYlx1MDBGQ25kZWxzXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyByZXNvdXJjZSBjb25mbGljdHMgYnkgaWdub3JpbmcgaW1wb3J0IHZhbHVlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfaWdub3JlPUtvbmZsaWt0XCBpZ25vcmllcmVuXCB1bmRcIE9yaWdpbmFscmVzb3VyY2VcIGJlaWJlaGFsdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGNvbmZsaWN0cyBieSB1c2luZyB0aGUgaW1wb3J0IHZhbHVlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3Rfb3ZlcndyaXRlPVJlc291cmNlXCBtaXRcIGRlbVwgV2VydFwgYXVzXCBkZXJcIEltcG9ydGRhdGVpXCBcdTAwRkNiZXJzY2hyZWliZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgbGlzdGluZyBvcHRpb25zIGZvciByZXNvbHZpbmcgY29uZmxpY3RzIGJldHdlZW4gcmVzb3VyY2VzCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RzPVJlc291cmNlbmtvbmZsaWt0ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZQorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBzb3VyY2UgZmlsZSBmb3IgdGhlIGltcG9ydAoraW1wb3J0X3NvdXJjZV9maWxlPVF1ZWxsZGF0ZWlcOlwgezB9CisKKyMKKyMgQGdyb3VwIE1lbnUgSXRlbXMKKyMKKyMgQGdyb3VwQ29tbWVudCBUaGVzZSByZXNvdXJjZXMgcmVwcmVzZW50IGFsbCBvZiB0aGUgbWVudSBhbmQgbWVudSBpdGVtIHRpdGxlcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgbWVudSB0aXRsZSBjb3ZlcmluZyBjb3B5aW5nLCBwYXN0aW5nLCBkZWxldGluZyBvZiBpdGVtcworbWVudV9lZGl0PUJlYXJiZWl0ZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY29weT1Lb3BpZXJlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jb3B5X3RyaWdnZXI9aworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jdXQ9QXVzc2NobmVpZGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2N1dF90cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfZGVsZXRlPUxcdTAwRjZzY2hlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9kZWxldGVfdHJpZ2dlcj1sCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X3Bhc3RlPUVpbmZcdTAwRkNnZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfcGFzdGVfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9lZGl0JyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X2VkaXRfdHJpZ2dlcj1iCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciB0aGUgb3BlbmluZywgc2F2aW5nLCBldGMuIGRvY3VtZW50cyBhbmQgZXhpdGluZyB0aGUgcHJvZ3JhbQorbWVudV9maWxlPURhdGVpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFiaWxpdHkgdG8gZXhwb3J0IHJlc291cmNlIGJ1bmRsZXMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMKK21lbnVfZmlsZV9leHBvcnQ9UmVzb3VyY2VuYlx1MDBGQ25kZWxcIGV4cG9ydGllcmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMi0wNS0xNyBAbW9kaWZpZWQgMjAwMi0wNS0xNyBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IEFibGl0eSB0byBleHBvcnQgdG8gSUNVIFJlc291cmNlIEJ1bmRsZSBmaWxlcworbWVudV9maWxlX2V4cG9ydF9JQ1U9SUNVXCBEb2t1bWVudGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAyLTA1LTE3IEBtb2RpZmllZCAyMDAyLTA1LTE3IEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X0lDVV90cmlnZ2VyPWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJsaXR5IHRvIGV4cG9ydCB0byBUTVggWE1MIGZpbGVzCittZW51X2ZpbGVfZXhwb3J0X1RNWD1UTVhcIERhdGVpZW4uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X1RNWF90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgeAorbWVudV9maWxlX2V4cG9ydF9YTEY9WExJRkZcIERhdGVpZW4uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X1hMRl90cmlnZ2VyPXgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgdG8gamF2YSBmaWxlcyB0aGF0IGNvbXBpbGUgdG8gYmUgTGlzdFJlc291cmNlQnVuZGxlIGNsYXNzIGV4dGVuc2lvbnMKK21lbnVfZmlsZV9leHBvcnRfamF2YT1Lb21waWxpZXJiYXJlXCBKYXZhXCBEYXRlaWVuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9qYXZhX3RyaWdnZXI9agorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBFeHBvcnQgYWJpbGl0eSB0byBwcm9wZXJ0aWVzIGZpbGVzIG1pbnVzIHRoZSBtZXRhZGF0YQorbWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzPU1pbmltYWxlXCBFaWdlbnNjaGFmdHNkYXRlaWVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfdHJpZ2dlcj14CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGltcG9ydCBhbmQgbWVyZ2luZyBhbm90aGVyIHJlc291cmNlIGZpbGUgd2l0aCB0aGUgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfaW1wb3J0PVJlc291cmNlLUJ1bmRsZVwgYXVzXCBEYXRlaVwgaW1wb3J0aWVyZW4uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFibGlpdHkgZnJvbSBYTUwgVE1YIGRvY3VtZW50cworbWVudV9maWxlX2ltcG9ydF9UTVg9VE1YXCBEb2t1bWVudGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X1RNWF90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBYTUwgWExJRkYgKC54bGYpIGZpbGVzCittZW51X2ZpbGVfaW1wb3J0X1hMRj1YTElGRlwgRG9rdW1lbnRlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IFgKK21lbnVfZmlsZV9pbXBvcnRfWExGX3RyaWdnZXI9eAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbXBvcnQgYWJpbGl0eSBmcm9tIGphdmEgY2xhc3NlcyAoTGlzdFJlc291cmNlQnVuZGxlKQorbWVudV9maWxlX2ltcG9ydF9qYXZhPUxpc3RSZXNvdXJjZUJ1bmRsZVwgSmF2YVwgS2xhc3Nlbi4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBwcm9wZXJ0aWVzIGZpbGVzIG5vdCBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyCittZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXM9RWluZmFjaGVcIFJlc291cmNlbmJcdTAwRkNuZGVsLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXI9UworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X3RyaWdnZXI9bQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUKK21lbnVfZmlsZV9uZXc9TmV1CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK21lbnVfZmlsZV9uZXdfdHJpZ2dlcj1uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUKK21lbnVfZmlsZV9vcGVuPVx1MDBENmZmbmVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK21lbnVfZmlsZV9vcGVuX3RyaWdnZXI9ZgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjbG9zaW5nIHRoZSBhcHBsaWNhdGlvbgorbWVudV9maWxlX3F1aXQ9QmVlbmRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfcXVpdF90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3Igc2F2aW5nIHRoZSByZXNvdXJjZSBidW5kbGUgYmVpbmcgd29ya2VkIHdpdGgKK21lbnVfZmlsZV9zYXZlPVNwZWljaGVybgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfc2F2ZV90cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3Igc2F2aW5nIGEgcmVzb3VyY2UgYnVuZGxlIHRvIGEgcGFydGljdWxhciBsb2NhdGlvbiBhbmQgZmlsZSBuYW1lCittZW51X2ZpbGVfc2F2ZWFzPVNwZWljaGVyblwgdW50ZXIuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9maWxlX3NhdmVhc190cmlnZ2VyPXUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X2ZpbGUnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfZmlsZV90cmlnZ2VyPWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIGhlbHAgaW5mb3JtYXRpb24gYW5kIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2dyYW0KK21lbnVfaGVscD1IaWxmZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBpdGVtIHdoaWNoIGJyaW5ncyB1cCBhIGRpYWxvZyBkZXNjcmliaW5nIHRoZSBhcHBsaWNhdGlvbgorbWVudV9oZWxwX2Fib3V0PVx1MDBEQ2JlclwgUmVzb3VyY2VcIEJ1bmRsZVwgTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X2hlbHBfYWJvdXRfdHJpZ2dlcj1iCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9oZWxwJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X2hlbHBfdHJpZ2dlcj1oCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBvcHRpb25zIHN1Y2ggYXMgY3JlYXRpbmcgbmV3IHJlc291cmNlcywgZ3JvdXBzLCBhbmQgcmVzb3VyY2UgZmlsZXMKK21lbnVfb3B0aW9ucz1PcHRpb25lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBpdGVtCittZW51X29wdGlvbnNfYWRkZW50cnk9TmV1ZW5cIEVpbnRyYWdcIGhpbnp1Zlx1MDBGQ2dlbi4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZW50cnlfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGZpbGUgZm9yIGEgcGFydGljdWxhciBsYW5ndWFnZS9jb3VudHJ5L3ZhcmlhbnQKK21lbnVfb3B0aW9uc19hZGRmaWxlPU5ldWVcIFJlc291cmNlbmRhdGVpXCBoaW56dWZcdTAwRkNnZW4uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGZpbGVfdHJpZ2dlcj1kCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGdyb3VwCittZW51X29wdGlvbnNfYWRkZ3JvdXA9TmV1ZVwgUmVzb3VyY2VuZ3J1cHBlXCBoaW56dWZcdTAwRkNnZW4uLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGdyb3VwX3RyaWdnZXI9ZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgZWRpdGluZyB0aGUgdXNlcidzIHByZWZlcmVuY2VzIGZvciB0aGUgYXBwbGljYXRpb24KK21lbnVfb3B0aW9uc19wcmVmZXJlbmNlcz1FaW5zdGVsbHVuZ2VuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfcHJlZmVyZW5jZXNfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gdGhhdCBtYWtlcyB2aXNpYmxlIHRoZSBwcm9qZWN0IHZpZXdlcgorbWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyPU9wZW5cIFByb2plY3RcIFZpZXdlcgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfcHJvamVjdF92aWV3ZXJfdHJpZ2dlcj12CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9vcHRpb25zJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X29wdGlvbnNfdHJpZ2dlcj1vCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGFkZGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUgdG8gdGhlIHByb2plY3QKK21lbnVfdHJlZV9hZGRfcHJvamVjdF9idW5kbGU9QWRkXCBSZXNvdXJjZVwgQnVuZGxlLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNi0yOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgZGVsZXRpbmcgcGVybWFuZW50bHkgYSByZXNvdXJjZSBmaWxlCittZW51X3RyZWVfZGVsZXRlPVJlc291cmNlbmRhdGVpXCBsXHUwMEY2c2NoZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA2LTI5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIE1hcnRpbgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHJlbW92aW5nIGEgc3BlY2lmaWMgcmVzb3VyY2UgZmlsZSBmcm9tIHRoZSB0cmVlIHZpZXcgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorbWVudV90cmVlX2hpZGU9UmVzb3VyY2VuZGF0ZWlcIG5pY2h0XCBtZWhyXCBhbnplaWdlbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyBwcm9qZWN0CittZW51X3RyZWVfbmV3X3Byb2plY3Q9TmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0Li4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUgcHJvamVjdAorbWVudV90cmVlX29wZW5fcHJvamVjdD1PcGVuXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0Li4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgcHJvamVjdCB0cmVlCittZW51X3RyZWVfcmVtb3ZlX3Byb2plY3RfYnVuZGxlPVJlbW92ZVwgZnJvbVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3Igc2F2aW5nIGEgc3BlY2lmaWMgcmVzb3VyY2UgYnVuZGxlIGZpbGUKK21lbnVfdHJlZV9zYXZlPVJlc291cmNlbmRhdGVpXCBzcGVpY2hlcm4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3Igc2F2aW5nIGNoYW5nZXMgdG8gdGhlIHJlc291cmNlIHByb2plY3QgZmlsZSwgbm90IHRoZSByZXNvdXJjZSBidW5kbGVzIHRoZW1zZWx2ZXMgd2l0aGluIHRoZSBwcm9qZWN0CittZW51X3RyZWVfc2F2ZV9wcm9qZWN0PVNhdmVcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3RcIEZpbGUuLi4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgZm9yIHNlbGVjdGluZyBhIHJlc291cmNlIGJ1bmRsZSBmcm9tIHRoZSBwcm9qZWN0IHRyZWUgdG8gYmUgZWRpdGVkIGluIHRoZSByZXNvdXJjZSBidW5kbGUgdHJlZQorbWVudV90cmVlX3NlbGVjdF9wcm9qZWN0X2J1bmRsZT1Xb3JrXCB3aXRoXCB0aGlzXCBSZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBjaGFuZ2luZyB0aGUgZGlzcGxheSBiZWluZyBzZWVuIGJ5IHRoZSB1c2VyCittZW51X3ZpZXc9QW5zaWNodAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTWVudSBpdGVtIHRoYXQgdGFrZXMgeW91IGRpcmVjdGx5IHRvIHRoZSBzdGF0aXN0aWNzIHBhbmVsIGZvciB0aGUgZW50aXJlIGJ1bmRsZQorbWVudV92aWV3X3N0YXRpc3RpY3M9UmVzb3VyY2VcIEJ1bmRsZVwgU3RhdGlzdGlrCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCAKK21lbnVfdmlld19zdGF0aXN0aWNzX3RyaWdnZXI9cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfdmlldycgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV92aWV3X3RyaWdnZXI9YQorCisjCisjIEBncm91cCBQcm9qZWN0IFBhbmVsCisjCisjIEBncm91cENvbW1lbnQgUGFuZWwgYXNzb2NpYXRlZCB3aXRoIFByb2plY3QgZWRpdGluZworCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBidW5kbGUKKyMgQGNvbW1lbnQgTGFiZWwgaW5kaWNhdG9yIGFzc29jaWF0aW5nIGEgdGV4dCBib3ggY29udGFpbmluZyBhIHRyYW5zbGF0aW9uIHdpdGggdGhlIHJlc291cmNlIGJ1bmRsZSB0aGUgdHJhbnNsYXRpb24gY29tZXMgZnJvbQorcHJvamVjdF9wYW5lbF9idW5kbGU9UmVzb3VyY2VcIEJ1bmRsZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gTmFtZSBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlCisjIEBjb21tZW50IFNwZWNpYWwgaW5kaWNhdG9yIG9mIHRoZSByZXNvdXJjZSBpdGVtIHJlc291cmNlIGJ1bmRsZSB3aGVuIHRoZSBpdGVtIGlzIHVudHJhbnNsYXRlZAorcHJvamVjdF9wYW5lbF9idW5kbGVfdW50cmFuc2xhdGVkPVJlc291cmNlXCBCdW5kbGVcOlwgezB9XCAoVW50cmFuc2xhdGVkKQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTGFiZWwgdGV4dCBtYXJraW5nIHRoZSBsaW5lIGFib3ZlIG9yIHRvIHRoZSBsZWZ0IG9mIGEgcmVzb3VyY2UgY29tbWVudAorcHJvamVjdF9wYW5lbF9jb21tZW50PUJhc2VcIENsYXNzXCBSZXNvdXJjZVwgQ29tbWVudFw6CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBMYWJlbCB0ZXh0IGZvciBhIGNvbW1lbnQgd2hlbiBub25lIGlzIGZvdW5kIGZvciBhIHJlc291cmNlCitwcm9qZWN0X3BhbmVsX2NvbW1lbnRfbm9uZT1Ob1wgY29tbWVudFwgc3VwcGxpZWQKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBzaG93biBvbiB0aGUgcHJvamVjdCBwYW5lbCBmb3IgY29tbWl0dGluZyBjaGFuZ2UgdG8gb25lIHJlc291cmNlIG9ubHkKK3Byb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbj1Db21taXRcIENoYW5nZQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIG9uIHRoZSBwcm9qZWN0IHBhbmVsIGZvciBzYXZpbmcgYWxsIG9mIHRoZSByZXNvdXJjZXMgZGlzcGxheWVkLiBUaGlzIG1lYW5zIG11bHRpcGxlIHJlc291cmNlIGZpbGVzIGdldCBzYXZlZC4KK3Byb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbl9hbGw9Q29tbWl0XCBBbGxcIFJlc291cmNlXCBDaGFuZ2VzCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEZWZhdWx0IHRpdGxlIHNob3duIG9uIHRoZSBwcm9qZWN0IHBhbmVsIHdoZW4gbm8gcGFydGljdWxhciByZXNvdXJjZSBoYXMgYmVlbiBzZWxlY3RlZAorcHJvamVjdF9wYW5lbF9kZWZhdWx0X3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUZXh0IGZpZWxkIG1hcmtlciBmb3IgdGhlIHRyYW5zbGF0aW9uIG9mIGEgcmVzb3VyY2Ugd2hlbiB0aGF0IHJlc291cmNlIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgZW5jb2RpbmcgZmlsZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGgKK3Byb2plY3RfcGFuZWxfaXRlbV9pbmhlcml0cz08Tm9cIFRyYW5zbGF0aW9uXDpcIFJlc291cmNlXCBJbmhlcml0c1wgZnJvbVwgcGFyZW50PgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUga2V5IG9mIHRoZSBzZWxlY3RlZCByZXNvdXJjZQorIyBAY29tbWVudCBUaXRsZSBvbiB0aGUgcHJvamVjdCBwYW5lbCB3aGlsZSBhIHJlc291cmNlIGlzIHNlbGVjdGVkCitwcm9qZWN0X3BhbmVsX3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nXDpcIHswfQorCisjCisjIEBncm91cCBSQlJlcG9ydGVyCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGZvciB0aGUgUkJSZXBvcnRlciBhcHBsaWNhdGlvbgorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIHNlbGVjdGluZyBmaWxlIGxvY2F0aW9ucyBmb3IgaW5wdXQvb3V0cHV0CityZXBvcnRlcl9idXR0b25fY2hvb3NlPUF1c3dcdTAwRTRobGVuLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gaW5kaWNhdGluZyB0aGUgcmVwb3J0IGdlbmVyYXRpb24gc2hvdWxkIG9jY3VyIGltbWVkaWF0ZWx5CityZXBvcnRlcl9idXR0b25fbm93PUVyemV1Z2VuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0yOSBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3Igc2F2aW5nIHRoZSBjdXJyZW50IHNldHRpbmdzIGFzIGRlZmF1bHQKK3JlcG9ydGVyX2J1dHRvbl9zYXZlX2RlZmF1bHRzPU1vbWVudGFuZVwgRWluc3RlbGx1bmdlblwgYWxzXCBWb3JlaW5zdGVsbHVuZ2VuXCBzcGVpY2hlcm4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0byBhY3RpdmF0ZSB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX2J1dHRvbl9zdGFydD1TdGFydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRvIGRlYWN0aXZlIHRoZSByZXBvcnRlcgorcmVwb3J0ZXJfYnV0dG9uX3N0b3A9U3RvcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgTGV2ZWwgb2YgZGV0YWlsOiBtb3N0IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorcmVwb3J0ZXJfZGV0YWlsX2hpZ2g9SG9jaAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiBhIHNlbGVjdGlvbiBvcHRpb24gb2YgdGhlIGxldmVsIG9mIGRldGFpbCBpbiByZXBvcnRpbmcKK3JlcG9ydGVyX2RldGFpbF9sZXZlbD1EZXRhaWxzdHVmZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBMZXZlbCBvZiBkZXRhaWw6IHN0YW5kYXJkCityZXBvcnRlcl9kZXRhaWxfbm9ybWFsPU5vcm1hbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdDogSFRNTAorcmVwb3J0ZXJfZm9ybWF0X2h0bWw9SFRNTAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdCB0eXBlOiBwbGFpbiB0ZXh0CityZXBvcnRlcl9mb3JtYXRfdGV4dD1UZXh0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBbiBvdXRwdXQgZm9ybWF0OiBYTUwKK3JlcG9ydGVyX2Zvcm1hdF94bWw9WE1MCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIGZpbGUgbG9jYXRpb24gb2YgdGhlIHJlc291cmNlIGJ1bmRsZSB0byByZXBvcnQgb24KK3JlcG9ydGVyX2lucHV0X2J1bmRsZT1SZXNvdXJjZW5iXHUwMEZDbmRlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIHRoYXQgcmVwb3J0aW5nIHdpbGwgaGFwcGVuIGF0IGEgc3BlY2lpZmllZCB0aW1lIG9mIGRheS4gRm9sbG93ZWQgYnkgYSB0aW1lIGFuZCBkYXkgb3B0aW9uLgorcmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZD1CZXJpY2h0ZW5cIHVtCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2Ygc2VxdWVudGlhbCByZXBvcnRpbmcgcGF1c2VkIGZvciBhIGRlZmluZWQgaW50ZXJ2YWwgYmV0d2VlbiByZXBvcnRpbmcuIEltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGFuZCBhIHVuaXQgb2YgbWVhc3VyZSBvZiB0aW1lCityZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsPUJlcmljaHRlblwgYWxsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBEYXRlL1RpbWUgb2YgbGFzdCByZXBvcnQgZ2VuZXJhdGlvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSB0aW1lIG9mIHRoZSBsYXN0IHJlcG9ydAorcmVwb3J0ZXJfbGFzdF9yZXBvcnQ9TGV0enRlclwgQmVyaWNodFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gRGF0ZS9UaW1lIG9mIG5leHQgcmVwb3J0CisjIEBjb21tZW50IEluZGljYXRpb24gb2Ygd2hlbiB0aGUgbmV4dCByZXBvcnQgd2lsbCBiZSBnZW5lcmF0ZWQKK3JlcG9ydGVyX25leHRfcmVwb3J0PU5cdTAwRTRjaHN0ZXJcIEJlcmljaHRcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIHJlcG9ydHMgYXJlIHBsYWNlZAorcmVwb3J0ZXJfb3V0cHV0X2RpcmVjdG9yeT1BdXNnYWJldmVyemVpY2huaXNcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUgZm9yIGEgcGFydGljdWxhciBvdXRwdXQgZm9ybWF0CityZXBvcnRlcl9vdXRwdXRfZmlsZT1EYXRlaW5hbWVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIHNldHRpbmcgaW50ZXJ2YWwgb2YgcmVwb3J0aW5nCityZXBvcnRlcl9wYW5lbF9pbnRlcnZhbD1CZXJpY2h0c2ludGVydmFsbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIGNvbmZpZ3VyYWJsZSBvcHRpb25zIG9mIHRoZSByZXBvcnRpbmcKK3JlcG9ydGVyX3BhbmVsX29wdGlvbnM9QmVyaWNodHNvcHRpb25lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU3VicGFuZWwgdGl0bGUgZm9yIGNob29zaW5nIG91dHB1dCBmb3JtYXRzIGZvciB0aGUgcmVwb3J0cworcmVwb3J0ZXJfcGFuZWxfb3V0cHV0X2Zvcm1hdD1BdXNnYWJlZm9ybWF0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBmb3IgaW5kaWNhdGlvbiBvZiBydW5uaW5nIHN0YXR1cyBvZiB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX3BhbmVsX3N0YXR1cz1TdGF0dXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU2hvcnQgdGl0bGUgZm9yIHNlbGVjdGluZyBhIGNvZGUgc2NhbiBjb25maWd1cmF0aW9uIGZpbGUKK3JlcG9ydGVyX3BlcmZvcm1fc2Nhbj1Db2RlXCBTY2FuXCBEYXRlaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUXVpY2sgaW5kaWNhdGlvbiB0aGF0IHRoZSByZXBvcnRlciBpcyBhY3RpdmUgKHBlcmhhcHMgd2FpdGluZykKK3JlcG9ydGVyX3N0YXR1c19ydW5uaW5nPUdlc3RhcnRldAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDYtMjkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUXVpY2sgc3RhdHVzIGluZGljYXRpb24gdGhhdCB0aGUgcmVwb3J0ZXIgaXMgbm90IGFjdGl2ZQorcmVwb3J0ZXJfc3RhdHVzX3N0b3BwZWQ9R2VzdG9wcHQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGRheXMgb3B0aW9uCityZXBvcnRlcl90aW1lX2RheXM9VGFnZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZXZlcnkgZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9ldmVyeWRheT1KZWRlblwgVGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBmcmlkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX2ZyaWRheT1GcmVpdGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBob3VycyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfaG91cnM9U3R1bmRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgbWludXRlcyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfbWludXRlcz1NaW51dGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBtb25kYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX21vbmRheT1Nb250YWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHNhdHVyZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9zYXR1cmRheT1Tb25uYWJlbmQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHN1bmRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfc3VuZGF5PVNvbm50YWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHRodXJzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV90aHVyc2RheT1Eb25uZXJzdGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCB0dWVzZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV90dWVzZGF5PURpZW5zdGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCB3ZWRuZXNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3dlZG5lc2RheT1NaXR0d29jaAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTcgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkCisjIEBjb21tZW50IFRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbgorcmVzb3VyY2VfYnVuZGxlX3JlcG9ydGVyPVJCUmVwb3J0ZXIKKworIworIyBAZ3JvdXAgU2VhcmNoIGFuZCBSZXBsYWNlCisjCisjIEBncm91cENvbW1lbnQgUmVzb3VyY2VzIGZvdW5kIG9uIHRoZSBzZWFyY2ggdGFiIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmFsIHNlYXJjaCB0aXRsZQorc2VhcmNoPVN1Y2hlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIG1ha2luZyB0aGUgc2VhcmNoIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdAorc2VhcmNoX2Nhc2Vfc2Vuc2l0aXZlPUdyb1x1MDBERi0vS2xlaW5zY2hyZWlidW5nXCBiZWFjaHRlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggb3B0aW9uIGZvciBzZWFyY2hpbmcgdGhyb3VnaCByZXNvdXJjZSBjb21tZW50cworc2VhcmNoX2NvbW1lbnRzPUtvbW1lbnRhcmUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCB0byBzZWFyY2ggb24KK3NlYXJjaF9maW5kPVN1Y2hlblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBzZWxlY3Rpb24gZm9yIHNlYXJjaGluZyBvcHRpb24gdGhyb3VnaCByZXNvdXJjZSBrZXlzCitzZWFyY2hfa2V5cz1TY2hsXHUwMEZDc3NlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMDkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2YgdGhlIGZpZWxkIGZvciBlbnRlcmluZyB0ZXh0IGZvciByZXBsYWNpbmcgdGhlIGZvdW5kIHZhbHVlCitzZWFyY2hfcmVwbGFjZT1FcnNldHplblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIHNlYXJjaGluZyB0aHJvdWdoIHRyYW5zbGF0aW9uIHZhbHVlcworc2VhcmNoX3ZhbHVlcz1cdTAwRENiZXJzZXR6dW5nZW4KKworIworIyBAZ3JvdXAgVGFicworIworIyBAZ3JvdXBDb21tZW50IEdVSSBUYWJzIGluIHRoZSBtYWluIHBhbmVsCisKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdVSSBUYWIgZm9yIFRhYmJlZCBQYW5lIG92ZXIgdGhlIHRyZWUgc2hvd2luZyBhIHNpbmdsZSByZXNvdXJjZSBidW5kbGUgYW5kIGl0cyB2YXJpb3VzIGZpbGVzCit0YWJfYnVuZGxlPUJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRhYiBmb3IgdGhlIGRpc3BsYXkgb2YgdGhlIHZhcmlvdXMgZ3JvdXBzIGluIHRoZSBidW5kbGUKK3RhYl9ncm91cHM9R3J1cHBlbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR1VJIFRhYiBmb3IgdGFiIG92ZXIgdHJlZSBzaG93aW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK3RhYl9wcm9qZWN0PVByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBhbmUgYWxsb3dpbmcgZm9yIHNlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbnMKK3RhYl9zZWFyY2g9U3VjaGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUYWIgZm9yIHN0YXRpc3RpY3MgZGlzcGxheSBmb3IgZWl0aGVyIHRoZSBSZXNvdXJjZSBCdW5kbGUgYXMgYSB3aG9sZSBvciBwYXJ0aWN1bGFyIGxhbmd1YWdlIGZpbGVzCit0YWJfc3RhdGlzdGljcz1TdGF0aXN0aWsKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUYWIgZm9yIGRpc3BsYXkgb2YgdW50cmFuc2xhdGVkIGl0ZW1zIGluIHRoZSBkaWZmZXJlbnQgbGFuZ3VhZ2UgZmlsZXMKK3RhYl91bnRyYW5zbGF0ZWQ9TmljaHRcIFx1MDBGQ2JlcnNldHp0CisKKyMKKyMgQGdyb3VwIFRyYW5zbGF0aW9uIEZpbGUgR3JvdXBzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCAKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IENvbHVtbiB0aXRsZSBmb3IgaXRlbSBjb21tZW50cworbGFuZ3VhZ2Vncm91cF9jb2x1bW5fY29tbWVudD1Lb21tZW50YXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBDb2x1bW4gdGl0bGUgZm9yIGl0ZW0ncyByZXNvdXJjZSBrZXkKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX2tleT1SZXNvdXJjZS1TY2hsXHUwMEZDc3NlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IAorbGFuZ3VhZ2Vncm91cF9jb2x1bW5fdHJhbnNsYXRpb249XHUwMERDYmVyc2V0enVuZworCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFN0YXRpc3RpY3MgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSBzdGF0aXN0aWNzIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IEEgY29tbWVudCBnaXZlbiB0byB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19jb21tZW50PUtvbW1lbnRhclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIGNvdW50cnkgYmVpbmcgZGVzY3JpYmVkIGJ5IHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2NvdW50cnk9TGFuZFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfaXRlbV9jb3VudD1BbnphaGxcIFJlc291cmNlblwgaW5cIGRlclwgUmVzb3VyY2VuZGF0ZWlcIGZcdTAwRkNyXCBkaWVzZVwgU3ByYWNoZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIGxhbmd1YWdlIGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19sYW5ndWFnZT1TcHJhY2hlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgbmFtZSBvZiBhIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgdGhlIHRyYW5zbGF0aW9ucyBpbiB0aGlzIGxhbmd1YWdlIGZpbGUKK2xhbmd1YWdlc3RhdHNfbWFuYWdlcj1SZXNvdXJjZW5tYW5hZ2VyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBNYXJ0aW4gR2VybGFjaAorIyBAY29tbWVudCBUaGUgbmFtZSBnaXZlbiB0byB0aGUgbGFuZ3VhZ2UgZmlsZQorbGFuZ3VhZ2VzdGF0c190aXRsZT1UaXRlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgTnVtYmVyIG9mIHJlc291cmNlcyBuZWVkaW5nIHRyYW5zbGF0aW9uIGluIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX3RyYW5zbGF0aW9uX2NvdW50PUFuemFobFwgbmljaHRcIFx1MDBGQ2JlcnNldHp0ZXJcIFJlc291cmNlblwgaW5cIGRpZXNlclwgRGF0ZWlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBsYW5ndWFnZS9yZWdpb24gdmFyaWFudCBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdmFyaWFudD1WYXJpYW50ZVw6CisKKyMKKyMgQGdyb3VwIFRyYW5zbGF0aW9uIEZpbGUgVW50cmFuc2xhdGVkIEl0ZW1zIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCAKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBjb2x1bW4gdGl0bGUgZm9yIGdyb3VwIG5hbWVzIG9mIGl0ZW1zIGluIHRoZSByb3dzCitsYW5ndWFnZXVudHJhbnNfY29sdW1uX2dyb3VwPUdydXBwZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIE1hcnRpbiBHZXJsYWNoCisjIEBjb21tZW50IFRoZSBrZXkgb2YgdGhlIGl0ZW0gYSByb3cKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fa2V5PVJlc291cmNlLVNjaGxcdTAwRkNzc2VsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgTWFydGluIEdlcmxhY2gKKyMgQGNvbW1lbnQgVGhlIHRyYW5zbGF0ZWQgdmFsdWUgb2YgYW4gaXRlbSBpbiBhIHJvdworbGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl90cmFuc2xhdGlvbj1cdTAwRENiZXJzZXR6dW5nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMi0wOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGNvdmVyaW5nIGJ1dHRvbnMgdGhhdCBhcHBseSB0byBhIHNlbGVjdGVkIHJlc291cmNlIGZyb20gYSB0YWJsZSBvZiByZXNvdXJjZXMKK2xhbmd1YWdldW50cmFuc19zZWxlY3RlZF9yZXNvdXJjZXNfb3B0aW9ucz1PcHRpb25lblwgZlx1MDBGQ3JcIGRpZVwgYXVzZ2V3XHUwMEU0aGx0ZW5cIFJlc291cmNlbgpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXJfZmkucHJvcGVydGllcyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyX2ZpLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmMzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3VuaWNvZGV0b29scy9jb20vaWJtL3JibS9yZXNvdXJjZXMvUkJNYW5hZ2VyX2ZpLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMjE2IEBACisjIEBmaWxlICAgICAgICAgIFJCTWFuYWdlcgorIyBAZmlsZUVuY29kaW5nICBmaQorIyBAZmlsZUxhbmd1YWdlICBGaW5uaXNoCisjIEBmaWxlQ291bnRyeSAgIAorIyBAZmlsZVZhcmlhbnQgICAKKyMgQGZpbGVNYW5hZ2VyICAgSnVzc2kgTXlsbHlt5GtpCisjIEBmaWxlQ29tbWVudCAgIFRoaXMgaXMgdGhlIEZpbm5pc2ggdHJhbnNsYXRpb24gb2YgdGhlIFJCTWFuYWdlciBHVUkuCisKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBHcm91cHMgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9uIEl0ZW1zIGZvciB0aGUgQmFzZSBDbGFzcyBHcm91cCB0YWJiZWQgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNi0yNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9jb21tZW50PVJlc3Vyc3NpcnlobVx1MDBFNG5cIGtvbW1lbnR0aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9uYW1lPVJlc3Vyc3NpcnlobVx1MDBFNG5cIG5pbWlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9vcHRpb25zPVJlc3Vyc3NpcnlobVx1MDBFNG5cIHRvaW1pbm5vdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9pdGVtX29wdGlvbnM9UmVzdXJzc2luXCB0b2ltaW5ub3QKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBTdGF0aXN0aWNzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBBbGwgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGFwcGVhcmluZyBvbiB0aGUgc3RhdGlzdGljcyBwYW5lIGZvciB0aGUgYmFzZSBjbGFzcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2R1cGxpY2F0ZXNfY291bnQ9UmVzdXJzc2luXCBrb3Bpb2lkZW5cIG1cdTAwRTRcdTAwRTRyXHUwMEU0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZmlsZV9jb3VudD1SZXN1cnNzaXRpZWRvc3RvamVuXCBtXHUwMEU0XHUwMEU0clx1MDBFNFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2dyb3VwX2NvdW50PVJlc3Vyc3NpcnlobWllblwgbVx1MDBFNFx1MDBFNHJcdTAwRTRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19ncm91cF9ncm91cD1SZXN1cnNzaXJ5aG1cdTAwRTR0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2l0ZW1fY291bnQ9UmVzdXJzc2llblwgbVx1MDBFNFx1MDBFNHJcdTAwRTRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19pdGVtX2dyb3VwPVJlc3Vyc3NpdAorCisjCisjIEBncm91cCBCYXNlIENsYXNzIFVudHJhbnNsYXRlZCBJdGVtcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGFwcGVhcmluZyBvbiB0aGUgQmFzZSBDbGFzcyBVbnRyYW5zbGF0ZWQgSXRlbXMgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIGZpbGUgYmVpbmcgdmlld2VkCitiYXNldW50cmFuc19maWxlPVRpZWRvc3RvXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHJlc291cmNlIGl0ZW1zIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBmaWxlCitiYXNldW50cmFuc191bnRyYW5zX2NvdW50PUtcdTAwRTRcdTAwRTRudFx1MDBFNG1cdTAwRTR0dFx1MDBGNm1pZW5cIHJlc3Vyc3NpZW5cIG1cdTAwRTRcdTAwRTRyXHUwMEU0XDoKKworIworIyBAZ3JvdXAgQnV0dG9uIE5hbWVzCisjCisjIEBncm91cENvbW1lbnQgVGhlIG5hbWVzIGRpc3BsYXllZCBvbiB0aGUgdmFyaW91cyBidXR0b25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZmlsZV9ncm91cD1SZXN1cnNzaXRpZWRvc3RvdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBsYW5ndWFnZSBmaWxlCitidXR0b25fYWRkX2ZpbGU9TGlzXHUwMEU0XHUwMEU0XCB1dXNpXCByZXN1cnNzaXRpZWRvc3RvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9maWxlX3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGdyb3VwCitidXR0b25fYWRkX2dyb3VwPUxpc1x1MDBFNFx1MDBFNFwgdXVzaVwgcmVzdXJzc2lyeWhtXHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9ncm91cF90cmlnZ2VyPXkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSB0cmFuc2xhdGlvbiBpdGVtCitidXR0b25fYWRkX3Jlc291cmNlPUxpc1x1MDBFNFx1MDBFNFwgdXVzaVwgcmVzdXJzc2kKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fYWRkX3Jlc291cmNlX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciBjYW5jZWxpbmcgYWN0aW9ucworYnV0dG9uX2NhbmNlbD1QZXJ1dXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciBhIGNob2ljZSBvciBzZWxlY3Rpb24gb3B0aW9uCitidXR0b25fY2hvb3NlPVZhbGl0c2UKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY2hvb3NlX3RyaWdnZXI9dgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBCdXR0b24gZm9yIGdlbmVyaWMgY3JlYXRpb24gb2YgZ3JvdXBzLCBpdGVtcywgZmlsZXMsIGV0Yy4KK2J1dHRvbl9jcmVhdGU9TGlzXHUwMEU0XHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgRm9yIGNyZWF0aW9uIG9mIGEgcmVzb3VyY2UgZ3JvdXAKK2J1dHRvbl9jcmVhdGVfZ3JvdXA9THVvXCB1dXNpXCByeWhtXHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV9ncm91cF90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBjcmVhdGluZyBhbiBpdGVtIHRoZW4gY29udGludWluZyBjcmVhdGluZyBtb3JlIGl0ZW1zCitidXR0b25fY3JlYXRlX21vcmU9THVvXCAmXCBKYXRrYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfbW9yZV90cmlnZ2VyPWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgcmVzb3VyY2UgdHJhbnNsYXRpb24gaXRlbQorYnV0dG9uX2NyZWF0ZV9yZXNvdXJjZT1MdW9cIHV1c2lcIHJlc3Vyc3NpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV9yZXNvdXJjZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fY3JlYXRlX3RyaWdnZXI9bAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcmVtb3ZpbmcgYSBncm91cCBhbmQgaXRzIGNvbnRlbnRzCitidXR0b25fZGVsZXRlX2dyb3VwPVBvaXN0YVwgcmVzdXJzc2lyeWhtXHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBwZXJtYW5lbnRseSByZW1vdmluZyBhIHJlc291cmNlIGZyb20gdGhlIGJ1bmRsZQorYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZT1Qb2lzdGFcIHJlc3Vyc3NpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2RlbGV0ZV9yZXNvdXJjZV90cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgR2VuZXJpYyBlZGl0IGJ1dHRvbgorYnV0dG9uX2VkaXQ9TXV1dGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgZ3JvdXAgbmFtZSBhbmQgY29tbWVudAorYnV0dG9uX2VkaXRfZ3JvdXA9TXV1dGFcIHJlc3Vyc3NpcnlobVx1MDBFNFx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgZWRpdGluZyByZXNvdXJjZSBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGtleSBhbmQgdHJhbnNsYXRpb24KK2J1dHRvbl9lZGl0X3Jlc291cmNlPU11dXRhXCByZXN1cnNzaWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fZWRpdF9yZXNvdXJjZV90cmlnZ2VyPW0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBpbml0aWF0aW5nIGFuIGltcG9ydCBvZiByZXNvdXJjZXMgZnJvbSBhbiBhbHRlcm5hdGUgc291cmNlCitidXR0b25faW1wb3J0PUhhZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9pbXBvcnRfdHJpZ2dlcj1oCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiBhbGxvd3MgYSBzZWxlY3RlZCByZXNvdXJjZSB0byBiZSBtYXJrZWQgYXMgdHJhbnNsYXRlZCB3aXRob3V0IGZ1cnRoZXIgZWRpdGluZworYnV0dG9uX21hcmtfdHJhbnNsYXRlZD1NZXJraXRzZVwgUmVzdXJzc2lcIEtcdTAwRTRcdTAwRTRubmV0eWtzaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9tYXJrX3RyYW5zbGF0ZWRfdHJpZ2dlcj1tCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBhZGRpbmcgdGhlIGN1cnJlbnQgcmVzb3VyY2UgYnVuZGxlIGluIHRoZSBtYWluIGFwcGxpY2F0aW9uIHRvIHRoZSBwcm9qZWN0CitidXR0b25fcHJvamVjdF9hZGQ9TGlzXHUwMEU0XHUwMEU0XCBUXHUwMEU0bVx1MDBFNFwgUmVzdXJzc2lrb2tvZWxtYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfYWRkX3RyaWdnZXI9bAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY2xvc2luZyB0aGUgcHJvamVjdCB3aW5kb3cKK2J1dHRvbl9wcm9qZWN0X2Nsb3NlPVN1bGplXCBQcm9qZWt0aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfY2xvc2VfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBidW5kbGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfbmV3PVV1c2lcIFByb2pla3RpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9uZXdfdHJpZ2dlcj11CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBvcGVuaW5nIGEgcHJvamVjdCBmaWxlCitidXR0b25fcHJvamVjdF9vcGVuPUF2YWFcIFByb2pla3RpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9vcGVuX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcmVtb3ZpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcHJvamVjdAorYnV0dG9uX3Byb2plY3RfcmVtb3ZlPVBvaXN0YVwgVmFsaXR0dQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfcmVtb3ZlX3RyaWdnZXI9cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY2F1c2luZyB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgYnVuZGxlIHRvIGJlIHRoZSBvbmUgYmVpbmcgZWRpdGVkIGluIHRoZSBtYWluIGFwcGxpY2F0aW9uCitidXR0b25fcHJvamVjdF9zZWxlY3Q9TXV1dGFcIFZhbGl0dHVhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9zZWxlY3RfdHJpZ2dlcj1tCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBwZXJmb3JtaW5nIGEgY29tcGxldGUgc2VhcmNoCitidXR0b25fc2VhcmNoX2ZpbmRfYWxsPUV0c2lcIEthaWtraQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9zZWFyY2hfZmluZF9hbGxfdHJpZ2dlcj1lCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBwZXJmb3JtaW5nIGNvbXBsZXRlIHNlYXJjaCBhbmQgcmVwbGFjZQorYnV0dG9uX3NlYXJjaF9yZXBsYWNlX2FsbD1NdXV0YVwgS2Fpa2tpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3NlYXJjaF9yZXBsYWNlX2FsbF90cmlnZ2VyPW0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgR2VuZXJpYyBidXR0b24gZm9yIHVwZGF0aW5nIGluZm9ybWF0aW9uCitidXR0b25fdXBkYXRlPVBcdTAwRTRpdml0XHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3VwZGF0ZV90cmlnZ2VyPXAKKworIworIyBAZ3JvdXAgRGlhbG9ncworIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9ucyB2YXJpb3VzIGRpYWxvZyBib3hlcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGFpbG9nX3RpdGxlX3ByZWZlcmVuY2VzPUFzZXR1a3NldAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHdldGhlciBvciBub3QgYSBuZXcgZmlsZSB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tIHRoZSBlbGVtZW50cyBpbiB0aGUgYmFzZSBjbGFzcworZGlhbG9nX2NoZWNrYm94X2NvcHlfZWxlbWVudHM9S29waW9pXCByZXN1cnNzaXRcIHBlcnVzdGllZG9zdG9zdGFcIHRcdTAwRTRoXHUwMEU0blwgdGllZG9zdG9vbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBJbmRpY2F0b3Igb2Ygd2V0aGVyIGFuIGl0ZW0gaXMgdHJhbnNsYXRlZCBvciBub3QKK2RpYWxvZ19jaGVja2JveF90cmFuc2xhdGVkPUtcdTAwRTRcdTAwRTRubmV0dHkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfY29tbWVudD1Lb21tZW50dGlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19jb3VudHJ5PU1hYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19jcmVhdGVkPUx1b3R1XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfY3JlYXRvcj1MdW9udXRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAezF9IFRoZSBkYXRlCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiBpbnZvbHZlZAorIyBAY29tbWVudCBUaGUgZGF0ZSBhbmQgcGVyc29uIGFzc29jaWF0ZWQgd2l0aCBhIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBhbiBpdGVtCitkaWFsb2dfZGF0ZV9wZXJzb249ezF9XCAoezB9KQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19kZWZhdWx0X2NvbW1lbnQ9S29tbWVudGluXCBvbGV0dXNhcnZvXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVmYXVsdF90cmFuc2xhdGlvbj1LXHUwMEU0XHUwMEU0bm5cdTAwRjZrc2VuXCBvbGV0dXNhcnZvXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZGVsZXRlX2ZpbGU9UG9pc3RhXCByZXN1cnNzaXRpZWRvc3RvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2RlbGV0ZV9ncm91cD1Qb2lzdGFcIHJlc3Vyc3NpcnlobVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfaXRlbT1Qb2lzdGFcIHJlc3Vyc3NpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgV2FybmluZyBkaXNwbGF5ZWQgd2hlbiBhIHVzZXIgYXNrcyBmb3IgYSBkZWxldGlvbiBvZiBhIGZpbGUuIFByb21wdHMgZm9yICdZZXMnIG9yICdObycKK2RpYWxvZ19kZWxldGVfd2FybmluZz1WYXJvaXR1c1whXCBQb2lzdG8tb3BlcmFhdGlvdGFcIGVpXCB2b2lcIHBlcnV1dHRhYS5cbkhhbHVhdGtvXCB2YXJtYXN0aVwgamF0a2FhPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19lbmNvZGluZz1FbmNvZGluZ1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfY29tbWVudD1SZXN1cnNzaXRpZWRvc3Rvblwga29tbWVudHRpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb249QmFzZVwgQ2xhc3NpblwgcmVzdXJzc2l0aWVkb3N0b3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGVzY3JpcHRpb24gb2YgRmlsZSBGaWx0ZXIgZm9yIFJCUmVwb3J0ZXIgWE1MIHNjYW4gY29uZmlndXJhdGlvbiBmaWxlcworZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uX3NjYW49WE1MXCBSQlJlcG9ydGVyXCBTY2FuXCBGaWxlcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX2luZm89VGllZG9zdG9uXCB0aWVkb3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV9tYW5hZ2VyPVJlc3Vyc3NpbWFuYWdlcmluXCBuaW1pXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZmlsZV90aXRsZT1SZXN1cnNzaXRpZWRvc3Rvblwgb3RzaWtrb1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX2dyb3VwPVJ5aG1cdTAwRTRuXCBuaW1pXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfZ3JvdXBfY29tbWVudD1SeWhtXHUwMEU0blwga29tbWVudHRpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfa2V5PVJlc3Vyc3NpblwgdHVubmlzdGVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19sYW5ndWFnZT1LaWVsaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19sb29rdXBzPUhha3VcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19tb2RpZmllZD1NdXV0ZXR0dVwgdmlpbWVrc2lcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19tb2RpZmllcj1WaWltZWlzaW5cIG11dXR0YWphXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgYSBsYW5ndWFnZSwgY291bnRyeSwgb3IgdmFyaWFudCBvZiBhIGxhbmd1YWdlIGZpbGUKK2RpYWxvZ19uYW1lPU5pbWlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBQcm9tcHRzIHRoZSB1c2VyIHRvIGVudGVyIGEgbmFtZSBmb3IgdGhlIHJlc291cmNlIGJ1bmRsZSwgYmVmb3JlIGNyZWF0aW5nIHRoYXQgYnVuZGxlCitkaWFsb2dfbmV3X2Jhc2VjbGFzcz1PbGVcIGh5dlx1MDBFNFwgamFcIHN5XHUwMEY2dFx1MDBFNFwgQmFzZVwgQ2xhc3NpblwgbmltaVwgdXVkZWxsZVwgcmVzdXJzc2lrb2tvZWxtYWxsZS4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERpYWxvZyBwb3B1cCB3aW5kb3cgdGV4dCBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yIHRoZSBuYW1lIG9mIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK2RpYWxvZ19uZXdfcHJvamVjdD1QbGVhc2VcIGVudGVyXCBhXCB0aXRsZVwgZm9yXCB5b3VyXCBuZXdcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEEgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzIG1ha2luZyBpdCB0aHJvdWdoIHRoZSBmaWx0ZXIgdXBvbiBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlCitkaWFsb2dfb3Blbl9maWxlX2ZpbHRlcj1CYXNlXCBDbGFzc2luXCByZXN1cnNzaXRpZWRvc3RvdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGlzIGlzIGEgc2VjdGlvbiBoZWFkaW5nIGZvciBzZXR0aW5nIHRoZSBBbHVlCitkaWFsb2dfcHJlZmVyZW5jZXNfQWx1ZT1BbHVlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IEFsdWVzIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGVzIGZvciB0aGUgYXBwbGljYXRpb24KK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfZGVmaW5lZD1NXHUwMEU0XHUwMEU0cml0ZWx0eVwgcmVzdXJzc2l0aWVkb3N0b2lzc2FcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9pc289SVNPXCBzdGFuZGFyZGl0XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTG9jYWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgSmF2YSBWaXJ0dWFsIE1hY2hpbmUKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGVfbWFjaGluZT1UdWV0dHVcIGtvbmV0eXlwcGlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV93YXJuaW5nPUhVT01cOlwgQWx1ZWVuXCB2YWlodG9cIGFzdHV1XCB2b2ltYWFuXCB2YXN0YVwga3VuXCBzb3ZlbGx1c1wga1x1MDBFNHlubmlzdGV0XHUwMEU0XHUwMEU0blwgdXVkZXN0YWFuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX2xvb2thbmRmZWVsPUxvb2tcIEFuZFwgRmVlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX3VzZXJuYW1lPUtcdTAwRTR5dHRcdTAwRTRqXHUwMEU0dHVubnVzXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBEZXNjcmlwdG9yIHRoYXQgZ29lcyBpbnRvIEdVSSBmaWxlIGNob29zZXIKK2RpYWxvZ19wcm9qZWN0X2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uPVJCTWFuYWdlclwgUHJvamVrdGl0aWVkb3N0b3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEZpbGUgRmlsdGVyIGRlc2NyaXB0aW9uIGZvciByZXNvdXJjZSBidW5kbGUgcHJvamVjdCBmaWxlcworZGlhbG9nX3Byb2plY3RfZmlsdGVyX2Rlc2NyaXB0aW9uPVJlc291cmNlXCBCdW5kbGVcIFByb2plY3RzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiB0aGF0IG5vIHByb2plY3QgaXMgb3BlbiwgcGxhY2VkIGluIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nIHdoZXJlIHRoZSBwcm9qZWN0IG5hbWUgd291bGQgbm9ybWFsbHkgZ28KK2RpYWxvZ19wcm9qZWN0X25vbmVfc2VsZWN0ZWQ9UHJvamVrdGlhXCBFaVwgVmFsaXR0dQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHByb2plY3QKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSB3aW5kb3cgc2hvd2luZyBhbGwgdGhlIHJlc291cmNlIGJ1bmRsZXMgaW4gYSBwcm9qZWN0CitkaWFsb2dfcHJvamVjdF90aXRsZT1Qcm9qZWt0aW5cIFJlc3Vyc3Npa29rb2VsbWF0XDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBQcm9tcHRzIHRoZSB1c2VyIGlmIHRoZXkgd291bGQgbGlrZSB0byBzYXZlIGNoYW5nZXMgYmVmb3JlIGV4aXRpbmcKK2RpYWxvZ19xdWl0X3NhdmU9SGFsdWF0a29cIHRhbGxlbnRhYVwgbXV1dG9rc2V0XCBlbm5lblwgcG9pc3R1bWlzdGE/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEEgZ2VuZXJpYyBwcm9wbXB0IHRvIGFzayB0aGUgdXNlciBpZiB0aGV5IHdpc2ggdG8gc2F2ZSBjaGFuZ2VzCitkaWFsb2dfc2F2ZT1IYWx1YXRrb1wgdGFsbGV0dGFhXCBtdXV0b2tzZXRcIHJlc3Vyc3Npa29rb2VsbWFhbj8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfc2VhcmNoX29wdGlvbnM9RXRzaW50XHUwMEU0cGFyYW1ldHJpdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ19zZWFyY2hfcGFyYW09RXRzaVwgdGVrc3RpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIHRpdGxlIG9mIHRoZSBhYm91dCBkaWFsb2cgYm94CitkaWFsb2dfdGl0bGVfYWJvdXRfcmJtYW5hZ2VyPVRpZXRvamFcIFJlc3Vyc3NpbWFuYWdlcmlzdGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGRpYWxvZyBwcm9tcHRpbmcgZm9yIGRlbGV0aW9uIG9mIGFuIGVudGlyZSByZXNvdXJjZSBncm91cAorZGlhbG9nX3RpdGxlX2RlbGV0ZV9ncm91cD1Qb2lzdGFcIFJlc3Vyc3NpcnlobVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSB3aGVuIHByb21wdGluZyB0byBkZWxldGUgYSByZXNvdXJjZQorZGlhbG9nX3RpdGxlX2RlbGV0ZV9pdGVtPVBvaXN0YVwgUmVzdXJzc2kKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZWRpdF9ncm91cD1NdXV0YVwgcmVzdXJzc2lyeWhtXHUwMEU0XHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3RpdGxlX2VkaXRfaXRlbT1NdXV0YVwgcmVzdXJzc2lhCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lcnJvcj1FcnJvcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lcnJvcl9jcmVhdGluZ19idW5kbGU9VmlyaGVcIHV1dHRhXCByZXN1cnNzaWtva29lbG1hYVwgbHVvdGFlc3NhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSB3aGVuIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUgbm90IGNyZWF0ZWQgYnkgUkJNYW5hZ2VyCitkaWFsb2dfdGl0bGVfZXJyb3Jfbm90X3JibWFuYWdlcl9mb3JtYXQ9VmlyaGVcOlwgUmVzdXJzc2l0aWVkb3N0b2FcIGVpXCB2b2lkYVwgbHVrZWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBUaXRsZSBvbiBhIHdhcm5pbmcgZGlhbG9nIHRoYXQgSS9PIG1hbGZ1bmN0aW9uZWQgb3BlbmluZyBhIGZpbGUKK2RpYWxvZ190aXRsZV9lcnJvcl9vcGVuaW5nX2ZpbGU9VGllZG9zdG9hXCBFaVwgVm9pZGFcIEF2YXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgRGlhbG9nIHRpdGxlIGZvciBhIGRpYWxvZyBib3ggZm9yIGVudGVyaW5nIHNwZWNpYWwgcGFyYW1ldGVycyBuZWVkZWQgdG8gZXhwb3J0IGEgcmVzb3VyY2UgYnVuZGxlIHRvIGphdmEgY2xhc3MgY29kZQorZGlhbG9nX3RpdGxlX2V4cG9ydF9qYXZhX29wdGlvbnM9VGFsbGV0dXNwYXJhbWV0cml0XDpcIEphdmFcIGx1b2trYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgYSBkaWFsb2cgd2l0aCBhIHByb2dyZXNzIGJhciBnb3Zlcm5pbmcgaW1wb3J0IHN0YXR1cworZGlhbG9nX3RpdGxlX2ltcG9ydF9wcm9ncmVzcz1IYXVuXCBFZGlzdHltaW5lbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgbmV3IGJ1bmRsZQorZGlhbG9nX3RpdGxlX25ld19idW5kbGU9THVvXCB1dXNpXCByZXN1cnNzaWtva29lbG1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBmaWxlCitkaWFsb2dfdGl0bGVfbmV3X2ZpbGU9THVvXCB1dXNpXCByZXN1cnNzaXRpZWRvc3RvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRpdGxlIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorZGlhbG9nX3RpdGxlX25ld19ncm91cD1MdW9cIHV1c2lcIHJlc3Vyc3NpcnlobVx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgcmVzb3VyY2UKK2RpYWxvZ190aXRsZV9uZXdfaXRlbT1MdW9cIHV1c2lcIHJlc3Vyc3NpCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUaXRsZSBvZiB0aGUgZGlhbG9nIGJveCBzaG93aW5nIHdoZW4gY3JlYXRpbmcgYSBuZXcgcHJvamVjdAorZGlhbG9nX3RpdGxlX25ld19wcm9qZWN0PU5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9wcmVmZXJlbmNlcz1Bc2V0dWtzZXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNvbmZpcm1pbmcgZXhpdCBmcm9tIGFwcGxpY2F0aW9uCitkaWFsb2dfdGl0bGVfcXVpdD1Qb2lzdHVcIFJlc3Vyc3NpbWFuYWdlcmlzdGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfc2VhcmNoPUV0c2kKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfdXNlcl9uYW1lPVN5XHUwMEY2dFx1MDBFNFwga1x1MDBFNHl0dFx1MDBFNGpcdTAwRTR0dW5udXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfdHJhbnNsYXRpb249S1x1MDBFNFx1MDBFNG5uXHUwMEY2c1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3VzZXJfbmFtZT1TeVx1MDBGNnRcdTAwRTRcIG5pbWVzaS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfdmFyaWFudD1NdXVubmVsbWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitkaWFsb2dfd2FybmluZ19kZWxldGVfZ3JvdXA9UmVzdXJzc2lyeWhtXHUwMEU0blwgcG9pc3RhbWluZW5cIHBvaXN0YWFcIG15XHUwMEY2c1wga2Fpa2tpXCByeWhtXHUwMEU0c3NcdTAwRTRcIG9sZXZhdFwgcmVzdXJzc2l0XCBweXN5dlx1MDBFNHN0aS5cIEhhbHVhdGtvXCBqYXRrYWE/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2l0ZW09UmVzdXJzc2lcIHBvaXN0ZXRhYW5cIHB5c3l2XHUwMEU0c3RpLlwgSGFsdWF0a29cIGphdGthYT8KKworIworIyBAZ3JvdXAgRXJyb3IgTWVzc2FnZXMKKyMKKyMgQGdyb3VwQ29tbWVudCAKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yPVZpcmhlCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gYWRkIGEgcmVzb3VyY2UgYnVuZGxlIHRvIGEgcHJvamVjdC4KK2Vycm9yX2FkZGluZ19wcm9qZWN0X2J1bmRsZT1BblwgZXJyb3JcIG9jY3VycmVkXCB0cnlpbmdcIHRvXCBhZGRcIHRoZVwgUmVzb3VyY2VcIEJ1bmRsZVwgeW91XCBzZWxlY3RlZC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl9iYXNlY2xhc3Nfd2hpdGVzcGFjZT1SZXN1cnNzaW5cIG5pbWVzc1x1MDBFNFwgZWlcIHZvaVwgb2xsYVwgdlx1MDBFNGxpbHlcdTAwRjZudGlcdTAwRTQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfYnVuZGxlX25vdF9jcmVhdGVkPVJlc3Vyc3Npa29rb2VsbWFhXCBlaVwgbHVvdHUuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2ZpbGU9UmVzdXJzc2l0aWVkb3N0b25cIGx1b250aVwgZXBcdTAwRTRvbm5pc3R1aS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl9jcmVhdGVfZ3JvdXA9UmVzdXJzc2lyeWhtXHUwMEU0blwgbHVvbnRpXCBlcFx1MDBFNG9ubmlzdHVpLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX2NyZWF0ZV9pdGVtPVJlc3Vyc3NpblwgbHVvbnRpXCBlcFx1MDBFNG9ubmlzdHVpLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIHdoZW4gY3JlYXRpbmcgYSBwcm9qZWN0CitlcnJvcl9jcmVhdGluZ19wcm9qZWN0PUFuXCBlcnJvclwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgY3JlYXRlXCBhXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEB7MH0gVGhlIG1lc3NhZ2UgZnJvbSBhbiBJT0V4Y2VwdGlvbiB0aGF0IGlzIHRocm93bgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhIGZpbGUKK2Vycm9yX2RlbGV0aW5nPVRpZWRvc3RvYVwgezB9XCBlaVwgdm9pdHVcIHBvaXN0YWEuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgQW4gZXJyb3IgdGhhdCBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gZGVsZXRlIGEgZmlsZSwgYnV0IHRoZSB2aXJ0dWFsIG1hY2hpbmUgY2FuIG5vdCBkbyBzbworZXJyb3JfZGVsZXRpb25fbm90X3Bvc3NpYmxlPVRpZWRvc3RvYVwgZWlcIHZvaXR1XCBwb2lzdGFhLlwgVGllZG9zdG9cIG9uXCBzdW9qYXR0dS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIGZvciBleHBvcnRpbmcgcmVzb3VyY2UgYnVuZGxlcworZXJyb3JfZXhwb3J0PVJlc3Vyc3NpdGllZG9zdG9uXCB0YWxsZXR1c1wgZXBcdTAwRTRvbm5pc3R1aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX2ludGVybmFsPVNpc1x1MDBFNGluZW5cIHZpcmhlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfbW9kaWZ5X2ZpbGU9UmVzdXJzc2l0aWVkb3N0b25cIG11dXRvc1wgZXBcdTAwRTRvbm5pc3R1aS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfZ3JvdXA9UmVzdXJzc2lyeWhtXHUwMEU0blwgbXV1dG9zXCBlcFx1MDBFNG9ubmlzdHVpLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9pdGVtPVJlc3Vyc3NpblwgbXV1dG9zXCBlcFx1MDBFNG9ubmlzdHVpLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX25vX2J1bmRsZV9mb3JfZmlsZT1BdmFhXCB0YWlcIGx1b1wgdXVzaVwgcmVzdXJzc2lrb2tvZWxtYVwgZW5zaW4sXCBzaXR0ZW5cIHZvaXRcIGx1b2RhXCB1dWRlblwgcmVzdXJzc2l0aWVkb3N0b24uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3Jfbm9fYnVuZGxlX2Zvcl9ncm91cD1BdmFhXCB0YWlcIGx1b1wgdXVzaVwgcmVzdXJzc2lrb2tvZWxtYVwgZW5zaW4sXCBzaXR0ZW5cIHZvaXRcIGx1b2RhXCB1dWRlblwgcmVzdXJzc2lyeWhtXHUwMEU0bi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB0aGUgdXNlciB0cmllcyB0byBjcmVhdGUgYSByZXNvdXJjZSwgd2l0aG91dCBhbiBvcGVuIHJlc291cmNlIGJ1bmRsZQorZXJyb3Jfbm9fYnVuZGxlX2Zvcl9pdGVtPUF2YWFcIHRhaVwgbHVvXCB1dXNpXCByZXN1cnNzaWtva29lbG1hXCBlbnNpbixcIHNpdHRlblwgdm9pdFwgbHVvZGFcIHV1ZGVuXCByZXN1cnNzaW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorZXJyb3Jfbm9fa2V5X3JlcGxhY2U9S29ydmFhLXRvaW1pdG9cIGVpXCB2YWlrdXRhXCByZXN1cnNzaWF2YWltaWluLlwgTXV1dFwga29ydmF1a3NldFwgdGVoZFx1MDBFNFx1MDBFNG4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiB0aGF0IFJCTWFuYWdlciBjYW4gbm90IHJlYWQgdGhlIGZpbGUgYXMgY3JlYXRlZCBieSBSQk1hbmFnZXIKK2Vycm9yX25vdF9yYm1hbmFnZXJfZm9ybWF0PVZhbGl0dHVcIHJlc3Vyc3NpdGllZG9zdG9cIGVpXCBvbGVcIFJCTWFuYWdlcmluXCBsdW9tYVwgdGFpXCB0aWVkb3N0b1wgb25cIHZpb2l0dHVudXQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHdvdWxkIG5vdCBvcGVuCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2Ugb2NjdXJpbmcgb24gYW4gSS9PIGVycm9yIHRyeWluZyB0byBvcGVuIGEgZmlsZQorZXJyb3Jfb3BlbmluZ19maWxlPVRpZWRvc3RvYVwgezB9XCBlaVwgdm9pdHVcIGF2YXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gUkJNYW5hZ2VyIGVuY291bnRlcnMgYW4gZXJyb3Igd3JpdGluZyBwcmVmZXJlbmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0KK2Vycm9yX3ByZWZlcmVuY2VzX3NhdmU9QXNldHVzdGVuXCB0YWxsdHVzXCBlcFx1MDBFNG9ubmlzdHVpLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZAorIyBAY29tbWVudCBBIG1lc3NhZ2UgcHJlc2VudGVkIHRvIHRoZSB1c2VyIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGluIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlCitlcnJvcl9zYXZpbmc9UmVzdXJzc2lrb2tvZWxtYW5cIHRhbGxldHVrc2Vzc2FcIHRhcGFodHVpXCB2aXJoZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdlbmVyYWwgZXJyb3IgbWVzc2FnZSB3aGVuIHNhdmluZyBhIHByb2plY3QKK2Vycm9yX3NhdmluZ19wcm9qZWN0PUFuXCBlcnJvclwgd2FzXCBlbmNvdW50ZXJlZFwgdHJ5aW5nXCB0b1wgc2F2ZVwgdGhlXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0LgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTdWdnZXN0IHRyeWluZyB0byBpbXBvcnQgdGhlIHJlc291cmNlIGJ1bmRsZSBpbnN0ZWFkIG9mIG9wZW5pbmcgaXQuCitlcnJvcl9zdWdnZXN0X2ltcG9ydF9wcm9wZXJ0aWVzPVlyaXRcdTAwRTRcIHJlc3Vyc3NpdGllZG9zdG9uXCBoYWt1YVwgYXZhdWtzZW5cIHNpamFzdGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCitlcnJvcl90cnlfYWdhaW5fZmlsZT1TeVx1MDBGNnRcdTAwRTRcIHV1ZGV0XCBlbmNvZGluZy1hcnZvdFwgamFcIHlyaXRcdTAwRTRcIHNpdHRlblwgdXVkZXN0YWFuLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9ncm91cD1Zcml0XHUwMEU0XCB1dWRlc3RhYW5cIHRvaXNlbGxhXCByZXN1cnNzaXJ5aG1cdTAwRTRuXCBuaW1lbGxcdTAwRTQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2l0ZW09WXJpdFx1MDBFNFwgdXVkZXN0YWFuXCB0b2lzZWxsYVwgcmVzdXJzc2luXCBuaW1lbGxcdTAwRTQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFZhbHVlIGluc2VydGVkIGludG8gdGFibGUgY2VsbHMgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJlZAordGFibGVfY2VsbF9lcnJvcj0qVmlyaGUqCisKKyMKKyMgQGdyb3VwIEV4cG9ydAorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBkZWFsaW5nIHdpdGggZXhwb3J0IG9wdGlvbnMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IE9wdGlvbiBmb3IgdGhlIHBhcmFtZXRlciBmb3IgY3JlYXRlZCBhIHByb3RlY3RlZCBjbGFzcworZXhwb3J0X2phdmFfY2xhc3NfcHJvdGVjdGVkPUx1b1wgc3VvamF0dHVcIGx1b2trYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIHNldHRpbmcgdGhlIGNyZWF0ZWQgY2xhc3MgYXMgcHVibGljCitleHBvcnRfamF2YV9jbGFzc19wdWJsaWM9THVvXCBqdWxraW5lblwgbHVva2thCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgT3B0aW9uIGZvciBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHByb3RlY3RlZCBtZXRob2RzIGluIHRoZSBqYXZhIGNsYXNzCitleHBvcnRfamF2YV9tZXRob2RzX3Byb3RlY3RlZD1MdW9cIHN1b2phdHR1XCBtZXRvZGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBPcHRpb24gZm9yIHBhcmFtZXRlciBmb3IgY3JlYXRpbmcgcHVibGljIG1ldGhvZHMKK2V4cG9ydF9qYXZhX21ldGhvZHNfcHVibGljPUx1b1wganVsa2luZW5cIG1ldG9kaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IFRpdGxlIG9mIGEgY2hlY2sgYm94IGZvbGxvd2VkIGJ5IGEgdGV4dCBmaWVsZCBmb3Igc3BlY2lmeWluZyB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYSBwYWNrYWdlIGluIHRoZSBnZW5lcmF0ZWQgamF2YSBjbGFzcyBhbmQgd2hhdCB0aGUgcGFja2FnZSBzaG91bGQgYmUgY2FsbGVkCitleHBvcnRfamF2YV9wYWNrYWdlPUFubmFcIHBha2V0aW5cIG5pbWlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IFRleHQgcGxhY2VkIGluIGEgbGFiZWwgYXQgdGhlIHRvcCBvZiB0aGUgZGlhbG9nIGJveCBmb3Igc3BlY2lmeWluZyBwYXJhbWV0ZXJzIGNvbmNlcm5pbmcgdGhlIGV4cG9ydCBvZiByZXNvdXJjZSBidW5kbGVzIGludG8gYSBqYXZhIGNsYXNzCitleHBvcnRfamF2YV90aXRsZT1Bbm5hXCBzZXVyYWF2YXRcIHBhcmFtZXRyaXRcIEphdmEtbHVva2FsbGVcOgorCisjCisjIEBncm91cCBHZW5lcmFsCisjCisjIEBncm91cENvbW1lbnQgU29tZSBpdGVtcyB0aGF0IGFyZSBjb21tb24gYWNjcm9zcyBncm91cHMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgZmlsZSBvciBjbGFzcyBjb21wb3NlZCBvZiB0aGUgZGVmYXVsdCB0cmFuc2xhdGlvbnMgZm9yIHRoZSBidW5kbGUKK2Jhc2VjbGFzcz1CYXNlXCBDbGFzcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDQtMDYtMjkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEdlb3JnZQorIyBAY29tbWVudCBUaGlzIGlzIHRoZSBsZWdhbCBjb3B5cmlnaHQgbm90aWNlCitjb3B5cmlnaHQ9KEMpXCBDb3B5cmlnaHRcIElCTVwgQ29ycC5cIDIwMDAtMjAwNFwgLVwgS2Fpa2tpXCBvaWtldWRldFwgcGlkXHUwMEU0dGV0dHkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VybmVyYWwgdXNlIGZvciBmaWxlIGRpcmVjdG9yaWVzCitkaXJlY3Rvcnk9SGFrZW1pc3RvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorZ3JvdXBzPVJ5aG1cdTAwRTR0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBuYW1lIG9mIHRoZSBpbWFnZSBmaWxlIGluIHRoZSAnSW1hZ2VzJyBkaXJlY3RvcnkgdGhhdCByZXByZXNlbnRzIHRoZSBsb2dvIHNlZW4gYXQgdGhlIHRvcCBvZiB0aGUgYXBwbGljYXRpb24KK2xvZ29fZmlsZW5hbWU9VGl0bGVMb2dvX3RyYW5zcGFyZW50LmdpZgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVHJlZSBub2RlIHRpdGxlIHdoZW4gdmlld2luZyBhIHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgcHJvamVjdCB2aWV3IHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIHByb2plY3QKK25vX3Byb2plY3Q9RGVmYXVsdFwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgVHJlZSBub2RlIHRpdGxlIGRlZmF1bHRlZCB0byB3aGVuIG5vIHJlc291cmNlIGJ1bmRsZSBvciBwcm9qZWN0IGhhcyBiZWVuIG9wZW5lZCBieSB0aGUgdXNlcgorbm9fcHJvamVjdF9idW5kbGU9Tm9cIFByb2plY3RcIG9yXCBSZXNvdXJjZVwgQnVuZGxlXCBPcGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSB0b3AgdHJlZSBub2RlIHRpdGxlLCB3aGVuIG5vIHJlc291cmNlIGJ1bmRsZSBoYXMgYmVlbiBvcGVuZWQgb3IgY3JlYXRlZAorbm9fcmVzb3VyY2VfYnVuZGxlPVJlc3Vyc3Npa29rb2VsbWFhXCBlaVwgb2xlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbm9uZT1FaVwgb2xlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW1ha2kKKyMgQGNvbW1lbnQgUHJvamVjdCB0YWJsZSBjb2x1bW4gbmFtZSAtIExvY2F0aW9uIG9mIGEgcmVzb3VyY2UgYnVuZGxlCitwcm9qZWN0X3RhYmxlX2ZpbGVfbG9jYXRpb249VGllZG9zdG9uXCBTaWphaW50aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IFRhYmxlIENvbHVtbiBOYW1lIGZvciByZXNvdXJjZSBidW5kbGUgbmFtZQorcHJvamVjdF90YWJsZV9yZXNvdXJjZV9idW5kbGU9UmVzdXJzc2lrb2tvZWxtYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBBbiBhYmJyZXZpYXRlZCBuYW1lIG9mIHRoaXMgYXBwbGljYXRpb24KK3JibWFuYWdlcj1SQk1hbmFnZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDA0LTA2LTI5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBHZW9yZ2UKKyMgQGNvbW1lbnQgCityYm1hbmFnZXJfY29udGFjdD1UZWtpalx1MDBFNFw6XCBKYXJlZFwgSmFja3NvblwgJlwgR2VvcmdlXCBSaG90ZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIGZ1bGwgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uCityZXNvdXJjZV9idW5kbGVfbWFuYWdlcj1SZXN1cnNzaW1hbmFnZXJpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAordGFibGVfY29sdW1uX2Vycm9yPVZpcmhlXCB0YXVsdWtvblwgc2FyYWtrZWVzc2EKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQHswfSAKKyMgQGNvbW1lbnQgTm9kZSB0aXRsZSwgdW5kZXIgd2hpY2ggYWxsIGZpbGVzIG9mIHRoZSBzYW1lIGNvdW50cnksIGxhbmd1YWdlIHJlc2lkZQordHJlZV9jb3VudHJ5X25vZGU9TWFha29vZGlcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEB7MH0gTGFuZ3VhZ2UgRW5jb2RpbmcKKyMgQGNvbW1lbnQgVGhlIG5vZGUgYmVsb3cgd2hpY2ggbGFuZ3VhZ2VzIG9mIG9uZSBlbmNvZGluZyBhcmUgZ3JvdXBlZAordHJlZV9sYW5ndWFnZV9ub2RlPUtpZWxpa29vZGlcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAordHJlZV92YXJpYW50X25vZGU9TXV1bm5lbG1pYVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBuYW1lIGFzc2lnbmVkIGFzIGEgdXNlciBuYW1lIHdoZW4gdGhlIHVzZXIgbmFtZSBpcyBub3Qgc3BlY2lmaWVkCit1bmtub3duX3VzZXI9VHVubmlzdGFtYXRvbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK3VudGl0bGVkPUVpXCBuaW1lXHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAordW50cmFuc2xhdGVkX2l0ZW1zPUtcdTAwRTRcdTAwRTRudFx1MDBFNG1cdTAwRTR0dFx1MDBGNm1cdTAwRTR0XCByZXN1cnNzaXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQHswfSBUaGUgdmVyc2lvbiBudW1iZXIKKyMgQGNvbW1lbnQgVGhlIHZlcnNpb24gb2YgdGhpcyBhcHBsaWNhdGlvbgordmVyc2lvbj1WZXJzaW9cIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBnZW5lcmFsIHVzZSBXYXJuaW5nCit3YXJuaW5nPVZhcm9pdHVzCisKKyMKKyMgQGdyb3VwIEltcG9ydAorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBkZWFsaW5nIHdpdGggaW1wb3J0IG9wdGlvbnMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZmlsZSBjaG9vc2VyIGZvciBjaG9vc2luZyBUTVggZmlsZXMKK2ltcG9ydF9UTVhfZmlsZV9kZXNjcmlwdGlvbj1UTVgtdGllZG9zdG90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gVE1YIFhNTCBmaWxlcworaW1wb3J0X1RNWF90aXRsZT1UTVgtdGllZG9zdG9uXCBoYWt1CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IFRpdGxlIGZvciB0aGUgZmlsZSBjaG9vc2VyIGZvciBjaG9vc2luZyBYTElGRiAoLnhsZikgZmlsZXMKK2ltcG9ydF9YTEZfZmlsZV9kZXNjcmlwdGlvbj1YTElGRi10aWVkb3N0b3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgRGlhbG90IHRpdGxlIGZvciBpbXBvcnRpbmcgZnJvbSBYTElGRiAoLnhsZikgZmlsZXMKK2ltcG9ydF9YTEZfdGl0bGU9WExJRkYtdGllZG9zdG9uXCBoYWt1CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGNvbmZsY2l0cyBvbiBhIGNhc2UgYnkgY2FzZSBiYXNpcworaW1wb3J0X2NvbmZsaWN0X3Byb21wdD1LeXN5XCBqb2thaXNlblwgb25nZWxtYW5cIGtvaGRhbGxhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBzcGVjaWZ5aW5nIHdoZXRoZXIgYSBncm91cCBmb3VuZCBpbiB0aGUgdGFyZ2V0IGJ1dCBub3QgZm91bmQgaW4gdGhlIGFjdGl2ZSByZXNvdXJjZSBidW5kbGUgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSBvciBub3QKK2ltcG9ydF9kZWZhdWx0X2dyb3VwX2NyZWF0aW9uPUx1b1wgcmVzdXJzc2lyeWhtXHUwMEU0dFwgam9pdGFcIGVpXCBvbGVcIG55a3lpc2Vzc1x1MDBFNFwgdGllZG9zdG9zc2EKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0b2luIGZvciBtYXJraW5nIHRoZSBpbmNvbWluZyB2YWx1ZXMgYXMgdHJhbnNsYXRlZCBvciBub3QKK2ltcG9ydF9kZWZhdWx0X3RyYW5zbGF0ZWQ9TWVya2l0c2VcIGtcdTAwRTRcdTAwRTRubmV0eWtzaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3Igb3B0aW9ucyBzcGVjaWZ5aW5nIHRoZSBtZXRhIGRhdGEgdG8gYmUgYXBwbGllZCB0byBpbmRpdmlkdWFsIHJlc291cmNlcyBpZiBpdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBpbXBvcnQgc291cmNlCitpbXBvcnRfZGVmYXVsdF92YWx1ZXM9T2xldHVzYXJ2b3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgbG9jYWxlIGVuY29kaW5nIG9mIHRoZSBmaWxlIGluIHF1ZXN0aW9uCisjIEBjb21tZW50IEluc3RydWN0aW9ucyBmb3IgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIHJlc29sdmUgYSBjb25mbGljdCB3aGVuIGltcG9ydGluZyByZXNvdXJjZXMgZnJvbSBhIGxvY2FsZSB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHJlc291cmNlIGJ1bmRsZQoraW1wb3J0X2ZpbGVfY29uZmxpY3RfY2hvb3NlPUVuY29kaW5nXCB7MH1cIGVpXCBvbGVcIG9sZW1hc3NhLlwgVmFsaXRzZVwga3VpbmthXCBoYWx1YXRcIHJhdGthaXN0YVwgb25nZWxtYW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggYSBuZXcgZmlsZSBpcyBnZW5lcmF0ZWQsIGJ1dCBub3QgcG9wdWxhdGVkCitpbXBvcnRfZmlsZV9jb25mbGljdF9nZW5lcmF0ZV9lbXB0eT1MdW9cIHV1c2lcIHR5aGpcdTAwRTRcIHJlc3Vyc3NpdGllZG9zdG8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgT3B0aW9uIGZvciByZXNvbHZpbmcgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggYSBuZXcgZmlsZSBpcyBnZW5lcmF0ZWQgYW5kIHBvcHVsYXRlZCB3aXRoIGFsbCB0aGUgZXhpc3RpbmcgcmVzb3VyY2VzCitpbXBvcnRfZmlsZV9jb25mbGljdF9nZW5lcmF0ZV9wb3B1bGF0ZT1MdW9cIHV1c2lcIHJlc3Vyc3NpdGllZG9zdG9cIGphXCBrb3Bpb2lcIEJhc2VcIENsYXNzaW5cIHJlc3Vyc3NpdFwgc2lpaGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggdGhlIGNvbmZsaWN0cyBhcmUgaWdub3JlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfaWdub3JlPUh5cHBcdTAwRTRcdTAwRTRcIG5paWRlblwgcmVzdXJzc2llblwgeWxpXCBqb2lkZW5cIEFsdWUtYXNldHVzXCBlaVwgb2xlXCBueWt5aXNlc3NcdTAwRTRcIHJlc3Vyc3NpdGllZG9zdG9zc2EKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHNlY3Rpb24gbGlzdGluZyBvcHRpb25zIGZvciB3aGF0IHRvIGRvIHdoZW4gYW4gaW1wb3J0ZWQgdmFsdWUgZXhpc3RzIGluIGEgbG9jYWxlIG5vdCBkZWZpbmVkIGluIHRoZSBleGlzdGluZyByZXNvdXJjZSBidW5kbGUKK2ltcG9ydF9maWxlX2NvbmZsaWN0cz1QdXV0dHV2YXRcIHJlc3Vyc3NpdGllZG9zdG90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFNlbGVjdGlvbiBvZiB0aGUgZGVmYXVsdCBncm91cC4gQSBsaXN0IG9mIGdyb3VwcyB3aWxsIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhpcyByZXNvdXJjZSBpbiBhIENvbWJvQm94CitpbXBvcnRfaW5zZXJ0X2dyb3VwPVNpam9pdGFcIHJlc3Vyc3NpcnlobVx1MDBFNFx1MDBFNG5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgdGhlIHR5cGVzIG9mIGZpbGVzIGFjY2VwdGVkIGZvciB0aGlzIGltcG9ydCB0eXBlCitpbXBvcnRfamF2YV9maWxlX2Rlc2NyaXB0aW9uPUphdmFcIExpc3RSZXNvdXJjZUJ1bmRsZVwgQmFzZVwgQ2xhc3NpdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZGlhbG9nIHByb21wdGluZyBmb3IgaW1wb3J0IGZyb20gamF2YSBjbGFzc2VzCitpbXBvcnRfamF2YV90aXRsZT1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIENsYXNzaWVuXCBIYWt1CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGluZGljYXRpbmcgc2VjdGlvbiBjb250YWluaW5nIHVzZXIgb3B0aW9ucworaW1wb3J0X29wdGlvbnM9SGFrdXBhcmFtZXRyaXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGZpbGUgY2hvb3NlciBmb3Igc2VsZWN0aW9uIG9mIHJlc291cmNlIGJ1bmRsZXMgc3RvcmVkIGluIC5wcm9wZXJ0aWVzIGZpbGVzCitpbXBvcnRfcHJvcGVydGllc19maWxlX2Rlc2NyaXB0aW9uPVJlc3Vyc3NpdGllZG9zdG9uXCBCYXNlXCBDbGFzc2l0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IERpYWxvZyB0aXRsZSBmb3IgaW1wb3J0aW5nIGZyb20gcHJvcGVydGllcyBmaWxlcyAoY3JlYXRlZCBvciBub3QgYnkgUkJNYW5hZ2VyKQoraW1wb3J0X3Byb3BlcnRpZXNfdGl0bGU9UmVzdXJzc2l0aWVkb3N0b2plblwgaGFrdQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezF9IEVuY29kaW5nIG9mIHRoZSByZXNvdXJjZSB2YWx1ZSB3aXRoIGEgY29uZmxpY3QKKyMgQHswfSBUaGUga2V5IHZhbHVlIG9mIHRoZSByZXNvdXJjZSBpbiBjb25mbGljdAorIyBAY29tbWVudCBUaGlzIGlzIGEgd2FybmluZyBhbmQgaW5zdHJ1Y3Rpb24gZm9yIHdoZW4gYSByZXNvdXJjZSBjb25mbGljdCBvY2N1cnMgZHVyaW5nIGFuIGltcG9ydAoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZT1BdmFpbnRhXCB7MH1cIGVpXCBvbGVcIG9sZW1hc3NhXCByZXN1cnNzaWtva29lbG1hc3NhXCB7MX0uVmFsaXRzZVwga3VpbmthXCBoYWx1YXRcIHJhdGthaXN0YVwgb25nZWxtYW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlIGl0ZW0KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgdmFsdWUgb2YgdGhlIHJlc291cmNlIGFjY29yZGluZyB0byB0aGUgaW1wb3J0IGZpbGUKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2Vfc291cmNlPUhhZVwga1x1MDBFNFx1MDBFNG5uXHUwMEY2c1w6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgb2YgdGhlIHJlc291cmNlIGl0ZW0KKyMgQGNvbW1lbnQgQW4gaW5kaWNhdGlvbiBvZiB0aGUgdHJhbnNsYXRpb24gdmFsdWUgaGVsZCBieSB0aGUgYWN0aXZlIHJlc291cmNlIGJ1bmRsZSBkdXJpbmcgYSB0cmFuc2xhdGlvbiByZXNvdXJjZSBjb25mbGljdAoraW1wb3J0X3Jlc291cmNlX2NvbmZsaWN0X2Nob29zZV90YXJnZXQ9UmVzdXJzc2l0aWVkb3N0b25cIGtcdTAwRTRcdTAwRTRublx1MDBGNnNcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIHJlc291cmNlIGNvbmZsaWN0cyBieSBpZ25vcmluZyBpbXBvcnQgdmFsdWUKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9pZ25vcmU9T2hpdGFcIG9uZ2VsbWFcIGphXCBcdTAwRTRsXHUwMEU0XCBtdXV0YVwgcmVzdXJzc2lhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGNvbmZsaWN0cyBieSB1c2luZyB0aGUgaW1wb3J0IHZhbHVlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3Rfb3ZlcndyaXRlPUtvcnZhYVwgcmVzdXJzc2lcIHRpZWRvc3Rvc3RhXCBoYWV0dWxsYVwgYXJ2b2xsYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBsaXN0aW5nIG9wdGlvbnMgZm9yIHJlc29sdmluZyBjb25mbGljdHMgYmV0d2VlbiByZXNvdXJjZXMKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdHM9UmVzdXJzc2llblwgb25nZWxtYXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgc291cmNlIGZpbGUgZm9yIHRoZSBpbXBvcnQKK2ltcG9ydF9zb3VyY2VfZmlsZT1UaWVkb3N0b1w6XCB7MH0KKworIworIyBAZ3JvdXAgTWVudSBJdGVtcworIworIyBAZ3JvdXBDb21tZW50IFRoZXNlIHJlc291cmNlcyByZXByZXNlbnQgYWxsIG9mIHRoZSBtZW51IGFuZCBtZW51IGl0ZW0gdGl0bGVzCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgbWVudSB0aXRsZSBjb3ZlcmluZyBjb3B5aW5nLCBwYXN0aW5nLCBkZWxldGluZyBvZiBpdGVtcworbWVudV9lZGl0PU11dXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2NvcHk9S29waW9pCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2NvcHlfdHJpZ2dlcj1rCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2N1dD1MZWlra2FhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2N1dF90cmlnZ2VyPWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfZGVsZXRlPVBvaXN0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9kZWxldGVfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X3Bhc3RlPVNpam9pdGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfcGFzdGVfdHJpZ2dlcj1zCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfZWRpdCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9lZGl0X3RyaWdnZXI9bQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIHRoZSBvcGVuaW5nLCBzYXZpbmcsIGV0Yy4gZG9jdW1lbnRzIGFuZCBleGl0aW5nIHRoZSBwcm9ncmFtCittZW51X2ZpbGU9VGllZG9zdG8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJpbGl0eSB0byBleHBvcnQgcmVzb3VyY2UgYnVuZGxlcyBpbiBhIHZhcmlldHkgb2YgZm9ybWF0cworbWVudV9maWxlX2V4cG9ydD1SZXN1cnNzaWtva29lbG1hblwgc2lpcnRvCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMi0wNS0xNyBAbW9kaWZpZWQgMjAwMi0wNS0xNyBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IEFibGl0eSB0byBleHBvcnQgdG8gSUNVIFJlc291cmNlIEJ1bmRsZSBmaWxlcworbWVudV9maWxlX2V4cG9ydF9JQ1U9SUNVLXRpZWRvc3RvdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDItMDUtMTcgQG1vZGlmaWVkIDIwMDItMDUtMTcgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfSUNVX3RyaWdnZXI9aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBYmxpdHkgdG8gZXhwb3J0IHRvIFRNWCBYTUwgZmlsZXMKK21lbnVfZmlsZV9leHBvcnRfVE1YPVRNWC10aWVkb3N0b3QuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X1RNWF90cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IHgKK21lbnVfZmlsZV9leHBvcnRfWExGPVhMSUZGLXRpZWRvc3RvdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfWExGX3RyaWdnZXI9eAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBYmlsaXR5IHRvIGV4cG9ydCB0byBqYXZhIGZpbGVzIHRoYXQgY29tcGlsZSB0byBiZSBMaXN0UmVzb3VyY2VCdW5kbGUgY2xhc3MgZXh0ZW5zaW9ucworbWVudV9maWxlX2V4cG9ydF9qYXZhPUphdmEtdGllZG9zdG90Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9qYXZhX3RyaWdnZXI9agorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBFeHBvcnQgYWJpbGl0eSB0byBwcm9wZXJ0aWVzIGZpbGVzIG1pbnVzIHRoZSBtZXRhZGF0YQorbWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzPVBlbGtrXHUwMEU0XCBQcm9wZXJ0eS10aWVkb3N0by4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfcHJvcGVydGllc190cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X3RyaWdnZXI9cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgaW1wb3J0IGFuZCBtZXJnaW5nIGFub3RoZXIgcmVzb3VyY2UgZmlsZSB3aXRoIHRoZSBidW5kbGUgYmVpbmcgd29ya2VkIHdpdGgKK21lbnVfZmlsZV9pbXBvcnQ9THVlXCByZXN1cnNzaWtva29lbG1hXCB0aWVkb3N0b3N0YS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbXBvcnQgYWJsaWl0eSBmcm9tIFhNTCBUTVggZG9jdW1lbnRzCittZW51X2ZpbGVfaW1wb3J0X1RNWD1UTVgtdGllZG9zdG90Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9UTVhfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBJbXBvcnQgYWJpbGl0eSBmcm9tIFhNTCBYTElGRiAoLnhsZikgZmlsZXMKK21lbnVfZmlsZV9pbXBvcnRfWExGPVhMSUZGLXRpZWRvc3RvdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBYCittZW51X2ZpbGVfaW1wb3J0X1hMRl90cmlnZ2VyPXgKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBqYXZhIGNsYXNzZXMgKExpc3RSZXNvdXJjZUJ1bmRsZSkKK21lbnVfZmlsZV9pbXBvcnRfamF2YT1KYXZhLXRpZWRvc3RvdC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfamF2YV90cmlnZ2VyPWoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBwcm9wZXJ0aWVzIGZpbGVzIG5vdCBnZW5lcmF0ZWQgYnkgUkJNYW5hZ2VyCittZW51X2ZpbGVfaW1wb3J0X3Byb3BlcnRpZXM9WWtzaW5rZXJ0YWlzZXRcIHJlc3Vyc3Npa29rb2VsbWF0Li4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXI9cAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF90cmlnZ2VyPWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZQorbWVudV9maWxlX25ldz1VdXNpXCByZXN1cnNzaWtva29lbG1hLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfbmV3X3RyaWdnZXI9dQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3Igb3BlbmluZyBhIHJlc291cmNlIGJ1bmRsZQorbWVudV9maWxlX29wZW49QXZhYVwgcmVzdXJzc2lrb2tvZWxtYS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV9maWxlX29wZW5fdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjbG9zaW5nIHRoZSBhcHBsaWNhdGlvbgorbWVudV9maWxlX3F1aXQ9UG9pc3R1CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfcXVpdF90cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIHNhdmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlaW5nIHdvcmtlZCB3aXRoCittZW51X2ZpbGVfc2F2ZT1UYWxsZXRhXCByZXN1cnNzaWtva29lbG1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfc2F2ZV90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIHNhdmluZyBhIHJlc291cmNlIGJ1bmRsZSB0byBhIHBhcnRpY3VsYXIgbG9jYXRpb24gYW5kIGZpbGUgbmFtZQorbWVudV9maWxlX3NhdmVhcz1UYWxsZXRhXCByZXN1cnNzaWtva29lbG1hXCBuaW1lbGxcdTAwRTQuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK21lbnVfZmlsZV9zYXZlYXNfdHJpZ2dlcj1uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfZmlsZScgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9maWxlX3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIGhlbHAgaW5mb3JtYXRpb24gYW5kIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2dyYW0KK21lbnVfaGVscD1BcHVhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIHdoaWNoIGJyaW5ncyB1cCBhIGRpYWxvZyBkZXNjcmliaW5nIHRoZSBhcHBsaWNhdGlvbgorbWVudV9oZWxwX2Fib3V0PUxpc1x1MDBFNHRpZXRvamFcIFJlc3Vyc3NpbWFuYWdlcmlzdGEuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK21lbnVfaGVscF9hYm91dF90cmlnZ2VyPWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9oZWxwJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X2hlbHBfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3Igb3B0aW9ucyBzdWNoIGFzIGNyZWF0aW5nIG5ldyByZXNvdXJjZXMsIGdyb3VwcywgYW5kIHJlc291cmNlIGZpbGVzCittZW51X29wdGlvbnM9QXNldHVrc2V0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBpdGVtCittZW51X29wdGlvbnNfYWRkZW50cnk9TGlzXHUwMEU0XHUwMEU0XCByZXN1cnNzaS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX2FkZGVudHJ5X3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlL2NvdW50cnkvdmFyaWFudAorbWVudV9vcHRpb25zX2FkZGZpbGU9TGlzXHUwMEU0XHUwMEU0XCByZXN1cnNzaXRpZWRvc3RvLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZmlsZV90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGdyb3VwCittZW51X29wdGlvbnNfYWRkZ3JvdXA9TGlzXHUwMEU0XHUwMEU0XCByZXN1cnNzaXJ5aG1cdTAwRTQuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19hZGRncm91cF90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBlZGl0aW5nIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIHRoZSBhcHBsaWNhdGlvbgorbWVudV9vcHRpb25zX3ByZWZlcmVuY2VzPUFzZXR1a3NldC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCAKK21lbnVfb3B0aW9uc19wcmVmZXJlbmNlc190cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBNZW51IGl0ZW0gdGhhdCBtYWtlcyB2aXNpYmxlIHRoZSBwcm9qZWN0IHZpZXdlcgorbWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyPUF2YWFcIFByb2pla3Rpblx1MDBFNHl0dFx1MDBGNgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IAorbWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyX3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X29wdGlvbnMnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfb3B0aW9uc190cmlnZ2VyPWEKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgYWRkaW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZSB0byB0aGUgcHJvamVjdAorbWVudV90cmVlX2FkZF9wcm9qZWN0X2J1bmRsZT1BZGRcIFJlc291cmNlXCBCdW5kbGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIGRlbGV0aW5nIHBlcm1hbmVudGx5IGEgcmVzb3VyY2UgZmlsZQorbWVudV90cmVlX2RlbGV0ZT1Qb2lzdGFcIFJlc3Vyc3NpdGllZG9zdG8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5bWFraQorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHJlbW92aW5nIGEgc3BlY2lmaWMgcmVzb3VyY2UgZmlsZSBmcm9tIHRoZSB0cmVlIHZpZXcgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorbWVudV90cmVlX2hpZGU9UGlpbG90YVwgUmVzdXJzc2l0aWVkb3N0bworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyBwcm9qZWN0CittZW51X3RyZWVfbmV3X3Byb2plY3Q9TmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0Li4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUgcHJvamVjdAorbWVudV90cmVlX29wZW5fcHJvamVjdD1PcGVuXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0Li4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGJ1bmRsZSBpbiB0aGUgcHJvamVjdCB0cmVlCittZW51X3RyZWVfcmVtb3ZlX3Byb2plY3RfYnVuZGxlPVJlbW92ZVwgZnJvbVwgUHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSnVzc2kgTXlsbHltYWtpCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3Igc2F2aW5nIGEgc3BlY2lmaWMgcmVzb3VyY2UgYnVuZGxlIGZpbGUKK21lbnVfdHJlZV9zYXZlPVRhbGxldGFcIFJlc3Vyc3NpdGllZG9zdG8KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3Igc2F2aW5nIGNoYW5nZXMgdG8gdGhlIHJlc291cmNlIHByb2plY3QgZmlsZSwgbm90IHRoZSByZXNvdXJjZSBidW5kbGVzIHRoZW1zZWx2ZXMgd2l0aGluIHRoZSBwcm9qZWN0CittZW51X3RyZWVfc2F2ZV9wcm9qZWN0PVNhdmVcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3RcIEZpbGUuLi4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgZm9yIHNlbGVjdGluZyBhIHJlc291cmNlIGJ1bmRsZSBmcm9tIHRoZSBwcm9qZWN0IHRyZWUgdG8gYmUgZWRpdGVkIGluIHRoZSByZXNvdXJjZSBidW5kbGUgdHJlZQorbWVudV90cmVlX3NlbGVjdF9wcm9qZWN0X2J1bmRsZT1Xb3JrXCB3aXRoXCB0aGlzXCBSZXNvdXJjZVwgQnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3IgY2hhbmdpbmcgdGhlIGRpc3BsYXkgYmVpbmcgc2VlbiBieSB0aGUgdXNlcgorbWVudV92aWV3PU5cdTAwRTR5dHRcdTAwRjYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBNZW51IGl0ZW0gdGhhdCB0YWtlcyB5b3UgZGlyZWN0bHkgdG8gdGhlIHN0YXRpc3RpY3MgcGFuZWwgZm9yIHRoZSBlbnRpcmUgYnVuZGxlCittZW51X3ZpZXdfc3RhdGlzdGljcz1OXHUwMEU0eXRcdTAwRTRcIHJlc3Vyc3Npa29rb2VsbWFuXCB0aWxhc3RvdGllZG90CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgCittZW51X3ZpZXdfc3RhdGlzdGljc190cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV92aWV3JyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X3ZpZXdfdHJpZ2dlcj1uCisKKyMKKyMgQGdyb3VwIFByb2plY3QgUGFuZWwKKyMKKyMgQGdyb3VwQ29tbWVudCBQYW5lbCBhc3NvY2lhdGVkIHdpdGggUHJvamVjdCBlZGl0aW5nCisKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHJlc291cmNlIGJ1bmRsZQorIyBAY29tbWVudCBMYWJlbCBpbmRpY2F0b3IgYXNzb2NpYXRpbmcgYSB0ZXh0IGJveCBjb250YWluaW5nIGEgdHJhbnNsYXRpb24gd2l0aCB0aGUgcmVzb3VyY2UgYnVuZGxlIHRoZSB0cmFuc2xhdGlvbiBjb21lcyBmcm9tCitwcm9qZWN0X3BhbmVsX2J1bmRsZT1SZXNvdXJjZVwgQnVuZGxlXDpcIHswfQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBOYW1lIG9mIHRoZSByZXNvdXJjZSBidW5kbGUKKyMgQGNvbW1lbnQgU3BlY2lhbCBpbmRpY2F0b3Igb2YgdGhlIHJlc291cmNlIGl0ZW0gcmVzb3VyY2UgYnVuZGxlIHdoZW4gdGhlIGl0ZW0gaXMgdW50cmFuc2xhdGVkCitwcm9qZWN0X3BhbmVsX2J1bmRsZV91bnRyYW5zbGF0ZWQ9UmVzb3VyY2VcIEJ1bmRsZVw6XCB7MH1cIChVbnRyYW5zbGF0ZWQpCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBMYWJlbCB0ZXh0IG1hcmtpbmcgdGhlIGxpbmUgYWJvdmUgb3IgdG8gdGhlIGxlZnQgb2YgYSByZXNvdXJjZSBjb21tZW50Citwcm9qZWN0X3BhbmVsX2NvbW1lbnQ9QmFzZVwgQ2xhc3NcIFJlc291cmNlXCBDb21tZW50XDoKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IExhYmVsIHRleHQgZm9yIGEgY29tbWVudCB3aGVuIG5vbmUgaXMgZm91bmQgZm9yIGEgcmVzb3VyY2UKK3Byb2plY3RfcGFuZWxfY29tbWVudF9ub25lPU5vXCBjb21tZW50XCBzdXBwbGllZAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIHNob3duIG9uIHRoZSBwcm9qZWN0IHBhbmVsIGZvciBjb21taXR0aW5nIGNoYW5nZSB0byBvbmUgcmVzb3VyY2Ugb25seQorcHJvamVjdF9wYW5lbF9jb21taXRfYnV0dG9uPUNvbW1pdFwgQ2hhbmdlCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgb24gdGhlIHByb2plY3QgcGFuZWwgZm9yIHNhdmluZyBhbGwgb2YgdGhlIHJlc291cmNlcyBkaXNwbGF5ZWQuIFRoaXMgbWVhbnMgbXVsdGlwbGUgcmVzb3VyY2UgZmlsZXMgZ2V0IHNhdmVkLgorcHJvamVjdF9wYW5lbF9jb21taXRfYnV0dG9uX2FsbD1Db21taXRcIEFsbFwgUmVzb3VyY2VcIENoYW5nZXMKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERlZmF1bHQgdGl0bGUgc2hvd24gb24gdGhlIHByb2plY3QgcGFuZWwgd2hlbiBubyBwYXJ0aWN1bGFyIHJlc291cmNlIGhhcyBiZWVuIHNlbGVjdGVkCitwcm9qZWN0X3BhbmVsX2RlZmF1bHRfdGl0bGU9UHJvamVjdFwgUmVzb3VyY2VcIEVkaXRpbmcKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRleHQgZmllbGQgbWFya2VyIGZvciB0aGUgdHJhbnNsYXRpb24gb2YgYSByZXNvdXJjZSB3aGVuIHRoYXQgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QgZm9yIHRoZSBlbmNvZGluZyBmaWxlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aAorcHJvamVjdF9wYW5lbF9pdGVtX2luaGVyaXRzPTxOb1wgVHJhbnNsYXRpb25cOlwgUmVzb3VyY2VcIEluaGVyaXRzXCBmcm9tXCBwYXJlbnQ+CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBrZXkgb2YgdGhlIHNlbGVjdGVkIHJlc291cmNlCisjIEBjb21tZW50IFRpdGxlIG9uIHRoZSBwcm9qZWN0IHBhbmVsIHdoaWxlIGEgcmVzb3VyY2UgaXMgc2VsZWN0ZWQKK3Byb2plY3RfcGFuZWxfdGl0bGU9UHJvamVjdFwgUmVzb3VyY2VcIEVkaXRpbmdcOlwgezB9CisKKyMKKyMgQGdyb3VwIFJCUmVwb3J0ZXIKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbnMgZm9yIHRoZSBSQlJlcG9ydGVyIGFwcGxpY2F0aW9uCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBmb3Igc2VsZWN0aW5nIGZpbGUgbG9jYXRpb25zIGZvciBpbnB1dC9vdXRwdXQKK3JlcG9ydGVyX2J1dHRvbl9jaG9vc2U9VmFsaXRzZS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIGluZGljYXRpbmcgdGhlIHJlcG9ydCBnZW5lcmF0aW9uIHNob3VsZCBvY2N1ciBpbW1lZGlhdGVseQorcmVwb3J0ZXJfYnV0dG9uX25vdz1QXHUwMEU0aXZpdFx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIHNhdmluZyB0aGUgY3VycmVudCBzZXR0aW5ncyBhcyBkZWZhdWx0CityZXBvcnRlcl9idXR0b25fc2F2ZV9kZWZhdWx0cz1UYWxsZXRhXCBueWt5aXNldFwgYXNldHVrc2V0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdG8gYWN0aXZhdGUgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9idXR0b25fc3RhcnQ9QWxvaXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdG8gZGVhY3RpdmUgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9idXR0b25fc3RvcD1QeXNcdTAwRTR5dFx1MDBFNAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgTGV2ZWwgb2YgZGV0YWlsOiBtb3N0IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorcmVwb3J0ZXJfZGV0YWlsX2hpZ2g9UGFsam9uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIGEgc2VsZWN0aW9uIG9wdGlvbiBvZiB0aGUgbGV2ZWwgb2YgZGV0YWlsIGluIHJlcG9ydGluZworcmVwb3J0ZXJfZGV0YWlsX2xldmVsPVRpZWRvblwgbVx1MDBFNFx1MDBFNHJcdTAwRTRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgTGV2ZWwgb2YgZGV0YWlsOiBzdGFuZGFyZAorcmVwb3J0ZXJfZGV0YWlsX25vcm1hbD1Ob3JtYWFsaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdDogSFRNTAorcmVwb3J0ZXJfZm9ybWF0X2h0bWw9SFRNTAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdCB0eXBlOiBwbGFpbiB0ZXh0CityZXBvcnRlcl9mb3JtYXRfdGV4dD1UZWtzdGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIG91dHB1dCBmb3JtYXQ6IFhNTAorcmVwb3J0ZXJfZm9ybWF0X3htbD1YTUwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgZmlsZSBsb2NhdGlvbiBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRvIHJlcG9ydCBvbgorcmVwb3J0ZXJfaW5wdXRfYnVuZGxlPVJlc3Vyc3Npa29rb2VsbWFcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiB0aGF0IHJlcG9ydGluZyB3aWxsIGhhcHBlbiBhdCBhIHNwZWNpaWZpZWQgdGltZSBvZiBkYXkuIEZvbGxvd2VkIGJ5IGEgdGltZSBhbmQgZGF5IG9wdGlvbi4KK3JlcG9ydGVyX2ludGVydmFsX2RlZmluZWQ9UmFwb3J0b2ludGlhamFua29odGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRleHQgaW5kaWNhdGlvbiBvZiBzZXF1ZW50aWFsIHJlcG9ydGluZyBwYXVzZWQgZm9yIGEgZGVmaW5lZCBpbnRlcnZhbCBiZXR3ZWVuIHJlcG9ydGluZy4gSW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBudW1iZXIgYW5kIGEgdW5pdCBvZiBtZWFzdXJlIG9mIHRpbWUKK3JlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWw9UmFwb3J0b2ludGl2XHUwMEU0bGkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gRGF0ZS9UaW1lIG9mIGxhc3QgcmVwb3J0IGdlbmVyYXRpb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgdGltZSBvZiB0aGUgbGFzdCByZXBvcnQKK3JlcG9ydGVyX2xhc3RfcmVwb3J0PVZpaW1laXNpblwgcmFwb3J0dGlcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IERhdGUvVGltZSBvZiBuZXh0IHJlcG9ydAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHdoZW4gdGhlIG5leHQgcmVwb3J0IHdpbGwgYmUgZ2VuZXJhdGVkCityZXBvcnRlcl9uZXh0X3JlcG9ydD1TZXVyYWF2YVwgcmFwb3J0dGlcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIHJlcG9ydHMgYXJlIHBsYWNlZAorcmVwb3J0ZXJfb3V0cHV0X2RpcmVjdG9yeT1UYWxsZXR1c2hha2VtaXN0b1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIG91dHB1dCBmb3JtYXQKK3JlcG9ydGVyX291dHB1dF9maWxlPVRpZWRvc3RvblwgbmltaVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBmb3Igc2V0dGluZyBpbnRlcnZhbCBvZiByZXBvcnRpbmcKK3JlcG9ydGVyX3BhbmVsX2ludGVydmFsPVJhcG9ydG9pbnRpdlx1MDBFNGxpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBmb3IgY29uZmlndXJhYmxlIG9wdGlvbnMgb2YgdGhlIHJlcG9ydGluZworcmVwb3J0ZXJfcGFuZWxfb3B0aW9ucz1SYXBvcnRvaW50aXBhcmFtZXRyaXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFN1YnBhbmVsIHRpdGxlIGZvciBjaG9vc2luZyBvdXRwdXQgZm9ybWF0cyBmb3IgdGhlIHJlcG9ydHMKK3JlcG9ydGVyX3BhbmVsX291dHB1dF9mb3JtYXQ9VHVsb3N0dXNtdW90bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIGluZGljYXRpb24gb2YgcnVubmluZyBzdGF0dXMgb2YgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9wYW5lbF9zdGF0dXM9VGlsYW5uZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTaG9ydCB0aXRsZSBmb3Igc2VsZWN0aW5nIGEgY29kZSBzY2FuIGNvbmZpZ3VyYXRpb24gZmlsZQorcmVwb3J0ZXJfcGVyZm9ybV9zY2FuPUNvZGVcIFNjYW5cIC10aWVkb3N0bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUXVpY2sgaW5kaWNhdGlvbiB0aGF0IHRoZSByZXBvcnRlciBpcyBhY3RpdmUgKHBlcmhhcHMgd2FpdGluZykKK3JlcG9ydGVyX3N0YXR1c19ydW5uaW5nPUtcdTAwRTR5bm5pc3NcdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFF1aWNrIHN0YXR1cyBpbmRpY2F0aW9uIHRoYXQgdGhlIHJlcG9ydGVyIGlzIG5vdCBhY3RpdmUKK3JlcG9ydGVyX3N0YXR1c19zdG9wcGVkPVB5c1x1MDBFNHl0ZXR0eQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgZGF5cyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfZGF5cz1QXHUwMEU0aXZcdTAwRTRcdTAwRTQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGV2ZXJ5IGRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfZXZlcnlkYXk9Sm9rYVwgcFx1MDBFNGl2XHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBmcmlkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX2ZyaWRheT1QZXJqYW50YWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGhvdXJzIG9wdGlvbgorcmVwb3J0ZXJfdGltZV9ob3Vycz1UdW50aWEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IG1pbnV0ZXMgb3B0aW9uCityZXBvcnRlcl90aW1lX21pbnV0ZXM9TWludXV0dGlhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBtb25kYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX21vbmRheT1NYWFuYW50YWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHNhdHVyZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9zYXR1cmRheT1MYXVhbnRhaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgc3VuZGF5IG9wdGlvbgorcmVwb3J0ZXJfdGltZV9zdW5kYXk9U3VubnVudGFpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCB0aHVyc2RheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfdGh1cnNkYXk9VG9yc3RhaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgdHVlc2RheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfdHVlc2RheT1UaWlzdGFpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCB3ZWRuZXNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3dlZG5lc2RheT1LZXNraXZpaWtrbworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgb2YgdGhlIGFwcGxpY2F0aW9uCityZXNvdXJjZV9idW5kbGVfcmVwb3J0ZXI9UkJSZXBvcnRlcgorCisjCisjIEBncm91cCBTZWFyY2ggYW5kIFJlcGxhY2UKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZm91bmQgb24gdGhlIHNlYXJjaCB0YWIgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyYWwgc2VhcmNoIHRpdGxlCitzZWFyY2g9RXRzaQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggb3B0aW9uIGZvciBtYWtpbmcgdGhlIHNlYXJjaCBjYXNlIHNlbnNpdGl2ZSBvciBub3QKK3NlYXJjaF9jYXNlX3NlbnNpdGl2ZT1Jc290XCBqYVwgcGllbmV0XCBraXJqYWltZXRcIG92YXRcIHNhbW9qYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggb3B0aW9uIGZvciBzZWFyY2hpbmcgdGhyb3VnaCByZXNvdXJjZSBjb21tZW50cworc2VhcmNoX2NvbW1lbnRzPUtvbW1lbnRpdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUZXh0IGluZGljYXRpb24gb2YgdGhlIGZpZWxkIGZvciBlbnRlcmluZyB0ZXh0IHRvIHNlYXJjaCBvbgorc2VhcmNoX2ZpbmQ9RXRzaVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBzZWxlY3Rpb24gZm9yIHNlYXJjaGluZyBvcHRpb24gdGhyb3VnaCByZXNvdXJjZSBrZXlzCitzZWFyY2hfa2V5cz1SZXN1cnNzaWF2YWltZXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCBmb3IgcmVwbGFjaW5nIHRoZSBmb3VuZCB2YWx1ZQorc2VhcmNoX3JlcGxhY2U9S29ydmFhXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3Igc2VhcmNoaW5nIHRocm91Z2ggdHJhbnNsYXRpb24gdmFsdWVzCitzZWFyY2hfdmFsdWVzPUtcdTAwRTRcdTAwRTRublx1MDBGNmtzZXQKKworIworIyBAZ3JvdXAgVGFicworIworIyBAZ3JvdXBDb21tZW50IEdVSSBUYWJzIGluIHRoZSBtYWluIHBhbmVsCisKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEdVSSBUYWIgZm9yIFRhYmJlZCBQYW5lIG92ZXIgdGhlIHRyZWUgc2hvd2luZyBhIHNpbmdsZSByZXNvdXJjZSBidW5kbGUgYW5kIGl0cyB2YXJpb3VzIGZpbGVzCit0YWJfYnVuZGxlPUJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUYWIgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSB2YXJpb3VzIGdyb3VwcyBpbiB0aGUgYnVuZGxlCit0YWJfZ3JvdXBzPVJ5aG1cdTAwRTR0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHVUkgVGFiIGZvciB0YWIgb3ZlciB0cmVlIHNob3dpbmcgYSByZXNvdXJjZSBidW5kbGUgcHJvamVjdAordGFiX3Byb2plY3Q9UHJvamVjdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMDItMDggQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGFuZSBhbGxvd2luZyBmb3Igc2VhcmNoIGFuZCByZXBsYWNlIGZ1bmN0aW9ucwordGFiX3NlYXJjaD1FdHNpCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRhYiBmb3Igc3RhdGlzdGljcyBkaXNwbGF5IGZvciBlaXRoZXIgdGhlIFJlc291cmNlIEJ1bmRsZSBhcyBhIHdob2xlIG9yIHBhcnRpY3VsYXIgbGFuZ3VhZ2UgZmlsZXMKK3RhYl9zdGF0aXN0aWNzPVRpbGFzdG90aWVkb3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTAyLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRhYiBmb3IgZGlzcGxheSBvZiB1bnRyYW5zbGF0ZWQgaXRlbXMgaW4gdGhlIGRpZmZlcmVudCBsYW5ndWFnZSBmaWxlcwordGFiX3VudHJhbnNsYXRlZD1LXHUwMEU0XHUwMEU0bnRcdTAwRTRtXHUwMEU0dHRcdTAwRjZtXHUwMEU0dAorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIEdyb3VwcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgQ29sdW1uIHRpdGxlIGZvciBpdGVtIGNvbW1lbnRzCitsYW5ndWFnZWdyb3VwX2NvbHVtbl9jb21tZW50PUtvbW1lbnR0aQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBDb2x1bW4gdGl0bGUgZm9yIGl0ZW0ncyByZXNvdXJjZSBrZXkKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX2tleT1SZXN1cnNzaW5cIGF2YWluCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IAorbGFuZ3VhZ2Vncm91cF9jb2x1bW5fdHJhbnNsYXRpb249S1x1MDBFNFx1MDBFNG5uXHUwMEY2cworCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFN0YXRpc3RpY3MgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSBzdGF0aXN0aWNzIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBBIGNvbW1lbnQgZ2l2ZW4gdG8gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfY29tbWVudD1Lb21tZW50dGlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgY291bnRyeSBiZWluZyBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfY291bnRyeT1NYWFcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgbnVtYmVyIG9mIHJlc291cmNlcyBpbiB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19pdGVtX2NvdW50PVJlc3Vyc3NpZW5cIG1cdTAwRTRcdTAwRTRyXHUwMEU0XCB0XHUwMEU0c3NcdTAwRTRcIHJlc3Vyc3NpdGllZG9zdG9zc2FcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBUaGUgbGFuZ3VhZ2UgZGVzY3JpYmVkIGJ5IHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2xhbmd1YWdlPUtpZWxpXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgYSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoZSB0cmFuc2xhdGlvbnMgaW4gdGhpcyBsYW5ndWFnZSBmaWxlCitsYW5ndWFnZXN0YXRzX21hbmFnZXI9UmVzdXJzc2l0aWVkb3N0b25cIG9taXN0YWphXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIGxhbmd1YWdlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdGl0bGU9UmVzdXJzc2l0aWVkb3N0b25cIG5pbWlcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDAtMTEtMDkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEp1c3NpIE15bGx5beRraQorIyBAY29tbWVudCBOdW1iZXIgb2YgcmVzb3VyY2VzIG5lZWRpbmcgdHJhbnNsYXRpb24gaW4gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdHJhbnNsYXRpb25fY291bnQ9S1x1MDBFNFx1MDBFNG50XHUwMEU0bVx1MDBFNHR0XHUwMEY2bWllblwgcmVzdXJzc2llblwgbVx1MDBFNFx1MDBFNHJcdTAwRTRcIHRcdTAwRTRzc1x1MDBFNFwgcmVzdXJzc2l0aWVkb3N0b3NzYVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBsYW5ndWFnZS9yZWdpb24gdmFyaWFudCBkZXNjcmliZWQgYnkgdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdmFyaWFudD1NdXVubmVsbWFcOgorCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFVudHJhbnNsYXRlZCBJdGVtcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIGNvbHVtbiB0aXRsZSBmb3IgZ3JvdXAgbmFtZXMgb2YgaXRlbXMgaW4gdGhlIHJvd3MKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fZ3JvdXA9UmVzdXJzc2lyeWhtXHUwMEU0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMC0xMS0wOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSnVzc2kgTXlsbHlt5GtpCisjIEBjb21tZW50IFRoZSBrZXkgb2YgdGhlIGl0ZW0gYSByb3cKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fa2V5PVJlc3Vyc3NpblwgYXZhaW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAwLTExLTA5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKdXNzaSBNeWxseW3ka2kKKyMgQGNvbW1lbnQgVGhlIHRyYW5zbGF0ZWQgdmFsdWUgb2YgYW4gaXRlbSBpbiBhIHJvdworbGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl90cmFuc2xhdGlvbj1LXHUwMEU0XHUwMEU0bm5cdTAwRjZzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0wMi0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGNvdmVyaW5nIGJ1dHRvbnMgdGhhdCBhcHBseSB0byBhIHNlbGVjdGVkIHJlc291cmNlIGZyb20gYSB0YWJsZSBvZiByZXNvdXJjZXMKK2xhbmd1YWdldW50cmFuc19zZWxlY3RlZF9yZXNvdXJjZXNfb3B0aW9ucz1WYWxpdHR1amVuXCByZXN1cnNzaWVuXCBwYXJhbWV0cml0CmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL1JCTWFuYWdlcl9zdi5wcm9wZXJ0aWVzIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXJfc3YucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTc2ZTkwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9SQk1hbmFnZXJfc3YucHJvcGVydGllcwpAQCAtMCwwICsxLDEyMTYgQEAKKyMgQGZpbGUgICAgICAgICAgUkJNYW5hZ2VyCisjIEBmaWxlRW5jb2RpbmcgIHN2CisjIEBmaWxlTGFuZ3VhZ2UgIFN3ZWRpc2gKKyMgQGZpbGVDb3VudHJ5ICAgCisjIEBmaWxlVmFyaWFudCAgIAorIyBAZmlsZU1hbmFnZXIgICBTdGVmYW4gRWRsdW5kCisjIEBmaWxlQ29tbWVudCAgIAorCisKKyMKKyMgQGdyb3VwIEJhc2UgQ2xhc3MgR3JvdXBzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBUcmFuc2xhdGlvbiBJdGVtcyBmb3IgdGhlIEJhc2UgQ2xhc3MgR3JvdXAgdGFiYmVkIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlZ3JvdXBfZ3JvdXBfY29tbWVudD1HcnVwcFwga29tbWVudGFyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9uYW1lPUdydXBwXCBuYW1uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9ncm91cF9vcHRpb25zPVJlc3Vyc2dydXBwXCBhbHRlcm5hdGl2CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2Vncm91cF9pdGVtX29wdGlvbnM9UmVzdXJzXCBzYWtcIGFsdGVybmF0aXYKKworIworIyBAZ3JvdXAgQmFzZSBDbGFzcyBTdGF0aXN0aWNzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCBBbGwgdHJhbnNsYXRpb25zIGZvciBzdHJpbmdzIGFwcGVhcmluZyBvbiB0aGUgc3RhdGlzdGljcyBwYW5lIGZvciB0aGUgYmFzZSBjbGFzcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19kdXBsaWNhdGVzX2NvdW50PUFudGFsXCBrb3BpZXJhZGVcIHJlc3Vyc255Y2tsYXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorYmFzZXN0YXRzX2ZpbGVfY291bnQ9QW50YWxcIHJlc3Vyc2ZpbGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19ncm91cF9jb3VudD1BbnRhbFwgcmVzdXJzZ3J1cHBlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZ3JvdXBfZ3JvdXA9UmVzdXJzXCBncnVwcGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19pdGVtX2NvdW50PUFudGFsXCByZXN1cnNcIHNha2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Jhc2VzdGF0c19pdGVtX2dyb3VwPVJlc3Vyc3NhaworCisjCisjIEBncm91cCBCYXNlIENsYXNzIFVudHJhbnNsYXRlZCBJdGVtcyBQYW5lCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGFwcGVhcmluZyBvbiB0aGUgQmFzZSBDbGFzcyBVbnRyYW5zbGF0ZWQgSXRlbXMgcGFuZQorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSBmaWxlIGJlaW5nIHZpZXdlZAorYmFzZXVudHJhbnNfZmlsZT1GaWxcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHJlc291cmNlIGl0ZW1zIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBmaWxlCitiYXNldW50cmFuc191bnRyYW5zX2NvdW50PUFudGFsXCBvb3ZlcnNhdHRhXCBzYWtlcgorCisjCisjIEBncm91cCBCdXR0b24gTmFtZXMKKyMKKyMgQGdyb3VwQ29tbWVudCBUaGUgbmFtZXMgZGlzcGxheWVkIG9uIHRoZSB2YXJpb3VzIGJ1dHRvbnMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitiYXNlc3RhdHNfZmlsZV9ncm91cD1SZXN1cnNcIGZpbGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGxhbmd1YWdlIGZpbGUKK2J1dHRvbl9hZGRfZmlsZT1MYWdnXCB0aWxsXCBueVwgcmVzdXJzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9maWxlX3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorYnV0dG9uX2FkZF9ncm91cD1MYWdnXCB0aWxsXCByZXN1cnNcIGdydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2FkZF9ncm91cF90cmlnZ2VyPWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgdHJhbnNsYXRpb24gaXRlbQorYnV0dG9uX2FkZF9yZXNvdXJjZT1MYWdnXCB0aWxsXCByZXN1cnNzYWsKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fYWRkX3Jlc291cmNlX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBHZW5lcmljIGJ1dHRvbiBmb3IgY2FuY2VsaW5nIGFjdGlvbnMKK2J1dHRvbl9jYW5jZWw9QXZicnl0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEdlbmVyaWMgYnV0dG9uIGZvciBhIGNob2ljZSBvciBzZWxlY3Rpb24gb3B0aW9uCitidXR0b25fY2hvb3NlPVZcdTAwRTRsagorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jaG9vc2VfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGdlbmVyaWMgY3JlYXRpb24gb2YgZ3JvdXBzLCBpdGVtcywgZmlsZXMsIGV0Yy4KK2J1dHRvbl9jcmVhdGU9U2thcGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgRm9yIGNyZWF0aW9uIG9mIGEgcmVzb3VyY2UgZ3JvdXAKK2J1dHRvbl9jcmVhdGVfZ3JvdXA9U2thcGFcIGdydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV9ncm91cF90cmlnZ2VyPWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBjcmVhdGluZyBhbiBpdGVtIHRoZW4gY29udGludWluZyBjcmVhdGluZyBtb3JlIGl0ZW1zCitidXR0b25fY3JlYXRlX21vcmU9U2thcGFcIG9jaFwgRm9ydHNcdTAwRTR0dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMDIgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfbW9yZV90cmlnZ2VyPXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjcmVhdGluZyBhIHJlc291cmNlIHRyYW5zbGF0aW9uIGl0ZW0KK2J1dHRvbl9jcmVhdGVfcmVzb3VyY2U9U2thcGFcIHJlc3VycworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9jcmVhdGVfcmVzb3VyY2VfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0wMiBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX2NyZWF0ZV90cmlnZ2VyPWMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIGEgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQnV0dG9uIGZvciByZW1vdmluZyBhIGdyb3VwIGFuZCBpdHMgY29udGVudHMKK2J1dHRvbl9kZWxldGVfZ3JvdXA9VGFcIGJvcnRcIGdydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgcGVybWFuZW50bHkgcmVtb3ZpbmcgYSByZXNvdXJjZSBmcm9tIHRoZSBidW5kbGUKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2U9VGFcIGJvcnRcIHJlc3VycworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjMgQG1vZGlmaWVkIDIwMDEtMDEtMjMgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9kZWxldGVfcmVzb3VyY2VfdHJpZ2dlcj1kCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBHZW5lcmljIGVkaXQgYnV0dG9uCitidXR0b25fZWRpdD1FZGl0ZXJhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBhIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEJ1dHRvbiBmb3IgZWRpdGluZyBncm91cCBuYW1lIGFuZCBjb21tZW50CitidXR0b25fZWRpdF9ncm91cD1FZGl0ZXJhXCBncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgYSBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBCdXR0b24gZm9yIGVkaXRpbmcgcmVzb3VyY2UgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBrZXkgYW5kIHRyYW5zbGF0aW9uCitidXR0b25fZWRpdF9yZXNvdXJjZT1FZGl0ZXJhXCByZXN1cnMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fZWRpdF9yZXNvdXJjZV90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBpbml0aWF0aW5nIGFuIGltcG9ydCBvZiByZXNvdXJjZXMgZnJvbSBhbiBhbHRlcm5hdGUgc291cmNlCitidXR0b25faW1wb3J0PUltcG9ydGVyYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDEtMjYgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2J1dHRvbl9pbXBvcnRfdHJpZ2dlcj1pCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiBhbGxvd3MgYSBzZWxlY3RlZCByZXNvdXJjZSB0byBiZSBtYXJrZWQgYXMgdHJhbnNsYXRlZCB3aXRob3V0IGZ1cnRoZXIgZWRpdGluZworYnV0dG9uX21hcmtfdHJhbnNsYXRlZD1NYXJrZXJhXCBzb21cIFx1MDBGNnZlcnNhdHQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAxLTIzIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fbWFya190cmFuc2xhdGVkX3RyaWdnZXI9dAorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBhZGRpbmcgdGhlIGN1cnJlbnQgcmVzb3VyY2UgYnVuZGxlIGluIHRoZSBtYWluIGFwcGxpY2F0aW9uIHRvIHRoZSBwcm9qZWN0CitidXR0b25fcHJvamVjdF9hZGQ9QWRkXCBDdXJyZW50XCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfYWRkX3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIGZvciBjbG9zaW5nIHRoZSBwcm9qZWN0IHdpbmRvdworYnV0dG9uX3Byb2plY3RfY2xvc2U9Q2xvc2VcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IAorYnV0dG9uX3Byb2plY3RfY2xvc2VfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0CitidXR0b25fcHJvamVjdF9uZXc9TmV3XCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X25ld190cmlnZ2VyPW4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiBmb3Igb3BlbmluZyBhIHByb2plY3QgZmlsZQorYnV0dG9uX3Byb2plY3Rfb3Blbj1PcGVuXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X29wZW5fdHJpZ2dlcj1vCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIHJlbW92aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVzb3VyY2UgYnVuZGxlIGZyb20gdGhlIHByb2plY3QKK2J1dHRvbl9wcm9qZWN0X3JlbW92ZT1SZW1vdmVcIFNlbGVjdGlvbgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCitidXR0b25fcHJvamVjdF9yZW1vdmVfdHJpZ2dlcj1yCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBCdXR0b24gZm9yIGNhdXNpbmcgdGhlIHNlbGVjdGVkIHJlc291cmNlIGJ1bmRsZSB0byBiZSB0aGUgb25lIGJlaW5nIGVkaXRlZCBpbiB0aGUgbWFpbiBhcHBsaWNhdGlvbgorYnV0dG9uX3Byb2plY3Rfc2VsZWN0PUVkaXRcIFNlbGVjdGVkCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2J1dHRvbl9wcm9qZWN0X3NlbGVjdF90cmlnZ2VyPWUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBlcmZvcm1pbmcgYSBjb21wbGV0ZSBzZWFyY2gKK2J1dHRvbl9zZWFyY2hfZmluZF9hbGw9SGl0dGFcIGFsbGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fc2VhcmNoX2ZpbmRfYWxsX3RyaWdnZXI9ZgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgcGVyZm9ybWluZyBjb21wbGV0ZSBzZWFyY2ggYW5kIHJlcGxhY2UKK2J1dHRvbl9zZWFyY2hfcmVwbGFjZV9hbGw9RXJzXHUwMEU0dHRcIGFsbGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTA2IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCitidXR0b25fc2VhcmNoX3JlcGxhY2VfYWxsX3RyaWdnZXI9cgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgR2VuZXJpYyBidXR0b24gZm9yIHVwZGF0aW5nIGluZm9ybWF0aW9uCitidXR0b25fdXBkYXRlPVVwZGF0ZXJhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMyBAbW9kaWZpZWQgMjAwMS0wMS0yMyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorYnV0dG9uX3VwZGF0ZV90cmlnZ2VyPXUKKworIworIyBAZ3JvdXAgRGlhbG9ncworIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9ucyB2YXJpb3VzIGRpYWxvZyBib3hlcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RhaWxvZ190aXRsZV9wcmVmZXJlbmNlcz1JbnN0YWxsbmluZ2FyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHdldGhlciBvciBub3QgYSBuZXcgZmlsZSB3aWxsIGJlIHBvcHVsYXRlZCBmcm9tIHRoZSBlbGVtZW50cyBpbiB0aGUgYmFzZSBjbGFzcworZGlhbG9nX2NoZWNrYm94X2NvcHlfZWxlbWVudHM9S29waWVyYVwgc2FrZXJcIGZyYW5cIGJhc2tsYXNzXCB0aWxsXCBueVwgZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBJbmRpY2F0b3Igb2Ygd2V0aGVyIGFuIGl0ZW0gaXMgdHJhbnNsYXRlZCBvciBub3QKK2RpYWxvZ19jaGVja2JveF90cmFuc2xhdGVkPU92ZXJzYXR0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19jb21tZW50PUtvbWVudGFyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2NvdW50cnk9TGFuZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfY3JlYXRlZD1Ta2FwYWRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfY3JlYXRvcj1Ta2FwYXJlXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEB7MX0gVGhlIGRhdGUKKyMgQHswfSBUaGUgbmFtZSBvZiB0aGUgcGVyc29uIGludm9sdmVkCisjIEBjb21tZW50IFRoZSBkYXRlIGFuZCBwZXJzb24gYXNzb2NpYXRlZCB3aXRoIGEgY3JlYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIGFuIGl0ZW0KK2RpYWxvZ19kYXRlX3BlcnNvbj17MH1cIGF2XCB7MX0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2RlZmF1bHRfY29tbWVudD1Ta29uc3ZhcmRlXCBmb3JcIGtvbW1lbnRhclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWZhdWx0X3RyYW5zbGF0aW9uPVNrb25zdmFyZGVcIGZvclwgb3ZlcnNhdHRuaW5nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfZmlsZT1UYVwgYm9ydFwgcmVzdXJzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19kZWxldGVfZ3JvdXA9VGFcIGJvcnRcIHJlc3Vyc1wgZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2RlbGV0ZV9pdGVtPVRhXCBib3J0XCByZXN1cnNzYWsKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgV2FybmluZyBkaXNwbGF5ZWQgd2hlbiBhIHVzZXIgYXNrcyBmb3IgYSBkZWxldGlvbiBvZiBhIGZpbGUuIFByb21wdHMgZm9yICdZZXMnIG9yICdObycKK2RpYWxvZ19kZWxldGVfd2FybmluZz1WYXJuaW5nXCFcIFJhZGVyaW5nZW5cIGthblwgaW50ZVwgXHUwMEU1bmdyYXMuXG5cdTAwQzRyXCBkdVwgc1x1MDBFNGtlclwgYXR0XCBkdVwgdmlsbFwgZm9ydHNcdTAwRTR0dGE/CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19lbmNvZGluZz1Lb2RuaW5nXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfY29tbWVudD1Lb21tZW50YXJcIGZvclwgcmVzdXJzZmlsXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uPUJhc2tsYXNzXCBlZ2Vuc2thcHNmaWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgRGVzY3JpcHRpb24gb2YgRmlsZSBGaWx0ZXIgZm9yIFJCUmVwb3J0ZXIgWE1MIHNjYW4gY29uZmlndXJhdGlvbiBmaWxlcworZGlhbG9nX2ZpbGVfZmlsdGVyX2Rlc2NyaXB0aW9uX3NjYW49WE1MXCBSQlJlcG9ydGVyXCBsXHUwMEU0c1wgZmlsZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX2ZpbGVfaW5mbz1GaWxcIGluZm9ybWF0aW9uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX21hbmFnZXI9TmFtblwgZm9yXCByZXN1cnNhZ2FyZVw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19maWxlX3RpdGxlPVRpdGVsXCBmb3JcIHJlc3Vyc2ZpbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19ncm91cD1HcnVwcFwgbmFtblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19ncm91cF9jb21tZW50PUdydXBwXCBrb21tZW50YXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfa2V5PU55Y2tlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19sYW5ndWFnZT1TcHJhaworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfbG9va3Vwcz1VcHBsZXRuaW5nYXJcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfbW9kaWZpZWQ9U2VuYXN0XCBtb2RpZmllcmFkXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX21vZGlmaWVyPVNlbmFzdFwgbW9kaWZpZXJhZFwgYXZcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIG5hbWUgb2YgYSBsYW5ndWFnZSwgY291bnRyeSwgb3IgdmFyaWFudCBvZiBhIGxhbmd1YWdlIGZpbGUKK2RpYWxvZ19uYW1lPU5hbW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciBhIG5hbWUgZm9yIHRoZSByZXNvdXJjZSBidW5kbGUsIGJlZm9yZSBjcmVhdGluZyB0aGF0IGJ1bmRsZQorZGlhbG9nX25ld19iYXNlY2xhc3M9TWF0YVwgaW5cIGVuXCBueVwgYmFza2xhc3NuYW1uXCBmb3JcIHJlc3Vyc2ZpbGVuLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRGlhbG9nIHBvcHVwIHdpbmRvdyB0ZXh0IHByb21wdGluZyB0aGUgdXNlciBmb3IgdGhlIG5hbWUgb2YgYSByZXNvdXJjZSBidW5kbGUgcHJvamVjdAorZGlhbG9nX25ld19wcm9qZWN0PVBsZWFzZVwgZW50ZXJcIGFcIHRpdGxlXCBmb3JcIHlvdXJcIG5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEEgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzIG1ha2luZyBpdCB0aHJvdWdoIHRoZSBmaWx0ZXIgdXBvbiBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlCitkaWFsb2dfb3Blbl9maWxlX2ZpbHRlcj1CYXNrbGFzc1wgZWdlbnNrYXBzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGlzIGlzIGEgc2VjdGlvbiBoZWFkaW5nIGZvciBzZXR0aW5nIHRoZSBsb2NhbGUKK2RpYWxvZ19wcmVmZXJlbmNlc19sb2NhbGU9TG9rYWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IExvY2FsZXMgY3VycmVudGx5IGRlZmluZWQgaW4gdGhlIHByb3BlcnRpZXMgZmlsZXMgZm9yIHRoZSBhcHBsaWNhdGlvbgorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9kZWZpbmVkPURlZmluaWVyYWRcIGZvclwgUkJNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV9pc289SVNPXCBTdGFuZGFyZGVyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IExvY2FsZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IEphdmEgVmlydHVhbCBNYWNoaW5lCitkaWFsb2dfcHJlZmVyZW5jZXNfbG9jYWxlX21hY2hpbmU9S29tcGF0aWJlbFwgdXRydXN0bmluZ1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3ByZWZlcmVuY2VzX2xvY2FsZV93YXJuaW5nPU9CUy5cIEFuZHJpbmdhclwgdGlsbFwgbG9rYWxlblwgYXJcIGludGVcIGFrdGl2YVwgdGlsbHNcIGFwcGxpa2F0b2luZW5cIGF0ZXJzdGFydGFzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ19wcmVmZXJlbmNlc19sb29rYW5kZmVlbD0nTG9va1wgYW5kXCBGZWVsJworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfcHJlZmVyZW5jZXNfdXNlcm5hbWU9QW52YW5kYXJuYW1uXDoKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IERlc2NyaXB0b3IgdGhhdCBnb2VzIGludG8gR1VJIGZpbGUgY2hvb3NlcgorZGlhbG9nX3Byb2plY3RfZmlsZV9maWx0ZXJfZGVzY3JpcHRpb249UkJNYW5hZ2VyXCBQcm9qZWN0XCBGaWxlcworIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgRmlsZSBGaWx0ZXIgZGVzY3JpcHRpb24gZm9yIHJlc291cmNlIGJ1bmRsZSBwcm9qZWN0IGZpbGVzCitkaWFsb2dfcHJvamVjdF9maWx0ZXJfZGVzY3JpcHRpb249UmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdHMKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gdGhhdCBubyBwcm9qZWN0IGlzIG9wZW4sIHBsYWNlZCBpbiB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZyB3aGVyZSB0aGUgcHJvamVjdCBuYW1lIHdvdWxkIG5vcm1hbGx5IGdvCitkaWFsb2dfcHJvamVjdF9ub25lX3NlbGVjdGVkPU5vXCBBY3RpdmVcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gVGhlIG5hbWUgb2YgdGhlIHByb2plY3QKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSB3aW5kb3cgc2hvd2luZyBhbGwgdGhlIHJlc291cmNlIGJ1bmRsZXMgaW4gYSBwcm9qZWN0CitkaWFsb2dfcHJvamVjdF90aXRsZT1SZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0XDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgUHJvbXB0cyB0aGUgdXNlciBpZiB0aGV5IHdvdWxkIGxpa2UgdG8gc2F2ZSBjaGFuZ2VzIGJlZm9yZSBleGl0aW5nCitkaWFsb2dfcXVpdF9zYXZlPVZpbGxcIGR1XCBzcGFyYVwgaW5uYW5cIGR1XCBhdnNsdXRhclwgUkJNYW5hZ2VyPworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBIGdlbmVyaWMgcHJvcG1wdCB0byBhc2sgdGhlIHVzZXIgaWYgdGhleSB3aXNoIHRvIHNhdmUgY2hhbmdlcworZGlhbG9nX3NhdmU9VmlsbFwgZHVcIHNwYXJhXCBhbmRyaW5nYXJcIHRpbGxcIHJlc3Vyc2dydXBlbj8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3NlYXJjaF9vcHRpb25zPVNva25pbmdzYWx0ZXJuYXRpdgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfc2VhcmNoX3BhcmFtPUxldGFcIGVmdGVyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSB0aXRsZSBvZiB0aGUgYWJvdXQgZGlhbG9nIGJveAorZGlhbG9nX3RpdGxlX2Fib3V0X3JibWFuYWdlcj1PbVwgUkJNYW5hZ2VyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIGZvciBkaWFsb2cgcHJvbXB0aW5nIGZvciBkZWxldGlvbiBvZiBhbiBlbnRpcmUgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9kZWxldGVfZ3JvdXA9VGFcIGJvcnRcIHJlc3Vyc1wgZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIyIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgd2hlbiBwcm9tcHRpbmcgdG8gZGVsZXRlIGEgcmVzb3VyY2UKK2RpYWxvZ190aXRsZV9kZWxldGVfaXRlbT1UYVwgYm9ydFwgcmVzdXJzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lZGl0X2dyb3VwPUVkaXRlcmFcIFJlc3Vyc2dydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lZGl0X2l0ZW09RWRpdGVyYVwgcmVzdXJzc2FrCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9lcnJvcj1FcnJvcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfZXJyb3JfY3JlYXRpbmdfYnVuZGxlPUZlbFwgdmlkXCBza2FwYW5kZVwgYXZcIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjIgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgd2hlbiBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlIG5vdCBjcmVhdGVkIGJ5IFJCTWFuYWdlcgorZGlhbG9nX3RpdGxlX2Vycm9yX25vdF9yYm1hbmFnZXJfZm9ybWF0PUZlbFw6XCBPbFx1MDBFNHNiYXJcIHJlc3Vyc2dydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRpdGxlIG9uIGEgd2FybmluZyBkaWFsb2cgdGhhdCBJL08gbWFsZnVuY3Rpb25lZCBvcGVuaW5nIGEgZmlsZQorZGlhbG9nX3RpdGxlX2Vycm9yX29wZW5pbmdfZmlsZT1GZWxcIHZpZFwgXHUwMEY2cHBuYW5kZVwgYXZcIGZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGEgZGlhbG9nIGJveCBmb3IgZW50ZXJpbmcgc3BlY2lhbCBwYXJhbWV0ZXJzIG5lZWRlZCB0byBleHBvcnQgYSByZXNvdXJjZSBidW5kbGUgdG8gamF2YSBjbGFzcyBjb2RlCitkaWFsb2dfdGl0bGVfZXhwb3J0X2phdmFfb3B0aW9ucz1FeHBvcnRcIHBhcmFtZXRyYXJcOlwgSmF2YVwga2xhc3MKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGEgZGlhbG9nIHdpdGggYSBwcm9ncmVzcyBiYXIgZ292ZXJuaW5nIGltcG9ydCBzdGF0dXMKK2RpYWxvZ190aXRsZV9pbXBvcnRfcHJvZ3Jlc3M9SW1wb3J0ZXJpbmdzZnJhbWdcdTAwRTVuZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIG5ldyBidW5kbGUKK2RpYWxvZ190aXRsZV9uZXdfYnVuZGxlPVNrYXBhXCBueVwgcmVzdXJzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZmlsZQorZGlhbG9nX3RpdGxlX25ld19maWxlPVNrYXBhXCBueVwgcmVzdXJzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaXRsZSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZ3JvdXAKK2RpYWxvZ190aXRsZV9uZXdfZ3JvdXA9U2thcGFcIG55XCByZXN1cnNncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGNyZWF0aW5nIHJlc291cmNlCitkaWFsb2dfdGl0bGVfbmV3X2l0ZW09U2thcGFcIG55XCByZXN1cnNzYWsKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRpdGxlIG9mIHRoZSBkaWFsb2cgYm94IHNob3dpbmcgd2hlbiBjcmVhdGluZyBhIG5ldyBwcm9qZWN0CitkaWFsb2dfdGl0bGVfbmV3X3Byb2plY3Q9TmV3XCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ190aXRsZV9wcmVmZXJlbmNlcz1JbnN0YWxsbmluZ2FyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaXRsZSBmb3IgY29uZmlybWluZyBleGl0IGZyb20gYXBwbGljYXRpb24KK2RpYWxvZ190aXRsZV9xdWl0PUF2c2x1dGFcIFJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfc2VhcmNoPVNvaworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfdGl0bGVfdXNlcl9uYW1lPU1hdGFcIGluXCBhbnZhbmRhcm5hbW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3RyYW5zbGF0aW9uPU92ZXJzYXR0bmluZ1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ191c2VyX25hbWU9TWF0YVwgaW5cIG5hbW4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2RpYWxvZ192YXJpYW50PVZhcmlhbnRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitkaWFsb2dfd2FybmluZ19kZWxldGVfZ3JvdXA9T21cIGR1XCB0YXJcIGJvcnRcIGRlblwgYXJcIGdydXBwZW5cIHNhXCBmb3JzdmlubmVyXCBhbGxhXCBzYWtlclwgaVwgZ3J1cHBlbi5cIFZpbGxcIGR1XCBmb3JzYXR0YT8KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZGlhbG9nX3dhcm5pbmdfZGVsZXRlX2l0ZW09UmVzdXJzc2FrZW5cIGtvbW1lclwgYXR0XCBmb3JzdmlubmEuXCBWaWxsXCBkdVwgZm9yc2F0dGE/CisKKyMKKyMgQGdyb3VwIEVycm9yIE1lc3NhZ2VzCisjCisjIEBncm91cENvbW1lbnQgCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3I9RmVsCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gYWRkIGEgcmVzb3VyY2UgYnVuZGxlIHRvIGEgcHJvamVjdC4KK2Vycm9yX2FkZGluZ19wcm9qZWN0X2J1bmRsZT1BblwgZXJyb3JcIG9jY3VycmVkXCB0cnlpbmdcIHRvXCBhZGRcIHRoZVwgUmVzb3VyY2VcIEJ1bmRsZVwgeW91XCBzZWxlY3RlZC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfYmFzZWNsYXNzX3doaXRlc3BhY2U9UmVzdXJzbmFtblwga2FuXCBpbnRlXCBoYVwgc3BhY2VcIGlcIGRlbS4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfYnVuZGxlX25vdF9jcmVhdGVkPUluZ2VuXCByZXN1cnNmaWxcIHZhclwgc2thcGFkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX2NyZWF0ZV9maWxlPUV0dFwgZmVsXCB1cHBzdG9kXCBuYXJcIHZpXCBmb3Jzb2t0ZVwgc2thcGFcIHJlc3Vyc2ZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl9jcmVhdGVfZ3JvdXA9RXR0XCBwcm9ibGVtXCB1cHBzdG9kXCBuYXJcIGdydXBwZW5cIGZvcnNva3RlXCBza2FwYXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfY3JlYXRlX2l0ZW09RXR0XCBmZWxcIHVwcHN0b2RcIHZpZFwgc2thcGFuZGVcIGF2XCBueVwgb3ZlcnNhdHRuaW5nCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiBjcmVhdGluZyBhIHByb2plY3QKK2Vycm9yX2NyZWF0aW5nX3Byb2plY3Q9QW5cIGVycm9yXCB3YXNcIGVuY291bnRlcmVkXCB0cnlpbmdcIHRvXCBjcmVhdGVcIGFcIFJlc291cmNlXCBCdW5kbGVcIFByb2plY3QuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEB7MH0gVGhlIG1lc3NhZ2UgZnJvbSBhbiBJT0V4Y2VwdGlvbiB0aGF0IGlzIHRocm93bgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhIGZpbGUKK2Vycm9yX2RlbGV0aW5nPUV0dFwgZmVsXCB1cHBzdG9kXCBuXHUwMEU0clwgamFnXCBmXHUwMEY2cnNcdTAwRjZrdGVcIHRhXCBib3J0XCBmaWxcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IEFuIGVycm9yIHRoYXQgb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGRlbGV0ZSBhIGZpbGUsIGJ1dCB0aGUgdmlydHVhbCBtYWNoaW5lIGNhbiBub3QgZG8gc28KK2Vycm9yX2RlbGV0aW9uX25vdF9wb3NzaWJsZT1SQk1hbmFnZXJcIGt1bmRlXCBlalwgdGFcIGJvcnRcIGZpbC5cIFRpbGxzdFx1MDBFNW5kXCBmXHUwMEY2cmJqdWRlbi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VuZXJhbCBlcnJvciBtZXNzYWdlIGZvciBleHBvcnRpbmcgcmVzb3VyY2UgYnVuZGxlcworZXJyb3JfZXhwb3J0PUV0dFwgZmVsXCB1cHBzdG9kXCB2aWRcIGV4cG9ydGVyaW5nXCBhdlwgcmVzdXJzZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfaW50ZXJuYWw9SW50ZXJudFwgZmVsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9maWxlPUV0dFwgZmVsXCB1cHBzdG9kXCB2aWRcIG1vZGlmaWVyaW5nXCBhdlwgcmVzdXJzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX21vZGlmeV9ncm91cD1FdHRcIGZlbFwgdXBwc3RvZFwgbmFyXCBncnVwcFwgbW9kaWZpZXJhZGVzLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl9tb2RpZnlfaXRlbT1FdHRcIGZlbFwgdXBwc3RvZFwgbmFyXCBvdmVyc2F0dG5pbmdcIGFuZHJhZGVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX25vX2J1bmRsZV9mb3JfZmlsZT1Gb3JcIGF0dFwgc2thcGFcIGVuXCByZXN1cnNmaWxcIHNhXCBtYXN0ZVwgZHVcIGZvcnN0XCBza2FwYVwgZW5cIHJlc3Vyc2dydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX25vX2J1bmRsZV9mb3JfZ3JvdXA9Rm9yXCBhdHRcIHNrYXBhXCBlblwgZ3J1cHBcIHNhXCBtYXN0ZVwgZHVcIGZvcnN0XCBza2FwYVwgZW5cIHJlc3Vyc2dydXBwLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB0aGUgdXNlciB0cmllcyB0byBjcmVhdGUgYSByZXNvdXJjZSwgd2l0aG91dCBhbiBvcGVuIHJlc291cmNlIGJ1bmRsZQorZXJyb3Jfbm9fYnVuZGxlX2Zvcl9pdGVtPU9wcG5hXCBlblwgcmVzdXJzZ3J1cHBcIGlubmFuXCBkdVwgZm9yc29rZXJcIHNrYXBhXCBlblwgbnlcIG92ZXJzYXR0bmluZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK2Vycm9yX25vX2tleV9yZXBsYWNlPUVyc1x1MDBFNHR0XCBmdW5nZXJhclwgZWpcIGZcdTAwRjZyXCByZXN1cnNcIG55Y2tsYXIuXCBBbGxhXCBhbmRyYVwgZXJzXHUwMEU0dHRuaW5nYXJcIGtvbW1lclwgYXR0XCB1dGZcdTAwRjZyYXMuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gdGhhdCBSQk1hbmFnZXIgY2FuIG5vdCByZWFkIHRoZSBmaWxlIGFzIGNyZWF0ZWQgYnkgUkJNYW5hZ2VyCitlcnJvcl9ub3RfcmJtYW5hZ2VyX2Zvcm1hdD1EZW5cIHZhbGRhXCByZXN1cnNcIGdydXBwZW5cIHZhclwgZWpcIHNrYXBhZFwgYXZcIFJCTWFuYWdlcixcIGVsbGVyXCBmaWxlblwgXHUwMEU0clwgc2thZGFkLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgd291bGQgbm90IG9wZW4KKyMgQGNvbW1lbnQgRXJyb3IgbWVzc2FnZSBvY2N1cmluZyBvbiBhbiBJL08gZXJyb3IgdHJ5aW5nIHRvIG9wZW4gYSBmaWxlCitlcnJvcl9vcGVuaW5nX2ZpbGU9S3VuZGVcIGVqXCBcdTAwRjZwcG5hXCBmaWxcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBFcnJvciBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIFJCTWFuYWdlciBlbmNvdW50ZXJzIGFuIGVycm9yIHdyaXRpbmcgcHJlZmVyZW5jZXMgdG8gdGhlIGZpbGUgc3lzdGVtCitlcnJvcl9wcmVmZXJlbmNlc19zYXZlPUV0dFwgZmVsXCB1cHBzdG9kXCBuXHUwMEU0clwgamFnXCBmXHUwMEY2cnNcdTAwRjZrdGVcIHNwYXJhXCBkaW5hXCBpbnN0XHUwMEU0bGxpbmdhci4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgZXJyb3IgbWVzc2FnZSBnZW5lcmF0ZWQKKyMgQGNvbW1lbnQgQSBtZXNzYWdlIHByZXNlbnRlZCB0byB0aGUgdXNlciB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBzYXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZQorZXJyb3Jfc2F2aW5nPVByb2JsZW1cIHZpZFwgc3BhcmFuZGVcIGF2XCByZXN1cnNncnVwcGVuXDpcIFwgezB9CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHZW5lcmFsIGVycm9yIG1lc3NhZ2Ugd2hlbiBzYXZpbmcgYSBwcm9qZWN0CitlcnJvcl9zYXZpbmdfcHJvamVjdD1BblwgZXJyb3JcIHdhc1wgZW5jb3VudGVyZWRcIHRyeWluZ1wgdG9cIHNhdmVcIHRoZVwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIyIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU3VnZ2VzdCB0cnlpbmcgdG8gaW1wb3J0IHRoZSByZXNvdXJjZSBidW5kbGUgaW5zdGVhZCBvZiBvcGVuaW5nIGl0LgorZXJyb3Jfc3VnZ2VzdF9pbXBvcnRfcHJvcGVydGllcz1GXHUwMEY2cnNcdTAwRjZrXCBpbXBvcnRlcmFcIHJlc3Vyc2dydXBwZW5cIGlzdFx1MDBFNGxsZXQuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2Vycm9yX3RyeV9hZ2Fpbl9maWxlPUZvcnNva1wgaWdlblwgbWVkXCBlblwgYW5uYW5cIGtvZG5pbmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorZXJyb3JfdHJ5X2FnYWluX2dyb3VwPUZvcnNva1wgaWdlblwgbWVkXCBlblwgYW5uYW5cIGdydXBwbmFtbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCitlcnJvcl90cnlfYWdhaW5faXRlbT1Gb3Jzb2tcIGlnZW5cIG1lZFwgZW5cIGFubmFuXCBueWNrZWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVmFsdWUgaW5zZXJ0ZWQgaW50byB0YWJsZSBjZWxscyB3aGVuIGFuIGVycm9yIGhhcyBvY2N1cmVkCit0YWJsZV9jZWxsX2Vycm9yPSpGZWwqCisKKyMKKyMgQGdyb3VwIEV4cG9ydAorIworIyBAZ3JvdXBDb21tZW50IFJlc291cmNlcyBkZWFsaW5nIHdpdGggZXhwb3J0IG9wdGlvbnMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBPcHRpb24gZm9yIHRoZSBwYXJhbWV0ZXIgZm9yIGNyZWF0ZWQgYSBwcm90ZWN0ZWQgY2xhc3MKK2V4cG9ydF9qYXZhX2NsYXNzX3Byb3RlY3RlZD1Ta2FwYVwgZW5cIHNreWRkYWRcIGtsYXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIHNldHRpbmcgdGhlIGNyZWF0ZWQgY2xhc3MgYXMgcHVibGljCitleHBvcnRfamF2YV9jbGFzc19wdWJsaWM9U2thcGFcIGVuXCBwdWJsaWtcIGtsYXNzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcGFyYW1ldGVyIGZvciBjcmVhdGluZyBwcm90ZWN0ZWQgbWV0aG9kcyBpbiB0aGUgamF2YSBjbGFzcworZXhwb3J0X2phdmFfbWV0aG9kc19wcm90ZWN0ZWQ9U2thcGFcIGVuXCBza3lkZGFkXCBtZXRvZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBPcHRpb24gZm9yIHBhcmFtZXRlciBmb3IgY3JlYXRpbmcgcHVibGljIG1ldGhvZHMKK2V4cG9ydF9qYXZhX21ldGhvZHNfcHVibGljPVNrYXBhXCBwdWJsaWtcIG1ldG9kCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRpdGxlIG9mIGEgY2hlY2sgYm94IGZvbGxvd2VkIGJ5IGEgdGV4dCBmaWVsZCBmb3Igc3BlY2lmeWluZyB3aGV0aGVyIG9yIG5vdCB0byB1c2UgYSBwYWNrYWdlIGluIHRoZSBnZW5lcmF0ZWQgamF2YSBjbGFzcyBhbmQgd2hhdCB0aGUgcGFja2FnZSBzaG91bGQgYmUgY2FsbGVkCitleHBvcnRfamF2YV9wYWNrYWdlPVNwZWNpZmllcmFcIEphdmFcIHBhY2thZ2VcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDYtMjcgQG1vZGlmaWVkIDIwMDEtMDctMDIgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUZXh0IHBsYWNlZCBpbiBhIGxhYmVsIGF0IHRoZSB0b3Agb2YgdGhlIGRpYWxvZyBib3ggZm9yIHNwZWNpZnlpbmcgcGFyYW1ldGVycyBjb25jZXJuaW5nIHRoZSBleHBvcnQgb2YgcmVzb3VyY2UgYnVuZGxlcyBpbnRvIGEgamF2YSBjbGFzcworZXhwb3J0X2phdmFfdGl0bGU9VmFyXCBnb2RcIHNwZWNpZmljZXJhXCBmXHUwMEY2bGphbmRlXCBwYXJhbWV0cmFyXCBmXHUwMEY2clwgZGluXCBKYXZhXCBrbGFzc1w6CisKKyMKKyMgQGdyb3VwIEdlbmVyYWwKKyMKKyMgQGdyb3VwQ29tbWVudCBTb21lIGl0ZW1zIHRoYXQgYXJlIGNvbW1vbiBhY2Nyb3NzIGdyb3VwcworCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgZmlsZSBvciBjbGFzcyBjb21wb3NlZCBvZiB0aGUgZGVmYXVsdCB0cmFuc2xhdGlvbnMgZm9yIHRoZSBidW5kbGUKK2Jhc2VjbGFzcz1CYXNrbGFzcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDQtMDYtMjkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEdlb3JnZQorIyBAY29tbWVudCBUaGlzIGlzIHRoZSBsZWdhbCBjb3B5cmlnaHQgbm90aWNlCitjb3B5cmlnaHQ9KEMpXCBLb3BpZXJpbmdzc2t5ZGRhZFwgSUJNXCBDb3JwLlwgMjAwMC0yMDA0XCAtXCBBbGxhXCByYXR0aWdoZXRlclwgcmVzZXJ2ZXJhZGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgR2VybmVyYWwgdXNlIGZvciBmaWxlIGRpcmVjdG9yaWVzCitkaXJlY3Rvcnk9Rm9sZGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2dyb3Vwcz1HcnVwcGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgZmlsZSBpbiB0aGUgJ0ltYWdlcycgZGlyZWN0b3J5IHRoYXQgcmVwcmVzZW50cyB0aGUgbG9nbyBzZWVuIGF0IHRoZSB0b3Agb2YgdGhlIGFwcGxpY2F0aW9uCitsb2dvX2ZpbGVuYW1lPVRpdGxlTG9nb190cmFuc3BhcmVudC5naWYKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRyZWUgbm9kZSB0aXRsZSB3aGVuIHZpZXdpbmcgYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdmlldyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBwcm9qZWN0Citub19wcm9qZWN0PURlZmF1bHRcIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFRyZWUgbm9kZSB0aXRsZSBkZWZhdWx0ZWQgdG8gd2hlbiBubyByZXNvdXJjZSBidW5kbGUgb3IgcHJvamVjdCBoYXMgYmVlbiBvcGVuZWQgYnkgdGhlIHVzZXIKK25vX3Byb2plY3RfYnVuZGxlPU5vXCBQcm9qZWN0XCBvclwgUmVzb3VyY2VcIEJ1bmRsZVwgT3BlbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIHRvcCB0cmVlIG5vZGUgdGl0bGUsIHdoZW4gbm8gcmVzb3VyY2UgYnVuZGxlIGhhcyBiZWVuIG9wZW5lZCBvciBjcmVhdGVkCitub19yZXNvdXJjZV9idW5kbGU9SW5nZW5cIHJlc3Vyc2dydXBwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK25vbmU9SW5nZW4KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMS0yMCBAbW9kaWZpZWQgMjAwMS0xMS0yMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFByb2plY3QgdGFibGUgY29sdW1uIG5hbWUgLSBMb2NhdGlvbiBvZiBhIHJlc291cmNlIGJ1bmRsZQorcHJvamVjdF90YWJsZV9maWxlX2xvY2F0aW9uPUZpbGVcIExvY2F0aW9uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUYWJsZSBDb2x1bW4gTmFtZSBmb3IgcmVzb3VyY2UgYnVuZGxlIG5hbWUKK3Byb2plY3RfdGFibGVfcmVzb3VyY2VfYnVuZGxlPVJlc291cmNlXCBCdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIGFiYnJldmlhdGVkIG5hbWUgb2YgdGhpcyBhcHBsaWNhdGlvbgorcmJtYW5hZ2VyPVJCTWFuYWdlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDQtMDYtMjkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEdlb3JnZQorIyBAY29tbWVudCAKK3JibWFuYWdlcl9jb250YWN0PVNrYXBhcmVcOlwgSmFyZWRcIEphY2tzb25cICZcIEdlb3JnZVwgUmhvdGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgZnVsbCBuYW1lIG9mIHRoaXMgYXBwbGljYXRpb24KK3Jlc291cmNlX2J1bmRsZV9tYW5hZ2VyPVJlc3Vyc2dydXBwXCBBZ2FyZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCit0YWJsZV9jb2x1bW5fZXJyb3I9RmVsXCBpXCBrb2x1bW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEB7MH0gCisjIEBjb21tZW50IE5vZGUgdGl0bGUsIHVuZGVyIHdoaWNoIGFsbCBmaWxlcyBvZiB0aGUgc2FtZSBjb3VudHJ5LCBsYW5ndWFnZSByZXNpZGUKK3RyZWVfY291bnRyeV9ub2RlPUxhbmRza29kXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQHswfSBMYW5ndWFnZSBFbmNvZGluZworIyBAY29tbWVudCBUaGUgbm9kZSBiZWxvdyB3aGljaCBsYW5ndWFnZXMgb2Ygb25lIGVuY29kaW5nIGFyZSBncm91cGVkCit0cmVlX2xhbmd1YWdlX25vZGU9U3ByYWtrb2RcOlwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK3RyZWVfdmFyaWFudF9ub2RlPVZhcmlhbnRlclw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgbmFtZSBhc3NpZ25lZCBhcyBhIHVzZXIgbmFtZSB3aGVuIHRoZSB1c2VyIG5hbWUgaXMgbm90IHNwZWNpZmllZAordW5rbm93bl91c2VyPU9rYW5kCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK3VudGl0bGVkPUluZ2VuXCB0aXRlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCit1bnRyYW5zbGF0ZWRfaXRlbXM9T292ZXJzYXR0YVwgc2FrZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEB7MH0gVGhlIHZlcnNpb24gbnVtYmVyCisjIEBjb21tZW50IFRoZSB2ZXJzaW9uIG9mIHRoaXMgYXBwbGljYXRpb24KK3ZlcnNpb249VmVyc2lvblwgezB9CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGdlbmVyYWwgdXNlIFdhcm5pbmcKK3dhcm5pbmc9VmFybmluZworCisjCisjIEBncm91cCBJbXBvcnQKKyMKKyMgQGdyb3VwQ29tbWVudCBSZXNvdXJjZXMgZGVhbGluZyB3aXRoIGltcG9ydCBvcHRpb25zCisKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIGZpbGUgY2hvb3NlciBmb3IgY2hvb3NpbmcgVE1YIGZpbGVzCitpbXBvcnRfVE1YX2ZpbGVfZGVzY3JpcHRpb249VE1YXCBmaWxlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIFRNWCBYTUwgZmlsZXMKK2ltcG9ydF9UTVhfdGl0bGU9VE1YXCBmaWxpbXBvcnQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSBmaWxlIGNob29zZXIgZm9yIGNob29zaW5nIFhMSUZGICgueGxmKSBmaWxlcworaW1wb3J0X1hMRl9maWxlX2Rlc2NyaXB0aW9uPVhMSUZGXCBmaWxlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBEaWFsb3QgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIFhMSUZGICgueGxmKSBmaWxlcworaW1wb3J0X1hMRl90aXRsZT1YTElGRlwgZmlsaW1wb3J0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGNvbmZsY2l0cyBvbiBhIGNhc2UgYnkgY2FzZSBiYXNpcworaW1wb3J0X2NvbmZsaWN0X3Byb21wdD1Gclx1MDBFNWdhXCB2aWRcIHZhcmplXCBrb25mbGlrdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gc3BlY2lmeWluZyB3aGV0aGVyIGEgZ3JvdXAgZm91bmQgaW4gdGhlIHRhcmdldCBidXQgbm90IGZvdW5kIGluIHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlIHNob3VsZCBiZSBjcmVhdGVkIGluIHRoZSByZXNvdXJjZSBidW5kbGUgb3Igbm90CitpbXBvcnRfZGVmYXVsdF9ncm91cF9jcmVhdGlvbj1Ta2FwYVwgZ3J1cHBlclwgc29tXCBpbnRlXCBleGlzdGVyYXJcIGlcIG51dmFyYW5kZVwgYnVuZGxlCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdG9pbiBmb3IgbWFya2luZyB0aGUgaW5jb21pbmcgdmFsdWVzIGFzIHRyYW5zbGF0ZWQgb3Igbm90CitpbXBvcnRfZGVmYXVsdF90cmFuc2xhdGVkPU1hcmtlcmFcIHNvbVwgXHUwMEY2dmVyc2F0dAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3Igb3B0aW9ucyBzcGVjaWZ5aW5nIHRoZSBtZXRhIGRhdGEgdG8gYmUgYXBwbGllZCB0byBpbmRpdmlkdWFsIHJlc291cmNlcyBpZiBpdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBpbXBvcnQgc291cmNlCitpbXBvcnRfZGVmYXVsdF92YWx1ZXM9U2tcdTAwRjZuc3ZcdTAwRTRyZGVuCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wMiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIGxvY2FsZSBlbmNvZGluZyBvZiB0aGUgZmlsZSBpbiBxdWVzdGlvbgorIyBAY29tbWVudCBJbnN0cnVjdGlvbnMgZm9yIHByb21wdGluZyB0aGUgdXNlciB0byByZXNvbHZlIGEgY29uZmxpY3Qgd2hlbiBpbXBvcnRpbmcgcmVzb3VyY2VzIGZyb20gYSBsb2NhbGUgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCByZXNvdXJjZSBidW5kbGUKK2ltcG9ydF9maWxlX2NvbmZsaWN0X2Nob29zZT1Lb2RuaW5nZW5cIHswfVwgZmlubnNcIGVqLlwgVlx1MDBFNGxqXCBldHRcIHZhbFwgZlx1MDBGNnJcIGF0dFwgZml4YVwga29uZmxpa3RlbixcIGVsbGVyXCBhdmJyeXRcIGZcdTAwRjZyXCBhdHRcIGlnbm9yZXJhLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkLCBidXQgbm90IHBvcHVsYXRlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfZW1wdHk9U2thcGFcIGVuXCBueSxcIHRvbVwgcmVzdXJzZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGZpbGUgY29uZmxpY3RzIGluIHdoaWNoIGEgbmV3IGZpbGUgaXMgZ2VuZXJhdGVkIGFuZCBwb3B1bGF0ZWQgd2l0aCBhbGwgdGhlIGV4aXN0aW5nIHJlc291cmNlcworaW1wb3J0X2ZpbGVfY29uZmxpY3RfZ2VuZXJhdGVfcG9wdWxhdGU9U2thcGFcIGVuXCBueVwgcmVzdXJzZmlsXCBvY2hcIGZ5bGxcIGlcIG1lZFwgYmFzLWtsYXNzZW5zXCByZXN1cmVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgZmlsZSBjb25mbGljdHMgaW4gd2hpY2ggdGhlIGNvbmZsaWN0cyBhcmUgaWdub3JlZAoraW1wb3J0X2ZpbGVfY29uZmxpY3RfaWdub3JlPVNraXBwYVwgb2NoXCBpZ25vcmVyYVwgYWxsYVwgcmVzdXJzZXJcIGZyXHUwMEU1blwgbG9rYWxlclwgc29tXCBpbnRlXCBleGlzdGVyYXJcIGlcIG51dmFyYW5kZVwgYnVudC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHNlY3Rpb24gbGlzdGluZyBvcHRpb25zIGZvciB3aGF0IHRvIGRvIHdoZW4gYW4gaW1wb3J0ZWQgdmFsdWUgZXhpc3RzIGluIGEgbG9jYWxlIG5vdCBkZWZpbmVkIGluIHRoZSBleGlzdGluZyByZXNvdXJjZSBidW5kbGUKK2ltcG9ydF9maWxlX2NvbmZsaWN0cz1SZXN1cnNmaWxcIHNha25hcworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBTZWxlY3Rpb24gb2YgdGhlIGRlZmF1bHQgZ3JvdXAuIEEgbGlzdCBvZiBncm91cHMgd2lsbCBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgcmVzb3VyY2UgaW4gYSBDb21ib0JveAoraW1wb3J0X2luc2VydF9ncm91cD1MXHUwMEU0Z2dcIHRpbGxcIGdydXBwXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTI2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHRoZSB0eXBlcyBvZiBmaWxlcyBhY2NlcHRlZCBmb3IgdGhpcyBpbXBvcnQgdHlwZQoraW1wb3J0X2phdmFfZmlsZV9kZXNjcmlwdGlvbj1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIEJhc1wga2xhc3NlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZGlhbG9nIHByb21wdGluZyBmb3IgaW1wb3J0IGZyb20gamF2YSBjbGFzc2VzCitpbXBvcnRfamF2YV90aXRsZT1KYXZhXCBMaXN0UmVzb3VyY2VCdW5kbGVcIEtsYXNzXCBpbXBvcnRlcmluZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBpbmRpY2F0aW5nIHNlY3Rpb24gY29udGFpbmluZyB1c2VyIG9wdGlvbnMKK2ltcG9ydF9vcHRpb25zPUltcG9ydGVyaW5nc2luc3RcdTAwRTRsbG5pbmdhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBmb3IgZmlsZSBjaG9vc2VyIGZvciBzZWxlY3Rpb24gb2YgcmVzb3VyY2UgYnVuZGxlcyBzdG9yZWQgaW4gLnByb3BlcnRpZXMgZmlsZXMKK2ltcG9ydF9wcm9wZXJ0aWVzX2ZpbGVfZGVzY3JpcHRpb249UmVzdXJzYnVudFwgYmFza2xhc3NlcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBEaWFsb2cgdGl0bGUgZm9yIGltcG9ydGluZyBmcm9tIHByb3BlcnRpZXMgZmlsZXMgKGNyZWF0ZWQgb3Igbm90IGJ5IFJCTWFuYWdlcikKK2ltcG9ydF9wcm9wZXJ0aWVzX3RpdGxlPVJlc3Vyc2J1bnRcIGluc3RcdTAwRTRsbG5pbmdzaW1wb3J0ZXJpbmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHsxfSBFbmNvZGluZyBvZiB0aGUgcmVzb3VyY2UgdmFsdWUgd2l0aCBhIGNvbmZsaWN0CisjIEB7MH0gVGhlIGtleSB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgaW4gY29uZmxpY3QKKyMgQGNvbW1lbnQgVGhpcyBpcyBhIHdhcm5pbmcgYW5kIGluc3RydWN0aW9uIGZvciB3aGVuIGEgcmVzb3VyY2UgY29uZmxpY3Qgb2NjdXJzIGR1cmluZyBhbiBpbXBvcnQKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdF9jaG9vc2U9Tnlja2VsblwgezB9XCBmaW5uc1wgcmVkYW5cIGlcIHsxfVwgcmVzdXJzYnVudC5cIFZcdTAwRTRsalwgZXR0XCBhbHRlcm5hdGl2XCBmXHUwMEY2clwgYXR0XCBsXHUwMEY2c2FcIHByb2JsZW1ldC4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTAyIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBUaGUgdHJhbnNsYXRpb24gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZSBpdGVtCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIHZhbHVlIG9mIHRoZSByZXNvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGltcG9ydCBmaWxlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3NvdXJjZT1JbXBvcnRcdTAwRjZ2ZXJzXHUwMEU0dHRuaW5nXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDIgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAezB9IFRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBvZiB0aGUgcmVzb3VyY2UgaXRlbQorIyBAY29tbWVudCBBbiBpbmRpY2F0aW9uIG9mIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZSBoZWxkIGJ5IHRoZSBhY3RpdmUgcmVzb3VyY2UgYnVuZGxlIGR1cmluZyBhIHRyYW5zbGF0aW9uIHJlc291cmNlIGNvbmZsaWN0CitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfY2hvb3NlX3RhcmdldD1SZXN1cnNidW50XCBcdTAwRjZ2ZXJzXHUwMEU0dHRuaW5nXDpcIHswfQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBPcHRpb24gZm9yIHJlc29sdmluZyByZXNvdXJjZSBjb25mbGljdHMgYnkgaWdub3JpbmcgaW1wb3J0IHZhbHVlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3RfaWdub3JlPUlnbm9yZXJhXCBrb25mbGl0ZW5cIG9jaFwgbFx1MDBFNG1uYVwgb3JpZ2luYWxyZXN1cnNlblwgb1x1MDBFNG5kcmFkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE9wdGlvbiBmb3IgcmVzb2x2aW5nIGNvbmZsaWN0cyBieSB1c2luZyB0aGUgaW1wb3J0IHZhbHVlCitpbXBvcnRfcmVzb3VyY2VfY29uZmxpY3Rfb3ZlcndyaXRlPVNrcml2XCBcdTAwRjZ2ZXJcIHJlc3Vyc2VuXCBtZWRcIHZcdTAwRTRyZGVuXCBmclx1MDBFNW5cIGltcG9ydGVyYWRcIGZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMjYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaXRsZSBsaXN0aW5nIG9wdGlvbnMgZm9yIHJlc29sdmluZyBjb25mbGljdHMgYmV0d2VlbiByZXNvdXJjZXMKK2ltcG9ydF9yZXNvdXJjZV9jb25mbGljdHM9UmVzdXJzXCBrb25mbGlrdGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0yNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEB7MH0gVGhlIHBhdGggYW5kIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIHNvdXJjZSBmaWxlIGZvciB0aGUgaW1wb3J0CitpbXBvcnRfc291cmNlX2ZpbGU9S1x1MDBFNGxsZmlsXDpcIHswfQorCisjCisjIEBncm91cCBNZW51IEl0ZW1zCisjCisjIEBncm91cENvbW1lbnQgVGhlc2UgcmVzb3VyY2VzIHJlcHJlc2VudCBhbGwgb2YgdGhlIG1lbnUgYW5kIG1lbnUgaXRlbSB0aXRsZXMKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgbWVudSB0aXRsZSBjb3ZlcmluZyBjb3B5aW5nLCBwYXN0aW5nLCBkZWxldGluZyBvZiBpdGVtcworbWVudV9lZGl0PUVkaXRlcmEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfY29weT1Lb3BpZXJhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0wNyBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2NvcHlfdHJpZ2dlcj1jCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2N1dD1UYVwgYm9ydAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9jdXRfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9lZGl0X2RlbGV0ZT1SYWRlcmEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTA3IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2VkaXRfZGVsZXRlX3RyaWdnZXI9ZAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9wYXN0ZT1LbGlzdHJhXCBpbgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDcgQG1vZGlmaWVkIDIwMDEtMDItMDcgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZWRpdF9wYXN0ZV90cmlnZ2VyPXAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfZWRpdCcgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV9lZGl0X3RyaWdnZXI9ZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciB0aGUgb3BlbmluZywgc2F2aW5nLCBldGMuIGRvY3VtZW50cyBhbmQgZXhpdGluZyB0aGUgcHJvZ3JhbQorbWVudV9maWxlPUZpbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBYmlsaXR5IHRvIGV4cG9ydCByZXNvdXJjZSBidW5kbGVzIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzCittZW51X2ZpbGVfZXhwb3J0PUV4cG9ydGVyYVwgcmVzdXJzYnVudAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDItMDUtMTcgQG1vZGlmaWVkIDIwMDItMDUtMTcgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCBBYmxpdHkgdG8gZXhwb3J0IHRvIElDVSBSZXNvdXJjZSBCdW5kbGUgZmlsZXMKK21lbnVfZmlsZV9leHBvcnRfSUNVPUlDVVwgRmlsZXIuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAyLTA1LTE3IEBtb2RpZmllZCAyMDAyLTA1LTE3IEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfZXhwb3J0X0lDVV90cmlnZ2VyPWkKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQWJsaXR5IHRvIGV4cG9ydCB0byBUTVggWE1MIGZpbGVzCittZW51X2ZpbGVfZXhwb3J0X1RNWD1UTVhcIEZpbGVyLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9UTVhfdHJpZ2dlcj10CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwNC0wNy0wMSBAbW9kaWZpZWQgMjAwNC0wNy0wMSBAY3JlYXRvciBHZW9yZ2UgUmhvdGVuIEBtb2RpZmllciBHZW9yZ2UgUmhvdGVuCisjIEBjb21tZW50IHgKK21lbnVfZmlsZV9leHBvcnRfWExGPVhMSUZGXCBGaWxlci4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDQtMDctMDEgQG1vZGlmaWVkIDIwMDQtMDctMDEgQGNyZWF0b3IgR2VvcmdlIFJob3RlbiBAbW9kaWZpZXIgR2VvcmdlIFJob3RlbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfWExGX3RyaWdnZXI9eAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBYmlsaXR5IHRvIGV4cG9ydCB0byBqYXZhIGZpbGVzIHRoYXQgY29tcGlsZSB0byBiZSBMaXN0UmVzb3VyY2VCdW5kbGUgY2xhc3MgZXh0ZW5zaW9ucworbWVudV9maWxlX2V4cG9ydF9qYXZhPUtvbXBhdGlibGFcIEphdmFcIGZpbGVyLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9qYXZhX3RyaWdnZXI9agorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBFeHBvcnQgYWJpbGl0eSB0byBwcm9wZXJ0aWVzIGZpbGVzIG1pbnVzIHRoZSBtZXRhZGF0YQorbWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzPU1pbmltYWxcIGluc3RcdTAwRTRsbG5pbmdzZmlsLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2V4cG9ydF9wcm9wZXJ0aWVzX3RyaWdnZXI9cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9leHBvcnRfdHJpZ2dlcj14CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3IgaW1wb3J0IGFuZCBtZXJnaW5nIGFub3RoZXIgcmVzb3VyY2UgZmlsZSB3aXRoIHRoZSBidW5kbGUgYmVpbmcgd29ya2VkIHdpdGgKK21lbnVfZmlsZV9pbXBvcnQ9SW1wb3J0ZXJhXCByZXN1cnNncnVwcFwgZnJhblwgZmlsLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmxpaXR5IGZyb20gWE1MIFRNWCBkb2N1bWVudHMKK21lbnVfZmlsZV9pbXBvcnRfVE1YPVRNWFwgZG9jdW1lbnQuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTE1IEBtb2RpZmllZCAyMDAxLTAxLTE1IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X1RNWF90cmlnZ2VyPXQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgSW1wb3J0IGFiaWxpdHkgZnJvbSBYTUwgWExJRkYgKC54bGYpIGZpbGVzCittZW51X2ZpbGVfaW1wb3J0X1hMRj1YTElGRlwgZG9jdW1lbnQuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDA0LTA3LTAxIEBtb2RpZmllZCAyMDA0LTA3LTAxIEBjcmVhdG9yIEdlb3JnZSBSaG90ZW4gQG1vZGlmaWVyIEdlb3JnZSBSaG90ZW4KKyMgQGNvbW1lbnQgWAorbWVudV9maWxlX2ltcG9ydF9YTEZfdHJpZ2dlcj14CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEltcG9ydCBhYmlsaXR5IGZyb20gamF2YSBjbGFzc2VzIChMaXN0UmVzb3VyY2VCdW5kbGUpCittZW51X2ZpbGVfaW1wb3J0X2phdmE9TGlzdFJlc291cmNlQnVuZGxlXCBKYXZhXCBLbGFzc2VyLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMS0xNSBAbW9kaWZpZWQgMjAwMS0wMS0xNSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9maWxlX2ltcG9ydF9qYXZhX3RyaWdnZXI9agorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbXBvcnQgYWJpbGl0eSBmcm9tIHByb3BlcnRpZXMgZmlsZXMgbm90IGdlbmVyYXRlZCBieSBSQk1hbmFnZXIKK21lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllcz1FbmtlbFwgcmVzdXJzYnVudC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDEtMTUgQG1vZGlmaWVkIDIwMDEtMDEtMTUgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9pbXBvcnRfcHJvcGVydGllc190cmlnZ2VyPVMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfaW1wb3J0X3RyaWdnZXI9bQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGNyZWF0aW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZQorbWVudV9maWxlX25ldz1OeVwgcmVzdXJzZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X2ZpbGVfbmV3X3RyaWdnZXI9bgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIG9wZW5pbmcgYSByZXNvdXJjZSBidW5kbGUKK21lbnVfZmlsZV9vcGVuPU9wcG5hXCByZXN1cnNncnVwcC4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9vcGVuX3RyaWdnZXI9bworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGNsb3NpbmcgdGhlIGFwcGxpY2F0aW9uCittZW51X2ZpbGVfcXVpdD1BdnNsdXRhCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IAorbWVudV9maWxlX3F1aXRfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE1lbnUgaXRlbSBmb3Igc2F2aW5nIHRoZSByZXNvdXJjZSBidW5kbGUgYmVpbmcgd29ya2VkIHdpdGgKK21lbnVfZmlsZV9zYXZlPVNwYXJhXCByZXN1cnNncnVwcAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9zYXZlX3RyaWdnZXI9cworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IEl0ZW0gZm9yIHNhdmluZyBhIHJlc291cmNlIGJ1bmRsZSB0byBhIHBhcnRpY3VsYXIgbG9jYXRpb24gYW5kIGZpbGUgbmFtZQorbWVudV9maWxlX3NhdmVhcz1TcGFyYVwgcmVzdXJzZ3J1cHBcIHNvbS4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCAKK21lbnVfZmlsZV9zYXZlYXNfdHJpZ2dlcj1hCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X2ZpbGUnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfZmlsZV90cmlnZ2VyPWYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSB0aXRsZSBmb3IgaGVscCBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvZ3JhbQorbWVudV9oZWxwPUhqYWxwCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IE1lbnUgaXRlbSB3aGljaCBicmluZ3MgdXAgYSBkaWFsb2cgZGVzY3JpYmluZyB0aGUgYXBwbGljYXRpb24KK21lbnVfaGVscF9hYm91dD1PbVwgUkJNYW5hZ2VyLi4uCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0xMCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IAorbWVudV9oZWxwX2Fib3V0X3RyaWdnZXI9YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBUaGUgdHJpZ2dlciBpcyBhIGxldHRlciBmcm9tIHRoZSB0cmFuc2xhdGlvbiBvZiAnbWVudV9oZWxwJyB3aGljaCBwcm92aWRlcyBhIGtleWJvYXJkIHNob3J0Y3V0IHRvIHRoZSBtZW51CittZW51X2hlbHBfdHJpZ2dlcj1oCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE1lbnUgdGl0bGUgZm9yIG9wdGlvbnMgc3VjaCBhcyBjcmVhdGluZyBuZXcgcmVzb3VyY2VzLCBncm91cHMsIGFuZCByZXNvdXJjZSBmaWxlcworbWVudV9vcHRpb25zPUluc3RhbGxuaW5nYXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgTWVudSBJdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBpdGVtCittZW51X29wdGlvbnNfYWRkZW50cnk9U2thcGFcIG55XCBvdmVyc2F0dG5pbmcuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZW50cnlfdHJpZ2dlcj1pCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IE1lbnUgSXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlL2NvdW50cnkvdmFyaWFudAorbWVudV9vcHRpb25zX2FkZGZpbGU9U2thcGFcIG55XCByZXN1cnNmaWwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZmlsZV90cmlnZ2VyPWYKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgTWVudSBpdGVtIGZvciBjcmVhdGluZyBhIG5ldyByZXNvdXJjZSBncm91cAorbWVudV9vcHRpb25zX2FkZGdyb3VwPVNrYXBhXCBueVwgZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfYWRkZ3JvdXBfdHJpZ2dlcj1nCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IGl0ZW0gZm9yIGVkaXRpbmcgdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBmb3IgdGhlIGFwcGxpY2F0aW9uCittZW51X29wdGlvbnNfcHJlZmVyZW5jZXM9UGVyc29ubGlnYVwgaW5zdGFsbG5pbmdhci4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMTAgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfcHJlZmVyZW5jZXNfdHJpZ2dlcj1wCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTEtMjAgQG1vZGlmaWVkIDIwMDEtMTEtMjAgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBNZW51IGl0ZW0gdGhhdCBtYWtlcyB2aXNpYmxlIHRoZSBwcm9qZWN0IHZpZXdlcgorbWVudV9vcHRpb25zX3Byb2plY3Rfdmlld2VyPU9wZW5cIFByb2plY3RcIFZpZXdlcgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTExLTIwIEBtb2RpZmllZCAyMDAxLTExLTIwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgCittZW51X29wdGlvbnNfcHJvamVjdF92aWV3ZXJfdHJpZ2dlcj12CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSB0cmlnZ2VyIGlzIGEgbGV0dGVyIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mICdtZW51X29wdGlvbnMnIHdoaWNoIHByb3ZpZGVzIGEga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdGhlIG1lbnUKK21lbnVfb3B0aW9uc190cmlnZ2VyPWkKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xNyBAbW9kaWZpZWQgMjAwMS0xMi0xNyBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgYWRkaW5nIGEgbmV3IHJlc291cmNlIGJ1bmRsZSB0byB0aGUgcHJvamVjdAorbWVudV90cmVlX2FkZF9wcm9qZWN0X2J1bmRsZT1BZGRcIFJlc291cmNlXCBCdW5kbGUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBkZWxldGluZyBwZXJtYW5lbnRseSBhIHJlc291cmNlIGZpbGUKK21lbnVfdHJlZV9kZWxldGU9VGFcIGJvcnRcIHJlc3Vyc1wgZmlsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wNi0yNyBAbW9kaWZpZWQgMjAwMS0wNy0wMiBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgcmVtb3ZpbmcgYSBzcGVjaWZpYyByZXNvdXJjZSBmaWxlIGZyb20gdGhlIHRyZWUgdmlldyBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlCittZW51X3RyZWVfaGlkZT1HXHUwMEY2bVwgcmVzdXJzXCBmaWwKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IFBvcHVwIG1lbnUgaXRlbSBmb3IgY3JlYXRpbmcgYSBuZXcgcHJvamVjdAorbWVudV90cmVlX25ld19wcm9qZWN0PU5ld1wgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4uLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBvcGVuaW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK21lbnVfdHJlZV9vcGVuX3Byb2plY3Q9T3BlblwgUmVzb3VyY2VcIEJ1bmRsZVwgUHJvamVjdC4uLgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBidW5kbGUgaW4gdGhlIHByb2plY3QgdHJlZQorbWVudV90cmVlX3JlbW92ZV9wcm9qZWN0X2J1bmRsZT1SZW1vdmVcIGZyb21cIFByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTA2LTI3IEBtb2RpZmllZCAyMDAxLTA3LTAyIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgUG9wdXAgbWVudSBpdGVtIGZvciBzYXZpbmcgYSBzcGVjaWZpYyByZXNvdXJjZSBidW5kbGUgZmlsZQorbWVudV90cmVlX3NhdmU9U3BhcmFcIHJlc3Vyc1wgZmlsCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGl0ZW0gZm9yIHNhdmluZyBjaGFuZ2VzIHRvIHRoZSByZXNvdXJjZSBwcm9qZWN0IGZpbGUsIG5vdCB0aGUgcmVzb3VyY2UgYnVuZGxlcyB0aGVtc2VsdmVzIHdpdGhpbiB0aGUgcHJvamVjdAorbWVudV90cmVlX3NhdmVfcHJvamVjdD1TYXZlXCBSZXNvdXJjZVwgQnVuZGxlXCBQcm9qZWN0XCBGaWxlLi4uCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBQb3B1cCBtZW51IGZvciBzZWxlY3RpbmcgYSByZXNvdXJjZSBidW5kbGUgZnJvbSB0aGUgcHJvamVjdCB0cmVlIHRvIGJlIGVkaXRlZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIHRyZWUKK21lbnVfdHJlZV9zZWxlY3RfcHJvamVjdF9idW5kbGU9V29ya1wgd2l0aFwgdGhpc1wgUmVzb3VyY2VcIEJ1bmRsZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IHRpdGxlIGZvciBjaGFuZ2luZyB0aGUgZGlzcGxheSBiZWluZyBzZWVuIGJ5IHRoZSB1c2VyCittZW51X3ZpZXc9VmlzYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBNZW51IGl0ZW0gdGhhdCB0YWtlcyB5b3UgZGlyZWN0bHkgdG8gdGhlIHN0YXRpc3RpY3MgcGFuZWwgZm9yIHRoZSBlbnRpcmUgYnVuZGxlCittZW51X3ZpZXdfc3RhdGlzdGljcz1TdGF0aXN0aWtcIGZvclwgcmVzdXJzZ3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgCittZW51X3ZpZXdfc3RhdGlzdGljc190cmlnZ2VyPXMKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTEwIEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGhlIHRyaWdnZXIgaXMgYSBsZXR0ZXIgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgJ21lbnVfdmlldycgd2hpY2ggcHJvdmlkZXMgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGUgbWVudQorbWVudV92aWV3X3RyaWdnZXI9dgorCisjCisjIEBncm91cCBQcm9qZWN0IFBhbmVsCisjCisjIEBncm91cENvbW1lbnQgUGFuZWwgYXNzb2NpYXRlZCB3aXRoIFByb2plY3QgZWRpdGluZworCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAezB9IFRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZSBidW5kbGUKKyMgQGNvbW1lbnQgTGFiZWwgaW5kaWNhdG9yIGFzc29jaWF0aW5nIGEgdGV4dCBib3ggY29udGFpbmluZyBhIHRyYW5zbGF0aW9uIHdpdGggdGhlIHJlc291cmNlIGJ1bmRsZSB0aGUgdHJhbnNsYXRpb24gY29tZXMgZnJvbQorcHJvamVjdF9wYW5lbF9idW5kbGU9UmVzb3VyY2VcIEJ1bmRsZVw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEB7MH0gTmFtZSBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlCisjIEBjb21tZW50IFNwZWNpYWwgaW5kaWNhdG9yIG9mIHRoZSByZXNvdXJjZSBpdGVtIHJlc291cmNlIGJ1bmRsZSB3aGVuIHRoZSBpdGVtIGlzIHVudHJhbnNsYXRlZAorcHJvamVjdF9wYW5lbF9idW5kbGVfdW50cmFuc2xhdGVkPVJlc291cmNlXCBCdW5kbGVcOlwgezB9XCAoVW50cmFuc2xhdGVkKQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgTGFiZWwgdGV4dCBtYXJraW5nIHRoZSBsaW5lIGFib3ZlIG9yIHRvIHRoZSBsZWZ0IG9mIGEgcmVzb3VyY2UgY29tbWVudAorcHJvamVjdF9wYW5lbF9jb21tZW50PUJhc2VcIENsYXNzXCBSZXNvdXJjZVwgQ29tbWVudFw6CisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBMYWJlbCB0ZXh0IGZvciBhIGNvbW1lbnQgd2hlbiBub25lIGlzIGZvdW5kIGZvciBhIHJlc291cmNlCitwcm9qZWN0X3BhbmVsX2NvbW1lbnRfbm9uZT1Ob1wgY29tbWVudFwgc3VwcGxpZWQKKyMgQHRyYW5zbGF0ZWQgZmFsc2UgQGNyZWF0ZWQgMjAwMS0xMi0xOSBAbW9kaWZpZWQgMjAwMS0xMi0xOSBAY3JlYXRvciBVbmtub3duIEBtb2RpZmllciBVbmtub3duCisjIEBjb21tZW50IEJ1dHRvbiB0aXRsZSBzaG93biBvbiB0aGUgcHJvamVjdCBwYW5lbCBmb3IgY29tbWl0dGluZyBjaGFuZ2UgdG8gb25lIHJlc291cmNlIG9ubHkKK3Byb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbj1Db21taXRcIENoYW5nZQorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIG9uIHRoZSBwcm9qZWN0IHBhbmVsIGZvciBzYXZpbmcgYWxsIG9mIHRoZSByZXNvdXJjZXMgZGlzcGxheWVkLiBUaGlzIG1lYW5zIG11bHRpcGxlIHJlc291cmNlIGZpbGVzIGdldCBzYXZlZC4KK3Byb2plY3RfcGFuZWxfY29tbWl0X2J1dHRvbl9hbGw9Q29tbWl0XCBBbGxcIFJlc291cmNlXCBDaGFuZ2VzCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBEZWZhdWx0IHRpdGxlIHNob3duIG9uIHRoZSBwcm9qZWN0IHBhbmVsIHdoZW4gbm8gcGFydGljdWxhciByZXNvdXJjZSBoYXMgYmVlbiBzZWxlY3RlZAorcHJvamVjdF9wYW5lbF9kZWZhdWx0X3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTkgQG1vZGlmaWVkIDIwMDEtMTItMTkgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBUZXh0IGZpZWxkIG1hcmtlciBmb3IgdGhlIHRyYW5zbGF0aW9uIG9mIGEgcmVzb3VyY2Ugd2hlbiB0aGF0IHJlc291cmNlIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgZW5jb2RpbmcgZmlsZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGgKK3Byb2plY3RfcGFuZWxfaXRlbV9pbmhlcml0cz08Tm9cIFRyYW5zbGF0aW9uXDpcIFJlc291cmNlXCBJbmhlcml0c1wgZnJvbVwgcGFyZW50PgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE5IEBtb2RpZmllZCAyMDAxLTEyLTE5IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQHswfSBUaGUga2V5IG9mIHRoZSBzZWxlY3RlZCByZXNvdXJjZQorIyBAY29tbWVudCBUaXRsZSBvbiB0aGUgcHJvamVjdCBwYW5lbCB3aGlsZSBhIHJlc291cmNlIGlzIHNlbGVjdGVkCitwcm9qZWN0X3BhbmVsX3RpdGxlPVByb2plY3RcIFJlc291cmNlXCBFZGl0aW5nXDpcIHswfQorCisjCisjIEBncm91cCBSQlJlcG9ydGVyCisjCisjIEBncm91cENvbW1lbnQgVHJhbnNsYXRpb25zIGZvciB0aGUgUkJSZXBvcnRlciBhcHBsaWNhdGlvbgorCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBCdXR0b24gdGl0bGUgZm9yIHNlbGVjdGluZyBmaWxlIGxvY2F0aW9ucyBmb3IgaW5wdXQvb3V0cHV0CityZXBvcnRlcl9idXR0b25fY2hvb3NlPVZcdTAwRTRsai4uLgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIGluZGljYXRpbmcgdGhlIHJlcG9ydCBnZW5lcmF0aW9uIHNob3VsZCBvY2N1ciBpbW1lZGlhdGVseQorcmVwb3J0ZXJfYnV0dG9uX25vdz1VcGRhdGVyYVwgbnUuLi4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTI5IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQnV0dG9uIHRpdGxlIGZvciBzYXZpbmcgdGhlIGN1cnJlbnQgc2V0dGluZ3MgYXMgZGVmYXVsdAorcmVwb3J0ZXJfYnV0dG9uX3NhdmVfZGVmYXVsdHM9U3BhcmFcIGluc3RcdTAwRTRsbG5pbmdhclwgc29tXCBza1x1MDBGNm5zdlx1MDBFNHJkZW4KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0byBhY3RpdmF0ZSB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX2J1dHRvbl9zdGFydD1TdGFydGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEJ1dHRvbiB0byBkZWFjdGl2ZSB0aGUgcmVwb3J0ZXIKK3JlcG9ydGVyX2J1dHRvbl9zdG9wPVN0b3BwYQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgTGV2ZWwgb2YgZGV0YWlsOiBtb3N0IGluZm9ybWF0aW9uIGF2YWlsYWJsZQorcmVwb3J0ZXJfZGV0YWlsX2hpZ2g9SFx1MDBGNmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgYSBzZWxlY3Rpb24gb3B0aW9uIG9mIHRoZSBsZXZlbCBvZiBkZXRhaWwgaW4gcmVwb3J0aW5nCityZXBvcnRlcl9kZXRhaWxfbGV2ZWw9RGV0YWxqbml2XHUwMEU1XDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IExldmVsIG9mIGRldGFpbDogc3RhbmRhcmQKK3JlcG9ydGVyX2RldGFpbF9ub3JtYWw9Tm9ybWFsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBBbiBvdXRwdXQgZm9ybWF0OiBIVE1MCityZXBvcnRlcl9mb3JtYXRfaHRtbD1IVE1MCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdCB0eXBlOiBwbGFpbiB0ZXh0CityZXBvcnRlcl9mb3JtYXRfdGV4dD1UZXh0CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMC0xMS0xNyBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQKKyMgQGNvbW1lbnQgQW4gb3V0cHV0IGZvcm1hdDogWE1MCityZXBvcnRlcl9mb3JtYXRfeG1sPVhNTAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiBmaWxlIGxvY2F0aW9uIG9mIHRoZSByZXNvdXJjZSBidW5kbGUgdG8gcmVwb3J0IG9uCityZXBvcnRlcl9pbnB1dF9idW5kbGU9UmVzdXJzYnVudFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIHRoYXQgcmVwb3J0aW5nIHdpbGwgaGFwcGVuIGF0IGEgc3BlY2lpZmllZCB0aW1lIG9mIGRheS4gRm9sbG93ZWQgYnkgYSB0aW1lIGFuZCBkYXkgb3B0aW9uLgorcmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZD1SYXBwb3J0ZXJhXCB2aWQKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRleHQgaW5kaWNhdGlvbiBvZiBzZXF1ZW50aWFsIHJlcG9ydGluZyBwYXVzZWQgZm9yIGEgZGVmaW5lZCBpbnRlcnZhbCBiZXR3ZWVuIHJlcG9ydGluZy4gSW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBudW1iZXIgYW5kIGEgdW5pdCBvZiBtZWFzdXJlIG9mIHRpbWUKK3JlcG9ydGVyX2ludGVydmFsX3NlcXVlbnRpYWw9UmFwb3J0ZXJhXCB2YXJqZQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBEYXRlL1RpbWUgb2YgbGFzdCByZXBvcnQgZ2VuZXJhdGlvbgorIyBAY29tbWVudCBJbmRpY2F0aW9uIG9mIHRoZSB0aW1lIG9mIHRoZSBsYXN0IHJlcG9ydAorcmVwb3J0ZXJfbGFzdF9yZXBvcnQ9U2VuYXN0ZVwgcmFwcG9ydFw6XCB7MAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQHswfSBEYXRlL1RpbWUgb2YgbmV4dCByZXBvcnQKKyMgQGNvbW1lbnQgSW5kaWNhdGlvbiBvZiB3aGVuIHRoZSBuZXh0IHJlcG9ydCB3aWxsIGJlIGdlbmVyYXRlZAorcmVwb3J0ZXJfbmV4dF9yZXBvcnQ9Tlx1MDBFNHN0YVwgcmFwcG9ydFw6XCB7MH0KKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEluZGljYXRpb24gb2YgdGhlIG91dHB1dCBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgcmVwb3J0cyBhcmUgcGxhY2VkCityZXBvcnRlcl9vdXRwdXRfZGlyZWN0b3J5PVV0Zm9sZGVyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IEFuIGluZGljYXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlIGZvciBhIHBhcnRpY3VsYXIgb3V0cHV0IGZvcm1hdAorcmVwb3J0ZXJfb3V0cHV0X2ZpbGU9RmlsbmFtblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBQYW5lbCB0aXRsZSBmb3Igc2V0dGluZyBpbnRlcnZhbCBvZiByZXBvcnRpbmcKK3JlcG9ydGVyX3BhbmVsX2ludGVydmFsPVJhcHBvcnRpbnRlcnZhbGwKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFBhbmVsIHRpdGxlIGZvciBjb25maWd1cmFibGUgb3B0aW9ucyBvZiB0aGUgcmVwb3J0aW5nCityZXBvcnRlcl9wYW5lbF9vcHRpb25zPVJhcHBvcnRcIGluc3RcdTAwRTRsbG5pbmdhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgU3VicGFuZWwgdGl0bGUgZm9yIGNob29zaW5nIG91dHB1dCBmb3JtYXRzIGZvciB0aGUgcmVwb3J0cworcmVwb3J0ZXJfcGFuZWxfb3V0cHV0X2Zvcm1hdD1VdGZvcm1hdAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgZm9yIGluZGljYXRpb24gb2YgcnVubmluZyBzdGF0dXMgb2YgdGhlIHJlcG9ydGVyCityZXBvcnRlcl9wYW5lbF9zdGF0dXM9U3RhdHVzCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFNob3J0IHRpdGxlIGZvciBzZWxlY3RpbmcgYSBjb2RlIHNjYW4gY29uZmlndXJhdGlvbiBmaWxlCityZXBvcnRlcl9wZXJmb3JtX3NjYW49S29kYVwgZmlsZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFF1aWNrIGluZGljYXRpb24gdGhhdCB0aGUgcmVwb3J0ZXIgaXMgYWN0aXZlIChwZXJoYXBzIHdhaXRpbmcpCityZXBvcnRlcl9zdGF0dXNfcnVubmluZz1TdGFydGFkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBRdWljayBzdGF0dXMgaW5kaWNhdGlvbiB0aGF0IHRoZSByZXBvcnRlciBpcyBub3QgYWN0aXZlCityZXBvcnRlcl9zdGF0dXNfc3RvcHBlZD1TdG9wcGFkCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBkYXlzIG9wdGlvbgorcmVwb3J0ZXJfdGltZV9kYXlzPURhZ2FyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBldmVyeSBkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX2V2ZXJ5ZGF5PVZhcmplXCBkYWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IGZyaWRheSBvcHRpb24KK3JlcG9ydGVyX3RpbWVfZnJpZGF5PUZyZWRhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgaG91cnMgb3B0aW9uCityZXBvcnRlcl90aW1lX2hvdXJzPVRpbW1hcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgbWludXRlcyBvcHRpb24KK3JlcG9ydGVyX3RpbWVfbWludXRlcz1NaW51dGVyCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBtb25kYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX21vbmRheT1NXHUwMEU1bmRhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgc2F0dXJkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3NhdHVyZGF5PUxcdTAwRjZyZGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBzdW5kYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3N1bmRheT1TXHUwMEY2bmRhZworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTcgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgdGh1cnNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3RodXJzZGF5PVRvcnNkYWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IHR1ZXNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3R1ZXNkYXk9VGlzZGFnCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xNyBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCB3ZWRuZXNkYXkgb3B0aW9uCityZXBvcnRlcl90aW1lX3dlZG5lc2RheT1PbnNkYWcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTE3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IFRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbgorcmVzb3VyY2VfYnVuZGxlX3JlcG9ydGVyPVJCUmVwb3J0ZXIKKworIworIyBAZ3JvdXAgU2VhcmNoIGFuZCBSZXBsYWNlCisjCisjIEBncm91cENvbW1lbnQgUmVzb3VyY2VzIGZvdW5kIG9uIHRoZSBzZWFyY2ggdGFiIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBHZW5lcmFsIHNlYXJjaCB0aXRsZQorc2VhcmNoPUxldGEKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA3IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IG9wdGlvbiBmb3IgbWFraW5nIHRoZSBzZWFyY2ggY2FzZSBzZW5zaXRpdmUgb3Igbm90CitzZWFyY2hfY2FzZV9zZW5zaXRpdmU9Qm9rc3RhdnNrXHUwMEU0bnNsaWdcIHNcdTAwRjZrbmluZ1w6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMS0wMi0wNiBAbW9kaWZpZWQgMjAwMS0wMi0xOSBAY3JlYXRvciBKYXJlZCBKYWNrc29uIEBtb2RpZmllciBKYXJlZCBKYWNrc29uCisjIEBjb21tZW50IENoZWNrIGJveCBvcHRpb24gZm9yIHNlYXJjaGluZyB0aHJvdWdoIHJlc291cmNlIGNvbW1lbnRzCitzZWFyY2hfY29tbWVudHM9S29tbWVudGFyZXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCB0byBzZWFyY2ggb24KK3NlYXJjaF9maW5kPUhpdHRhXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgQ2hlY2sgYm94IHNlbGVjdGlvbiBmb3Igc2VhcmNoaW5nIG9wdGlvbiB0aHJvdWdoIHJlc291cmNlIGtleXMKK3NlYXJjaF9rZXlzPVJlc3Vyc255Y2tsYXIKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGV4dCBpbmRpY2F0aW9uIG9mIHRoZSBmaWVsZCBmb3IgZW50ZXJpbmcgdGV4dCBmb3IgcmVwbGFjaW5nIHRoZSBmb3VuZCB2YWx1ZQorc2VhcmNoX3JlcGxhY2U9RXJzXHUwMEU0dHRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDEtMDItMDYgQG1vZGlmaWVkIDIwMDEtMDItMTkgQGNyZWF0b3IgSmFyZWQgSmFja3NvbiBAbW9kaWZpZXIgSmFyZWQgSmFja3NvbgorIyBAY29tbWVudCBDaGVjayBib3ggb3B0aW9uIGZvciBzZWFyY2hpbmcgdGhyb3VnaCB0cmFuc2xhdGlvbiB2YWx1ZXMKK3NlYXJjaF92YWx1ZXM9XHUwMEQ2dmVyc1x1MDBFNHR0bmluZ2FyCisKKyMKKyMgQGdyb3VwIFRhYnMKKyMKKyMgQGdyb3VwQ29tbWVudCBHVUkgVGFicyBpbiB0aGUgbWFpbiBwYW5lbAorCisjIEB0cmFuc2xhdGVkIGZhbHNlIEBjcmVhdGVkIDIwMDEtMTItMTcgQG1vZGlmaWVkIDIwMDEtMTItMTcgQGNyZWF0b3IgVW5rbm93biBAbW9kaWZpZXIgVW5rbm93bgorIyBAY29tbWVudCBHVUkgVGFiIGZvciBUYWJiZWQgUGFuZSBvdmVyIHRoZSB0cmVlIHNob3dpbmcgYSBzaW5nbGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBpdHMgdmFyaW91cyBmaWxlcwordGFiX2J1bmRsZT1CdW5kbGUKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRhYiBmb3IgdGhlIGRpc3BsYXkgb2YgdGhlIHZhcmlvdXMgZ3JvdXBzIGluIHRoZSBidW5kbGUKK3RhYl9ncm91cHM9R3J1cHBlcgorIyBAdHJhbnNsYXRlZCBmYWxzZSBAY3JlYXRlZCAyMDAxLTEyLTE3IEBtb2RpZmllZCAyMDAxLTEyLTE3IEBjcmVhdG9yIFVua25vd24gQG1vZGlmaWVyIFVua25vd24KKyMgQGNvbW1lbnQgR1VJIFRhYiBmb3IgdGFiIG92ZXIgdHJlZSBzaG93aW5nIGEgcmVzb3VyY2UgYnVuZGxlIHByb2plY3QKK3RhYl9wcm9qZWN0PVByb2plY3QKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAyLTA2IEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgVGl0bGUgZm9yIHBhbmUgYWxsb3dpbmcgZm9yIHNlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbnMKK3RhYl9zZWFyY2g9TGV0YQorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGFiIGZvciBzdGF0aXN0aWNzIGRpc3BsYXkgZm9yIGVpdGhlciB0aGUgUmVzb3VyY2UgQnVuZGxlIGFzIGEgd2hvbGUgb3IgcGFydGljdWxhciBsYW5ndWFnZSBmaWxlcwordGFiX3N0YXRpc3RpY3M9U3RhdGlzdGlrCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUYWIgZm9yIGRpc3BsYXkgb2YgdW50cmFuc2xhdGVkIGl0ZW1zIGluIHRoZSBkaWZmZXJlbnQgbGFuZ3VhZ2UgZmlsZXMKK3RhYl91bnRyYW5zbGF0ZWQ9T292ZXJzYXR0CisKKyMKKyMgQGdyb3VwIFRyYW5zbGF0aW9uIEZpbGUgR3JvdXBzIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCAKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQ29sdW1uIHRpdGxlIGZvciBpdGVtIGNvbW1lbnRzCitsYW5ndWFnZWdyb3VwX2NvbHVtbl9jb21tZW50PUtvbW1lbnRhcgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQ29sdW1uIHRpdGxlIGZvciBpdGVtJ3MgcmVzb3VyY2Uga2V5CitsYW5ndWFnZWdyb3VwX2NvbHVtbl9rZXk9UmVzdXJzbnlja2VsCisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCAKK2xhbmd1YWdlZ3JvdXBfY29sdW1uX3RyYW5zbGF0aW9uPU92ZXJzYXR0bmluZworCisjCisjIEBncm91cCBUcmFuc2xhdGlvbiBGaWxlIFN0YXRpc3RpY3MgUGFuZQorIworIyBAZ3JvdXBDb21tZW50IFRyYW5zbGF0aW9ucyBmb3Igc3RyaW5ncyBpbiB0aGUgbGFuZ3VhZ2UgZmlsZSBzdGF0aXN0aWNzIHBhbmUKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgQSBjb21tZW50IGdpdmVuIHRvIHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2NvbW1lbnQ9S29tbWVudGFyXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBjb3VudHJ5IGJlaW5nIGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c19jb3VudHJ5PUxhbmRcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfaXRlbV9jb3VudD1BbnRhbFwgcmVzdXJzZXJcIGlcIGRlblwgaGFyXCBmaWxlblw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBUaGUgbGFuZ3VhZ2UgZGVzY3JpYmVkIGJ5IHRoZSBmaWxlCitsYW5ndWFnZXN0YXRzX2xhbmd1YWdlPVNwcmFrXDoKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBuYW1lIG9mIGEgcGVyc29uIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNsYXRpb25zIGluIHRoaXMgbGFuZ3VhZ2UgZmlsZQorbGFuZ3VhZ2VzdGF0c19tYW5hZ2VyPVJlc3Vyc2ZpbFwgYWdhcmVcOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIGxhbmd1YWdlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdGl0bGU9UmVzdXJzXCB0aXRlbFw6CisjIEB0cmFuc2xhdGVkIHRydWUgQGNyZWF0ZWQgMjAwMC0xMS0xMCBAbW9kaWZpZWQgMjAwMC0xMS0wOCBAY3JlYXRvciBKYXJlZCBAbW9kaWZpZXIgU3RlZmFuIEVkbHVuZAorIyBAY29tbWVudCBOdW1iZXIgb2YgcmVzb3VyY2VzIG5lZWRpbmcgdHJhbnNsYXRpb24gaW4gdGhlIGZpbGUKK2xhbmd1YWdlc3RhdHNfdHJhbnNsYXRpb25fY291bnQ9QW50YWxcIG9vdmVyc2F0dGFcIHJlc3Vyc3Nha2VyXCBpXCBkZW5cIGhhclwgZmlsZW5cOgorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIGxhbmd1YWdlL3JlZ2lvbiB2YXJpYW50IGRlc2NyaWJlZCBieSB0aGUgZmlsZQorbGFuZ3VhZ2VzdGF0c192YXJpYW50PVZhcmlhbnRcIFw6CisKKyMKKyMgQGdyb3VwIFRyYW5zbGF0aW9uIEZpbGUgVW50cmFuc2xhdGVkIEl0ZW1zIFBhbmUKKyMKKyMgQGdyb3VwQ29tbWVudCAKKworIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIGNvbHVtbiB0aXRsZSBmb3IgZ3JvdXAgbmFtZXMgb2YgaXRlbXMgaW4gdGhlIHJvd3MKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fZ3JvdXA9R3J1cHAKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAwLTExLTEwIEBtb2RpZmllZCAyMDAwLTExLTA4IEBjcmVhdG9yIEphcmVkIEBtb2RpZmllciBTdGVmYW4gRWRsdW5kCisjIEBjb21tZW50IFRoZSBrZXkgb2YgdGhlIGl0ZW0gYSByb3cKK2xhbmd1YWdldW50cmFuc19jb2x1bW5fa2V5PVJlc3Vyc255Y2tlbAorIyBAdHJhbnNsYXRlZCB0cnVlIEBjcmVhdGVkIDIwMDAtMTEtMTAgQG1vZGlmaWVkIDIwMDAtMTEtMDggQGNyZWF0b3IgSmFyZWQgQG1vZGlmaWVyIFN0ZWZhbiBFZGx1bmQKKyMgQGNvbW1lbnQgVGhlIHRyYW5zbGF0ZWQgdmFsdWUgb2YgYW4gaXRlbSBpbiBhIHJvdworbGFuZ3VhZ2V1bnRyYW5zX2NvbHVtbl90cmFuc2xhdGlvbj1PdmVyc2F0dG5pbmcKKyMgQHRyYW5zbGF0ZWQgdHJ1ZSBAY3JlYXRlZCAyMDAxLTAxLTIzIEBtb2RpZmllZCAyMDAxLTAyLTE5IEBjcmVhdG9yIEphcmVkIEphY2tzb24gQG1vZGlmaWVyIEphcmVkIEphY2tzb24KKyMgQGNvbW1lbnQgUGFuZWwgdGl0bGUgY292ZXJpbmcgYnV0dG9ucyB0aGF0IGFwcGx5IHRvIGEgc2VsZWN0ZWQgcmVzb3VyY2UgZnJvbSBhIHRhYmxlIG9mIHJlc291cmNlcworbGFuZ3VhZ2V1bnRyYW5zX3NlbGVjdGVkX3Jlc291cmNlc19vcHRpb25zPUluc3RcdTAwRTRsbG5pbmdhclwgZlx1MDBGNnJcIHZhbGRcIHJlc3VycwpkaWZmIC0tZ2l0IGEvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9wcmVmZXJlbmNlcy5wcm9wZXJ0aWVzIGIvdW5pY29kZXRvb2xzL2NvbS9pYm0vcmJtL3Jlc291cmNlcy9wcmVmZXJlbmNlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZDc0MmEKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RldG9vbHMvY29tL2libS9yYm0vcmVzb3VyY2VzL3ByZWZlcmVuY2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorI1JCTWFuYWdlciBQcmVmZXJlbmNlcworI1dlZCBEZWMgMTkgMTQ6MDg6NTUgUFNUIDIwMDEKK3JlcG9ydGVyX2Zvcm1hdF9odG1sX2ZpbGU9cmVwb3J0Lmh0bWwKK3VzZXJuYW1lPVVua25vd24KK3JlcG9ydGVyX2Zvcm1hdF90ZXh0X2RldGFpbD1IaWdoCityZXBvcnRlcl9mb3JtYXRfeG1sX2RldGFpbD1IaWdoCityZXBvcnRlcl9mb3JtYXRfaG10bF9lbmFibGVkPVllcworcmVwb3J0ZXJfZW5hYmxlZD1ZZXMKK3JlcG9ydGVyX2Zvcm1hdF94bWxfZmlsZT1yZXBvcnQueG1sCityZXBvcnRlcl9pbnRlcnZhbF9kZWZpbmVkX2hvdXI9MQorcmVwb3J0ZXJfaW50ZXJ2YWxfc2VxdWVudGlhbF92YWx1ZT0xCityZXBvcnRlcl9pbnRlcnZhbF9zZXF1ZW50aWFsX3VuaXRzPUhvdXJzCityZXBvcnRlcl9wZXJmb3JtX3NjYW49WWVzCityZXBvcnRlcl9mb3JtYXRfdGV4dF9maWxlPXJlcG9ydC50eHQKK3JlcG9ydGVyX2Zvcm1hdF94bWxfZW5hYmxlZD1ZZXMKK3JlcG9ydGVyX2ludGVydmFsX2RlZmluZWRfZGF5PVNhdHVyZGF5Citsb2NhbGU9ZW4KK3JlcG9ydGVyX2ludGVydmFsPVNlcXVlbnRpYWwKK3JlY2VudGZpbGVsb2MzPQorcmVjZW50ZmlsZWxvYzI9CityZWNlbnRmaWxlbG9jMT0KK3JlY2VudGZpbGVsb2MwPQorcmVwb3J0ZXJfc2Nhbl9maWxlPS4vcmJtYW5hZ2VyX3NjYW5uZXIueG1sCityZXBvcnRlcl9mb3JtYXRfaHRtbF9lbmFibGVkPVllcworcmVjZW50ZmlsZWlkMz0KK3JlY2VudGZpbGVpZDI9CityZWNlbnRmaWxlaWQxPQorcmVwb3J0ZXJfaW50ZXJ2YWxfZGVmaW5lZF9taW51dGU9MDAKK3JlY2VudGZpbGVpZDA9CityZXBvcnRlcl9mb3JtYXRfdGV4dF9lbmFibGVkPVllcworcmVwb3J0ZXJfYmFzZV9jbGFzc19maWxlPQorcmVwb3J0ZXJfb3V0cHV0X2RpcmVjdG9yeT0KK3JlcG9ydGVyX2Zvcm1hdF9odG1sX2RldGFpbD1IaWdoCmRpZmYgLS1naXQgYS91bmljb2RldG9vbHMvbGljZW5zZS5odG1sIGIvdW5pY29kZXRvb2xzL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzk2ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDM0IEBACis8aHRtbD4KKworPGhlYWQ+Cis8dGl0bGU+SUNVNEogbGljZW5zZSAtIElDVTRKIDEuMy4xIGFuZCBsYXRlcjwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IEJHQ09MT1I9IiNmZmZmZmYiPgorPGgyPklDVTRKIGxpY2Vuc2UgLSBJQ1U0SiAxLjMuMSBhbmQgbGF0ZXI8L2gyPgorCis8cD5DT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFPC9wPgorCis8cD4KK0NvcHlyaWdodCAoYykgMTk5NS0yMDAyIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycworPC9wPgorPHA+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorPC9wPgorPHA+CitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorPC9wPgorPHA+CitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCis8L3A+Cis8cD4KK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCis8L3A+CisKKzxocj4KKzxzbWFsbD4KK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorPC9zbWFsbD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3VuaWNvZGV0b29scy9yZWFkbWUuaHRtbCBiL3VuaWNvZGV0b29scy9yZWFkbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODczNDEzCi0tLSAvZGV2L251bGwKKysrIGIvdW5pY29kZXRvb2xzL3JlYWRtZS5odG1sCkBAIC0wLDAgKzEsNDAwIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzx0aXRsZT5JQ1UncyBVbmljb2RlIFRvb2xzIFJlYWQgTWU8L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9IkNPUFlSSUdIVCIgY29udGVudD0KKyAgICAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIiAvPgorPHN0eWxlPgorPCEtLQorbGkgICAgICAgICAgIHsgbWFyZ2luLXRvcDogMC41ZW07IG1hcmdpbi1ib3R0b206IDAuNWVtIH0KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxoMT5Vbmljb2RlVG9vbHM8L2gxPgorPHA+VGhpcyBmaWxlIHByb3ZpZGVzIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgYW5kIHJ1bm5pbmcgdGhlIFVuaWNvZGVUb29scywgd2hpY2g8YnI+CitjYW4gYmUgdXNlZCB0bzo8L3A+Cis8dWw+CisgIDxsaT5idWlsZCB0aGUgRGVyaXZlZCBVbmljb2RlIGZpbGVzIGluIHRoZSBVQ0QgKFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlKSw8L2xpPgorICA8bGk+YnVpbGQgdGhlIHRyYW5zZm9ybWVkIFVDQSAoVW5pY29kZSBDb2xsYXRpb24gQWxnb3JpdGhtKSBmaWxlcyBuZWVkZWQgYnkgSUNVLjwvbGk+CisgIDxsaT5ydW4gY29uc2lzdGVuY3kgY2hlY2tzIG9uIGJldGEgcmVsZWFzZXMgb2YgdGhlIFVDRCBhbmQgdGhlIFVDQS48L2xpPgorICA8bGk+YnVpbGQgNCBjaGFydCBmb2xkZXJzIG9uIHRoZSB1bmljb2RlIHNpdGU8L2xpPgorPC91bD4KKzxwPjxmb250IGNvbG9yPSIjRkYwMDAwIj48Yj5XQVJOSU5HISE8L2I+PC9mb250PjwvcD4KKzx1bD4KKyAgPGxpPlRoaXMgaXMgTk9UIHByb2R1Y3Rpb24gbGV2ZWwgY29kZSwgYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkIGluIHByb2dyYW1zLjwvbGk+CisgIDxsaT5UaGUgQVBJIGlzIHN1YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgbm90aWNlLCBhbmQgd2lsbCBub3QgYmUgbWFpbnRhaW5lZC48L2xpPgorICA8bGk+VGhlIHNvdXJjZSBpcyB1bmNvbW1lbnRlZCwgYW5kIGhhcyBtYW55IHdhcnRzOyBzaW5jZSBpdCBpcyBub3QgcHJvZHVjdGlvbiBjb2RlLCBpdCBoYXMgbm90IAorICBiZWVuIHdvcnRoIHRoZSB0aW1lIHRvIGNsZWFuIGl0IHVwLjwvbGk+CisgIDxsaT5JdCB3aWxsIHByb2JhYmx5IG5vdCB3b3JrIG9uIFVuaXggb3IgTWFjIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGZpbGUgc2VwYXJhdG9yLjwvbGk+CisgIDxsaT5DdXJyZW50bHkgaXQgdXNlcyBoYXJkLWNvZGVkIGRpcmVjdG9yeSBuYW1lcy48L2xpPgorICA8bGk+VGhlIGNvbnRlbnRzIG9mIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBVQ0QgbXVzdCBiZSBjb3BpZWQgdG8gYSBsb2NhbCBkaXJlY3RvcnksIGFzIGRlc2NyaWJlZCAKKyAgYmVsb3cuPC9saT4KKzwvdWw+Cis8aDI+SW5zdHJ1Y3Rpb25zOjwvaDI+Cis8aDM+MC4gWW91IHdpbGwgbmVlZCB0byBnZXQgSUNVNEogb24geW91ciBzeXN0ZW0sIHVzaW5nIENWUy48L2gzPgorPHA+VGhlIHJlc3Qgb2YgdGhpcyB3aWxsIGFzc3VtZSB0aGF0IHlvdSBoYXZlIHNldCB1cCBDVlMgc28gdGhhdCB5b3UgbG9hZCB0aGUgSUNVNEogcHJvamVjdCBpbnRvIAorQzpcSUNVNEo8YnI+Cis8YnI+CitZb3UgbmVlZCBib3RoIHRoZSBtYWluIGljdTRqIGFuZCBhIHN1YnByb2plY3QgY2FsbGVkIHVuaWNvZGV0b29scy4gU2VlOgorPGEgaHJlZj0iaHR0cDovL3d3dy5pYm0uY29tL3NvZnR3YXJlL2dsb2JhbGl6YXRpb24vaWN1L3JlcG9zaXRvcnkuanNwIj4KK2h0dHA6Ly93d3cuaWJtLmNvbS9zb2Z0d2FyZS9nbG9iYWxpemF0aW9uL2ljdS9yZXBvc2l0b3J5LmpzcDwvYT4uIEluc2lkZSB1bmljb2RldG9vbHMsIGxvb2sgYXQgY29tL2libS90ZXh0LiBUaGUgCittYWluIGRpcmVjdG9yaWVzIG9mIGludGVyZXN0IGFyZSBVQ0QsIFVDQSBhbmQgdXRpbGl0eS48L3A+Cis8aDQ+MGEuIElmIHlvdSBhcmUgdXNpbmcgRWNsaXBzZSBmb3IgeW91ciBJREUsIGxvb2sgYXQgdGhlIGluc3RydWN0aW9ucyBvbgorPGEgaHJlZj0iaHR0cDovL2ljdS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9lY2xpcHNlX2hvd3RvL2VjbGlwc2VfaG93dG8uaHRtbCI+CitodHRwOi8vaWN1LnNvdXJjZWZvcmdlLm5ldC9kb2NzL2VjbGlwc2VfaG93dG8vZWNsaXBzZV9ob3d0by5odG1sPC9hPiA8L2g0PgorPHA+U2V0IHVwIEVjbGlwc2UgdG8gYnVpbGQgdHdvIHByb2plY3RzOiBJQ1U0SiBhbmQgVW5pY29kZVRvb2xzOjxicj4KKzxicj4KKzxiPlByb2plY3QgTmFtZTogPC9iPklDVTRKPGJyPgorPGI+RGlyZWN0b3J5OiA8L2I+QzpcSUNVNEpcaWN1NGo8YnI+Cis8Yj5EZWZhdWx0IG91dHB1dCBmb2xkZXIgPSA8L2I+SUNVNEovY2xhc3Nlczxicj4KKzxicj4KKzxiPlByb2plY3QgTmFtZTogPC9iPnVuaWNvZGV0b29sczxicj4KKzxiPkNyZWF0ZSBwcm9qZWN0IGZyb20gZXhpc3Rpbmcgc291cmNlOiA8L2I+QzpcSUNVNEpcdW5pY29kZXRvb2xzPGJyPgorPGI+RGVmYXVsdCBPdXRwdXQgRm9sZGVyOiA8L2I+dW5pY29kZXRvb2xzL2NsYXNzZXM8YnI+Cis8YnI+CitBZnRlciBFY2xpcHNlIGlzIHNldCB1cCB3aXRoIHRoZXNlLCBleGNsdWRlIGNlcnRhaW4gZmlsZXMgZnJvbSB1bmljb2RldG9vbHM6PGJyPgorPGJyPgorUmlnaHQtQ2xpY2sgVW5pY29kZVRvb2xzICZndDsgUHJvcGVydGllcyAmZ3Q7IEphdmEgQnVpbGQgUGF0aCAmZ3Q7IEV4Y2x1c2lvbnM8YnI+Citjb20vaWJtL3JibS88YnI+Citjb20vaWJtL3RleHQvdXRpbGl0eS9Vbmljb2RlTWFwSW50LmphdmE8YnI+Citjb20vaWJtL3RleHQvdXRpbGl0eS9UZXN0VXRpbGl0eS5qYXZhPGJyPgorY29tL2libS90ZXh0L1VDRC9HZW5lcmF0ZVRoYWlCcmVha3Mtb2xkLmphdmEvPGJyPgorY29tL2libS90ZXh0L1VDRC9Qcm9jZXNzVW5paGFuLmphdmEvPGJyPgorY29tL2libS90ZXh0L1VDQS9Xcml0ZUhUTUxDb2xsYXRpb24uamF2YS88YnI+Cis8YnI+CitVbmljb2RlVG9vbHMgbXVzdCBhbHNvIGluY2x1ZGUgdGhlIElDVTRKIHByb2plY3QsIHdpdGg8YnI+Cis8YnI+CitSaWdodC1DbGljayBVbmljb2RlVG9vbHMgJmd0OyBQcm9wZXJ0aWVzICZndDsgSmF2YSBCdWlsZCBQYXRoICZndDsgUHJvamVjdHM8L3A+Cis8aDM+MS4gSW4gVUNELCB5b3UgbXVzdCBlZGl0IFVDRF9UeXBlcy5qYXZhIGF0IHRoZSB0b3AsIHRvIHNldCB0aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBidWlsZDo8L2gzPgorPHA+cHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9ESVIgPSAmcXVvdDtDOlxcREFUQVxcJnF1b3Q7Ozxicj4KK3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVDRF9ESVIgPSBCQVNFX0RJUiArICZxdW90O1VDRFxcJnF1b3Q7Ozxicj4KK3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJJTl9ESVIgPSBEQVRBX0RJUiArICZxdW90O0JJTlxcJnF1b3Q7Ozxicj4KK3B1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFTl9ESVIgPSBEQVRBX0RJUiArICZxdW90O0dFTlxcJnF1b3Q7Ozxicj4KKzxicj4KK01ha2Ugc3VyZSB0aGF0IGVhY2ggb2YgdGhlc2UgZGlyZWN0b3JpZXMgZXhpc3QuIEFsc28gbWFrZSBzdXJlIHRoYXQgdGhlIGZvbGxvd2luZzxicj4KK2V4aXN0Ojxicj4KKzxicj4KKyZsdDtHRU5fRElSJmd0Oy9EZXJpdmVkRGF0YTxicj4KKyZsdDtHRU5fRElSJmd0Oy9EZXJpdmVkRGF0YS9FeHRyYWN0ZWRQcm9wZXJ0aWVzPGJyPgorJmx0O1VDRF9ESVImZ3Q7L0VYVFJBUy1VcGRhdGU8L3A+Cis8aDM+Mi4gRG93bmxvYWQgYWxsIG9mIHRoZSBVbmljb2RlRGF0YSBmaWxlcyBmb3IgZWFjaCB2ZXJzaW9uIGludG8gVUNEX0RJUi48L2gzPgorPHA+VGhlIGZvbGRlciBuYW1lcyBtdXN0IGJlIG9mIHRoZSBmb3JtOiAmcXVvdDszLjIuMC1VcGRhdGUmcXVvdDssIHNvIHJlbmFtZSB0aGUgZm9sZGVycyBvbiB0aGU8YnI+CitVbmljb2RlIHNpdGUgdG8gdGhpcyBmb3JtYXQuIEk8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+ZiB0aGUgCitmb2xkZXIgY29udGFpbnMgdWNkLCB0aGVuIG1ha2UgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZGlyZWN0b3J5IGJlIHRoZSBjb250ZW50cyBvZiAKK3RoZSB4LngueC1VcGRhdGUgZGlyZWN0b3J5LiBUaGF0IGlzLCBlYWNoIGRpcmVjdG9yeSB3aWxsIGRpcmVjdGx5IGNvbnRhaW4gZmlsZXMgCitsaWtlIFByb3BMaXN0Li4uLnR4dDwvc3Bhbj48L3A+Cis8aDQ+MmEgRW5zdXJlIENvbXBsZXRlIFJlbGVhc2U8L2g0PgorPHA+SWYgeW91IGFyZSBkb3dubG9hZGluZyBhbnkgJnF1b3Q7aW5jb21wbGV0ZSZxdW90OyByZWxlYXNlIChvbmUgdGhhdCBkb2VzIG5vdCBjb250YWluIGEgY29tcGxldGUgc2V0IG9mIGRhdGEgCitmaWxlcyBmb3IgdGhhdCByZWxlYXNlLCB5b3UgbmVlZCB0byBhbHNvIGRvd25sb2FkIHRoZSBwcmV2aW91cyBjb21wbGV0ZSByZWxlYXNlKS4gTW9zdCBvZiB0aGUgTi5NLVVwZGF0ZSAKK2RpcmVjdG9yaWVzcyBhcmUgY29tcGxldGUsICpleGNlcHQqOjwvcD4KKzxwPjQuMC1VcGRhdGUsIHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYSBjb3B5IG9mIFVuaWhhbi50eHQgYW5kIHNvbWUgb3RoZXIgZmlsZXM8YnI+CiszLjEtVXBkYXRlLCB3aGljaCBkb2VzIG5vdCBjb250YWluIGEgY29weSBvZiBCaWRpTWlycm9yaW5nLnR4dDwvcD4KKzxwPkFsc28sIG1ha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIFVuaWNvZGVEYXRhIGZvciAxLjEuNTo8L3A+Cis8cD48Yj5EZWxldGU8L2I+PC9wPgorPHByZT4zNDAwO0hBTkdVTCBTWUxMQUJMRSBLSVlFT0sgQTtMbzswO0w7MTEwMCAxMTYxOzs7O047Ozs7OworLi4uCis0REZGO0hBTkdVTCBTWUxMQUJMRSBNSUVVTSBXRU8gUklFVUwtVEhJRVVUSDtMbzswO0w7MTEwNiAxMTZGIDExQjQ7Ozs7Tjs7Ozs7Cis0RTAwOzxjamsgSURFT0dSQVBIIFJFUFJFU0VOVEFUSVZFPjtMbzswO0w7Ozs7O047Ozs7OzwvcHJlPgorPHA+PGI+QWRkOjwvYj48L3A+Cis8cHJlPjRFMDA7PGNqayBJZGVvZ3JhcGgsIEZpcnN0PjtMbzswO0w7Ozs7O047Ozs7OworOUZBNTs8Y2prIElkZW9ncmFwaCwgTGFzdD47TG87MDtMOzs7OztOOzs7OzsKK0UwMDA7PHByaXZhdGUgVXNlLCBGaXJzdD47Q287MDtMOzs7OztOOzs7OzsKK0Y4RkY7PHByaXZhdGUgVXNlLCBMYXN0PjtDbzswO0w7Ozs7O047Ozs7OzwvcHJlPgorPHA+PGI+QW5kIGZyb20gYSBsYXRlIHZlcnNpb24gb2YgVW5pY29kZSwgYWRkOjwvYj48L3A+Cis8cHJlPkY5MDA7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUY5MDA7TG87MDtMOzhDNDg7Ozs7Tjs7Ozs7CisuLi4KK0ZBMkQ7Q0pLIENPTVBBVElCSUxJVFkgSURFT0dSQVBILUZBMkQ7TG87MDtMOzlEQjQ7Ozs7Tjs7Ozs7PC9wcmU+Cis8aDQ+MmIuIFVDQSBkYXRhPC9oND4KKzxwPklmIHlvdSBhcmUgYnVpbGRpbmcgYW55IG9mIHRoZSBVQ0EgdG9vbHMsIHlvdSBuZWVkIHRvIGdldCBhIGNvcHkgb2YgdGhlIFVDQSBkYXRhIGZpbGU8YnI+Citmcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjEwLyNBbGxLZXlzLiBUaGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhpcyBpczo8YnI+Cis8YnI+CitCQVNFX0RJUiArICZxdW90O0NvbGxhdGlvblxhbGxrZXlzJnF1b3Q7ICsgVkVSU0lPTiArICZxdW90Oy50eHQmcXVvdDsuPGJyPgorPGJyPgorSWYgeW91IGhhdmUgaXQgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24sIGNoYW5nZSB0aGF0IHZhbHVlIGZvciBLRVlTIGluIFVDQS5qYXZhLCBhbmQgPGJyPgordGhlIHZhbHVlIGZvciBCQVNFX0RJUjwvcD4KKzxoND4yYy4gSGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aCBmaWxlcy4gQWxsIG9mIAordGhlIHllbGxvdyBvbmVzIHNob3VsZCBleGlzdDwvaDQ+Cis8cHJlPkM6Ly9EQVRBLworCisgICAgICAgIEJJTi8KKyAgICAKKzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjAwIj4gICAgICAgIENvbGxhdGlvbi8KKyAgICAgICAgICAgIGFsbGtleXMtMy4xLjEudHh0Cis8L3NwYW4+ICAgICAgICAKKyAgICAgICAgR0VOLworICAgICAgICAgICAgRGVyaXZlZERhdGEvCis8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+ICAgICAgICA8L3NwYW4+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRkZGMDAiPlVDRC8KKyAgICAgICAgICAgIDMuMC4wLVVwZGF0ZS8KKyAgICAgICAgICAgICAgICBVbmloYW4tMy4yLjAudHh0CisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAzLjAuMS1VcGRhdGUvCisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAzLjEuMC1VcGRhdGUvCisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAzLjEuMS1VcGRhdGUvCisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAzLjIuMC1VcGRhdGUvCisgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICA0LjAuMC1VcGRhdGUvCisgICAgICAgICAgICAgICAgQXJhYmljU2hhcGluZy00LjAuMGQxNGIudHh0CisgICAgICAgICAgICAgICAgQmlkaU1pcnJvcmluZy00LjAuMGQxYi50eHQKKyAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIEVYVFJBUy1VcGRhdGUvPC9zcGFuPjwvcHJlPgorPGgzPjMuIFZlcnNpb25zPC9oMz4KKzxwPkFsbCBvZiB0aGUgZm9sbG93aW5nIGhhdmUgJnF1b3Q7dmVyc2lvbiBYJnF1b3Q7IGluIHRoZSBvcHRpb25zIHlvdSBnaXZlIHRvIEphdmEgKGVpdGhlciBvbiB0aGUmbmJzcDsgCitjb21tYW5kIGxpbmUsIG9yIGluIHRoZSBFY2xpcHNlICdydW4nIG9wdGlvbnMuIElmIHlvdSB3YW50IGEgc3BlY2lmaWMgdmVyc2lvbiBsaWtlIDMuMS4wLCB0aGVuIHlvdSAKK3dvdWxkIHdyaXRlICZxdW90O3ZlcnNpb24gMy4xLjEmcXVvdDsuIElmIHlvdSB3YW50IHRoZSBsYXRlc3QgdmVyc2lvbiAoNC4xLjApLCB5b3UgY2FuIG9taXQgdGhlICZxdW90O3ZlcnNpb24gWCZxdW90Oy48L3A+Cis8aDM+NC4gQnVpbGRpbmcgRmlsZXM8L2gzPgorPG9sPgorCTxsaT48Yj5TZXR1cDwvYj48b2w+CisJCTxsaT5JbiBFY2xpcHNlLCBvcGVuIHRoZSBQYWNrYWdlIEV4cGxvcmVyIChVc2UgV2luZG93Jmd0O1Nob3cgVmlldyBpZiB5b3UgCisJCWRvbid0IHNlZSBpdCk8L2xpPgorCQk8bGk+T3BlbiBVbmljb2RlVG9vbHM8dWw+CisJCQk8bGk+Y29tLmlibS50ZXh0LlVDRDx1bD4KKwkJCQk8bGk+TWFrZVVuaWNvZGVGaWxlcy48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+dHh0PC9zcGFuPjxwPlRoaXMgZmlsZSBkcml2ZXMgdGhlIHByb2R1Y3Rpb24gb2YgCisJCQkJdGhlIGRlcml2ZWQgVW5pY29kZSBmaWxlcy4gVGhlIGZpcnN0IHRocmVlIGxpbmVzIGNvbnRhaW4gCisJCQkJcGFyYW1ldGVycyB0aGF0IHlvdSBtYXkgd2FudCB0byBtb2RpZnkgYXQgc29tZSB0aW1lczo8L3A+CisJCQkJPHByZT5HZW5lcmF0ZTogPGI+LipzY3JpcHQuKjwvYj4gPGk+Ly8gdGhpcyBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVXNlIC4qIGZvciBhbGwgZmlsZXM8L2k+CitEZWx0YVZlcnNpb246IDxiPjEwPC9iPiA8aT4gICAgLy8gVGhpcyBnZXRzIGFwcGVuZGVkIHRvIHRoZSBmaWxlIG5hbWUuIFBpY2sgMSsgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gUHVibGljPC9pPgorQ29weXJpZ2h0WWVhcjogPGI+MjAwNjwvYj4gPGk+IC8vIFBpY2sgdGhlIGN1cnJlbnQgeWVhcjwvaT48L3ByZT4KKwkJCQk8L2xpPgorCQkJPC91bD4KKwkJCTwvbGk+CisJCTwvdWw+CisJCTwvbGk+CisJCTxsaT5PcGVuIGluIFBhY2thZ2UgRXhwbG9yZXIgCisJCTx1bD4KKwkJCTxsaT5jb20uaWJtLnRleHQuVUNEPHVsPgorCQkJCTxsaT5NYWluPC9saT4KKwkJCTwvdWw+CisJCQk8L2xpPgorCQk8L3VsPgorCQk8L2xpPgorCQk8bGk+UnVuJmd0O1J1biBBcy4uLjxvbD4KKwkJCTxsaT5DaG9vc2UgSmF2YSBBcHBsaWNhdGlvbjx1bD4KKwkJCQk8bGk+aXQgd2lsbCBmYWlsLCBkb24ndCB3b3JyeTsgeW91IG5lZWQgdG8gc2V0IHNvbWUgcGFyYW1ldGVycy48L2xpPgorCQkJPC91bD4KKwkJCTwvbGk+CisJCTwvb2w+CisJCTwvbGk+CisJCTxsaT5SdW4mZ3Q7UnVuLi4uPHVsPgorCQkJPGxpPlNlbGVjdCB0aGUgQXJndW1lbnRzIHRhYiwgYW5kIGZpbGwgaW4gdGhlIGZvbGxvd2luZzx1bD4KKwkJCQk8bGk+UHJvZ3JhbSBhcmd1bWVudHM6PHByZT5idWlsZCA1LjA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGRkYwMCI+LjA8L3NwYW4+IE1ha2VVbmljb2RlRmlsZXM8L3ByZT4KKwkJCQk8L2xpPgorCQkJCTxsaT5WTSBhcmd1bWVudHM6IAorCQkJCTxwcmU+LVhtczUxMm0gLVhteDUxMm08L3ByZT4KKwkJCQk8L2xpPgorCQkJPC91bD4KKwkJCTwvbGk+CisJCQk8bGk+Q2xvc2UgYW5kIFNhdmU8L2xpPgorCQk8L3VsPgorCQk8L2xpPgorCTwvb2w+CisJPC9saT4KKwk8bGk+PGI+UnVuPC9iPjxvbD4KKwkJPGxpPllvdSdsbCBzZWUgaXQgYnVpbGQgdGhlIDUuMCBmaWxlcywgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIAorCQlyZXN1bHRzOjxwcmU+V3JpdGluZyBVQ0RfRGF0YTUuMC4wCitEYXRhIFNpemU6IDEwOSw4MDIKK1dyb3RlIERhdGEgMTA5ODAyPC9wcmU+CisJCTwvbGk+CisJCTxsaT5Gb3IgZWFjaCB2ZXJzaW9uLCB0aGUgdG9vbHMgYnVpbGQgYSBzZXQgb2YgYmluYXJ5IGRhdGEgaW4gQklOIHRoYXQgCisJCWNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIGZvciB0aGF0IHJlbGVhc2UuIFRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5LCBvciAKKwkJeW91IGNhbiBtYW51YWxseSBkbyBpdCB3aXRoIHRoZSBQcm9ncmFtIEFyZ3VtZW50czxwcmU+dmVyc2lvbiBYIGJ1aWxkPC9wcmU+CisJCTxwPlRoaXMgYnVpbGRzIGFuIGNvbXByZXNzZWQgZm9ybWF0IG9mIGFsbCB0aGUgVUNEIGRhdGEgKGV4Y2VwdCBibG9ja3MgCisJCWFuZCBVbmloYW4pIGludG8gdGhlIEJJTiBkaXJlY3RvcnkuIERvbid0IHdvcnJ5IGFib3V0IHRoZSB2b2x1bWlub3VzIAorCQljb25zb2xlIG1lc3NhZ2VzLCB1bmxlc3Mgb25lIHNheXMgJnF1b3Q7RkFJTCZxdW90Oy48L3A+CisJCTxwPjxmb250IGNvbG9yPSIjRkYwMDAwIj48aT5Zb3UgaGF2ZSB0byBtYW51YWxseSBkbyB0aGlzIGlmIHlvdSBjaGFuZ2UgCisJCWFueSBvZiB0aGUgZGF0YSBmaWxlcyBpbiB0aGF0IHZlcnNpb24hPC9pPjwvZm9udD48L3A+CisJCTxwPk5vdGU6IGlmIGZvciBhbnkgcmVhc29uIHlvdSBtb2RpZnkgdGhlIGJpbmFyeSBmb3JtYXQgb2YgdGhlIEJJTiBmaWxlcywgeW91IGFsc28gaGF2ZSB0byBidW1wIHRoZSAKK3ZhbHVlIGluIHRoYXQgZmlsZTo8L3A+CisJCTxwcmU+c3RhdGljIGZpbmFsIGJ5dGUgQklOQVJZX0ZPUk1BVCA9IDg7IC8vIGJ1bXBlZCBpZiBiaW5hcnkgZm9ybWF0IG9mIFVDRCBjaGFuZ2VzPC9wcmU+CisJCTwvbGk+CisJPC9vbD4KKwk8L2xpPgorCTxsaT5SZXN1bHRzIGluIDxhIGhyZWY9ImZpbGU6Ly8vQzovREFUQS9HRU4vRGVyaXZlZERhdGEiPgorCUM6XERBVEFcR0VOXERlcml2ZWREYXRhPC9hPjxvbD4KKwkJPGxpPlRoZSBmaWxlcyB3aWxsIGJlIGluIHRoaXMgZGlyZWN0b3J5LjwvbGk+CisJCTxsaT5UaGVyZSBhcmUgYWxzbyBESUZGIGZvbGRlcnMsIHRoYXQgY29udGFpbiBCQVQgZmlsZXMgdGhhdCB5b3UgY2FuIHJ1biAKKwkJb24gV2luZG93cyB3aXRoIENvbXBhcmVJdC4gKFlvdSBjYW4gbW9kaWZ5IHRoZSBjb2RlIHRvIGJ1aWxkIEJBVHMgd2l0aCAKKwkJYW5vdGhlciBEaWZmIHByb2dyYW0gaWYgeW91IHdhbnQpLjxvbD4KKwkJCTxsaT5Gb3IgYW55IGZpbGUgd2l0aCBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGl0IHdpbGwgYnVpbGQgdHdvIAorCQkJQkFUIGZpbGVzLCBzdWNoIGFzIHRoZSBmaXJzdCB0d28gYmVsb3cuPHByZT5EaWZmX1Byb3BMaXN0LTUuMC4wZDEwLnR4dC5iYXQKK09MREVSLURpZmZfUHJvcExpc3QtNS4wLjBkMTAudHh0LmJhdAorCitVTkNIQU5HRUQtRGlmZl9Qcm9wZXJ0eVZhbHVlQWxpYXNlcy01LjAuMGQxMC50eHQuYmF0PC9wcmU+CisJCQk8L2xpPgorCQk8L29sPgorCQk8L2xpPgorCQk8bGk+QW55IGZpbGVzIHdpdGhvdXQgc2lnbmlmaWNhbnQgY2hhbmdlcyB3aWxsIGhhdmUgJnF1b3Q7VU5DSEFOR0VEJnF1b3Q7IGFzIGEgCisJCXByZWZpeDogaWdub3JlIHRoZW0uJm5ic3A7IFRoZSBPTERFUiBwcmVmaXggaXMgdGhlIGNvbXBhcmlzb24gdG8gdGhlIAorCQlsYXN0IHZlcnNpb24gb2YgVW5pY29kZS48L2xpPgorCQk8bGk+T24gV2luZG93cyB5b3UgY2FuIHJ1biB0aGVzZSBCQVRzIHRvIGNvbXBhcmUgZmlsZXM6PC9saT4KKwk8L29sPgorCTwvbGk+CisJPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjAwIj5ORlNraXBwYWJsZTwvc3Bhbj48b2w+CisJPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjAwIj5BIGZpbGUgaXMgbmVlZGVkIGJ5IElDVSB0aGF0IGlzIAorCWdlbmVyYXRlZCB3aXRoIHRoZSBzYW1lIHRvb2wuIEp1c3QgdXNlIHRoZSBpbnB1dCBwYXJhbWV0ZXIgJnF1b3Q7TkZTa2lwcGFibGUmcXVvdDsgdG8gCisJZ2VuZXJhdGUgdGhlIGZpbGUgTkZTYWZlU2V0cy50eHQsIGFsc28gaW4gPC9zcGFuPgorCTxhIGhyZWY9ImZpbGU6Ly8vQzovREFUQS9HRU4iPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjAwIj4KKwlmaWxlOi8vL0M6L0RBVEEvR0VOPC9zcGFuPjwvYT48L2xpPgorPC9vbD4KKwk8L2xpPgorPC9vbD4KKzxoMz41LiBJbnZhcmlhbnQgQ2hlY2tpbmc8L2gzPgorPG9sPgorCTxsaT5TZXR1cDxvbD4KKwkJPGxpPk9wZW4gaW4gUGFja2FnZSBFeHBsb3Jlcjx1bD4KKwkJCTxsaT5jb20uaWJtLnRleHQuVUNEPHVsPgorCQkJCTxsaT5UZXN0VW5pY29kZUludmFyaWFudHMuamF2YTwvbGk+CisJCQk8L3VsPgorCQkJPC9saT4KKwkJPC91bD4KKwkJPC9saT4KKwkJPGxpPlJ1biZndDtSdW4gQXMuLi4gSmF2YSBBcHBsaWNhdGlvbjxicj4KKwkJV2lsbCBjcmVhdGUgdGhlIGZvbGxvd2luZyBmaWxlIG9mIHJlc3VsdHM6PHByZT48YSBocmVmPSJmaWxlOi8vL0M6L0RBVEEvR0VOL1VuaWNvZGVJbnZhcmlhbnRSZXN1bHRzLnR4dC8iPkM6XERBVEFcR0VOXFVuaWNvZGVJbnZhcmlhbnRSZXN1bHRzLnR4dFw8L2E+PC9wcmU+CisJCTxwPkFuZCBvbiB0aGUgY29uc29sZSB3aWxsIGxpc3Qgd2hldGhlciBhbnkgcHJvYmxlbXMgYXJlIGZvdW5kLiBUaHVzIGluIAorCQl0aGUgZm9sbG93aW5nIGNhc2UgdGhlcmUgd2FzIG9uZSBmYWlsdXJlOjwvcD4KKwkJPHByZT5QYXJzZUVycm9yQ291bnQ9MAorVGVzdEZhaWx1cmVDb3VudD0xPC9wcmU+CisJCTwvbGk+CisJCTxsaT5UaGUgaGVhZGVyIG9mIHRoZSByZXN1bHQgZmlsZSBleHBsYWlucyB0aGUgc3ludGF4IG9mIHRoZSB0ZXN0cy48L2xpPgorCQk8bGk+T3BlbiB0aGF0IGZpbGUgYW5kIHNlYXJjaCBmb3IgJnF1b3Q7KioqKiBTVEFSVCBFcnJvciBJbmZvICoqKiomcXVvdDsuIEVhY2ggc3VjaCAKKwkJcG9pbnQgcHJvdmlkZXMgYSBkdW1wIG9mIGNvbXBhcmlzb24gaW5mb3JtYXRpb24uPG9sPgorCQk8bGk+RmFpbHVyZXMgcHJpbnQgYSBsaXN0IG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHNldHMgYmVpbmcgCisJCWNvbXBhcmVkLiBTbyBpZiBBIGFuZCBCIGFyZSBiZWluZyBjb21wYXJlZCwgaXQgcHJpbnRzIGFsbCB0aGUgaXRlbXMgaW4gCisJCUEtQiwgdGhlbiBpbiBCLUEsIHRoZW4gaW4gQSZhbXA7Qi48L2xpPgorCQk8bGk+Rm9yIGV4YW1wbGUsIGhlcmUgaXMgYSBsaXN0aW5nIG9mIGEgcHJvYmxlbSB0aGF0IG11c3QgYmUgY29ycmVjdGVkLiAKKwkJTm90ZSB0aGF0IHVzdWFsbHkgdGhlcmUgaXMgYSBjb21tZW50IHRoYXQgZXhwbGFpbnMgd2hhdCB0aGUgZm9sbG93aW5nIAorCQlsaW5lIG9yIGxpbmVzIGFyZSBzdXBwb3NlZCB0byB0ZXN0LiBUaGVuIHdpbGwgY29tZSBGQUxTRSAoaW5kaWNhdGluZyAKKwkJdGhhdCB0aGUgdGVzdCBmYWlsZWQpLCB0aGVuIHRoZSBkZXRhaWxlZCBlcnJvciByZXBvcnQuPHByZT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA5cHQiPiMgQ2Fub25pY2FsIGRlY29tcG9zaXRpb25zIChtaW51cyBleGNsdXNpb25zKSBtdXN0IGJlIGlkZW50aWNhbCBhY3Jvc3MgcmVsZWFzZXMKK1skRGVjb21wb3NpdGlvbl9UeXBlOkNhbm9uaWNhbCAtICRGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbl0gPSBbJNdEZWNvbXBvc2l0aW9uX1R5cGU6Q2Fub25pY2FsIC0gJNdGdWxsX0NvbXBvc2l0aW9uX0V4Y2x1c2lvbl0KKworRkFMU0UKKyoqKiogU1RBUlQgRXJyb3IgSW5mbyAqKioqCisKK0luIFsk10RlY29tcG9zaXRpb25fVHlwZTpDYW5vbmljYWwgLSAk10Z1bGxfQ29tcG9zaXRpb25fRXhjbHVzaW9uXSwgYnV0IG5vdCBpbiBbJERlY29tcG9zaXRpb25fVHlwZTpDYW5vbmljYWwgLSAkRnVsbF9Db21wb3NpdGlvbl9FeGNsdXNpb25dIDoKKworIyBUb3RhbCBjb2RlIHBvaW50czogMAorCitOb3QgaW4gWyTXRGVjb21wb3NpdGlvbl9UeXBlOkNhbm9uaWNhbCAtICTXRnVsbF9Db21wb3NpdGlvbl9FeGNsdXNpb25dLCBidXQgaW4gWyREZWNvbXBvc2l0aW9uX1R5cGU6Q2Fub25pY2FsIC0gJEZ1bGxfQ29tcG9zaXRpb25fRXhjbHVzaW9uXSA6CisxQjA2ICAgICAgICAgICAjIExvICAgICAgIEJBTElORVNFIExFVFRFUiBBS0FSQSBURURVTkcKKzFCMDggICAgICAgICAgICMgTG8gICAgICAgQkFMSU5FU0UgTEVUVEVSIElLQVJBIFRFRFVORworMUIwQSAgICAgICAgICAgIyBMbyAgICAgICBCQUxJTkVTRSBMRVRURVIgVUtBUkEgVEVEVU5HCisxQjBDICAgICAgICAgICAjIExvICAgICAgIEJBTElORVNFIExFVFRFUiBSQSBSRVBBIFRFRFVORworMUIwRSAgICAgICAgICAgIyBMbyAgICAgICBCQUxJTkVTRSBMRVRURVIgTEEgTEVOR0EgVEVEVU5HCisxQjEyICAgICAgICAgICAjIExvICAgICAgIEJBTElORVNFIExFVFRFUiBPS0FSQSBURURVTkcKKzFCM0IgICAgICAgICAgICMgTWMgICAgICAgQkFMSU5FU0UgVk9XRUwgU0lHTiBSQSBSRVBBIFRFRFVORworMUIzRCAgICAgICAgICAgIyBNYyAgICAgICBCQUxJTkVTRSBWT1dFTCBTSUdOIExBIExFTkdBIFRFRFVORworMUI0MC4uMUI0MSAgICAgIyBNYyAgIFsyXSBCQUxJTkVTRSBWT1dFTCBTSUdOIFRBTElORyBURURVTkcuLkJBTElORVNFIFZPV0VMIFNJR04gVEFMSU5HIFJFUEEgVEVEVU5HCisxQjQzICAgICAgICAgICAjIE1jICAgICAgIEJBTElORVNFIFZPV0VMIFNJR04gUEVQRVQgVEVEVU5HCisKKyMgVG90YWwgY29kZSBwb2ludHM6IDExCisKK0luIGJvdGggWyTXRGVjb21wb3NpdGlvbl9UeXBlOkNhbm9uaWNhbCAtICTXRnVsbF9Db21wb3NpdGlvbl9FeGNsdXNpb25dLCBhbmQgaW4gWyREZWNvbXBvc2l0aW9uX1R5cGU6Q2Fub25pY2FsIC0gJEZ1bGxfQ29tcG9zaXRpb25fRXhjbHVzaW9uXSA6CiswMEMwLi4wMEM1ICAgICAjIEwmYW1wOyAgIFs2XSBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUuLkxBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCiswMEM3Li4wMENGICAgICAjIEwmYW1wOyAgIFs5XSBMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQS4uTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworMDBEMS4uMDBENiAgICAgIyBMJmFtcDsgICBbNl0gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFLi5MQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisuLi4KKzMwRjcuLjMwRkEgICAgICMgTG8gICBbNF0gS0FUQUtBTkEgTEVUVEVSIFZBLi5LQVRBS0FOQSBMRVRURVIgVk8KKzMwRkUgICAgICAgICAgICMgTG0gICAgICAgS0FUQUtBTkEgVk9JQ0VEIElURVJBVElPTiBNQVJLCitBQzAwLi5EN0EzICAgICAjIExvIFsxMTE3Ml0gSEFOR1VMIFNZTExBQkxFIEdBLi5IQU5HVUwgU1lMTEFCTEUgSElICisKKyMgVG90YWwgY29kZSBwb2ludHM6IDEyMDg5CisqKioqIEVORCBFcnJvciBJbmZvICoqKio8L3NwYW4+PC9wcmU+CisJCTwvbGk+CisJPC9vbD4KKwkJPC9saT4KKwkJPGxpPk9wdGlvbnM6PG9sPgorCQk8bGk+LXImbmJzcDsmbmJzcDsmbmJzcDsgUHJpbnQgdGhlIGZhaWx1cmVzIGFzIGEgcmFuZ2UgbGlzdC48L2xpPgorCQk8bGk+LWZ4eHgmbmJzcDsmbmJzcDsmbmJzcDsgVXNlIGEgZGlmZmVyZW50IGlucHV0IGZpbGUsIHN1Y2ggYXMgLWZJbnZhcmlhbnRUZXN0LnR4dDwvbGk+CisJPC9vbD4KKwkJPC9saT4KKwk8L29sPgorCTwvbGk+Cis8L29sPgorPGgzPjYuIE9wdGlvbnM8L2gzPgorPG9sPgorCTxsaT5JZiB5b3Ugd2FudCB0byBzZWUgZmlsZXMgdGhhdCBhcmUgb3BlbmVkIHdoaWxlIHByb2Nlc3NpbmcsIGRvIHRoZSAKKwlmb2xsb3dpbmc6PG9sPgorCQk8bGk+UnVuJmd0O1J1bjwvbGk+CisJCTxsaT5TZWxlY3QgdGhlIEFyZ3VtZW50cyB0YWIsIGFuZCBhZGQgdGhlIGZvbGxvd2luZzxvbD4KKwkJCTxsaT5WTSBhcmd1bWVudHM6CisJCQk8cHJlPi1EU0hPV19GSUxFUzwvcHJlPgorCQkJPC9saT4KKwkJPC9vbD4KKwkJPC9saT4KKwk8L29sPgorCTwvbGk+Cis8L29sPgorPGgzPjUuIFVDQTwvaDM+Cis8b2w+CisJPGxpPllvdSB3aWxsIHVzZSBjb20uaWJtLnRleHQuVUNBLk1haW4gYXMgeW91ciBtYWluIGNsYXNzLCBjcmVhdGluZyBhbG9uZyAKKwl0aGUgc2FtZSBsaW5lcyBhcyBhYm92ZS48L2xpPgorCTxsaT5UbyB0ZXN0IHdoZXRoZXIgdGhlIFVDQSBmaWxlcyBhcmUgdmFsaWQsIHVzZSB0aGUKKwk8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDQwMCI+b3B0aW9ucyAoPGk+bm90ZTogeW91IG11c3QgYWxzbyBidWlsZCB0aGUgSUNVIAorCWZpbGVzIGJlbG93LCBzaW5jZSB0aGV5IHRlc3Qgb3RoZXIgYXNwZWN0czwvaT4pLjwvc3Bhbj48cHJlPndyaXRlQ29sbGF0aW9uVmFsaWRpdHlMb2c8L3ByZT4KKwk8cD5JdCB3aWxsIGNyZWF0ZSBhIGZpbGU6PC9wPgorCTxwcmU+PGEgaHJlZj0iZmlsZTovLy9DOi9EQVRBL0dFTi9jb2xsYXRpb24vNS4wLjAvQ2hlY2tDb2xsYXRpb25WYWxpZGl0eS5odG1sIj5DOlxEQVRBXEdFTlxjb2xsYXRpb25cNS4wLjBcQ2hlY2tDb2xsYXRpb25WYWxpZGl0eS5odG1sPC9hPjwvcHJlPgorCTxvbD4KKwkJPGxpPlJldmlldyB0aGlzIGZpbGUuIEl0IHdpbGwgbGlzdCBlcnJvcnMuIFNvbWUgb2YgdGhvc2UgYXJlIGFjdHVhbGx5IAorCXdhcm5pbmdzLCBhbmQgaW5kaWNhdGUgcG9zc2libGUgcHJvYmxlbXMgKHRoaXMgaXMgaW5kaWNhdGVkIGluIHRoZSB0ZXh0LCAKKwlzdWNoIGFzIGJ5OiAmcXVvdDtUaGVzZSBhcmUgbm90IG5lY2Vzc2FyaWx5IGVycm9ycywgYnV0IHNob3VsZCBiZSBleGFtaW5lZCBmb3IgCisJCTxpPnBvc3NpYmxlPC9pPiBlcnJvcnMmcXVvdDspLiBJbiB0aG9zZSBjYXNlcywgdGhlIGl0ZW1zIHNob3VsZCBiZSByZXZpZXdlZCB0byBtYWtlIAorCXN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gaW5hZHZlcnRlbnQgcHJvYmxlbXMuPC9saT4KKwkJPGxpPklmIGl0IGlzIG5vdCBzbyBtYXJrZWQsIGl0IGlzIGEgdHJ1ZSBlcnJvciwgYW5kIG11c3QgYmUgZml4ZWQuPC9saT4KKwkJPGxpPkF0IHRoZSBlbmQsIHRoZXJlIGlzIHNlY3Rpb24gPGI+MTEuIENvdmVyYWdlPC9iPi4gVGhlcmUgYXJlIHR3byBzZWN0aW9uczo8b2w+CisJCQk8bGk+SW4gVUNEeHh4LCBidXQgbm90IGluIGFsbGtleXMuIENoZWNrIHRoaXMgb3ZlciB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSAKKwlhcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGdldCA8Yj48aT5pbXBsaWNpdDwvaT48L2I+IHdlaWdodHMuPC9saT4KKwkJCTxsaT5JbiBhbGxrZXlzLCBidXQgbm90IGluIFVDRC4gVGhlc2Ugc2hvdWxkIGJlIDxiPjxpPm9ubHk8L2k+PC9iPiAKKwljb250cmFjdGlvbnMuIENoZWNrIHRoZW0gb3ZlciB0byBtYWtlIHN1cmUgdGhleSBsb29rIHJpZ2h0IGFsc28uPC9saT4KKwkJPC9vbD48L2xpPgorCTwvb2w+PC9saT4KKwk8bGk+CisJPGg0PjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNDAwIj5UbyBidWlsZCBhbGwgdGhlIGNoYXJ0cyAoaW5jbHVkaW5nIGZvciAKKwl0aGUgVUNBKSwgdXNlIHRoZSBvcHRpb25zOiA8L3NwYW4+PC9oND4KKwk8cHJlPm5vcm1hbGl6YXRpb25DaGFydCBjYXNlQ2hhcnQgc2NyaXB0Q2hhcnQgaW5kZXhDaGFydDwvcHJlPgorCTxwPlRoZXkgd2lsbCBiZSBidWlsdCBpbnRvPC9wPgorCTxwcmU+PGEgaHJlZj0iZmlsZTovLy9DOi9EQVRBL0dFTi9jaGFydHMiPkM6XERBVEFcR0VOXGNoYXJ0czwvYT48L3ByZT4KKwk8cD48Yj5PbmNlIFVDQSBpcyByZWxlYXNlZCwgdGhlbiBjb3B5IHRob3NlIGZpbGVzIHVwIHRvIHRoZSByaWdodCBzcG90cyBpbiAKKwl0aGUgVW5pY29kZSBzaXRlOjwvYj48dWw+CisJCTxsaT4KKwkJPHByZT48YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9ub3JtYWxpemF0aW9uLyI+aHR0cDovL3d3dy51bmljb2RlLm9yZy9jaGFydHMvbm9ybWFsaXphdGlvbi88L2E+PC9wcmU+CisJCTwvbGk+CisJCTxsaT4KKwkJPHByZT48YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9jb2xsYXRpb24vIj5odHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9jb2xsYXRpb24vPC9hPiA8L3ByZT4KKwkJPC9saT4KKwkJPGxpPgorCQk8cHJlPjxhIGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2hhcnRzL2Nhc2UvIj5odHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9jYXNlLzwvYT4gPC9wcmU+CisJCTwvbGk+CisJCTxsaT4KKwkJPHByZT48YSBocmVmPSJodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9jb2xsYXRpb24vIj5odHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9jb2xsYXRpb24vPC9hPiA8L3ByZT4KKwkJPC9saT4KKwk8L3VsPgorCTwvbGk+CisJPGxpPgorCTxoND48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDQwMCI+VG8gYnVpbGQgYWxsIHRoZSBVQ0EgZmlsZXMgdXNlZCBieSBJQ1UsIHVzZSB0aGUgCisJb3B0aW9uOjwvc3Bhbj48L2g0PgorCTxwcmU+SUNVPC9wcmU+CisJPHA+VGhleSB3aWxsIGJlIGJ1aWx0IGludG86PC9wPgorCTxwcmU+PGEgaHJlZj0iZmlsZTovLy9DOi9EQVRBL0dFTi9jb2xsYXRpb24vNS4wLjAiPkM6XERBVEFcR0VOXGNvbGxhdGlvblw1LjAuMDwvYT48L3ByZT4KKwk8L2xpPgorCTxsaT5Zb3Ugc2hvdWxkIHRoZW4gYnVpbGQgYSBzZXQgb2YgdGhlIElDVSBmaWxlcyBmb3IgdGhlIHByZXZpb3VzIHZlcnNpb24sIAorCWlmIHlvdSBkb24ndCBoYXZlIHRoZW0uIFVzZSB0aGUgb3B0aW9uczo8cHJlPnZlcnNpb24gNC4xLjAgSUNVPC9wcmU+CisJPHA+T3Igd2hhdGV2ZXIgdGhlIGxhc3QgdmVyc2lvbiB3YXMuPC9saT4KKwk8bGk+Tm93LCB5b3Ugd2lsbCB3YW50IHRvIGNvbXBhcmUgdmVyc2lvbnMuIFRoZSBrZXkgZmlsZSBpcyAKKwlVQ0FfUnVsZXNfTm9DRS50eHQuIEl0IGNvbnRhaW5zIHRoZSBydWxlcyBleHByZXNzZWQgaW4gSUNVIGZvcm1hdCwgd2hpY2ggCisJYWxsb3dzIGZvciBjb21wYXJpc29uIGFjcm9zcyB2ZXJzaW9ucyBvZiBVQ0Egd2l0aG91dCBzcHVyaW91cyB2YXJpYXRpb25zIG9mIAorCXRoZSBudW1iZXJzIGdldHRpbmcgaW4gdGhlIHdheS48b2w+CisJCTxsaT5EbyBhIERpZmYgYmV0d2VlbiB0aGUgbGFzdCBhbmQgY3VycmVudCB2ZXJzaW9ucyBvZiB0aGVzZSBmaWxlcywgYW5kIAorCQl2ZXJpZnkgdGhhdCBhbGwgdGhlIGRpZmZlcmVuY2VzIGFyZSBlaXRoZXIgbmV3IGNoYXJhY3RlcnMsIG9yIHdlcmUgCisJCWF1dGhvcml6ZWQgdG8gYmUgY2hhbmdlZCBieSB0aGUgVVRDLjwvbGk+CisJPC9vbD48L2xpPgorPC9vbD4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=