ZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvaWRuYS5weSBiL0xpYi9lbmNvZGluZ3MvaWRuYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRkMDRlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9pZG5hLnB5CkBAIC0wLDAgKzEsMTg3IEBACisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIFJGQ3MgMzQ5MCAoSUROQSkgYW5kIDM0OTEgKE5hbWVwcmVwKQorCitpbXBvcnQgc3RyaW5ncHJlcCwgdW5pY29kZWRhdGEsIHJlLCBjb2RlY3MKKworIyBJRE5BIHNlY3Rpb24gMy4xCitkb3RzID0gcmUuY29tcGlsZSh1IltcdTAwMkVcdTMwMDJcdUZGMEVcdUZGNjFdIikKKworIyBJRE5BIHNlY3Rpb24gNQorYWNlX3ByZWZpeCA9ICJ4bi0tIgordWFjZV9wcmVmaXggPSB1bmljb2RlKGFjZV9wcmVmaXgsICJhc2NpaSIpCisKKyMgVGhpcyBhc3N1bWVzIHF1ZXJ5IHN0cmluZ3MsIHNvIEFsbG93VW5hc3NpZ25lZCBpcyB0cnVlCitkZWYgbmFtZXByZXAobGFiZWwpOgorICAgICMgTWFwCisgICAgbmV3bGFiZWwgPSBbXQorICAgIGZvciBjIGluIGxhYmVsOgorICAgICAgICBpZiBzdHJpbmdwcmVwLmluX3RhYmxlX2IxKGMpOgorICAgICAgICAgICAgIyBNYXAgdG8gbm90aGluZworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbmV3bGFiZWwuYXBwZW5kKHN0cmluZ3ByZXAubWFwX3RhYmxlX2IyKGMpKQorICAgIGxhYmVsID0gdSIiLmpvaW4obmV3bGFiZWwpCisgICAgCisgICAgIyBOb3JtYWxpemUKKyAgICBsYWJlbCA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZLQyIsIGxhYmVsKQorICAgIAorICAgICMgUHJvaGliaXQKKyAgICBmb3IgYyBpbiBsYWJlbDoKKyAgICAgICAgaWYgc3RyaW5ncHJlcC5pbl90YWJsZV9jMTIoYykgb3IgXAorICAgICAgICAgICBzdHJpbmdwcmVwLmluX3RhYmxlX2MyMihjKSBvciBcCisgICAgICAgICAgIHN0cmluZ3ByZXAuaW5fdGFibGVfYzMoYykgb3IgXAorICAgICAgICAgICBzdHJpbmdwcmVwLmluX3RhYmxlX2M0KGMpIG9yIFwKKyAgICAgICAgICAgc3RyaW5ncHJlcC5pbl90YWJsZV9jNShjKSBvciBcCisgICAgICAgICAgIHN0cmluZ3ByZXAuaW5fdGFibGVfYzYoYykgb3IgXAorICAgICAgICAgICBzdHJpbmdwcmVwLmluX3RhYmxlX2M3KGMpIG9yIFwKKyAgICAgICAgICAgc3RyaW5ncHJlcC5pbl90YWJsZV9jOChjKSBvciBcCisgICAgICAgICAgIHN0cmluZ3ByZXAuaW5fdGFibGVfYzkoYyk6CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJJbnZhbGlkIGNoYXJhY3RlciAlcyIgJSByZXByKGMpCisKKyAgICAjIENoZWNrIGJpZGkKKyAgICBSYW5kQUwgPSBtYXAoc3RyaW5ncHJlcC5pbl90YWJsZV9kMSwgbGFiZWwpCisgICAgZm9yIGMgaW4gUmFuZEFMOgorICAgICAgICBpZiBjOgorICAgICAgICAgICAgIyBUaGVyZSBpcyBhIFJhbmRBTCBjaGFyIGluIHRoZSBzdHJpbmcuIE11c3QgcGVyZm9ybSBmdXJ0aGVyCisgICAgICAgICAgICAjIHRlc3RzOgorICAgICAgICAgICAgIyAxKSBUaGUgY2hhcmFjdGVycyBpbiBzZWN0aW9uIDUuOCBNVVNUIGJlIHByb2hpYml0ZWQuCisgICAgICAgICAgICAjIFRoaXMgaXMgdGFibGUgQy44LCB3aGljaCB3YXMgYWxyZWFkeSBjaGVja2VkCisgICAgICAgICAgICAjIDIpIElmIGEgc3RyaW5nIGNvbnRhaW5zIGFueSBSYW5kQUxDYXQgY2hhcmFjdGVyLCB0aGUgc3RyaW5nCisgICAgICAgICAgICAjIE1VU1QgTk9UIGNvbnRhaW4gYW55IExDYXQgY2hhcmFjdGVyLgorICAgICAgICAgICAgaWYgZmlsdGVyKHN0cmluZ3ByZXAuaW5fdGFibGVfZDIsIGxhYmVsKToKKyAgICAgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJWaW9sYXRpb24gb2YgQklESSByZXF1aXJlbWVudCAyIgorCisgICAgICAgICAgICAjIDMpIElmIGEgc3RyaW5nIGNvbnRhaW5zIGFueSBSYW5kQUxDYXQgY2hhcmFjdGVyLCBhCisgICAgICAgICAgICAjIFJhbmRBTENhdCBjaGFyYWN0ZXIgTVVTVCBiZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorICAgICAgICAgICAgIyBzdHJpbmcsIGFuZCBhIFJhbmRBTENhdCBjaGFyYWN0ZXIgTVVTVCBiZSB0aGUgbGFzdAorICAgICAgICAgICAgIyBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZy4KKyAgICAgICAgICAgIGlmIG5vdCBSYW5kQUxbMF0gb3Igbm90IFJhbmRBTFstMV06CisgICAgICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAiVmlvbGF0aW9uIG9mIEJJREkgcmVxdWlyZW1lbnQgMyIKKworICAgIHJldHVybiBsYWJlbAorCitkZWYgVG9BU0NJSShsYWJlbCk6CisgICAgdHJ5OgorICAgICAgICAjIFN0ZXAgMTogdHJ5IEFTQ0lJCisgICAgICAgIGxhYmVsID0gbGFiZWwuZW5jb2RlKCJhc2NpaSIpCisgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgICMgU2tpcCB0byBzdGVwIDM6IFVzZVNURDNBU0NJSVJ1bGVzIGlzIGZhbHNlLCBzbworICAgICAgICAjIFNraXAgdG8gc3RlcCA4LgorICAgICAgICBpZiAwIDwgbGVuKGxhYmVsKSA8IDY0OgorICAgICAgICAgICAgcmV0dXJuIGxhYmVsCisgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvciwgImxhYmVsIHRvbyBsb25nIgorCisgICAgIyBTdGVwIDI6IG5hbWVwcmVwCisgICAgbGFiZWwgPSBuYW1lcHJlcChsYWJlbCkKKworICAgICMgU3RlcCAzOiBVc2VTVEQzQVNDSUlSdWxlcyBpcyBmYWxzZQorICAgICMgU3RlcCA0OiB0cnkgQVNDSUkKKyAgICB0cnk6CisgICAgICAgIGxhYmVsID0gbGFiZWwuZW5jb2RlKCJhc2NpaSIpCisgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgICMgU2tpcCB0byBzdGVwIDguCisgICAgICAgIGlmIDAgPCBsZW4obGFiZWwpIDwgNjQ6CisgICAgICAgICAgICByZXR1cm4gbGFiZWwKKyAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAibGFiZWwgdG9vIGxvbmciCisKKyAgICAjIFN0ZXAgNTogQ2hlY2sgQUNFIHByZWZpeAorICAgIGlmIGxhYmVsLnN0YXJ0c3dpdGgodWFjZV9wcmVmaXgpOgorICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJMYWJlbCBzdGFydHMgd2l0aCBBQ0UgcHJlZml4IgorCisgICAgIyBTdGVwIDY6IEVuY29kZSB3aXRoIFBVTllDT0RFCisgICAgbGFiZWwgPSBsYWJlbC5lbmNvZGUoInB1bnljb2RlIikKKworICAgICMgU3RlcCA3OiBQcmVwZW5kIEFDRSBwcmVmaXgKKyAgICBsYWJlbCA9IGFjZV9wcmVmaXggKyBsYWJlbAorCisgICAgIyBTdGVwIDg6IENoZWNrIHNpemUKKyAgICBpZiAwIDwgbGVuKGxhYmVsKSA8IDY0OgorICAgICAgICByZXR1cm4gbGFiZWwKKyAgICByYWlzZSBVbmljb2RlRXJyb3IsICJsYWJlbCB0b28gbG9uZyIKKworZGVmIFRvVW5pY29kZShsYWJlbCk6CisgICAgIyBTdGVwIDE6IENoZWNrIGZvciBBU0NJSQorICAgIGlmIGlzaW5zdGFuY2UobGFiZWwsIHN0cik6CisgICAgICAgIHB1cmVfYXNjaWkgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGFiZWwgPSBsYWJlbC5lbmNvZGUoImFzY2lpIikKKyAgICAgICAgICAgIHB1cmVfYXNjaWkgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CisgICAgICAgICAgICBwdXJlX2FzY2lpID0gRmFsc2UKKyAgICBpZiBub3QgcHVyZV9hc2NpaToKKyAgICAgICAgIyBTdGVwIDI6IFBlcmZvcm0gbmFtZXByZXAKKyAgICAgICAgbGFiZWwgPSBuYW1lcHJlcChsYWJlbCkKKyAgICAgICAgIyBJdCBkb2Vzbid0IHNheSB0aGlzLCBidXQgYXBwYXJlbnRseSwgaXQgc2hvdWxkIGJlIEFTQ0lJIG5vdworICAgICAgICB0cnk6CisgICAgICAgICAgICBsYWJlbCA9IGxhYmVsLmVuY29kZSgiYXNjaWkiKQorICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAiSW52YWxpZCBjaGFyYWN0ZXIgaW4gSUROIGxhYmVsIgorICAgICMgU3RlcCAzOiBDaGVjayBmb3IgQUNFIHByZWZpeAorICAgIGlmIG5vdCBsYWJlbC5zdGFydHN3aXRoKGFjZV9wcmVmaXgpOgorICAgICAgICByZXR1cm4gdW5pY29kZShsYWJlbCwgImFzY2lpIikKKworICAgICMgU3RlcCA0OiBSZW1vdmUgQUNFIHByZWZpeAorICAgIGxhYmVsMSA9IGxhYmVsW2xlbihhY2VfcHJlZml4KTpdCisKKyAgICAjIFN0ZXAgNTogRGVjb2RlIHVzaW5nIFBVTllDT0RFCisgICAgcmVzdWx0ID0gbGFiZWwxLmRlY29kZSgicHVueWNvZGUiKQorCisgICAgIyBTdGVwIDY6IEFwcGx5IFRvQVNDSUkKKyAgICBsYWJlbDIgPSBUb0FTQ0lJKHJlc3VsdCkKKworICAgICMgU3RlcCA3OiBDb21wYXJlIHRoZSByZXN1bHQgb2Ygc3RlcCA2IHdpdGggdGhlIG9uZSBvZiBzdGVwIDMKKyAgICAjIGxhYmVsMiB3aWxsIGFscmVhZHkgYmUgaW4gbG93ZXIgY2FzZS4KKyAgICBpZiBsYWJlbC5sb3dlcigpICE9IGxhYmVsMjoKKyAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAoIklETkEgZG9lcyBub3Qgcm91bmQtdHJpcCIsIGxhYmVsLCBsYWJlbDIpCisKKyAgICAjIFN0ZXAgODogcmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RlcCA1CisgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisKKyAgICAgICAgaWYgZXJyb3JzICE9ICdzdHJpY3QnOgorICAgICAgICAgICAgIyBJRE5BIGlzIHF1aXRlIGNsZWFyIHRoYXQgaW1wbGVtZW50YXRpb25zIG11c3QgYmUgc3RyaWN0CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJ1bnN1cHBvcnRlZCBlcnJvciBoYW5kbGluZyAiK2Vycm9ycworCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBsYWJlbCBpbiBkb3RzLnNwbGl0KGlucHV0KToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoVG9BU0NJSShsYWJlbCkpCisgICAgICAgICMgSm9pbiB3aXRoIFUrMDAyRQorICAgICAgICByZXR1cm4gIi4iLmpvaW4ocmVzdWx0KSwgbGVuKGlucHV0KQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIAorICAgICAgICBpZiBlcnJvcnMgIT0gJ3N0cmljdCc6CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJVbnN1cHBvcnRlZCBlcnJvciBoYW5kbGluZyAiK2Vycm9ycworCisgICAgICAgICMgSUROQSBhbGxvd3MgZGVjb2RpbmcgdG8gb3BlcmF0ZSBvbiBVbmljb2RlIHN0cmluZ3MsIHRvby4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dCwgdW5pY29kZSk6CisgICAgICAgICAgICBsYWJlbHMgPSBkb3RzLnNwbGl0KGlucHV0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBNdXN0IGJlIEFTQ0lJIHN0cmluZworICAgICAgICAgICAgdW5pY29kZShpbnB1dCwgImFzY2lpIikKKyAgICAgICAgICAgIGxhYmVscyA9IGlucHV0LnNwbGl0KCIuIikKKworICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgbGFiZWwgaW4gbGFiZWxzOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChUb1VuaWNvZGUobGFiZWwpKQorCisgICAgICAgIHJldHVybiB1Ii4iLmpvaW4ocmVzdWx0KSwgbGVuKGlucHV0KQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisKKyAgICByZXR1cm4gKENvZGVjKCkuZW5jb2RlLENvZGVjKCkuZGVjb2RlLFN0cmVhbVJlYWRlcixTdHJlYW1Xcml0ZXIpCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3B1bnljb2RlLnB5IGIvTGliL2VuY29kaW5ncy9wdW55Y29kZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2YyZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9wdW55Y29kZS5weQpAQCAtMCwwICsxLDIyMiBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQorIiIiIENvZGVjIGZvciB0aGUgUHVuaWNvZGUgZW5jb2RpbmcsIGFzIHNwZWNpZmllZCBpbiBSRkMgMzQ5MgorCitXcml0dGVuIGJ5IE1hcnRpbiB2LiBM9ndpcy4KKyIiIgorCitpbXBvcnQgY29kZWNzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBFbmNvZGluZyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBzZWdyZWdhdGUoc3RyKToKKyAgICAiIiIzLjEgQmFzaWMgY29kZSBwb2ludCBzZWdyZWdhdGlvbiIiIiAKKyAgICBiYXNlID0gW10KKyAgICBleHRlbmRlZCA9IHt9CisgICAgZm9yIGMgaW4gc3RyOgorICAgICAgICBpZiBvcmQoYykgPCAxMjg6CisgICAgICAgICAgICBiYXNlLmFwcGVuZChjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0ZW5kZWRbY10gPSAxCisgICAgZXh0ZW5kZWQgPSBleHRlbmRlZC5rZXlzKCkKKyAgICBleHRlbmRlZC5zb3J0KCkKKyAgICByZXR1cm4gIiIuam9pbihiYXNlKS5lbmNvZGUoImFzY2lpIiksZXh0ZW5kZWQKKworZGVmIHNlbGVjdGl2ZV9sZW4oc3RyLCBtYXgpOgorICAgICIiIlJldHVybiB0aGUgbGVuZ3RoIG9mIHN0ciwgY29uc2lkZXJpbmcgb25seSBjaGFyYWN0ZXJzIGJlbG93IG1heC4iIiIKKyAgICByZXMgPSAwCisgICAgZm9yIGMgaW4gc3RyOgorICAgICAgICBpZiBvcmQoYykgPCBtYXg6CisgICAgICAgICAgICByZXMgKz0gMQorICAgIHJldHVybiByZXMKKworZGVmIHNlbGVjdGl2ZV9maW5kKHN0ciwgY2hhciwgaW5kZXgsIHBvcyk6CisgICAgIiIiUmV0dXJuIGEgcGFpciAoaW5kZXgsIHBvcyksIGluZGljYXRpbmcgdGhlIG5leHQgb2NjdXJyZW5jZSBvZgorICAgIGNoYXIgaW4gc3RyLiBpbmRleCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBjb25zaWRlcmluZworICAgIG9ubHkgb3JkaW5hbHMgdXAgdG8gYW5kIGluY2x1ZGluZyBjaGFyLCBhbmQgcG9zIGlzIHRoZSBwb3NpdGlvbiBpbgorICAgIHRoZSBmdWxsIHN0cmluZy4gaW5kZXgvcG9zIGlzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0aGUgZnVsbAorICAgIHN0cmluZy4iIiIKKworICAgIGwgPSBsZW4oc3RyKQorICAgIHdoaWxlIDE6CisgICAgICAgIHBvcyArPSAxCisgICAgICAgIGlmIHBvcyA9PSBsOgorICAgICAgICAgICAgcmV0dXJuICgtMSwgLTEpCisgICAgICAgIGMgPSBzdHJbcG9zXQorICAgICAgICBpZiBjID09IGNoYXI6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgrMSwgcG9zCisgICAgICAgIGVsaWYgYyA8IGNoYXI6CisgICAgICAgICAgICBpbmRleCArPSAxCisKK2RlZiBpbnNlcnRpb25fdW5zb3J0KHN0ciwgZXh0ZW5kZWQpOgorICAgICIiIjMuMiBJbnNlcnRpb24gdW5zb3J0IGNvZGluZyIiIgorICAgIG9sZGNoYXIgPSAweDgwCisgICAgcmVzdWx0ID0gW10KKyAgICBvbGRpbmRleCA9IC0xCisgICAgZm9yIGMgaW4gZXh0ZW5kZWQ6CisgICAgICAgIGluZGV4ID0gcG9zID0gLTEKKyAgICAgICAgY2hhciA9IG9yZChjKQorICAgICAgICBjdXJsZW4gPSBzZWxlY3RpdmVfbGVuKHN0ciwgY2hhcikKKyAgICAgICAgZGVsdGEgPSAoY3VybGVuKzEpICogKGNoYXIgLSBvbGRjaGFyKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaW5kZXgscG9zID0gc2VsZWN0aXZlX2ZpbmQoc3RyLGMsaW5kZXgscG9zKQorICAgICAgICAgICAgaWYgaW5kZXggPT0gLTE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRlbHRhICs9IGluZGV4IC0gb2xkaW5kZXgKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVsdGEtMSkKKyAgICAgICAgICAgIG9sZGluZGV4ID0gaW5kZXgKKyAgICAgICAgICAgIGRlbHRhID0gMAorICAgICAgICBvbGRjaGFyID0gY2hhcgorICAgICAgICAgICAgCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgVChqLCBiaWFzKToKKyAgICAjIFB1bnljb2RlIHBhcmFtZXRlcnM6IHRtaW4gPSAxLCB0bWF4ID0gMjYsIGJhc2UgPSAzNgorICAgIHJlcyA9IDM2ICogKGogKyAxKSAtIGJpYXMKKyAgICBpZiByZXMgPCAxOiByZXR1cm4gMQorICAgIGlmIHJlcyA+IDI2OiByZXR1cm4gMjYKKyAgICByZXR1cm4gcmVzCisKK2RpZ2l0cyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiCitkZWYgZ2VuZXJhdGVfZ2VuZXJhbGl6ZWRfaW50ZWdlcihOLCBiaWFzKToKKyAgICAiIiIzLjMgR2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJzIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICBqID0gMAorICAgIHdoaWxlIDE6CisgICAgICAgIHQgPSBUKGosIGJpYXMpCisgICAgICAgIGlmIE4gPCB0OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkaWdpdHNbTl0pCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZGlnaXRzW3QgKyAoKE4gLSB0KSAlICgzNiAtIHQpKV0pCisgICAgICAgIE4gPSAoTiAtIHQpIC8vICgzNiAtIHQpCisgICAgICAgIGogKz0gMQorCitkZWYgYWRhcHQoZGVsdGEsIGZpcnN0LCBudW1jaGFycyk6CisgICAgaWYgZmlyc3Q6CisgICAgICAgIGRlbHRhIC8vPSA3MDAKKyAgICBlbHNlOgorICAgICAgICBkZWx0YSAvLz0gMgorICAgIGRlbHRhICs9IGRlbHRhIC8vIG51bWNoYXJzCisgICAgIyAoKGJhc2UgLSB0bWluKSAqIHRtYXgpIC8vIDIgPT0gNDU1CisgICAgZGl2aXNpb25zID0gMAorICAgIHdoaWxlIGRlbHRhID4gNDU1OgorICAgICAgICBkZWx0YSA9IGRlbHRhIC8vIDM1ICMgYmFzZSAtIHRtaW4KKyAgICAgICAgZGl2aXNpb25zICs9IDM2CisgICAgYmlhcyA9IGRpdmlzaW9ucyArICgzNiAqIGRlbHRhIC8vIChkZWx0YSArIDM4KSkKKyAgICByZXR1cm4gYmlhcworICAgIAorCitkZWYgZ2VuZXJhdGVfaW50ZWdlcnMoYmFzZWxlbiwgZGVsdGFzKToKKyAgICAiIiIzLjQgQmlhcyBhZGFwdGF0aW9uIiIiCisgICAgIyBQdW55Y29kZSBwYXJhbWV0ZXJzOiBpbml0aWFsIGJpYXMgPSA3MiwgZGFtcCA9IDcwMCwgc2tldyA9IDM4CisgICAgcmVzdWx0ID0gW10KKyAgICBiaWFzID0gNzIKKyAgICBmb3IgcG9pbnRzLCBkZWx0YSBpbiBlbnVtZXJhdGUoZGVsdGFzKToKKyAgICAgICAgcyA9IGdlbmVyYXRlX2dlbmVyYWxpemVkX2ludGVnZXIoZGVsdGEsIGJpYXMpCisgICAgICAgIHJlc3VsdC5leHRlbmQocykKKyAgICAgICAgYmlhcyA9IGFkYXB0KGRlbHRhLCBwb2ludHM9PTAsIGJhc2VsZW4rcG9pbnRzKzEpCisgICAgcmV0dXJuICIiLmpvaW4ocmVzdWx0KQorCitkZWYgcHVueWNvZGVfZW5jb2RlKHRleHQpOgorICAgIGJhc2UsIGV4dGVuZGVkID0gc2VncmVnYXRlKHRleHQpCisgICAgYmFzZSA9IGJhc2UuZW5jb2RlKCJhc2NpaSIpCisgICAgZGVsdGFzID0gaW5zZXJ0aW9uX3Vuc29ydCh0ZXh0LCBleHRlbmRlZCkKKyAgICBleHRlbmRlZCA9IGdlbmVyYXRlX2ludGVnZXJzKGxlbihiYXNlKSwgZGVsdGFzKQorICAgIGlmIGJhc2U6CisgICAgICAgIHJldHVybiBiYXNlICsgIi0iICsgZXh0ZW5kZWQKKyAgICByZXR1cm4gZXh0ZW5kZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERlY29kaW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIGRlY29kZV9nZW5lcmFsaXplZF9udW1iZXIoZXh0ZW5kZWQsIGV4dHBvcywgYmlhcywgZXJyb3JzKToKKyAgICAiIiIzLjMgR2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJzIiIiCisgICAgcmVzdWx0ID0gMAorICAgIHcgPSAxCisgICAgaiA9IDAKKyAgICB3aGlsZSAxOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjaGFyID0gb3JkKGV4dGVuZGVkW2V4dHBvc10pCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgaWYgZXJyb3JzID09ICJzdHJpY3QiOgorICAgICAgICAgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvciwgImluY29tcGxldGUgcHVuaWNvZGUgc3RyaW5nIgorICAgICAgICAgICAgcmV0dXJuIGV4dHBvcyArIDEsIE5vbmUKKyAgICAgICAgZXh0cG9zICs9IDEKKyAgICAgICAgaWYgMHg0MSA8PSBjaGFyIDw9IDB4NUE6ICMgQS1aCisgICAgICAgICAgICBkaWdpdCA9IGNoYXIgLSAweDQxCisgICAgICAgIGVsaWYgMHgzMCA8PSBjaGFyIDw9IDB4Mzk6CisgICAgICAgICAgICBkaWdpdCA9IGNoYXIgLSAyMiAjIDB4MzAtMjYKKyAgICAgICAgZWxpZiBlcnJvcnMgPT0gInN0cmljdCI6CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IoIkludmFsaWQgZXh0ZW5kZWQgY29kZSBwb2ludCAnJXMnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZXh0ZW5kZWRbZXh0cG9zXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBleHRwb3MsIE5vbmUKKyAgICAgICAgdCA9IFQoaiwgYmlhcykKKyAgICAgICAgcmVzdWx0ICs9IGRpZ2l0ICogdworICAgICAgICBpZiBkaWdpdCA8IHQ6CisgICAgICAgICAgICByZXR1cm4gZXh0cG9zLCByZXN1bHQKKyAgICAgICAgdyA9IHcgKiAoMzYgLSB0KQorICAgICAgICBqICs9IDEKKyAgICAgICAgCisKK2RlZiBpbnNlcnRpb25fc29ydChiYXNlLCBleHRlbmRlZCwgZXJyb3JzKToKKyAgICAiIiIzLjIgSW5zZXJ0aW9uIHVuc29ydCBjb2RpbmciIiIKKyAgICBjaGFyID0gMHg4MAorICAgIHBvcyA9IC0xCisgICAgYmlhcyA9IDcyCisgICAgZXh0cG9zID0gMAorICAgIHdoaWxlIGV4dHBvcyA8IGxlbihleHRlbmRlZCk6CisgICAgICAgIG5ld3BvcywgZGVsdGEgPSBkZWNvZGVfZ2VuZXJhbGl6ZWRfbnVtYmVyKGV4dGVuZGVkLCBleHRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMsIGVycm9ycykKKyAgICAgICAgaWYgZGVsdGEgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhlcmUgd2FzIGFuIGVycm9yIGluIGRlY29kaW5nLiBXZSBjYW4ndCBjb250aW51ZSBiZWNhdXNlCisgICAgICAgICAgICAjIHN5bmNocm9uaXphdGlvbiBpcyBsb3N0LgorICAgICAgICAgICAgcmV0dXJuIGJhc2UKKyAgICAgICAgcG9zICs9IGRlbHRhKzEKKyAgICAgICAgY2hhciArPSBwb3MgLy8gKGxlbihiYXNlKSArIDEpCisgICAgICAgIGlmIGNoYXIgPiAweDEwRkZGRjoKKyAgICAgICAgICAgIGlmIGVycm9ycyA9PSAic3RyaWN0IjoKKyAgICAgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICgiSW52YWxpZCBjaGFyYWN0ZXIgVSsleCIgJSBjaGFyKQorICAgICAgICAgICAgY2hhciA9IG9yZCgnPycpCisgICAgICAgIHBvcyA9IHBvcyAlIChsZW4oYmFzZSkgKyAxKQorICAgICAgICBiYXNlID0gYmFzZVs6cG9zXSArIHVuaWNocihjaGFyKSArIGJhc2VbcG9zOl0KKyAgICAgICAgYmlhcyA9IGFkYXB0KGRlbHRhLCAoZXh0cG9zID09IDApLCBsZW4oYmFzZSkpCisgICAgICAgIGV4dHBvcyA9IG5ld3BvcworICAgIHJldHVybiBiYXNlCisKK2RlZiBwdW55Y29kZV9kZWNvZGUodGV4dCwgZXJyb3JzKToKKyAgICBwb3MgPSB0ZXh0LnJmaW5kKCItIikKKyAgICBpZiBwb3MgPT0gLTE6CisgICAgICAgIGJhc2UgPSAiIgorICAgICAgICBleHRlbmRlZCA9IHRleHQKKyAgICBlbHNlOgorICAgICAgICBiYXNlID0gdGV4dFs6cG9zXQorICAgICAgICBleHRlbmRlZCA9IHRleHRbcG9zKzE6XQorICAgIGJhc2UgPSB1bmljb2RlKGJhc2UsICJhc2NpaSIsIGVycm9ycykKKyAgICBleHRlbmRlZCA9IGV4dGVuZGVkLnVwcGVyKCkKKyAgICByZXR1cm4gaW5zZXJ0aW9uX3NvcnQoYmFzZSwgZXh0ZW5kZWQsIGVycm9ycykKKyAgICAgICAgCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorCisgICAgICAgIHJlcyA9IHB1bnljb2RlX2VuY29kZShpbnB1dCkKKyAgICAgICAgcmV0dXJuIHJlcywgbGVuKGlucHV0KQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisKKyAgICAgICAgaWYgZXJyb3JzIG5vdCBpbiAoJ3N0cmljdCcsICdyZXBsYWNlJywgJ2lnbm9yZScpOgorICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAiVW5zdXBwb3J0ZWQgZXJyb3IgaGFuZGxpbmcgIitlcnJvcnMKKyAgICAgICAgcmVzID0gcHVueWNvZGVfZGVjb2RlKGlucHV0LCBlcnJvcnMpCisgICAgICAgIHJldHVybiByZXMsIGxlbihpbnB1dCkKKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorCisgICAgcmV0dXJuIChDb2RlYygpLmVuY29kZSxDb2RlYygpLmRlY29kZSxTdHJlYW1SZWFkZXIsU3RyZWFtV3JpdGVyKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHBsaWIucHkgYi9MaWIvaHR0cGxpYi5weQppbmRleCBjYTIxNWE0Li5jYWY2Y2NkIDEwMDY0NAotLS0gYS9MaWIvaHR0cGxpYi5weQorKysgYi9MaWIvaHR0cGxpYi5weQpAQCAtNjU1LDExICs2NTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgbmlsLCBuZXRsb2MsIG5pbCwgbmlsLCBuaWwgPSB1cmxzcGxpdCh1cmwpCiAKICAgICAgICAgICAgICAgICBpZiBuZXRsb2M6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKCdIb3N0JywgbmV0bG9jKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsIG5ldGxvYy5lbmNvZGUoImlkbmEiKSkKICAgICAgICAgICAgICAgICBlbGlmIHNlbGYucG9ydCA9PSBIVFRQX1BPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKCdIb3N0Jywgc2VsZi5ob3N0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsIHNlbGYuaG9zdC5lbmNvZGUoImlkbmEiKSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoc2VsZi5ob3N0LmVuY29kZSgiaWRuYSIpLCBzZWxmLnBvcnQpKQogCiAgICAgICAgICAgICAjIG5vdGU6IHdlIGFyZSBhc3N1bWluZyB0aGF0IGNsaWVudHMgd2lsbCBub3QgYXR0ZW1wdCB0byBzZXQgdGhlc2UKICAgICAgICAgICAgICMgICAgICAgaGVhZGVycyBzaW5jZSAqdGhpcyogbGlicmFyeSBtdXN0IGRlYWwgd2l0aCB0aGUKZGlmZiAtLWdpdCBhL0xpYi9zdHJpbmdwcmVwLnB5IGIvTGliL3N0cmluZ3ByZXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1YjA5OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zdHJpbmdwcmVwLnB5CkBAIC0wLDAgKzEsMjczIEBACisjIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgbWtzdHJpbmdwcmVwLnB5LiBETyBOT1QgRURJVC4KKyIiIkxpYnJhcnkgdGhhdCBleHBvc2VzIHZhcmlvdXMgdGFibGVzIGZvdW5kIGluIHRoZSBTdHJpbmdQcmVwIFJGQyAzNDU0LgorCitUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRhYmxlczogc2V0cywgZm9yIHdoaWNoIGEgbWVtYmVyIHRlc3QgaXMgcHJvdmlkZWQsCithbmQgbWFwcGluZ3MsIGZvciB3aGljaCBhIG1hcHBpbmcgZnVuY3Rpb24gaXMgcHJvdmlkZWQuCisiIiIKKworaW1wb3J0IHVuaWNvZGVkYXRhLCBzZXRzCisKK2Fzc2VydCB1bmljb2RlZGF0YS51bmlkYXRhX3ZlcnNpb24gPT0gJzMuMi4wJworCitkZWYgaW5fdGFibGVfYTEoY29kZSk6CisgICAgaWYgdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgIT0gJ0NuJzogcmV0dXJuIEZhbHNlCisgICAgYyA9IG9yZChjb2RlKQorICAgIGlmIDB4RkREMCA8PSBjIDwgMHhGREYwOiByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gKGMgJiAweEZGRkYpIG5vdCBpbiAoMHhGRkZFLCAweEZGRkYpCisKKworYjFfc2V0ID0gc2V0cy5TZXQoWzE3MywgODQ3LCA2MTUwLCA2MTU1LCA2MTU2LCA2MTU3LCA4MjAzLCA4MjA0LCA4MjA1LCA4Mjg4LCA2NTI3OV0gKyByYW5nZSg2NTAyNCw2NTA0MCkpCitkZWYgaW5fdGFibGVfYjEoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBiMV9zZXQKKworCitiM19leGNlcHRpb25zID0geworMHhiNTp1J1x1MDNiYycsIDB4ZGY6dSdzcycsIDB4MTMwOnUnaVx1MDMwNycsIDB4MTQ5OnUnXHUwMmJjbicsCisweDE3Zjp1J3MnLCAweDFmMDp1J2pcdTAzMGMnLCAweDM0NTp1J1x1MDNiOScsIDB4MzdhOnUnIFx1MDNiOScsCisweDM5MDp1J1x1MDNiOVx1MDMwOFx1MDMwMScsIDB4M2IwOnUnXHUwM2M1XHUwMzA4XHUwMzAxJywgMHgzYzI6dSdcdTAzYzMnLCAweDNkMDp1J1x1MDNiMicsCisweDNkMTp1J1x1MDNiOCcsIDB4M2QyOnUnXHUwM2M1JywgMHgzZDM6dSdcdTAzY2QnLCAweDNkNDp1J1x1MDNjYicsCisweDNkNTp1J1x1MDNjNicsIDB4M2Q2OnUnXHUwM2MwJywgMHgzZjA6dSdcdTAzYmEnLCAweDNmMTp1J1x1MDNjMScsCisweDNmMjp1J1x1MDNjMycsIDB4M2Y1OnUnXHUwM2I1JywgMHg1ODc6dSdcdTA1NjVcdTA1ODInLCAweDFlOTY6dSdoXHUwMzMxJywKKzB4MWU5Nzp1J3RcdTAzMDgnLCAweDFlOTg6dSd3XHUwMzBhJywgMHgxZTk5OnUneVx1MDMwYScsIDB4MWU5YTp1J2FcdTAyYmUnLAorMHgxZTliOnUnXHUxZTYxJywgMHgxZjUwOnUnXHUwM2M1XHUwMzEzJywgMHgxZjUyOnUnXHUwM2M1XHUwMzEzXHUwMzAwJywgMHgxZjU0OnUnXHUwM2M1XHUwMzEzXHUwMzAxJywKKzB4MWY1Njp1J1x1MDNjNVx1MDMxM1x1MDM0MicsIDB4MWY4MDp1J1x1MWYwMFx1MDNiOScsIDB4MWY4MTp1J1x1MWYwMVx1MDNiOScsIDB4MWY4Mjp1J1x1MWYwMlx1MDNiOScsCisweDFmODM6dSdcdTFmMDNcdTAzYjknLCAweDFmODQ6dSdcdTFmMDRcdTAzYjknLCAweDFmODU6dSdcdTFmMDVcdTAzYjknLCAweDFmODY6dSdcdTFmMDZcdTAzYjknLAorMHgxZjg3OnUnXHUxZjA3XHUwM2I5JywgMHgxZjg4OnUnXHUxZjAwXHUwM2I5JywgMHgxZjg5OnUnXHUxZjAxXHUwM2I5JywgMHgxZjhhOnUnXHUxZjAyXHUwM2I5JywKKzB4MWY4Yjp1J1x1MWYwM1x1MDNiOScsIDB4MWY4Yzp1J1x1MWYwNFx1MDNiOScsIDB4MWY4ZDp1J1x1MWYwNVx1MDNiOScsIDB4MWY4ZTp1J1x1MWYwNlx1MDNiOScsCisweDFmOGY6dSdcdTFmMDdcdTAzYjknLCAweDFmOTA6dSdcdTFmMjBcdTAzYjknLCAweDFmOTE6dSdcdTFmMjFcdTAzYjknLCAweDFmOTI6dSdcdTFmMjJcdTAzYjknLAorMHgxZjkzOnUnXHUxZjIzXHUwM2I5JywgMHgxZjk0OnUnXHUxZjI0XHUwM2I5JywgMHgxZjk1OnUnXHUxZjI1XHUwM2I5JywgMHgxZjk2OnUnXHUxZjI2XHUwM2I5JywKKzB4MWY5Nzp1J1x1MWYyN1x1MDNiOScsIDB4MWY5ODp1J1x1MWYyMFx1MDNiOScsIDB4MWY5OTp1J1x1MWYyMVx1MDNiOScsIDB4MWY5YTp1J1x1MWYyMlx1MDNiOScsCisweDFmOWI6dSdcdTFmMjNcdTAzYjknLCAweDFmOWM6dSdcdTFmMjRcdTAzYjknLCAweDFmOWQ6dSdcdTFmMjVcdTAzYjknLCAweDFmOWU6dSdcdTFmMjZcdTAzYjknLAorMHgxZjlmOnUnXHUxZjI3XHUwM2I5JywgMHgxZmEwOnUnXHUxZjYwXHUwM2I5JywgMHgxZmExOnUnXHUxZjYxXHUwM2I5JywgMHgxZmEyOnUnXHUxZjYyXHUwM2I5JywKKzB4MWZhMzp1J1x1MWY2M1x1MDNiOScsIDB4MWZhNDp1J1x1MWY2NFx1MDNiOScsIDB4MWZhNTp1J1x1MWY2NVx1MDNiOScsIDB4MWZhNjp1J1x1MWY2Nlx1MDNiOScsCisweDFmYTc6dSdcdTFmNjdcdTAzYjknLCAweDFmYTg6dSdcdTFmNjBcdTAzYjknLCAweDFmYTk6dSdcdTFmNjFcdTAzYjknLCAweDFmYWE6dSdcdTFmNjJcdTAzYjknLAorMHgxZmFiOnUnXHUxZjYzXHUwM2I5JywgMHgxZmFjOnUnXHUxZjY0XHUwM2I5JywgMHgxZmFkOnUnXHUxZjY1XHUwM2I5JywgMHgxZmFlOnUnXHUxZjY2XHUwM2I5JywKKzB4MWZhZjp1J1x1MWY2N1x1MDNiOScsIDB4MWZiMjp1J1x1MWY3MFx1MDNiOScsIDB4MWZiMzp1J1x1MDNiMVx1MDNiOScsIDB4MWZiNDp1J1x1MDNhY1x1MDNiOScsCisweDFmYjY6dSdcdTAzYjFcdTAzNDInLCAweDFmYjc6dSdcdTAzYjFcdTAzNDJcdTAzYjknLCAweDFmYmM6dSdcdTAzYjFcdTAzYjknLCAweDFmYmU6dSdcdTAzYjknLAorMHgxZmMyOnUnXHUxZjc0XHUwM2I5JywgMHgxZmMzOnUnXHUwM2I3XHUwM2I5JywgMHgxZmM0OnUnXHUwM2FlXHUwM2I5JywgMHgxZmM2OnUnXHUwM2I3XHUwMzQyJywKKzB4MWZjNzp1J1x1MDNiN1x1MDM0Mlx1MDNiOScsIDB4MWZjYzp1J1x1MDNiN1x1MDNiOScsIDB4MWZkMjp1J1x1MDNiOVx1MDMwOFx1MDMwMCcsIDB4MWZkMzp1J1x1MDNiOVx1MDMwOFx1MDMwMScsCisweDFmZDY6dSdcdTAzYjlcdTAzNDInLCAweDFmZDc6dSdcdTAzYjlcdTAzMDhcdTAzNDInLCAweDFmZTI6dSdcdTAzYzVcdTAzMDhcdTAzMDAnLCAweDFmZTM6dSdcdTAzYzVcdTAzMDhcdTAzMDEnLAorMHgxZmU0OnUnXHUwM2MxXHUwMzEzJywgMHgxZmU2OnUnXHUwM2M1XHUwMzQyJywgMHgxZmU3OnUnXHUwM2M1XHUwMzA4XHUwMzQyJywgMHgxZmYyOnUnXHUxZjdjXHUwM2I5JywKKzB4MWZmMzp1J1x1MDNjOVx1MDNiOScsIDB4MWZmNDp1J1x1MDNjZVx1MDNiOScsIDB4MWZmNjp1J1x1MDNjOVx1MDM0MicsIDB4MWZmNzp1J1x1MDNjOVx1MDM0Mlx1MDNiOScsCisweDFmZmM6dSdcdTAzYzlcdTAzYjknLCAweDIwYTg6dSdycycsIDB4MjEwMjp1J2MnLCAweDIxMDM6dSdceGIwYycsCisweDIxMDc6dSdcdTAyNWInLCAweDIxMDk6dSdceGIwZicsIDB4MjEwYjp1J2gnLCAweDIxMGM6dSdoJywKKzB4MjEwZDp1J2gnLCAweDIxMTA6dSdpJywgMHgyMTExOnUnaScsIDB4MjExMjp1J2wnLAorMHgyMTE1OnUnbicsIDB4MjExNjp1J25vJywgMHgyMTE5OnUncCcsIDB4MjExYTp1J3EnLAorMHgyMTFiOnUncicsIDB4MjExYzp1J3InLCAweDIxMWQ6dSdyJywgMHgyMTIwOnUnc20nLAorMHgyMTIxOnUndGVsJywgMHgyMTIyOnUndG0nLCAweDIxMjQ6dSd6JywgMHgyMTI4OnUneicsCisweDIxMmM6dSdiJywgMHgyMTJkOnUnYycsIDB4MjEzMDp1J2UnLCAweDIxMzE6dSdmJywKKzB4MjEzMzp1J20nLCAweDIxM2U6dSdcdTAzYjMnLCAweDIxM2Y6dSdcdTAzYzAnLCAweDIxNDU6dSdkJywKKzB4MzM3MTp1J2hwYScsIDB4MzM3Mzp1J2F1JywgMHgzMzc1OnUnb3YnLCAweDMzODA6dSdwYScsCisweDMzODE6dSduYScsIDB4MzM4Mjp1J1x1MDNiY2EnLCAweDMzODM6dSdtYScsIDB4MzM4NDp1J2thJywKKzB4MzM4NTp1J2tiJywgMHgzMzg2OnUnbWInLCAweDMzODc6dSdnYicsIDB4MzM4YTp1J3BmJywKKzB4MzM4Yjp1J25mJywgMHgzMzhjOnUnXHUwM2JjZicsIDB4MzM5MDp1J2h6JywgMHgzMzkxOnUna2h6JywKKzB4MzM5Mjp1J21oeicsIDB4MzM5Mzp1J2doeicsIDB4MzM5NDp1J3RoeicsIDB4MzNhOTp1J3BhJywKKzB4MzNhYTp1J2twYScsIDB4MzNhYjp1J21wYScsIDB4MzNhYzp1J2dwYScsIDB4MzNiNDp1J3B2JywKKzB4MzNiNTp1J252JywgMHgzM2I2OnUnXHUwM2JjdicsIDB4MzNiNzp1J212JywgMHgzM2I4OnUna3YnLAorMHgzM2I5OnUnbXYnLCAweDMzYmE6dSdwdycsIDB4MzNiYjp1J253JywgMHgzM2JjOnUnXHUwM2JjdycsCisweDMzYmQ6dSdtdycsIDB4MzNiZTp1J2t3JywgMHgzM2JmOnUnbXcnLCAweDMzYzA6dSdrXHUwM2M5JywKKzB4MzNjMTp1J21cdTAzYzknLCAweDMzYzM6dSdicScsIDB4MzNjNjp1J2NcdTIyMTVrZycsIDB4MzNjNzp1J2NvLicsCisweDMzYzg6dSdkYicsIDB4MzNjOTp1J2d5JywgMHgzM2NiOnUnaHAnLCAweDMzY2Q6dSdraycsCisweDMzY2U6dSdrbScsIDB4MzNkNzp1J3BoJywgMHgzM2Q5OnUncHBtJywgMHgzM2RhOnUncHInLAorMHgzM2RjOnUnc3YnLCAweDMzZGQ6dSd3YicsIDB4ZmIwMDp1J2ZmJywgMHhmYjAxOnUnZmknLAorMHhmYjAyOnUnZmwnLCAweGZiMDM6dSdmZmknLCAweGZiMDQ6dSdmZmwnLCAweGZiMDU6dSdzdCcsCisweGZiMDY6dSdzdCcsIDB4ZmIxMzp1J1x1MDU3NFx1MDU3NicsIDB4ZmIxNDp1J1x1MDU3NFx1MDU2NScsIDB4ZmIxNTp1J1x1MDU3NFx1MDU2YicsCisweGZiMTY6dSdcdTA1N2VcdTA1NzYnLCAweGZiMTc6dSdcdTA1NzRcdTA1NmQnLCAweDFkNDAwOnUnYScsIDB4MWQ0MDE6dSdiJywKKzB4MWQ0MDI6dSdjJywgMHgxZDQwMzp1J2QnLCAweDFkNDA0OnUnZScsIDB4MWQ0MDU6dSdmJywKKzB4MWQ0MDY6dSdnJywgMHgxZDQwNzp1J2gnLCAweDFkNDA4OnUnaScsIDB4MWQ0MDk6dSdqJywKKzB4MWQ0MGE6dSdrJywgMHgxZDQwYjp1J2wnLCAweDFkNDBjOnUnbScsIDB4MWQ0MGQ6dSduJywKKzB4MWQ0MGU6dSdvJywgMHgxZDQwZjp1J3AnLCAweDFkNDEwOnUncScsIDB4MWQ0MTE6dSdyJywKKzB4MWQ0MTI6dSdzJywgMHgxZDQxMzp1J3QnLCAweDFkNDE0OnUndScsIDB4MWQ0MTU6dSd2JywKKzB4MWQ0MTY6dSd3JywgMHgxZDQxNzp1J3gnLCAweDFkNDE4OnUneScsIDB4MWQ0MTk6dSd6JywKKzB4MWQ0MzQ6dSdhJywgMHgxZDQzNTp1J2InLCAweDFkNDM2OnUnYycsIDB4MWQ0Mzc6dSdkJywKKzB4MWQ0Mzg6dSdlJywgMHgxZDQzOTp1J2YnLCAweDFkNDNhOnUnZycsIDB4MWQ0M2I6dSdoJywKKzB4MWQ0M2M6dSdpJywgMHgxZDQzZDp1J2onLCAweDFkNDNlOnUnaycsIDB4MWQ0M2Y6dSdsJywKKzB4MWQ0NDA6dSdtJywgMHgxZDQ0MTp1J24nLCAweDFkNDQyOnUnbycsIDB4MWQ0NDM6dSdwJywKKzB4MWQ0NDQ6dSdxJywgMHgxZDQ0NTp1J3InLCAweDFkNDQ2OnUncycsIDB4MWQ0NDc6dSd0JywKKzB4MWQ0NDg6dSd1JywgMHgxZDQ0OTp1J3YnLCAweDFkNDRhOnUndycsIDB4MWQ0NGI6dSd4JywKKzB4MWQ0NGM6dSd5JywgMHgxZDQ0ZDp1J3onLCAweDFkNDY4OnUnYScsIDB4MWQ0Njk6dSdiJywKKzB4MWQ0NmE6dSdjJywgMHgxZDQ2Yjp1J2QnLCAweDFkNDZjOnUnZScsIDB4MWQ0NmQ6dSdmJywKKzB4MWQ0NmU6dSdnJywgMHgxZDQ2Zjp1J2gnLCAweDFkNDcwOnUnaScsIDB4MWQ0NzE6dSdqJywKKzB4MWQ0NzI6dSdrJywgMHgxZDQ3Mzp1J2wnLCAweDFkNDc0OnUnbScsIDB4MWQ0NzU6dSduJywKKzB4MWQ0NzY6dSdvJywgMHgxZDQ3Nzp1J3AnLCAweDFkNDc4OnUncScsIDB4MWQ0Nzk6dSdyJywKKzB4MWQ0N2E6dSdzJywgMHgxZDQ3Yjp1J3QnLCAweDFkNDdjOnUndScsIDB4MWQ0N2Q6dSd2JywKKzB4MWQ0N2U6dSd3JywgMHgxZDQ3Zjp1J3gnLCAweDFkNDgwOnUneScsIDB4MWQ0ODE6dSd6JywKKzB4MWQ0OWM6dSdhJywgMHgxZDQ5ZTp1J2MnLCAweDFkNDlmOnUnZCcsIDB4MWQ0YTI6dSdnJywKKzB4MWQ0YTU6dSdqJywgMHgxZDRhNjp1J2snLCAweDFkNGE5OnUnbicsIDB4MWQ0YWE6dSdvJywKKzB4MWQ0YWI6dSdwJywgMHgxZDRhYzp1J3EnLCAweDFkNGFlOnUncycsIDB4MWQ0YWY6dSd0JywKKzB4MWQ0YjA6dSd1JywgMHgxZDRiMTp1J3YnLCAweDFkNGIyOnUndycsIDB4MWQ0YjM6dSd4JywKKzB4MWQ0YjQ6dSd5JywgMHgxZDRiNTp1J3onLCAweDFkNGQwOnUnYScsIDB4MWQ0ZDE6dSdiJywKKzB4MWQ0ZDI6dSdjJywgMHgxZDRkMzp1J2QnLCAweDFkNGQ0OnUnZScsIDB4MWQ0ZDU6dSdmJywKKzB4MWQ0ZDY6dSdnJywgMHgxZDRkNzp1J2gnLCAweDFkNGQ4OnUnaScsIDB4MWQ0ZDk6dSdqJywKKzB4MWQ0ZGE6dSdrJywgMHgxZDRkYjp1J2wnLCAweDFkNGRjOnUnbScsIDB4MWQ0ZGQ6dSduJywKKzB4MWQ0ZGU6dSdvJywgMHgxZDRkZjp1J3AnLCAweDFkNGUwOnUncScsIDB4MWQ0ZTE6dSdyJywKKzB4MWQ0ZTI6dSdzJywgMHgxZDRlMzp1J3QnLCAweDFkNGU0OnUndScsIDB4MWQ0ZTU6dSd2JywKKzB4MWQ0ZTY6dSd3JywgMHgxZDRlNzp1J3gnLCAweDFkNGU4OnUneScsIDB4MWQ0ZTk6dSd6JywKKzB4MWQ1MDQ6dSdhJywgMHgxZDUwNTp1J2InLCAweDFkNTA3OnUnZCcsIDB4MWQ1MDg6dSdlJywKKzB4MWQ1MDk6dSdmJywgMHgxZDUwYTp1J2cnLCAweDFkNTBkOnUnaicsIDB4MWQ1MGU6dSdrJywKKzB4MWQ1MGY6dSdsJywgMHgxZDUxMDp1J20nLCAweDFkNTExOnUnbicsIDB4MWQ1MTI6dSdvJywKKzB4MWQ1MTM6dSdwJywgMHgxZDUxNDp1J3EnLCAweDFkNTE2OnUncycsIDB4MWQ1MTc6dSd0JywKKzB4MWQ1MTg6dSd1JywgMHgxZDUxOTp1J3YnLCAweDFkNTFhOnUndycsIDB4MWQ1MWI6dSd4JywKKzB4MWQ1MWM6dSd5JywgMHgxZDUzODp1J2EnLCAweDFkNTM5OnUnYicsIDB4MWQ1M2I6dSdkJywKKzB4MWQ1M2M6dSdlJywgMHgxZDUzZDp1J2YnLCAweDFkNTNlOnUnZycsIDB4MWQ1NDA6dSdpJywKKzB4MWQ1NDE6dSdqJywgMHgxZDU0Mjp1J2snLCAweDFkNTQzOnUnbCcsIDB4MWQ1NDQ6dSdtJywKKzB4MWQ1NDY6dSdvJywgMHgxZDU0YTp1J3MnLCAweDFkNTRiOnUndCcsIDB4MWQ1NGM6dSd1JywKKzB4MWQ1NGQ6dSd2JywgMHgxZDU0ZTp1J3cnLCAweDFkNTRmOnUneCcsIDB4MWQ1NTA6dSd5JywKKzB4MWQ1NmM6dSdhJywgMHgxZDU2ZDp1J2InLCAweDFkNTZlOnUnYycsIDB4MWQ1NmY6dSdkJywKKzB4MWQ1NzA6dSdlJywgMHgxZDU3MTp1J2YnLCAweDFkNTcyOnUnZycsIDB4MWQ1NzM6dSdoJywKKzB4MWQ1NzQ6dSdpJywgMHgxZDU3NTp1J2onLCAweDFkNTc2OnUnaycsIDB4MWQ1Nzc6dSdsJywKKzB4MWQ1Nzg6dSdtJywgMHgxZDU3OTp1J24nLCAweDFkNTdhOnUnbycsIDB4MWQ1N2I6dSdwJywKKzB4MWQ1N2M6dSdxJywgMHgxZDU3ZDp1J3InLCAweDFkNTdlOnUncycsIDB4MWQ1N2Y6dSd0JywKKzB4MWQ1ODA6dSd1JywgMHgxZDU4MTp1J3YnLCAweDFkNTgyOnUndycsIDB4MWQ1ODM6dSd4JywKKzB4MWQ1ODQ6dSd5JywgMHgxZDU4NTp1J3onLCAweDFkNWEwOnUnYScsIDB4MWQ1YTE6dSdiJywKKzB4MWQ1YTI6dSdjJywgMHgxZDVhMzp1J2QnLCAweDFkNWE0OnUnZScsIDB4MWQ1YTU6dSdmJywKKzB4MWQ1YTY6dSdnJywgMHgxZDVhNzp1J2gnLCAweDFkNWE4OnUnaScsIDB4MWQ1YTk6dSdqJywKKzB4MWQ1YWE6dSdrJywgMHgxZDVhYjp1J2wnLCAweDFkNWFjOnUnbScsIDB4MWQ1YWQ6dSduJywKKzB4MWQ1YWU6dSdvJywgMHgxZDVhZjp1J3AnLCAweDFkNWIwOnUncScsIDB4MWQ1YjE6dSdyJywKKzB4MWQ1YjI6dSdzJywgMHgxZDViMzp1J3QnLCAweDFkNWI0OnUndScsIDB4MWQ1YjU6dSd2JywKKzB4MWQ1YjY6dSd3JywgMHgxZDViNzp1J3gnLCAweDFkNWI4OnUneScsIDB4MWQ1Yjk6dSd6JywKKzB4MWQ1ZDQ6dSdhJywgMHgxZDVkNTp1J2InLCAweDFkNWQ2OnUnYycsIDB4MWQ1ZDc6dSdkJywKKzB4MWQ1ZDg6dSdlJywgMHgxZDVkOTp1J2YnLCAweDFkNWRhOnUnZycsIDB4MWQ1ZGI6dSdoJywKKzB4MWQ1ZGM6dSdpJywgMHgxZDVkZDp1J2onLCAweDFkNWRlOnUnaycsIDB4MWQ1ZGY6dSdsJywKKzB4MWQ1ZTA6dSdtJywgMHgxZDVlMTp1J24nLCAweDFkNWUyOnUnbycsIDB4MWQ1ZTM6dSdwJywKKzB4MWQ1ZTQ6dSdxJywgMHgxZDVlNTp1J3InLCAweDFkNWU2OnUncycsIDB4MWQ1ZTc6dSd0JywKKzB4MWQ1ZTg6dSd1JywgMHgxZDVlOTp1J3YnLCAweDFkNWVhOnUndycsIDB4MWQ1ZWI6dSd4JywKKzB4MWQ1ZWM6dSd5JywgMHgxZDVlZDp1J3onLCAweDFkNjA4OnUnYScsIDB4MWQ2MDk6dSdiJywKKzB4MWQ2MGE6dSdjJywgMHgxZDYwYjp1J2QnLCAweDFkNjBjOnUnZScsIDB4MWQ2MGQ6dSdmJywKKzB4MWQ2MGU6dSdnJywgMHgxZDYwZjp1J2gnLCAweDFkNjEwOnUnaScsIDB4MWQ2MTE6dSdqJywKKzB4MWQ2MTI6dSdrJywgMHgxZDYxMzp1J2wnLCAweDFkNjE0OnUnbScsIDB4MWQ2MTU6dSduJywKKzB4MWQ2MTY6dSdvJywgMHgxZDYxNzp1J3AnLCAweDFkNjE4OnUncScsIDB4MWQ2MTk6dSdyJywKKzB4MWQ2MWE6dSdzJywgMHgxZDYxYjp1J3QnLCAweDFkNjFjOnUndScsIDB4MWQ2MWQ6dSd2JywKKzB4MWQ2MWU6dSd3JywgMHgxZDYxZjp1J3gnLCAweDFkNjIwOnUneScsIDB4MWQ2MjE6dSd6JywKKzB4MWQ2M2M6dSdhJywgMHgxZDYzZDp1J2InLCAweDFkNjNlOnUnYycsIDB4MWQ2M2Y6dSdkJywKKzB4MWQ2NDA6dSdlJywgMHgxZDY0MTp1J2YnLCAweDFkNjQyOnUnZycsIDB4MWQ2NDM6dSdoJywKKzB4MWQ2NDQ6dSdpJywgMHgxZDY0NTp1J2onLCAweDFkNjQ2OnUnaycsIDB4MWQ2NDc6dSdsJywKKzB4MWQ2NDg6dSdtJywgMHgxZDY0OTp1J24nLCAweDFkNjRhOnUnbycsIDB4MWQ2NGI6dSdwJywKKzB4MWQ2NGM6dSdxJywgMHgxZDY0ZDp1J3InLCAweDFkNjRlOnUncycsIDB4MWQ2NGY6dSd0JywKKzB4MWQ2NTA6dSd1JywgMHgxZDY1MTp1J3YnLCAweDFkNjUyOnUndycsIDB4MWQ2NTM6dSd4JywKKzB4MWQ2NTQ6dSd5JywgMHgxZDY1NTp1J3onLCAweDFkNjcwOnUnYScsIDB4MWQ2NzE6dSdiJywKKzB4MWQ2NzI6dSdjJywgMHgxZDY3Mzp1J2QnLCAweDFkNjc0OnUnZScsIDB4MWQ2NzU6dSdmJywKKzB4MWQ2NzY6dSdnJywgMHgxZDY3Nzp1J2gnLCAweDFkNjc4OnUnaScsIDB4MWQ2Nzk6dSdqJywKKzB4MWQ2N2E6dSdrJywgMHgxZDY3Yjp1J2wnLCAweDFkNjdjOnUnbScsIDB4MWQ2N2Q6dSduJywKKzB4MWQ2N2U6dSdvJywgMHgxZDY3Zjp1J3AnLCAweDFkNjgwOnUncScsIDB4MWQ2ODE6dSdyJywKKzB4MWQ2ODI6dSdzJywgMHgxZDY4Mzp1J3QnLCAweDFkNjg0OnUndScsIDB4MWQ2ODU6dSd2JywKKzB4MWQ2ODY6dSd3JywgMHgxZDY4Nzp1J3gnLCAweDFkNjg4OnUneScsIDB4MWQ2ODk6dSd6JywKKzB4MWQ2YTg6dSdcdTAzYjEnLCAweDFkNmE5OnUnXHUwM2IyJywgMHgxZDZhYTp1J1x1MDNiMycsIDB4MWQ2YWI6dSdcdTAzYjQnLAorMHgxZDZhYzp1J1x1MDNiNScsIDB4MWQ2YWQ6dSdcdTAzYjYnLCAweDFkNmFlOnUnXHUwM2I3JywgMHgxZDZhZjp1J1x1MDNiOCcsCisweDFkNmIwOnUnXHUwM2I5JywgMHgxZDZiMTp1J1x1MDNiYScsIDB4MWQ2YjI6dSdcdTAzYmInLCAweDFkNmIzOnUnXHUwM2JjJywKKzB4MWQ2YjQ6dSdcdTAzYmQnLCAweDFkNmI1OnUnXHUwM2JlJywgMHgxZDZiNjp1J1x1MDNiZicsIDB4MWQ2Yjc6dSdcdTAzYzAnLAorMHgxZDZiODp1J1x1MDNjMScsIDB4MWQ2Yjk6dSdcdTAzYjgnLCAweDFkNmJhOnUnXHUwM2MzJywgMHgxZDZiYjp1J1x1MDNjNCcsCisweDFkNmJjOnUnXHUwM2M1JywgMHgxZDZiZDp1J1x1MDNjNicsIDB4MWQ2YmU6dSdcdTAzYzcnLCAweDFkNmJmOnUnXHUwM2M4JywKKzB4MWQ2YzA6dSdcdTAzYzknLCAweDFkNmQzOnUnXHUwM2MzJywgMHgxZDZlMjp1J1x1MDNiMScsIDB4MWQ2ZTM6dSdcdTAzYjInLAorMHgxZDZlNDp1J1x1MDNiMycsIDB4MWQ2ZTU6dSdcdTAzYjQnLCAweDFkNmU2OnUnXHUwM2I1JywgMHgxZDZlNzp1J1x1MDNiNicsCisweDFkNmU4OnUnXHUwM2I3JywgMHgxZDZlOTp1J1x1MDNiOCcsIDB4MWQ2ZWE6dSdcdTAzYjknLCAweDFkNmViOnUnXHUwM2JhJywKKzB4MWQ2ZWM6dSdcdTAzYmInLCAweDFkNmVkOnUnXHUwM2JjJywgMHgxZDZlZTp1J1x1MDNiZCcsIDB4MWQ2ZWY6dSdcdTAzYmUnLAorMHgxZDZmMDp1J1x1MDNiZicsIDB4MWQ2ZjE6dSdcdTAzYzAnLCAweDFkNmYyOnUnXHUwM2MxJywgMHgxZDZmMzp1J1x1MDNiOCcsCisweDFkNmY0OnUnXHUwM2MzJywgMHgxZDZmNTp1J1x1MDNjNCcsIDB4MWQ2ZjY6dSdcdTAzYzUnLCAweDFkNmY3OnUnXHUwM2M2JywKKzB4MWQ2Zjg6dSdcdTAzYzcnLCAweDFkNmY5OnUnXHUwM2M4JywgMHgxZDZmYTp1J1x1MDNjOScsIDB4MWQ3MGQ6dSdcdTAzYzMnLAorMHgxZDcxYzp1J1x1MDNiMScsIDB4MWQ3MWQ6dSdcdTAzYjInLCAweDFkNzFlOnUnXHUwM2IzJywgMHgxZDcxZjp1J1x1MDNiNCcsCisweDFkNzIwOnUnXHUwM2I1JywgMHgxZDcyMTp1J1x1MDNiNicsIDB4MWQ3MjI6dSdcdTAzYjcnLCAweDFkNzIzOnUnXHUwM2I4JywKKzB4MWQ3MjQ6dSdcdTAzYjknLCAweDFkNzI1OnUnXHUwM2JhJywgMHgxZDcyNjp1J1x1MDNiYicsIDB4MWQ3Mjc6dSdcdTAzYmMnLAorMHgxZDcyODp1J1x1MDNiZCcsIDB4MWQ3Mjk6dSdcdTAzYmUnLCAweDFkNzJhOnUnXHUwM2JmJywgMHgxZDcyYjp1J1x1MDNjMCcsCisweDFkNzJjOnUnXHUwM2MxJywgMHgxZDcyZDp1J1x1MDNiOCcsIDB4MWQ3MmU6dSdcdTAzYzMnLCAweDFkNzJmOnUnXHUwM2M0JywKKzB4MWQ3MzA6dSdcdTAzYzUnLCAweDFkNzMxOnUnXHUwM2M2JywgMHgxZDczMjp1J1x1MDNjNycsIDB4MWQ3MzM6dSdcdTAzYzgnLAorMHgxZDczNDp1J1x1MDNjOScsIDB4MWQ3NDc6dSdcdTAzYzMnLCAweDFkNzU2OnUnXHUwM2IxJywgMHgxZDc1Nzp1J1x1MDNiMicsCisweDFkNzU4OnUnXHUwM2IzJywgMHgxZDc1OTp1J1x1MDNiNCcsIDB4MWQ3NWE6dSdcdTAzYjUnLCAweDFkNzViOnUnXHUwM2I2JywKKzB4MWQ3NWM6dSdcdTAzYjcnLCAweDFkNzVkOnUnXHUwM2I4JywgMHgxZDc1ZTp1J1x1MDNiOScsIDB4MWQ3NWY6dSdcdTAzYmEnLAorMHgxZDc2MDp1J1x1MDNiYicsIDB4MWQ3NjE6dSdcdTAzYmMnLCAweDFkNzYyOnUnXHUwM2JkJywgMHgxZDc2Mzp1J1x1MDNiZScsCisweDFkNzY0OnUnXHUwM2JmJywgMHgxZDc2NTp1J1x1MDNjMCcsIDB4MWQ3NjY6dSdcdTAzYzEnLCAweDFkNzY3OnUnXHUwM2I4JywKKzB4MWQ3Njg6dSdcdTAzYzMnLCAweDFkNzY5OnUnXHUwM2M0JywgMHgxZDc2YTp1J1x1MDNjNScsIDB4MWQ3NmI6dSdcdTAzYzYnLAorMHgxZDc2Yzp1J1x1MDNjNycsIDB4MWQ3NmQ6dSdcdTAzYzgnLCAweDFkNzZlOnUnXHUwM2M5JywgMHgxZDc4MTp1J1x1MDNjMycsCisweDFkNzkwOnUnXHUwM2IxJywgMHgxZDc5MTp1J1x1MDNiMicsIDB4MWQ3OTI6dSdcdTAzYjMnLCAweDFkNzkzOnUnXHUwM2I0JywKKzB4MWQ3OTQ6dSdcdTAzYjUnLCAweDFkNzk1OnUnXHUwM2I2JywgMHgxZDc5Njp1J1x1MDNiNycsIDB4MWQ3OTc6dSdcdTAzYjgnLAorMHgxZDc5ODp1J1x1MDNiOScsIDB4MWQ3OTk6dSdcdTAzYmEnLCAweDFkNzlhOnUnXHUwM2JiJywgMHgxZDc5Yjp1J1x1MDNiYycsCisweDFkNzljOnUnXHUwM2JkJywgMHgxZDc5ZDp1J1x1MDNiZScsIDB4MWQ3OWU6dSdcdTAzYmYnLCAweDFkNzlmOnUnXHUwM2MwJywKKzB4MWQ3YTA6dSdcdTAzYzEnLCAweDFkN2ExOnUnXHUwM2I4JywgMHgxZDdhMjp1J1x1MDNjMycsIDB4MWQ3YTM6dSdcdTAzYzQnLAorMHgxZDdhNDp1J1x1MDNjNScsIDB4MWQ3YTU6dSdcdTAzYzYnLCAweDFkN2E2OnUnXHUwM2M3JywgMHgxZDdhNzp1J1x1MDNjOCcsCisweDFkN2E4OnUnXHUwM2M5JywgMHgxZDdiYjp1J1x1MDNjMycsIH0KKworZGVmIG1hcF90YWJsZV9iMyhjb2RlKToKKyAgICByID0gYjNfZXhjZXB0aW9ucy5nZXQob3JkKGNvZGUpKQorICAgIGlmIHIgaXMgbm90IE5vbmU6IHJldHVybiByCisgICAgcmV0dXJuIGNvZGUubG93ZXIoKQorCisKK2RlZiBtYXBfdGFibGVfYjIoYSk6CisgICAgYWwgPSBtYXBfdGFibGVfYjMoYSkKKyAgICBiID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORktDIiwgYWwpCisgICAgYmwgPSB1IiIuam9pbihbbWFwX3RhYmxlX2IzKGNoKSBmb3IgY2ggaW4gYl0pCisgICAgYyA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZLQyIsIGJsKQorICAgIGlmIGIgIT0gYzoKKyAgICAgICAgcmV0dXJuIGMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYWwKKworCitkZWYgaW5fdGFibGVfYzExKGNvZGUpOgorICAgIHJldHVybiBjb2RlID09IHUiICIKKworCitkZWYgaW5fdGFibGVfYzEyKGNvZGUpOgorICAgIHJldHVybiB1bmljb2RlZGF0YS5jYXRlZ29yeShjb2RlKSA9PSAiWnMiIGFuZCBjb2RlICE9IHUiICIKKworZGVmIGluX3RhYmxlX2MxMV9jMTIoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJacyIKKworCitkZWYgaW5fdGFibGVfYzIxKGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgPCAxMjggYW5kIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJDYyIKKworYzIyX3NwZWNpYWxzID0gc2V0cy5TZXQoWzE3NTcsIDE4MDcsIDYxNTgsIDgyMDQsIDgyMDUsIDgyMzIsIDgyMzMsIDY1Mjc5XSArIHJhbmdlKDgyODgsODI5MikgKyByYW5nZSg4Mjk4LDgzMDQpICsgcmFuZ2UoNjU1MjksNjU1MzMpICsgcmFuZ2UoMTE5MTU1LDExOTE2MykpCitkZWYgaW5fdGFibGVfYzIyKGNvZGUpOgorICAgIGMgPSBvcmQoY29kZSkKKyAgICBpZiBjIDwgMTI4OiByZXR1cm4gRmFsc2UKKyAgICBpZiB1bmljb2RlZGF0YS5jYXRlZ29yeShjb2RlKSA9PSAiQ2MiOiByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBjIGluIGMyMl9zcGVjaWFscworCitkZWYgaW5fdGFibGVfYzIxX2MyMihjb2RlKToKKyAgICByZXR1cm4gdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgPT0gIkNjIiBvciBcCisgICAgICAgICAgIG9yZChjb2RlKSBpbiBjMjJfc3BlY2lhbHMKKworCitkZWYgaW5fdGFibGVfYzMoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJDbyIKKworCitkZWYgaW5fdGFibGVfYzQoY29kZSk6CisgICAgYyA9IG9yZChjb2RlKQorICAgIGlmIGMgPCAweEZERDA6IHJldHVybiBGYWxzZQorICAgIGlmIGMgPCAweEZERjA6IHJldHVybiBUcnVlCisgICAgcmV0dXJuIChvcmQoY29kZSkgJiAweEZGRkYpIGluICgweEZGRkUsIDB4RkZGRikKKworCitkZWYgaW5fdGFibGVfYzUoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJDcyIKKworCitjNl9zZXQgPSBzZXRzLlNldChyYW5nZSg2NTUyOSw2NTUzNCkpCitkZWYgaW5fdGFibGVfYzYoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjNl9zZXQKKworCitjN19zZXQgPSBzZXRzLlNldChyYW5nZSgxMjI3MiwxMjI4NCkpCitkZWYgaW5fdGFibGVfYzcoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjN19zZXQKKworCitjOF9zZXQgPSBzZXRzLlNldChbODMyLCA4MzMsIDgyMDYsIDgyMDddICsgcmFuZ2UoODIzNCw4MjM5KSArIHJhbmdlKDgyOTgsODMwNCkpCitkZWYgaW5fdGFibGVfYzgoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjOF9zZXQKKworCitjOV9zZXQgPSBzZXRzLlNldChbOTE3NTA1XSArIHJhbmdlKDkxNzUzNiw5MTc2MzIpKQorZGVmIGluX3RhYmxlX2M5KGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgaW4gYzlfc2V0CisKKworZGVmIGluX3RhYmxlX2QxKGNvZGUpOgorICAgIHJldHVybiB1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKGNvZGUpIGluICgiUiIsIkFMIikKKworCitkZWYgaW5fdGFibGVfZDIoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmJpZGlyZWN0aW9uYWwoY29kZSkgPT0gIkwiCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKaW5kZXggOWE0ZjM1Zi4uNzY5YTQwZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTM2LDExICszNiwzMDcgQEAKICAgICAgICAgIyBQeXRob24gdXNlZCB0byBjcmFzaCBvbiB0aGlzIGF0IGV4aXQgYmVjYXVzZSBvZiBhIHJlZmNvdW50CiAgICAgICAgICMgYnVnIGluIF9jb2RlY3Ntb2R1bGUuYwogCisjIEZyb20gUkZDIDM0OTIKK3B1bnljb2RlX3Rlc3RjYXNlcyA9IFsKKyAgICAjIEEgQXJhYmljIChFZ3lwdGlhbik6CisgICAgKHUiXHUwNjQ0XHUwNjRBXHUwNjQ3XHUwNjQ1XHUwNjI3XHUwNjI4XHUwNjJBXHUwNjQzXHUwNjQ0IgorICAgICB1Ilx1MDY0NVx1MDY0OFx1MDYzNFx1MDYzOVx1MDYzMVx1MDYyOFx1MDY0QVx1MDYxRiIsCisgICAgICJlZ2JwZGFqNmJ1NGJ4ZmdlaGZ2d3huIiksCisgICAgIyBCIENoaW5lc2UgKHNpbXBsaWZpZWQpOgorICAgICh1Ilx1NEVENlx1NEVFQ1x1NEUzQVx1NEVDMFx1NEU0OFx1NEUwRFx1OEJGNFx1NEUyRFx1NjU4NyIsCisgICAgICJpaHF3Y3JiNGN2OGE4ZHFnMDU2cHFqeWUiKSwKKyAgICAjIEMgQ2hpbmVzZSAodHJhZGl0aW9uYWwpOgorICAgICh1Ilx1NEVENlx1NTAxMVx1NzIzMlx1NEVDMFx1OUVCRFx1NEUwRFx1OEFBQVx1NEUyRFx1NjU4NyIsCisgICAgICJpaHF3Y3R2emM5MWY2NTlkcnNzM3g4Ym8weWIiKSwKKyAgICAjIEQgQ3plY2g6IFBybzxjY2Fyb24+cHJvc3Q8ZWNhcm9uPm5lbWx1djxpYWN1dGU+PGNjYXJvbj5lc2t5CisgICAgKHUiXHUwMDUwXHUwMDcyXHUwMDZGXHUwMTBEXHUwMDcwXHUwMDcyXHUwMDZGXHUwMDczXHUwMDc0IgorICAgICB1Ilx1MDExQlx1MDA2RVx1MDA2NVx1MDA2RFx1MDA2Q1x1MDA3NVx1MDA3Nlx1MDBFRFx1MDEwRCIKKyAgICAgdSJcdTAwNjVcdTAwNzNcdTAwNkJcdTAwNzkiLAorICAgICAiUHJvcHJvc3RuZW1sdXZlc2t5LXV5YjI0ZG1hNDFhIiksCisgICAgIyBFIEhlYnJldzoKKyAgICAodSJcdTA1RENcdTA1REVcdTA1RDRcdTA1RDRcdTA1RERcdTA1RTRcdTA1RTlcdTA1RDVcdTA1RDgiCisgICAgIHUiXHUwNURDXHUwNUQwXHUwNURFXHUwNUQzXHUwNUQxXHUwNUU4XHUwNUQ5XHUwNUREXHUwNUUyIgorICAgICB1Ilx1MDVEMVx1MDVFOFx1MDVEOVx1MDVFQSIsCisgICAgICI0ZGJjYWdkYWh5bWJ4ZWtoZWg2ZTBhN2ZlaTBiIiksCisgICAgIyBGIEhpbmRpIChEZXZhbmFnYXJpKToKKyAgICAodSJcdTA5MkZcdTA5MzlcdTA5MzJcdTA5NEJcdTA5MTdcdTA5MzlcdTA5M0ZcdTA5MjhcdTA5NEQiCisgICAgdSJcdTA5MjZcdTA5NDBcdTA5MTVcdTA5NERcdTA5MkZcdTA5NEJcdTA5MDJcdTA5MjhcdTA5MzkiCisgICAgdSJcdTA5NDBcdTA5MDJcdTA5MkNcdTA5NEJcdTA5MzJcdTA5MzhcdTA5MTVcdTA5MjRcdTA5NDciCisgICAgdSJcdTA5MzlcdTA5NDhcdTA5MDIiLAorICAgICJpMWJhYTdlY2k5Z2xyZDliMmFlMWJqMGhmY2dnNml5YWY4bzBhMWRpZzBjZCIpLAorCisgICAgIyhHKSBKYXBhbmVzZSAoa2FuamkgYW5kIGhpcmFnYW5hKToKKyAgICAodSJcdTMwNkFcdTMwNUNcdTMwN0ZcdTMwOTNcdTMwNkFcdTY1RTVcdTY3MkNcdThBOUVcdTMwOTIiCisgICAgdSJcdThBNzFcdTMwNTdcdTMwNjZcdTMwNEZcdTMwOENcdTMwNkFcdTMwNDRcdTMwNkVcdTMwNEIiLAorICAgICAibjhqb2s1YXk1ZHphYmQ1YnltOWYwY201Njg1cnJqZXRyNnBkeGEiKSwKKworICAgICMgKEgpIEtvcmVhbiAoSGFuZ3VsIHN5bGxhYmxlcyk6CisgICAgKHUiXHVDMTM4XHVBQ0M0XHVDNzU4XHVCQUE4XHVCNEUwXHVDMEFDXHVCNzhDXHVCNEU0XHVDNzc0IgorICAgICB1Ilx1RDU1Q1x1QUQ2RFx1QzVCNFx1Qjk3Q1x1Qzc3NFx1RDU3NFx1RDU1Q1x1QjJFNFx1QkE3NCIKKyAgICAgdSJcdUM1QkNcdUI5QzhcdUIwOThcdUM4OEJcdUM3NDRcdUFFNEMiLAorICAgICAiOTg5YW9tc3ZpNWU4M2RiMWQyYTM1NWN2MWUwdmFrMWR3cnY5M2Q1eGJoMTVhMGR0MzBhNWoiCisgICAgICJwc2Q4NzljY202ZmVhOThjIiksCisKKyAgICAjIChJKSBSdXNzaWFuIChDeXJpbGxpYyk6CisgICAgKHUiXHUwNDNGXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNDXHUwNDQzXHUwNDM2XHUwNDM1XHUwNDNFIgorICAgICB1Ilx1MDQzRFx1MDQzOFx1MDQzRFx1MDQzNVx1MDQzM1x1MDQzRVx1MDQzMlx1MDQzRVx1MDQ0MCIKKyAgICAgdSJcdTA0NEZcdTA0NDJcdTA0M0ZcdTA0M0VcdTA0NDBcdTA0NDNcdTA0NDFcdTA0NDFcdTA0M0EiCisgICAgIHUiXHUwNDM4IiwKKyAgICAgImIxYWJmYWFlcGRybm5iZ2VmYmFEb3Rjd2F0bXEyZzRsIiksCisKKyAgICAjIChKKSBTcGFuaXNoOiBQb3JxdTxlYWN1dGU+bm9wdWVkZW5zaW1wbGVtZW50ZWhhYmxhcmVuRXNwYTxudGlsZGU+b2wKKyAgICAodSJcdTAwNTBcdTAwNkZcdTAwNzJcdTAwNzFcdTAwNzVcdTAwRTlcdTAwNkVcdTAwNkZcdTAwNzAiCisgICAgIHUiXHUwMDc1XHUwMDY1XHUwMDY0XHUwMDY1XHUwMDZFXHUwMDczXHUwMDY5XHUwMDZEXHUwMDcwIgorICAgICB1Ilx1MDA2Q1x1MDA2NVx1MDA2RFx1MDA2NVx1MDA2RVx1MDA3NFx1MDA2NVx1MDA2OFx1MDA2MSIKKyAgICAgdSJcdTAwNjJcdTAwNkNcdTAwNjFcdTAwNzJcdTAwNjVcdTAwNkVcdTAwNDVcdTAwNzNcdTAwNzAiCisgICAgIHUiXHUwMDYxXHUwMEYxXHUwMDZGXHUwMDZDIiwKKyAgICAgIlBvcnF1bm9wdWVkZW5zaW1wbGVtZW50ZWhhYmxhcmVuRXNwYW9sLWZtZDU2YSIpLAorCisgICAgIyAoSykgVmlldG5hbWVzZToKKyAgICAjICBUPGFkb3RiZWxvdz5pc2FvaDxvZG90YmVsb3c+a2g8b2NpcmM+bmd0aDxlY2lyY2hvb2thYm92ZT5jaFwKKyAgICAjICAgPGlob29rYWJvdmU+bjxvYWN1dGU+aXRpPGVjaXJjYWN1dGU+bmdWaTxlY2lyY2RvdGJlbG93PnQKKyAgICAodSJcdTAwNTRcdTFFQTFcdTAwNjlcdTAwNzNcdTAwNjFcdTAwNkZcdTAwNjhcdTFFQ0RcdTAwNkIiCisgICAgIHUiXHUwMDY4XHUwMEY0XHUwMDZFXHUwMDY3XHUwMDc0XHUwMDY4XHUxRUMzXHUwMDYzXHUwMDY4IgorICAgICB1Ilx1MUVDOVx1MDA2RVx1MDBGM1x1MDA2OVx1MDA3NFx1MDA2OVx1MUVCRlx1MDA2RVx1MDA2NyIKKyAgICAgdSJcdTAwNTZcdTAwNjlcdTFFQzdcdTAwNzQiLAorICAgICAiVGlzYW9oa2huZ3RoY2huaXRpbmdWaXQta2pjcjgyNjhxeXhhZmQyZjFiOWciKSwKKworCisgICAgIyhMKSAzPG5lbj5CPGd1bWk+PGtpbnBhY2hpPjxzZW5zZWk+CisgICAgKHUiXHUwMDMzXHU1RTc0XHUwMDQyXHU3RDQ0XHU5MUQxXHU1MTZCXHU1MTQ4XHU3NTFGIiwKKyAgICAgIjNCLXd3NGM1ZTE4MGU1NzVhNjVsc3kyYiIpLAorICAgIAorICAgICMgKE0pIDxhbXVybz48bmFtaWU+LXdpdGgtU1VQRVItTU9OS0VZUworICAgICh1Ilx1NUI4OVx1NUJBNFx1NTk0OFx1N0Y4RVx1NjA3NVx1MDAyRFx1MDA3N1x1MDA2OVx1MDA3NCIKKyAgICAgdSJcdTAwNjhcdTAwMkRcdTAwNTNcdTAwNTVcdTAwNTBcdTAwNDVcdTAwNTJcdTAwMkRcdTAwNEQiCisgICAgIHUiXHUwMDRGXHUwMDRFXHUwMDRCXHUwMDQ1XHUwMDU5XHUwMDUzIiwKKyAgICAgIi13aXRoLVNVUEVSLU1PTktFWVMtcGM1OGFnODBhOHFhaTAwZzduOW4iKSwKKworICAgICMgKE4pIEhlbGxvLUFub3RoZXItV2F5LTxzb3Jlem9yZT48bm8+PGJhc2hvPgorICAgICh1Ilx1MDA0OFx1MDA2NVx1MDA2Q1x1MDA2Q1x1MDA2Rlx1MDAyRFx1MDA0MVx1MDA2RVx1MDA2RiIKKyAgICAgdSJcdTAwNzRcdTAwNjhcdTAwNjVcdTAwNzJcdTAwMkRcdTAwNTdcdTAwNjFcdTAwNzlcdTAwMkQiCisgICAgIHUiXHUzMDVEXHUzMDhDXHUzMDVFXHUzMDhDXHUzMDZFXHU1ODM0XHU2MjQwIiwKKyAgICAgIkhlbGxvLUFub3RoZXItV2F5LS1mYzRxdWEwNWF1d2IzNjc0dmZyMGIiKSwKKworICAgICMgKE8pIDxoaXRvdHN1Pjx5YW5lPjxubz48c2hpdGE+MgorICAgICh1Ilx1MzA3Mlx1MzA2OFx1MzA2NFx1NUM0Qlx1NjgzOVx1MzA2RVx1NEUwQlx1MDAzMiIsCisgICAgICIyLXU5dGx6cjk3NTZidDN1YzB2IiksCisKKyAgICAjIChQKSBNYWppPGRlPktvaTxzdXJ1PjU8YnlvdT48bWFlPgorICAgICh1Ilx1MDA0RFx1MDA2MVx1MDA2QVx1MDA2OVx1MzA2N1x1MDA0Qlx1MDA2Rlx1MDA2OVx1MzA1OSIKKyAgICAgdSJcdTMwOEJcdTAwMzVcdTc5RDJcdTUyNEQiLAorICAgICAiTWFqaUtvaTUtNzgzZ3VlNnF6MDc1YXptNWUiKSwKKworICAgICAjIChRKSA8cGFmaWk+ZGU8cnVuYmE+CisgICAgKHUiXHUzMEQxXHUzMEQ1XHUzMEEzXHUzMEZDXHUwMDY0XHUwMDY1XHUzMEVCXHUzMEYzXHUzMEQwIiwKKyAgICAgImRlLWpnNGF2aGJ5MW5vYzBkIiksCisKKyAgICAjIChSKSA8c29ubz48c3VwaWlkbz48ZGU+CisgICAgKHUiXHUzMDVEXHUzMDZFXHUzMEI5XHUzMEQ0XHUzMEZDXHUzMEM5XHUzMDY3IiwKKyAgICAgImQ5anVhdTQxYXdjemN6cCIpLAorCisgICAgIyAoUykgLT4gJDEuMDAgPC0KKyAgICAodSJcdTAwMkRcdTAwM0VcdTAwMjBcdTAwMjRcdTAwMzFcdTAwMkVcdTAwMzBcdTAwMzBcdTAwMjAiCisgICAgIHUiXHUwMDNDXHUwMDJEIiwKKyAgICAgIi0+ICQxLjAwIDwtLSIpCisgICAgXQorCitmb3IgaSBpbiBwdW55Y29kZV90ZXN0Y2FzZXM6CisgICAgaWYgbGVuKGkpIT0yOgorICAgICAgICBwcmludCByZXByKGkpCisKK2NsYXNzIFB1bnljb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBmb3IgdW5pLCBwdW55IGluIHB1bnljb2RlX3Rlc3RjYXNlczoKKyAgICAgICAgICAgICMgTmVlZCB0byBjb252ZXJ0IGJvdGggc3RyaW5ncyB0byBsb3dlciBjYXNlLCBzaW5jZQorICAgICAgICAgICAgIyBzb21lIG9mIHRoZSBleHRlbmRlZCBlbmNvZGluZ3MgdXNlIHVwcGVyIGNhc2UsIGJ1dCBvdXIKKyAgICAgICAgICAgICMgY29kZSBwcm9kdWNlcyBvbmx5IGxvd2VyIGNhc2UuIENvbnZlcnRpbmcganVzdCBwdW55IHRvCisgICAgICAgICAgICAjIGxvd2VyIGlzIGFsc28gaW5zdWZmaWNpZW50LCBzaW5jZSBzb21lIG9mIHRoZSBpbnB1dCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAjIGFyZSB1cHBlciBjYXNlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pLmVuY29kZSgicHVueWNvZGUiKS5sb3dlcigpLCBwdW55Lmxvd2VyKCkpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGZvciB1bmksIHB1bnkgaW4gcHVueWNvZGVfdGVzdGNhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pLCBwdW55LmRlY29kZSgicHVueWNvZGUiKSkKKworIyBGcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpZG4vZHJhZnQtam9zZWZzc29uLWlkbi10ZXN0LXZlY3RvcnMuaHRtbAorbmFtZXByZXBfdGVzdHMgPSBbCisgICAgIyAzLjEgTWFwIHRvIG5vdGhpbmcuCisgICAgKCdmb29ceGMyXHhhZFx4Y2RceDhmXHhlMVx4YTBceDg2XHhlMVx4YTBceDhiYmFyJworICAgICAnXHhlMlx4ODBceDhiXHhlMlx4ODFceGEwYmF6XHhlZlx4YjhceDgwXHhlZlx4YjhceDg4XHhlZicKKyAgICAgJ1x4YjhceDhmXHhlZlx4YmJceGJmJywKKyAgICAgJ2Zvb2JhcmJheicpLAorICAgICMgMy4yIENhc2UgZm9sZGluZyBBU0NJSSBVKzAwNDMgVSswMDQxIFUrMDA0NiBVKzAwNDUuCisgICAgKCdDQUZFJywKKyAgICAgJ2NhZmUnKSwKKyAgICAjIDMuMyBDYXNlIGZvbGRpbmcgOGJpdCBVKzAwREYgKGdlcm1hbiBzaGFycCBzKS4KKyAgICAjIFRoZSBvcmlnaW5hbCB0ZXN0IGNhc2UgaXMgYm9ndXM7IGl0IHNheXMgXHhjM1x4ZGYKKyAgICAoJ1x4YzNceDlmJywKKyAgICAgJ3NzJyksCisgICAgIyAzLjQgQ2FzZSBmb2xkaW5nIFUrMDEzMCAodHVya2lzaCBjYXBpdGFsIEkgd2l0aCBkb3QpLgorICAgICgnXHhjNFx4YjAnLAorICAgICAnaVx4Y2NceDg3JyksCisgICAgIyAzLjUgQ2FzZSBmb2xkaW5nIG11bHRpYnl0ZSBVKzAxNDMgVSswMzdBLgorICAgICgnXHhjNVx4ODNceGNkXHhiYScsCisgICAgICdceGM1XHg4NCBceGNlXHhiOScpLAorICAgICMgMy42IENhc2UgZm9sZGluZyBVKzIxMjEgVSszM0M2IFUrMUQ3QkIuCisgICAgIyBYWFg6IHNraXAgdGhpcyBhcyBpdCBmYWlscyBpbiBVQ1MtMiBtb2RlCisgICAgIygnXHhlMlx4ODRceGExXHhlM1x4OGZceDg2XHhmMFx4OWRceDllXHhiYicsCisgICAgIyAndGVsY1x4ZTJceDg4XHg5NWtnXHhjZlx4ODMnKSwKKyAgICAoTm9uZSwgTm9uZSksCisgICAgIyAzLjcgTm9ybWFsaXphdGlvbiBvZiBVKzAwNmEgVSswMzBjIFUrMDBBMCBVKzAwQUEuCisgICAgKCdqXHhjY1x4OGNceGMyXHhhMFx4YzJceGFhJywKKyAgICAgJ1x4YzdceGIwIGEnKSwKKyAgICAjIDMuOCBDYXNlIGZvbGRpbmcgVSsxRkI3IGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhlMVx4YmVceGI3JywKKyAgICAgJ1x4ZTFceGJlXHhiNlx4Y2VceGI5JyksCisgICAgIyAzLjkgU2VsZi1yZXZlcnRpbmcgY2FzZSBmb2xkaW5nIFUrMDFGMCBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAjIFRoZSBvcmlnaW5hbCB0ZXN0IGNhc2UgaXMgYm9ndXMsIGl0IHNheXMgYFx4YzdceGYwJworICAgICgnXHhjN1x4YjAnLAorICAgICAnXHhjN1x4YjAnKSwKKyAgICAjIDMuMTAgU2VsZi1yZXZlcnRpbmcgY2FzZSBmb2xkaW5nIFUrMDM5MCBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAoJ1x4Y2VceDkwJywKKyAgICAgJ1x4Y2VceDkwJyksCisgICAgIyAzLjExIFNlbGYtcmV2ZXJ0aW5nIGNhc2UgZm9sZGluZyBVKzAzQjAgYW5kIG5vcm1hbGl6YXRpb24uCisgICAgKCdceGNlXHhiMCcsCisgICAgICdceGNlXHhiMCcpLAorICAgICMgMy4xMiBTZWxmLXJldmVydGluZyBjYXNlIGZvbGRpbmcgVSsxRTk2IGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhlMVx4YmFceDk2JywKKyAgICAgJ1x4ZTFceGJhXHg5NicpLAorICAgICMgMy4xMyBTZWxmLXJldmVydGluZyBjYXNlIGZvbGRpbmcgVSsxRjU2IGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhlMVx4YmRceDk2JywKKyAgICAgJ1x4ZTFceGJkXHg5NicpLAorICAgICMgMy4xNCBBU0NJSSBzcGFjZSBjaGFyYWN0ZXIgVSswMDIwLgorICAgICgnICcsCisgICAgICcgJyksCisgICAgIyAzLjE1IE5vbi1BU0NJSSA4Yml0IHNwYWNlIGNoYXJhY3RlciBVKzAwQTAuCisgICAgKCdceGMyXHhhMCcsCisgICAgICcgJyksCisgICAgIyAzLjE2IE5vbi1BU0NJSSBtdWx0aWJ5dGUgc3BhY2UgY2hhcmFjdGVyIFUrMTY4MC4KKyAgICAoJ1x4ZTFceDlhXHg4MCcsCisgICAgIE5vbmUpLAorICAgICMgMy4xNyBOb24tQVNDSUkgbXVsdGlieXRlIHNwYWNlIGNoYXJhY3RlciBVKzIwMDAuCisgICAgKCdceGUyXHg4MFx4ODAnLAorICAgICAnICcpLAorICAgICMgMy4xOCBaZXJvIFdpZHRoIFNwYWNlIFUrMjAwYi4KKyAgICAoJ1x4ZTJceDgwXHg4YicsCisgICAgICcnKSwKKyAgICAjIDMuMTkgTm9uLUFTQ0lJIG11bHRpYnl0ZSBzcGFjZSBjaGFyYWN0ZXIgVSszMDAwLgorICAgICgnXHhlM1x4ODBceDgwJywKKyAgICAgJyAnKSwKKyAgICAjIDMuMjAgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIFUrMDAxMCBVKzAwN0YuCisgICAgKCdceDEwXHg3ZicsCisgICAgICdceDEwXHg3ZicpLAorICAgICMgMy4yMSBOb24tQVNDSUkgOGJpdCBjb250cm9sIGNoYXJhY3RlciBVKzAwODUuCisgICAgKCdceGMyXHg4NScsCisgICAgIE5vbmUpLAorICAgICMgMy4yMiBOb24tQVNDSUkgbXVsdGlieXRlIGNvbnRyb2wgY2hhcmFjdGVyIFUrMTgwRS4KKyAgICAoJ1x4ZTFceGEwXHg4ZScsCisgICAgIE5vbmUpLAorICAgICMgMy4yMyBaZXJvIFdpZHRoIE5vLUJyZWFrIFNwYWNlIFUrRkVGRi4KKyAgICAoJ1x4ZWZceGJiXHhiZicsCisgICAgICcnKSwKKyAgICAjIDMuMjQgTm9uLUFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyIFUrMUQxNzUuCisgICAgKCdceGYwXHg5ZFx4ODVceGI1JywKKyAgICAgTm9uZSksCisgICAgIyAzLjI1IFBsYW5lIDAgcHJpdmF0ZSB1c2UgY2hhcmFjdGVyIFUrRjEyMy4KKyAgICAoJ1x4ZWZceDg0XHhhMycsCisgICAgIE5vbmUpLAorICAgICMgMy4yNiBQbGFuZSAxNSBwcml2YXRlIHVzZSBjaGFyYWN0ZXIgVStGMTIzNC4KKyAgICAoJ1x4ZjNceGIxXHg4OFx4YjQnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjcgUGxhbmUgMTYgcHJpdmF0ZSB1c2UgY2hhcmFjdGVyIFUrMTBGMjM0LgorICAgICgnXHhmNFx4OGZceDg4XHhiNCcsCisgICAgIE5vbmUpLAorICAgICMgMy4yOCBOb24tY2hhcmFjdGVyIGNvZGUgcG9pbnQgVSs4RkZGRS4KKyAgICAoJ1x4ZjJceDhmXHhiZlx4YmUnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjkgTm9uLWNoYXJhY3RlciBjb2RlIHBvaW50IFUrMTBGRkZGLgorICAgICgnXHhmNFx4OGZceGJmXHhiZicsCisgICAgIE5vbmUpLAorICAgICMgMy4zMCBTdXJyb2dhdGUgY29kZSBVK0RGNDIuCisgICAgKCdceGVkXHhiZFx4ODInLAorICAgICBOb25lKSwKKyAgICAjIDMuMzEgTm9uLXBsYWluIHRleHQgY2hhcmFjdGVyIFUrRkZGRC4KKyAgICAoJ1x4ZWZceGJmXHhiZCcsCisgICAgIE5vbmUpLAorICAgICMgMy4zMiBJZGVvZ3JhcGhpYyBkZXNjcmlwdGlvbiBjaGFyYWN0ZXIgVSsyRkY1LgorICAgICgnXHhlMlx4YmZceGI1JywKKyAgICAgTm9uZSksCisgICAgIyAzLjMzIERpc3BsYXkgcHJvcGVydHkgY2hhcmFjdGVyIFUrMDM0MS4KKyAgICAoJ1x4Y2RceDgxJywgCisgICAgICdceGNjXHg4MScpLAorICAgICMgMy4zNCBMZWZ0LXRvLXJpZ2h0IG1hcmsgVSsyMDBFLgorICAgICgnXHhlMlx4ODBceDhlJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM1IERlcHJlY2F0ZWQgVSsyMDJBLgorICAgICgnXHhlMlx4ODBceGFhJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM2IExhbmd1YWdlIHRhZ2dpbmcgY2hhcmFjdGVyIFUrRTAwMDEuCisgICAgKCdceGYzXHhhMFx4ODBceDgxJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM3IExhbmd1YWdlIHRhZ2dpbmcgY2hhcmFjdGVyIFUrRTAwNDIuCisgICAgKCdceGYzXHhhMFx4ODFceDgyJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM4IEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVSswNUJFIGFuZCBMQ2F0IGNoYXJhY3RlcnMuCisgICAgKCdmb29ceGQ2XHhiZWJhcicsCisgICAgIE5vbmUpLAorICAgICMgMy4zOSBCaWRpOiBSYW5kQUxDYXQgY2hhcmFjdGVyIFUrRkQ1MCBhbmQgTENhdCBjaGFyYWN0ZXJzLgorICAgICgnZm9vXHhlZlx4YjVceDkwYmFyJywKKyAgICAgTm9uZSksCisgICAgIyAzLjQwIEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVStGQjM4IGFuZCBMQ2F0IGNoYXJhY3RlcnMuCisgICAgKCdmb29ceGVmXHhiOVx4YjZiYXInLAorICAgICAnZm9vIFx4ZDlceDhlYmFyJyksCisgICAgIyAzLjQxIEJpZGk6IFJhbmRBTENhdCB3aXRob3V0IHRyYWlsaW5nIFJhbmRBTENhdCBVKzA2MjcgVSswMDMxLgorICAgICgnXHhkOFx4YTcxJywKKyAgICAgTm9uZSksCisgICAgIyAzLjQyIEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVSswNjI3IFUrMDAzMSBVKzA2MjguCisgICAgKCdceGQ4XHhhNzFceGQ4XHhhOCcsCisgICAgICdceGQ4XHhhNzFceGQ4XHhhOCcpLAorICAgICMgMy40MyBVbmFzc2lnbmVkIGNvZGUgcG9pbnQgVStFMDAwMi4KKyAgICAoJ1x4ZjNceGEwXHg4MFx4ODInLAorICAgICBOb25lKSwKKyAgICAjIDMuNDQgTGFyZ2VyIHRlc3QgKHNocmlua2luZykuCisgICAgIyBPcmlnaW5hbCB0ZXN0IGNhc2UgcmVhZHMgXHhjM1x4ZGYKKyAgICAoJ1hceGMyXHhhZFx4YzNceDlmXHhjNFx4YjBceGUyXHg4NFx4YTFqXHhjY1x4OGNceGMyXHhhMFx4YzInCisgICAgICdceGFhXHhjZVx4YjBceGUyXHg4MFx4ODAnLAorICAgICAneHNzaVx4Y2NceDg3dGVsXHhjN1x4YjAgYVx4Y2VceGIwICcpLAorICAgICMgMy40NSBMYXJnZXIgdGVzdCAoZXhwYW5kaW5nKS4KKyAgICAjIE9yaWdpbmFsIHRlc3QgY2FzZSByZWFkcyBceGMzXHg5ZgorICAgICgnWFx4YzNceDlmXHhlM1x4OGNceDk2XHhjNFx4YjBceGUyXHg4NFx4YTFceGUyXHg5Mlx4OWZceGUzXHg4YycKKyAgICAgJ1x4ODAnLAorICAgICAneHNzXHhlM1x4ODJceGFkXHhlM1x4ODNceGFkXHhlM1x4ODNceGExXHhlM1x4ODNceGJjXHhlMycKKyAgICAgJ1x4ODNceDg4XHhlM1x4ODNceGFiaVx4Y2NceDg3dGVsXHgyOGRceDI5XHhlM1x4ODInCisgICAgICdceGEyXHhlM1x4ODNceDkxXHhlM1x4ODNceGJjXHhlM1x4ODNceDg4JykKKyAgICBdCisKKworY2xhc3MgTmFtZXByZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9uYW1lcHJlcChzZWxmKToKKyAgICAgICAgZnJvbSBlbmNvZGluZ3MuaWRuYSBpbXBvcnQgbmFtZXByZXAKKyAgICAgICAgZm9yIHBvcywgKG9yaWcsIHByZXBwZWQpIGluIGVudW1lcmF0ZShuYW1lcHJlcF90ZXN0cyk6CisgICAgICAgICAgICBpZiBvcmlnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBTa2lwcGVkCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgVGhlIFVuaWNvZGUgc3RyaW5ncyBhcmUgZ2l2ZW4gaW4gVVRGLTgKKyAgICAgICAgICAgIG9yaWcgPSB1bmljb2RlKG9yaWcsICJ1dGYtOCIpCisgICAgICAgICAgICBpZiBwcmVwcGVkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBJbnB1dCBjb250YWlucyBwcm9oaWJpdGVkIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIG5hbWVwcmVwLCBvcmlnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVwcGVkID0gdW5pY29kZShwcmVwcGVkLCAidXRmLTgiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmFtZXByZXAob3JpZyksIHByZXBwZWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiVGVzdCAzLiVkOiAlcyIgJSAocG9zKzEsIHN0cihlKSkpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVVRGMTZUZXN0KSkKICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShFc2NhcGVEZWNvZGVUZXN0KSkKICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShSZWNvZGluZ1Rlc3QpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFB1bnljb2RlVGVzdCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoTmFtZXByZXBUZXN0KSkKICAgICB0ZXN0X3N1cHBvcnQucnVuX3N1aXRlKHN1aXRlKQogCiAK