ZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrIGIvc3JjL3Rlc3RkaXIvTWFrZV9hbWlnYS5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3MGI3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrCkBAIC0wLDAgKzEsOTcgQEAKKyMKKyMgTWFrZWZpbGUgdG8gcnVuIGFsIHRlc3RzIGZvciBWaW0sIG9uIEFtaWdhCisjCisjIFJlcXVpcmVzICJybSIsICJjc2giIGFuZCAiZGlmZiIhCisKK1ZJTVBST0cgPSAvdmltCisKKyMgVGhlc2UgdGVzdHMgZG9uJ3Qgd29yayAoeWV0KToKKyMgdGVzdDIJCSJcXHRtcCIgZG9lc24ndCB3b3JrCisjIHRlc3QxMAknZXJyb3Jmb3JtYXQnIGlzIGRpZmZlcmVudAorIyB0ZXN0MTEJImNhdCIgZG9lc24ndCB3b3JrIHByb3Blcmx5CisjIHRlc3QxMgljYW4ndCB1bmxpbmsgYSBzd2FwIGZpbGUKKyMgdGVzdDI1CXVzZXMgc3ltYm9saWMgbGluaworIyB0ZXN0MjcJY2FuJ3QgZWRpdCBmaWxlIHdpdGggIioiCisjIHRlc3Q1Mglvbmx5IGZvciBXaW4zMgorCitTQ1JJUFRTID0gdGVzdDEub3V0IHRlc3QzLm91dCB0ZXN0NC5vdXQgdGVzdDUub3V0IHRlc3Q2Lm91dCBcCisJCXRlc3Q3Lm91dCB0ZXN0OC5vdXQgdGVzdDkub3V0IFwKKwkJdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dCBcCisJCXRlc3QxOC5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMS5vdXQgdGVzdDIyLm91dCBcCisJCXRlc3QyMy5vdXQgdGVzdDI0Lm91dCB0ZXN0MjYub3V0IFwKKwkJdGVzdDI4Lm91dCB0ZXN0Mjkub3V0IHRlc3QzMC5vdXQgdGVzdDMxLm91dCB0ZXN0MzIub3V0IFwKKwkJdGVzdDMzLm91dCB0ZXN0MzQub3V0IHRlc3QzNS5vdXQgdGVzdDM2Lm91dCB0ZXN0Mzcub3V0IFwKKwkJdGVzdDM4Lm91dCB0ZXN0Mzkub3V0IHRlc3Q0MC5vdXQgdGVzdDQxLm91dCB0ZXN0NDIub3V0IFwKKwkJdGVzdDQzLm91dCB0ZXN0NDQub3V0IHRlc3Q0NS5vdXQgdGVzdDQ2Lm91dCB0ZXN0NDcub3V0IFwKKwkJdGVzdDQ4Lm91dCB0ZXN0NTEub3V0CisKKy5TVUZGSVhFUzogLmluIC5vdXQKKworbm9uZ3VpOgkvdG1wICQoU0NSSVBUUykKKwljc2ggLWMgZWNobyBBTEwgRE9ORQorCitjbGVhbjoKKwljc2ggLWMgXHJtIC1yZiAqLm91dCAvdG1wLyogWGRvdGVzdCBzbWFsbC52aW0gdGlueS52aW0gbWJ5dGUudmltIHRlc3Qub2sgdmltaW5mbworCisuaW4ub3V0OgorCWNvcHkgJCoub2sgdGVzdC5vaworCSQoVklNUFJPRykgLXUgYW1pZ2EudmltIC1VIE5PTkUgLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gJCouaW4KKwlkaWZmIHRlc3Qub3V0ICQqLm9rCisJcmVuYW1lIHRlc3Qub3V0ICQqLm91dAorCS1kZWxldGUgWCM/IEFMTCBRVUlFVAorCS1kZWxldGUgdGVzdC5vaworCisjIENyZWF0ZSBhIGRpcmVjdG9yeSBmb3IgdGVtcCBmaWxlcworL3RtcDoKKwltYWtlZGlyIC90bXAKKworIyBNYW54IHJlcXVpcmVzIGFsbCBkZXBlbmRlbmNpZXMuLi4KK3Rlc3QxLm91dDogdGVzdDEuaW4KK3Rlc3QyLm91dDogdGVzdDIuaW4KK3Rlc3QzLm91dDogdGVzdDMuaW4KK3Rlc3Q0Lm91dDogdGVzdDQuaW4KK3Rlc3Q1Lm91dDogdGVzdDUuaW4KK3Rlc3Q2Lm91dDogdGVzdDYuaW4KK3Rlc3Q3Lm91dDogdGVzdDcuaW4KK3Rlc3Q4Lm91dDogdGVzdDguaW4KK3Rlc3Q5Lm91dDogdGVzdDkuaW4KK3Rlc3QxMC5vdXQ6IHRlc3QxMC5pbgordGVzdDExLm91dDogdGVzdDExLmluCit0ZXN0MTIub3V0OiB0ZXN0MTIuaW4KK3Rlc3QxMy5vdXQ6IHRlc3QxMy5pbgordGVzdDE0Lm91dDogdGVzdDE0LmluCit0ZXN0MTUub3V0OiB0ZXN0MTUuaW4KK3Rlc3QxNi5vdXQ6IHRlc3QxNi5pbgordGVzdDE3Lm91dDogdGVzdDE3LmluCit0ZXN0MTgub3V0OiB0ZXN0MTguaW4KK3Rlc3QxOS5vdXQ6IHRlc3QxOS5pbgordGVzdDIwLm91dDogdGVzdDIwLmluCit0ZXN0MjEub3V0OiB0ZXN0MjEuaW4KK3Rlc3QyMi5vdXQ6IHRlc3QyMi5pbgordGVzdDIzLm91dDogdGVzdDIzLmluCit0ZXN0MjQub3V0OiB0ZXN0MjQuaW4KK3Rlc3QyNS5vdXQ6IHRlc3QyNS5pbgordGVzdDI2Lm91dDogdGVzdDI2LmluCit0ZXN0Mjcub3V0OiB0ZXN0MjcuaW4KK3Rlc3QyOC5vdXQ6IHRlc3QyOC5pbgordGVzdDI5Lm91dDogdGVzdDI5LmluCit0ZXN0MzAub3V0OiB0ZXN0MzAuaW4KK3Rlc3QzMS5vdXQ6IHRlc3QzMS5pbgordGVzdDMyLm91dDogdGVzdDMyLmluCit0ZXN0MzMub3V0OiB0ZXN0MzMuaW4KK3Rlc3QzNC5vdXQ6IHRlc3QzNC5pbgordGVzdDM1Lm91dDogdGVzdDM1LmluCit0ZXN0MzYub3V0OiB0ZXN0MzYuaW4KK3Rlc3QzNy5vdXQ6IHRlc3QzNy5pbgordGVzdDM4Lm91dDogdGVzdDM4LmluCit0ZXN0Mzkub3V0OiB0ZXN0MzkuaW4KK3Rlc3Q0MC5vdXQ6IHRlc3Q0MC5pbgordGVzdDQxLm91dDogdGVzdDQxLmluCit0ZXN0NDIub3V0OiB0ZXN0NDIuaW4KK3Rlc3Q0My5vdXQ6IHRlc3Q0My5pbgordGVzdDQ0Lm91dDogdGVzdDQ0LmluCit0ZXN0NDUub3V0OiB0ZXN0NDUuaW4KK3Rlc3Q0Ni5vdXQ6IHRlc3Q0Ni5pbgordGVzdDQ3Lm91dDogdGVzdDQ3LmluCit0ZXN0NDgub3V0OiB0ZXN0NDguaW4KK3Rlc3Q1MS5vdXQ6IHRlc3Q1MS5pbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvTWFrZV9kb3MubWFrIGIvc3JjL3Rlc3RkaXIvTWFrZV9kb3MubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTk1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9NYWtlX2Rvcy5tYWsKQEAgLTAsMCArMSw2NCBAQAorIworIyBNYWtlZmlsZSB0byBydW4gYWwgdGVzdHMgZm9yIFZpbSwgb24gRG9zLWxpa2UgbWFjaGluZXMuCisjCisjIFJlcXVpcmVzIGEgc2V0IG9mIFVuaXggdG9vbHM6IGVjaG8sIGRpZmYsIGV0Yy4KKworVklNUFJPRyA9IC4uXFx2aW0KKworIyBPbWl0dGVkOgorIyB0ZXN0MgkJIlxcdG1wIiBkb2Vzbid0IHdvcmsuCisjIHRlc3QxMAknZXJyb3Jmb3JtYXQnIGlzIGRpZmZlcmVudAorIyB0ZXN0MTIJY2FuJ3QgdW5saW5rIGEgc3dhcCBmaWxlCisjIHRlc3QyNQl1c2VzIHN5bWJvbGljIGxpbmsKKyMgdGVzdDI3CWNhbid0IGVkaXQgZmlsZSB3aXRoICIqIiBpbiBmaWxlIG5hbWUKKyMgdGVzdDMxCTE2IGJpdCB2ZXJzaW9uIHJ1bnMgb3V0IG9mIG1lbW9yeS4uLgorCitTQ1JJUFRTMTYgPQl0ZXN0MS5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMi5vdXQgXAorCQl0ZXN0MjMub3V0IHRlc3QyNC5vdXQgdGVzdDI4Lm91dCB0ZXN0Mjkub3V0IFwKKwkJdGVzdDM1Lm91dCB0ZXN0MzYub3V0IHRlc3Q0My5vdXQgXAorCQl0ZXN0NDQub3V0IHRlc3Q0NS5vdXQgdGVzdDQ2Lm91dCB0ZXN0NDcub3V0IFwKKwkJdGVzdDQ4Lm91dCB0ZXN0NTEub3V0CisKK1NDUklQVFMgPQl0ZXN0My5vdXQgdGVzdDQub3V0IHRlc3Q1Lm91dCB0ZXN0Ni5vdXQgdGVzdDcub3V0IFwKKwkJdGVzdDgub3V0IHRlc3Q5Lm91dCB0ZXN0MTEub3V0IHRlc3QxMy5vdXQgdGVzdDE0Lm91dCBcCisJCXRlc3QxNS5vdXQgdGVzdDE3Lm91dCB0ZXN0MTgub3V0IHRlc3QyMS5vdXQgdGVzdDI2Lm91dCBcCisJCXRlc3QzMC5vdXQgdGVzdDMxLm91dCB0ZXN0MzIub3V0IHRlc3QzMy5vdXQgdGVzdDM0Lm91dCBcCisJCXRlc3QzNy5vdXQgdGVzdDM4Lm91dCB0ZXN0Mzkub3V0IHRlc3Q0MC5vdXQgdGVzdDQxLm91dCBcCisJCXRlc3Q0Mi5vdXQgdGVzdDUyLm91dAorCitTQ1JJUFRTMzIgPQl0ZXN0NTAub3V0CisKK1NDUklQVFNfR1VJID0gdGVzdDE2Lm91dAorCisuU1VGRklYRVM6IC5pbiAub3V0CisKK25vbmd1aToJJChTQ1JJUFRTMTYpICQoU0NSSVBUUykKKwllY2hvIEFMTCBET05FCisKK3NtYWxsOgkkKFNDUklQVFMxNikKKwllY2hvIEFMTCBET05FCisKK2d1aToJJChTQ1JJUFRTMTYpICQoU0NSSVBUUykgJChTQ1JJUFRTX0dVSSkKKwllY2hvIEFMTCBET05FCisKK3dpbjMyOgkkKFNDUklQVFMxNikgJChTQ1JJUFRTKSAkKFNDUklQVFMzMikKKwllY2hvIEFMTCBET05FCisKK2NsZWFuOgorCS1kZWwgKi5vdXQKKwktZGVsIHRlc3Qub2sKKwktZGVsIHNtYWxsLnZpbQorCS1kZWwgdGlueS52aW0KKwktZGVsIG1ieXRlLnZpbQorCS1kZWwgWCoKKwktZGVsIHZpbWluZm8KKworLmluLm91dDoKKwljb3B5ICQqLm9rIHRlc3Qub2sKKwkkKFZJTVBST0cpIC11IGRvcy52aW0gLVUgTk9ORSAtLW5vcGx1Z2luIC1zIGRvdGVzdC5pbiAkKi5pbgorCWRpZmYgdGVzdC5vdXQgJCoub2sKKwktZGVsICQqLm91dAorCXJlbmFtZSB0ZXN0Lm91dCAkKi5vdXQKKwktZGVsIFgqCisJLWRlbCB0ZXN0Lm9rCisJLWRlbCB2aW1pbmZvCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlX29zMi5tYWsgYi9zcmMvdGVzdGRpci9NYWtlX29zMi5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1ODIwMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL01ha2Vfb3MyLm1hawpAQCAtMCwwICsxLDUyIEBACisjCisjIE1ha2VmaWxlIHRvIHJ1biBhbCB0ZXN0cyBmb3IgVmltLCBvbiBPUy8yCisjCisjIFJlcXVpcmVzIGEgc2V0IG9mIFVuaXggdG9vbHM6IGVjaG8sIGRpZmYsIGV0Yy4KKworVklNUFJPRyA9IC4uL3ZpbS5leGUKKworIyBPbWl0dGVkOgorIyB0ZXN0MgkJIlxcdG1wIiBkb2Vzbid0IHdvcmsuCisjIHRlc3QxMAknZXJyb3Jmb3JtYXQnIGlzIGRpZmZlcmVudAorIyB0ZXN0MTEJcmVxdWlyZXMgc2VkCisjIHRlc3QxMgljYW4ndCB1bmxpbmsgYSBzd2FwIGZpbGUKKyMgdGVzdDI1CXVzZXMgc3ltYm9saWMgbGluaworIyB0ZXN0MjcJY2FuJ3QgZWRpdCBmaWxlIHdpdGggIioiIGluIGZpbGUgbmFtZQorIyB0ZXN0NTIJb25seSBmb3IgV2luMzIKKworU0NSSVBUUyA9IHRlc3QxLm91dCB0ZXN0My5vdXQgdGVzdDQub3V0IHRlc3Q1Lm91dCB0ZXN0Ni5vdXQgXAorCQl0ZXN0Ny5vdXQgdGVzdDgub3V0IHRlc3Q5Lm91dCBcCisJCXRlc3QxMy5vdXQgdGVzdDE0Lm91dCB0ZXN0MTUub3V0IHRlc3QxNy5vdXQgXAorCQl0ZXN0MTgub3V0IHRlc3QxOS5vdXQgdGVzdDIwLm91dCB0ZXN0MjEub3V0IHRlc3QyMi5vdXQgXAorCQl0ZXN0MjMub3V0IHRlc3QyNC5vdXQgdGVzdDI2Lm91dCBcCisJCXRlc3QyOC5vdXQgdGVzdDI5Lm91dCB0ZXN0MzAub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dCBcCisJCXRlc3QzMy5vdXQgdGVzdDM0Lm91dCB0ZXN0MzUub3V0IHRlc3QzNi5vdXQgdGVzdDM3Lm91dCBcCisJCXRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCisJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dCBcCisJCXRlc3Q0OC5vdXQgdGVzdDUxLm91dAorCisuU1VGRklYRVM6IC5pbiAub3V0CisKK2FsbDoJL3RtcCAkKFNDUklQVFMpCisJQGVjaG8gQUxMIERPTkUKKworJChTQ1JJUFRTKTogJChWSU1QUk9HKQorCitjbGVhbjoKKwktcm0gLXJmICoub3V0IFhkb3Rlc3QgdGVzdC5vayB0aW55LnZpbSBzbWFsbC52aW0gbWJ5dGUudmltIHZpbWluZm8KKworIyBNYWtlIHN1cmUgYWxsIC5pbiBhbmQgLm91dCBmaWxlcyBhcmUgaW4gRE9TIGZpbGVmb3JtYXQuCisuaW4ub3V0OgorCSQoVklNUFJPRykgLXUgTk9ORSAtcyB0b2Rvcy52aW0gJCouaW4KKwkkKFZJTVBST0cpIC11IE5PTkUgLXMgdG9kb3MudmltICQqLm9rCisJY29weSAkKi5vayB0ZXN0Lm9rCisJJChWSU1QUk9HKSAtdSBvczIudmltIC0tbm9wbHVnaW4gLXMgZG90ZXN0LmluICQqLmluCisJJChWSU1QUk9HKSAtdSBOT05FIC1zIHRvZG9zLnZpbSB0ZXN0Lm91dAorCWRpZmYgdGVzdC5vdXQgJCoub2sKKwlyZW5hbWUgdGVzdC5vdXQgJCoub3V0CisJLXJtIC1yZiBYKiB2aW1pbmZvCisJLWRlbCB0ZXN0Lm9rCisKKyMgQ3JlYXRlIGEgZGlyZWN0b3J5IGZvciB0ZW1wIGZpbGVzCisvdG1wOgorCS1ta2RpciAvdG1wCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMgYi9zcmMvdGVzdGRpci9NYWtlX3Ztcy5tbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiMGIyNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL01ha2Vfdm1zLm1tcwpAQCAtMCwwICsxLDEyNCBAQAorIworIyBNYWtlZmlsZSB0byBydW4gYWxsIHRlc3RzIGZvciBWaW0gb24gVk1TCisjCisjIEF1dGhvcnM6CVpvbHRhbiBBcnBhZGZmeSwgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+CisjCQlTYW5kb3IgS29wYW55aSwgIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PgorIworIyBMYXN0IGNoYW5nZTogIDIwMDQgTWF5IDAzCisjCisjIFRoaXMgaGFzIGJlZW4gdGVzdGVkIG9uIFZNUyA2LjIgdG8gNy4yIG9uIERFQyBBbHBoYSBhbmQgVkFYLgorIyBFZGl0IHRoZSBsaW5lcyBpbiB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIGJlbG93IHRvIHNlbGVjdC4KKyMKKyMgRXhlY3V0ZSB3aXRoOgorIwkJbW1zL2Rlc2NyaXA9TWFrZV92bXMubW1zCisjIENsZWFudXAgd2l0aDoKKyMJCW1tcy9kZXNjcmlwPU1ha2Vfdm1zLm1tcyBjbGVhbgorIworIyBNYWtlIGZpbGVzIGFyZSBNTUsgY29tcGF0aWJsZS4KKyMKKyMgTk9URTogWW91IGNhbiBydW4gdGhpcyBzY3JpcHQganVzdCBpbiBYL1dpbmRvdyBlbnZpcm9ubWVudC4gSXQgd2lsbAorIyBjcmVhdGUgYSBuZXcgdGVybWluYWxzLCB0aGVyZWZvcmUgeW91IGhhdmUgdG8gc2V0IHVwIHlvdXIgRElTUExBWQorIyBsb2dpY2FsLiBNb3JlIGluZm8gaW4gVk1TIGRvY3VtZW50YXRpb24gb3Igd2l0aDogaGVscCBzZXQgZGlzcC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyYXRpb24gc2VjdGlvbi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVW5jb21tZW50IGlmIHlvdSB3YW50IHRlc3RzIGluIEdVSSBtb2RlLiAgVGVybWluYWwgbW9kZSBpcyBkZWZhdWx0LgorIyBXQU5UX0dVSSAgPSBZRVMKKworIyBDb21tZW50IG91dCBpZiB5b3Ugd2FudCB0byBydW4gVW5peCBzcGVjaWZpYyB0ZXN0cyBhcyB3ZWxsLCBidXQgcGxlYXNlCisjIGJlIGF3YXJlLCB0aGF0IG9uIE9wZW5WTVMgd2lsbCBmYWlsLCBiZWNhdXNlIG9mIGNhdCwgcm0sIGV0YyBjb21tYW5kcworIyBhbmQgZGlyZWN0b3J5IGhhbmRsaW5nLgorIyBXQU5UX1VOSVggPSBZRVMKKworIyBDb21tZW50IG91dCBpZiB5b3UgaGF2ZSBnemlwIG9uIHlvdXIgc3lzdGVtCisjIEhBVkVfR1pJUCA9IFlFUworCisjIENvbW1lbnQgb3V0IGlmIHlvdSBoYXZlIEdOVSBjb21wYXRpYmxlIGRpZmYgb24geW91ciBzeXN0ZW0KKyMgSEFWRV9HRElGRiA9IFlFUworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFbmQgb2YgY29uZmlndXJhdGlvbiBzZWN0aW9uLgorIworIyBQbGVhc2UsIGRvIG5vdCBjaGFuZ2UgYW55dGhpbmcgYmVsb3cgd2l0aG91dCBwcm9ncmFtbWluZyBleHBlcmllbmNlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVklNUFJPRyA9IDwtPnZpbS5leGUKKworLlNVRkZJWEVTIDogLm91dCAuaW4KKworU0NSSVBUID0gdGVzdDEub3V0ICB0ZXN0Mi5vdXQgIHRlc3QzLm91dCAgdGVzdDQub3V0ICB0ZXN0NS5vdXQgIFwKKwkgdGVzdDYub3V0ICB0ZXN0Ny5vdXQgIHRlc3Q4Lm91dCAgdGVzdDkub3V0ICB0ZXN0MTBhLm91dFwKKwkgdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dCBcCisJIHRlc3QxOC5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMS5vdXQgdGVzdDIyLm91dCBcCisJIHRlc3QyMy5vdXQgdGVzdDI0Lm91dCB0ZXN0MjYub3V0IFwKKwkgdGVzdDI4Lm91dCB0ZXN0Mjkub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dCBcCisJIHRlc3QzMy5vdXQgdGVzdDM0Lm91dCB0ZXN0MzUub3V0IHRlc3QzNi5vdXQgdGVzdDM3Lm91dCBcCisJIHRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCisJIHRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgXAorCSB0ZXN0NDgub3V0IHRlc3Q1MS5vdXQKKworLklGREVGIFdBTlRfR1VJCitTQ1JJUFRfR1VJID0gdGVzdDE2Lm91dAorR1VJX09QVElPTiA9IC1nCisuRU5ESUYKKworLklGREVGIFdBTlRfVU5JWAorU0NSSVBUX1VOSVggPSB0ZXN0MTAub3V0IHRlc3QxMi5vdXQgdGVzdDI1Lm91dCB0ZXN0Mjcub3V0IHRlc3QzMC5vdXQgdGVzdDQ5Lm91dAorLkVORElGCisKKy5JRkRFRiBIQVZFX0daSVAKK1NDUklQVF9HWklQID0gdGVzdDExLm91dAorLkVORElGCisKKy5JRkRFRiBIQVZFX0dESUZGCitTQ1JJUFRfR0RJRkYgPSB0ZXN0NDcub3V0CisuRU5ESUYKKworLmluLm91dCA6CisJLUAgd3JpdGUgc3lzJG91dHB1dCAiICIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgICAgICAgICAgICAgICAgIiQqIiAiCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJLUAgY3JlYXRlL3Rlcm0vd2FpdCBtY3IgJChWSU1QUk9HKSAkKEdVSV9PUFRJT04pIC11IHZtcy52aW0gLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gJCouaW4KKwktQCBpZiAiJydGJFNFQVJDSCgidGVzdC5vdXQuKiIpJyIgLk5FUy4gIiIgdGhlbiBkaWZmZXJlbmNlcyB0ZXN0Lm91dCAkKi5vazsKKwktQCBpZiAiJydGJFNFQVJDSCgidGVzdC5vdXQuKiIpJyIgLk5FUy4gIiIgdGhlbiByZW5hbWUgdGVzdC5vdXQgJCoub3V0CisJLUAgaWYgIicnRiRTRUFSQ0goIlhkb3Rlc3QuKiIpJyIgIC5ORVMuICIiIHRoZW4gZGVsZXRlL25vY29uZmlybS9ub2xvZyBYZG90ZXN0LiouKgorCithbGwgOiBjbGVhbiBub2xvZyAkKFNDUklQVCkgJChTQ1JJUFRfR1VJKSAkKFNDUklQVF9VTklYKSAkKFNDUklQVF9HWklQKSAkKFNDUklQVF9HRElGRikKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICAgICAgICAgICAgICBBbGwgZG9uZSIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwktQCBkZWFzc2lnbiBzeXMkb3V0cHV0CisJLUAgZGVsZXRlL25vY29uZmlybS9ub2xvZyB4Ki4qLioKKwktQCB0eXBlIHRlc3QubG9nCisKK25vbG9nIDoKKwktQCBkZWZpbmUgc3lzJG91dHB1dCB0ZXN0LmxvZworCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICAgICAgICAgU3RhbmRhcmQgVklNIHRlc3QgY2FzZXMiCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJLUAgd3JpdGUgc3lzJG91dHB1dCAiIE9wZW5WTVMgdmVyc2lvbjogJydGJEdFVFNZSSgiVkVSU0lPTiIpJyIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgVmltIHZlcnNpb246IgorCS1AIG1jciAkKFZJTVBST0cpIC0tdmVyc2lvbgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiBUZXN0IGRhdGU6IgorCS1AIHNob3cgdGltZQorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgICAgICAgICAgICAgICBUZXN0IHJlc3VsdHM6IgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIk1BS0VfVk1TLk1NUyBvcHRpb25zOiIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICIgICBXQU5UX0dVSSAgPSAiIiQoV0FOVF9HVUkpIiIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgIFdBTlRfVU5JWCA9ICIiJChXQU5UX1VOSVgpIiIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgIEhBVkVfR1pJUCA9ICIiJChIQVZFX0daSVApIiIgIgorCS1AIHdyaXRlIHN5cyRvdXRwdXQgIiAgIEhBVkVfR0RJRkY9ICIiJChIQVZFX0dESUZGKSIiICIKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICJEZWZhdWx0IHZpbXJjIGZpbGUgaXMgVk1TLlZJTToKKwktQCB3cml0ZSBzeXMkb3V0cHV0ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwktQCB0eXBlIFZNUy5WSU0KKworY2xlYW4gOgorCS1AIGlmICInJ0YkU0VBUkNIKCIqLm91dCIpJyIgICAgIC5ORVMuICIiIHRoZW4gZGVsZXRlL25vY29uZmlybS9ub2xvZyAqLm91dC4qCisJLUAgaWYgIicnRiRTRUFSQ0goInRlc3QubG9nIiknIiAgLk5FUy4gIiIgdGhlbiBkZWxldGUvbm9jb25maXJtL25vbG9nIHRlc3QubG9nLioKKwktQCBpZiAiJydGJFNFQVJDSCgiWGRvdGVzdC4qIiknIiAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgWGRvdGVzdC4qLioKKwktQCBpZiAiJydGJFNFQVJDSCgiKi4qX3N3KiIpJyIgICAuTkVTLiAiIiB0aGVuIGRlbGV0ZS9ub2NvbmZpcm0vbm9sb2cgKi4qX3N3Ki4qCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9NYWtlZmlsZSBiL3NyYy90ZXN0ZGlyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDk3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9NYWtlZmlsZQpAQCAtMCwwICsxLDU4IEBACisjCisjIE1ha2VmaWxlIHRvIHJ1biBhbCB0ZXN0cyBmb3IgVmltCisjCisKK1ZJTVBST0cgPSAuLi92aW0KKworU0NSSVBUUyA9IHRlc3QxLm91dCB0ZXN0Mi5vdXQgdGVzdDMub3V0IHRlc3Q0Lm91dCB0ZXN0NS5vdXQgdGVzdDYub3V0IFwKKwkJdGVzdDcub3V0IHRlc3Q4Lm91dCB0ZXN0OS5vdXQgdGVzdDEwLm91dCB0ZXN0MTEub3V0IFwKKwkJdGVzdDEyLm91dCAgdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dCBcCisJCXRlc3QxOC5vdXQgdGVzdDE5Lm91dCB0ZXN0MjAub3V0IHRlc3QyMS5vdXQgdGVzdDIyLm91dCBcCisJCXRlc3QyMy5vdXQgdGVzdDI0Lm91dCB0ZXN0MjUub3V0IHRlc3QyNi5vdXQgdGVzdDI3Lm91dCBcCisJCXRlc3QyOC5vdXQgdGVzdDI5Lm91dCB0ZXN0MzAub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dCBcCisJCXRlc3QzMy5vdXQgdGVzdDM0Lm91dCB0ZXN0MzUub3V0IHRlc3QzNi5vdXQgdGVzdDM3Lm91dCBcCisJCXRlc3QzOC5vdXQgdGVzdDM5Lm91dCB0ZXN0NDAub3V0IHRlc3Q0MS5vdXQgdGVzdDQyLm91dCBcCisJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dCBcCisJCXRlc3Q0OC5vdXQgdGVzdDQ5Lm91dCB0ZXN0NTEub3V0IHRlc3Q1Mi5vdXQKKworU0NSSVBUU19HVUkgPSB0ZXN0MTYub3V0CisKKy5TVUZGSVhFUzogLmluIC5vdXQKKworbm9uZ3VpOglub2xvZyAkKFNDUklQVFMpCisJQGVjaG8KKwlAY2F0IHRlc3QubG9nCisJQGVjaG8gQUxMIERPTkUKKworZ3VpOglub2xvZyAkKFNDUklQVFMpICQoU0NSSVBUU19HVUkpCisJQGVjaG8KKwlAY2F0IHRlc3QubG9nCisJQGVjaG8gQUxMIERPTkUKKworJChTQ1JJUFRTKSAkKFNDUklQVFNfR1VJKTogJChWSU1QUk9HKQorCitjbGVhbjoKKwktcm0gLXJmICoub3V0ICoucmVqICoub3JpZyB0ZXN0LmxvZyB0aW55LnZpbSBzbWFsbC52aW0gbWJ5dGUudmltIHRlc3Qub2sgWCogdmltaW5mbworCit0ZXN0MS5vdXQ6IHRlc3QxLmluCisJLXJtIC1mICQqLmZhaWxlZCB0aW55LnZpbSBzbWFsbC52aW0gbWJ5dGUudmltIHRlc3Qub2sgWCogdmltaW5mbworCSQoVklNUFJPRykgLXUgdW5peC52aW0gLVUgTk9ORSAtLW5vcGx1Z2luIC1zIGRvdGVzdC5pbiAkKi5pbgorCUAvYmluL3NoIC1jICJpZiBkaWZmIHRlc3Qub3V0ICQqLm9rOyBcCisJCXRoZW4gbXYgLWYgdGVzdC5vdXQgJCoub3V0OyBcCisJCWVsc2UgZWNobzsgXAorCQllY2hvIHRlc3QxIEZBSUxFRCAtIFNvbWV0aGluZyBiYXNpYyBpcyB3cm9uZzsgXAorCQllY2hvOyBleGl0IDE7IGZpIgorCS1ybSAtcmYgWCogdmltaW5mbworCisuaW4ub3V0OgorCS1ybSAtZiAkKi5mYWlsZWQgdGVzdC5vayBYKgorCWNwICQqLm9rIHRlc3Qub2sKKwkkKFZJTVBST0cpIC11IHVuaXgudmltIC1VIE5PTkUgLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gJCouaW4KKwlAL2Jpbi9zaCAtYyAiaWYgZGlmZiB0ZXN0Lm91dCAkKi5vazsgXAorCQl0aGVuIG12IC1mIHRlc3Qub3V0ICQqLm91dDsgXAorCQllbHNlIGVjaG8gJCogRkFJTEVEID4+dGVzdC5sb2c7IG12IC1mIHRlc3Qub3V0ICQqLmZhaWxlZDsgXAorCQlmaSIKKwktcm0gLXJmIFgqIHRlc3Qub2sgdmltaW5mbworCitub2xvZzoKKwktZWNobyBUZXN0IHJlc3VsdHM6ID50ZXN0LmxvZwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvYW1pZ2EudmltIGIvc3JjL3Rlc3RkaXIvYW1pZ2EudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2E0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9hbWlnYS52aW0KQEAgLTAsMCArMSw0IEBACisiIFNldHRpbmdzIGZvciB0ZXN0IHNjcmlwdCBleGVjdXRpb24KK3NldCBzaGVsbD1jc2gKK21hcCEgL3RtcCB0OgorY21hcCAhcm0gIURlbGV0ZSBhbGwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL2Rvcy52aW0gYi9zcmMvdGVzdGRpci9kb3MudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NzY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9kb3MudmltCkBAIC0wLDAgKzEsNyBAQAorIiBTZXR0aW5ncyBmb3IgdGVzdCBzY3JpcHQgZXhlY3V0aW9uCisiIEFsd2F5cyB1c2UgIkNPTU1BTkQuQ09NIiwgZG9uJ3QgdXNlIHRoZSB2YWx1ZSBvZiAiJFNIRUxMIi4KK3NldCBzaGVsbD1jOlxDT01NQU5ELkNPTSBzaGVsbHF1b3RlPSBzaGVsbHhxdW90ZT0gc2hlbGxjbWRmbGFnPS9jIHNoZWxscmVkaXI9PgorIiBUaGlzIGlzIHVzZWQgb25seSB3aGVuIHRoZSArZXZhbCBmZWF0dXJlIGlzIGF2YWlsYWJsZS4KK2lmIGV4ZWN1dGFibGUoImNtZC5leGUiKQorICAgc2V0IHNoZWxsPWNtZC5leGUKK2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9kb3Rlc3QuaW4gYi9zcmMvdGVzdGRpci9kb3Rlc3QuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhMGUxYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL2RvdGVzdC5pbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci9tYWluLmFhcCBiL3NyYy90ZXN0ZGlyL21haW4uYWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTNiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci9tYWluLmFhcApAQCAtMCwwICsxLDU4IEBACisjCisjIE1ha2VmaWxlIHRvIHJ1biBhbCB0ZXN0cyBmb3IgVmltCisjCisKK1ZpbVByb2cgPz0gLi4vdmltCisKK1NjcmlwdHMgPSB0ZXN0MS5vdXQgdGVzdDIub3V0IHRlc3QzLm91dCB0ZXN0NC5vdXQgdGVzdDUub3V0IHRlc3Q2Lm91dAorCQl0ZXN0Ny5vdXQgdGVzdDgub3V0IHRlc3Q5Lm91dCB0ZXN0MTAub3V0IHRlc3QxMS5vdXQKKwkJdGVzdDEyLm91dCAgdGVzdDEzLm91dCB0ZXN0MTQub3V0IHRlc3QxNS5vdXQgdGVzdDE3Lm91dAorCQl0ZXN0MTgub3V0IHRlc3QxOS5vdXQgdGVzdDIwLm91dCB0ZXN0MjEub3V0IHRlc3QyMi5vdXQKKwkJdGVzdDIzLm91dCB0ZXN0MjQub3V0IHRlc3QyNS5vdXQgdGVzdDI2Lm91dCB0ZXN0Mjcub3V0CisJCXRlc3QyOC5vdXQgdGVzdDI5Lm91dCB0ZXN0MzAub3V0IHRlc3QzMS5vdXQgdGVzdDMyLm91dAorCQl0ZXN0MzMub3V0IHRlc3QzNC5vdXQgdGVzdDM1Lm91dCB0ZXN0MzYub3V0IHRlc3QzNy5vdXQKKwkJdGVzdDM4Lm91dCB0ZXN0Mzkub3V0IHRlc3Q0MC5vdXQgdGVzdDQxLm91dCB0ZXN0NDIub3V0CisJCXRlc3Q0My5vdXQgdGVzdDQ0Lm91dCB0ZXN0NDUub3V0IHRlc3Q0Ni5vdXQgdGVzdDQ3Lm91dAorCQl0ZXN0NDgub3V0IHRlc3Q0OS5vdXQKKworU2NyaXB0c0dVSSA9IHRlc3QxNi5vdXQKKworIyBCdWlsZCAibm9uZ3VpIiB3aGVuIG5vIHRhcmdldCB3YXMgc3BlY2lmaWVkLgorbm9uZ3VpOgluZXdsb2cgJFNjcmlwdHMKKwk6cHJpbnQKKwk6Y2F0IHRlc3QubG9nCisJOnByaW50IEFMTCBET05FCisKKyMgQnVpbGQgIm5ndWkiIHdoZW4gc3BlY2lmaWVkLgorZ3VpOgluZXdsb2cgJFNjcmlwdHMgJFNjcmlwdHNHVUkKKwk6cHJpbnQKKwk6Y2F0IHRlc3QubG9nCisJOnByaW50IEFMTCBET05FCisKKyRTY3JpcHRzICRTY3JpcHRzR1VJOiAkVmltUHJvZworCitjbGVhbjoKKwk6ZGVsIHtyfXtmb3JjZX0gKi5vdXQgdGVzdC5sb2cgdGlueS52aW0gc21hbGwudmltIG1ieXRlLnZpbSB0ZXN0Lm9rIFgqCisKKyMgdGVzdDEgaXMgc3BlY2lhbCwgaXQgY2hlY2tzIGZvciBmZWF0dXJlcwordGVzdDEub3V0OiB0ZXN0MS5pbgorCTpkZWwge2ZvcmNlfSB0ZXN0MS5mYWlsZWQgdGlueS52aW0gc21hbGwudmltIG1ieXRlLnZpbQorCTpzeXMge2l9ICRWaW1Qcm9nIC11IHVuaXgudmltIC1VIE5PTkUgLS1ub3BsdWdpbiAtcyBkb3Rlc3QuaW4gdGVzdDEuaW4KKwlAaWYgb3Muc3lzdGVtKCJkaWZmIHRlc3Qub3V0IHRlc3QxLm9rIikgIT0gMDoKKwkJOmVycm9yIHRlc3QxIEZBSUxFRCAtIFNvbWV0aGluZyBiYXNpYyBpcyB3cm9uZworCTptb3ZlIHtmb3JjZX0gdGVzdC5vdXQgdGVzdDEub3V0CisJOmRlbCB7cn17Zm9yY2V9IFgqCisKKzpydWxlICUub3V0IDogJS5pbgorCTpkZWwge2ZvcmNlfSAkKG1hdGNoKS5mYWlsZWQgdGVzdC5vaworCTpjb3B5ICQobWF0Y2gpLm9rIHRlc3Qub2sKKwk6c3lzIHtpfSAkVmltUHJvZyAtdSB1bml4LnZpbSAtVSBOT05FIC0tbm9wbHVnaW4gLXMgZG90ZXN0LmluICQobWF0Y2gpLmluCisJQGlmIG9zLnN5c3RlbSgiZGlmZiB0ZXN0Lm91dCAiICsgbWF0Y2ggKyAiLm9rIikgIT0gMDoKKwkJOnByaW50ICRtYXRjaCBGQUlMRUQgPj50ZXN0LmxvZworCQk6bW92ZSB7Zm9yY2V9IHRlc3Qub3V0ICQobWF0Y2gpLmZhaWxlZAorCUBlbHNlOgorCQk6bW92ZSB7Zm9yY2V9IHRlc3Qub3V0ICQobWF0Y2gpLm91dAorCTpkZWwge3J9e2ZvcmNlfSBYKiB0ZXN0Lm9rCisKK25ld2xvZzoKKwk6cHJpbnQgVGVzdCByZXN1bHRzOiA+ISB0ZXN0LmxvZwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvb3MyLnZpbSBiL3NyYy90ZXN0ZGlyL29zMi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3YmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL29zMi52aW0KQEAgLTAsMCArMSwzIEBACisiIFNldHRpbmdzIGZvciB0ZXN0IHNjcmlwdCBleGVjdXRpb24KKyIgQWx3YXlzIHVzZSAiQ01ELkVYRSIsIGRvbid0IHVzZSB0aGUgdmFsdWUgb2YgIiRTSEVMTCIuCitzZXQgc2hlbGw9Q01ELkVYRSBzaGVsbHF1b3RlPSBzaGVsbHhxdW90ZT0gc2hlbGxjbWRmbGFnPS9jIHNoZWxscmVkaXI9PgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDFiZGRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEuaW4KQEAgLTAsMCArMSw0MCBAQAorCitGaXJzdCBhIHNpbXBsZSB0ZXN0IHRvIGNoZWNrIGlmIHRoZSB0ZXN0IHNjcmlwdCB3b3Jrcy4KKworSWYgVmltIHdhcyBub3QgY29tcGlsZWQgd2l0aCB0aGUgK2V2YWwgZmVhdHVyZSwgdGhlIHNtYWxsLnZpbSBzY3JpcHQgd2lsbCBiZQorc2V0IHRvIGNvcHkgdGhlIHRlc3Qub2sgZmlsZSB0byB0ZXN0Lm91dCwgc28gdGhhdCBpdCBsb29rcyBsaWtlIHRoZSB0ZXN0CitzdWNjZWVkZWQuICBPdGhlcndpc2UgYW4gZW1wdHkgc21hbGwudmltIGlzIHdyaXR0ZW4uICBzbWFsbC52aW0gaXMgc291cmNlZCBieQordGVzdHMgdGhhdCByZXF1aXJlIHRoZSArZXZhbCBmZWF0dXJlIG9yIG90aGVyIGZlYXR1cmVzIHRoYXQgYXJlIG1pc3NpbmcgaW4gdGhlCitzbWFsbCB2ZXJzaW9uLgorCitJZiBWaW0gd2FzIG5vdCBjb21waWxlZCB3aXRoIHRoZSArd2luZG93cyBmZWF0dXJlLCB0aGUgdGlueS52aW0gc2NyaXB0IHdpbGwgYmUKK3NldCBsaWtlIHNtYWxsLnZpbSBhYm92ZS4gIHRpbnkudmltIGlzIHNvdXJjZWQgYnkgdGVzdHMgdGhhdCByZXF1aXJlIHRoZQorK3dpbmRvd3MgZmVhdHVyZSBvciBvdGhlciBmZWF0dXJlcyB0aGF0IGFyZSBtaXNzaW5nIGluIHRoZSB0aW55IHZlcnNpb24uCisKK0lmIFZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlICttdWx0aV9ieXRlIGZlYXR1cmUsIHRoZSBtYnl0ZS52aW0gc2NyaXB0IHdpbGwgYmUgc2V0IGxpa2Ugc21hbGwudmltIGFib3ZlLiAgbWJ5dGUudmltIGlzIHNvdXJjZWQgYnkgdGVzdHMgdGhhdCByZXF1aXJlIHRoZQorK211bHRpX2J5dGUgZmVhdHVyZS4KKworU1RBUlRURVNUCis6IiBXcml0ZSBhIHNpbmdsZSBsaW5lIHRvIHRlc3Qub3V0IHRvIGNoZWNrIGlmIHRlc3Rpbmcgd29ya3MgYXQgYWxsLgorOiVkCithdGhpcyBpcyBhIHRlc3QbOnchIHRlc3Qub3V0Cis6IiBDcmVhdGUgc21hbGwudmltIGFuZCB0aW55LnZpbSBlbXB0eSwgY3JlYXRlIG1ieXRlLnZpbSB0byBza2lwIHRoZSB0ZXN0LgorMEQ6dyEgc21hbGwudmltCis6dyEgdGlueS52aW0KK2FlISB0ZXN0Lm9rCit3ISB0ZXN0Lm91dAorcWEhCisbOnchIG1ieXRlLnZpbQorOiIgSWYgK211bHRpX2J5dGUgZmVhdHVyZSBzdXBwb3J0ZWQsIG1ha2UgbWJ5dGUudmltIGVtcHR5LgorOmlmIGhhcygibXVsdGlfYnl0ZSIpIHwgc3AgYW5vdGhlciB8IHchIG1ieXRlLnZpbSB8IHEgfCBlbmRpZgorOiIgSWYgK2V2YWwgZmVhdHVyZSBzdXBwb3J0ZWQgcXVpdCBoZXJlLCBsZWF2aW5nIHRpbnkudmltIGFuZCBzbWFsbC52aW0gZW1wdHkuCis6IiBPdGhlcndpc2Ugd3JpdGUgc21hbGwudmltIHRvIHNraXAgdGhlIHRlc3QuCis6aWYgMSB8IHEhIHwgZW5kaWYKKzp3ISBzbWFsbC52aW0KKzoiIElmICt3aW5kb3dzIGZlYXR1cmUgbm90IHN1cHBvcnRlZCA6c3Agd2lsbCBmYWlsIGFuZCB0aW55LnZpbSB3aWxsIGJlCis6IiB3cml0dGVuIHRvIHNraXAgdGhlIHRlc3QuCis6c3AgYW5vdGhlcgorOndxISB0aW55LnZpbQorOnFhIQorRU5EVEVTVAorCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmZjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MS5vawpAQCAtMCwwICsxIEBACit0aGlzIGlzIGEgdGVzdApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDEwLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDEwLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNWM0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTAuaW4KQEAgLTAsMCArMSw1NyBAQAorVGVzdCBmb3IgJ2Vycm9yZm9ybWF0Jy4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6L3N0YXJ0IG9mIGVycm9yZmlsZS8sL2VuZCBvZiBlcnJvcmZpbGUvdyEgWGVycm9yZmlsZQorOi9zdGFydCBvZiB0ZXN0ZmlsZS8sL2VuZCBvZiB0ZXN0ZmlsZS93ISBYdGVzdGZpbGUKKzpjZiBYZXJyb3JmaWxlCityQQorOmNuCityQgorOmNuCityQworOmNuCityRAorOmNuCityRQorOnchIHRlc3Qub3V0ICAgICAgICAgICAgICIgV3JpdGUgY29udGVudHMgb2YgdGhpcyBmaWxlCis6cWEhCitFTkRURVNUCisKK3N0YXJ0IG9mIGVycm9yZmlsZQorIlh0ZXN0ZmlsZSIsIGxpbmUgNC4xMjogMTUwNi0wNDUgKFMpIFVuZGVjbGFyZWQgaWRlbnRpZmllciBmZF9zZXQuCisiWHRlc3RmaWxlIiwgbGluZSA3IGNvbCAxOTsgdGhpcyBpcyBhbiBlcnJvcgorZ2NjIC1jIC1ESEFWRV9DT05GSXNpbmctcHJvdG90eXBlcyAtSS91c3IvWDExUjYvaW5jbHVkZSAgdmVyc2lvbi5jCitYdGVzdGZpbGU6MTM6IHBhcnNlIGVycm9yIGJlZm9yZSBgYXNkJworbWFrZTogKioqIFt2aW1dIEVycm9yIDEKK2luIGZpbGUgIlh0ZXN0ZmlsZSIgbGluZW5yIDE2OiB0aGVyZSBpcyBhbiBlcnJvcgorCisyIHJldHVybmVkCisiWHRlc3RmaWxlIiwgbGluZW5yIDE5OiB5ZXQgYW5vdGhlciBwcm9ibGVtCisKK0RvZXMgYW55b25lIGtub3cgd2hhdCBpcyB0aGUgcHJvYmxlbSBhbmQgaG93IHRvIGNvcnJlY3Rpb24gaXQ/CitlbmQgb2YgZXJyb3JmaWxlCisKK3N0YXJ0IG9mIHRlc3RmaWxlCitsaW5lIDIgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAzICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNCAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDUgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA2ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNyAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDggIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA5ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDExIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMiB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTMgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE0IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTYgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE3IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxOCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTkgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAyMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMjIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxMC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzg2ODg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEwLm9rCkBAIC0wLDAgKzEsMjMgQEAKK3N0YXJ0IG9mIHRlc3RmaWxlCitsaW5lIDIgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAzICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNCAgeHh4QXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDUgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA2ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNyAgeHh4eHh4eHh4eEJ4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDggIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA5ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDExIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMiB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0NpbmUgMTMgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE0IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0RpbmUgMTYgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE3IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxOCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0VpbmUgMTkgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAyMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMjIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMGEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTBhLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTg2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTBhLmluCkBAIC0wLDAgKzEsNzMgQEAKK1Rlc3QgZm9yICdlcnJvcmZvcm1hdCcuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOi9zdGFydCBvZiBlcnJvcmZpbGUvLC9lbmQgb2YgZXJyb3JmaWxlL3chIFhlcnJvcmZpbGUKKzovc3RhcnQgb2YgdGVzdGZpbGUvLC9lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3RmaWxlCis6Y2YgWGVycm9yZmlsZQorckEKKzpjbgorckIKKzpjbgorckMKKzpjbgorckQKKzpjbgorckUKKzp3ISB0ZXN0Lm91dCAgICAgICAgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiBlcnJvcmZpbGUKKworICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJWQgXG4iLCAobnVtYmVyL290aGVyKSUxMCApOworLi4uLi4uLi4uLi4uLi4uLi4uXgorJUNDLUUtTk9TRU1JLCBNaXNzaW5nICI7Ii4KK2F0IGxpbmUgbnVtYmVyIDQgaW4gZmlsZSBTWVMkRElTSzpYVEVTVEZJTEUKKworICAgICAgICAgICAgIG90aGVyPTEwMDAwMDAwOworLi4uLi4uLi4uLi4uLl4KKyVDQy1FLVVOREVDTEFSRUQsIEluIHRoaXMgc3RhdGVtZW50LCAib3N6dCIgaXMgbm90IGRlY2xhcmVkLgorYXQgbGluZSBudW1iZXIgNyBpbiBmaWxlIFNZUyRESVNLOlhURVNURklMRQorCisgICAgICAgICAgICAgZm9yIChpID0gMDsgaTw3IDsgaSsrICl7CisuLi4uLi4uLi4uLi4uLi4uLi5eCislQ0MtRS1VTkRFQ0xBUkVELCBJbiB0aGlzIHN0YXRlbWVudCwgImkiIGlzIG5vdCBkZWNsYXJlZC4KK2F0IGxpbmUgbnVtYmVyIDE2IGluIGZpbGUgU1lTJERJU0s6WFRFU1RGSUxFCisKK3NvbWUgb3RoZXIgZXJyb3Igc29tZXdoZXJlIGhlcmUuCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5eCislQ0MtVy1XQVJSSU5HLCBTb3JyeSwgYnV0IG5vIGV4cGFsbmF0aW9uIGZvciBzdWNoIGFuIHdhcnJpbmcuCithdCBsaW5lIG51bWJlciAxOSBpbiBmaWxlIFNZUyRESVNLOlhURVNURklMRQorCithbmQgZmluYWxseSBzb21lIG90aGVyIGVycm9yIGV4YWN0bHkgaGVyZS4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5eCislQ0MtSS1JTkZPUk1BVElPTkFMLCBJdCBzaG91bGQgYmUgc29tZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuCithdCBsaW5lIG51bWJlciAyMCBpbiBmaWxlIFNZUyRESVNLOlhURVNURklMRQorCitEb2VzIGFueW9uZSBrbm93IHdoYXQgaXMgdGhlIHByb2JsZW0gYW5kIGhvdyB0byBjb3JyZWN0ID8/ICA6KQorZW5kIG9mIGVycm9yZmlsZQorCitzdGFydCBvZiB0ZXN0ZmlsZQorMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcKK2xpbmUgMyAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDQgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA1ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNiAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDcgIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA4ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgOSAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEzIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTUgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE2IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNyB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTggeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE5IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAyMCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMjEgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIyIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorZW5kIG9mIHRlc3RmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTBhLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDEwYS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3OGM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEwYS5vawpAQCAtMCwwICsxLDIzIEBACitzdGFydCBvZiB0ZXN0ZmlsZQorMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcKK2xpbmUgMyAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDQgIHh4eHh4eHh4eHhBeHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA1ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNiAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDcgIHh4eHh4Qnh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA4ICB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgOSAgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEwIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxMSB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTIgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEzIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTUgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE2IHh4eHh4eHh4eHhDeHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSAxNyB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTggeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDE5IHh4eHh4eHh4eHh4eHh4eHh4eHhEeHh4eHh4eHh4eAorbGluZSAyMCB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eEUKK2xpbmUgMjEgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDIyIHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorZW5kIG9mIHRlc3RmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyOTZmZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxMS5pbgpAQCAtMCwwICsxLDc3IEBACitUZXN0cyBmb3IgYXV0b2NvbW1hbmRzOgorLSBGaWxlV3JpdGVQcmUJCXdyaXRpbmcgYSBjb21wcmVzc2VkIGZpbGUKKy0gRmlsZVJlYWRQb3N0CQlyZWFkaW5nIGEgY29tcHJlc3NlZCBmaWxlCistIEJ1Zk5ld0ZpbGUJCXJlYWRpbmcgYSBmaWxlIHRlbXBsYXRlCistIEJ1ZlJlYWRQcmUJCWRlY29tcHJlc3NpbmcgdGhlIGZpbGUgdG8gYmUgcmVhZAorLSBGaWx0ZXJSZWFkUHJlCQlzdWJzdGl0dXRpbmcgY2hhcmFjdGVycyBpbiB0aGUgdGVtcCBmaWxlCistIEZpbHRlclJlYWRQb3N0CXN1YnN0aXR1dGluZyBjaGFyYWN0ZXJzIGFmdGVyIGZpbHRlcmluZworLSBGaWxlUmVhZFByZQkJc2V0IG9wdGlvbnMgZm9yIGRlY29tcHJlc3Npb24KKy0gRmlsZVJlYWRQb3N0CQlkZWNvbXByZXNzIHRoZSBmaWxlCisKK05vdGU6IFRoaXMgdGVzdCB3aWxsIGZhaWwgaWYgImd6aXAiIGlzIG5vdCBhdmFpbGFibGUuCiskR1pJUCBpcyBtYWRlIGVtcHR5LCAiLXYiIHdvdWxkIGNhdXNlIHRyb3VibGUuCitVc2UgYSBGaWxlQ2hhbmdlZFNoZWxsIGF1dG9jb21tYW5kIHRvIGF2b2lkIGEgcHJvbXB0IGZvciAiWHRlc3RmaWxlLmd6IiBiZWluZworbW9kaWZpZWQgb3V0c2lkZSBvZiBWaW0gKG5vdGljZWQgb24gU29sYXJpcykuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmxldCAkR1pJUCA9ICIiCis6YXUgRmlsZUNoYW5nZWRTaGVsbCAqIGVjaG8gImNhdWdodCBGaWxlQ2hhbmdlZFNoZWxsIgorOnNldCBiaW4KKzphdSBGaWxlV3JpdGVQcmUgICAgKi5neiAgICdbLCddIWd6aXAKKzphdSBGaWxlV3JpdGVQb3N0ICAgKi5neiAgIHVuZG8KKzovc3RhcnQgb2YgdGVzdGZpbGUvLC9lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3RmaWxlLmd6Cis6YXUgRmlsZVJlYWRQb3N0ICAgICouZ3ogICAnWywnXSFnemlwIC1kCis6JHIgWHRlc3RmaWxlLmd6ICAgICAgICAgICAgICAgICIgUmVhZCBhbmQgZGVjb21wcmVzcyB0aGUgdGVzdGZpbGUKKzo/c3RhcnRzdGFydD8sJHchIHRlc3Qub3V0ICAgICAgIiBXcml0ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUKKzphdSBCdWZOZXdGaWxlICAgICAgKi5jICAgIHJlYWQgWHRlc3QuYworZ2cvXmVuZCBvZiB0ZXN0ZmlsZQorOi9zdGFydCBvZiB0ZXN0LmMvKzEsL2VuZCBvZiB0ZXN0LmMvLTF3ISBYdGVzdC5jCis6ZSEgZm9vLmMgICAgICAgICAgICAgICAgICAgICAgICIgV2lsbCBsb2FkIFh0ZXN0LmMKKzphdSBGaWxlQXBwZW5kUHJlICAgKi5vdXQgICdbLCddcy9uZXcvTkVXLworOmF1IEZpbGVBcHBlbmRQb3N0ICAqLm91dCAgIWNhdCBYdGVzdC5jID4+dGVzdC5vdXQKKzp3Pj50ZXN0Lm91dCAgICAgICAgICAgICAgICAgICAgIiBBcHBlbmQgaXQgdG8gdGhlIG91dHB1dCBmaWxlCis6YXUhIEZpbGVBcHBlbmRQcmUKKzoiIHNldHVwIGF1dG9jb21tYW5kcyB0byBkZWNvbXByZXNzIGJlZm9yZSByZWFkaW5nIGFuZCByZS1jb21wcmVzcyBhZnRlcndhcmRzCis6YXUgQnVmUmVhZFByZSAgICAgICouZ3ogICAhZ3ppcCAtZCA8YWZpbGU+Cis6YXUgQnVmUmVhZFByZSAgICAgICouZ3ogICBjYWxsIHJlbmFtZShleHBhbmQoIjxhZmlsZT46ciIpLCBleHBhbmQoIjxhZmlsZT4iKSkKKzphdSBCdWZSZWFkUG9zdCAgICAgKi5neiAgIGNhbGwgcmVuYW1lKGV4cGFuZCgiPGFmaWxlPiIpLCBleHBhbmQoIjxhZmlsZT46ciIpKQorOmF1IEJ1ZlJlYWRQb3N0ICAgICAqLmd6ICAgIWd6aXAgPGFmaWxlPjpyCis6ZSEgWHRlc3RmaWxlLmd6ICAgICAgICAgICAgICAgICIgRWRpdCBjb21wcmVzc2VkIGZpbGUKKzp3Pj50ZXN0Lm91dCAgICAgICAgICAgICAgICAgICAgIiBBcHBlbmQgaXQgdG8gdGhlIG91dHB1dCBmaWxlCis6YXUgRmlsdGVyUmVhZFByZSAgICoub3V0ICBjYWxsIHJlbmFtZShleHBhbmQoIjxhZmlsZT4iKSwgZXhwYW5kKCI8YWZpbGU+IikuIi50IikKKzphdSBGaWx0ZXJSZWFkUHJlICAgKi5vdXQgICFzZWQgcy9lL0UvIDxhZmlsZT4udCA+PGFmaWxlPgorOmF1IEZpbHRlclJlYWRQcmUgICAqLm91dCAgIXJtIDxhZmlsZT4udAorOmF1IEZpbHRlclJlYWRQb3N0ICAqLm91dCAgJ1ssJ11zL3gvWC9nCis6ZSEgdGVzdC5vdXQgICAgICAgICAgICAgICAgICAgICIgRWRpdCB0aGUgb3V0cHV0IGZpbGUKKzoyMywkIWNhdAorOmF1ISBGaWxlUmVhZFByZSAgICAqLmd6ICAgIWd6aXAgLWQgPGFmaWxlPgorOmF1ICBGaWxlUmVhZFByZSAgICAqLmd6ICAgY2FsbCByZW5hbWUoZXhwYW5kKCI8YWZpbGU+OnIiKSwgZXhwYW5kKCI8YWZpbGU+IikpCis6YXUhIEZpbGVSZWFkUG9zdCAgICouZ3ogICAnWywnXXMvbC9MLworOiRyIFh0ZXN0ZmlsZS5neiAgICAgICAgICAgICAiIFJlYWQgY29tcHJlc3NlZCBmaWxlCis6dyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd3JpdGUgaXQsIGFmdGVyIGZpbHRlcmluZworOmF1ISAgICAgICAgICAgICAiIHJlbW92ZSBhbGwgYXV0b2NvbW1hbmRzCis6ZSAgICAgICAgICAgICAgICIgRWRpdCB0ZXN0Lm91dCBhZ2FpbgorOnNldCBub2JpbiBmZiYgICAiIHVzZSB0aGUgZGVmYXVsdCBmaWxlZm9ybWF0IGZvciB3cml0aW5nCis6dworOnFhIQorRU5EVEVTVAorCitzdGFydHN0YXJ0CitzdGFydCBvZiB0ZXN0ZmlsZQorbGluZSAyCUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5lIDMJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDQJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2xpbmUgNQl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorbGluZSA3CXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA4CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5lIDkJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDEwIEFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitlbmQgb2YgdGVzdGZpbGUKKworc3RhcnQgb2YgdGVzdC5jCisvKgorICogSGVyZSBpcyBhIG5ldyAuYyBmaWxlCisgKi8KK2VuZCBvZiB0ZXN0LmMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxMS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhjNWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDExLm9rCkBAIC0wLDAgKzEsNjEgQEAKK3N0YXJ0c3RhcnQKK3N0YXJ0IG9mIHRlc3RmaWxlCitsaW5lIDIJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2xpbmUgMwl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgNAlBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorbGluZSA1CXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA2CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5lIDcJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitsaW5lIDgJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2xpbmUgOQl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK2xpbmUgMTAgQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK2VuZCBvZiB0ZXN0ZmlsZQorCitzdGFydCBvZiB0ZXN0LmMKKy8qCisgKiBIZXJlIGlzIGEgbmV3IC5jIGZpbGUKKyAqLworZW5kIG9mIHRlc3QuYworc3RhcnQgb2YgdGVzdGZpbGUKK2xpbmUgMglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorbGluZSAzCXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorbGluZSA0CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitsaW5FIDUJWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitsaW5FIDYJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dndYeXoKK2xpbkUgNwlYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKK2xpbkUgOAlBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d1h5egorbGluRSA5CVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorbGluRSAxMCBBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d1h5egorRW5kIG9mIHRlc3RmaWxlCisKKy8qCisgKiBIRXJlIGlzIGEgTkVXIC5jIGZpbGUKKyAqLworLyoKKyAqIEhFcmUgaXMgYSBuZXcgLmMgZmlsZQorICovCitzdGFydCBvZiB0RXN0ZmlsZQorbGluRSAyCUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3WHl6CitsaW5FIDMJWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitsaW5FIDQJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dndYeXoKK2xpbkUgNQlYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKK2xpbkUgNglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d1h5egorbGluRSA3CVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorbGluRSA4CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3WHl6CitsaW5FIDkJWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCitsaW5FIDEwIEFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3WHl6CitFbmQgb2YgdGVzdGZpbGUKKy8qCisgKiBIRXJlIGlzIGEgbmV3IC5jIGZpbGUKKyAqLworc3RhcnQgb2YgdGVzdGZpTGUKK0xpbmUgMglBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorTGluZSAzCXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorTGluZSA0CUFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitMaW5lIDUJeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CitMaW5lIDYJQWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK0xpbmUgNwl4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKK0xpbmUgOAlBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorTGluZSA5CXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorTGluZSAxMCBBYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorZW5kIG9mIHRlc3RmaUxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTIuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlOWM0NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxMi5pbgpAQCAtMCwwICsxLDUyIEBACitUZXN0cyBmb3IgJ2RpcmVjdG9yeScgb3B0aW9uLgorLSAiLiIsIGluIHNhbWUgZGlyIGFzIGZpbGUKKy0gIi4vZGlyIiwgaW4gZGlyZWN0b3J5IHJlbGF0aXZlIHRvIGZpbGUKKy0gImRpciIsIGluIGRpcmVjdG9yeSByZWxhdGl2ZSB0byBjdXJyZW50IGRpcgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZXQgbm9jb21wYXRpYmxlIHZpbWluZm8rPW52aW1pbmZvCis6c2V0IGRpcj0uLH4KKzovc3RhcnQgb2YgdGVzdGZpbGUvLC9lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3QxCis6IiBkbyBhbiBscyBvZiB0aGUgY3VycmVudCBkaXIgdG8gZmluZCB0aGUgc3dhcCBmaWxlIChzaG91bGQgbm90IGJlIHRoZXJlKQorOmlmIGhhcygidW5peCIpCis6ICAhbHMgLlgqLnN3cCA+dGVzdC5vdXQKKzplbHNlCis6ICByICFscyBYKi5zd3AgPnRlc3Qub3V0Cis6ZW5kaWYKKzohZWNobyBmaXJzdCBsaW5lID4+dGVzdC5vdXQKKzplIFh0ZXN0MQorOmlmIGhhcygidW5peCIpCis6IiBEbyBhbiBscyBvZiB0aGUgY3VycmVudCBkaXIgdG8gZmluZCB0aGUgc3dhcCBmaWxlLCByZW1vdmUgdGhlIGxlYWRpbmcgZG90Cis6IiB0byBtYWtlIHRoZSByZXN1bHQgdGhlIHNhbWUgZm9yIGFsbCBzeXN0ZW1zLgorOiAgciFscyAuWCouc3dwCis6ICBzL1wuKlgvWC8KKzogIC53ID4+dGVzdC5vdXQKKzogIHVuZG8KKzplbHNlCis6ICAhbHMgWCouc3dwID4+dGVzdC5vdXQKKzplbmRpZgorOiFlY2hvIHVuZGVyIFh0ZXN0MS5zd3AgPj50ZXN0Lm91dAorOiFta2RpciBYdGVzdDIKKzpzZXQgZGlyPS4vWHRlc3QyLC4sfgorOmUgWHRlc3QxCis6IWxzIFgqLnN3cCA+PnRlc3Qub3V0Cis6IWVjaG8gdW5kZXIgdW5kZXIgPj50ZXN0Lm91dAorOiFscyBYdGVzdDIgPj50ZXN0Lm91dAorOiFlY2hvIHVuZGVyIFh0ZXN0MS5zd3AgPj50ZXN0Lm91dAorOiFta2RpciBYdGVzdC5qZQorOi9zdGFydCBvZiB0ZXN0ZmlsZS8sL2VuZCBvZiB0ZXN0ZmlsZS93ISBYdGVzdDIvWHRlc3QzCis6c2V0IGRpcj1YdGVzdC5qZSx+Cis6ZSBYdGVzdDIvWHRlc3QzCis6c3dhcAorOiFscyBYdGVzdDIgPj50ZXN0Lm91dAorOiFlY2hvIHVuZGVyIFh0ZXN0MyA+PnRlc3Qub3V0Cis6IWxzIFh0ZXN0LmplID4+dGVzdC5vdXQKKzohZWNobyB1bmRlciBYdGVzdDMuc3dwID4+dGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKworc3RhcnQgb2YgdGVzdGZpbGUKK2xpbmUgMiBBYmNkZWZnaGlqCitsaW5lIDMgQWJjZGVmZ2hpagorZW5kIG9mIHRlc3RmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTIub2sgYi9zcmMvdGVzdGRpci90ZXN0MTIub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1NjIzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxMi5vawpAQCAtMCwwICsxLDEwIEBACitmaXJzdCBsaW5lCitYdGVzdDEuc3dwCit1bmRlciBYdGVzdDEuc3dwCit1bmRlciB1bmRlcgorWHRlc3QxLnN3cAordW5kZXIgWHRlc3QxLnN3cAorWHRlc3QzCit1bmRlciBYdGVzdDMKK1h0ZXN0My5zd3AKK3VuZGVyIFh0ZXN0My5zd3AKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMy5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QxMy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhhNmZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEzLmluCkBAIC0wLDAgKzEsNTggQEAKK1Rlc3RzIGZvciBhdXRvY29tbWFuZHMgb24gOmNsb3NlIGNvbW1hbmQKKworV3JpdGUgdGhyZWUgZmlsZXMgYW5kIG9wZW4gdGhlbSwgZWFjaCBpbiBhIHdpbmRvdy4KK1RoZW4gZ28gdG8gbmV4dCB3aW5kb3csIHdpdGggYXV0b2NvbW1hbmQgdGhhdCBkZWxldGVzIHRoZSBwcmV2aW91cyBvbmUuCitEbyB0aGlzIHR3aWNlLCB3cml0aW5nIHRoZSBmaWxlLgorCitBbHNvIHRlc3QgZGVsZXRpbmcgdGhlIGJ1ZmZlciBvbiBhIFVubG9hZCBldmVudC4gIElmIHRoaXMgZ29lcyB3cm9uZyB0aGVyZQord2lsbCBiZSB0aGUgQVRURU5USU9OIHByb21wdC4KKworQWxzbyB0ZXN0IGNoYW5naW5nIGJ1ZmZlcnMgaW4gYSBCdWZEZWwgYXV0b2NvbW1hbmQuICBJZiB0aGlzIGdvZXMgd3JvbmcgdGhlcmUKK2FyZSBtbF9saW5lIGVycm9ycyBhbmQvb3IgYSBDcmFzaC4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6L15zdGFydCBvZiB0ZXN0ZmlsZS8sL15lbmQgb2YgdGVzdGZpbGUvdyEgWHRlc3RqZTEKKzovXnN0YXJ0IG9mIHRlc3RmaWxlLywvXmVuZCBvZiB0ZXN0ZmlsZS93ISBYdGVzdGplMgorOi9ec3RhcnQgb2YgdGVzdGZpbGUvLC9eZW5kIG9mIHRlc3RmaWxlL3chIFh0ZXN0amUzCis6ZSBYdGVzdGplMQorb3Rlc3RqZTEbCis6dworOnNwIFh0ZXN0amUyCitvdGVzdGplMhsKKzp3Cis6c3AgWHRlc3RqZTMKK290ZXN0amUzGworOncKKxcXCis6YXUgV2luTGVhdmUgWHRlc3RqZTIgYndpcGUKKxcXCis6dyEgdGVzdC5vdXQKKzphdSBXaW5MZWF2ZSBYdGVzdGplMSBid2lwZSBYdGVzdGplMworOmNsb3NlCis6dyA+PnRlc3Qub3V0Cis6ZSBYdGVzdGplMQorOmJ3aXBlIFh0ZXN0amUyIFh0ZXN0amUzIHRlc3Qub3V0Cis6YXUhCis6YXUhIEJ1ZlVubG9hZCBYdGVzdGplMSBid2lwZQorOmUgWHRlc3RqZTMKKzp3ID4+dGVzdC5vdXQKKzplIFh0ZXN0amUyCis6c3AgWHRlc3RqZTEKKzplCis6dyA+PnRlc3Qub3V0Cis6YXUhCis6b25seQorOmUgWHRlc3RqZTEKKzpid2lwZSBYdGVzdGplMiBYdGVzdGplMyB0ZXN0Lm91dCB0ZXN0MTMuaW4KKzphdSBCdWZXaXBlb3V0IFh0ZXN0amUxIGJ1ZiBYdGVzdGplMQorOmJ3aXBlCis6dyA+PnRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKK3N0YXJ0IG9mIHRlc3RmaWxlCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxMy5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxMy5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFmYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDEzLm9rCkBAIC0wLDAgKzEsMzAgQEAKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUxCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUxCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUzCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUyCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKK3N0YXJ0IG9mIHRlc3RmaWxlCit0ZXN0amUxCisJY29udGVudHMKKwljb250ZW50cworCWNvbnRlbnRzCitlbmQgb2YgdGVzdGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxNC5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QxNC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZiOTU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE0LmluCkBAIC0wLDAgKzEsNjUgQEAKK1Rlc3RzIGZvciAidmFCaUIiLCBlbmQgY291bGQgYmUgd3JvbmcuCitBbHNvIHRlc3QgIjpzL3BhdC9zdWIvIiB3aXRoIGRpZmZlcmVudCB+cyBpbiBzdWIuCitBbHNvIHRlc3QgZm9yIF5WeGZmIGFuZCBeVm8xMjMgaW4gSW5zZXJ0IG1vZGUuCitBbHNvIHRlc3QgIlttIiwgIl1tIiwgIltNIiBhbmQgIl1NIgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9TdGFydCBjdXJzb3IgaGVyZQordmFCaUJEOj9CdWc/LC9QaWVjZS8tMnchIHRlc3Qub3V0CisvXi0gQnVnCis6cy91L351fi8KKzpzL2kvfnV+LworOnMvby9+fn4vCis6LncgPj50ZXN0Lm91dAorOmlmIGhhcygiZWJjZGljIikKKzogbGV0IHR0ID0gIm9cPEMtVj4xOTNcPEMtVj54YzJcPEMtVj5vMzAzIFw8Qy1WPjkwYVw8Qy1WPnhmZ1w8Qy1WPm81NzhcPEVzYz4iCis6ZWxzZQorOiBsZXQgdHQgPSAib1w8Qy1WPjY1XDxDLVY+eDQyXDxDLVY+bzEwMyBcPEMtVj4zM2FcPEMtVj54ZmdcPEMtVj5vNzhcPEVzYz4iCis6ZW5kaWYKKzpleGUgIm5vcm1hbCAiIC4gdHQKKzoudyA+PnRlc3Qub3V0Cis6c2V0IHZiCisvXlBpZWNlCisyXW1hQRs6LncgPj50ZXN0Lm91dAoral1tYUIbOi53ID4+dGVzdC5vdXQKK11tYUMbOi53ID4+dGVzdC5vdXQKK1ttYUQbOi53ID4+dGVzdC5vdXQKK2syW21hRRs6LncgPj50ZXN0Lm91dAorM1ttYUYbOi53ID4+dGVzdC5vdXQKK11NYUcbOi53ID4+dGVzdC5vdXQKK2oyXU1hSBs6LncgPj50ZXN0Lm91dAorXU1dTWFJGzoudyA+PnRlc3Qub3V0CisyW01hShs6LncgPj50ZXN0Lm91dAora1tNYUsbOi53ID4+dGVzdC5vdXQKKzNbTWFMGzoudyA+PnRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKy0gQnVnIGluICJ2UFBQUCIgb24gdGhpcyB0ZXh0IChXZWJiKToKKwl7CisJCWNtZDsKKwkJeworCQkJY21kOwkvKiA8LS0gU3RhcnQgY3Vyc29yIGhlcmUgKi8KKwkJCXsKKwkJCX0KKwkJfQorCX0KKworUGllY2Ugb2YgSmF2YQoreworCXR0IG0xIHsKKwkJdDE7CisJfSBlMQorCisJdHQgbTIgeworCQl0MjsKKwl9IGUyCisKKwl0dCBtMyB7CisJCWlmICh4KQorCQl7CisJCQl0MzsKKwkJfQorCX0gZTMKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxNC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QxNC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODkzYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE0Lm9rCkBAIC0wLDAgKzEsMTcgQEAKKy0gQnVnIGluICJ2UFBQUCIgb24gdGhpcyB0ZXh0IChXZWJiKToKKwl7CisJfQorLSBCdWcgdXV1biAidlBQUFAiIHV1dXV1dXV1dW4gdGhpcyB0ZXh0IChXZWJiKToKK0FCQyAhYQ9nBzgKKwl0dCBtMSB7QQorCXR0IG0yIHtCCisJdHQgbTMge0MKKwl0dCBtMyB7REMKKwl0dCBtMSB7RUEKK3tGCisJfUcgZTEKKwl9SCBlMworfUkKKwl9SkggZTMKKwl9SyBlMgore0xGCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTUuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2NTI5YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxNS5pbgpAQCAtMCwwICsxLDEzNiBAQAorVGVzdHMgZm9yIDpyaWdodCBvbiB0ZXh0IHdpdGggZW1iZWRkZWQgVEFCLgorQWxzbyB0ZXN0IGZvcm1hdHRpbmcgYSBwYXJhZ3JhcGguCitBbHNvIHRlc3QgdW5kbyBhZnRlciAiOiVzIiBhbmQgZm9ybWF0dGluZy4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IHR3PTY1CisKKzovXlxzKnRlc3QgZm9yIDpsZWZ0LywvXlxzKnRlc3QgZm9yIDpjZW50ZXIvIGxlZnQKKzovXlxzKnRlc3QgZm9yIDpjZW50ZXIvLC9eXHMqdGVzdCBmb3IgOnJpZ2h0LyBjZW50ZXIKKzovXlxzKnRlc3QgZm9yIDpyaWdodC8sL154eHgvLTEgcmlnaHQKKzpzZXQgZm8rPXRjcm9xbCB0dz03MgorL3h4eHh4eHh4JAorMGdxNmtrCis6c2V0IG5vY3AgdmltaW5mbys9bnZpbWluZm8KKzoiIHVuZG8vcmVkbyBoZXJlIHRvIG1ha2UgdGhlIG5leHQgdW5kbyBvbmx5IHdvcmsgb24gdGhlIGZvbGxvd2luZyBjaGFuZ2VzCit1EgorOm1hcCBnZyA6LiwuKzJzL14veC88Q1I+a2s6c2V0IHR3PTM8Q1I+Z3FxCisvXmFhCitnZ3UKKzo/dGVzdCBmb3IgOmxlZnQ/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisJdGVzdCBmb3IgOmxlZnQKKwkgIGEJCWEKKwkgICAgZmEJCWEKKwkgIGRmYQkJYQorCSAgICAgICAgc2RmYQkJYQorCSAgYXNkZmEJCWEKKwkgICAgICAgIHhhc2RmYQkJYQorYXN4eGRmYQkJYQorCisJdGVzdCBmb3IgOmNlbnRlcgorCSAgYQkJYQorCSAgICBmYQkJYWZkIGFzZGYKKwkgIGRmYQkJYQorCSAgICAgICAgc2RmYQkJYWZkIGFzZGYKKwkgIGFzZGZhCQlhCisJICAgICAgICB4YXNkZmEJCWFzZGZhc2RmYXNkZmFzZGZhc2RmCithc3h4ZGZhCQlhCisKKwl0ZXN0IGZvciA6cmlnaHQKKwlhCQlhCisJZmEJCWEKKwlkZmEJCWEKKwlzZGZhCQlhCisJYXNkZmEJCWEKKwl4YXNkZmEJCWEKKwlhc3h4ZGZhCQlhCisJYXN4YTtvZmEJCWEKKwlhc2RmYXF3ZXIJCWEKKwlhCQlheAorCWZhCQlheAorCWRmYQkJYXgKKwlzZGZhCQlheAorCWFzZGZhCQlheAorCXhhc2RmYQkJYXgKKwlhc3h4ZGZhCQlheAorCWFzeGE7b2ZhCQlheAorCWFzZGZhcXdlcgkJYXgKKwlhCQlheHgKKwlmYQkJYXh4CisJZGZhCQlheHgKKwlzZGZhCQlheHgKKwlhc2RmYQkJYXh4CisJeGFzZGZhCQlheHgKKwlhc3h4ZGZhCQlheHgKKwlhc3hhO29mYQkJYXh4CisJYXNkZmFxd2VyCQlheHgKKwlhCQlheHh4CisJZmEJCWF4eHgKKwlkZmEJCWF4eHgKKwlzZGZhCQlheHh4CisJYXNkZmEJCWF4eHgKKwl4YXNkZmEJCWF4eHgKKwlhc3h4ZGZhCQlheHh4CisJYXN4YTtvZmEJCWF4eHgKKwlhc2RmYXF3ZXIJCWF4eHgKKwlhCQlheHh4bworCWZhCQlheHh4bworCWRmYQkJYXh4eG8KKwlzZGZhCQlheHh4bworCWFzZGZhCQlheHh4bworCXhhc2RmYQkJYXh4eG8KKwlhc3h4ZGZhCQlheHh4bworCWFzeGE7b2ZhCQlheHh4bworCWFzZGZhcXdlcgkJYXh4eG8KKwlhCQlheHh4b2kKKwlmYQkJYXh4eG9pCisJZGZhCQlheHh4b2kKKwlzZGZhCQlheHh4b2kKKwlhc2RmYQkJYXh4eG9pCisJeGFzZGZhCQlheHh4b2kKKwlhc3h4ZGZhCQlheHh4b2kKKwlhc3hhO29mYQkJYXh4eG9pCisJYXNkZmFxd2VyCQlheHh4b2kKKwlhCQlheHh4b2lrCisJZmEJCWF4eHhvaWsKKwlkZmEJCWF4eHhvaWsKKwlzZGZhCQlheHh4b2lrCisJYXNkZmEJCWF4eHhvaWsKKwl4YXNkZmEJCWF4eHhvaWsKKwlhc3h4ZGZhCQlheHh4b2lrCisJYXN4YTtvZmEJCWF4eHhvaWsKKwlhc2RmYXF3ZXIJCWF4eHhvaWsKKwlhCQlheHh4b2lrZQorCWZhCQlheHh4b2lrZQorCWRmYQkJYXh4eG9pa2UKKwlzZGZhCQlheHh4b2lrZQorCWFzZGZhCQlheHh4b2lrZQorCXhhc2RmYQkJYXh4eG9pa2UKKwlhc3h4ZGZhCQlheHh4b2lrZQorCWFzeGE7b2ZhCQlheHh4b2lrZQorCWFzZGZhcXdlcgkJYXh4eG9pa2UKKwlhCQlheHh4b2lrZXkKKwlmYQkJYXh4eG9pa2V5CisJZGZhCQlheHh4b2lrZXkKKwlzZGZhCQlheHh4b2lrZXkKKwlhc2RmYQkJYXh4eG9pa2V5CisJeGFzZGZhCQlheHh4b2lrZXkKKwlhc3h4ZGZhCQlheHh4b2lrZXkKKwlhc3hhO29mYQkJYXh4eG9pa2V5CisJYXNkZmFxd2VyCQlheHh4b2lrZXkKKworeHh4eHggeHggeHh4eHh4IAoreHh4eHh4eCB4eHh4eHh4eHggeHh4IHh4eHggeHh4eHggeHh4eHggeHh4IHh4Cit4eHh4eHh4eHh4eHh4eHh4eHggeHh4eHggeHh4eCwgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHggeHggeHgKK3h4IHh4eHh4eHguIHh4eHggeHh4eC4KKworPiB4eCB4eCwgeHh4eCB4eHh4IHh4eCB4eHh4IHh4eCB4eHh4eCB4eHggeHh4IHh4eHh4eHggeHh4IHh4eHh4Cis+IHh4eHh4eCB4eHh4eHh4OiB4eHh4IHh4eHh4eHgsIHh4IHh4eHh4eCB4eHh4IHh4eHh4eHh4eHgKKworYWEgYWEgYWEgYWEKK2JiIGJiIGJiIGJiCitjYyBjYyBjYyBjYwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE1Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE1Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDlmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTUub2sKQEAgLTAsMCArMSwxMTEgQEAKK3Rlc3QgZm9yIDpsZWZ0CithCQlhCitmYQkJYQorZGZhCQlhCitzZGZhCQlhCithc2RmYQkJYQoreGFzZGZhCQlhCithc3h4ZGZhCQlhCisKKwkJCXRlc3QgZm9yIDpjZW50ZXIKKwkJCSBhCQlhCisJCSAgICAgIGZhCQlhZmQgYXNkZgorCQkJIGRmYQkJYQorCQkgICAgc2RmYQkJYWZkIGFzZGYKKwkJCSBhc2RmYQkJYQorCSAgICAgIHhhc2RmYQkJYXNkZmFzZGZhc2RmYXNkZmFzZGYKKwkJCWFzeHhkZmEJCWEKKworCQkJCQkJICB0ZXN0IGZvciA6cmlnaHQKKwkJCQkJCSAgICAgIGEJCWEKKwkJCQkJCSAgICAgZmEJCWEKKwkJCQkJCSAgICBkZmEJCWEKKwkJCQkJCSAgIHNkZmEJCWEKKwkJCQkJCSAgYXNkZmEJCWEKKwkJCQkJCSB4YXNkZmEJCWEKKwkJCQkJCWFzeHhkZmEJCWEKKwkJCQkJICAgICAgIGFzeGE7b2ZhCQlhCisJCQkJCSAgICAgIGFzZGZhcXdlcgkJYQorCQkJCQkgICAgICBhCQlheAorCQkJCQkgICAgIGZhCQlheAorCQkJCQkgICAgZGZhCQlheAorCQkJCQkgICBzZGZhCQlheAorCQkJCQkgIGFzZGZhCQlheAorCQkJCQkgeGFzZGZhCQlheAorCQkJCQlhc3h4ZGZhCQlheAorCQkJCSAgICAgICBhc3hhO29mYQkJYXgKKwkJCQkgICAgICBhc2RmYXF3ZXIJCWF4CisJCQkJCSAgICAgIGEJCWF4eAorCQkJCQkgICAgIGZhCQlheHgKKwkJCQkJICAgIGRmYQkJYXh4CisJCQkJCSAgIHNkZmEJCWF4eAorCQkJCQkgIGFzZGZhCQlheHgKKwkJCQkJIHhhc2RmYQkJYXh4CisJCQkJCWFzeHhkZmEJCWF4eAorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4CisJCQkJICAgICAgYXNkZmFxd2VyCQlheHgKKwkJCQkJICAgICAgYQkJYXh4eAorCQkJCQkgICAgIGZhCQlheHh4CisJCQkJCSAgICBkZmEJCWF4eHgKKwkJCQkJICAgc2RmYQkJYXh4eAorCQkJCQkgIGFzZGZhCQlheHh4CisJCQkJCSB4YXNkZmEJCWF4eHgKKwkJCQkJYXN4eGRmYQkJYXh4eAorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eAorCQkJCSAgICAgIGFzZGZhcXdlcgkJYXh4eAorCQkJCQkgICAgICBhCQlheHh4bworCQkJCQkgICAgIGZhCQlheHh4bworCQkJCQkgICAgZGZhCQlheHh4bworCQkJCQkgICBzZGZhCQlheHh4bworCQkJCQkgIGFzZGZhCQlheHh4bworCQkJCQkgeGFzZGZhCQlheHh4bworCQkJCQlhc3h4ZGZhCQlheHh4bworCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG8KKwkJCQkgICAgICBhc2RmYXF3ZXIJCWF4eHhvCisJCQkJCSAgICAgIGEJCWF4eHhvaQorCQkJCQkgICAgIGZhCQlheHh4b2kKKwkJCQkJICAgIGRmYQkJYXh4eG9pCisJCQkJCSAgIHNkZmEJCWF4eHhvaQorCQkJCQkgIGFzZGZhCQlheHh4b2kKKwkJCQkJIHhhc2RmYQkJYXh4eG9pCisJCQkJCWFzeHhkZmEJCWF4eHhvaQorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9pCisJCQkJICAgICAgYXNkZmFxd2VyCQlheHh4b2kKKwkJCQkJICAgICAgYQkJYXh4eG9paworCQkJCQkgICAgIGZhCQlheHh4b2lrCisJCQkJCSAgICBkZmEJCWF4eHhvaWsKKwkJCQkJICAgc2RmYQkJYXh4eG9paworCQkJCQkgIGFzZGZhCQlheHh4b2lrCisJCQkJCSB4YXNkZmEJCWF4eHhvaWsKKwkJCQkJYXN4eGRmYQkJYXh4eG9paworCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9paworCQkJCSAgICAgIGFzZGZhcXdlcgkJYXh4eG9paworCQkJCQkgICAgICBhCQlheHh4b2lrZQorCQkJCQkgICAgIGZhCQlheHh4b2lrZQorCQkJCQkgICAgZGZhCQlheHh4b2lrZQorCQkJCQkgICBzZGZhCQlheHh4b2lrZQorCQkJCQkgIGFzZGZhCQlheHh4b2lrZQorCQkJCQkgeGFzZGZhCQlheHh4b2lrZQorCQkJCQlhc3h4ZGZhCQlheHh4b2lrZQorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9pa2UKKwkJCQkgICAgICBhc2RmYXF3ZXIJCWF4eHhvaWtlCisJCQkJCSAgICAgIGEJCWF4eHhvaWtleQorCQkJCQkgICAgIGZhCQlheHh4b2lrZXkKKwkJCQkJICAgIGRmYQkJYXh4eG9pa2V5CisJCQkJCSAgIHNkZmEJCWF4eHhvaWtleQorCQkJCQkgIGFzZGZhCQlheHh4b2lrZXkKKwkJCQkJIHhhc2RmYQkJYXh4eG9pa2V5CisJCQkJCWFzeHhkZmEJCWF4eHhvaWtleQorCQkJCSAgICAgICBhc3hhO29mYQkJYXh4eG9pa2V5CisJCQkJICAgICAgYXNkZmFxd2VyCQlheHh4b2lrZXkKKworeHh4eHggeHggeHh4eHh4IHh4eHh4eHggeHh4eHh4eHh4IHh4eCB4eHh4IHh4eHh4IHh4eHh4IHh4eCB4eAoreHh4eHh4eHh4eHh4eHh4eHh4IHh4eHh4IHh4eHgsIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4IHh4IHh4IHh4IHh4eHh4eHguCit4eHh4IHh4eHguCisKKz4geHggeHgsIHh4eHggeHh4eCB4eHggeHh4eCB4eHggeHh4eHggeHh4IHh4eCB4eHh4eHh4IHh4eCB4eHh4eCB4eHh4eHgKKz4geHh4eHh4eDogeHh4eCB4eHh4eHh4LCB4eCB4eHh4eHggeHh4eCB4eHh4eHh4eHh4CisKK2FhIGFhIGFhIGFhCitiYiBiYiBiYiBiYgorY2MgY2MgY2MgY2MKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QxNi5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QxNi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmMwZDUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE2LmluCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIGZvciByZXNldHRpbmcgInNlY3VyZSIgZmxhZyBhZnRlciBHVUkgaGFzIHN0YXJ0ZWQuCisKK1NUQVJUVEVTVAorOnNldCBleHJjIHNlY3VyZQorOmd1aSAtZgorOi4sJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKwlqdXN0IHNvbWUgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE2Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE2Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTJlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTYub2sKQEAgLTAsMCArMSwyIEBACisKKwlqdXN0IHNvbWUgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE3LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDE3LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OTE0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTcuaW4KQEAgLTAsMCArMSwyNyBAQAorVGVzdHMgZm9yICJnZiIgb24gJHtWQVJ9CisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmlmIGhhcygiZWJjZGljIikKKzogc2V0IGlzZm5hbWU9QCwyNDAtMjQ5LC8sLiwtLF8sKywsLCQsOix+LHssfQorOmVsc2UKKzogc2V0IGlzZm5hbWU9QCw0OC01NywvLC4sLSxfLCssLCwkLDosfix7LH0KKzplbmRpZgorOmlmIGhhcygidW5peCIpCis6bGV0ICRDRElSID0gIi4iCisvQ0RJUgorOmVsc2UKKzppZiBoYXMoImFtaWdhIikKKzpsZXQgJFRESVIgPSAiL3Rlc3RkaXIiCis6ZWxzZQorOmxldCAkVERJUiA9ICIuIgorOmVuZGlmCisvVERJUgorOmVuZGlmCitnZgorOnchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKwkke0NESVJ9L3Rlc3QxN2EuaW4KKwkkVERJUi90ZXN0MTdhLmluCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTcub2sgYi9zcmMvdGVzdGRpci90ZXN0MTcub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjMzUwNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxNy5vawpAQCAtMCwwICsxLDMgQEAKK1RoaXMgZmlsZSBpcyBqdXN0IHRvIHRlc3QgImdmIiBpbiB0ZXN0IDE3LgorVGhlIGNvbnRlbnRzIGlzIG5vdCBpbXBvcnRlbnQuCitKdXN0IHRlc3RpbmchCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTdhLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDE3YS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGMzNTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDE3YS5pbgpAQCAtMCwwICsxLDMgQEAKK1RoaXMgZmlsZSBpcyBqdXN0IHRvIHRlc3QgImdmIiBpbiB0ZXN0IDE3LgorVGhlIGNvbnRlbnRzIGlzIG5vdCBpbXBvcnRlbnQuCitKdXN0IHRlc3RpbmchCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTguaW4gYi9zcmMvdGVzdGRpci90ZXN0MTguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmZDkyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxOC5pbgpAQCAtMCwwICsxLDE2IEBACitUZXN0cyBmb3Igbm90IGRvaW5nIHNtYXJ0IGluZGVudGluZyB3aGVuIGl0IGlzbid0IHNldC4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IG5vY2luIG5vc2kgYWkKKy9zb21lCisyY2MjdGVzdBsKKzo/c3RhcnQ/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCitzdGFydCB0ZXh0CisJCXNvbWUgdGVzdCB0ZXh0CisJCXRlc3QgdGV4dAordGVzdCB0ZXh0CisJCXRlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE4Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE4Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTk3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTgub2sKQEAgLTAsMCArMSw0IEBACitzdGFydCB0ZXh0CisJCSN0ZXN0Cit0ZXN0IHRleHQKKwkJdGVzdCB0ZXh0CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MTkuaW4gYi9zcmMvdGVzdGRpci90ZXN0MTkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5YjQyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QxOS5pbgpAQCAtMCwwICsxLDIzIEBACitUZXN0cyBmb3IgInI8VGFiPiIgd2l0aCAnc21hcnR0YWInIGFuZCAnZXhwYW5kdGFiJyBzZXQvbm90IHNldC4KKworU1RBUlRURVNUCis6c2V0IHNtYXJ0dGFiIGV4cGFuZHRhYiB0cz04IHN3PTQKKy9zb21lCityCTpzZXQgbm9leHBhbmR0YWIKKy9vdGhlcgorcgkKKzoiIFRlc3QgcmVwbGFjaW5nIHdpdGggVGFicyBhbmQgdGhlbiBiYWNrc3BhY2luZyB0byB1bmRvIGl0Ciswd1IJCQkICAgbCis6IiBUZXN0IHJlcGxhY2luZyB3aXRoIFRhYnMKKzB3UgkJCRsKKzo/XnN0YXJ0PywkdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKworc3RhcnQgdGV4dAorCQlzb21lIHRlc3QgdGV4dAordGVzdCB0ZXh0CisJCW90aGVyIHRlc3QgdGV4dAorICAgIGEgY2RlCisgICAgZiBnaGkKK3Rlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDE5Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDE5Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGViNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MTkub2sKQEAgLTAsMCArMSw3IEBACitzdGFydCB0ZXh0CisJCSAgICBvbWUgdGVzdCB0ZXh0Cit0ZXN0IHRleHQKKwkJICAgIHRoZXIgdGVzdCB0ZXh0CisgICAgYSBjZGUKKyAgICAJCWhpCit0ZXN0IHRleHQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiNWE1MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyLmluCkBAIC0wLDAgKzEsMjkgQEAKKworVGhpcyBpcyBhIHRlc3QgaWYgYSBVUkwgaXMgcmVjb2duaXplZCBieSAiZ2YiLCB3aXRoIHRoZSBjdXJzb3IgYmVmb3JlIGFuZAorYWZ0ZXIgdGhlICI6Ly8iLiAgQWxzbyB0ZXN0ICI6XFwiLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9eZmlyc3QKKy90bXAKKzpjYWxsIGFwcGVuZCgwLCBleHBhbmQoIjxjZmlsZT4iKSkKKy9ec2Vjb25kCisvVVJMCis6Y2FsbCBhcHBlbmQoMSwgZXhwYW5kKCI8Y2ZpbGU+IikpCis6aWYgaGFzKCJlYmNkaWMiKQorOiBzZXQgaXNmPUAsMjQwLTI0OSwvLC4sLSxfLCssLCwkLDosfixcCis6ZWxzZQorOiBzZXQgaXNmPUAsNDgtNTcsLywuLC0sXywrLCwsJCw6LH4sXAorOmVuZGlmCisvXnRoaXJkCisvbmFtZQorOmNhbGwgYXBwZW5kKDIsIGV4cGFuZCgiPGNmaWxlPiIpKQorL15mb3VydGgKKy9VUkwKKzpjYWxsIGFwcGVuZCgzLCBleHBhbmQoIjxjZmlsZT4iKSkKKzVHZEc6d3EhIHRlc3Qub3V0CitFTkRURVNUCitmaXJzdCB0ZXN0IGZvciBVUkw6Ly9tYWNoaW5lLm5hbWUvdG1wL3ZpbXRlc3QyYSBhbmQgb3RoZXIgdGV4dAorc2Vjb25kIHRlc3QgZm9yIFVSTDovL21hY2hpbmUubmFtZS90bXAvdmltdGVzdDJiLiBBbmQgb3RoZXIgdGV4dAordGhpcmQgdGVzdCBmb3IgVVJMOlxcbWFjaGluZS5uYW1lXHZpbXRlc3QyYyBhbmQgb3RoZXIgdGV4dAorZm91cnRoIHRlc3QgZm9yIFVSTDpcXG1hY2hpbmUubmFtZVx0bXBcdmltdGVzdDJkLCBhbmQgb3RoZXIgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIub2sgYi9zcmMvdGVzdGRpci90ZXN0Mi5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjk3ODgyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDIub2sKQEAgLTAsMCArMSw0IEBACitVUkw6Ly9tYWNoaW5lLm5hbWUvdG1wL3ZpbXRlc3QyYQorVVJMOi8vbWFjaGluZS5uYW1lL3RtcC92aW10ZXN0MmIKK1VSTDpcXG1hY2hpbmUubmFtZVx2aW10ZXN0MmMKK1VSTDpcXG1hY2hpbmUubmFtZVx0bXBcdmltdGVzdDJkCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MjAuaW4gYi9zcmMvdGVzdGRpci90ZXN0MjAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwMWM3NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyMC5pbgpAQCAtMCwwICsxLDIyIEBACitUZXN0cyBCbG9ja3dpc2UgVmlzdWFsIHdoZW4gdGhlcmUgYXJlIFRBQnMgYmVmb3JlIHRoZSB0ZXh0LgorRmlyc3QgdGVzdCBmb3IgdW5kbyB3b3JraW5nIHByb3Blcmx5IHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzIGZyb20gYSByZWdpc3Rlci4KK0Fsc28gdGVzdCB0aGlzIGluIGFuIGVtcHR5IGJ1ZmZlci4KKworU1RBUlRURVNUCis6c28gdGlueS52aW0KK0cwImF5JGtAYXUKKzpuZXcKK0BhdVk6cXVpdCEKK0dQCisvc3RhcnQgaGVyZSQKKxZqamxsZAorOi9oZXJlJC8sJC0xdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKwordGVzdCB0ZXh0IHRlc3QgdGV4IHN0YXJ0IGhlcmUKKwkJc29tZSB0ZXh0CisJCXRlc3QgdGV4dAordGVzdCB0ZXh0CisKK094G2pBeRtrZGQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyMC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QyMC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjA0ZTdjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDIwLm9rCkBAIC0wLDAgKzEsNiBAQAordGVzdCB0ZXh0IHRlc3QgdGV4IHJ0IGhlcmUKKwkJc29tZXh0CisJCXRlc2V4dAordGVzdCB0ZXh0CisKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIxLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDIxLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MWI5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjEuaW4KQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgZm9yIFsgQ1RSTC1JIHdpdGggYSBjb3VudCBhbmQgQ1RSTC1XIENUUkwtSSB3aXRoIGEgY291bnQKKworU1RBUlRURVNUCis6c28gc21hbGwudmltCisvc3RhcnQKKzZbCToudyEgdGVzdC5vdXQKKz9zdGFydCBoZXJlCis2Fwk6LncgPj50ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisjaW5jbHVkZSB0ZXN0MjEuaW4KKworLyogdGVzdCB0ZXh0IHRlc3QgdGV4IHN0YXJ0IGhlcmUKKwkJc29tZSB0ZXh0CisJCXRlc3QgdGV4dAorCQlzdGFydCBPSyBpZiBmb3VuZCB0aGlzIGxpbmUKKwlzdGFydCBmb3VuZCB3cm9uZyBsaW5lCit0ZXN0IHRleHQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyMS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QyMS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWYxYjc1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDIxLm9rCkBAIC0wLDAgKzEsMiBAQAorCQlzdGFydCBPSyBpZiBmb3VuZCB0aGlzIGxpbmUKKwkJc3RhcnQgT0sgaWYgZm91bmQgdGhpcyBsaW5lCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MjIuaW4gYi9zcmMvdGVzdGRpci90ZXN0MjIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjYzA0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyMi5pbgpAQCAtMCwwICsxLDEzIEBACitUZXN0cyBmb3IgZmlsZSB3aXRoIHNvbWUgbGluZXMgZW5kaW5nIGluIENUUkwtTSwgc29tZSBub3QNCisNCitTVEFSVFRFU1QKKzpzZXQgdGEgdHgKKzplIQorOiQtMywkdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKwordGhpcyBsaW5lcyBlbmRzIGluIGENCit0aGlzIG9uZSBkb2Vzbid0Cit0aGlzIG9uZSBkb2VzDQorYW5kIHRoZSBsYXN0IG9uZSBkb2Vzbid0CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MjIub2sgYi9zcmMvdGVzdGRpci90ZXN0MjIub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmZjg5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyMi5vawpAQCAtMCwwICsxLDQgQEAKK3RoaXMgbGluZXMgZW5kcyBpbiBhDQordGhpcyBvbmUgZG9lc24ndAordGhpcyBvbmUgZG9lcw0KK2FuZCB0aGUgbGFzdCBvbmUgZG9lc24ndApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDIzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMGU2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjMuaW4KQEAgLTAsMCArMSwxNSBAQAorVGVzdHMgZm9yIGNvbXBsaWNhdGVkICsgYXJndW1lbnQgdG8gOmVkaXQgY29tbWFuZAorCitTVEFSVFRFU1QKKzokLTF3ISBYZmlsZTEKKzokdyEgWGZpbGUyCis6ZWRpdCArMXxzL3wvUElQRS98dyBYZmlsZTF8IGUgWGZpbGUyfDEgfCBzL1wvL1NMQVNIL3x3Cis6dyEgdGVzdC5vdXQKKzplIFhmaWxlMQorOncgPj4gdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKworVGhlIHJlc3VsdCBzaG91bGQgYmUgaW4gWGZpbGUxOiAiZm9vUElQRWJhciIsIGluIFhmaWxlMjogImZvb1NMQVNIYmFyIgorZm9vfGJhcgorZm9vL2JhcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDIzLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDIzLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOTMwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjMub2sKQEAgLTAsMCArMSwyIEBACitmb29TTEFTSGJhcgorZm9vUElQRWJhcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI0LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDI0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzIxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjQuaW4KQEAgLTAsMCArMSwyMSBAQAorVGVzdHMgZm9yIHJlZ2V4cCB3aXRoIGJhY2tzbGFzaCBhbmQgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIGluc2lkZSBbXQorCitTVEFSVFRFU1QKKzpzZXQgbm9jb21wYXRpYmxlIHZpbWluZm8rPW52aW1pbmZvCisvW1x4XQoreC9bXHRcXV0KK3gvW115XQoreC9bXF1dCit4L1t5Xl0KK3gvWyR5XQoreDo/c3RhcnQ/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCitzdGFydAordGVzdCBcdGV4dCB0ZXN0IHRleHQKK3Rlc3QgCXRleHQgdGVzdCB0ZXh0Cit0ZXN0IHRleHQgXXRlc3QgdGV4dAordGVzdCBddGV4dCB0ZXN0IHRleHQKK3Rlc3QgdGV4dCB0ZV5zdCB0ZXh0Cit0ZXN0IHRlJHh0IHRlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI0Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI0Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmI1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjQub2sKQEAgLTAsMCArMSw3IEBACitzdGFydAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dAordGVzdCB0ZXh0IHRlc3QgdGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI1LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDI1LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMzk4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjUuaW4KQEAgLTAsMCArMSwzMSBAQAorVGVzdCBmb3IganVtcGluZyB0byBhIHRhZyB3aXRoICdoaWRkZW4nIHNldCwgd2l0aCBzeW1ib2xpYyBsaW5rIGluIHBhdGggb2YgdGFnLgorVGhpcyBvbmx5IHdvcmtzIGZvciBVbml4LCBiZWNhdXNlIG9mIHRoZSBzeW1ib2xpYyBsaW5rLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZXQgaGlkZGVuCis6IiBDcmVhdGUgYSBsaW5rIGZyb20gdGVzdDI1LmRpciB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCis6IXJtIC1mIHRlc3QyNS5kaXIKKzohbG4gLXMgLiB0ZXN0MjUuZGlyCis6IiBDcmVhdGUgdGFncy50ZXh0LCB3aXRoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBuYW1lIGluc2VydGVkLgorL3RhZ3MgbGluZQorOnIgIXB3ZAorZCQvdGVzdAoraFA6LnchIHRhZ3MudGVzdAorOiIgVHJ5IGp1bXBpbmcgdG8gYSB0YWcgaW4gdGhlIGN1cnJlbnQgZmlsZSwgYnV0IHdpdGggYSBwYXRoIHRoYXQgY29udGFpbnMgYQorOiIgc3ltYm9saWMgbGluay4gIFdoZW4gd3JvbmcsIHRoaXMgd2lsbCBnaXZlIHRoZSBBVFRFTlRJT04gbWVzc2FnZS4gIFRoZSBuZXh0Cis6IiBzcGFjZSB3aWxsIHRoZW4gYmUgZWF0ZW4gYnkgaGl0LXJldHVybiwgaW5zdGVhZCBvZiBtb3ZpbmcgdGhlIGN1cnNvciB0byAnZCcuCis6c2V0IHRhZ3M9dGFncy50ZXN0CitHHSB4Oi53ISB0ZXN0Lm91dAorOiFybSAtZiB0ZXN0MjUuZGlyIHRhZ3MudGVzdAorOnFhIQorRU5EVEVTVAorCit0YWdzIGxpbmU6CitTRUNUSU9OX09GRgkvdGVzdDI1LmRpci90ZXN0MjUuaW4JL14jZGVmaW5lICBTRUNUSU9OX09GRiAgMyQvCisKKy8qdHguYyovCisjZGVmaW5lICBTRUNUSU9OX09GRiAgMworI2RlZmluZSAgTlVNX1NFQ1RJT05TIDMKKworU0VDVElPTl9PRkYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNS5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QyNS5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGZjMDcwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI1Lm9rCkBAIC0wLDAgKzEgQEAKKyNlZmluZSAgU0VDVElPTl9PRkYgIDMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNi5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QyNi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjU3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI2LmluCkBAIC0wLDAgKzEsNDMgQEAKK1Rlc3QgZm9yIDpleGVjdXRlLCA6d2hpbGUgYW5kIDppZgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KK210OmxldCBpID0gMAorOndoaWxlIGkgPCAxMgorOiAgbGV0IGkgPSBpICsgMQorOiAgaWYgaGFzKCJlYmNkaWMiKQorOiAgICBleGVjdXRlICJub3JtYWwgbyIgLiBpIC4gIlwwNDciCis6ICBlbHNlCis6ICAgIGV4ZWN1dGUgIm5vcm1hbCBvIiAuIGkgLiAiXDAzMyIKKzogIGVuZGlmCis6ICBpZiBpICUgMgorOiAgICBub3JtYWwgQXgWGworOiAgICBpZiBpID09IDkKKzogICAgICBicmVhaworOiAgICBlbmRpZgorOiAgICBpZiBpID09IDUKKzogICAgICBjb250aW51ZQorOiAgICBlbHNlCis6ICAgICAgbGV0IGogPSA5Cis6ICAgICAgd2hpbGUgaiA+IDAKKzogICAgICAgIGlmIGhhcygiZWJjZGljIikKKzogICAgICAgICAgZXhlY3V0ZSAibm9ybWFsIiBqIC4gImEiIC4gaiAuICJceDI3IgorOiAgICAgICAgZWxzZQorOiAgICAgICAgICBleGVjdXRlICJub3JtYWwiIGogLiAiYSIgLiBqIC4gIlx4MWIiCis6ICAgICAgICBlbmRpZgorOiAgICAgICAgbGV0IGogPSBqIC0gMQorOiAgICAgIGVuZHdoaWxlCis6ICAgIGVuZGlmCis6ICBlbmRpZgorOiAgaWYgaSA9PSA5Cis6ICAgIGlmIGhhcygiZWJjZGljIikKKzogICAgICBleGVjdXRlICJub3JtYWwgQXpcMDQ3IgorOiAgICBlbHNlCis6ICAgICAgZXhlY3V0ZSAibm9ybWFsIEF6XDAzMyIKKzogICAgZW5kaWYKKzogIGVuZGlmCis6ZW5kd2hpbGUKKzondCwkdyEgdGVzdC5vdXQKKzpxYSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI2Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI2Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNDQ3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjYub2sKQEAgLTAsMCArMSwxMCBAQAorCisxeDk5OTk5OTk5OTg4ODg4ODg4Nzc3Nzc3NzY2NjY2NjU1NTU1NDQ0NDMzMzIyMQorMgorM3g5OTk5OTk5OTk4ODg4ODg4ODc3Nzc3Nzc2NjY2NjY1NTU1NTQ0NDQzMzMyMjEKKzQKKzV4Cis2Cis3eDk5OTk5OTk5OTg4ODg4ODg4Nzc3Nzc3NzY2NjY2NjU1NTU1NDQ0NDMzMzIyMQorOAorOXgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNy5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QyNy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGYxNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI3LmluCkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgZm9yIGV4cGFuZGluZyBmaWxlIG5hbWVzCisKK1NUQVJUVEVTVAorOiFta2RpciBYZGlyMQorOiFta2RpciBYZGlyMgorOiFta2RpciBYZGlyMworOmNkIFhkaXIzCis6IW1rZGlyIFhkaXI0Cis6Y2QgLi4KKzp3IFhkaXIxL2ZpbGUKKzp3IFhkaXIzL1hkaXI0L2ZpbGUKKzpuIFhkaXI/LyovZmlsZQorR28SJRs6LnchIHRlc3Qub3V0Cis6biEgWGRpcj8vKi9ub2ZpbGUKK0dvEiUbOi53ID4+dGVzdC5vdXQKKzplISB4eAorOiFybSAtcmYgWGRpcjEgWGRpcjIgWGRpcjMKKzpxYSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI3Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI3Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNWYyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Mjcub2sKQEAgLTAsMCArMSwyIEBACitYZGlyMy9YZGlyNC9maWxlCitYZGlyPy8qL25vZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDI4LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDJjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MjguaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDI4Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDI4Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMWQ4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Mjgub2sKQEAgLTAsMCArMSwyIEBACitzZAorbWFwIF9fMiBhc2Qbc2Vjb25kc2Qbc2QwbWFwIF9fNSBhc2QwZmlmdGgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyOS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QyOS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTkzY2NjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI5LmluCkBAIC0wLDAgKzEsNjcgQEAKK1Rlc3QgZm9yIGpvaW5pbmcgbGluZXMgd2l0aCAnam9pbnNwYWNlcycgc2V0IG9yIG5vdAorCitTVEFSVFRFU1QKKzpzZXQgbm9qb2luc3BhY2VzCisvZmlyc3RsaW5lLworakpqSmpKakpqSmpKakpqSmpKakpqSmpKakpqSjpzZXQgam9pbnNwYWNlcworakpqSmpKakpqSmpKakpqSmpKakpqSmpKakpqSjo/Zmlyc3RsaW5lPysxLCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCitmaXJzdGxpbmUKK2FzZGZhc2RmLgorYXNkZgorYXNkZmFzZGYuIAorYXNkZgorYXNkZmFzZGYuICAKK2FzZGYKK2FzZGZhc2RmLgkKK2FzZGYKK2FzZGZhc2RmLiAJCithc2RmCithc2RmYXNkZi4JIAorYXNkZgorYXNkZmFzZGYuCQkKK2FzZGYKK2FzZGZhc2RmCithc2RmCithc2RmYXNkZiAKK2FzZGYKK2FzZGZhc2RmICAKK2FzZGYKK2FzZGZhc2RmCQorYXNkZgorYXNkZmFzZGYJIAorYXNkZgorYXNkZmFzZGYgCQorYXNkZgorYXNkZmFzZGYJCQorYXNkZgorYXNkZmFzZGYuCithc2RmCithc2RmYXNkZi4gCithc2RmCithc2RmYXNkZi4gIAorYXNkZgorYXNkZmFzZGYuCQorYXNkZgorYXNkZmFzZGYuIAkKK2FzZGYKK2FzZGZhc2RmLgkgCithc2RmCithc2RmYXNkZi4JCQorYXNkZgorYXNkZmFzZGYKK2FzZGYKK2FzZGZhc2RmIAorYXNkZgorYXNkZmFzZGYgIAorYXNkZgorYXNkZmFzZGYJCithc2RmCithc2RmYXNkZgkgCithc2RmCithc2RmYXNkZiAJCithc2RmCithc2RmYXNkZgkJCithc2RmCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Mjkub2sgYi9zcmMvdGVzdGRpci90ZXN0Mjkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2Zjc3YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QyOS5vawpAQCAtMCwwICsxLDI4IEBACithc2RmYXNkZi4gYXNkZgorYXNkZmFzZGYuIGFzZGYKK2FzZGZhc2RmLiAgYXNkZgorYXNkZmFzZGYuCWFzZGYKK2FzZGZhc2RmLiAJYXNkZgorYXNkZmFzZGYuCSBhc2RmCithc2RmYXNkZi4JCWFzZGYKK2FzZGZhc2RmIGFzZGYKK2FzZGZhc2RmIGFzZGYKK2FzZGZhc2RmICBhc2RmCithc2RmYXNkZglhc2RmCithc2RmYXNkZgkgYXNkZgorYXNkZmFzZGYgCWFzZGYKK2FzZGZhc2RmCQlhc2RmCithc2RmYXNkZi4gIGFzZGYKK2FzZGZhc2RmLiAgYXNkZgorYXNkZmFzZGYuICBhc2RmCithc2RmYXNkZi4JYXNkZgorYXNkZmFzZGYuIAlhc2RmCithc2RmYXNkZi4JIGFzZGYKK2FzZGZhc2RmLgkJYXNkZgorYXNkZmFzZGYgYXNkZgorYXNkZmFzZGYgYXNkZgorYXNkZmFzZGYgIGFzZGYKK2FzZGZhc2RmCWFzZGYKK2FzZGZhc2RmCSBhc2RmCithc2RmYXNkZiAJYXNkZgorYXNkZmFzZGYJCWFzZGYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3MjViZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzLmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDMub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwZjhmNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzLm9rCkBAIC0wLDAgKzEsMTA5MCBAQAorLyogc3RhcnQgb2YgQVVUTyBtYXRpY2FsbHkgY2hlY2tlZCAqLworeworCWlmICh0ZXN0KQorCQljbWQxOworCWNtZDI7Cit9CisKK3sKKwlpZiAodGVzdCkKKwkJY21kMTsKKwllbHNlCisJCWNtZDI7Cit9CisKK3sKKwlpZiAodGVzdCkKKwl7CisJCWNtZDE7CisJCWNtZDI7CisJfQorfQorCit7CisJaWYgKHRlc3QpCisJeworCQljbWQxOworCQllbHNlCisJfQorfQorCit7CisJd2hpbGUgKHRoaXMpCisJCWlmICh0ZXN0KQorCQkJY21kMTsKKwljbWQyOworfQorCit7CisJd2hpbGUgKHRoaXMpCisJCWlmICh0ZXN0KQorCQkJY21kMTsKKwkJZWxzZQorCQkJY21kMjsKK30KKworeworCWlmICh0ZXN0KQorCXsKKwkJY21kOworCX0KKworCWlmICh0ZXN0KQorCQljbWQ7Cit9CisKK3sKKwlpZiAodGVzdCkgeworCQljbWQ7CisJfQorCisJaWYgKHRlc3QpIGNtZDsKK30KKworeworCWNtZDE7CisJZm9yIChibGFoKQorCQl3aGlsZSAodGhpcykKKwkJCWlmICh0ZXN0KQorCQkJCWNtZDI7CisJY21kMzsKK30KKworeworCWNtZDE7CisJZm9yIChibGFoKQorCQl3aGlsZSAodGhpcykKKwkJCWlmICh0ZXN0KQorCQkJCWNtZDI7CisJY21kMzsKKworCWlmICh0ZXN0KQorCXsKKwkJY21kMTsKKwkJY21kMjsKKwkJY21kMzsKKwl9Cit9CisKKworLyogVGVzdCBmb3IgJ2NpbmRlbnQnIGRvL3doaWxlIG1peGVkIHdpdGggaWYvZWxzZTogKi8KKworeworCWRvCisJCWlmIChhc2RmKQorCQkJYXNkZmFzZDsKKwl3aGlsZSAoY29uZCk7CisKKwlkbworCQlpZiAoYXNkZikKKwkJCXdoaWxlIChhc2RmKQorCQkJCWFzZGY7CisJd2hpbGUgKGFzZGYpOworfQorCisvKiBUZXN0IGZvciAnY2luZGVudCcgd2l0aCB0d28gKSBvbiBhIGNvbnRpbnVhdGlvbiBsaW5lICovCit7CisJaWYgKGFzZGZhc2RmO2FzbGRrZmogYXNkbGtmaiBhcztsZGtmaiBzYWw7ZAorCQkJYWFsO3Nka2pmICAoIDthc2xkZmtqYTtzbGRmaworCQkJCWFsO3NkamZrYSA7c2xrZGYgKSBzYTtsZGtqZnNhIGRsazspCisJCWxpbmUgdXAgaGVyZTsKK30KKworCisvKiBDKysgdGVzdHM6ICovCisKKy8vIGZvbygpCQl0aGVzZSB0aHJlZSBsaW5lcyBzaG91bGQgcmVtYWluIGluIGNvbHVtbiAwCisvLyB7CisvLyB9CisKKy8qIFRlc3QgZm9yIGNvbnRpbnVhdGlvbiBhbmQgdW50ZXJtaW5hdGVkIGxpbmVzOiAqLworeworCWkgPSA5OSArIDE0MzI1ICsKKwkJMjEzNDUgKworCQkyMTM0NSArCisJCTIxMzQ1ICsgKCAyMTM0NSArCisJCQkJMjEzNDUpICsKKwkJMjM0NSArCisJCTEyMzQ7CisJYyA9IDE7Cit9CisKKy8qCisgICB0ZXN0amUgZm9yIGluZGVudCB3aXRoIGVtcHR5IGxpbmUKKworICAgaGVyZSAqLworCit7CisJaWYgKHRlc3RpbmcgJiYKKwkJCW5vdCBhIGpva2UgfHwKKwkJCWxpbmUgdXAgaGVyZSkKKwkJaGF5OworCWlmICh0ZXN0aW5nICYmCisJCQkobm90IGEgam9rZSB8fCB0ZXN0aW5nCisJCQkpbGluZSB1cCBoZXJlKQorCQloYXk7CisJaWYgKHRlc3RpbmcgJiYKKwkJCShub3QgYSBqb2tlIHx8IHRlc3RpbmcKKwkJCSBsaW5lIHVwIGhlcmUpKQorCQloYXk7Cit9CisKKworeworCXN3aXRjaCAoYykKKwl7CisJCWNhc2UgeHg6CisJCQlkbworCQkJCWlmIChhc2RmKQorCQkJCQlkbworCQkJCQkJYXNkZmFzZGY7CisJCQkJCXdoaWxlIChhc2RmKTsKKwkJCQllbHNlCisJCQkJCWFzZGZhc2RmOworCQkJd2hpbGUgKGNvbmQpOworCQljYXNlIHl5OgorCQljYXNlIHh4OgorCQljYXNlIHp6OgorCQkJdGVzdGluZzsKKwl9Cit9CisKK3sKKwlpZiAoY29uZCkgeworCQlmb287CisJfQorCWVsc2UKKwl7CisJCWJhcjsKKwl9Cit9CisKK3sKKwlpZiAoYWxza2RmaiA7YWxzZGtmamFsO3NrZGpmICg7c2FkbGtmc2EgO2Rsa2YgajthbGtzZGZqIDthbHNrZGpmCisJCQkJYWxzZGtmaiAoYXNsZGs7ZmoKKwkJCQkJYXdpdGggY2lubz0oMCA7bGYgdGhpcyBvbmUgZ29lcyB0byBiZWxvdyB0aGUgcGFyZW4gd2l0aCA9PQorCQkJCQkJO2xha3NqZmQgO2xzYWtkamYgO2Fsc2tkZiBhc2QpCisJCQkJCWFzZGZhc2RmOykpKQorCQlhc2RmYXNkZjsKK30KKworCWludAorZnVuYyhhLCBiKQorCWludCBhOworCWludCBjOworeworCWlmIChjMSAmJiAoYzIgfHwKKwkJCQljMykpCisJCWZvbzsKKwlpZiAoYzEgJiYKKwkJCShjMiB8fCBjMykKKwkgICApCit9CisKK3sKKwl3aGlsZSAoYXNkKQorCXsKKwkJaWYgKGFzZGYpCisJCQlpZiAodGVzdCkKKwkJCQlpZiAodGhhdCkKKwkJCQl7CisJCQkJCWlmIChhc2RmKQorCQkJCQkJZG8KKwkJCQkJCQljZGFzZDsKKwkJCQkJCXdoaWxlIChhcworCQkJCQkJCQlkZik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJaWYgKGFzZGYpCisJCQkJCQlhc2RmOworCQkJCQllbHNlCisJCQkJCQlhc2RmOworCQlhc2RmOworCX0KK30KKworeworCXMgPSAiLyoiOyBiID0gJzsnCisJCXMgPSAiLyoiOyBiID0gJzsnOworCWEgPSBiOworfQorCit7CisJc3dpdGNoIChhKQorCXsKKwkJY2FzZSBhOgorCQkJc3dpdGNoICh0KQorCQkJeworCQkJCWNhc2UgMToKKwkJCQkJY21kOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCWNtZDsKKwkJCQkJYnJlYWs7CisJCQl9CisJCQljbWQ7CisJCQlicmVhazsKKwkJY2FzZSBiOgorCQkJeworCQkJCWludCBpOworCQkJCWNtZDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIGM6IHsKKwkJCQkJaW50IGk7CisJCQkJCWNtZDsKKwkJCQl9CisJCWNhc2UgZDogaWYgKGNvbmQgJiYKKwkJCQkJCXRlc3QpIHsJCS8qIHRoaXMgbGluZSBkb2Vzbid0IHdvcmsgcmlnaHQgKi8KKwkJCQkJaW50IGk7CisJCQkJCWNtZDsKKwkJCQl9CisJCQkJYnJlYWs7CisJfQorfQorCit7CisJaWYgKCEodmltX3N0cmNocihwX2NwbywgQ1BPX0JVRk9QVEdMT0IpICE9IE5VTEwgJiYgZW50ZXJpbmcpICYmCisJCQkoYnBfdG8tPmJfcF9pbml0aWFsaXplZCB8fAorCQkJICghZW50ZXJpbmcgJiYgdmltX3N0cmNocihwX2NwbywgQ1BPX0JVRk9QVCkgIT0gTlVMTCkpKQorCQlyZXR1cm47CitsYWJlbCA6CisJYXNkZiA9IGFzZGYgPworCQlhc2RmIDogYXNkZjsKKwlhc2RmID0gYXNkZiA/CisJCWFzZGY6IGFzZGY7Cit9CisKKy8qIFNwZWNpYWwgQ29tbWVudHMJOiBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgYWRkZWQgY29tcGxleGl0eSAoY29tcGFyZWQgICovCisvKgkJCQkJOiB0byBhZGR0b2xpc3QpIG9mIGhhdmluZyB0byBjaGVjayBmb3IgYSBkZXRhaWwgICAgICovCisvKgkJCQkJOiB0ZXh0dXJlIGFuZCBhZGQgdGhhdCB0byB0aGUgbGlzdCBmaXJzdC4JIAkgICAgKi8KKworY2hhciAqKGFycmF5WzEwMF0pID0geworCSJ0ZXN0amUiLAorCSJmb28iLAorCSJiYXIiLAorfQorCitlbnVtIHNvcHBpZQoreworCXllcyA9IDAsCisJbm8sCisJbWF5YmUKK307CisKK3R5cGVkZWYgZW51bSBzb3BwaWUKK3sKKwl5ZXMgPSAwLAorCW5vLAorCW1heWJlCit9OworCit7CisJaW50IGEsCisJCWI7Cit9CisKK3sKKwlzdHJ1Y3QgVHlwZQorCXsKKwkJaW50IGk7CisJCWNoYXIgKnN0cjsKKwl9IHZhcltdID0KKwl7CisJCTAsICJ6ZXJvIiwKKwkJMSwgIm9uZSIsCisJCTIsICJ0d28iLAorCQkzLCAidGhyZWUiCisJfTsKKworCWZsb2F0IG1hdHJpeFszXVszXSA9CisJeworCQl7CisJCQkwLAorCQkJMSwKKwkJCTIKKwkJfSwKKwkJeworCQkJMywKKwkJCTQsCisJCQk1CisJCX0sCisJCXsKKwkJCTYsCisJCQk3LAorCQkJOAorCQl9CisJfTsKK30KKworeworCS8qIGJsYWggKCBibGFoICovCisJLyogd2hlcmUgZG9lcyB0aGlzIGdvPyAqLworCisJLyogYmxhaCAoIGJsYWggKi8KKwljbWQ7CisKKwlmdW5jKGFyZzEsCisJCQkvKiBjb21tZW50ICovCisJCQlhcmcyKTsKKwlhOworCXsKKwkJYjsKKwkJeworCQkJYzsgLyogSGV5LCBOT1cgaXQgaW5kZW50cz8hICovCisJCX0KKwl9CisKKwl7CisJCWZ1bmMoYXJnMSwKKwkJCQlhcmcyLAorCQkJCWFyZzMpOworCQkvKiBIZXksIHdoYXQgYW0gSSBkb2luZyBoZXJlPyAgSXMgdGhpcyBjb3ogb2YgdGhlICIsIj8gKi8KKwl9Cit9CisKK21haW4gKCkKK3sKKwlpZiAoY29uZCkKKwl7CisJCWEgPSBiOworCX0KKwlpZiAoY29uZCkgeworCQlhID0gYzsKKwl9CisJaWYgKGNvbmQpCisJCWEgPSBkOworCXJldHVybjsKK30KKworeworCWNhc2UgMjogaWYgKGFzZGYgJiYKKwkJCQkJYXNkZmFzZGYpCisJCQkJYWFzZGY7CisJCQlhID0gOTsKKwljYXNlIDM6IGlmIChhc2RmKQorCQkJCWFhc2RmOworCQkJYSA9IDk7CisJY2FzZSA0OiAgICB4ID0gMTsKKwkJCSAgIHkgPSAyOworCitsYWJlbDoJaWYgKGFzZGYpCisJCQloZXJlOworCitsYWJlbDogIGlmIChhc2RmICYmCisJCQkJYXNkZmFzZGYpCisJCXsKKwkJfQorCitsYWJlbDogIGlmIChhc2RmICYmCisJCQkJYXNkZmFzZGYpIHsKKwkJCXRoZXJlOworCQl9CisKK2xhYmVsOiAgaWYgKGFzZGYgJiYKKwkJCQlhc2RmYXNkZikKKwkJCXRoZXJlOworfQorCit7CisJLyoKKwkgICBoZWxsbyB3aXRoICI6c2V0IGNvbW1lbnRzPSBjaW5vPWM1IgorCSAqLworCisJLyoKKwkgICBoZWxsbyB3aXRoICI6c2V0IGNvbW1lbnRzPSBjaW5vPSIKKwkgKi8KK30KKworCit7CisJaWYgKGEgPCBiKSB7CisJCWEgPSBhICsgMTsKKwl9IGVsc2UKKwkJYSA9IGEgKyAyOworCisJaWYgKGEpCisJCWRvIHsKKwkJCXRlc3Rpbmc7CisJCX0gd2hpbGUgKGFzZGZhc2RmKTsKKwlhID0gYiArIDE7CisJYXNkZmFzZGYKK30KKworY2xhc3MgYm9iCit7CisJaW50IGZvbygpIHtyZXR1cm4gMTt9CisJaW50IGJhcjsKK30KKworbWFpbigpCit7CisJd2hpbGUoMSkKKwkJaWYgKGZvbykKKwkJeworCQkJYmFyOworCQl9CisJCWVsc2UgeworCQkJYXNkZjsKKwkJfQorCW1pc3BsYWNlZGxpbmU7Cit9CisKK3sKKwlpZiAoY2xpcGJvYXJkLnN0YXRlID09IFNFTEVDVF9ET05FCisJCQkmJiAoKHJvdyA9PSBjbGlwYm9hcmQuc3RhcnQubG51bQorCQkJCQkmJiBjb2wgPj0gY2xpcGJvYXJkLnN0YXJ0LmNvbCkKKwkJCQl8fCByb3cgPiBjbGlwYm9hcmQuc3RhcnQubG51bSkpCit9CisKK3sKKwlpZiAoMSkge2kgKz0gNDt9CisJd2hlcmVfYW1faTsKKwlyZXR1cm4gMDsKK30KKworeworCXsKKwl9IC8vIHNkZihhc2RmCisJaWYgKGFzZGYpCisJCWFzZDsKK30KKworeworbGFiZWwxOgorbGFiZWwyOgorfQorCit7CisJaW50IGZvb1JldCA9IGZvbyhwQmFyMSwgZmFsc2UgLypmS0IqLywKKwkJCXRydWUgLypmUFRCKi8sIDMgLypuVCovLCBmYWxzZSAvKmZERiovKTsKKwlmKCkgeworCQlmb3IgKCBpID0gMDsKKwkJCQlpIDwgbTsKKwkJCQkvKiBjICovIGkrKyApIHsKKwkJCWEgPSBiOworCQl9CisJfQorfQorCit7CisJZjEoLypjb21tZW50Ki8pOworCWYyKCk7Cit9CisKK3sKKwlkbyB7CisJCWlmIChmb28pIHsKKwkJfSBlbHNlCisJCQk7CisJfSB3aGlsZSAoZm9vKTsKKwlmb28oKTsJLy8gd2FzIHdyb25nCit9CisKK2ludCB4OwkgICAgLy8gbm8gZXh0cmEgaW5kZW50IGJlY2F1c2Ugb2YgdGhlIDsKK3ZvaWQgZnVuYygpCit7Cit9CisKK2NoYXIgKnRhYltdID0geyJhYWEiLAorCSJ9OyIsIC8qIH07ICovIE5VTEx9CisJaW50IGluZGVudGVkOwore30KKworY2hhciAqYVtdID0geyJhYWEiLCAiYmJiIiwKKwkiY2NjIiwgTlVMTH07CisvLyBoZXJlCisKK2NoYXIgKnRhYltdID0geyJhYWEiLAorCSJ4eCIsIC8qIHh4ICovfTsgICAgLyogYXNkZiAqLworaW50IG5vdF9pbmRlbnRlZDsKKworeworCWRvIHsKKwkJc3dpdGNoIChibGEpCisJCXsKKwkJCWNhc2UgMTogaWYgKGZvbykKKwkJCQkJCWJhcjsKKwkJfQorCX0gd2hpbGUgKGJvbyk7CisJd3Jvbmc7Cit9CisKK2ludAlmb28sCisJYmFyOworaW50IGZvbzsKKworI2lmIGRlZmluZWQoZm9vKSBcCisJJiYgZGVmaW5lZChiYXIpCitjaGFyICogeHggPSAiYXNkZlwKKwkJCSBmb29cCisJCQkgYm9yIjsKK2ludCB4OworCitjaGFyICAgICpmb28gPSAiYXNkZlwKKwkJCQlhc2RmXAorCQkJCWFzZGYiLAorCQkqYmFyOworCit2b2lkIGYoKQoreworI2lmIGRlZmluZWQoZm9vKSBcCisJJiYgZGVmaW5lZChiYXIpCisJY2hhciAgICAqZm9vID0gImFzZGZcCisJCQkJCWFzZGZcCisJCQkJCWFzZGYiLAorCQkJKmJhcjsKKwl7CisJCWludCBpOworCQljaGFyICAgICpmb28gPSAiYXNkZlwKKwkJCQkJCWFzZGZcCisJCQkJCQlhc2RmIiwKKwkJCQkqYmFyOworCX0KKyNlbmRpZgorfQorI2VuZGlmCisKK2ludCB5OwkJLy8gY29tbWVudAorLy8gY29tbWVudAorCisvLyBjb21tZW50CisKK3sKKwlDb25zdHJ1Y3RvcihpbnQgYSwKKwkJCWludCBiICkgIDogQmFzZUNsYXNzKGEpCisJeworCX0KK30KKwordm9pZCBmb28oKQoreworCWNoYXIgb25lLAorCQkgdHdvOworCXN0cnVjdCBibGEgcGlldCwKKwkJCSAgIGphbjsKKwllbnVtIGZvbyBrZWVzLAorCQkJIGphbm5pZTsKKwlzdGF0aWMgdW5zaWduZWQgc2RmLAorCQkJCQlrcmFwOworCXVuc2lnbmVkIGludCBwaWV0LAorCQkJCSBqYW47CisJaW50CisJCWtlZXMsCisJCWphbjsKK30KKworeworCXQoaW50IGYsCisJCQlpbnQgZCk7CQkvLyApCisJZCgpOworfQorCitDb25zdHJ1Y3Rvcjo6Q29uc3RydWN0b3IoaW50IGEsCisJCWludCBiIAorCQkpICA6IAorCUJhc2VDbGFzcyhhLAorCQkJYiwKKwkJCWMpLAorCW1NZW1iZXIoYiksCit7Cit9CisKK0NvbnN0cnVjdG9yOjpDb25zdHJ1Y3RvcihpbnQgYSwKKwkJaW50IGIgKSAgOiAKKwlCYXNlQ2xhc3MoYSkKK3sKK30KKworQ29uc3RydWN0b3I6OkNvbnN0cnVjdG9yKGludCBhLAorCQlpbnQgYiApIC8qeCovIDogLyp4Ki8gQmFzZUNsYXNzKGEpLAorCQkJCQkJCSAgbWVtYmVyKGIpCit7Cit9CisKK2NsYXNzIENBYmMgOgorCXB1YmxpYyBCYXNlQ2xhc3MxLAorCXByb3RlY3RlZCBCYXNlQ2xhc3MyCit7CisJaW50IFRlc3QoKSB7IHJldHVybiBGQUxTRTsgfQorCWludCBUZXN0MSgpIHsgcmV0dXJuIFRSVUU7IH0KKworCUNBYmMoaW50IGEsIGludCBiICkgIDogCisJCUJhc2VDbGFzcyhhKQorCXsgCisJCXN3aXRjaCh4eHgpCisJCXsKKwkJCWNhc2UgYWJjOgorCQkJCWFzZGYoKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSA5OTk6CisJCQkJYmFlcigpOworCQkJCWJyZWFrOworCQl9CisJfQorCisJcHVibGljOiAvLyA8LS0gdGhpcyB3YXMgaW5jb3JlZWN0bHkgaW5kZW50ZWQgYmVmb3JlISEKKwl2b2lkIHRlc3RmYWxsKCk7CisJcHJvdGVjdGVkOgorCXZvaWQgdGVzdGZhbGwoKTsKK307CisKK2NsYXNzIENBYmMgOiBwdWJsaWMgQmFzZUNsYXNzMSwKKwkJCSBwcm90ZWN0ZWQgQmFzZUNsYXNzMgoreworfTsKKworc3RhdGljIHN0cnVjdAoreworCWludCBhOworCWludCBiOworfSB2YXJpYWJsZVtDT1VOVF0gPQoreworCXsKKwkJMTIzLAorCQk0NTYKKwl9LAorCXsKKwkJMTIzLAorCQk0NTYKKwl9Cit9OworCitzdGF0aWMgc3RydWN0Cit7CisJaW50IGE7CisJaW50IGI7Cit9IHZhcmlhYmxlW0NPVU5UXSA9Cit7CisJeyAxMjMsIDQ1NiB9LAorCXsgMTIzLCA0NTYgfQorfTsKKwordm9pZCBhc2RmKCkJCS8qIGluZF9tYXhwYXJlbiBtYXkgY2F1c2UgdHJvdWJsZSBoZXJlICovCit7CisJaWYgKCgwCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMQorCQkJCSYmIDEKKwkJCQkmJiAxCisJCQkJJiYgMSkpIGJyZWFrOworfQorCisvKiBlbmQgb2YgQVVUTyAqLworCisKK3sKKworLyogdGhpcyBpcworICogYSByZWFsIHNlcmlvdXMKKyAqIGFib3V0IGxpZmUsIHRoZQorICogdW5pdmVyc2UsIGFuZCB0aGUKKyAqIHJlc3QgaW1wb3J0YW50IGJpZworICogY29tbWVudAorICovCisJLyogaW5zZXJ0ICIgYWJvdXQgbGlmZSwgdGhlIHVuaXZlcnNlLCBhbmQgdGhlIHJlc3QiIGFmdGVyICJzZXJpb3VzIiAqLworfQorCisKK3sKKwkvKgorCSAqIFRlc3RpbmcgZm9yIGNvbW1lbnRzLCB3aXRob3V0ICdjaW4nIHNldAorCSAqLworYWJvdXQgbGlmZQorCisvKgorKiB3aGF0IGhhcHBlbnMgaGVyZT8KKyovCit0aGVyZQorCisJLyoKKwkgICB0aGUgZW5kIG9mIHRoZSBjb21tZW50LCB0cnkgaW5zZXJ0aW5nIGEgbGluZSBiZWxvdyAqLworbGluZQorCisJCS8qIGhvdyBhYm91dAoraGVsbG8KKwkJICAgICAgICAgICAgICAgIHRoaXMgb25lICovCit9CisKKworeworICAgIHZhciA9IHRoaXMgKyB0aGF0ICsgdmVjWzBdICogdmVjWzBdCisJCQkJICAgICAgKyB2ZWNbMV0gKiB2ZWNbMV0KKwkJCQkJICArIHZlYzJbMl0gKiB2ZWNbMl07Cit9CisKKworeworCQlhc2RmIGFzZGZsa2FqZHMgZjsKKwlpZiAodGVzICYgdGluZykgeworCQlhc2RmIGFzZGYgYXNkZiA7CisJCWFzZGZhIHNkZiBhc2RmOworCQl9CisJdGVzdGluZzE7CisJaWYgKHRlcyAmIHRpbmcpCisJeworCQlhc2RmIGFzZGYgYXNkZiA7CisJCWFzZGZhIHNkZiBhc2RmOworCQl9CisJdGVzdGluZzI7Cit9CisKKworbWFpbiAoIGludCBmaXJzdF9wYXIsIC8qCisJCQkJCSAgICogQ29tbWVudCBmb3IKKwkJCQkJICAgKiBmaXJzdCBwYXIKKwkJCQkJICAgKi8KKwkgICBpbnQgc2Vjb25kX3BhciAvKgorCQkJCQkgICAqIENvbW1lbnQgZm9yCisJCQkJCSAgICogc2Vjb25kIHBhcgorCQkJCQkgICAqLworCSApCit7CisJZnVuYyggZmlyc3RfcGFyLCAvKgorCQkJCQkgICogQ29tbWVudCBmb3IKKwkJCQkJICAqIGZpcnN0IHBhcgorCQkJCQkgICovCisJCSAgc2Vjb25kX3BhciAvKgorCQkJCQkgICogQ29tbWVudCBmb3IKKwkJCQkJICAqIHNlY29uZCBwYXIKKwkJCQkJICAqLworCQkpOworCit9CisKKworeworCWRvCisJeworCQlpZiAoKQorCQl7CisJCQlpZiAoKQorCQkJCWFzZGY7CisJCQllbHNlCisJCQkJYXNkZjsKKwkJfQorCX0gd2hpbGUgKCk7CisJY21kOwkJLyogdGhpcyBzaG91bGQgZ28gdW5kZXIgdGhlIH0gKi8KK30KKworCit2b2lkIGYoKQoreworCWlmICggaygpICkgeworCQlsKCk7CisKKwl9IGVsc2UgeyAvKiBTdGFydCAodHdvIHdvcmRzKSBlbmQgKi8KKwkJbSgpOworCX0KKworCW4oKTsKK30KKworCit2b2lkIGYoKQorCXsKKwlpZiAoIGsoKSApCisJCXsKKwkJbCgpOworCQl9IGVsc2UgeyAvKiBTdGFydCAodHdvIHdvcmRzKSBlbmQgKi8KKwkJbSgpOworCQl9CisJbigpOwkvKiBzaG91bGQgYmUgdW5kZXIgdGhlIGlmICgpICovCit9CisKKwordm9pZCBiYXIodm9pZCkKKwl7CisJc3RhdGljIGFycmF5WzJdWzJdID0KKwkJeworCQkJeyAxLCAyIH0sCisJCQl7IDMsIDQgfSwKKwkJfQorCisJd2hpbGUgKGEpCisJCXsKKwkJZm9vKCZhKTsKKwkJfQorCisJCXsKKwkJaW50IGE7CisJCQl7CisJCQlhID0gYSArIDE7CisJCQl9CisJCX0KKwliID0gYTsKKwl9CisKK3ZvaWQgZnVuYyh2b2lkKQorCXsKKwlhID0gMTsKKwkJeworCQliID0gMjsKKwkJfQorCWMgPSAzOworCWQgPSA0OworCX0KKy8qIGZvbyAqLworCisKK2EoKQoreworICBkbyB7CisgICAgYSA9IGEgKworICAgICAgYTsKKyAgfSB3aGlsZSAoIGEgKTsJCS8qIGFkZCB0ZXh0IHVuZGVyIHRoaXMgbGluZSAqLworICBoZXJlCisgICAgaWYgKCBhICkKKyAgICAgIGE7Cit9CisKKworYSgpCit7CitsYWJlbDE6CisgICAgICAgICAgICAvKiBobW0gKi8KKyAgICAgICAgICAgIC8vIGNvbW1lbnQKK2xhYmVsMjogYigpOworbGFiZWwzIC8qIHBvc3QgKi86CisvKiBwcmUgKi8gbGFiZWw0OgorCQlmKC8qY29tKi8pOworCQlpZiAoLypjb20qLykKKwkJCWNtZCgpOworfQorCisKKy8qCisgKiBBIHNpbXBsZSBjb21tZW50CisgKi8KKworLyoKKyoqIEEgZGlmZmVyZW50IGNvbW1lbnQKKyovCisKKwordm9pZCBmKCkKK3sKKworCS8qKioqKioqKioKKwkgIEEgY29tbWVudC4KKwkqKioqKioqKiovCit9CisKKwordm9pZCBmKCkKK3sKKworCS8qKioqKioqKioKKwlBIGNvbW1lbnQuCisJKioqKioqKioqLworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmCisJCSgKKwkJIGMyIHx8CisJCSBjMworCQkpICYmIGM0OworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmCisJCSgKKwkJIGMyIHx8CisJCSBjMworCQkpICYmIGM0OworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmCisJCSgKKwkJCWMyIHx8CisJCQljMworCQkpICYmIGM0OworfQorCisKK3ZvaWQgZigpCit7CisJaWYgKCAgIGMxCisJCSAgICYmICggICBjMgorCQkJCSAgfHwgYzMpKQorCQlmb287Cit9CisKKwordm9pZCBmKCkKK3sKKwlpZiAoICAgYzEKKwkJJiYgKCAgIGMyCisJCQl8fCBjMykpCisJCWZvbzsKK30KKworCit2b2lkIGYoKQoreworCWMgPSBjMSAmJiAoCisJCWMyIHx8CisJCWMzCisJCSkgJiYgYzQ7CisJaWYgKAorCQljMSAmJiBjMgorCSAgICkKKwkJZm9vOworfQorCisKK3ZvaWQgZigpCit7CisJYyA9IGMxICYmICgKKwkJYzIgfHwKKwkJYzMKKwkpICYmIGM0OworCWlmICgKKwkJYzEgJiYgYzIKKwkpCisJCWZvbzsKK30KKworCit2b2lkIGYoKQoreworCXN3aXRjaCAoeCkKKwl7CisJCWNhc2UgMToKKwkJCWEgPSBiOworCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWEgPSAwOworCQlicmVhazsKKwl9Cit9CisKKwordm9pZCBmKCkKK3sKKwlpbnZva2VtZSgKKwkJIGFyZ3UsCisJCSBtZW50KTsKKwlpbnZva2VtZSgKKwkJIGFyZ3UsCisJCSBtZW50CisJCSApOworCWludm9rZW1lKGFyZ3UsCisJCQkgbWVudAorCQkJKTsKK30KKworCit2b2lkIGYoKQoreworCXN0YXRlbWVudDsKKwkJICAvLyBjb21tZW50IDEKKwkJICAvLyBjb21tZW50IDIKK30KKworCit2b2lkIGYoKQoreworCXN0YXRlbWVudDsKKwkgICAvLyBjb21tZW50IDEKKwkgICAvLyBjb21tZW50IDIKK30KKworCitjbGFzcyBDQWJjCit7CisJaW50IFRlc3QoKSB7IHJldHVybiBGQUxTRTsgfQorCitwdWJsaWM6IC8vIGNvbW1lbnQKKwl2b2lkIHRlc3RmYWxsKCk7Citwcm90ZWN0ZWQ6CisJdm9pZCB0ZXN0ZmFsbCgpOworfTsKKworCit7CisJYXZlcnlsb25nZnVuY3Rpb25uYW1lbG9uZ2Z1bmN0aW9ubmFtZWF2ZXJ5bG9uZ2Z1bmN0aW9ubmFtZSgpLT5hc2QoCisJCQlhc2Rhc2RmLAorCQkJZnVuYyhhc2RmLAorCQkJCSBhc2RmYWRzZiksCisJCQlhc2RmYXNkZgorCQkJKTsKKworCS8qIHRob3NlIGFyZSB1Z2x5LCBidXQgY29uc2VxdWVudCAqLworCisJZnVuYygpLT5hc2QoYXNkYXNkZiwKKwkJCQlhdmVyeWxvbmdmdW5jdGlvbm5hbWUoCisJCQkJCQlhYmMsCisJCQkJCQlkZWMpLT5hdmVyeWxvbmdmdW5jdGlvbm5hbWUoCisJCQkJCQkJCWFzZGZhZHNmLAorCQkJCQkJCQlhc2RmYXNkZiwKKwkJCQkJCQkJYXNkZmFzZGYsCisJCQkJCQkJCSksCisJCQkJZnVuYyhhc2RmYWRmLAorCQkJCQkgYXNkZmFzZGYKKwkJCQkJKSwKKwkJCQlhc2Rhc2RmCisJCQkgICApOworCisJYXZlcnlsb25nZnVuY3Rpb25uYW1lYXZlcnlsb25nZnVuY3Rpb25uYW1lYXZlcnkoKS0+YXNkKGZhc2RmKAorCQkJCQlhYmMsCisJCQkJCWRlYyktPmFzZGZhc2RmYXNkZigKKwkJCQkJCQlhc2RmYWRzZiwKKwkJCQkJCQlhc2RmYXNkZiwKKwkJCQkJCQlhc2RmYXNkZiwKKwkJCQkJCQkpLAorCQkJZnVuYyhhc2RmYWRmLAorCQkJCSBhc2RmYXNkZiksCisJCQlhc2Rhc2RmCisJCQkpOworfQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzAuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5Mjc0MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMC5pbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzAub2sgYi9zcmMvdGVzdGRpci90ZXN0MzAub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5NDQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMC5vawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzEuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0ZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMS5pbgpAQCAtMCwwICsxLDY4IEBACitUZXN0IGZvciBjb21tYW5kcyB0aGF0IGNsb3NlIHdpbmRvd3MgYW5kL29yIGJ1ZmZlcnM6Cis6cXVpdAorOmNsb3NlCis6aGlkZQorOm9ubHkKKzpzYWxsCis6YWxsCis6YmFsbAorOmJ1ZgorOmVkaXQKKworU1RBUlRURVNUCis6c28gdGlueS52aW0KK0dBIDEbOiR3ISBYdGVzdDEKKyRyMjokdyEgWHRlc3QyCiskcjM6JHchIFh0ZXN0MworOm4hIFh0ZXN0MSBYdGVzdDIKK0EgMRs6c2V0IGhpZGRlbgorOiIgdGVzdCBmb3Igd29ya2luZyA6biB3aGVuIGhpZGRlbiBzZXQ7IHdyaXRlICJ0ZXN0dGV4dCAyIgorOm4KKzp3ISB0ZXN0Lm91dAorOiIgdGVzdCBmb3IgZmFpbGluZyA6cmV3IHdoZW4gaGlkZGVuIG5vdCBzZXQ7IHdyaXRlICJ0ZXN0dGV4dCAyIDIiCis6c2V0IG5vaGlkZGVuCitBIDIbOnJldworOncgPj50ZXN0Lm91dAorOiIgdGVzdCBmb3Igd29ya2luZyA6cmV3IHdoZW4gaGlkZGVuIHNldDsgd3JpdGUgInRlc3R0ZXh0IDEgMSIKKzpzZXQgaGlkZGVuCis6cmV3Cis6dyA+PnRlc3Qub3V0Cis6IiB0ZXN0IGZvciA6YWxsIGtlZXBpbmcgYSBidWZmZXIgd2hlbiBpdCdzIG1vZGlmaWVkOyB3cml0ZSAidGVzdHRleHQgMSAxIDEiCis6c2V0IG5vaGlkZGVuCitBIDEbOnNwCis6biBYdGVzdDIgWHRlc3QzCis6YWxsCis6dyA+PnRlc3Qub3V0Cis6IiB0ZXN0IGFiYW5kb25pbmcgY2hhbmdlZCBidWZmZXIsIHNob3VsZCBiZSB1bmxvYWRlZCBldmVuIHdoZW4gJ2hpZGRlbicgc2V0Cis6IiB3cml0ZSAidGVzdHRleHQgMiAyIiB0d2ljZQorOnNldCBoaWRkZW4KK0EgMRs6cSEKKzp3ID4+dGVzdC5vdXQKKzp1bmhpZGUKKzp3ID4+dGVzdC5vdXQKKzoiIHRlc3QgIjpoaWRlIiBoaWRlcyBhbnl3YXkgd2hlbiAnaGlkZGVuJyBub3Qgc2V0OyB3cml0ZSAidGVzdHRleHQgMyIKKzpzZXQgbm9oaWRkZW4KK0EgMhs6aGlkZQorOncgPj50ZXN0Lm91dAorOiIgdGVzdCAiOmVkaXQiIGZhaWxpbmcgaW4gbW9kaWZpZWQgYnVmZmVyIHdoZW4gJ2hpZGRlbicgbm90IHNldAorOiIgd3JpdGUgInRlc3R0ZXh0IDMgMyIKK0EgMxs6ZSBYdGVzdDEKKzp3ID4+dGVzdC5vdXQKKzoiIHRlc3QgIjplZGl0IiB3b3JraW5nIGluIG1vZGlmaWVkIGJ1ZmZlciB3aGVuICdoaWRkZW4nIHNldDsgd3JpdGUgInRlc3R0ZXh0IDEiCis6c2V0IGhpZGRlbgorOmUgWHRlc3QxCis6dyA+PnRlc3Qub3V0Cis6IiB0ZXN0ICI6Y2xvc2UiIG5vdCBoaWRpbmcgd2hlbiAnaGlkZGVuJyBub3Qgc2V0IGluIG1vZGlmaWVkIGJ1ZmZlcjsKKzoiIHdyaXRlICJ0ZXN0dGV4dCAzIDMgMyIKKzpzcCBYdGVzdDMKKzpzZXQgbm9oaWRkZW4KK0EgMxs6Y2xvc2UKKzp3ID4+dGVzdC5vdXQKKzoiIHRlc3QgIjpjbG9zZSEiIGRvZXMgaGlkZSB3aGVuICdoaWRkZW4nIG5vdCBzZXQgaW4gbW9kaWZpZWQgYnVmZmVyOworOiIgd3JpdGUgInRlc3R0ZXh0IDEiCitBIDMbOmNsb3NlIQorOncgPj50ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCit0ZXN0dGV4dApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDMxLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDMxLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTFhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzEub2sKQEAgLTAsMCArMSwxMSBAQAordGVzdHRleHQgMgordGVzdHRleHQgMiAyCit0ZXN0dGV4dCAxIDEKK3Rlc3R0ZXh0IDEgMSAxCit0ZXN0dGV4dCAyIDIKK3Rlc3R0ZXh0IDIgMgordGVzdHRleHQgMwordGVzdHRleHQgMyAzCit0ZXN0dGV4dCAxCit0ZXN0dGV4dCAzIDMgMwordGVzdHRleHQgMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDMyLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDMyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNTQwNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzIuaW4KQEAgLTAsMCArMSw1NiBAQAorVGVzdCBmb3IgaW5zZXJ0IGV4cGFuc2lvbgorCis6c2UgY3B0PS4sdworKiBhZGQtZXhwYW5kcyAod29yZCBmcm9tIG5leHQgbGluZSkgZnJvbSBvdGhlciB3aW5kb3cKKyogYWRkLWV4cGFuZHMgKGN1cnJlbnQgYnVmZmVyIGZpcnN0KQorKiBMb2NhbCBleHBhbnNpb24sIGVuZHMgaW4gYW4gZW1wdHkgbGluZSAodW5sZXNzIGl0IGJlY29tZXMgYSBnbG9iYWwgZXhwYW5zaW9uKQorKiBzdGFydHMgTG9jYWwgYW5kIHN3aXRjaGVzIHRvIGdsb2JhbCBhZGQtZXhwYW5zaW9uCis6c2UgY3B0PS4sdyxpCisqIGktYWRkLWV4cGFuZHMgYW5kIHN3aXRjaGVzIHRvIGxvY2FsCisqIGFkZC1leHBhbmRzIGxpbmVzIChpdCB3b3VsZCBlbmQgaW4gYW4gZW1wdHkgbGluZSBpZiBpdCBkaWRuJ3QgaWdub3JlZCBpdCBzZWxmKQorOnNlIGNwdD1rWHRlc3RmaWxlCisqIGNoZWNrcyBrLWV4cGFuc2lvbiwgYW5kIGZpbGUgZXhwYW5zaW9uICh1c2UgWHRlc3QxMSBpbnN0ZWFkIG9mIHRlc3QxMSwKKyogYmVjYXVzZSBURVNUMTEuT1VUIG1heSBtYXRjaCBmaXJzdCBvbiBET1MpCis6c2UgY3B0PXcKKyogY2hlY2tzIG1ha2VfY3ljbGljIGluIG90aGVyIHdpbmRvdworOnNlIGNwdD11IG5vaGlkCisqIGNoZWNrcyB1bmxvYWRlZCBidWZmZXIgZXhwYW5zaW9uCisqIGNoZWNrcyBhZGRpbmcgbW9kZSBhYm9ydGlvbgorOnNlIGNwdD10LGQKKyogdGFnIGV4cGFuc2lvbiwgZGVmaW5lIGFkZC1leHBhbnNpb24gaW50ZXJydXB0ZWQKKyogdC1leHBhbnNpb24KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2Ugbm9jcCB2aW1pbmZvKz1udmltaW5mbyBjcHQ9Lix3IGZmPXVuaXggfCAkLTIsJHchWHRlc3RmaWxlIHwgc2V0IGZmJgorF25PI2luY2x1ZGUgIlh0ZXN0ZmlsZSIKK3J1Dg4YDhsBCitPEBgOCisYEBAQEBAKKxgQEBgYDhgODhsKKzpzZSBjcHQ9Lix3LGkKK2tPTQ4YDhgOGBgYEAorGAwYDBAQGworOnNlIGNwdD1rWHRlc3RmaWxlCis6dyBYdGVzdDExLm9uZQorOncgWHRlc3QxMS50d28KK08OG0lYG0EYBg4bCis6c2UgY3B0PXcKK09TVA4QEBAQGworOnNlIGNwdD11IG5vaGlkCisXb09FTg4KK3VubA4YGBAbCis6c2UgY3B0PXQsZCBkZWY9XlxcayogdGFncz1YdGVzdGZpbGUgbm90YWdic2VhcmNoCitPGB0YBBgEGBgEGAQYBBgECithDhsKKzp3cSEgdGVzdC5vdXQKK0VORFRFU1QKKworc3RhcnQgb2YgdGVzdGZpbGUKK3J1bjEKK3J1bjIKK2VuZCBvZiB0ZXN0ZmlsZQorCit0ZXN0MTEJMzZHZXBldG8JL1RhZy8KK2FzZAl0ZXN0MTFmaWxlCTM2RworTWFrZWZpbGUJdG8JcnVuCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzIub2sgYi9zcmMvdGVzdGRpci90ZXN0MzIub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjNDQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMi5vawpAQCAtMCwwICsxLDE1IEBACisjaW5jbHVkZSAiWHRlc3RmaWxlIgorcnVuMSBydW4zCitydW4zIHJ1bjMKKworTWFrZWZpbGUJdG8JcnVuMworTWFrZWZpbGUJdG8JcnVuMworTWFrZWZpbGUJdG8JcnVuMworWHRlc3QxMS50d28KK1NUQVJUVEVTVAorRU5EVEVTVAordW5sZXNzCit0ZXN0MTFmaWxlCTM2R2VwZXRvCS9UYWcvIGFzZAorYXNkCitydW4xIHJ1bjIKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDMzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDMzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDQ3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzMuaW4KQEAgLTAsMCArMSwzNCBAQAorVGVzdCBmb3IgJ2xpc3AnCitJZiB0aGUgbGlzcCBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLCB0aGlzIHdpbGwgZmFpbCEKKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IGxpc3AKKy9eKGRlZnVuCis9RzovXihkZWZ1bi8sJHchIHRlc3Qub3V0Cis6cSEKK0VORFRFU1QKKworKGRlZnVuIGh0bWwtZmlsZSAoYmFzZSkKKyhmb3JtYXQgbmlsICJ+KH5BfikuaHRtbCIgYmFzZSkpCisKKyhkZWZtYWNybyBwYWdlIChuYW1lIHRpdGxlICZyZXN0IGJvZHkpCisobGV0ICgodGkgKGdlbnN5bSkpKQorYCh3aXRoLW9wZW4tZmlsZSAoKnN0YW5kYXJkLW91dHB1dCoKKyhodG1sLWZpbGUgLG5hbWUpCis6ZGlyZWN0aW9uIDpvdXRwdXQKKzppZi1leGlzdHMgOnN1cGVyc2VkZSkKKyhsZXQgKCgsdGkgLHRpdGxlKSkKKyhhcyB0aXRsZSAsdGkpCisod2l0aCBjZW50ZXIgCisoYXMgaDIgKHN0cmluZy11cGNhc2UgLHRpKSkpCisoYnJzIDMpCissQGJvZHkpKSkpCisKKzs7OyBVdGlsaXRpZXMgZm9yIGdlbmVyYXRpbmcgbGlua3MKKworKGRlZm1hY3JvIHdpdGgtbGluayAoZGVzdCAmcmVzdCBib2R5KQorYChwcm9nbgorKGZvcm1hdCB0ICI8YSBocmVmPVwifkFcIj4iIChodG1sLWZpbGUgLGRlc3QpKQorLEBib2R5CisocHJpbmMgIjwvYT4iKSkpCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzMub2sgYi9zcmMvdGVzdGRpci90ZXN0MzMub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxZDg3YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzMy5vawpAQCAtMCwwICsxLDIzIEBACisoZGVmdW4gaHRtbC1maWxlIChiYXNlKQorICAoZm9ybWF0IG5pbCAifih+QX4pLmh0bWwiIGJhc2UpKQorCisoZGVmbWFjcm8gcGFnZSAobmFtZSB0aXRsZSAmcmVzdCBib2R5KQorICAobGV0ICgodGkgKGdlbnN5bSkpKQorICAgICAgIGAod2l0aC1vcGVuLWZpbGUgKCpzdGFuZGFyZC1vdXRwdXQqCisJCQkgKGh0bWwtZmlsZSAsbmFtZSkKKwkJCSA6ZGlyZWN0aW9uIDpvdXRwdXQKKwkJCSA6aWYtZXhpc3RzIDpzdXBlcnNlZGUpCisJCQkobGV0ICgoLHRpICx0aXRsZSkpCisJCQkgICAgIChhcyB0aXRsZSAsdGkpCisJCQkgICAgICh3aXRoIGNlbnRlciAKKwkJCQkgICAoYXMgaDIgKHN0cmluZy11cGNhc2UgLHRpKSkpCisJCQkgICAgIChicnMgMykKKwkJCSAgICAgLEBib2R5KSkpKQorCis7OzsgVXRpbGl0aWVzIGZvciBnZW5lcmF0aW5nIGxpbmtzCisKKyhkZWZtYWNybyB3aXRoLWxpbmsgKGRlc3QgJnJlc3QgYm9keSkKKyAgYChwcm9nbgorICAgIChmb3JtYXQgdCAiPGEgaHJlZj1cIn5BXCI+IiAoaHRtbC1maWxlICxkZXN0KSkKKyAgICAsQGJvZHkKKyAgICAocHJpbmMgIjwvYT4iKSkpCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzQuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2MDcwMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNC5pbgpAQCAtMCwwICsxLDMxIEBACitUZXN0IGZvciB1c2VyIGZ1bmN0aW9ucworCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpmdW5jdGlvbiBUYWJsZSh0aXRsZSwgLi4uKQorOiAgbGV0IHJldCA9IGE6dGl0bGUKKzogIGxldCBpZHggPSAxCis6ICB3aGlsZSBpZHggPD0gYTowCis6ICAgIGV4ZSAibGV0IHJldCA9IHJldCAuIGE6IiAuIGlkeAorOiAgICBsZXQgaWR4ID0gaWR4ICsgMQorOiAgZW5kd2hpbGUKKzogIHJldHVybiByZXQKKzplbmRmdW5jdGlvbgorOmZ1bmN0aW9uIENvbXB1dGUobjEsIG4yLCBkaXZuYW1lKQorOiAgaWYgYTpuMiA9PSAwCis6ICAgIHJldHVybiAiZmFpbCIKKzogIGVuZGlmCis6ICBleGUgImxldCBnOiIgLiBhOmRpdm5hbWUgLiAiID0gIi4gYTpuMSAvIGE6bjIKKzogIHJldHVybiAib2siCis6ZW5kZnVuY3Rpb24KKzpsZXQgcmV0dmFsID0gIm5vcCIKKy9eaGVyZQorQxI9VGFibGUoInh4eCIsIDQsICJhc2RmIikKKyASPUNvbXB1dGUoNDUsIDAsICJyZXR2YWwiKQorIBI9cmV0dmFsCisgEj1Db21wdXRlKDQ1LCA1LCAicmV0dmFsIikKKyASPXJldHZhbAorGzoud3EhIHRlc3Qub3V0CitFTkRURVNUCisKK2hlcmUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzNC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QzNC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFiNTJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM0Lm9rCkBAIC0wLDAgKzEgQEAKK3h4eDRhc2RmIGZhaWwgbm9wIG9rIDkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzNS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QzNS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTk3OTExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM1LmluCkBAIC0wLDAgKzEsMjEgQEAKK1Rlc3QgQ3RybC1BIGFuZCBDdHJsLVgsIHdoaWNoIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGRlY2ltYWwsIGhleGFkZWNpbWFsLAorYW5kIG9jdGFsIG51bWJlcnMuCisKK1NUQVJUVEVTVAorL15zdGFydC1oZXJlCis6c2V0IG5yZm9ybWF0cz1vY3RhbCxoZXgKK2oBMTAyGAFsGGwBNjQBMTI4GCQYCis6c2V0IG5yZm9ybWF0cz1vY3RhbAorMAExMDIYAWwYMgF3NjUBMTI5GGJseDZsRAorOnNldCBucmZvcm1hdHM9aGV4CiswMTAxGGwyNTcYAVR4bGR0IAEgGCAYCis6c2V0IG5yZm9ybWF0cz0KKzAyMDAYbDEwMBh3NzgYAWsKKzokLTMsJHdxISB0ZXN0Lm91dAorRU5EVEVTVAorCitzdGFydC1oZXJlCisxMDAgICAgIDB4MTAwICAgICAwNzcgICAgIDAKKzEwMCAgICAgMHgxMDAgICAgIDA3NyAgICAgCisxMDAgICAgIDB4MTAwICAgICAwNzcgICAgIDB4ZkYgICAgIDB4RmYKKzEwMCAgICAgMHgxMDAgICAgIDA3NyAgICAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzUub2sgYi9zcmMvdGVzdGRpci90ZXN0MzUub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzYWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNS5vawpAQCAtMCwwICsxLDQgQEAKKzAgICAgIDB4MGZmICAgICAwMDAwICAgICAtMQorMCAgICAgMXgxMDAgICAgIDA3Nzc3NzcKKy0xICAgICAweDAgICAgIDA3OCAgICAgMHhGRSAgICAgMHhmZQorLTEwMCAgICAgLTEwMHgxMDAgICAgIDAwMCAgICAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzYuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzYjZiNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNi5pbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzYub2sgYi9zcmMvdGVzdGRpci90ZXN0MzYub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY3MGZjMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNi5vawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0MzcuaW4gYi9zcmMvdGVzdGRpci90ZXN0MzcuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhZWEzMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzNy5pbgpAQCAtMCwwICsxLDExNiBAQAorVGVzdCBmb3IgJ3Njcm9sbGJpbmQnLiA8ZXJhbHN0b25AY29tcHV0ZXIub3JnPgorU1RBUlRURVNUCis6c28gc21hbGwudmltCis6c2V0IG5vc2Nyb2xsYmluZAorOnNldCBzY3JvbGxvcHQ9dmVyLGp1bXAKKzpzZXQgc2Nyb2xsb2ZmPTIKKzpzZXQgbm93cmFwCis6c2V0IG5vZXF1YWxhbHdheXMKKzpzZXQgc3BsaXRiZWxvdworOiIgVEVTVCB1c2luZyB0d28gd2luZG93cyBvcGVuIHRvIG9uZSBidWZmZXIsIG9uZSBleHRyYSBlbXB0eSB3aW5kb3cKKzpzcGxpdAorOm5ldworF3Q6Cis6cmVzaXplIDgKKy9ec3RhcnQgb2Ygd2luZG93IDEkLworenQ6Cis6c2V0IHNjcm9sbGJpbmQKKxdqOgorOnJlc2l6ZSA3CisvXnN0YXJ0IG9mIHdpbmRvdyAyJC8KK3p0OgorOnNldCBzY3JvbGxiaW5kCis6IiAtLSBzdGFydCBvZiB0ZXN0cyAtLQorOiIgVEVTVCBzY3JvbGxpbmcgZG93bgorTDVqSHl5F2JwcjAXdEh5eRdicHIxF3RMNmpIeXkXYnByMhdrSHl5F2JwcjM6Cis6IiBURVNUIHNjcm9sbGluZyB1cAorF3RINGsXakgXdEh5eRdicHI0F2tIeXkXYnByNRdrM2sXdEgXakh5eRdicHI2F3RIeXkXYnByNzoKKzoiIFRFU1QgaG9yaXpvbnRhbCBzY3JvbGxpbmcKKzpzZXQgc2Nyb2xsb3B0Kz1ob3IKK2dnInp5eUcienBHF3QwMTV6bHkkF2JwInpwRxdreSQXYnAienBHOgorF2sxMGpIN3poZzB5JBdicCJ6cEcXdEhnMHkkF2JwInpwRzoKKzpzZXQgc2Nyb2xsb3B0LT1ob3IKKzoiICoqKioqKiB0ZXN0cyB1c2luZyB0d28gZGlmZmVyZW50IGJ1ZmZlcnMgKioqKioKKxd0F2o6Cis6Y2xvc2UKKxd0OgorOnNldCBub3Njcm9sbGJpbmQKKzovXnN0YXJ0IG9mIHdpbmRvdyAyJC8sL15lbmQgb2Ygd2luZG93IDIkL3kKKzpuZXcKKxd0F2o0InpwR3A6CisXdC9ec3RhcnQgb2Ygd2luZG93IDEkLworenQ6Cis6c2V0IHNjcm9sbGJpbmQKKxdqOgorL15zdGFydCBvZiB3aW5kb3cgMiQvCit6dDoKKzpzZXQgc2Nyb2xsYmluZAorOiIgLS0gc3RhcnQgb2YgdGVzdHMgLS0KKzoiIFRFU1Qgc2Nyb2xsaW5nIGRvd24KK0w1akh5eRdicHIwF3RIeXkXYnByMRd0TDZqSHl5F2JwcjIXa0h5eRdicHIzOgorOiIgVEVTVCBzY3JvbGxpbmcgdXAKKxd0SDRrF2pIF3RIeXkXYnByNBdrSHl5F2JwcjUXazNrF3RIF2pIeXkXYnByNhd0SHl5F2Jwcjc6Cis6IiBURVNUIGhvcml6b250YWwgc2Nyb2xsaW5nCis6c2V0IHNjcm9sbG9wdCs9aG9yCitnZyJ6eXlHInpwRxd0MDE1emx5JBdicCJ6cEcXa3kkF2JwInpwRzoKKxdrMTBqSDd6aGcweSQXYnAienBHF3RIZzB5JBdicCJ6cEc6Cis6c2V0IHNjcm9sbG9wdC09aG9yCis6IiBURVNUIHN5bmNiaW5kCisXdDpzZXQgbm9zY2IKK2dnTBdqOnNldCBub3NjYgorZ2dMOnNldCBzY2IKKxd0OnNldCBzY2IKK0cXakc6c3luY2JpbmQKK0hrF3RIF2pIeXkXYnAXdHl5F2JwOgorF3Q6c2V0IG5vc2NiCitnZ0wXajpzZXQgbm9zY2IKK2dnTDpzZXQgc2NiCisXdDpzZXQgc2NiCisXdEcXakcXdDpzeW5jYmluZAorSGsXakgXdEh5eRdicBd0F2p5eRdicDoKKxd0SDNrF2pIF3RIeXkXYnAXdBdqeXkXYnA6Cis6IiAqKioqKiBkb25lIHdpdGggdGVzdHMgKioqKioKKzp3ISB0ZXN0Lm91dCAgICAgICAgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZQorOnFhIQorRU5EVEVTVAorCisKK3N0YXJ0IG9mIHdpbmRvdyAxCisuIGxpbmUgMDEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAxCisuIGxpbmUgMDIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAyCisuIGxpbmUgMDMgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAzCisuIGxpbmUgMDQgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA0CisuIGxpbmUgMDUgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA1CisuIGxpbmUgMDYgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA2CisuIGxpbmUgMDcgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA3CisuIGxpbmUgMDggMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA4CisuIGxpbmUgMDkgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA5CisuIGxpbmUgMTAgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDEwCisuIGxpbmUgMTEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDExCisuIGxpbmUgMTIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDEyCisuIGxpbmUgMTMgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDEzCisuIGxpbmUgMTQgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDE0CisuIGxpbmUgMTUgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDE1CitlbmQgb2Ygd2luZG93IDEKKworCitzdGFydCBvZiB3aW5kb3cgMgorLiBsaW5lIDAxIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwMQorLiBsaW5lIDAyIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwMgorLiBsaW5lIDAzIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwMworLiBsaW5lIDA0IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNAorLiBsaW5lIDA1IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNQorLiBsaW5lIDA2IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNgorLiBsaW5lIDA3IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwNworLiBsaW5lIDA4IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwOAorLiBsaW5lIDA5IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAwOQorLiBsaW5lIDEwIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMAorLiBsaW5lIDExIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMQorLiBsaW5lIDEyIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMgorLiBsaW5lIDEzIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMworLiBsaW5lIDE0IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNAorLiBsaW5lIDE1IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNQorLiBsaW5lIDE2IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNgorZW5kIG9mIHdpbmRvdyAyCisKK2VuZCBvZiB0ZXN0MzcuaW4gKHBsZWFzZSBkb24ndCBkZWxldGUgdGhpcyBsaW5lKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDM3Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDM3Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MDkyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Mzcub2sKQEAgLTAsMCArMSwzMyBAQAorCiswIGxpbmUgMDUgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDA1CisxIGxpbmUgMDUgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA1CisyIGxpbmUgMTEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDExCiszIGxpbmUgMTEgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDExCis0IGxpbmUgMDYgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDA2Cis1IGxpbmUgMDYgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDA2Cis2IGxpbmUgMDIgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDAyCis3IGxpbmUgMDIgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAyCis1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDAyCitVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDAyCisuIGxpbmUgMTEgWllYV1ZVVFNSUVBPTk1MS0pJSEdSRURDQkE5ODc2NTQzMjEwIDExCisuIGxpbmUgMTEgMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIDExCisKKzAgbGluZSAwNSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDUKKzEgbGluZSAwNSAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDUKKzIgbGluZSAxMSAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTEKKzMgbGluZSAxMSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMTEKKzQgbGluZSAwNiAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDYKKzUgbGluZSAwNiBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDYKKzYgbGluZSAwMiBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDIKKzcgbGluZSAwMiAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDIKKzU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMDIKK1VUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMDIKKy4gbGluZSAxMSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMTEKKy4gbGluZSAxMSAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogMTEKKworLiBsaW5lIDE2IFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxNgorOnNldCBzY3JvbGxiaW5kCit6dDoKKy4gbGluZSAxNSBaWVhXVlVUU1JRUE9OTUxLSklIR1JFRENCQTk4NzY1NDMyMTAgMTUKKzpzZXQgc2Nyb2xsYmluZAorLiBsaW5lIDExIFpZWFdWVVRTUlFQT05NTEtKSUhHUkVEQ0JBOTg3NjU0MzIxMCAxMQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDM4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDM4LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0MzguaW4KQEAgLTAsMCArMSwzMyBAQAorCitUZXN0IFZpcnR1YWwgcmVwbGFjZSBtb2RlLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KK2dnZEdhCithYmNkZWZnaGkKK2prCWxtbgorICAgIG9wcQlyc3QKKwR1dnd4eXoKKxtnZzpzZXQgYWkKKzpzZXQgYnM9MgorZ1IwBCAxCitBCitCQ0RFRkdISUoKKwlLTAorTU5PCitQUVIbRzprYQorbzAECithYmNkZWZnaGkKK2prCWxtbgorICAgIG9wcQlyc3QKKwR1dnd4eXoKKxsnYWpnUjAEIDEKK0EKK0JDREVGR0hJSgorCUtMCitNTk8KK1BRUggICAgICAgICAgICAgICAgICAgICAgICAgICAgIGzokCitpYWIJY2RlZmdoaQlqa2wbMGdSQUIuLi4uLi5DREVGR0hJLkobbxs6CitpYWJjZGVmZ2hpamtsbW5vcHFyc3QbMGdSQUIJSUpLTE1OTwlRUhs6d3EhIHRlc3Qub3V0CitFTkRURVNUCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzOC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QzOC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTAyMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM4Lm9rCkBAIC0wLDAgKzEsMTMgQEAKKyAxCisgQQorIEJDREVGR0hJSgorIAlLTAorCU1OTworCVBRUgorIDEKK2FiY2RlZmdoaQoramsJbG1uCisgICAgb3BxCXJzdAordXZ3eHl6CitBQi4uLi4uLkNERUZHSEkuSmtsCitBQglJSktMTU5PCVFSc3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QzOS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QzOS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YyOTRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDM5LmluCkBAIC0wLDAgKzEsMjQgQEAKKworVGVzdCBWaXN1YWwgYmxvY2sgbW9kZSBjb21tYW5kcworCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9eYWJjZGUKKzoiIFRlc3Qgc2hpZnQtcmlnaHQgb2YgYSBibG9jaworamxsbGwWamo+d2xsFmpsbGw+Cis6IiBUZXN0IHNoaWZ0LWxlZnQgb2YgYSBibG9jaworRyRoaGhoFmtrPAorOiIgVGVzdCBibG9jay1pbnNlcnQKK0drbBZra2tJeHl6GworOiIgVGVzdCBibG9jay1yZXBsYWNlCitHbGxsbBZra2tsbGxycQorOiIgVGVzdCBibG9jay1jaGFuZ2UKK0cka2hoaBZoaGtrY21ubxsKKzokLTQsJHdxISB0ZXN0Lm91dAorRU5EVEVTVAorCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCithYmNkZWZnaGlqa2xtCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Mzkub2sgYi9zcmMvdGVzdGRpci90ZXN0Mzkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhMjg2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3QzOS5vawpAQCAtMCwwICsxLDUgQEAKK2F4eXpiY2RlZmdoaWprbG0KK2F4eXpxcXFxICAgbW5vCSAgICAgIGdoaWprbG0KK2F4eXpxcXFxZWYgbW5vICAgICAgICBnaGlqa2xtCitheHl6cXFxcWVmZ21ub2tsbQorYWJjZHFxcXFpamtsbQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQuaW4gYi9zcmMvdGVzdGRpci90ZXN0NC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEyZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQuaW4KQEAgLTAsMCArMSwzMSBAQAorVGVzdCBmb3IgYXV0b2NvbW1hbmQgdGhhdCBjaGFuZ2VzIGN1cnJlbnQgYnVmZmVyIG9uIEJ1ZkVudGVyIGV2ZW50LgorQ2hlY2sgaWYgbW9kZWxpbmVzIGFyZSBpbnRlcnByZXRlZCBmb3IgdGhlIGNvcnJlY3QgYnVmZmVyLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZXQgbm9jb21wYXRpYmxlIHZpbWluZm8rPW52aW1pbmZvCis6YXUgQnVmRW50ZXIgWHh4IGJyZXcKKy9zdGFydCBvZgorOi4sL2VuZCBvZi93ISBYeHggICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgKKzpzZXQgYWkgbW9kZWxpbmUgbW9kZWxpbmVzPTMKKzpzcCBYeHggICAgICAgICAgICAgIiBzcGxpdCB0byBYeHgsIGF1dG9jbWQgd2lsbCBkbyA6YnJldworRz90aGlzIGlzIGEKK290aGlzIHNob3VsZCBiZSBhdXRvLWluZGVudGVkGworOiAgICAgICAgICAgICAgICAgICAiIEFwcGVuZCB0ZXh0IHdpdGggYXV0b2luZGVudCB0byB0aGlzIGZpbGUKKzphdSEgQnVmRW50ZXIgWHh4Cis6YnVmIFh4eCAgICAgICAgICAgICIgZ28gdG8gWHh4LCBubyBhdXRvY21kIGFueW1vcmUKK0c/dGhpcyBpcyBhCitvdGhpcyBzaG91bGQgYmUgaW4gY29sdW1uIDEbOndxICIgYXBwZW5kIHRleHQgd2l0aG91dCBhdXRvaW5kZW50IHRvIFh4eAorRzpyIFh4eCAgICAgICAgICAgICAiIGluY2x1ZGUgWHh4IGluIHRoZSBjdXJyZW50IGZpbGUKKzo/c3RhcnRzdGFydD8sJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKK3N0YXJ0c3RhcnQKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHgKK3ZpbTogc2V0IG5vYWkgOgorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CitlbmQgb2YgdGVzdCBmaWxlIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQub2sgYi9zcmMvdGVzdGRpci90ZXN0NC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZlY2RhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQub2sKQEAgLTAsMCArMSwxNyBAQAorc3RhcnRzdGFydAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eAordmltOiBzZXQgbm9haSA6CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIHNob3VsZCBiZSBhdXRvLWluZGVudGVkCitlbmQgb2YgdGVzdCBmaWxlIFh4eAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eAordmltOiBzZXQgbm9haSA6CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK3RoaXMgc2hvdWxkIGJlIGluIGNvbHVtbiAxCitlbmQgb2YgdGVzdCBmaWxlIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQwLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQwLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZmI2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDAuaW4KQEAgLTAsMCArMSw2MyBAQAorVGVzdCBmb3IgIipDbWQiIGF1dG9jb21tYW5kcworCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzovXnN0YXJ0LywkdyEgWHh4CQkiIHdyaXRlIGxpbmVzIGJlbG93IHRvIFh4eAorOmF1IEJ1ZlJlYWRDbWQgdGVzdEEgMHIgWHh4fCRkZWwKKzplIHRlc3RBCQkJIiB3aWxsIHJlYWQgdGV4dCBvZiBYeGQgaW5zdGVhZAorOmF1IEJ1ZldyaXRlQ21kIHRlc3RBIGNhbGwgYXBwZW5kKGxpbmUoIiQiKSwgIndyaXRlIikKKzp3CQkJCSIgd2lsbCBhcHBlbmQgYSBsaW5lIHRvIHRoZSBmaWxlCis6ciB0ZXN0QQkJCSIgc2hvdWxkIG5vdCByZWFkIGFueXRoaW5nCis6CQkJCSIgbm93IHdlIGhhdmU6Cis6CQkJCSIgMQlzdGFydCBvZiBYeHgKKzoJCQkJIiAyCQl0ZXN0NDAKKzoJCQkJIiAzCWVuZCBvZiBYeHgKKzoJCQkJIiA0CXdyaXRlCis6YXUgRmlsZVJlYWRDbWQgdGVzdEIgJ1tyIFh4eAorOjJyIHRlc3RCCQkJIiB3aWxsIHJlYWQgWHh4IGJlbG93IGxpbmUgMiBpbnN0ZWFkCis6CQkJCSIgMQlzdGFydCBvZiBYeHgKKzoJCQkJIiAyCQl0ZXN0NDAKKzoJCQkJIiAzCXN0YXJ0IG9mIFh4eAorOgkJCQkiIDQJCXRlc3Q0MAorOgkJCQkiIDUJZW5kIG9mIFh4eAorOgkJCQkiIDYJZW5kIG9mIFh4eAorOgkJCQkiIDcJd3JpdGUKKzphdSBGaWxlV3JpdGVDbWQgdGVzdEMgJ1ssJ11jb3B5ICQKKzRHQTEbCis6NCw1dyB0ZXN0QwkJCSIgd2lsbCBjb3B5IGxpbmVzIDQgYW5kIDUgdG8gdGhlIGVuZAorOnIgdGVzdEMJCQkiIHNob3VsZCBub3QgcmVhZCBhbnl0aGluZworOgkJCQkiIDEJc3RhcnQgb2YgWHh4Cis6CQkJCSIgMgkJdGVzdDQwCis6CQkJCSIgMwlzdGFydCBvZiBYeHgKKzoJCQkJIiA0CQl0ZXN0NDAxCis6CQkJCSIgNQllbmQgb2YgWHh4Cis6CQkJCSIgNgllbmQgb2YgWHh4Cis6CQkJCSIgNwl3cml0ZQorOgkJCQkiIDgJCXRlc3Q0MDEKKzoJCQkJIiA5CWVuZCBvZiBYeHgKKzphdSBGSUxFQXBwZW5kQ21kIHRlc3REICdbLCdddyEgdGVzdC5vdXQKKzp3ID4+dGVzdEQJCQkiIHdpbGwgd3JpdGUgYWxsIGxpbmVzIHRvIHRlc3Qub3V0Cis6JHIgdGVzdEQJCQkiIHNob3VsZCBub3QgcmVhZCBhbnl0aGluZworOiR3ID4+dGVzdC5vdXQJCQkiIGFwcGVuZCAiZW5kIG9mIFh4eCIgdG8gdGVzdC5vdXQKKzphdSBCdWZSZWFkQ21kIHRlc3RFIDByIHRlc3Qub3V0fCRkZWwKKzpzcCB0ZXN0RQkJCSIgc3BsaXQgd2luZG93IHdpdGggdGVzdC5vdXQKKzVHb2FzZGYbFxc6IgorOmF1IEJ1ZldyaXRlQ21kIHRlc3RFIHchIHRlc3Qub3V0Cis6d2FsbAkJCQkiIHdpbGwgd3JpdGUgb3RoZXIgd2luZG93IHRvIHRlc3Qub3V0Cis6CQkJCSIgMQlzdGFydCBvZiBYeHgKKzoJCQkJIiAyCQl0ZXN0NDAKKzoJCQkJIiAzCXN0YXJ0IG9mIFh4eAorOgkJCQkiIDQJCXRlc3Q0MDEKKzoJCQkJIiA1CWVuZCBvZiBYeHgKKzoJCQkJIiA2CWFzZGYKKzoJCQkJIiA3CWVuZCBvZiBYeHgKKzoJCQkJIiA4CXdyaXRlCis6CQkJCSIgOQkJdGVzdDQwMQorOgkJCQkiIDEwCWVuZCBvZiBYeHgKKzoJCQkJIiAxMQllbmQgb2YgWHh4Cis6cWEhCitFTkRURVNUCisKK3N0YXJ0IG9mIFh4eAorCXRlc3Q0MAorZW5kIG9mIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQwLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDQwLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NTAxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDAub2sKQEAgLTAsMCArMSwxMSBAQAorc3RhcnQgb2YgWHh4CisJdGVzdDQwCitzdGFydCBvZiBYeHgKKwl0ZXN0NDAxCitlbmQgb2YgWHh4Cithc2RmCitlbmQgb2YgWHh4Cit3cml0ZQorCXRlc3Q0MDEKK2VuZCBvZiBYeHgKK2VuZCBvZiBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0MS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q0MS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDI5NGNhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQxLmluCkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgYSBmaWxlIG9mIG92ZXIgMTAwIEtieXRlCisKKzEgbGluZTogIlRoaXMgaXMgdGhlIHN0YXJ0IgorMzAwMSBsaW5lczogIlRoaXMgaXMgdGhlIGxlYWRlciIKKzEgbGluZTogIlRoaXMgaXMgdGhlIG1pZGRsZSIKKzMwMDEgbGluZXM6ICJUaGlzIGlzIHRoZSB0cmFpbGVyIgorMSBsaW5lOiAiVGhpcyBpcyB0aGUgZW5kIgorCitTVEFSVFRFU1QKKzolZAorYVRoaXMgaXMgdGhlIHN0YXJ0CitUaGlzIGlzIHRoZSBsZWFkZXIKK1RoaXMgaXMgdGhlIG1pZGRsZQorVGhpcyBpcyB0aGUgdHJhaWxlcgorVGhpcyBpcyB0aGUgZW5kG2tZMzAwMHAyR1kzMDAwcAorOnchIFh0ZXN0Cis6JWQKKzplISBYdGVzdAorOi53ISB0ZXN0Lm91dAorMzAwM0c6LncgPj50ZXN0Lm91dAorNjAwNUc6LncgPj50ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDEub2sgYi9zcmMvdGVzdGRpci90ZXN0NDEub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4ZTVmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0MS5vawpAQCAtMCwwICsxLDMgQEAKK1RoaXMgaXMgdGhlIHN0YXJ0CitUaGlzIGlzIHRoZSBtaWRkbGUKK1RoaXMgaXMgdGhlIGVuZApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQyLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQyLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTU2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDIuaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQyLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDQyLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjQxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDIub2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQzLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjBlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDMuaW4KQEAgLTAsMCArMSwyNyBAQAorVGVzdHMgZm9yIHJlZ2V4cCB3aXRoIHZhcmlvdXMgbWFnaWMgc2V0dGluZ3MuCisKK1NUQVJUVEVTVAorOnNldCBub2NvbXBhdGlibGUgdmltaW5mbys9bnZpbWluZm8KKy9eMQorL2EqYlx7Mn1jXCsvZQoreC9cTWRcKmVcezJ9ZlwrL2UKK3g6c2V0IG5vbWFnaWMKKy9nXCpoXHsyfWlcKy9lCit4L1xtaiprXHsyfWxcKy9lCit4L1x2bSpuezJ9bysvZQoreC9cVl5hYSQKK3g6c2V0IG1hZ2ljCisvXHYoYSkoYilcMlwxXDEvZQoreC9cVlthYl1cKFxbeHldXClcMQoreDo/XjE/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisxIGEgYWEgYWJiIGFiYmNjYworMiBkIGRkIGRlZSBkZWVmZmYKKzMgZyBnZyBnaGggZ2hoaWlpCis0IGogamogamtrIGpra2xsbAorNSBtIG1tIG1ubiBtbm5vb28KKzYgeCBeYWEkIHgKKzcgKGEpKGIpIGFiYmFhCis4IGF4eCBbYWJdeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0My5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0My5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjUzMTZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQzLm9rCkBAIC0wLDAgKzEsOCBAQAorMSBhIGFhIGFiYiBhYmJjYworMiBkIGRkIGRlZSBkZWVmZgorMyBnIGdnIGdoaCBnaGhpaQorNCBqIGpqIGprayBqa2tsbAorNSBtIG1tIG1ubiBtbm5vbworNiB4IGFhJCB4Cis3IChhKShiKSBhYmJhCis4IGF4eCBhYl14eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ0LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQ0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGE5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDQuaW4KQEAgLTAsMCArMSwzNyBAQAorVGVzdHMgZm9yIHJlZ2V4cCB3aXRoIG11bHRpLWJ5dGUgZW5jb2RpbmcgYW5kIHZhcmlvdXMgbWFnaWMgc2V0dGluZ3MuCisKK1NUQVJUVEVTVAorOnNvIG1ieXRlLnZpbQorOnNldCBub2NvbXBhdGlibGUgZW5jb2Rpbmc9dXRmLTggdGVybWVuY29kaW5nPWxhdGluMSB2aW1pbmZvKz1udmltaW5mbworL14xCisvYSpiXHsyfWNcKy9lCit4L1xNZFwqZVx7Mn1mXCsvZQoreDpzZXQgbm9tYWdpYworL2dcKmhcezJ9aVwrL2UKK3gvXG1qKmtcezJ9bFwrL2UKK3gvXHZtKm57Mn1vKy9lCit4L1xWXmFhJAoreDpzZXQgbWFnaWMKKy9cdihhKShiKVwyXDFcMS9lCit4L1xWW2FiXVwoXFt4eV1cKVwxCit4OiIgTm93IHNlYXJjaCBmb3IgbXVsdGktYnl0ZSB3aXRob3V0IGNvbXBvc2luZyBjaGFyCisv4LihCit4OiIgTm93IHNlYXJjaCBmb3IgbXVsdGktYnl0ZSB3aXRoIGNvbXBvc2luZyBjaGFyCisv4Lih4LmICit4OiIgZmluZCB3b3JkIGJ5IGNoYW5nZSBvZiB3b3JkIGNsYXNzCisv44GhXDzjgqvjg6hcPuOBrworeDo/XjE/LCR3ISB0ZXN0Lm91dAorOnFhIQorRU5EVEVTVAorCisxIGEgYWEgYWJiIGFiYmNjYworMiBkIGRkIGRlZSBkZWVmZmYKKzMgZyBnZyBnaGggZ2hoaWlpCis0IGogamogamtrIGpra2xsbAorNSBtIG1tIG1ubiBtbm5vb28KKzYgeCBeYWEkIHgKKzcgKGEpKGIpIGFiYmFhCis4IGF4eCBbYWJdeHgKKzkg4Lir4Lih4LmIeCDguK3guKF4CithIOC4reC4oXgg4Lir4Lih4LmIeAorYiDjgaHjgqvjg6jjga8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0NC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjg1MDc2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ0Lm9rCkBAIC0wLDAgKzEsMTEgQEAKKzEgYSBhYSBhYmIgYWJiY2MKKzIgZCBkZCBkZWUgZGVlZmYKKzMgZyBnZyBnaGggZ2hoaWkKKzQgaiBqaiBqa2sgamtrbGwKKzUgbSBtbSBtbm4gbW5ub28KKzYgeCBhYSQgeAorNyAoYSkoYikgYWJiYQorOCBheHggYWJdeHgKKzkg4Lir4Lih4LmIeCDguK14CithIOC4reC4oXgg4LireAorYiDjgqvjg6jjga8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0NS5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUzN2YzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ1LmluCkBAIC0wLDAgKzEsNzIgQEAKK1Rlc3RzIGZvciBmb2xkaW5nLiB2aW06IHNldCBmdD12aW0gOgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzoiIFdlIGFsc28gbmVlZCB0aGUgK3N5bnRheCBmZWF0dXJlIGhlcmUuCis6aWYgIWhhcygic3ludGF4IikKKyAgIGUhIHRlc3Qub2sKKyAgIHchIHRlc3Qub3V0CisgICBxYSEKKzplbmRpZgorOiIgYmFzaWMgdGVzdCBpZiBhIGZvbGQgY2FuIGJlIGNyZWF0ZWQsIG9wZW5lZCwgbW92aW5nIHRvIHRoZSBlbmQgYW5kIGNsb3NlZAorL14xCit6ZjJqOmNhbGwgYXBwZW5kKCIkIiwgIm1hbnVhbCAiIC4gZ2V0bGluZShmb2xkY2xvc2VkKCIuIikpKQorem86Y2FsbCBhcHBlbmQoIiQiLCBmb2xkY2xvc2VkKCIuIikpCitdejpjYWxsIGFwcGVuZCgiJCIsIGdldGxpbmUoIi4iKSkKK3pjOmNhbGwgYXBwZW5kKCIkIiwgZ2V0bGluZShmb2xkY2xvc2VkKCIuIikpKQorOiIgdGVzdCBmb2xkaW5nIHdpdGggbWFya2Vycy4KKzpzZXQgZmRtPW1hcmtlciBmZGw9MSBmZGM9MworL141Cis6Y2FsbCBhcHBlbmQoIiQiLCAibWFya2VyICIgLiBmb2xkbGV2ZWwoIi4iKSkKK1t6OmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCitqb3t7IBtye2pqOmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCitrWXBqOmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCis6IiB0ZXN0IGZvbGRpbmcgd2l0aCBpbmRlbnQKKzpzZXQgZmRtPWluZGVudCBzdz0yCisvXjIgYgoraSAgG2pJICAgIBs6Y2FsbCBhcHBlbmQoIiQiLCAiaW5kZW50ICIgLiBmb2xkbGV2ZWwoIi4iKSkKK2s6Y2FsbCBhcHBlbmQoIiQiLCBmb2xkbGV2ZWwoIi4iKSkKKzoiIHRlc3Qgc3ludGF4IGZvbGRpbmcKKzpzZXQgZmRtPXN5bnRheCBmZGw9MAorOnN5biByZWdpb24gSHVwIHN0YXJ0PSJkZCIgZW5kPSJoaCIgZm9sZAorR3prOmNhbGwgYXBwZW5kKCIkIiwgImZvbGRpbmcgIiAuIGdldGxpbmUoIi4iKSkKK2s6Y2FsbCBhcHBlbmQoIiQiLCBnZXRsaW5lKCIuIikpCis6IiB0ZXN0IGV4cHJlc3Npb24gZm9sZGluZworOmZ1biBGbHZsKCkKKyAgbGV0IGwgPSBnZXRsaW5lKHY6bG51bSkKKyAgaWYgbCA9fiAiYmIkIgorICAgIHJldHVybiAyCisgIGVsc2VpZiBsID1+ICJnZyQiCisgICAgcmV0dXJuICJzMSIKKyAgZWxzZWlmIGwgPX4gImlpJCIKKyAgICByZXR1cm4gIj4yIgorICBlbHNlaWYgbCA9fiAia2skIgorICAgIHJldHVybiAiMCIKKyAgZW5kaWYKKyAgcmV0dXJuICI9IgorZW5kZnVuCis6c2V0IGZkbT1leHByIGZkZT1GbHZsKCkKKy9iYiQKKzpjYWxsIGFwcGVuZCgiJCIsICJleHByICIgLiBmb2xkbGV2ZWwoIi4iKSkKKy9oaCQKKzpjYWxsIGFwcGVuZCgiJCIsIGZvbGRsZXZlbCgiLiIpKQorL2lpJAorOmNhbGwgYXBwZW5kKCIkIiwgZm9sZGxldmVsKCIuIikpCisva2skCis6Y2FsbCBhcHBlbmQoIiQiLCBmb2xkbGV2ZWwoIi4iKSkKKzovXmxhc3QvKzEsJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKzEgYWEKKzIgYmIKKzMgY2MKKzQgZGQge3t7Cis1IGVlIHt7eyB9fX0KKzYgZmYgfX19Cis3IGdnCis4IGhoCis5IGlpCithIGpqCitiIGtrCitsYXN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDUub2sgYi9zcmMvdGVzdGRpci90ZXN0NDUub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhMTM4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NS5vawpAQCAtMCwwICsxLDE2IEBACittYW51YWwgMSBhYQorLTEKKzMgY2MKKzEgYWEKK21hcmtlciAyCisxCisxCiswCitpbmRlbnQgMgorMQorZm9sZGluZyA4IGhoCisgICAgMyBjYworZXhwciAyCisxCisyCiswCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDYuaW4gYi9zcmMvdGVzdGRpci90ZXN0NDYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5ZGI3NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0Ni5pbgpAQCAtMCwwICsxLDI3IEBACitUZXN0cyBmb3IgbXVsdGktbGluZSByZWdleHBzIHdpdGggIjpzIi4gdmltOiBzZXQgZnQ9dmltIDoKKworU1RBUlRURVNUCis6IiB0ZXN0IGlmIHJlcGxhY2luZyBhIGxpbmUgYnJlYWsgd29ya3Mgd2l0aCBhIGJhY2sgcmVmZXJlbmNlCis6L14xLywvXjIvcy9cblwoLlwpLyBcMS8KKzoiIHRlc3QgaWYgaW5zZXJ0aW5nIGEgbGluZSBicmVhayB3b3JrcyB3aXRoIGEgYmFjayByZWZlcmVuY2UKKzovXjMvLC9eNC9zL1woLlwpJC9cclwxLworOiIgdGVzdCBpZiByZXBsYWNpbmcgYSBsaW5lIGJyZWFrIHdpdGggYW5vdGhlciBsaW5lIGJyZWFrIHdvcmtzCis6L141LywvXjYvcy9cKFxfZFx7M31cKS94XDF4LworOi9eMS8sJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKzEgYWEKK2JiCitjYworMiBkZAorZWUKKzMgZWYKK2doCis0IGlqCis1IGE4Cis4YiBjOQorOWQKKzYgZTcKKzc3ZgoreHh4eHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0Ni5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0Ni5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWIzNTNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ2Lm9rCkBAIC0wLDAgKzEsMTMgQEAKKzEgYWEgYmIgY2MgMiBkZCBlZQorMyBlCitmCitnCitoCis0IGkKK2oKKzUgYXg4Cis4eGIgY3g5Cis5eGQKKzYgZXg3Cis3eDdmCit4eHh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ3LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQ3LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YmI5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDcuaW4KQEAgLTAsMCArMSw0NCBAQAorVGVzdHMgZm9yIHZlcnRpY2FsIHNwbGl0cyBhbmQgZmlsbGVyIGxpbmVzIGluIGRpZmYgbW9kZQorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKy9eMQoreUc6bmV3Citwa2RkOnchIFh0ZXN0CitkZEdwa2tyWG94eHgbOnchIFh0ZXN0MgorOmZpbGUgTm9wCitnZ295eXkbampqb3p6enobCis6dmVydCBkaWZmc3BsaXQgWHRlc3QKKzp2ZXJ0IGRpZmZzcGxpdCBYdGVzdDIKKzoiIGp1bXAgdG8gc2Vjb25kIHdpbmRvdyBmb3IgYSBtb21lbnQgdG8gaGF2ZSBmaWxsZXIgbGluZSBhcHBlYXIgYXQgc3RhcnQgb2YKKzoiIGZpcnN0IHdpbmRvdworFxdnZxdwZ2c6bGV0IG9uZSA9IHdpbmxpbmUoKQorajpsZXQgb25lID0gb25lIC4gIi0iIC4gd2lubGluZSgpCitqOmxldCBvbmUgPSBvbmUgLiAiLSIgLiB3aW5saW5lKCkKK2o6bGV0IG9uZSA9IG9uZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgb25lID0gb25lIC4gIi0iIC4gd2lubGluZSgpCitqOmxldCBvbmUgPSBvbmUgLiAiLSIgLiB3aW5saW5lKCkKKxcXZ2c6bGV0IHR3byA9IHdpbmxpbmUoKQorajpsZXQgdHdvID0gdHdvIC4gIi0iIC4gd2lubGluZSgpCitqOmxldCB0d28gPSB0d28gLiAiLSIgLiB3aW5saW5lKCkKK2o6bGV0IHR3byA9IHR3byAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdHdvID0gdHdvIC4gIi0iIC4gd2lubGluZSgpCisXF2dnOmxldCB0aHJlZSA9IHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorajpsZXQgdGhyZWUgPSB0aHJlZSAuICItIiAuIHdpbmxpbmUoKQorFxc6Y2FsbCBhcHBlbmQoIiQiLCBvbmUpCis6Y2FsbCBhcHBlbmQoIiQiLCB0d28pCis6Y2FsbCBhcHBlbmQoIiQiLCB0aHJlZSkKKzokLTIsJHchIHRlc3Qub3V0Cis6cWEhCitFTkRURVNUCisKKzEgYWEKKzIgYmIKKzMgY2MKKzQgZGQKKzUgZWUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0Ny5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0Ny5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA3YjkzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ3Lm9rCkBAIC0wLDAgKzEsMyBAQAorMi00LTUtNi04LTkKKzEtMi00LTUtOAorMi0zLTQtNS02LTctOApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDQ4LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzlmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDguaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ4Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDQ4Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2JlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NDgub2sKQEAgLTAsMCArMSwyMSBAQAora2V5d29yZCBrZXl3b3JkCithbGwgeW91ciBiYXNlIAorYXJlIGJlbG9uZyB0byB2aW0KKzEgMiAzIDQgNSA3CisnaScgICA8LS0gc2hvdWxkIGJlIDMgJyAnCisnQycgICA8LS0gc2hvdWxkIGJlIDMgJyAnCisnYScgICAgPC0tIHNob3VsZCBiZSA0ICcgJworJ0EnPC0tIHNob3VsZCBiZSAwICcgJworJ0QnICAgPC0tICdEJyBzaG91bGQgYmUgaW50YWN0Cit0aGlzIGlzIGEgdGVzdAordGhpcyBpcyBhIHRlc3QKK3RoaXMgaXMgYSB0ZXN0CisiciIgICAgeDwtLSBzaG91bGQgYmUgJ3gnCitbVGhpcyBsaW5lIHNob3VsZCBjb250YWluIG9ubHkgdGhlIHRleHQgYmV0d2VlbiB0aGUgYnJhY2tldHMuXQorICAgdiAgIGkgICBtICAgPC0tIHNob3VsZCBzaG93IHRoZSBuYW1lIG9mIGEgbm90ZWQgdGV4dCBlZGl0b3IKKyAgICA2ICAgLiAgIDAgICA8LS0gYW5kIGl0cyB2ZXJzaW9uIG51bWJlcgorCithCithCithCisgCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDkuaW4gYi9zcmMvdGVzdGRpci90ZXN0NDkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMxN2QyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS5pbgpAQCAtMCwwICsxLDEzIEBACitUaGlzIGlzIGEgdGVzdCBvZiB0aGUgc2NyaXB0IGxhbmd1YWdlLgorCitJZiBhZnRlciBhZGRpbmcgYSBuZXcgdGVzdCwgdGhlIHRlc3Qgb3V0cHV0IGRvZXNuJ3QgYXBwZWFyIHByb3Blcmx5IGluCit0ZXN0NDkuZmFpbGVkLCB0cnkgdG8gYWRkIG9uZSBvcmUgbW9yZSAiRyJzIGF0IHRoZSBsaW5lIGJlZm9yZSBFTkRURVNULgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzpzZSBub2NwIG5vbW9yZSB2aW1pbmZvKz1udmltaW5mbworOnNvIHRlc3Q0OS52aW0KK0dHR0dHR0dHR0cicnA6Li0sJHdxISB0ZXN0Lm91dAorRU5EVEVTVAorCitSZXN1bHRzIG9mIHRlc3Q0OS52aW06CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDkub2sgYi9zcmMvdGVzdGRpci90ZXN0NDkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0MmFmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS5vawpAQCAtMCwwICsxLDkyIEBACitSZXN1bHRzIG9mIHRlc3Q0OS52aW06CisqKiogVGVzdCAgIDE6IE9LICgzNDY5NSkKKyoqKiBUZXN0ICAgMjogT0sgKDM0Njk1KQorKioqIFRlc3QgICAzOiBPSyAoMTM4NDY0ODE5NSkKKyoqKiBUZXN0ICAgNDogT0sgKDMyODgzKQorKioqIFRlc3QgICA1OiBPSyAoMzI4ODMpCisqKiogVGVzdCAgIDY6IE9LICg2MDM5Nzg5NDcpCisqKiogVGVzdCAgIDc6IE9LICg5MDU2MykKKyoqKiBUZXN0ICAgODogT0sgKDU2MjQ5MzQzMSkKKyoqKiBUZXN0ICAgOTogT0sgKDM2MykKKyoqKiBUZXN0ICAxMDogT0sgKDU1OTYxNSkKKyoqKiBUZXN0ICAxMTogT0sgKDIwNDkpCisqKiogVGVzdCAgMTI6IE9LICgzNTIyNTYpCisqKiogVGVzdCAgMTM6IE9LICgxNDUpCisqKiogVGVzdCAgMTQ6IE9LICg0MjQxMykKKyoqKiBUZXN0ICAxNTogT0sgKDQyNDEzKQorKioqIFRlc3QgIDE2OiBPSyAoODcyMikKKyoqKiBUZXN0ICAxNzogT0sgKDI4NTEyNzk5MykKKyoqKiBUZXN0ICAxODogT0sgKDY3MjI0NTgzKQorKioqIFRlc3QgIDE5OiBPSyAoNjkyNzU5NzMpCisqKiogVGVzdCAgMjA6IE9LICgxODc0NTc1MDg1KQorKioqIFRlc3QgIDIxOiBPSyAoMTQ3OTMyMjI1KQorKioqIFRlc3QgIDIyOiBPSyAoNDE2MSkKKyoqKiBUZXN0ICAyMzogT0sgKDQ5KQorKioqIFRlc3QgIDI0OiBPSyAoNDEpCisqKiogVGVzdCAgMjU6IE9LICgyNjAxNzc4MTEpCisqKiogVGVzdCAgMjY6IE9LICgxNjgxNTAwNDc2KQorKioqIFRlc3QgIDI3OiBPSyAoMTk5NjQ1OSkKKyoqKiBUZXN0ICAyODogT0sgKDE5OTY0NTkpCisqKiogVGVzdCAgMjk6IE9LICgxNzA0Mjg1NTUpCisqKiogVGVzdCAgMzA6IE9LICgxOTA5MDUxNzMpCisqKiogVGVzdCAgMzE6IE9LICgxOTA5MDUxNzMpCisqKiogVGVzdCAgMzI6IE9LICgzNTQ4MzMwNjcpCistLS0gVGVzdCAgMzM6IHN1bSA9IDE3ODI3NTYwMCAob2spCisqKiogVGVzdCAgMzM6IE9LICgxMjE2OTA3NTM4KQorKioqIFRlc3QgIDM0OiBPSyAoMjE0NjU4NDg2OCkKKyoqKiBUZXN0ICAzNTogT0sgKDIxNDY1ODQ4NjgpCisqKiogVGVzdCAgMzY6IE9LICgxMDcxNjQ0NjcyKQorKioqIFRlc3QgIDM3OiBPSyAoMTA3MTY0NDY3MikKKyoqKiBUZXN0ICAzODogT0sgKDM1NzkwODQ4MCkKKyoqKiBUZXN0ICAzOTogT0sgKDM1NzkwODQ4MCkKKyoqKiBUZXN0ICA0MDogT0sgKDM1NzkwODQ4MCkKKyoqKiBUZXN0ICA0MTogT0sgKDMwNzYwOTUpCisqKiogVGVzdCAgNDI6IE9LICgxNTA1MTU1OTQ5KQorKioqIFRlc3QgIDQzOiBPSyAoMTE1Nzc2MzMyOSkKKyoqKiBUZXN0ICA0NDogT0sgKDEwMzE3NjE0MDcpCisqKiogVGVzdCAgNDU6IE9LICgxMTU3NzYzMzI5KQorKioqIFRlc3QgIDQ2OiBPSyAoNzM5NDA3KQorKioqIFRlc3QgIDQ3OiBPSyAoMzcxMjEzOTM1KQorKioqIFRlc3QgIDQ4OiBPSyAoNzU2MjU1NDYxKQorKioqIFRlc3QgIDQ5OiBPSyAoMTc5MDAwNjY5KQorKioqIFRlc3QgIDUwOiBPSyAoMzYzNTUwMDQ1KQorKioqIFRlc3QgIDUxOiBPSyAoNDA3NDQ2NjcpCisqKiogVGVzdCAgNTI6IE9LICgxMjQ3MTEyMDExKQorKioqIFRlc3QgIDUzOiBPSyAoMTMxMDcxKQorKioqIFRlc3QgIDU0OiBPSyAoMjA0NykKKyoqKiBUZXN0ICA1NTogT0sgKDEwMjMpCisqKiogVGVzdCAgNTY6IE9LICg1MTEpCisqKiogVGVzdCAgNTc6IE9LICgyMTQ3NDUwODgwKQorKioqIFRlc3QgIDU4OiBPSyAoNjI0OTQ1KQorKioqIFRlc3QgIDU5OiBPSyAoMjAzODQzMTc0MykKKyoqKiBUZXN0ICA2MDogT0sgKDMxMTUxMTMzOSkKKyoqKiBUZXN0ICA2MTogT0sgKDM3NDg4OTUxNykKKyoqKiBUZXN0ICA2MjogT0sgKDI4NjMzMTE1MykKKyoqKiBUZXN0ICA2MzogT0sgKDIzNjk3ODEyNykKKyoqKiBUZXN0ICA2NDogT0sgKDE0OTk2NDUzMzUpCisqKiogVGVzdCAgNjU6IE9LICg3MDE4NykKKyoqKiBUZXN0ICA2NjogT0sgKDU0NjQpCisqKiogVGVzdCAgNjc6IE9LICgyMTI1MTQ0MjMpCisqKiogVGVzdCAgNjg6IE9LICgyMTI1MTQ0MjMpCisqKiogVGVzdCAgNjk6IE9LICg4OTk1NDcxKQorKioqIFRlc3QgIDcwOiBPSyAoNjk1NDQyNzcpCisqKiogVGVzdCAgNzE6IE9LICgzNDg4Njk5NykKKyoqKiBUZXN0ICA3MjogT0sgKDE3ODk1NjkzNjUpCisqKiogVGVzdCAgNzM6IE9LICg5MDMyNjE1KQorKioqIFRlc3QgIDc0OiBPSyAoMjI0OTA3NjY5KQorKioqIFRlc3QgIDc1OiBPSyAoMjAwMDQwMzQwOCkKKyoqKiBUZXN0ICA3NjogT0sgKDE2MTAwODc5MzUpCisqKiogVGVzdCAgNzc6IE9LICgxMzg4NjcxKQorKioqIFRlc3QgIDc4OiBPSyAoMTM0MjE3NzI4KQorKioqIFRlc3QgIDc5OiBPSyAoNzAyODg5MjkpCisqKiogVGVzdCAgODA6IE9LICgxNzg5NTc2NSkKKyoqKiBUZXN0ICA4MTogT0sgKDM4NykKKyoqKiBUZXN0ICA4MjogT0sgKDg0NTQ0MDEpCisqKiogVGVzdCAgODM6IE9LICgyODM1KQorKioqIFRlc3QgIDg0OiBPSyAoOTM0NzgyMTAxKQorKioqIFRlc3QgIDg1OiBPSyAoMTk4Njg5KQorLS0tIFRlc3QgIDg2OiBBbGwgdGVzdHMgd2VyZSBydW4gd2l0aCB0aHJvd2luZyBleGNlcHRpb25zIG9uIGVycm9yLgorCSAgICAgIFRoZSAkVklNTk9FUlJUSFJPVyBjb250cm9sIGlzIG5vdCBjb25maWd1cmVkLgorLS0tIFRlc3QgIDg2OiBBbGwgdGVzdHMgd2VyZSBydW4gd2l0aCB0aHJvd2luZyBleGNlcHRpb25zIG9uIGludGVycnVwdC4KKwkgICAgICBUaGUgJFZJTU5PSU5UVEhST1cgY29udHJvbCBpcyBub3QgY29uZmlndXJlZC4KKyoqKiBUZXN0ICA4NjogT0sgKDUwNDQzOTk1KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDQ5LnZpbSBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0MmE5NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0KQEAgLTAsMCArMSw5NjY2IEBACisiIFZpbSBzY3JpcHQgbGFuZ3VhZ2UgdGVzdHMKKyIgQXV0aG9yOglTZXJ2YXRpdXMgQnJhbmR0IDxTZXJ2YXRpdXMuQnJhbmR0QGZ1aml0c3Utc2llbWVucy5jb20+CisiIExhc3QgQ2hhbmdlOgkyMDA0IEFwciAwMworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IGVudmlyb25tZW50CQkJCQkJCSAgICB7e3sxCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyIgQWRkaW5nIG5ldyB0ZXN0cyBlYXNpbHkuCQkJCQkJICAgIHt7ezIKKyIKKyIgV3JpdGluZyBuZXcgdGVzdHMgaXMgZWFzZWQgY29uc2lkZXJhYmx5IHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kCisiIGFiYnJldmlhdGlvbnMgKHNlZSAiQ29tbWFuZHMgZm9yIHJlY29yZGluZyB0aGUgZXhlY3V0aW9uIHBhdGgiLCAiQXV0b21hdGljCisiIGFyZ3VtZW50IGdlbmVyYXRpb24iKS4KKyIKKyIgVG8gZ2V0IHRoZSBhYmJyZXZpYXRpb25zLCBleGVjdXRlIHRoZSBjb21tYW5kCisiCisiICAgIDpsZXQgdGVzdDQ5X3NldF9lbnYgPSAxIHwgc291cmNlIHRlc3Q0OS52aW0KKyIKKyIgVG8gZ2V0IHRoZW0gYWx3YXlzIChmcm9tIHNyYy90ZXN0ZGlyKSwgcHV0IGEgbGluZQorIgorIiAgICBhdSEgQnVmUmVhZCB0ZXN0NDkudmltIGxldCB0ZXN0NDlfc2V0X2VudiA9IDEgfCBzb3VyY2UgdGVzdDQ5LnZpbQorIgorIiBpbnRvIHRoZSBsb2NhbCAudmltcmMgZmlsZSBpbiB0aGUgc3JjL3Rlc3RkaXIgZGlyZWN0b3J5LgorIgoraWYgZXhpc3RzKCJ0ZXN0NDlfc2V0X2VudiIpICYmIHRlc3Q0OV9zZXRfZW52CisKKyAgICAiIEF1dG9tYXRpYyBhcmd1bWVudCBnZW5lcmF0aW9uIGZvciB0aGUgdGVzdCBlbnZpcm9ubWVudCBjb21tYW5kcy4KKworICAgIGZ1bmN0aW9uISBYc3VtKCkKKwlsZXQgYWRkZW5kID0gc3Vic3RpdHV0ZShnZXRsaW5lKCIuIiksICdeLioiXHMqWDpccypcfF4uKicsICcnLCAiIikKKwkiIEV2YWx1YXRlIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4KKwlpZiBhZGRlbmQgIT0gIiIKKwkgICAgZXhlYyAibGV0IGc6WHN1bSA9IGc6WHN1bSArICIgLiBhZGRlbmQKKwllbmRpZgorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBmdW5jdGlvbiEgWGNoZWNrKCkKKwlsZXQgZzpYc3VtPTAKKwk/WHBhdGhJTklUPywuY2FsbCBYc3VtKCkKKwlleGVjICJub3JtIEEgIgorCXJldHVybiBnOlhzdW0KKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWFiIFhjaGVjayBYY2hlY2s8U3BhY2U+PEMtUj49WGNoZWNrKCk8Q1I+PEMtTz54CisKKyAgICBmdW5jdGlvbiEgWGNvbW1lbnQobnVtKQorCWxldCBzdHIgPSAiIgorCWxldCB0YWJ3aWR0aCA9ICZzdHMgPyAmc3RzIDogJnRzCisJbGV0IHRhYnMgPSAoNDgrdGFid2lkdGggLSBhOm51bSAtIHZpcnRjb2woIi4iKSkgLyB0YWJ3aWR0aAorCXdoaWxlIHRhYnMgPiAwCisJICAgIGxldCBzdHIgPSBzdHIgLiAiXHQiCisJICAgIGxldCB0YWJzID0gdGFicyAtIDEKKwllbmR3aGlsZQorCWxldCBzdHIgPSBzdHIgLiAnIiBYOicKKwlyZXR1cm4gc3RyCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBYbG9vcCgpCisJbGV0IGJhY2sgPSBsaW5lKCIuIikgLiAifG5vcm0iIC4gdmlydGNvbCgiLiIpIC4gInwiCisJbm9ybSAwCisJbGV0IGxhc3QgPSBzZWFyY2goJ1hcKGxvb3BcfHBhdGhcKUlOSVRcfFhsb29wXD4nLCAiYlciKQorCWV4ZWMgYmFjaworCWxldCB0aGVsaW5lID0gZ2V0bGluZShsYXN0KQorCWlmIHRoZWxpbmUgPX4gJ1hcKGxvb3BcfHBhdGhcKUlOSVQnCisJICAgIGxldCBudW0gPSAxCisJZWxzZQorCSAgICBsZXQgbnVtID0gMiAqIHN1YnN0aXR1dGUodGhlbGluZSwgJy4qWGxvb3BccypcKFxkXCtcKS4qJywgJ1wxJywgIiIpCisJZW5kaWYKKwk/WFwobG9vcFx8cGF0aFwpSU5JVD8KKwkgICAgXHMvXChYbG9vcElOSVQhXD1ccypcZFwrXHNcK1wpXEA8PVwoXGRcK1wpL1w9MipzdWJtYXRjaCgyKS8KKwlleGVjIGJhY2sKKwlleGVjICJub3JtIGEgIgorCXJldHVybiBudW0gLiBYY29tbWVudChzdHJsZW4obnVtKSkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWFiIFhsb29wIFhsb29wPFNwYWNlPjxDLVI+PVhsb29wKCk8Q1I+PEMtTz54CisKKyAgICBmdW5jdGlvbiEgWHBhdGgobG9vcGluaXQpCisJbGV0IGJhY2sgPSBsaW5lKCIuIikgLiAifG5vcm0iIC4gdmlydGNvbCgiLiIpIC4gInwiCisJbm9ybSAwCisJbGV0IGxhc3QgPSBzZWFyY2goJ1hwYXRoSU5JVFx8WHBhdGhcPlx8WGxvb3BJTklUJywgImJXIikKKwlleGVjIGJhY2sKKwlsZXQgdGhlbGluZSA9IGdldGxpbmUobGFzdCkKKwlpZiB0aGVsaW5lID1+ICdYcGF0aElOSVQnCisJICAgIGxldCBudW0gPSAxCisJZWxzZWlmIHRoZWxpbmUgPX4gJ1hwYXRoXD4nCisJICAgIGxldCBudW0gPSAyICogc3Vic3RpdHV0ZSh0aGVsaW5lLCAnLipYcGF0aFxzKlwoXGRcK1wpLionLCAnXDEnLCAiIikKKwllbHNlCisJICAgIGxldCBwYXR0ZXJuID0gJy4qWGxvb3BJTklUIVw9XHMqXChcZFwrXClccypcKFxkXCtcKS4qJworCSAgICBsZXQgbnVtID0gc3Vic3RpdHV0ZSh0aGVsaW5lLCBwYXR0ZXJuLCAnXDEnLCAiIikKKwkgICAgbGV0IGZhY3RvciA9IHN1YnN0aXR1dGUodGhlbGluZSwgcGF0dGVybiwgJ1wyJywgIiIpCisJICAgICIgVGhlICI8Qy1PPngiIGZyb20gdGhlICJYcGF0aCIgaWFiIGFuZCB0aGUgY2hhcmFjdGVyIHRyaWdnZXJpbmcgaXRzCisJICAgICIgZXhwYW5zaW9uIGFyZSBpbiB0aGUgaW5wdXQgYnVmZmVyLiAgU2F2ZSBhbmQgY2xlYXIgdHlwZWFoZWFkIHNvCisJICAgICIgdGhhdCBpdCBpcyBub3QgcmVhZCBhd2F5IGJ5IHRoZSBjYWxsIHRvICJpbnB1dCgpIiBiZWxvdy4gIFJlc3RvcmUKKwkgICAgIiBhZnRlcndhcmRzLgorCSAgICBjYWxsIGlucHV0c2F2ZSgpCisJICAgIGxldCBsb29wcyA9IGlucHV0KCJOdW1iZXIgb2YgaXRlcmF0aW9ucyBpbiBwcmV2aW91cyBsb29wPyAiKQorCSAgICBjYWxsIGlucHV0cmVzdG9yZSgpCisJICAgIHdoaWxlIChsb29wcyA+IDApCisJCWxldCBudW0gPSBudW0gKiBmYWN0b3IKKwkJbGV0IGxvb3BzID0gbG9vcHMgLSAxCisJICAgIGVuZHdoaWxlCisJZW5kaWYKKwlleGVjICJub3JtIGEgIgorCWlmIGE6bG9vcGluaXQKKwkgICAgcmV0dXJuIG51bSAuICIgMSIKKwllbmRpZgorCXJldHVybiBudW0gLiBYY29tbWVudChzdHJsZW4obnVtKSkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWFiIFhwYXRoIFhwYXRoPFNwYWNlPjxDLVI+PVhwYXRoKDApPENSPjxDLU8+eAorICAgIGlhYiBYbG9vcElOSVQgWGxvb3BJTklUPFNwYWNlPjxDLVI+PVhwYXRoKDEpPENSPjxDLU8+eAorCisgICAgIiBBbHNvIHVzZWZ1bCAoc2VlIEV4dHJhVmltIGJlbG93KToKKyAgICBhdWcgRXh0cmFWaW0KKwlhdSEKKwlhdSAgQnVmRW50ZXIgPHNmaWxlPiBzeW4gcmVnaW9uIEV4dHJhVmltCisJCSAgICBcIHN0YXJ0PSteaWZcc1wrRXh0cmFWaW0oLiopKyBlbmQ9K15lbmRpZisKKwkJICAgIFwgdHJhbnNwYXJlbnQga2VlcGVuZAorCWF1ICBCdWZFbnRlciA8c2ZpbGU+IHN5biBtYXRjaCBFeHRyYUNvbW1lbnQgL14iLworCQkgICAgXCBjb250YWluZWQgY29udGFpbmVkaW49RXh0cmFWaW0KKwlhdSAgQnVmRW50ZXIgPHNmaWxlPiBoaSBsaW5rIEV4dHJhQ29tbWVudCB2aW1Db21tZW50CisgICAgYXVnIEVORAorCisgICAgYXVnIFhwYXRoCisJYXUgIEJ1ZkVudGVyIDxzZmlsZT4gc3luIGtleXdvcmQgWHBhdGgKKwkJICAgIFwgWHBhdGhJTklUIFhwYXRoIFhsb29wSU5JVCBYbG9vcCBYbG9vcE5FWFQgWGNoZWNrIFhvdXQKKwlhdSAgQnVmRW50ZXIgPHNmaWxlPiBoaSBsaW5rIFhwYXRoIFNwZWNpYWwKKyAgICBhdWcgRU5ECisKKyAgICBkbyBCdWZFbnRlciA8c2ZpbGU+CisKKyAgICAiIERvIG5vdCBleGVjdXRlIHRoZSB0ZXN0cyB3aGVuIHNvdXJjaW5nIHRoaXMgZmlsZSBmb3IgZ2V0dGluZyB0aGUgZnVuY3Rpb25zCisgICAgIiBhbmQgYWJicmV2aWF0aW9ucyBhYm92ZSwgd2hpY2ggYXJlIGludGVuZGVkIGZvciBlYXNpbHkgYWRkaW5nIG5ldyB0ZXN0CisgICAgIiBjYXNlczsgdGhleSBhcmUgbm90IG5lZWRlZCBmb3IgdGVzdCBleGVjdXRpb24uICBVbmxldCB0aGUgdmFyaWFibGUKKyAgICAiIGNvbnRyb2xsaW5nIHRoaXMgc28gdGhhdCBhbiBleHBsaWNpdCAiOnNvdXJjZSIgY29tbWFuZCBmb3IgdGhpcyBmaWxlIHdpbGwKKyAgICAiIGV4ZWN1dGUgdGhlIHRlc3RzLgorICAgIHVubGV0IHRlc3Q0OV9zZXRfZW52CisgICAgZmluaXNoCisKK2VuZGlmCisKKworIiBDb21tYW5kcyBmb3IgcmVjb3JkaW5nIHRoZSBleGVjdXRpb24gcGF0aC4JCQkJICAgIHt7ezIKKyIKKyIgVGhlIFhwYXRoL1hsb29wIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGZvciBjb21wdXRpbmcgdGhlIGVYZWN1dGlvbiBwYXRoIGJ5CisiIGFkZGluZyAoZGlmZmVyZW50KSBwb3dlcnMgb2YgMiBmcm9tIHRob3NlIHNjcmlwdCBsaW5lcywgZm9yIHdoaWNoIHRoZQorIiBleGVjdXRpb24gc2hvdWxkIGJlIGNoZWNrZWQuICBYbG9vcCBwcm92aWRlcyBkaWZmZXJlbnQgYWRkZW5kcyBmb3IgZWFjaAorIiBleGVjdXRpb24gb2YgYSBsb29wLiAgUGVybWl0dGFibGUgdmFsdWVzIGFyZSAyXjAgdG8gMl4zMCwgc28gdGhhdCAzMSBleGVjdXRpb24KKyIgcG9pbnRzIChtdWx0aXBseSBjb3VudGVkIGluc2lkZSBsb29wcykgY2FuIGJlIHRlc3RlZC4KKyIKKyIgTm90ZSB0aGF0IHRoZSBhcmd1bWVudHMgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBjYW4gYmUgZ2VuZXJhdGVkCisiIGF1dG9tYXRpY2FsbHksIHNlZSBiZWxvdy4KKyIKKyIgVXNhZ2U6CQkJCQkJCQkgICAge3t7MworIgorIiAgIC0gVXNlIFhwYXRoSU5JVCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXN0LgorIgorIiAgIC0gVXNlIFhwYXRoIHRvIGNoZWNrIGlmIGEgbGluZSBpcyBleGVjdXRlZC4KKyIgICAgIEFyZ3VtZW50OiBwb3dlciBvZiAyIChkZWNpbWFsKS4KKyIKKyIgICAtIFRvIGNoZWNrIG11bHRpcGxlIGV4ZWN1dGlvbiBvZiBsb29wcyB1c2UgWGxvb3AgZm9yIGF1dG9tYXRpY2FsbHkKKyIgICAgIGNvbXB1dGluZyBYcGF0aCB2YWx1ZXM6CisiCisiCS0gVXNlIFhsb29wSU5JVCBiZWZvcmUgdGhlIGxvb3AuCisiCSAgVHdvIGFyZ3VtZW50czoKKyIJCS0gdGhlIGZpcnN0IFhwYXRoIHZhbHVlIChwb3dlciBvZiAyKSB0byBiZSB1c2VkIChYbmV4dCksCisiCQktIGZhY3RvciBmb3IgY29tcHV0aW5nIGEgbmV3IFhuZXh0IHZhbHVlIHdoZW4gcmVleGVjdXRpbmcgYSBsb29wCisiCQkgIChieSBhICI6Y29udGludWUiIG9yICI6ZW5kd2hpbGUiKTsgdGhpcyBzaG91bGQgYmUgMl5uIHdoZXJlCisiCQkgIG4gaXMgdGhlIG51bWJlciBvZiBYbG9vcCBjb21tYW5kcyBpbnNpZGUgdGhlIGxvb3AuCisiCSAgSWYgWGxvb3BJTklUISBpcyB1c2VkLCB0aGUgZmlyc3QgZXhlY3V0aW9uIG9mIFhsb29wTkVYVCBpcworIgkgIGEgbm8tb3BlcmF0aW9uLgorIgorIiAgICAgICAtIFVzZSBYbG9vcCBpbnNpZGUgdGhlIGxvb3A6CisiCSAgT25lIGFyZ3VtZW50OgorIgkJVGhlIGFyZ3VtZW50IGFuZCB0aGUgWG5leHQgdmFsdWUgYXJlIG11bHRpcGxpZWQgdG8gYnVpbGQgdGhlCisiCQluZXh0IFhwYXRoIHZhbHVlLiAgTm8gbmV3IFhuZXh0IHZhbHVlIGlzIHByZXBhcmVkLiAgVGhlIGFyZ3VtZW50CisiCQlzaG91bGQgYmUgMl4obi0xKSBmb3IgdGhlIG50aCBYbG9vcCBjb21tYW5kIGluc2lkZSB0aGUgbG9vcC4KKyIJCUlmIHRoZSBsb29wIGhhcyBvbmx5IG9uZSBYbG9vcCBjb21tYW5kLCB0aGUgYXJndW1lbnQgY2FuIGJlCisiCQlvbW1pdHRlZCAoZGVmYXVsdDogMSkuCisiCisiCS0gVXNlIFhsb29wTkVYVCBiZWZvcmUgIjpjb250aW51ZSIgYW5kICI6ZW5kd2hpbGUiLiAgVGhpcyBjb21wdXRlcyBhIG5ldworIgkgIFhuZXh0IHZhbHVlIGZvciB0aGUgbmV4dCBleGVjdXRpb24gb2YgdGhlIGxvb3AgYnkgbXVsdGlwbHlpbmcgdGhlIG9sZAorIgkgIG9uZSB3aXRoIHRoZSBmYWN0b3Igc3BlY2lmaWVkIGluIHRoZSBYbG9vcElOSVQgY29tbWFuZC4gIE5vIEFyZ3VtZW50LgorIgkgIEFsdGVybmF0aXZlbHksIHdoZW4gWGxvb3BJTklUISBpcyB1c2VkLCBhIHNpbmdsZSBYbG9vcE5FWFQgYXQgdGhlCisiCSAgYmVnaW5uaW5nIG9mIHRoZSBsb29wIGNhbiBiZSB1c2VkLgorIgorIiAgICAgTmVzdGVkIGxvb3BzIGFyZSBub3Qgc3VwcG9ydGVkLgorIgorIiAgIC0gVXNlIFhjaGVjayBhdCBlbmQgb2YgZWFjaCB0ZXN0LiAgSXQgcHJpbnRzIHRoZSB0ZXN0IG51bWJlciwgdGhlIGV4cGVjdGVkCisiICAgICBleGVjdXRpb24gcGF0aCB2YWx1ZSwgdGhlIHRlc3QgcmVzdWx0ICgiT0siIG9yICJGQUlMIiksIGFuZCwgaWYgdGhlIHRlc3RzCisiICAgICBmYWlscywgdGhlIGFjdHVhbCBleGVjdXRpb24gcGF0aC4KKyIgICAgIE9uZSBhcmd1bWVudDoKKyIJICAgIEV4cGVjdGVkIFhwYXRoL1hsb29wIHN1bSBmb3IgdGhlIGNvcnJlY3QgZXhlY3V0aW9uIHBhdGguCisiCSAgICBJbiBvcmRlciB0aGF0IHRoaXMgdmFsdWUgY2FuIGJlIGNvbXB1dGVkIGF1dG9tYXRpY2FsbHksIGRvIHRoZQorIgkgICAgZm9sbG93aW5nOiBGb3IgZWFjaCBsaW5lIGluIHRoZSB0ZXN0IHdpdGggYW4gWHBhdGggYW5kIFhsb29wCisiCSAgICBjb21tYW5kLCBhZGQgYSBjb21tZW50IHN0YXJ0aW5nIHdpdGggIlg6IiBhbmQgc3BlY2lmeWluZyBhbgorIgkgICAgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0aGUgdmFsdWUgY29udHJpYnV0ZWQgYnkgdGhpcyBsaW5lIHRvCisiCSAgICB0aGUgY29ycmVjdCBleGVjdXRpb24gcGF0aC4gIChGb3IgY29weWluZyBhbiBYcGF0aCBhcmd1bWVudCBvZiBhdAorIgkgICAgbGVhc3QgdHdvIGRpZ2l0cyBpbnRvIHRoZSBjb21tZW50LCBwcmVzcyA8Qy1QPi4pICBBdCB0aGUgZW5kIG9mIHRoZQorIgkgICAgdGVzdCwganVzdCB0eXBlICJYY2hlY2siIGFuZCBwcmVzcyA8RXNjPi4KKyIKKyIgICAtIEluIG9yZGVyIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIHRoZSB0ZXN0IG91dHB1dCBmaWxlLCB1c2UgdGhlCisiICAgICBYb3V0IGNvbW1hbmQuICBBcmd1bWVudChzKSBsaWtlICI6ZWNobyIuCisiCisiIEF1dG9tYXRpYyBhcmd1bWVudCBnZW5lcmF0aW9uOgkJCQkJICAgIHt7ezMKKyIKKyIgICBUaGUgYXJndW1lbnRzIG9mIHRoZSBYcGF0aCwgWGxvb3BJTklULCBYbG9vcCwgYW5kIFhjaGVjayBjb21tYW5kcyBjYW4gYmUKKyIgICBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgc28gdGhhdCBuZXcgdGVzdHMgY2FuIGVhc2lseSBiZSB3cml0dGVuIHdpdGhvdXQKKyIgICBtZW50YWwgYXJpdGhtZXRpYy4gIFRoZSBYY2hlY2sgYXJndW1lbnQgaXMgY29tcHV0ZWQgZnJvbSB0aGUgIlg6IiBjb21tZW50cworIiAgIG9mIHRoZSBwcmVjZWRpbmcgWHBhdGggYW5kIFhsb29wIGNvbW1hbmRzLiAgU2VlIHRoZSBjb21tYW5kcyBhbmQKKyIgICBhYmJyZXZpYXRpb25zIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlLgorIgorIiBJbXBsZW1lbnRhdGlvbjoJCQkJCQkJICAgIHt7ezMKKyIgICAgIFhwYXRoSU5JVCwgWHBhdGgsIFhsb29wSU5JVCwgWGxvb3AsIFhsb29wTkVYVCwgWGNoZWNrLCBYb3V0LgorIgorIiBUaGUgdmFyaWFudHMgZm9yIGV4aXN0aW5nIGc6RXh0cmFWaW1SZXN1bHQgYXJlIG5lZWRlZCB3aGVuIGV4ZWN1dGluZyBhIHNjcmlwdAorIiBpbiBhbiBleHRyYSBWaW0gcHJvY2Vzcywgc2VlIEV4dHJhVmltIGJlbG93LgorCisiIEVYVFJBX1ZJTV9TVEFSVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KKworY29tIQkJICAgIFhwYXRoSU5JVAlsZXQgZzpYcGF0aCA9IDAKKworaWYgZXhpc3RzKCJnOkV4dHJhVmltUmVzdWx0IikKKyAgICBjb20hIC1jb3VudCAtYmFyICAgIFhwYXRoCWV4ZWMgIiFlY2hvIDxjb3VudD4gPj4iIC4gZzpFeHRyYVZpbVJlc3VsdAorZWxzZQorICAgIGNvbSEgLWNvdW50IC1iYXIgICAgWHBhdGgJbGV0IGc6WHBhdGggPSBnOlhwYXRoICsgPGNvdW50PgorZW5kaWYKKworY29tISAtY291bnQgLW5hcmdzPTEgLWJhbmcKKwkJICBcIFhsb29wSU5JVAlsZXQgZzpYbmV4dCA9IDxjb3VudD4gfAorCQkJCSAgICBcIGxldCBnOlhmYWN0b3IgPSA8YXJncz4gfAorCQkJCSAgICBcIGxldCBnOlhza2lwID0gc3RybGVuKCI8YmFuZz4iKQorCitpZiBleGlzdHMoImc6RXh0cmFWaW1SZXN1bHQiKQorICAgIGNvbSEgLWNvdW50PTEgLWJhciAgWGxvb3AJZXhlYyAiIWVjaG8gIiAuIChnOlhuZXh0ICogPGNvdW50PikgLiAiID4+IiAuCisJCQkJICAgIFwgZzpFeHRyYVZpbVJlc3VsdAorZWxzZQorICAgIGNvbSEgLWNvdW50PTEgLWJhciAgWGxvb3AJbGV0IGc6WHBhdGggPSBnOlhwYXRoICsgZzpYbmV4dCAqIDxjb3VudD4KK2VuZGlmCisKK2NvbSEJCSAgICBYbG9vcE5FWFQJbGV0IGc6WG5leHQgPSBnOlhuZXh0ICoKKwkJCQkgICAgXCAoZzpYc2tpcCA/IDEgOiBnOlhmYWN0b3IpIHwKKwkJCQkgICAgXCBsZXQgZzpYc2tpcCA9IDAKKworbGV0IEByID0gIiIKK2xldCBYdGVzdCA9IDEKK2NvbSEgLWNvdW50CSAgICBYY2hlY2sJbGV0IFhyZXN1bHQgPSAiKioqIFRlc3QgIiAuCisJCQkJICAgIFwgKFh0ZXN0PDEwPyIgICI6WHRlc3Q8MTAwPyIgIjoiIikgLgorCQkJCSAgICBcIFh0ZXN0IC4gIjogIiAuICgKKwkJCQkgICAgXCAoWHBhdGg9PTxjb3VudD4pID8gIk9LICgiLlhwYXRoLiIpIiA6CisJCQkJCVwgIkZBSUwgKCIuWHBhdGguIiBpbnN0ZWFkIG9mIDxjb3VudD4pIgorCQkJCSAgICBcICkgfAorCQkJCSAgICBcIGxldCBAUiA9IFhyZXN1bHQgLiAiXG4iIHwKKwkJCQkgICAgXCBlY2hvIFhyZXN1bHQgfAorCQkJCSAgICBcIGxldCBYdGVzdCA9IFh0ZXN0ICsgMQorCitpZiBleGlzdHMoImc6RXh0cmFWaW1SZXN1bHQiKQorICAgIGNvbSEgLW5hcmdzPSsgICAgWG91dAlleGVjICJleGVjIFwiIWVjaG8gQFI6J1wiIC4iCisJCQkJICAgIFwgJ3N1YnN0aXR1dGUoc3Vic3RpdHV0ZSgiJyAuIDxhcmdzPiAuCisJCQkJICAgIFwgJyIsICInIC4gIiciIC4gJyIsICcgLiAiJyIgLiAnJlxcJiYnIC4gIiciCisJCQkJICAgIFwgLiAnLCAiZyIpLCAiXG4iLCAiQE5MQCIsICJnIiknCisJCQkJICAgIFwgIi4gXCInID4+XCIgLiBnOkV4dHJhVmltUmVzdWx0IgorZWxzZQorICAgIGNvbSEgLW5hcmdzPSsgICAgWG91dAlleGVjICdsZXQgQFIgPSAiLS0tIFRlc3QgJyAuCisJCQkJICAgIFwgKGc6WHRlc3Q8MTA/IiAgIjpnOlh0ZXN0PDEwMD8iICI6IiIpIC4KKwkJCQkgICAgXCBnOlh0ZXN0IC4gIjogIiAuCisJCQkJICAgIFwgJyIgLiBzdWJzdGl0dXRlKCInIC4gPGFyZ3M+IC4KKwkJCQkgICAgXCAnIiwgIlxuIiwgIiZcdCAgICAgICIsICJnIikgLiAiXG4iJworZW5kaWYKKworIiBTd2l0Y2ggb2ZmIHN0b3Jpbmcgb2YgbGluZXMgZm9yIHVuZG9pbmcgY2hhbmdlcy4gIFNwZWVkcyB0aGluZ3MgdXAgYSBsaXR0bGUuCitzZXQgdW5kb2xldmVscz0tMQorCisiIEVYVFJBX1ZJTV9TVE9QIC0gZG8gbm90IGNoYW5nZSBvciByZW1vdmUgdGhpcyBsaW5lLgorCisKKyIgRXh0cmFWaW0oKSAtIFJ1biBhIHNjcmlwdCBmaWxlIGluIGFuIGV4dHJhIFZpbSBwcm9jZXNzLgkJICAgIHt7ezIKKyIKKyIgVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgaW1tZWRpYXRlIGFib3J0aW9uIG9mIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyBkdWUgdG8KKyIgYW4gZXJyb3IgaW4gYSBjb21tYW5kIGR5bmFtaWNhbGx5IGVuY2xvc2VkIGJ5IGEgOnRyeS86dHJ5ZW5kIHJlZ2lvbiBvciB3aGVuIGFuCisiIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnV0IG5vdCBjYXVnaHQgb3Igd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLiAgSXQgY2FuIGFsc28KKyIgYmUgdXNlZCBmb3IgdGVzdGluZyA6ZmluaXNoLgorIgorIiBBbiBpbnRlcnJ1cHQgbG9jYXRpb24gY2FuIGJlIHNwZWNpZmllZCBieSBhbiAiSU5URVJSVVBUIiBjb21tZW50LiAgQSBudW1iZXIKKyIgdGVsbGluZyBob3cgb2Z0ZW4gdGhpcyBsb2NhdGlvbiBpcyByZWFjaGVkIChpbiBhIGxvb3Agb3IgaW4gc2V2ZXJhbCBmdW5jdGlvbgorIiBjYWxscykgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhcmd1bWVudC4gIFdoZW4gbWlzc2luZywgb25jZSBwZXIgc2NyaXB0CisiIGludm9jYXRpb24gb3IgZnVuY3Rpb24gY2FsbCBpcyBhc3N1bWVkLiAgSU5URVJSVVBUIGxvY2F0aW9ucyBhcmUgdGVzdGVkIGJ5CisiIHNldHRpbmcgYSBicmVha3BvaW50IGluIHRoYXQgbGluZSBhbmQgdXNpbmcgdGhlICI+cXVpdCIgZGVidWcgY29tbWFuZCB3aGVuCisiIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQuICBBIGZ1bmN0aW9uIGZvciB3aGljaCBhbiBJTlRFUlJVUFQgbG9jYXRpb24gaXMKKyIgc3BlY2lmaWVkIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgY2FsbGluZyBpdCAob3IgZXhlY3V0aW5nIGl0IGFzIGEgc2NyaXB0IGJ5CisiIHVzaW5nIEV4ZWNBc1NjcmlwdCBiZWxvdykuCisiCisiIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaW4gbm9ybWFsIG1vZHVzICgiZzpFeHRyYVZpbVJlc3VsdCIgdW5kZWZpbmVkKS4KKyIKKyIgVGVzdHMgdG8gYmUgZXhlY3V0ZWQgYXMgYW4gZXh0cmEgc2NyaXB0IHNob3VsZCBiZSB3cml0dGVuIGFzIGZvbGxvd3M6CisiCisiCWNvbHVtbiAxCQkJY29sdW1uIDEKKyIJfAkJCQl8CisiCXYJCQkJdgorIgorIglYcGF0aElOSVQJCQlYcGF0aElOSVQKKyIJaWYgRXh0cmFWaW0oKQkJCWlmIEV4dHJhVmltKCkKKyIJICAgIC4uLgkJCQkiICAgLi4uCisiCSAgICAuLi4JCQkJIiAgIC4uLgorIgllbmRpZgkJCQllbmRpZgorIglYY2hlY2sgPG51bWJlcj4JCQlYY2hlY2sgPG51bWJlcj4KKyIKKyIgRG91YmxlIHF1b3RlcyBpbiBjb2x1bW4gMSBhcmUgcmVtb3ZlZCBiZWZvcmUgdGhlIHNjcmlwdCBpcyBleGVjdXRlZC4KKyIgVGhleSBzaG91bGQgYmUgdXNlZCBpZiB0aGUgdGVzdCBoYXMgdW5iYWxhbmNlZCBjb25kaXRpb25hbHMgKDppZi86ZW5kaWYsCisiIDp3aGlsZTovZW5kd2hpbGUsIDp0cnkvOmVuZHRyeSkgb3IgZm9yIGEgbGluZSB3aXRoIGEgc3ludGF4IGVycm9yLiAgVGhlCisiIGV4dHJhIHNjcmlwdCBtYXkgdXNlIFhwYXRoLCBYbG9vcElOSVQsIFhsb29wLCBYbG9vcE5FWFQsIGFuZCBYb3V0IGFzIHVzdWFsLgorIgorIiBBIGZpbGUgbmFtZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFyZ3VtZW50LiAgQWxsIG1lc3NhZ2VzIG9mIHRoZSBleHRyYSBWaW0KKyIgcHJvY2VzcyBhcmUgdGhlbiByZWRpcmVjdGVkIHRvIHRoZSBmaWxlLiAgQW4gZXhpc3RpbmcgZmlsZSBpcyBvdmVyd3JpdHRlbi4KKyIKK2xldCBFeHRyYVZpbUNvdW50ID0gMAorbGV0IEV4dHJhVmltQmFzZSA9IGV4cGFuZCgiPHNmaWxlPiIpCitsZXQgRXh0cmFWaW1UZXN0RW52ID0gIiIKKyIKK2Z1bmN0aW9uISBFeHRyYVZpbSguLi4pCisgICAgIiBDb3VudCBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICAgbGV0IGc6RXh0cmFWaW1Db3VudCA9IGc6RXh0cmFWaW1Db3VudCArIDEKKworICAgICIgRGlzYWJsZSBmb2xkcyB0byBwcmV2ZW50IHRoYXQgdGhlIHJhbmdlcyBpbiB0aGUgIjp3cml0ZSIgY29tbWFuZHMgYmVsb3cKKyAgICAiIGFyZSBleHRlbmRlZCB1cCB0byB0aGUgZW5kIG9mIGEgY2xvc2VkIGZvbGQuICBUaGlzIGFsc28gc3BlZWRzIHRoaW5ncyB1cAorICAgICIgY29uc2lkZXJhYmx5LgorICAgIHNldCBub2ZvbGRlbmFibGUKKworICAgICIgT3BlbiBhIGJ1ZmZlciBmb3IgdGhpcyB0ZXN0IHNjcmlwdCBhbmQgY29weSB0aGUgdGVzdCBlbnZpcm9ubWVudCB0bworICAgICIgYSB0ZW1wb3JhcnkgZmlsZS4gIFRha2UgYWNjb3VudCBvZiBwYXJ0cyByZWxldmFudCBmb3IgdGhlIGV4dHJhIHNjcmlwdAorICAgICIgZXhlY3V0aW9uIG9ubHkuCisgICAgbGV0IGN1cnJlbnRfYnVmZm5yID0gYnVmbnIoIiUiKQorICAgIGV4ZWN1dGUgInZpZXcgKzEiIGc6RXh0cmFWaW1CYXNlCisgICAgaWYgZzpFeHRyYVZpbUNvdW50ID09IDEKKwlsZXQgZzpFeHRyYVZpbVRlc3RFbnYgPSB0ZW1wbmFtZSgpCisJZXhlY3V0ZSAiL0UiIC4gIlhUUkFfVklNX1NUQVJULyssL0UiIC4gIlhUUkFfVklNX1NUT1AvLXciCisJCSAgICBcIGc6RXh0cmFWaW1UZXN0RW52ICJ8J10rIgorCWV4ZWN1dGUgIi9FIiAuICJYVFJBX1ZJTV9TVEFSVC8rLC9FIiAuICJYVFJBX1ZJTV9TVE9QLy13ID4+IgorCQkgICAgXCBnOkV4dHJhVmltVGVzdEVudiAifCddKyIKKwlleGVjdXRlICIvRSIgLiAiWFRSQV9WSU1fU1RBUlQvKywvRSIgLiAiWFRSQV9WSU1fU1RPUC8tdyA+PiIKKwkJICAgIFwgZzpFeHRyYVZpbVRlc3RFbnYgInwnXSsiCisJZXhlY3V0ZSAiL0UiIC4gIlhUUkFfVklNX1NUQVJULyssL0UiIC4gIlhUUkFfVklNX1NUT1AvLXcgPj4iCisJCSAgICBcIGc6RXh0cmFWaW1UZXN0RW52ICJ8J10rIgorICAgIGVuZGlmCisKKyAgICAiIFN0YXJ0IHRoZSBleHRyYSBWaW0gc2NyaXB0IHdpdGggYSAiOnNvdXJjZSIgY29tbWFuZCBmb3IgdGhlIHRlc3QKKyAgICAiIGVudmlyb25tZW50LiAgVGhlIHNvdXJjZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXh0cmEgc2NyaXB0IHdpbGwgYmUKKyAgICAiIGFwcGVuZGVkLCBuZWVkcyB0byBiZSBwYXNzZWQgYXMgdmFyaWFibGUgIkV4dHJhVmltQmVnaW4iIHRvIHRoZSBzY3JpcHQuCisgICAgbGV0IGV4dHJhX3NjcmlwdCA9IHRlbXBuYW1lKCkKKyAgICBleGVjICIhZWNobyAnc291cmNlICIgLiBnOkV4dHJhVmltVGVzdEVudiAuICInID4iIC4gZXh0cmFfc2NyaXB0CisgICAgbGV0IGV4dHJhX2JlZ2luID0gMQorCisgICAgIiBTdGFydGluZyBiZWhpbmQgdGhlIHRlc3QgZW52aXJvbm1lbnQsIHNraXAgb3ZlciB0aGUgZmlyc3QgZzpFeHRyYVZpbUNvdW50CisgICAgIiBvY2N1cnJlbmNlcyBvZiAiaWYgRXh0cmFWaW0oKSIgYW5kIGNvcHkgdGhlIGZvbGxvd2luZyBsaW5lcyB1cCB0byB0aGUKKyAgICAiIG1hdGNoaW5nICJlbmRpZiIgdG8gdGhlIGV4dHJhIFZpbSBzY3JpcHQuCisgICAgZXhlY3V0ZSAiL0UiIC4gIk5EX09GX1RFU1RfRU5WSVJPTk1FTlQvIgorICAgIGV4ZWMgJ25vcm0gJyAuIGc6RXh0cmFWaW1Db3VudCAuICcvXlxzKmlmXHNcK0V4dHJhVmltKC4qKS8rJyAuICJcbiIKKyAgICBleGVjdXRlICIuLC9eZW5kaWYvLXdyaXRlID4+IiAuIGV4dHJhX3NjcmlwdAorCisgICAgIiBPcGVuIGEgYnVmZmVyIGZvciB0aGUgZXh0cmEgVmltIHNjcmlwdCwgZGVsZXRlIGFsbCBeIiwgYW5kIHdyaXRlIHRoZQorICAgICIgc2NyaXB0IGlmIHdhcyBhY3R1YWxseSBtb2RpZmllZC4KKyAgICBleGVjdXRlICJlZGl0ICsiIC4gKGV4dHJhX2JlZ2luICsgMSkgZXh0cmFfc2NyaXB0CisgICAgLCRzL14iLy9lCisgICAgdXBkYXRlCisKKyAgICAiIENvdW50IHRoZSBJTlRFUlJVUFRzIGFuZCBidWlsZCB0aGUgYnJlYWtwb2ludCBhbmQgcXVpdCBjb21tYW5kcy4KKyAgICBsZXQgYnJlYWtwb2ludHMgPSAiIgorICAgIGxldCBkZWJ1Z19xdWl0cyA9ICIiCisgICAgbGV0IGluX2Z1bmMgPSAwCisgICAgZXhlYyBleHRyYV9iZWdpbgorICAgIHdoaWxlIHNlYXJjaCgKKwkgICAgXCAnIlxzKklOVEVSUlVQVFxoXEAhXHxeXHMqZnVcJVtuY3Rpb25dXD4hXD1ccypcJShcdVx8czpcKVx3KlxzKihcfCcKKwkgICAgXCAuICdeXHMqXFxcfF5ccyplbmRmXCVbdW5jdGlvbl1cPlx8JworCSAgICBcIC4gJ1wlKF5ccypmdVwlW25jdGlvbl0hXD1ccypcKVxAPCFcJShcdVx8czpcKVx3KlxzKihcfCcKKwkgICAgXCAuICdFeGVjQXNTY3JpcHRcc1wrXCUoXHVcfHM6XClcdyonLAorCSAgICBcICJXIikgPiAwCisJbGV0IHRoZWxpbmUgPSBnZXRsaW5lKCIuIikKKwlpZiB0aGVsaW5lID1+ICdeXHMqZnUnCisJICAgICIgRnVuY3Rpb24gZGVmaW5pdGlvbi4KKwkgICAgbGV0IGluX2Z1bmMgPSAxCisJICAgIGxldCBmdW5jX3N0YXJ0ID0gbGluZSgiLiIpCisJICAgIGxldCBmdW5jX25hbWUgPSBzdWJzdGl0dXRlKHRoZWxpbmUsCisJCVwgJ15ccypmdVwlW25jdGlvbl0hXD1ccypcKFwlKFx1XHxzOlwpXHcqXCkuKicsICdcMScsICIiKQorCSAgICBsZXQgZnVuY19jb250cyA9IDAKKwllbHNlaWYgdGhlbGluZSA9fiAnXlxzKlxcJworCSAgICBpZiBpbl9mdW5jCisJCWxldCBmdW5jX2NvbnRzID0gZnVuY19jb250cyArIDEKKwkgICAgZW5kaWYKKwllbHNlaWYgdGhlbGluZSA9fiAnXlxzKmVuZGYnCisJICAgICIgRW5kIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24uCisJICAgIGxldCBpbl9mdW5jID0gMAorCWVsc2UKKwkgICAgbGV0IGZpbmRpbmcgPSBzdWJzdGl0dXRlKHRoZWxpbmUsICcuKlwoXCUnIC4gY29sKCIuIikgLiAnYy4qXCknLAorCQlcICdcMScsICIiKQorCSAgICBpZiBmaW5kaW5nID1+ICdeIlxzKklOVEVSUlVQVFxoXEAhJworCQkiIEludGVycnVwdCBjb21tZW50LiAgQ29tcG9zZSBhcyBtYW55IHF1aXQgY29tbWFuZHMgYXMKKwkJIiBzcGVjaWZpZWQuCisJCWxldCBjbnQgPSBzdWJzdGl0dXRlKGZpbmRpbmcsCisJCSAgICBcICdeIlxzKklOVEVSUlVQVFxzKlwoXGQqXCkuKiQnLCAnXDEnLCAiIikKKwkJbGV0IHF1aXRzID0gIiIKKwkJd2hpbGUgY250ID4gMAorCQkgICAgIiBVc2UgIlxyIiByYXRoZXIgdGhhbiAiXG4iIHRvIHNlcGFyYXRlIHRoZSBxdWl0IGNvbW1hbmRzLgorCQkgICAgIiAiXHIiIGlzIG5vdCBpbnRlcnByZXRlZCBhcyBjb21tYW5kIHNlcGFyYXRvciBieSB0aGUgIjohIgorCQkgICAgIiBjb21tYW5kIGJlbG93IGJ1dCB3b3JrcyB0byBzZXBhcmF0ZSBjb21tYW5kcyBpbiB0aGUKKwkJICAgICIgZXh0ZXJuYWwgdmltLgorCQkgICAgbGV0IHF1aXRzID0gcXVpdHMgLiAicVxyIgorCQkgICAgbGV0IGNudCA9IGNudCAtIDEKKwkJZW5kd2hpbGUKKwkJaWYgaW5fZnVuYworCQkgICAgIiBBZGQgdGhlIGZ1bmN0aW9uIGJyZWFrcG9pbnQgYW5kIG5vdGUgdGhlIG51bWJlciBvZiBxdWl0cworCQkgICAgIiB0byBiZSB1c2VkLCBpZiBzcGVjaWZpZWQsIG9yIG9uZSBmb3IgZXZlcnkgY2FsbCBlbHNlLgorCQkgICAgbGV0IGJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHMgLiAiIC1jICdicmVha2FkZCBmdW5jICIgLgorCQkJXCAobGluZSgiLiIpIC0gZnVuY19zdGFydCAtIGZ1bmNfY29udHMpIC4gIiAiIC4KKwkJCVwgZnVuY19uYW1lIC4gIiciCisJCSAgICBpZiBxdWl0cyAhPSAiIgorCQkJbGV0IGRlYnVnX3F1aXRzID0gZGVidWdfcXVpdHMgLiBxdWl0cworCQkgICAgZWxzZWlmICFleGlzdHMoInF1aXRze2Z1bmNfbmFtZX0iKQorCQkJbGV0IHF1aXRze2Z1bmNfbmFtZX0gPSAicVxyIgorCQkgICAgZWxzZQorCQkJbGV0IHF1aXRze2Z1bmNfbmFtZX0gPSBxdWl0c3tmdW5jX25hbWV9IC4gInFcciIKKwkJICAgIGVuZGlmCisJCWVsc2UKKwkJICAgICIgQWRkIHRoZSBmaWxlIGJyZWFrcG9pbnQgYW5kIHRoZSBxdWl0cyB0byBiZSB1c2VkIGZvciBpdC4KKwkJICAgIGxldCBicmVha3BvaW50cyA9IGJyZWFrcG9pbnRzIC4gIiAtYyAnYnJlYWthZGQgZmlsZSAiIC4KKwkJCVwgbGluZSgiLiIpIC4gIiAiIC4gZXh0cmFfc2NyaXB0IC4gIiciCisJCSAgICBpZiBxdWl0cyA9PSAiIgorCQkJbGV0IHF1aXRzID0gInFcciIKKwkJICAgIGVuZGlmCisJCSAgICBsZXQgZGVidWdfcXVpdHMgPSBkZWJ1Z19xdWl0cyAuIHF1aXRzCisJCWVuZGlmCisJICAgIGVsc2UKKwkJIiBBZGQgdGhlIHF1aXRzIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG9yIGV4ZWN1dGluZworCQkiIGl0IGFzIHNjcmlwdCBmaWxlLgorCQlpZiBmaW5kaW5nID1+ICdeRXhlY0FzU2NyaXB0JworCQkgICAgIiBTb3VyY2luZyBmdW5jdGlvbiBhcyBzY3JpcHQuCisJCSAgICBsZXQgZmluZGluZyA9IHN1YnN0aXR1dGUoZmluZGluZywKKwkJCVwgJ15FeGVjQXNTY3JpcHRcc1wrXChcJShcdVx8czpcKVx3KlwpLionLCAnXDEnLCAiIikKKwkJZWxzZQorCQkgICAgIiBGdW5jdGlvbiBjYWxsLgorCQkgICAgbGV0IGZpbmRpbmcgPSBzdWJzdGl0dXRlKGZpbmRpbmcsCisJCQlcICdeXChcJShcdVx8czpcKVx3KlwpLionLCAnXDEnLCAiIikKKwkJZW5kaWYKKwkJaWYgZXhpc3RzKCJxdWl0c3tmaW5kaW5nfSIpCisJCSAgICBsZXQgZGVidWdfcXVpdHMgPSBkZWJ1Z19xdWl0cyAuIHF1aXRze2ZpbmRpbmd9CisJCWVuZGlmCisJICAgIGVuZGlmCisJZW5kaWYKKyAgICBlbmR3aGlsZQorCisgICAgIiBDbG9zZSB0aGUgYnVmZmVyIGZvciB0aGUgc2NyaXB0IGFuZCBjcmVhdGUgYW4gKGVtcHR5KSByZXN1bHRmaWxlLgorICAgIGJ3aXBlb3V0CisgICAgbGV0IHJlc3VsdGZpbGUgPSB0ZW1wbmFtZSgpCisgICAgZXhlYyAiIT4iIC4gcmVzdWx0ZmlsZQorCisgICAgIiBSdW4gdGhlIHNjcmlwdCBpbiBhbiBleHRyYSB2aW0uICBTd2l0Y2ggdG8gZXh0cmEgbW9kdXMgYnkgcGFzc2luZyB0aGUKKyAgICAiIHJlc3VsdGZpbGUgaW4gRXh0cmFWaW1SZXN1bHQuICBSZWRpcmVjdCBtZXNzYWdlcyB0byB0aGUgZmlsZSBzcGVjaWZpZWQgYXMKKyAgICAiIGFyZ3VtZW50IGlmIGFueS4gIFVzZSAiOmRlYnVnZ3JlZWR5IiBzbyB0aGF0IHRoZSBjb21tYW5kcyBwcm92aWRlZCBvbiB0aGUKKyAgICAiIHBpcGUgYXJlIGNvbnN1bWVkIGF0IHRoZSBkZWJ1ZyBwcm9tcHQuICBVc2UgIi1OIiB0byBlbmFibGUgY29tbWFuZC1saW5lCisgICAgIiBjb250aXVuYXRpb24gKCJDIiBpbiAnY3BvJykuICBBZGQgIm52aW1pbmZvIiB0byAndmltaW5mbycgdG8gYXZvaWQKKyAgICAiIG1lc3NpbmcgdXAgdGhlIHVzZXIncyB2aW1pbmZvIGZpbGUuCisgICAgbGV0IHJlZGlyZWN0ID0gYTowID8KKwlcICIgLWMgJ2F1IFZpbUxlYXZlICogcmVkaXIgRU5EJyAtYyAncmVkaXJcXCEgPiIgLiBhOjEgLiAiJyIgOiAiIgorICAgIGV4ZWMgIiFlY2hvICciIC4gZGVidWdfcXVpdHMgLiAicScgfCAuLi92aW0gLXUgTk9ORSAtTiAtWGVzIiAuIHJlZGlyZWN0IC4KKwlcICIgLWMgJ2RlYnVnZ3JlZWR5fHNldCB2aW1pbmZvKz1udmltaW5mbyciIC4KKwlcICIgLWMgJ2xldCBFeHRyYVZpbUJlZ2luID0gIiAuIGV4dHJhX2JlZ2luIC4gIiciIC4KKwlcICIgLWMgJ2xldCBFeHRyYVZpbVJlc3VsdCA9IFwiIiAuIHJlc3VsdGZpbGUgLiAiXCInIiAuIGJyZWFrcG9pbnRzIC4KKwlcICIgLVMgIiAuIGV4dHJhX3NjcmlwdAorCisgICAgIiBCdWlsZCB0aGUgcmVzdWx0aW5nIHN1bSBmb3IgcmVzdWx0ZmlsZSBhbmQgYWRkIGl0IHRvIGc6WHBhdGguICBBZGQgWG91dAorICAgICIgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIGV4dHJhIFZpbSBwcm9jZXNzIHRvIHRoZSB0ZXN0IG91dHB1dC4KKyAgICBsZXQgc3VtID0gMAorICAgIGV4ZWMgImVkaXQiIHJlc3VsdGZpbGUKKyAgICBsZXQgbGluZSA9IDEKKyAgICB3aGlsZSBsaW5lIDw9IGxpbmUoIiQiKQorCWxldCB0aGVsaW5lID0gZ2V0bGluZShsaW5lKQorCWlmIHRoZWxpbmUgPX4gJ15AUjonCisJICAgIGV4ZWMgJ1hvdXQgIicgLiBzdWJzdGl0dXRlKHN1YnN0aXR1dGUoCisJCVwgZXNjYXBlKGVzY2FwZSh0aGVsaW5lLCAnIicpLCAnXCInKSwKKwkJXCAnXkBSOicsICcnLCAiIiksICdATkxAJywgIlxuIiwgImciKSAuICciJworCWVsc2UKKwkgICAgbGV0IHN1bSA9IHN1bSArIGdldGxpbmUobGluZSkKKwllbmRpZgorCWxldCBsaW5lID0gbGluZSArIDEKKyAgICBlbmR3aGlsZQorICAgIGJ3aXBlb3V0CisgICAgbGV0IGc6WHBhdGggPSBnOlhwYXRoICsgc3VtCisKKyAgICAiIERlbGV0ZSB0aGUgZXh0cmEgc2NyaXB0IGFuZCB0aGUgcmVzdWx0ZmlsZS4KKyAgICBjYWxsIGRlbGV0ZShleHRyYV9zY3JpcHQpCisgICAgY2FsbCBkZWxldGUocmVzdWx0ZmlsZSkKKworICAgICIgU3dpdGNoIGJhY2sgdG8gdGhlIGJ1ZmZlciB0aGF0IHdhcyBhY3RpdmUgd2hlbiB0aGlzIGZ1bmN0aW9uIHdhcyBlbnRlcmVkLgorICAgIGV4ZWMgImJ1ZmZlciIgY3VycmVudF9idWZmbnIKKworICAgICIgUmV0dXJuIDAuICBUaGlzIHByb3RlY3RzIGV4dHJhIHNjcmlwdHMgZnJvbSBiZWluZyBydW4gaW4gdGhlIG1haW4gVmltCisgICAgIiBwcm9jZXNzLgorICAgIHJldHVybiAwCitlbmRmdW5jdGlvbgorCisKKyIgRXh0cmFWaW1UaHJvd3BvaW50KCkgLSBSZWxhdGl2ZSB0aHJvd3BvaW50IGluIEV4dHJhVmltIHNjcmlwdAkJICAgIHt7ezIKKyIKKyIgRXZhbHVhdGVzIHY6dGhyb3dwb2ludCBhbmQgcmV0dXJucyB0aGUgdGhyb3dwb2ludCByZWxhdGl2IHRvIHRoZSBiZWdpbm5pbmcgb2YKKyIgYW4gRXh0cmFWaW0gc2NyaXB0IGFzIHBhc3NlZCBieSBFeHRyYVZpbSgpIGluIEV4dHJhVmltQmVnaW4uCisiCisiIEVYVFJBX1ZJTV9TVEFSVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KK2Z1bmN0aW9uISBFeHRyYVZpbVRocm93cG9pbnQoKQorICAgIGlmICFleGlzdHMoImc6RXh0cmFWaW1CZWdpbiIpCisJWG91dCAiRXh0cmFWaW1UaHJvd3BvaW50KCkgdXNlZCBvdXRzaWRlIEV4dHJhVmltKCkgc2NyaXB0LiIKKwlyZXR1cm4gdjp0aHJvd3BvaW50CisgICAgZW5kaWYKKworICAgIGlmIHY6dGhyb3dwb2ludCA9fiAnXmZ1bmN0aW9uXD4nCisJcmV0dXJuIHY6dGhyb3dwb2ludAorICAgIGVuZGlmCisKKyAgICByZXR1cm4gImxpbmUgIiAuCisJXCAoc3Vic3RpdHV0ZSh2OnRocm93cG9pbnQsICcuKiwgbGluZSAnLCAnJywgIiIpIC0gZzpFeHRyYVZpbUJlZ2luKSAuCisJXCAiIG9mIEV4dHJhVmltKCkgc2NyaXB0IgorZW5kZnVuY3Rpb24KKyIgRVhUUkFfVklNX1NUT1AgLSBkbyBub3QgY2hhbmdlIG9yIHJlbW92ZSB0aGlzIGxpbmUuCisKKworIiBNYWtlU2NyaXB0KCkgLSBNYWtlIGEgc2NyaXB0IGZpbGUgZnJvbSBhIGZ1bmN0aW9uLgkJCSAgICB7e3syCisiCisiIENyZWF0ZSBhIHNjcmlwdCB0aGF0IGNvbnNpc3RzIG9mIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBhOmZ1bmNuYW1lLgorIiBSZXBsYWNlIGFueSAiOnJldHVybiIgYnkgYSAiOmZpbmlzaCIsIGFueSBhcmd1bWVudCB2YXJpYWJsZSBieSBhIGdsb2JhbAorIiB2YXJpYWJsZSwgYW5kIGFuZCBldmVyeSAiOmNhbGwiIGJ5IGEgIjpzb3VyY2UiIGZvciB0aGUgbmV4dCBmb2xsb3dpbmcgYXJndW1lbnQKKyIgaW4gdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiBzaW1pbGFyIHRlc3RzIGFyZQorIiB0byBiZSBtYWRlIGZvciBhICI6cmV0dXJuIiBmcm9tIGEgZnVuY3Rpb24gY2FsbCBvciBhICI6ZmluaXNoIiBpbiBhIHNjcmlwdAorIiBmaWxlLgorIgorIiBJbiBvcmRlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gc3BlY2lmeWluZyBhbiBJTlRFUlJVUFQgbG9jYXRpb24gKHNlZSBFeHRyYVZpbSkKKyIgYXMgYSBzY3JpcHQgZmlsZSwgdXNlIEV4ZWNBc1NjcmlwdCBiZWxvdy4KKyIKKyIgRVhUUkFfVklNX1NUQVJUIC0gZG8gbm90IGNoYW5nZSBvciByZW1vdmUgdGhpcyBsaW5lLgorZnVuY3Rpb24hIE1ha2VTY3JpcHQoZnVuY25hbWUsIC4uLikKKyAgICBsZXQgc2NyaXB0ID0gdGVtcG5hbWUoKQorICAgIGV4ZWN1dGUgInJlZGlyISA+IiAuIHNjcmlwdAorICAgIGV4ZWN1dGUgImZ1bmN0aW9uIiBhOmZ1bmNuYW1lCisgICAgcmVkaXIgRU5ECisgICAgZXhlY3V0ZSAiZWRpdCIgc2NyaXB0CisgICAgIiBEZWxldGUgdGhlICJmdW5jdGlvbiIgYW5kIHRoZSAiZW5kZnVuY3Rpb24iIGxpbmVzLiAgRG8gbm90IGluY2x1ZGUgdGhlCisgICAgIiB3b3JkICJmdW5jdGlvbiIgaW4gdGhlIHBhdHRlcm4gc2luY2UgaXQgbWlnaHQgYmUgdHJhbnNsYXRlZCBpZiBMQU5HIGlzCisgICAgIiBzZXQuICBXaGVuIE1ha2VTY3JpcHQoKSBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhpcyBkZWxldGVzIGFsc28gdGhlIGRlYnVnZ2luZworICAgICIgb3V0cHV0IG9mIGl0cyBsaW5lIDMgYW5kIDQuCisgICAgZXhlYyAnMSwvLionIC4gYTpmdW5jbmFtZSAuICcoLiopL2QnCisgICAgL15cZCpccyplbmRmdW5jdGlvblw+LywkZAorICAgICVzL15cZCovL2UKKyAgICAlcy9yZXR1cm4vZmluaXNoL2UKKyAgICAlcy9cPGE6XChcaFx3KlwpL2c6XDEvZ2UKKyAgICBub3JtYWwgZ2cwCisgICAgbGV0IGNudCA9IDAKKyAgICB3aGlsZSBzZWFyY2goJ1w8Y2FsbFxzKlwlKFx1XHxzOlwpXHcqXHMqKC4qKScsICdXJykgPiAwCisJbGV0IGNudCA9IGNudCArIDEKKwlzL1w8Y2FsbFxzKlwlKFx1XHxzOlwpXHcqXHMqKC4qKS9cPSdzb3VyY2UgJyAuIGE6e2NudH0vCisgICAgZW5kd2hpbGUKKyAgICBnL15ccyokL2QKKyAgICB3cml0ZQorICAgIGJ3aXBlb3V0CisgICAgcmV0dXJuIHNjcmlwdAorZW5kZnVuY3Rpb24KKyIgRVhUUkFfVklNX1NUT1AgLSBkbyBub3QgY2hhbmdlIG9yIHJlbW92ZSB0aGlzIGxpbmUuCisKKworIiBFeGVjQXNTY3JpcHQgLSBTb3VyY2UgYSB0ZW1wb3Jhcnkgc2NyaXB0IG1hZGUgZnJvbSBhIGZ1bmN0aW9uLgkgICAge3t7MgorIgorIiBNYWtlIGEgdGVtcG9yYXJ5IHNjcmlwdCBmaWxlIGZyb20gdGhlIGZ1bmN0aW9uIGE6ZnVuY25hbWUsICI6c291cmNlIiBpdCwgYW5kCisiIGRlbGV0ZSBpdCBhZnRlcndhcmRzLgorIgorIiBXaGVuIGluc2lkZSAiOmlmIEV4dHJhVmltKCkiLCBhZGQgYSBmaWxlIGJyZWFrcG9pbnQgZm9yIGVhY2ggSU5URVJSVVBUCisiIGxvY2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgZnVuY3Rpb24uCisiCisiIEVYVFJBX1ZJTV9TVEFSVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KK2Z1bmN0aW9uISBFeGVjQXNTY3JpcHQoZnVuY25hbWUpCisgICAgIiBNYWtlIGEgc2NyaXB0IGZyb20gdGhlIGZ1bmN0aW9uIHBhc3NlZCBhcyBhcmd1bWVudC4KKyAgICBsZXQgc2NyaXB0ID0gTWFrZVNjcmlwdChhOmZ1bmNuYW1lKQorCisgICAgIiBXaGVuIHJ1bm5pbmcgaW4gYW4gZXh0cmEgVmltIHByb2Nlc3MsIGFkZCBhIGZpbGUgYnJlYWtwb2ludCBmb3IgZWFjaAorICAgICIgZnVuY3Rpb24gYnJlYWtwb2ludCBzZXQgd2hlbiB0aGUgZXh0cmEgVmltIHByb2Nlc3Mgd2FzIGludm9rZWQgYnkKKyAgICAiIEV4dHJhVmltKCkuCisgICAgaWYgZXhpc3RzKCJnOkV4dHJhVmltUmVzdWx0IikKKwlsZXQgYnBsaXN0ID0gdGVtcG5hbWUoKQorCWV4ZWN1dGUgInJlZGlyISA+IiAuIGJwbGlzdAorCWJyZWFrbGlzdAorCXJlZGlyIEVORAorCWV4ZWN1dGUgImVkaXQiIGJwbGlzdAorCSIgR2V0IHRoZSBsaW5lIG51bWJlciBmcm9tIHRoZSBmdW5jdGlvbiBicmVha3BvaW50LiAgV29ya3MgYWxzbyB3aGVuCisJIiBMQU5HIGlzIHNldC4KKwlleGVjdXRlICd2L15ccypcZFwrXHNcK2Z1bmNcc1wrJyAuIGE6ZnVuY25hbWUgLiAnXHMuKi9kJworCSVzL15ccypcZFwrXHNcK2Z1bmNcc1wrXCUoXHVcfHM6XClcdypcc1xEKlwoXGQqXCkuKi9cMS9lCisJbGV0IGNudCA9IDAKKwl3aGlsZSBjbnQgPCBsaW5lKCIkIikKKwkgICAgbGV0IGNudCA9IGNudCArIDEKKwkgICAgaWYgZ2V0bGluZShjbnQpICE9ICIiCisJCWV4ZWN1dGUgImJyZWFrYWRkIGZpbGUiIGdldGxpbmUoY250KSBzY3JpcHQKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCWJ3aXBlb3V0IQorCWNhbGwgZGVsZXRlKGJwbGlzdCkKKyAgICBlbmRpZgorCisgICAgIiBTb3VyY2UgYW5kIGRlbGV0ZSB0aGUgc2NyaXB0LgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0CisgICAgY2FsbCBkZWxldGUoc2NyaXB0KQorZW5kZnVuY3Rpb24KKworY29tISAtbmFyZ3M9MSAtYmFyIEV4ZWNBc1NjcmlwdCBjYWxsIEV4ZWNBc1NjcmlwdCg8Zi1hcmdzPikKKyIgRVhUUkFfVklNX1NUT1AgLSBkbyBub3QgY2hhbmdlIG9yIHJlbW92ZSB0aGlzIGxpbmUuCisKKworIiBFTkRfT0ZfVEVTVF9FTlZJUk9OTUVOVCAtIGRvIG5vdCBjaGFuZ2Ugb3IgcmVtb3ZlIHRoaXMgbGluZS4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE6ICAgOmVuZHdoaWxlIGluIGZ1bmN0aW9uCQkJCQkgICAge3t7MQorIgorIgkgICAgRGV0ZWN0IGlmIGEgYnJva2VuIGxvb3AgaXMgKGluY29ycmVjdGx5KSByZWFjdGl2YXRlZCBieSB0aGUKKyIJICAgIDplbmR3aGlsZS4gIFVzZSBhIDpyZXR1cm4gdG8gcHJldmVudCBhbiBlbmRsZXNzIGxvb3AsIGFuZCBtYWtlCisiCSAgICB0aGlzIHRlc3QgZmlyc3QgdG8gZ2V0IGEgbWVhbmluZ2Z1bCByZXN1bHQgb24gYW4gZXJyb3IgYmVmb3JlIG90aGVyCisiCSAgICB0ZXN0cyB3aWxsIGhhbmcuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIEYoKQorICAgIFhwYXRoIDEJCQkJCSIgWDogMQorICAgIGxldCBmaXJzdCA9IDEKKyAgICBYbG9vcElOSVQgMiA4CisgICAgd2hpbGUgMQorCVhsb29wIDEJCQkJCSIgWDogMgkgICAgKyAwICogMTYKKwlpZiBmaXJzdAorCSAgICBYbG9vcCAyCQkJCSIgWDogNAkgICAgKyAwICogMzIKKwkgICAgbGV0IGZpcnN0ID0gMAorCSAgICBYbG9vcE5FWFQKKwkgICAgYnJlYWsKKwllbHNlCisJICAgIFhsb29wIDQJCQkJIiBYOiAwCSAgICArIDAgKiA2NAorCSAgICByZXR1cm4KKwllbmRpZgorICAgIGVuZHdoaWxlCitlbmRmdW5jdGlvbgorCitjYWxsIEYoKQorWHBhdGggMTI4CQkJCQkiIFg6IDEyOAorCitmdW5jdGlvbiEgRygpCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NiAgICArIDAgKiAyMDQ4CisgICAgbGV0IGZpcnN0ID0gMQorICAgIFhsb29wSU5JVCA1MTIgOAorICAgIHdoaWxlIDEKKwlYbG9vcCAxCQkJCQkiIFg6IDUxMiAgICArIDAgKiA0MDk2CisJaWYgZmlyc3QKKwkgICAgWGxvb3AgMgkJCQkiIFg6IDEwMjQgICArIDAgKiA4MTkyCisJICAgIGxldCBmaXJzdCA9IDAKKwkgICAgWGxvb3BORVhUCisJICAgIGJyZWFrCisJZWxzZQorCSAgICBYbG9vcCA0CQkJCSIgWDogMAkgICAgKyAwICogMTYzODQKKwkgICAgcmV0dXJuCisJZW5kaWYKKwlpZiAxCSIgdW5tYXRjaGVkIDppZgorICAgIGVuZHdoaWxlCitlbmRmdW5jdGlvbgorCitjYWxsIEcoKQorWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKworWGNoZWNrIDM0Njk1CisKKyIgTGVhdmUgRiBhbmQgRyBmb3IgZXhlY3V0aW9uIGFzIHNjcmlwdHMgaW4gdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDI6ICAgOmVuZHdoaWxlIGluIHNjcmlwdAkJCQkJCSAgICB7e3sxCisiCisiCSAgICBEZXRlY3QgaWYgYSBicm9rZW4gbG9vcCBpcyAoaW5jb3JyZWN0bHkpIHJlYWN0aXZhdGVkIGJ5IHRoZQorIgkgICAgOmVuZHdoaWxlLiAgVXNlIGEgOmZpbmlzaCB0byBwcmV2ZW50IGFuIGVuZGxlc3MgbG9vcCwgYW5kIHBsYWNlCisiCSAgICB0aGlzIHRlc3QgYmVmb3JlIG90aGVycyB0aGF0IG1pZ2h0IGhhbmcgdG8gZ2V0IGEgbWVhbmluZ2Z1bCByZXN1bHQKKyIJICAgIG9uIGFuIGVycm9yLgorIgorIgkgICAgVGhpcyB0ZXN0IGV4ZWN1dGVzIHRoZSBib2RpZXMgb2YgdGhlIGZ1bmN0aW9ucyBGIGFuZCBHIGZyb20gdGhlCisiCSAgICBwcmV2aW91cyB0ZXN0IGFzIHNjcmlwdCBmaWxlcyAoOnJldHVybiByZXBsYWNlZCBieSA6ZmluaXNoKS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitFeGVjQXNTY3JpcHQgRgkJCQkJIiBYOiAxICsgMiArIDQKK1hwYXRoIDEyOAkJCQkJIiBYOiAxMjgKKworRXhlY0FzU2NyaXB0IEcJCQkJCSIgWDogMjU2ICsgNTEyICsgMTAyNAorWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKwordW5sZXQgZmlyc3QKK2RlbGZ1bmN0aW9uIEYKK2RlbGZ1bmN0aW9uIEcKKworWGNoZWNrIDM0Njk1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzOiAgIDppZiwgOmVsc2VpZiwgOndoaWxlLCA6Y29udGludWUsIDpicmVhawkJCSAgICB7e3sxCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKK2lmIDEKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICBsZXQgbG9vcHMgPSAzCisgICAgWGxvb3BJTklUIDIgNTEyCisgICAgd2hpbGUgbG9vcHMgPiAtMQkgICAgIiBtYWluIGxvb3A6IGxvb3BzID09IDMsIDIsIDEgKHdoaWNoIGJyZWFrcykKKwlpZiBsb29wcyA8PSAwCisJICAgIGxldCBicmVha19lcnIgPSAxCisJICAgIGxldCBsb29wcyA9IC0xCisJZWxzZQkJCQkJIiAgICAzOiAgMjogICAgICAxOgorCSAgICBYbG9vcCAxCQkJCSIgWDogMiArIDIqNTEyICsgMio1MTIqNTEyCisJZW5kaWYKKwlpZiAobG9vcHMgPT0gMikKKwkgICAgd2hpbGUgbG9vcHMgPT0gMiAiIGR1bW15IGxvb3AKKwkJWGxvb3AgMgkJCQkiIFg6ICAgICA0KjUxMgorCQlsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwkJY29udGludWUgICAgIiBzdG9wIGR1bW15IGxvb3AKKwkJWGxvb3AgNAkJCQkiIFg6ICAgICAwCisJICAgIGVuZHdoaWxlCisJICAgIFhsb29wTkVYVAorCSAgICBjb250aW51ZQkgICAgIiBjb250aW51ZSBtYWluIGxvb3AKKwkgICAgWGxvb3AgOAkJCQkiIFg6ICAgICAwCisJZWxzZWlmIChsb29wcyA9PSAxKQorCSAgICBsZXQgcCA9IDEKKwkgICAgd2hpbGUgcAkgICAgIiBkdW1teSBsb29wCisJCVhsb29wIDE2CQkJIiBYOgkJIDMyKjUxMio1MTIKKwkJbGV0IHAgPSAwCisJCWJyZWFrCSAgICAiIGJyZWFrIGR1bW15IGxvb3AKKwkJWGxvb3AgMzIJCQkiIFg6CQkgMAorCSAgICBlbmR3aGlsZQorCSAgICBYbG9vcCA2NAkJCQkiIFg6CQkgMTI4KjUxMio1MTIKKwkgICAgdW5sZXQgcAorCSAgICBicmVhawkgICAgIiBicmVhayBtYWluIGxvb3AKKwkgICAgWGxvb3AgMTI4CQkJCSIgWDoJCSAwCisJZW5kaWYKKwlpZiAobG9vcHMgPiAwKQorCSAgICBYbG9vcCAyNTYJCQkJIiBYOiA1MTIKKwllbmRpZgorCXdoaWxlIGxvb3BzID09IDMgICAgIiBkdW1teSBsb29wCisJICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorCWVuZHdoaWxlCSAgICAiIGVuZCBkdW1teSBsb29wCisJWGxvb3BORVhUCisgICAgZW5kd2hpbGUJCSAgICAiIGVuZCBtYWluIGxvb3AKKyAgICBYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAxMDI0KjUxMio1MTIKK2Vsc2UKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCitlbmRpZgorWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDQwOTYqNTEyKjUxMgoraWYgZXhpc3RzKCJicmVha19lcnIiKQorICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICB1bmxldCBicmVha19lcnIKK2VuZGlmCisKK3VubGV0IGxvb3BzCisKK1hjaGVjayAxMzg0NjQ4MTk1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0OiAgIDpyZXR1cm4JCQkJCQkJICAgIHt7ezEKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgaWYgMQorCVhwYXRoIDEJCQkJCSIgWDogMQorCWxldCBsb29wcyA9IDMKKwlYbG9vcElOSVQgMiAxNgorCXdoaWxlIGxvb3BzID4gMAkJCQkiICAgIDM6ICAyOiAgICAgMToKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDIgKyAyKjE2ICsgMCoxNioxNgorCSAgICBpZiAobG9vcHMgPT0gMikKKwkJWGxvb3AgMgkJCQkiIFg6ICAgICA0KjE2CisJCXJldHVybgorCQlYbG9vcCA0CQkJCSIgWDogICAgIDAKKwkgICAgZW5kaWYKKwkgICAgWGxvb3AgOAkJCQkiIFg6IDE2CisJICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorCSAgICBYbG9vcE5FWFQKKwllbmR3aGlsZQorCVhwYXRoIDgxOTIJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitjYWxsIEYoKQorWHBhdGggMzI3NjgJCQkJCSIgWDogOCoxNioxNioxNgorCitYY2hlY2sgMzI4ODMKKworIiBMZWF2ZSBGIGZvciBleGVjdXRpb24gYXMgYSBzY3JpcHQgaW4gdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDU6ICAgOmZpbmlzaAkJCQkJCQkgICAge3t7MQorIgorIgkgICAgVGhpcyB0ZXN0IGV4ZWN1dGVzIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBGIGZyb20gdGhlIHByZXZpb3VzIHRlc3QKKyIJICAgIGFzIGEgc2NyaXB0IGZpbGUgKDpyZXR1cm4gcmVwbGFjZWQgYnkgOmZpbmlzaCkuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworRXhlY0FzU2NyaXB0IEYJCQkJCSIgWDogMSArIDIgKyAyKjE2ICsgNCoxNiArIDE2CitYcGF0aCAzMjc2OAkJCQkJIiBYOiAzMjc2OAorCit1bmxldCBsb29wcworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMzI4ODMKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY6ICAgRGVmaW5pbmcgZnVuY3Rpb25zIGluIDp3aGlsZSBsb29wcwkJCQkgICAge3t7MQorIgorIgkgICAgIEZ1bmN0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbnNpZGUgb3RoZXIgZnVuY3Rpb25zLiAgQW4gaW5uZXIgZnVuY3Rpb24KKyIJICAgICBnZXRzIGRlZmluZWQgd2hlbiB0aGUgb3V0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQuICBGdW5jdGlvbnMgbWF5CisiCSAgICAgYWxzbyBiZSBkZWZpbmVkIGluc2lkZSB3aGlsZSBsb29wcy4gIEV4cHJlc3Npb25zIGluIGJyYWNlcyBmb3IKKyIJICAgICBkZWZpbmluZyB0aGUgZnVuY3Rpb24gbmFtZSBhcmUgYWxsb3dlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisKKyAgICAiIFRoZSBjb21tYW5kIENBTEwgY29sbGVjdHMgdGhlIGFyZ3VtZW50IG9mIGFsbCBpdHMgaW52b2NhdGlvbnMgaW4gImNhbGxzIgorICAgICIgd2hlbiB1c2VkIGZyb20gYSBmdW5jdGlvbiAodGhhdCBpcywgd2hlbiB0aGUgZ2xvYmFsIHZhcmlhYmxlICJjYWxscyIgbmVlZHMKKyAgICAiIHRoZSAiZzoiIHByZWZpeCkuICBUaGlzIGlzIHRvIGNoZWNrIHRoYXQgdGhlIGZ1bmN0aW9uIGNvZGUgaXMgc2tpcHBlZCB3aGVuCisgICAgIiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC4gIEZvciBpbm5lciBmdW5jdGlvbnMsIGRvIHNvIG9ubHkgaWYgdGhlIG91dGVyCisgICAgIiBmdW5jdGlvbiBpcyBub3QgYmVpbmcgZXhlY3V0ZWQuCisgICAgIgorICAgIGxldCBjYWxscyA9ICIiCisgICAgY29tISAtbmFyZ3M9MSBDQUxMCisJCVwgaWYgIWV4aXN0cygiY2FsbHMiKSAmJiAhZXhpc3RzKCJvdXRlciIpIHwKKwkJXCBsZXQgZzpjYWxscyA9IGc6Y2FsbHMgLiA8YXJncz4gfAorCQlcIGVuZGlmCisKKworICAgIFhsb29wSU5JVCEgMSAxNgorCisgICAgbGV0IGkgPSAwCisgICAgd2hpbGUgaSA8IDMKKworCVhsb29wTkVYVAorCWxldCBpID0gaSArIDEKKworCWlmIGkgPT0gMQorCSAgICBYbG9vcCAxCQkJCSIgWDogMQorCSAgICBmdW5jdGlvbiEgRjEoYXJnKQorCQlDQUxMIGE6YXJnCisJCWxldCBvdXRlciA9IDEKKworCQlYbG9vcElOSVQhIDQwOTYgNAorCQlsZXQgaiA9IDAKKwkJd2hpbGUgaiA8IDEKKwkJICAgIFhsb29wTkVYVAorCQkgICAgWGxvb3AgMQkJCSIgWDogNDA5NgorCQkgICAgbGV0IGogPSBqICsgMQorCQkgICAgZnVuY3Rpb24hIEcxKGFyZykKKwkJCUNBTEwgYTphcmcKKwkJICAgIGVuZGZ1bmN0aW9uCisJCSAgICBYbG9vcCAyCQkJIiBYOiA4MTkyCisJCWVuZHdoaWxlCisJICAgIGVuZGZ1bmN0aW9uCisJICAgIFhsb29wIDIJCQkJIiBYOiAyCisKKwkgICAgY29udGludWUKKwllbmRpZgorCisJWGxvb3AgNAkJCQkJIiBYOiA0ICogKDE2ICsgMjU2KQorCWZ1bmN0aW9uISBGe2l9KGksIGFyZykKKwkgICAgQ0FMTCBhOmFyZworCSAgICBsZXQgb3V0ZXIgPSAxCisKKwkgICAgWGxvb3BJTklUISAxNjM4NCA0CisJICAgIGlmIGE6aSA9PSAzCisJCVhsb29wTkVYVAorCQlYbG9vcE5FWFQKKwkJWGxvb3BORVhUCisJICAgIGVuZGlmCisJICAgIGxldCBrID0gMAorCSAgICB3aGlsZSBrIDwgMworCQlYbG9vcE5FWFQKKwkJWGxvb3AgMQkJCQkiIFg6IDE2Mzg0KigxKzQrMTYrNjQrMjU2KzEwMjQpCisJCWxldCBrID0gayArIDEKKwkJZnVuY3Rpb24hIEd7YTppfXtrfShhcmcpCisJCSAgICBDQUxMIGE6YXJnCisJCWVuZGZ1bmN0aW9uCisJCVhsb29wIDIJCQkJIiBYOiAzMjc2OCooMSs0KzE2KzY0KzI1NisxMDI0KQorCSAgICBlbmR3aGlsZQorCWVuZGZ1bmN0aW9uCisJWGxvb3AgOAkJCQkJIiBYOiA4ICogKDE2ICsgMjU2KQorCisgICAgZW5kd2hpbGUKKworICAgIGlmIGV4aXN0cygiKkcxIikKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIGlmIGV4aXN0cygiKkYxIikKKwljYWxsIEYxKCJGMSIpCisJaWYgZXhpc3RzKCIqRzEiKQorCSAgICBjYWxsIEcxKCJHMSIpCisJZW5kaWYKKyAgICBlbmRpZgorCisgICAgaWYgZXhpc3RzKCJHMjEiKSB8fCBleGlzdHMoIkcyMSIpIHx8IGV4aXN0cygiRzIxIikKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoIipGMiIpCisJY2FsbCBGMigyLCAiRjIiKQorCWlmIGV4aXN0cygiKkcyMSIpCisJICAgIGNhbGwgRzIxKCJHMjEiKQorCWVuZGlmCisJaWYgZXhpc3RzKCIqRzIyIikKKwkgICAgY2FsbCBHMjIoIkcyMiIpCisJZW5kaWYKKwlpZiBleGlzdHMoIipHMjMiKQorCSAgICBjYWxsIEcyMygiRzIzIikKKwllbmRpZgorICAgIGVuZGlmCisKKyAgICBpZiBleGlzdHMoIkczMSIpIHx8IGV4aXN0cygiRzMxIikgfHwgZXhpc3RzKCJHMzEiKQorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIGlmIGV4aXN0cygiKkYzIikKKwljYWxsIEYzKDMsICJGMyIpCisJaWYgZXhpc3RzKCIqRzMxIikKKwkgICAgY2FsbCBHMzEoIkczMSIpCisJZW5kaWYKKwlpZiBleGlzdHMoIipHMzIiKQorCSAgICBjYWxsIEczMigiRzMyIikKKwllbmRpZgorCWlmIGV4aXN0cygiKkczMyIpCisJICAgIGNhbGwgRzMzKCJHMzMiKQorCWVuZGlmCisgICAgZW5kaWYKKworICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorCisgICAgaWYgY2FsbHMgIT0gIkYxRzFGMkcyMUcyMkcyM0YzRzMxRzMyRzMzIgorCVhwYXRoIDEwNzM3NDE4MjQJCQkiIFg6IDAKKwlYb3V0ICJjYWxscyBpcyIgY2FsbHMKKyAgICBlbmRpZgorCisgICAgZGVsZnVuY3Rpb24gRjEKKyAgICBkZWxmdW5jdGlvbiBHMQorICAgIGRlbGZ1bmN0aW9uIEYyCisgICAgZGVsZnVuY3Rpb24gRzIxCisgICAgZGVsZnVuY3Rpb24gRzIyCisgICAgZGVsZnVuY3Rpb24gRzIzCisgICAgZGVsZnVuY3Rpb24gRzMxCisgICAgZGVsZnVuY3Rpb24gRzMyCisgICAgZGVsZnVuY3Rpb24gRzMzCisKK2VuZGlmCisKK1hjaGVjayA2MDM5Nzg5NDcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDc6ICAgQ29udGludWluZyBvbiBlcnJvcnMgb3V0c2lkZSBmdW5jdGlvbnMJCQkgICAge3t7MQorIgorIgkgICAgT24gYW4gZXJyb3Igb3V0c2lkZSBhIGZ1bmN0aW9uLCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcgY29udGludWVzCisiCSAgICBhdCB0aGUgbGluZSBmb2xsb3dpbmcgdGhlIG91dGVybW9zdCA6ZW5kaWYgb3IgOmVuZHdoaWxlLiAgV2hlbiBub3QKKyIJICAgIGluc2lkZSBhbiA6aWYgb3IgOndoaWxlLCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcgY29udGludWVzIGF0IHRoZSBuZXh0CisiCSAgICBsaW5lLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIDEKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICB3aGlsZSAxCisJWHBhdGggMgkJCQkJIiBYOiAyCisJYXNkZgorCVhwYXRoIDQJCQkJCSIgWDogMAorCWJyZWFrCisgICAgZW5kd2hpbGUgfCBYcGF0aCA4CQkJCSIgWDogMAorICAgIFhwYXRoIDE2CQkJCQkiIFg6IDAKK2VuZGlmIHwgWHBhdGggMzIJCQkJIiBYOiAwCitYcGF0aCA2NAkJCQkJIiBYOiA2NAorCit3aGlsZSAxCisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDEyOAorICAgIGlmIDEKKwlYcGF0aCAyNTYJCQkJIiBYOiAyNTYKKwlhc2RmCisJWHBhdGggNTEyCQkJCSIgWDogMAorICAgIGVuZGlmIHwgWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBYcGF0aCAyMDQ4CQkJCQkiIFg6IDAKKyAgICBicmVhaworZW5kd2hpbGUgfCBYcGF0aCA0MDk2CQkJCSIgWDogMAorWHBhdGggODE5MgkJCQkJIiBYOiA4MTkyCisKK2FzZGYKK1hwYXRoIDE2Mzg0CQkJCQkiIFg6IDE2Mzg0CisKK2FzZGYgfCBYcGF0aCAzMjc2OAkJCQkiIFg6IDAKK1hwYXRoIDY1NTM2CQkJCQkiIFg6IDY1NTM2CisKK1hjaGVjayA5MDU2MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODogICBBYm9ydGluZyBhbmQgY29udGludWluZyBvbiBlcnJvcnMgaW5zaWRlIGZ1bmN0aW9ucwkJICAgIHt7ezEKKyIKKyIJICAgIE9uIGFuIGVycm9yIGluc2lkZSBhIGZ1bmN0aW9uIHdpdGhvdXQgdGhlICJhYm9ydCIgYXR0cmlidXRlLCB0aGUKKyIJICAgIHNjcmlwdCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBhdCB0aGUgbmV4dCBsaW5lICh1bmxlc3MgdGhlIGVycm9yIHdhcworIgkgICAgaW4gYSA6cmV0dXJuIGNvbW1hbmQpLiAgT24gYW4gZXJyb3IgaW5zaWRlIGEgZnVuY3Rpb24gd2l0aCB0aGUKKyIJICAgICJhYm9ydCIgYXR0cmlidXRlLCB0aGUgZnVuY3Rpb24gaXMgYWJvcnRlZCBhbmQgdGhlIHNjcmlwdCBwcm9jZXNzaW5nCisiCSAgICBjb250aW51ZXMgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGw7IHRoZSB2YWx1ZSAtMSBpcyByZXR1cm5lZCB0aGVuLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGKCkKKyAgICBpZiAxCisJWHBhdGggMQkJCQkJIiBYOiAxCisJd2hpbGUgMQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICBhc2RmCisJICAgIFhwYXRoIDQJCQkJIiBYOiA0CisJICAgIGFzZGYgfCBYcGF0aCA4CQkJIiBYOiAwCisJICAgIFhwYXRoIDE2CQkJCSIgWDogMTYKKwkgICAgYnJlYWsKKwllbmR3aGlsZQorCVhwYXRoIDMyCQkJCSIgWDogMzIKKyAgICBlbmRpZiB8IFhwYXRoIDY0CQkJCSIgWDogNjQKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMTI4CisKKyAgICB3aGlsZSAxCisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJaWYgMQorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwkgICAgYXNkZgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMTAyNAorCSAgICBhc2RmIHwgWHBhdGggMjA0OAkJCSIgWDogMAorCSAgICBYcGF0aCA0MDk2CQkJCSIgWDogNDA5NgorCWVuZGlmCisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKwlicmVhaworICAgIGVuZHdoaWxlIHwgWHBhdGggMTYzODQJCQkiIFg6IDE2Mzg0CisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKworICAgIHJldHVybiBub3ZhcgkJIiByZXR1cm5zIChkZWZhdWx0IHJldHVybiB2YWx1ZSAwKQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDAKKyAgICByZXR1cm4gMQkJCSIgbm90IHJlYWNoZWQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBHKCkgYWJvcnQKKyAgICBpZiAxCisJWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisJd2hpbGUgMQorCSAgICBYcGF0aCAyNjIxNDQJCQkiIFg6IDI2MjE0NAorCSAgICBhc2RmCQkiIHJldHVybnMgLTEKKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJICAgIGJyZWFrCisJZW5kd2hpbGUKKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGVuZGlmIHwgWHBhdGggMjA5NzE1MgkJCSIgWDogMAorICAgIFhwYXRoIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCisKKyAgICByZXR1cm4gLTQJCQkiIG5vdCByZWFjaGVkCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpIGFib3J0CisgICAgd2hpbGUgMQorCVhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisJaWYgMQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgYXNkZgkJIiByZXR1cm5zIC0xCisJICAgIFhwYXRoIDMzNTU0NDMyCQkJIiBYOiAwCisJZW5kaWYKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDAKKwlicmVhaworICAgIGVuZHdoaWxlIHwgWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAwCisgICAgWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMAorCisgICAgcmV0dXJuIC00CQkJIiBub3QgcmVhY2hlZAorZW5kZnVuY3Rpb24KKworIiBBYm9ydGVkIGZ1bmN0aW9ucyAoRyBhbmQgSCkgcmV0dXJuIC0xLgorbGV0IHN1bSA9IChGKCkgKyAxKSAtIDQqRygpIC0gOCpIKCkKK1hwYXRoIDUzNjg3MDkxMgkJCQkJIiBYOiA1MzY4NzA5MTIKK2lmIHN1bSAhPSAxMworICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCisgICAgWG91dCAic3VtIGlzIiBzdW0KK2VuZGlmCisKK3VubGV0IHN1bQorZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorCitYY2hlY2sgNTYyNDkzNDMxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA5OiAgIENvbnRpbnVpbmcgYWZ0ZXIgYWJvcnRlZCBmdW5jdGlvbnMJCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSBmdW5jdGlvbiB3aXRoIHRoZSAiYWJvcnQiIGF0dHJpYnV0ZSBpcyBhYm9ydGVkIGR1ZSB0byBhbgorIgkgICAgZXJyb3IsIHRoZSBuZXh0IGZ1bmN0aW9uIGJhY2sgaW4gdGhlIGNhbGwgaGllcmFyY2h5IHdpdGhvdXQgYW4KKyIJICAgICJhYm9ydCIgYXR0cmlidXRlIGNvbnRpbnVlczsgdGhlIHZhbHVlIC0xIGlzIHJldHVybmVkIHRoZW4uCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIEYoKSBhYm9ydAorICAgIFhwYXRoIDEJCQkJCSIgWDogMQorICAgIGxldCByZXN1bHQgPSBHKCkJIiBub3QgYWJvcnRlZAorICAgIFhwYXRoIDIJCQkJCSIgWDogMgorICAgIGlmIHJlc3VsdCAhPSAyCisJWHBhdGggNAkJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICByZXR1cm4gMQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEcoKQkJIiBubyBhYm9ydCBhdHRyaWJ1dGUKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDgKKyAgICBpZiBIKCkgIT0gLTEJIiBhYm9ydGVkCisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBYcGF0aCAzMgkJCQkJIiBYOiAzMgorICAgIHJldHVybiAyCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpIGFib3J0CisgICAgWHBhdGggNjQJCQkJCSIgWDogNjQKKyAgICBjYWxsIEkoKQkJIiBhYm9ydGVkCisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDAKKyAgICByZXR1cm4gNAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEkoKSBhYm9ydAorICAgIFhwYXRoIDI1NgkJCQkJIiBYOiAyNTYKKyAgICBhc2RmCQkiIGVycm9yCisgICAgWHBhdGggNTEyCQkJCQkiIFg6IDAKKyAgICByZXR1cm4gOAorZW5kZnVuY3Rpb24KKworaWYgRigpICE9IDEKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDAKK2VuZGlmCisKK2RlbGZ1bmN0aW9uIEYKK2RlbGZ1bmN0aW9uIEcKK2RlbGZ1bmN0aW9uIEgKK2RlbGZ1bmN0aW9uIEkKKworWGNoZWNrIDM2MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMTA6ICA6aWYsIDplbHNlaWYsIDp3aGlsZSBhcmd1bWVudCBwYXJzaW5nCQkJICAgIHt7ezEKKyIKKyIJICAgIEEgJyInIG9yICd8JyBpbiBhbiBhcmd1bWVudCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG1peGVkIHVwIHdpdGgKKyIJICAgIGEgY29tbWVudCBvciBhIG5leHQgY29tbWFuZCBhZnRlciBhIGJhci4gIFBhcnNpbmcgZXJyb3JzIHNob3VsZAorIgkgICAgYmUgcmVjb2duaXplZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgTVNHKGVuciwgZW1zZykKKyAgICBsZXQgZW5nbGlzaCA9IHY6bGFuZyA9PSAiQyIgfHwgdjpsYW5nID1+ICdeW0VlXW4nCisgICAgaWYgYTplbnIgPT0gIiIKKwlYb3V0ICJUT0RPOiBBZGQgbWVzc2FnZSBudW1iZXIgZm9yOiIgYTplbXNnCisJbGV0IHY6ZXJybXNnID0gIjoiIC4gdjplcnJtc2cKKyAgICBlbmRpZgorICAgIGxldCBtYXRjaCA9IDEKKyAgICBpZiB2OmVycm1zZyAhfiAnXicuYTplbnIuJzonIHx8IChlbmdsaXNoICYmIHY6ZXJybXNnICF+IGE6ZW1zZykKKwlsZXQgbWF0Y2ggPSAwCisJaWYgdjplcnJtc2cgPT0gIiIKKwkgICAgWG91dCAiTWVzc2FnZSBtaXNzaW5nLiIKKwllbHNlCisJICAgIGxldCB2OmVycm1zZyA9IGVzY2FwZSh2OmVycm1zZywgJyInKQorCSAgICBYb3V0ICJVbmV4cGVjdGVkIG1lc3NhZ2U6IiB2OmVycm1zZworCWVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gbWF0Y2gKK2VuZGZ1bmN0aW9uCisKK2lmIDEgfHwgc3RybGVuKCJcIiIpIHwgWHBhdGggMQkJCSIgWDogMQorICAgIFhwYXRoIDIJCQkJCSIgWDogMgorZW5kaWYKK1hwYXRoIDQJCQkJCQkiIFg6IDQKKworaWYgMAorZWxzZWlmIDEgfHwgc3RybGVuKCJcIiIpIHwgWHBhdGggOAkJIiBYOiA4CisgICAgWHBhdGggMTYJCQkJCSIgWDogMTYKK2VuZGlmCitYcGF0aCAzMgkJCQkJIiBYOiAzMgorCit3aGlsZSAxIHx8IHN0cmxlbigiXCIiKSB8IFhwYXRoIDY0CQkiIFg6IDY0CisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDEyOAorICAgIGJyZWFrCitlbmR3aGlsZQorWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorCitsZXQgdjplcnJtc2cgPSAiIgoraWYgMSB8fHwgc3RybGVuKCJcIiIpIHwgWHBhdGggNTEyCQkiIFg6IDAKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDAKK2VuZGlmCitYcGF0aCAyMDQ4CQkJCQkiIFg6IDIwNDgKK2lmICFNU0coJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogMAorZW5kaWYKKworbGV0IHY6ZXJybXNnID0gIiIKK2lmIDAKK2Vsc2VpZiAxIHx8fCBzdHJsZW4oIlwiIikgfCBYcGF0aCA4MTkyCQkiIFg6IDAKKyAgICBYcGF0aCAxNjM4NAkJCQkJIiBYOiAwCitlbmRpZgorWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2lmICFNU0coJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDAKK2VuZGlmCisKK2xldCB2OmVycm1zZyA9ICIiCit3aGlsZSAxIHx8fCBzdHJsZW4oIlwiIikgfCBYcGF0aCAxMzEwNzIJCSIgWDogMAorICAgIFhwYXRoIDI2MjE0NAkJCQkiIFg6IDAKKyAgICBicmVhaworZW5kd2hpbGUKK1hwYXRoIDUyNDI4OAkJCQkJIiBYOiA1MjQyODgKK2lmICFNU0coJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCitlbmRpZgorCitkZWxmdW5jdGlvbiBNU0cKKworWGNoZWNrIDU1OTYxNQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMTE6ICA6aWYsIDplbHNlaWYsIDp3aGlsZSBhcmd1bWVudCBldmFsdWF0aW9uIGFmdGVyIGFib3J0CSAgICB7e3sxCisiCisiCSAgICBXaGVuIGNvZGUgaXMgc2tpcHBlZCBvdmVyIGR1ZSB0byBhbiBlcnJvciwgdGhlIGJvb2xlYW4gYXJndW1lbnQgdG8KKyIJICAgIGFuIDppZiwgOmVsc2VpZiwgb3IgOndoaWxlIG11c3Qgbm90IGJlIGV2YWx1YXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgY2FsbHMgPSAwCisKK2Z1bmN0aW9uISBQKG51bSkKKyAgICBsZXQgZzpjYWxscyA9IGc6Y2FsbHMgKyBhOm51bSAgICIgc2lkZSBlZmZlY3Qgb24gY2FsbAorICAgIHJldHVybiAwCitlbmRmdW5jdGlvbgorCitpZiAxCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCisgICAgYXNkZgkJIiBlcnJvcgorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorICAgIGlmIFAoMSkJCSIgc2hvdWxkIG5vdCBiZSBjYWxsZWQKKwlYcGF0aCA0CQkJCQkiIFg6IDAKKyAgICBlbHNlaWYgIVAoMikJIiBzaG91bGQgbm90IGJlIGNhbGxlZAorCVhwYXRoIDgJCQkJCSIgWDogMAorICAgIGVsc2UKKwlYcGF0aCAxNgkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIFhwYXRoIDMyCQkJCQkiIFg6IDAKKyAgICB3aGlsZSBQKDQpCQkiIHNob3VsZCBub3QgYmUgY2FsbGVkCisJWHBhdGggNjQJCQkJIiBYOiAwCisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMAorZW5kaWYKKworaWYgY2FsbHMgJSAyCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDAKK2VuZGlmCitpZiAoY2FsbHMvMikgJSAyCisgICAgWHBhdGggNTEyCQkJCQkiIFg6IDAKK2VuZGlmCitpZiAoY2FsbHMvNCkgJSAyCisgICAgWHBhdGggMTAyNAkJCQkJIiBYOiAwCitlbmRpZgorWHBhdGggMjA0OAkJCQkJIiBYOiAyMDQ4CisKK3VubGV0IGNhbGxzCitkZWxmdW5jdGlvbiBQCisKK1hjaGVjayAyMDQ5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxMjogIEV4cHJlc3Npb25zIGluIGJyYWNlcyBpbiBza2lwcGVkIGNvZGUJCQkgICAge3t7MQorIgorIgkgICAgSW4gY29kZSBza2lwcGVkIG92ZXIgZHVlIHRvIGFuIGVycm9yIG9yIGluYWN0aXZlIGNvbmRpdGlvbmFsLAorIgkgICAgYW4gZXhwcmVzc2lvbiBpbiBicmFjZXMgYXMgcGFydCBvZiBhIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIG5hbWUKKyIJICAgIHNob3VsZCBub3QgYmUgZXZhbHVhdGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDgKKworZnVuY3Rpb24hIE5VTEwoKQorICAgIFhsb29wIDEJCQkJCSIgWDogMAorICAgIHJldHVybiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgWkVSTygpCisgICAgWGxvb3AgMgkJCQkJIiBYOiAwCisgICAgcmV0dXJuIDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBGMCgpCisgICAgWGxvb3AgNAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRjEoYXJnKQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworbGV0IFYwID0gMQorCitYcGF0aCA4MTkyCQkJCQkiIFg6IDgxOTIKK2VjaG8gMCA/IEZ7TlVMTCgpICsgVntaRVJPKCl9fSgpIDogMQorWGxvb3BORVhUCisKK1hwYXRoIDE2Mzg0CQkJCQkiIFg6IDE2Mzg0CitpZiAwCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMAorICAgIGNhbGwgRntOVUxMKCkgKyBWe1pFUk8oKX19KCkKK2VuZGlmCitYbG9vcE5FWFQKKworWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2lmIDEKKyAgICBhc2RmCQkiIGVycm9yCisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMAorICAgIGNhbGwgRjEoRntOVUxMKCkgKyBWe1pFUk8oKX19KCkpCitlbmRpZgorWGxvb3BORVhUCisKK1hwYXRoIDI2MjE0NAkJCQkJIiBYOiAyNjIxNDQKK2lmIDEKKyAgICBhc2RmCQkiIGVycm9yCisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorICAgIGNhbGwgRntOVUxMKCkgKyBWe1pFUk8oKX19KCkKK2VuZGlmCisKK1hjaGVjayAzNTIyNTYKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDEzOiAgRmFpbHVyZSBpbiBhcmd1bWVudCBldmFsdWF0aW9uIGZvciA6d2hpbGUJCQkgICAge3t7MQorIgorIgkgICAgQSBmYWlsdXJlIGluIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gZm9yIHRoZSBjb25kaXRpb24gb2YgYSA6d2hpbGUKKyIJICAgIGNhdXNlcyB0aGUgd2hvbGUgOndoaWxlIGxvb3AgdW50aWwgdGhlIG1hdGNoaW5nIDplbmR3aGlsZSBiZWluZworIgkgICAgaWdub3JlZC4gIENvbnRpbnVhdGlvbiBpcyBhdCB0aGUgbmV4dCBmb2xsb3dpbmcgbGluZS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYcGF0aCAxCQkJCQkJIiBYOiAxCit3aGlsZSBhc2RmCisgICAgWHBhdGggMgkJCQkJIiBYOiAwCisgICAgd2hpbGUgMQorCVhwYXRoIDQJCQkJCSIgWDogMAorCWJyZWFrCisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDAKKyAgICBicmVhaworZW5kd2hpbGUKK1hwYXRoIDE2CQkJCQkiIFg6IDE2CisKK3doaWxlIGFzZGYgfCBYcGF0aCAzMiB8IGVuZHdoaWxlIHwgWHBhdGggNjQJIiBYOiAwCitYcGF0aCAxMjgJCQkJCSIgWDogMTI4CisKK1hjaGVjayAxNDUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE0OiAgRmFpbHVyZSBpbiBhcmd1bWVudCBldmFsdWF0aW9uIGZvciA6aWYJCQkgICAge3t7MQorIgorIgkgICAgQSBmYWlsdXJlIGluIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24gZm9yIHRoZSBjb25kaXRpb24gb2YgYW4gOmlmCisiCSAgICBkb2VzIG5vdCBjYXVzZSB0aGUgY29ycmVzcG9uZGluZyA6ZWxzZSBvciA6ZW5kaWYgYmVpbmcgbWF0Y2hlZCB0bworIgkgICAgYSBwcmV2aW91cyA6aWYvOmVsc2VpZi4gIE5laXRoZXIgb2YgYm90aCBicmFuY2hlcyBvZiB0aGUgZmFpbGVkIDppZgorIgkgICAgYXJlIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCitYbG9vcElOSVQgMSAyNTYKKworZnVuY3Rpb24hIEYoKQorICAgIFhsb29wIDEJCQkJCSIgWDogMQkgICAgKyAyNTYgKiAxCisgICAgbGV0IHggPSAwCisgICAgaWYgeAkJIiBmYWxzZQorCVhsb29wIDIJCQkJCSIgWDogMAkgICAgKyAyNTYgKiAwCisgICAgZWxzZWlmICF4CQkiIGFsd2F5cyB0cnVlCisJWGxvb3AgNAkJCQkJIiBYOiA0CSAgICArIDI1NiAqIDQKKwlsZXQgeCA9IDEKKwlpZiBnOmJvb2x2YXIJIiBwb3NzaWJseSB1bmRlZmluZWQKKwkgICAgWGxvb3AgOAkJCQkiIFg6IDgJICAgICsgMjU2ICogMAorCWVsc2UKKwkgICAgWGxvb3AgMTYJCQkJIiBYOiAwCSAgICArIDI1NiAqIDAKKwllbmRpZgorCVhsb29wIDMyCQkJCSIgWDogMzIJICAgICsgMjU2ICogMzIKKyAgICBlbHNlaWYgeAkJIiBuZXZlciBleGVjdXRlZAorCVhsb29wIDY0CQkJCSIgWDogMAkgICAgKyAyNTYgKiAwCisgICAgZW5kaWYKKyAgICBYbG9vcCAxMjgJCQkJCSIgWDogMTI4ICAgICsgMjU2ICogMTI4CitlbmRmdW5jdGlvbgorCitsZXQgYm9vbHZhciA9IDEKK2NhbGwgRigpCisKK1hsb29wTkVYVAordW5sZXQgYm9vbHZhcgorY2FsbCBGKCkKKworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgNDI0MTMKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE1OiAgRmFpbHVyZSBpbiBhcmd1bWVudCBldmFsdWF0aW9uIGZvciA6aWYgKGJhcikJCSAgICB7e3sxCisiCisiCSAgICBMaWtlIHByZXZpb3VzIHRlc3QsIGV4Y2VwdCB0aGF0IHRoZSBmYWlsaW5nIDppZiAuLi4gfCAuLi4gfCA6ZW5kaWYKKyIJICAgIGlzIGluIGEgc2luZ2xlIGxpbmUuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKK1hsb29wSU5JVCAxIDI1NgorCitmdW5jdGlvbiEgRigpCisgICAgWGxvb3AgMQkJCQkJIiBYOiAxCSAgICArIDI1NiAqIDEKKyAgICBsZXQgeCA9IDAKKyAgICBpZiB4CQkiIGZhbHNlCisJWGxvb3AgMgkJCQkJIiBYOiAwCSAgICArIDI1NiAqIDAKKyAgICBlbHNlaWYgIXgJCSIgYWx3YXlzIHRydWUKKwlYbG9vcCA0CQkJCQkiIFg6IDQJICAgICsgMjU2ICogNAorCWxldCB4ID0gMQorCWlmIGc6Ym9vbHZhciB8IFhsb29wIDggfCBlbHNlIHwgWGxvb3AgMTYgfCBlbmRpZiAgICAiIFg6IDgKKwlYbG9vcCAzMgkJCQkiIFg6IDMyCSAgICArIDI1NiAqIDMyCisgICAgZWxzZWlmIHgJCSIgbmV2ZXIgZXhlY3V0ZWQKKwlYbG9vcCA2NAkJCQkiIFg6IDAJICAgICsgMjU2ICogMAorICAgIGVuZGlmCisgICAgWGxvb3AgMTI4CQkJCQkiIFg6IDEyOCAgICArIDI1NiAqIDEyOAorZW5kZnVuY3Rpb24KKworbGV0IGJvb2x2YXIgPSAxCitjYWxsIEYoKQorCitYbG9vcE5FWFQKK3VubGV0IGJvb2x2YXIKK2NhbGwgRigpCisKK2RlbGZ1bmN0aW9uIEYKKworWGNoZWNrIDQyNDEzCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxNjogIERvdWJsZSA6ZWxzZSBvciA6ZWxzZWlmIGFmdGVyIDplbHNlCQkJCSAgICB7e3sxCisiCisiCSAgICBNdWx0aXBsZSA6ZWxzZXMgb3IgYW4gOmVsc2VpZiBhZnRlciBhbiA6ZWxzZSBhcmUgZm9yYmlkZGVuLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggMQkJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDIJCQkJCSIgWDogMgorICAgIGVsc2UJCSIgYWJvcnRzIGZ1bmN0aW9uCisJWHBhdGggNAkJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBHKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggOAkJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDE2CQkJCSIgWDogMTYKKyAgICBlbHNlaWYgMQkJIiBhYm9ydHMgZnVuY3Rpb24KKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBlbHNlCisJWHBhdGggNjQJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBIKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggMTI4CQkJCSIgWDogMAorICAgIGVsc2VpZiAwCisJWHBhdGggMjU2CQkJCSIgWDogMAorICAgIGVsc2UKKwlYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKyAgICBlbHNlCQkiIGFib3J0cyBmdW5jdGlvbgorCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBJKCkgYWJvcnQKKyAgICBpZiAwCisJWHBhdGggMjA0OAkJCQkiIFg6IDAKKyAgICBlbHNlaWYgMAorCVhwYXRoIDQwOTYJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisgICAgZWxzZWlmIDEJCSIgYWJvcnRzIGZ1bmN0aW9uCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgZWxzZQorCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitjYWxsIEYoKQorY2FsbCBHKCkKK2NhbGwgSCgpCitjYWxsIEkoKQorCitkZWxmdW5jdGlvbiBGCitkZWxmdW5jdGlvbiBHCitkZWxmdW5jdGlvbiBICitkZWxmdW5jdGlvbiBJCisKK1hjaGVjayA4NzIyCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxNzogIE5lc3Rpbmcgb2YgdW5tYXRjaGVkIDppZiBvciA6ZW5kaWYgaW5zaWRlIGEgOndoaWxlCQkgICAge3t7MQorIgorIgkgICAgVGhlIDp3aGlsZS86ZW5kd2hpbGUgdGFrZXMgcHJlY2VkZW5jZSBpbiBuZXN0aW5nIG92ZXIgYW4gdW5jbG9zZWQKKyIJICAgIDppZiBvciBhbiB1bm9wZW5lZCA6ZW5kaWYuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIE1TRyhlbnIsIGVtc2cpCisgICAgbGV0IGVuZ2xpc2ggPSB2OmxhbmcgPT0gIkMiIHx8IHY6bGFuZyA9fiAnXltFZV1uJworICAgIGlmIGE6ZW5yID09ICIiCisJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGE6ZW1zZworCWxldCB2OmVycm1zZyA9ICI6IiAuIHY6ZXJybXNnCisgICAgZW5kaWYKKyAgICBsZXQgbWF0Y2ggPSAxCisgICAgaWYgdjplcnJtc2cgIX4gJ14nLmE6ZW5yLic6JyB8fCAoZW5nbGlzaCAmJiB2OmVycm1zZyAhfiBhOmVtc2cpCisJbGV0IG1hdGNoID0gMAorCWlmIHY6ZXJybXNnID09ICIiCisJICAgIFhvdXQgIk1lc3NhZ2UgbWlzc2luZy4iCisJZWxzZQorCSAgICBsZXQgdjplcnJtc2cgPSBlc2NhcGUodjplcnJtc2csICciJykKKwkgICAgWG91dCAiVW5leHBlY3RlZCBtZXNzYWdlOiIgdjplcnJtc2cKKwllbmRpZgorICAgIGVuZGlmCisgICAgcmV0dXJuIG1hdGNoCitlbmRmdW5jdGlvbgorCitsZXQgbWVzc2FnZXMgPSAiIgorCisiIFdoaWxlIGxvb3BzIGluc2lkZSBhIGZ1bmN0aW9uIGFyZSBjb250aW51ZWQgb24gZXJyb3IuCitmdW5jdGlvbiEgRigpCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKyAgICBYbG9vcElOSVQgMSAxNgorICAgIGxldCBsb29wcyA9IDMKKyAgICB3aGlsZSBsb29wcyA+IDAKKwlsZXQgbG9vcHMgPSBsb29wcyAtIDEJCQkiICAgIDI6ICAxOiAgICAgMDoKKwlYbG9vcCAxCQkJCQkiIFg6IDEgKyAxKjE2ICsgMSoxNioxNgorCWlmIChsb29wcyA9PSAxKQorCSAgICBYbG9vcCAyCQkJCSIgWDogICAgIDIqMTYKKwkgICAgWGxvb3BORVhUCisJICAgIGNvbnRpbnVlCisJZWxzZWlmIChsb29wcyA9PSAwKQorCSAgICBYbG9vcCA0CQkJCSIgWDoJCTQqMTYqMTYKKwkgICAgYnJlYWsKKwllbHNlaWYgMQorCSAgICBYbG9vcCA4CQkJCSIgWDogOAorCSAgICBYbG9vcE5FWFQKKwkiIGVuZGlmIG1pc3NpbmchCisgICAgZW5kd2hpbGUJIiA6ZW5kd2hpbGUgYWZ0ZXIgOmlmIDEKKyAgICBYcGF0aCA0MDk2CQkJCQkiIFg6IDE2KjE2KjE2CisgICAgaWYgTVNHKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKwlsZXQgZzptZXNzYWdlcyA9IGc6bWVzc2FnZXMgLiAiQSIKKyAgICBlbmRpZgorCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKyAgICBYbG9vcElOSVQhIDgxOTIgNAorICAgIGxldCBsb29wcyA9IDIKKyAgICB3aGlsZSBsb29wcyA+IDAJCQkJIiAgICAyOiAgICAgMToKKwlYbG9vcE5FWFQKKwlsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwlYbG9vcCAxCQkJCQkiIFg6IDgxOTIgKyA4MTkyKjQKKwlpZiAwCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJIiBlbmRpZiBtaXNzaW5nCisgICAgZW5kd2hpbGUJIiA6ZW5kd2hpbGUgYWZ0ZXIgOmlmIDAKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiA4MTkyKjQqNAorICAgIGlmIE1TRygnRTE3MScsICJNaXNzaW5nIDplbmRpZiIpCisJbGV0IGc6bWVzc2FnZXMgPSBnOm1lc3NhZ2VzIC4gIkIiCisgICAgZW5kaWYKKworICAgIGxldCB2OmVycm1zZyA9ICIiCisgICAgWGxvb3BJTklUIDI2MjE0NCA0CisgICAgbGV0IGxvb3BzID0gMgorICAgIHdoaWxlIGxvb3BzID4gMAkJCQkiICAgIDI6ICAgICAxOgorCWxldCBsb29wcyA9IGxvb3BzIC0gMQorCVhsb29wIDEJCQkJCSIgWDogMjYyMTQ0ICsgMjYyMTQ0ICogNAorCSIgaWYgbWlzc2luZyEKKwllbmRpZgkiIDplbmRpZiB3aXRob3V0IDppZiBpbiB3aGlsZQorCVhsb29wIDIJCQkJCSIgWDogNTI0Mjg4ICsgNTI0Mjg4ICogNAorCVhsb29wTkVYVAorICAgIGVuZHdoaWxlCisgICAgWHBhdGggNDE5NDMwNAkJCQkiIFg6IDI2MjE0NCo0KjQKKyAgICBpZiBNU0coJ0U1ODAnLCAiOmVuZGlmIHdpdGhvdXQgOmlmIikKKwlsZXQgZzptZXNzYWdlcyA9IGc6bWVzc2FnZXMgLiAiQyIKKyAgICBlbmRpZgorZW5kZnVuY3Rpb24KKworY2FsbCBGKCkKKworIiBFcnJvciBjb250aW51YXRpb24gb3V0c2lkZSBhIGZ1bmN0aW9uIGlzIGF0IHRoZSBvdXRlcm1vc3QgOmVuZHdoaWxlIG9yIDplbmRpZi4KK2xldCB2OmVycm1zZyA9ICIiCitYbG9vcElOSVQhIDgzODg2MDggNAorbGV0IGxvb3BzID0gMgord2hpbGUgbG9vcHMgPiAwCQkJCQkiICAgIDI6CQkxOgorICAgIFhsb29wTkVYVAorICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorICAgIFhsb29wIDEJCQkJCSIgWDogODM4ODYwOCArIDAgKiA0CisgICAgaWYgMAorCVhsb29wIDIJCQkJCSIgWDogMAorICAgICIgZW5kaWYgbWlzc2luZyEgRm9sbG93aW5nIDplbmR3aGlsZSBmYWlscy4KK2VuZHdoaWxlIHwgWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAwCitYcGF0aCAyNjg0MzU0NTYJCQkJCSIgWDogMio4Mzg4NjA4KjQqNAoraWYgTVNHKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKyAgICBsZXQgbWVzc2FnZXMgPSBnOm1lc3NhZ2VzIC4gIkQiCitlbmRpZgorCitpZiBtZXNzYWdlcyAhPSAiQUJDRCIKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisgICAgWG91dCAibWVzc2FnZXMgaXMiIG1lc3NhZ2VzICJpbnN0ZWFkIG9mIEFCQ0QiCitlbmRpZgorCit1bmxldCBsb29wcyBtZXNzYWdlcworZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gTVNHCisKK1hjaGVjayAyODUxMjc5OTMKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDE4OiAgSW50ZXJydXB0IChDdHJsLUMgcHJlc3NlZCkJCQkJCSAgICB7e3sxCisiCisiCSAgICBPbiBhbiBpbnRlcnJ1cHQsIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyBpcyB0ZXJtaW5hdGVkIGltbWVkaWF0ZWx5LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBpZiAxCisJWHBhdGggMQkJCQkJIiBYOiAxCisJd2hpbGUgMQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICBpZiAxCisJCVhwYXRoIDQJCQkJIiBYOiA0CisJCSJJTlRFUlJVUFQKKwkJWHBhdGggOAkJCQkiIFg6IDAKKwkJYnJlYWsKKwkJZmluaXNoCisJICAgIGVuZGlmIHwgWHBhdGggMTYJCQkiIFg6IDAKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJZW5kd2hpbGUgfCBYcGF0aCA2NAkJCSIgWDogMAorCVhwYXRoIDEyOAkJCQkiIFg6IDAKKyAgICBlbmRpZiB8IFhwYXRoIDI1NgkJCQkiIFg6IDAKKyAgICBYcGF0aCA1MTIJCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDEwMjQJCQkJIiBYOiAxMDI0CisJIklOVEVSUlVQVAorCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisgICAgZW5kdHJ5IHwgWHBhdGggNDA5NgkJCQkiIFg6IDAKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRigpCisJaWYgMQorCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJICAgIHdoaWxlIDEKKwkJWHBhdGggMzI3NjgJCQkiIFg6IDMyNzY4CisJCWlmIDEKKwkJICAgIFhwYXRoIDY1NTM2CQkJIiBYOiA2NTUzNgorCQkgICAgIklOVEVSUlVQVAorCQkgICAgWHBhdGggMTMxMDcyCQkiIFg6IDAKKwkJICAgIGJyZWFrCisJCSAgICByZXR1cm4KKwkJZW5kaWYgfCBYcGF0aCAyNjIxNDQJCSIgWDogMAorCQlYcGF0aCBYcGF0aCA1MjQyODgJCSIgWDogMAorCSAgICBlbmR3aGlsZSB8IFhwYXRoIDEwNDg1NzYJCSIgWDogMAorCSAgICBYcGF0aCBYcGF0aCAyMDk3MTUyCQkJIiBYOiAwCisJZW5kaWYgfCBYcGF0aCBYcGF0aCA0MTk0MzA0CQkiIFg6IDAKKwlYcGF0aCBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisgICAgZW5kZnVuY3Rpb24KKworICAgIGNhbGwgRigpIHwgWHBhdGggMTY3NzcyMTYJCQkiIFg6IDAKKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRygpCisJdHJ5CisJICAgIFhwYXRoIDY3MTA4ODY0CQkJIiBYOiA2NzEwODg2NAorCSAgICAiSU5URVJSVVBUCisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMAorCWVuZHRyeSB8IFhwYXRoIDI2ODQzNTQ1NgkJIiBYOiAwCisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBjYWxsIEcoKSB8IFhwYXRoIDEwNzM3NDE4MjQJCQkiIFg6IDAKKyAgICAiIFRoZSBYcGF0aCBjb21tYW5kIGRvZXMgbm90IGFjY2VwdCAyXjMxIChuZWdhdGl2ZSk7IGRpc3BsYXkgZXhwbGljaXRseToKKyAgICBleGVjICIhZWNobyAyMTQ3NDgzNjQ4ID4+IiAuIGc6RXh0cmFWaW1SZXN1bHQKKwkJCQkJCSIgWDogMAorZW5kaWYKKworWGNoZWNrIDY3MjI0NTgzCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAxOTogIEFib3J0aW5nIG9uIGVycm9ycyBpbnNpZGUgOnRyeS86ZW5kdHJ5CQkJICAgIHt7ezEKKyIKKyIJICAgIEFuIGVycm9yIGluIGEgY29tbWFuZCBkeW5hbWljYWxseSBlbmNsb3NlZCBpbiBhIDp0cnkvOmVuZHRyeSByZWdpb24KKyIJICAgIGFib3J0cyBzY3JpcHQgcHJvY2Vzc2luZyBpbW1lZGlhdGVseS4gIEl0IGRvZXMgbm90IG1hdHRlciB3aGV0aGVyCisiCSAgICB0aGUgZmFpbGluZyBjb21tYW5kIGlzIG91dHNpZGUgb3IgaW5zaWRlIGEgZnVuY3Rpb24gYW5kIHdoZXRoZXIgYQorIgkgICAgZnVuY3Rpb24gaGFzIGFuICJhYm9ydCIgYXR0cmlidXRlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRigpIGFib3J0CisJWHBhdGggMQkJCQkJIiBYOiAxCisJYXNkZgorCVhwYXRoIDIJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwljYWxsIEYoKQorCVhwYXRoIDgJCQkJCSIgWDogMAorICAgIGVuZHRyeSB8IFhwYXRoIDE2CQkJCSIgWDogMAorICAgIFhwYXRoIDMyCQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRygpCisJWHBhdGggNjQJCQkJIiBYOiA2NAorCWFzZGYKKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisgICAgZW5kZnVuY3Rpb24KKworICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCWNhbGwgRygpCisJWHBhdGggNTEyCQkJCSIgWDogMAorICAgIGVuZHRyeSB8IFhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgWHBhdGggMjA0OAkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwlhc2RmCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBlbmR0cnkgfCBYcGF0aCAxNjM4NAkJCSIgWDogMAorICAgIFhwYXRoIDMyNzY4CQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBpZiAxCisJdHJ5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgYXNkZgorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwllbmR0cnkgfCBYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKyAgICBlbmRpZiB8IFhwYXRoIDUyNDI4OAkJCSIgWDogMAorICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgbGV0IHAgPSAxCisgICAgd2hpbGUgcAorCWxldCBwID0gMAorCXRyeQorCSAgICBYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJICAgIGFzZGYKKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogMAorCWVuZHRyeSB8IFhwYXRoIDgzODg2MDgJCQkiIFg6IDAKKyAgICBlbmR3aGlsZSB8IFhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAwCisgICAgWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgbGV0IHAgPSAxCisgICAgd2hpbGUgcAorCWxldCBwID0gMAorIgl0cnkKKwkgICAgWHBhdGggNjcxMDg4NjQJCQkiIFg6IDY3MTA4ODY0CisgICAgZW5kd2hpbGUgfCBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKyAgICBYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAwCitlbmRpZgorCitYY2hlY2sgNjkyNzU5NzMKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjA6ICBBYm9ydGluZyBvbiBlcnJvcnMgYWZ0ZXIgOnRyeS86ZW5kdHJ5CQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyIHRoZSBsYXN0IGFjdGl2ZSA6dHJ5LzplbmR0cnkgcmVnaW9uIGhhcworIgkgICAgYmVlbiBsZWZ0LCB0ZXJtaW5hdGlvbiBiZWhhdmlvciBpcyBhcyBpZiBubyA6dHJ5LzplbmR0cnkgaGFzIGJlZW4KKyIJICAgIHNlZW4uCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIGxldCBwID0gMQorICAgIHdoaWxlIHAKKwlsZXQgcCA9IDAKKwl0cnkKKwkgICAgWHBhdGggMQkJCQkiIFg6IDEKKwllbmR0cnkKKwlhc2RmCisgICAgZW5kd2hpbGUgfCBYcGF0aCAyCQkJCSIgWDogMAorICAgIFhwYXRoIDQJCQkJCSIgWDogNAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggOAkJCQkiIFg6IDgKKwkgICAgYnJlYWsKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAwCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCAzMgkJCQkJIiBYOiAzMgorICAgIGFzZGYKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggMTI4CQkJCSIgWDogMTI4CisJICAgIGJyZWFrCisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMTAyNAkJCQkJIiBYOiAxMDI0CisgICAgYXNkZgorICAgIFhwYXRoIDIwNDgJCQkJCSIgWDogMjA0OAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJICAgIGJyZWFrCisJICAgIFhwYXRoIDE2Mzg0CQkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKKyAgICBhc2RmCisgICAgWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBsZXQgcCA9IDEKKyAgICB3aGlsZSBwCisJbGV0IHAgPSAwCisJdHJ5CisJICAgIFhwYXRoIDEzMTA3MgkJCSIgWDogMTMxMDcyCisJICAgIGNvbnRpbnVlCisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisgICAgYXNkZgorICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgbGV0IHAgPSAxCisgICAgd2hpbGUgcAorCWxldCBwID0gMAorCXRyeQorCSAgICBYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJICAgIGNvbnRpbnVlCisJICAgIFhwYXRoIDQxOTQzMDQJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgzODg2MDgJCQkiIFg6IDgzODg2MDgKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMTY3NzcyMTYKKyAgICBhc2RmCisgICAgWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAzMzU1NDQzMgorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIGxldCBwID0gMQorICAgIHdoaWxlIHAKKwlsZXQgcCA9IDAKKwl0cnkKKwkgICAgWHBhdGggNjcxMDg4NjQJCQkiIFg6IDY3MTA4ODY0CisJZmluYWxseQorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDEzNDIxNzcyOAorCSAgICBjb250aW51ZQorCSAgICBYcGF0aCAyNjg0MzU0NTYJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorICAgIGFzZGYKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorZW5kaWYKKworWGNoZWNrIDE4NzQ1NzUwODUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDIxOiAgOmZpbmFsbHkgZm9yIDp0cnkgYWZ0ZXIgOmNvbnRpbnVlLzpicmVhay86cmV0dXJuLzpmaW5pc2gJICAgIHt7ezEKKyIKKyIJICAgIElmIGEgOnRyeSBjb25kaXRpb25hbCBzdGF5cyBpbmFjdGl2ZSBkdWUgdG8gYSBwcmVjZWRpbmcgOmNvbnRpbnVlLAorIgkgICAgOmJyZWFrLCA6cmV0dXJuLCBvciA6ZmluaXNoLCBpdHMgOmZpbmFsbHkgY2xhdXNlIHNob3VsZCBub3QgYmUKKyIJICAgIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiBGKCkKKwlsZXQgbG9vcHMgPSAyCisJWGxvb3BJTklUISAxIDI1NgorCXdoaWxlIGxvb3BzID4gMAorCSAgICBYbG9vcE5FWFQKKwkgICAgbGV0IGxvb3BzID0gbG9vcHMgLSAxCisJICAgIHRyeQorCQlpZiBsb29wcyA9PSAxCisJCSAgICBYbG9vcCAxCQkJIiBYOiAxCisJCSAgICBjb250aW51ZQorCQkgICAgWGxvb3AgMgkJCSIgWDogMAorCQllbHNlaWYgbG9vcHMgPT0gMAorCQkgICAgWGxvb3AgNAkJCSIgWDogNCoyNTYKKwkJICAgIGJyZWFrCisJCSAgICBYbG9vcCA4CQkJIiBYOiAwCisJCWVuZGlmCisKKwkJdHJ5CQkiIGluYWN0aXZlCisJCSAgICBYbG9vcCAxNgkJCSIgWDogMAorCQlmaW5hbGx5CisJCSAgICBYbG9vcCAzMgkJCSIgWDogMAorCQllbmR0cnkKKwkgICAgZmluYWxseQorCQlYbG9vcCA2NAkJCSIgWDogNjQgKyA2NCoyNTYKKwkgICAgZW5kdHJ5CisJICAgIFhsb29wIDEyOAkJCQkiIFg6IDAKKwllbmR3aGlsZQorCisJdHJ5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgcmV0dXJuCisJICAgIFhwYXRoIDEzMTA3MgkJCSIgWDogMAorCSAgICB0cnkJCSAgICAiIGluYWN0aXZlCisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwllbmR0cnkKKwlYcGF0aCAyMDk3MTUyCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorCWNhbGwgRigpCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKwlmaW5pc2gKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKwl0cnkJCSIgaW5hY3RpdmUKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDY3MTA4ODY0CQkJIiBYOiAwCisJZW5kdHJ5CisgICAgZmluYWxseQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorICAgIGVuZHRyeQorICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKK2VuZGlmCisKK1hjaGVjayAxNDc5MzIyMjUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDIyOiAgOmZpbmFsbHkgZm9yIGEgOnRyeSBhZnRlciBhbiBlcnJvci9pbnRlcnJ1cHQvOnRocm93CQkgICAge3t7MQorIgorIgkgICAgSWYgYSA6dHJ5IGNvbmRpdGlvbmFsIHN0YXlzIGluYWN0aXZlIGR1ZSB0byBhIHByZWNlZGluZyBlcnJvciBvcgorIgkgICAgaW50ZXJydXB0IG9yIDp0aHJvdywgaXRzIDpmaW5hbGx5IGNsYXVzZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRXJyb3IoKQorCXRyeQorCSAgICBhc2RmICAgICIgYWJvcnRpbmcgZXJyb3IsIHRyaWdnZXJpbmcgZXJyb3IgZXhjZXB0aW9uCisJZW5kdHJ5CisgICAgZW5kZnVuY3Rpb24KKworICAgIFhwYXRoIDEJCQkJCSIgWDogMQorICAgIGNhbGwgRXJyb3IoKQorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorCisgICAgaWYgMQkiIG5vdCBhY3RpdmUgZHVlIHRvIGVycm9yCisJdHJ5CSIgbm90IGFjdGl2ZSBzaW5jZSA6aWYgaW5hY3RpdmUKKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgJCQkJIiBYOiAwCisJZW5kdHJ5CisgICAgZW5kaWYKKworICAgIHRyeQkJIiBub3QgYWN0aXZlIGR1ZSB0byBlcnJvcgorCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgSW50ZXJydXB0KCkKKwl0cnkKKwkgICAgIklOVEVSUlVQVAkiIHRyaWdnZXJpbmcgaW50ZXJydXB0IGV4Y2VwdGlvbgorCWVuZHRyeQorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorICAgIGNhbGwgSW50ZXJydXB0KCkKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMAorCisgICAgaWYgMQkiIG5vdCBhY3RpdmUgZHVlIHRvIGludGVycnVwdAorCXRyeQkiIG5vdCBhY3RpdmUgc2luY2UgOmlmIGluYWN0aXZlCisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBlbmRpZgorCisgICAgdHJ5CQkiIG5vdCBhY3RpdmUgZHVlIHRvIGludGVycnVwdAorCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisgICAgZW5kdHJ5CitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgZnVuY3Rpb24hIFRocm93KCkKKwl0aHJvdyAieHl6IgorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBYcGF0aCA0MDk2CQkJCQkiIFg6IDQwOTYKKyAgICBjYWxsIFRocm93KCkKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKKworICAgIGlmIDEJIiBub3QgYWN0aXZlIGR1ZSB0byA6dGhyb3cKKwl0cnkJIiBub3QgYWN0aXZlIHNpbmNlIDppZiBpbmFjdGl2ZQorCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDMyNzY4CQkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZGlmCisKKyAgICB0cnkJCSIgbm90IGFjdGl2ZSBkdWUgdG8gOnRocm93CisJWHBhdGggNjU1MzYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2VuZGlmCisKK1hjaGVjayA0MTYxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAyMzogIDpjYXRjaCBjbGF1c2VzIGZvciBhIDp0cnkgYWZ0ZXIgYSA6dGhyb3cJCQkgICAge3t7MQorIgorIgkgICAgSWYgYSA6dHJ5IGNvbmRpdGlvbmFsIHN0YXlzIGluYWN0aXZlIGR1ZSB0byBhIHByZWNlZGluZyA6dGhyb3csCisiCSAgICBub25lIG9mIGl0cyA6Y2F0Y2ggY2xhdXNlcyBzaG91bGQgYmUgZXhlY3V0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRocm93ICJ4eXoiCisJWHBhdGggMgkJCQkJIiBYOiAwCisKKwlpZiAxCSIgbm90IGFjdGl2ZSBkdWUgdG8gOnRocm93CisJICAgIHRyeQkiIG5vdCBhY3RpdmUgc2luY2UgOmlmIGluYWN0aXZlCisJCVhwYXRoIDQJCQkJIiBYOiAwCisJICAgIGNhdGNoIC94eXovCisJCVhwYXRoIDgJCQkJIiBYOiAwCisJICAgIGVuZHRyeQorCWVuZGlmCisgICAgY2F0Y2ggL3h5ei8KKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisgICAgZW5kdHJ5CisKKyAgICBYcGF0aCAzMgkJCQkJIiBYOiAzMgorICAgIHRocm93ICJhYmMiCisgICAgWHBhdGggNjQJCQkJCSIgWDogMAorCisgICAgdHJ5CQkiIG5vdCBhY3RpdmUgZHVlIHRvIDp0aHJvdworCVhwYXRoIDEyOAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvYWJjLworCVhwYXRoIDI1NgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2VuZGlmCisKK1hjaGVjayA0OQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjQ6ICA6ZW5kdHJ5IGZvciBhIDp0cnkgYWZ0ZXIgYSA6dGhyb3cJCQkJICAgIHt7ezEKKyIKKyIJICAgIElmIGEgOnRyeSBjb25kaXRpb25hbCBzdGF5cyBpbmFjdGl2ZSBkdWUgdG8gYSBwcmVjZWRpbmcgOnRocm93LAorIgkgICAgaXRzIDplbmR0cnkgc2hvdWxkIG5vdCByZXRocm93IHRoZSBleGNlcHRpb24gdG8gdGhlIG5leHQgc3Vycm91bmRpbmcKKyIJICAgIGFjdGl2ZSA6dHJ5IGNvbmRpdGlvbmFsLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKyAgICB0cnkJCQkiIHRyeSAxCisJdHJ5CQkiIHRyeSAyCisJICAgIFhwYXRoIDEJCQkJIiBYOiAxCisJICAgIHRocm93ICJ4eXoiCSIgbWFrZXMgdHJ5IDIgaW5hY3RpdmUKKwkgICAgWHBhdGggMgkJCQkiIFg6IDAKKworCSAgICB0cnkJCSIgdHJ5IDMKKwkJWHBhdGggNAkJCQkiIFg6IDAKKwkgICAgZW5kdHJ5CSIgbm8gcmV0aHJvdyB0byB0cnkgMQorCWNhdGNoIC94eXovCSIgc2hvdWxkIGNhdGNoIGFsdGhvdWdoIHRyeSAyIGluYWN0aXZlCisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJZW5kdHJ5CisgICAgY2F0Y2ggL3h5ei8JCSIgdHJ5IDEgYWN0aXZlLCBidXQgZXhjZXB0aW9uIGFscmVhZHkgY2F1Z2h0CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK1hjaGVjayA0MQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjU6ICBFeGVjdXRpbmcgOmZpbmFsbHkgY2xhdXNlcyBvbiBub3JtYWwgY29udHJvbCBmbG93CQkgICAge3t7MQorIgorIgkgICAgQ29udHJvbCBmbG93IGluIGEgOnRyeSBjb25kaXRpb25hbCBzaG91bGQgYWx3YXlzIGZhbGwgdGhyb3VnaCB0byBpdHMKKyIJICAgIDpmaW5hbGx5IGNsYXVzZS4gIEEgOmZpbmFsbHkgY2xhdXNlIG9mIGEgOnRyeSBjb25kaXRpb25hbCBpbnNpZGUgYW4KKyIJICAgIGluYWN0aXZlIGNvbmRpdGlvbmFsIHNob3VsZCBuZXZlciBiZSBleGVjdXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgbGV0IGxvb3BzID0gMworICAgIFhsb29wSU5JVCAxIDI1NgorICAgIHdoaWxlIGxvb3BzID4gMAkJCQkiICAgICAzOiAgIDI6ICAgICAgIDE6CisJWGxvb3AgMQkJCQkJIiBYOiAgMSArICAxKjI1NiArIDEqMjU2KjI1NgorCWlmIGxvb3BzID49IDIKKwkgICAgdHJ5CisJCVhsb29wIDIJCQkJIiBYOiAgMiArICAyKjI1NgorCQlpZiBsb29wcyA9PSAyCisJCSAgICB0cnkKKwkJCVhsb29wIDQJCQkiIFg6ICAgICAgIDQqMjU2CisJCSAgICBmaW5hbGx5CisJCQlYbG9vcCA4CQkJIiBYOiAgICAgICA4KjI1NgorCQkgICAgZW5kdHJ5CisJCWVuZGlmCisJICAgIGZpbmFsbHkKKwkJWGxvb3AgMTYJCQkiIFg6IDE2ICsgMTYqMjU2CisJCWlmIGxvb3BzID09IDIKKwkJICAgIHRyeQorCQkJWGxvb3AgMzIJCSIgWDogICAgICAzMioyNTYKKwkJICAgIGZpbmFsbHkKKwkJCVhsb29wIDY0CQkiIFg6ICAgICAgNjQqMjU2CisJCSAgICBlbmR0cnkKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJZW5kaWYKKwlYbG9vcCAxMjgJCQkJIiBYOiAxMjggKyAxMjgqMjU2ICsgMTI4KjI1NioyNTYKKwlsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwlYbG9vcE5FWFQKKyAgICBlbmR3aGlsZQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMTY3NzcyMTYKK2VuZGZ1bmN0aW9uCisKK2lmIDEKKyAgICB0cnkKKwlYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDMzNTU0NDMyCisJY2FsbCBGKCkKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisgICAgZmluYWxseQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorICAgIGVuZHRyeQorZWxzZQorICAgIHRyeQorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIGVuZHRyeQorZW5kaWYKKworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMjYwMTc3ODExCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAyNjogIEV4ZWN1dGluZyA6ZmluYWxseSBjbGF1c2VzIGFmdGVyIDpjb250aW51ZSBvciA6YnJlYWsJICAgIHt7ezEKKyIKKyIJICAgIEZvciBhIDpjb250aW51ZSBvciA6YnJlYWsgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkKKyIJICAgIHJlZ2lvbiBpbnNpZGUgdGhlIG5leHQgc3Vycm91bmRpbmcgOndoaWxlLzplbmR3aGlsZSwgaWYgdGhlCisiCSAgICA6Y29udGludWUvOmJyZWFrIGlzIGJlZm9yZSB0aGUgOmZpbmFsbHksIHRoZSA6ZmluYWxseSBjbGF1c2UgaXMKKyIJICAgIGV4ZWN1dGVkIGZpcnN0LiAgSWYgdGhlIDpjb250aW51ZS86YnJlYWsgaXMgYWZ0ZXIgdGhlIDpmaW5hbGx5LCB0aGUKKyIJICAgIDpmaW5hbGx5IGNsYXVzZSBpcyBicm9rZW4gKGxpa2UgYW4gOmlmLzplbmRpZiByZWdpb24pLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorICAgIGxldCBsb29wcyA9IDMKKyAgICBYbG9vcElOSVQhIDEgMzIKKyAgICB3aGlsZSBsb29wcyA+IDAKKwlYbG9vcE5FWFQKKwl0cnkKKwkgICAgdHJ5CisJCWlmIGxvb3BzID09IDIJCQkiICAgIDM6ICAgMjogICAgIDE6CisJCSAgICBYbG9vcCAxCQkJIiBYOiAgICAgIDEqMzIKKwkJICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorCQkgICAgY29udGludWUKKwkJZWxzZWlmIGxvb3BzID09IDEKKwkJICAgIFhsb29wIDIJCQkiIFg6CQkgMiozMiozMgorCQkgICAgYnJlYWsKKwkJICAgIGZpbmlzaAorCQllbmRpZgorCQlYbG9vcCA0CQkJCSIgWDogNAorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIFhsb29wIDgJCQkJIiBYOiA4ICArIDgqMzIgKyA4KjMyKjMyCisJZW5kdHJ5CisJWGxvb3AgMTYJCQkJIiBYOiAxNgorCWxldCBsb29wcyA9IGxvb3BzIC0gMQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2ZpbmFsbHkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorICAgIGxldCBsb29wcyA9IDMKKyAgICBYbG9vcElOSVQgMTMxMDcyIDE2CisgICAgd2hpbGUgbG9vcHMgPiAwCisJdHJ5CisJZmluYWxseQorCSAgICB0cnkKKwkJaWYgbG9vcHMgPT0gMgorCQkgICAgWGxvb3AgMQkJCSIgWDogMTMxMDcyKjE2CisJCSAgICBsZXQgbG9vcHMgPSBsb29wcyAtIDEKKwkJICAgIFhsb29wTkVYVAorCQkgICAgY29udGludWUKKwkJZWxzZWlmIGxvb3BzID09IDEKKwkJICAgIFhsb29wIDIJCQkiIFg6IDEzMTA3MioyKjE2KjE2CisJCSAgICBicmVhaworCQkgICAgZmluaXNoCisJCWVuZGlmCisJICAgIGVuZHRyeQorCSAgICBYbG9vcCA0CQkJCSIgWDogMTMxMDcyKjQKKwllbmR0cnkKKwlYbG9vcCA4CQkJCQkiIFg6IDEzMTA3Mio4CisJbGV0IGxvb3BzID0gbG9vcHMgLSAxCisJWGxvb3BORVhUCisgICAgZW5kd2hpbGUKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiA1MzY4NzA5MTIKK2VuZHRyeQorWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKwordW5sZXQgbG9vcHMKKworWGNoZWNrIDE2ODE1MDA0NzYKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDI3OiAgRXhlY3V0aW5nIDpmaW5hbGx5IGNsYXVzZXMgYWZ0ZXIgOnJldHVybgkJCSAgICB7e3sxCisiCisiCSAgICBGb3IgYSA6cmV0dXJuIGNvbW1hbmQgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkgcmVnaW9uLAorIgkgICAgOmZpbmFsbHkgY2xhdXNlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSBjYWxsZWQgZnVuY3Rpb24gaXMgZW5kZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIEYoKQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRyeQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICByZXR1cm4KKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJZW5kdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDMyCQkJCSIgWDogMzIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRygpCisgICAgdHJ5CisJWHBhdGggMTI4CQkJCSIgWDogMTI4CisJcmV0dXJuCisJWHBhdGggMjU2CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwljYWxsIEYoKQorCVhwYXRoIDEwMjQJCQkJIiBYOiAxMDI0CisgICAgZW5kdHJ5CisgICAgWHBhdGggMjA0OAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwljYWxsIEcoKQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisgICAgZmluYWxseQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwlyZXR1cm4KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCit0cnkKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiAxMzEwNzIKKyAgICBjYWxsIEgoKQorICAgIFhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorZmluYWxseQorICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorZW5kdHJ5CitYcGF0aCAxMDQ4NTc2CQkJCQkiIFg6IDEwNDg1NzYKKworWGNoZWNrIDE5OTY0NTkKKworIiBMZWF2ZSBGLCBHLCBhbmQgSCBmb3IgZXhlY3V0aW9uIGFzIHNjcmlwdHMgaW4gdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDI4OiAgRXhlY3V0aW5nIDpmaW5hbGx5IGNsYXVzZXMgYWZ0ZXIgOmZpbmlzaAkJCSAgICB7e3sxCisiCisiCSAgICBGb3IgYSA6ZmluaXNoIGNvbW1hbmQgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkgcmVnaW9uLAorIgkgICAgOmZpbmFsbHkgY2xhdXNlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSBzb3VyY2VkIGZpbGUgaXMgZmluaXNoZWQuCisiCisiCSAgICBUaGlzIHRlc3QgZXhlY3V0ZXMgdGhlIGJvZGllcyBvZiB0aGUgZnVuY3Rpb25zIEYsIEcsIGFuZCBIIGZyb20gdGhlCisiCSAgICBwcmV2aW91cyB0ZXN0IGFzIHNjcmlwdCBmaWxlcyAoOnJldHVybiByZXBsYWNlZCBieSA6ZmluaXNoKS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgc2NyaXB0RiA9IE1ha2VTY3JpcHQoIkYiKQkJCSIgWDogMSArIDIgKyA4ICsgMzIKK2xldCBzY3JpcHRHID0gTWFrZVNjcmlwdCgiRyIsIHNjcmlwdEYpCQkiIFg6IDEyOCArIDUxMiArIDEwMjQKK2xldCBzY3JpcHRIID0gTWFrZVNjcmlwdCgiSCIsIHNjcmlwdEcpCQkiIFg6IDQwOTYgKyA4MTkyICsgMTYzODQKKwordHJ5CisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisgICAgZXhlYyAic291cmNlIiBzY3JpcHRICisgICAgWHBhdGggMjYyMTQ0CQkJCSIgWDogMjYyMTQ0CitmaW5hbGx5CisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CitlbmR0cnkKK1hwYXRoIDEwNDg1NzYJCQkJCSIgWDogMTA0ODU3NgorCitjYWxsIGRlbGV0ZShzY3JpcHRGKQorY2FsbCBkZWxldGUoc2NyaXB0RykKK2NhbGwgZGVsZXRlKHNjcmlwdEgpCit1bmxldCBzY3JpcHRGIHNjcmlwdEcgc2NyaXB0SAorZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorCitYY2hlY2sgMTk5NjQ1OQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMjk6ICBFeGVjdXRpbmcgOmZpbmFsbHkgY2xhdXNlcyBvbiBlcnJvcnMJCQkgICAge3t7MQorIgorIgkgICAgQWZ0ZXIgYW4gZXJyb3IgaW4gYSBjb21tYW5kIGR5bmFtaWNhbGx5IGVuY2xvc2VkIGluIGEgOnRyeS86ZW5kdHJ5CisiCSAgICByZWdpb24sIDpmaW5hbGx5IGNsYXVzZXMgYXJlIGV4ZWN1dGVkIGFuZCB0aGUgc2NyaXB0IHByb2Nlc3NpbmcgaXMKKyIJICAgIHRlcm1pbmF0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIGZ1bmN0aW9uISBGKCkKKwl3aGlsZSAxCisJICAgIHRyeQorCQlYcGF0aCAxCQkJCSIgWDogMQorCQl3aGlsZSAxCisJCSAgICB0cnkKKwkJCVhwYXRoIDIJCQkiIFg6IDIKKwkJCWFzZGYJICAgICIgZXJyb3IKKwkJCVhwYXRoIDQJCQkiIFg6IDAKKwkJICAgIGZpbmFsbHkKKwkJCVhwYXRoIDgJCQkiIFg6IDgKKwkJICAgIGVuZHRyeSB8IFhwYXRoIDE2CQkiIFg6IDAKKwkJICAgIFhwYXRoIDMyCQkJIiBYOiAwCisJCSAgICBicmVhaworCQllbmR3aGlsZQorCQlYcGF0aCA2NAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDEyOAkJCSIgWDogMTI4CisJICAgIGVuZHRyeSB8IFhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiAwCisJICAgIGJyZWFrCisJZW5kd2hpbGUKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIHdoaWxlIDEKKwkJY2FsbCBGKCkKKwkJWHBhdGggNDA5NgkJCSIgWDogMAorCQlicmVhaworCSAgICBlbmR3aGlsZSAgfCBYcGF0aCA4MTkyCQkiIFg6IDAKKwkgICAgWHBhdGggMTYzODQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisJZW5kdHJ5IHwgWHBhdGggNjU1MzYJCQkiIFg6IDAKKyAgICBlbmR3aGlsZSB8IFhwYXRoIDEzMTA3MgkJCSIgWDogMAorICAgIFhwYXRoIDI2MjE0NAkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiEgRygpIGFib3J0CisJaWYgMQorCSAgICB0cnkKKwkJWHBhdGggNTI0Mjg4CQkJIiBYOiA1MjQyODgKKwkJYXNkZgkgICAgIiBlcnJvcgorCQlYcGF0aCAxMDQ4NTc2CQkJIiBYOiAwCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMjA5NzE1MgorCSAgICBlbmR0cnkgfCBYcGF0aCA0MTk0MzA0CQkiIFg6IDAKKwllbmRpZiB8IFhwYXRoIDgzODg2MDgJCQkiIFg6IDAKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgaWYgMQorCXRyeQorCSAgICBYcGF0aCAzMzU1NDQzMgkJCSIgWDogMzM1NTQ0MzIKKwkgICAgY2FsbCBHKCkKKwkgICAgWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJZW5kdHJ5IHwgWHBhdGggMjY4NDM1NDU2CQkiIFg6IDAKKyAgICBlbmRpZiB8IFhwYXRoIDUzNjg3MDkxMgkJCSIgWDogMAorICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCitlbmRpZgorCitYY2hlY2sgMTcwNDI4NTU1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzMDogIEV4ZWN1dGluZyA6ZmluYWxseSBjbGF1c2VzIG9uIGludGVycnVwdAkJCSAgICB7e3sxCisiCisiCSAgICBBZnRlciBhbiBpbnRlcnJ1cHQgaW4gYSBjb21tYW5kIGR5bmFtaWNhbGx5IGVuY2xvc2VkIGluCisiCSAgICBhIDp0cnkvOmVuZHRyeSByZWdpb24sIDpmaW5hbGx5IGNsYXVzZXMgYXJlIGV4ZWN1dGVkIGFuZCB0aGUKKyIJICAgIHNjcmlwdCBwcm9jZXNzaW5nIGlzIHRlcm1pbmF0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIFhsb29wSU5JVCAxIDE2CisKKyAgICBmdW5jdGlvbiEgRigpCisJdHJ5CisJICAgIFhsb29wIDEJCQkJIiBYOiAxICsgMSoxNgorCSAgICAiSU5URVJSVVBUCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYbG9vcCA0CQkJCSIgWDogNCArIDQqMTYKKwllbmR0cnkKKwlYbG9vcCA4CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJdHJ5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCSAgICAiSU5URVJSVVBUCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorCSAgICB0cnkKKwkJWHBhdGggNDA5NgkJCSIgWDogNDA5NgorCQl0cnkKKwkJICAgIFhwYXRoIDgxOTIJCQkiIFg6IDgxOTIKKwkJZmluYWxseQorCQkgICAgWHBhdGggMTYzODQJCQkiIFg6IDE2Mzg0CisJCSAgICB0cnkKKwkJCVhwYXRoIDMyNzY4CQkiIFg6IDMyNzY4CisJCQkiSU5URVJSVVBUCisJCQlYcGF0aCA2NTUzNgkJIiBYOiAwCisJCSAgICBlbmR0cnkKKwkJICAgIFhwYXRoIDEzMTA3MgkJIiBYOiAwCisJCWVuZHRyeQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDUyNDI4OAkJCSIgWDogMAorCWVuZHRyeQorCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisJdHJ5CisJICAgIFhwYXRoIDQxOTQzMDQJCQkiIFg6IDQxOTQzMDQKKwkgICAgY2FsbCBGKCkKKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMTY3NzcyMTYJCQkiIFg6IDE2Nzc3MjE2CisJICAgIHRyeQorCQlYcGF0aCAzMzU1NDQzMgkJCSIgWDogMzM1NTQ0MzIKKwkJWGxvb3BORVhUCisJCUV4ZWNBc1NjcmlwdCBGCisJCVhwYXRoIDY3MTA4ODY0CQkJIiBYOiAwCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAxMzQyMTc3MjgKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMAorCWVuZHRyeQorCVhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMAorZW5kaWYKKworWGNoZWNrIDE5MDkwNTE3MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzE6ICBFeGVjdXRpbmcgOmZpbmFsbHkgY2xhdXNlcyBhZnRlciA6dGhyb3cJCQkgICAge3t7MQorIgorIgkgICAgQWZ0ZXIgYSA6dGhyb3cgZHluYW1pY2FsbHkgZW5jbG9zZWQgaW4gYSA6dHJ5LzplbmR0cnkgcmVnaW9uLAorIgkgICAgOmZpbmFsbHkgY2xhdXNlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyBpcworIgkgICAgdGVybWluYXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisgICAgWGxvb3BJTklUIDEgMTYKKworICAgIGZ1bmN0aW9uISBGKCkKKwl0cnkKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDEgKyAxKjE2CisJICAgIHRocm93ICJleGNlcHRpb24iCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYbG9vcCA0CQkJCSIgWDogNCArIDQqMTYKKwllbmR0cnkKKwlYbG9vcCA4CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJdHJ5CisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCSAgICB0aHJvdyAiZXhjZXB0aW9uIgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKwkgICAgdHJ5CisJCVhwYXRoIDQwOTYJCQkiIFg6IDQwOTYKKwkJdHJ5CisJCSAgICBYcGF0aCA4MTkyCQkJIiBYOiA4MTkyCisJCWZpbmFsbHkKKwkJICAgIFhwYXRoIDE2Mzg0CQkJIiBYOiAxNjM4NAorCQkgICAgdHJ5CisJCQlYcGF0aCAzMjc2OAkJIiBYOiAzMjc2OAorCQkJdGhyb3cgImV4Y2VwdGlvbiIKKwkJCVhwYXRoIDY1NTM2CQkiIFg6IDAKKwkJICAgIGVuZHRyeQorCQkgICAgWHBhdGggMTMxMDcyCQkiIFg6IDAKKwkJZW5kdHJ5CisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMAorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJZW5kdHJ5CisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKwl0cnkKKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogNDE5NDMwNAorCSAgICBjYWxsIEYoKQorCSAgICBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgdHJ5CisJCVhwYXRoIDMzNTU0NDMyCQkJIiBYOiAzMzU1NDQzMgorCQlYbG9vcE5FWFQKKwkJRXhlY0FzU2NyaXB0IEYKKwkJWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwkgICAgZmluYWxseQorCQlYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDEzNDIxNzcyOAorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAwCisJZW5kdHJ5CisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCitlbmRpZgorCitYY2hlY2sgMTkwOTA1MTczCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzMjogIFJlbWVtYmVyaW5nIHRoZSA6cmV0dXJuIHZhbHVlIG9uIDpmaW5hbGx5CQkJICAgIHt7ezEKKyIKKyIJICAgIElmIGEgOmZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkIGR1ZSB0byBhIDpyZXR1cm4gc3BlY2lmeWluZworIgkgICAgYSB2YWx1ZSwgdGhpcyBpcyB0aGUgdmFsdWUgdmlzaWJsZSB0byB0aGUgY2FsbGVyIGlmIG5vdCBvdmVyd3JpdHRlbgorIgkgICAgYnkgYSBuZXcgOnJldHVybiBpbiB0aGUgOmZpbmFsbHkgY2xhdXNlLiAgQSA6cmV0dXJuIHdpdGhvdXQgYSB2YWx1ZQorIgkgICAgaW4gdGhlIDpmaW5hbGx5IGNsYXVzZSBvdmVyd3JpdGVzIHdpdGggdmFsdWUgMC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdHJ5CisJICAgIFhwYXRoIDIJCQkJIiBYOiAyCisJICAgIHJldHVybiAiQUJDRCIKKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJZW5kdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDMyCQkJCSIgWDogMzIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRygpCisgICAgdHJ5CisJWHBhdGggMTI4CQkJCSIgWDogMTI4CisJcmV0dXJuIDgKKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCXJldHVybiAxNiArIHN0cmxlbihGKCkpCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAyMDQ4CQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBIKCkKKyAgICB0cnkKKwlYcGF0aCA0MDk2CQkJCSIgWDogNDA5NgorCXJldHVybiAzMgorCVhwYXRoIDgxOTIJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwlyZXR1cm4KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSSgpCisgICAgdHJ5CisJWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisgICAgZmluYWxseQorCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorCXJldHVybiBHKCkgKyBIKCkgKyA2NAorCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworbGV0IHJldGNvZGUgPSBJKCkKK1hwYXRoIDIwOTcxNTIJCQkJCSIgWDogMjA5NzE1MgorCitpZiByZXRjb2RlIDwgMAorICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCitlbmRpZgoraWYgcmV0Y29kZSAlIDQKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogMAorZW5kaWYKK2lmIChyZXRjb2RlLzQpICUgMgorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMTY3NzcyMTYKK2VuZGlmCitpZiAocmV0Y29kZS84KSAlIDIKKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKK2VuZGlmCitpZiAocmV0Y29kZS8xNikgJSAyCisgICAgWHBhdGggNjcxMDg4NjQJCQkJIiBYOiA2NzEwODg2NAorZW5kaWYKK2lmIChyZXRjb2RlLzMyKSAlIDIKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAwCitlbmRpZgoraWYgKHJldGNvZGUvNjQpICUgMgorICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDI2ODQzNTQ1NgorZW5kaWYKK2lmIHJldGNvZGUvMTI4CisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorZW5kaWYKKwordW5sZXQgcmV0Y29kZQorZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorZGVsZnVuY3Rpb24gSQorCitYY2hlY2sgMzU0ODMzMDY3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzMzogIDpyZXR1cm4gdW5kZXIgOmV4ZWN1dGUgb3IgdXNlciBjb21tYW5kIGFuZCA6ZmluYWxseQkJICAgIHt7ezEKKyIKKyIJICAgIEEgOnJldHVybiBjb21tYW5kIG1heSBiZSBleGVjdXRlZCB1bmRlciBhbiAiOmV4ZWN1dGUiIG9yIGZyb20KKyIJICAgIGEgdXNlciBjb21tYW5kLiAgRXhlY3V0aW5nIG9mIDpmaW5hbGx5IGNsYXVzZXMgYW5kIHBhc3NpbmcgdGhyb3VnaAorIgkgICAgdGhlIHJldHVybiBjb2RlIHdvcmtzIGFsc28gdGhlbi4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYcGF0aElOSVQKKworY29tbWFuZCEgLW5hcmdzPT8gUkVUVVJOCisgICAgXCB0cnkgfCByZXR1cm4gPGFyZ3M+IHwgZmluYWxseSB8IHJldHVybiA8YXJncz4gKiAyIHwgZW5kdHJ5CisKK2Z1bmN0aW9uISBGKCkKKyAgICB0cnkKKwlSRVRVUk4gOAorCVhwYXRoIDEJCQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA0CQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBHKCkKKyAgICB0cnkKKwlSRVRVUk4gMzIKKwlYcGF0aCA4CQkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMTYJCQkJIiBYOiAxNgorCVJFVFVSTiAxMjgKKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSCgpCisgICAgdHJ5CisJZXhlY3V0ZSAidHJ5IHwgcmV0dXJuIDUxMiB8IGZpbmFsbHkgfCByZXR1cm4gMTAyNCB8IGVuZHRyeSIKKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorICAgIGVuZHRyeQorICAgIFhwYXRoIDUxMgkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgSSgpCisgICAgdHJ5CisJZXhlY3V0ZSAidHJ5IHwgcmV0dXJuIDIwNDggfCBmaW5hbGx5IHwgcmV0dXJuIDQwOTYgfCBlbmR0cnkiCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gODE5MiB8IGZpbmFsbHkgfCByZXR1cm4gMTYzODQgfCBlbmR0cnkiCisJWHBhdGggNDA5NgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBKKCkKKyAgICB0cnkKKwlSRVRVUk4gMzI3NjgKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCXJldHVybgorCVhwYXRoIDY1NTM2CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDEzMTA3MgkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBLKCkKKyAgICB0cnkKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gMTMxMDcyIHwgZmluYWxseSB8IHJldHVybiAyNjIxNDQgfCBlbmR0cnkiCisJWHBhdGggMjYyMTQ0CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCA1MjQyODgJCQkJIiBYOiA1MjQyODgKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gNTI0Mjg4IHwgZmluYWxseSB8IHJldHVybiB8IGVuZHRyeSIKKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgTCgpCisgICAgdHJ5CisJcmV0dXJuCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKwlSRVRVUk4gMTA0ODU3NgorCVhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIE0oKQorICAgIHRyeQorCXJldHVybgorCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKwlleGVjdXRlICJ0cnkgfCByZXR1cm4gNDE5NDMwNCB8IGZpbmFsbHkgfCByZXR1cm4gODM4ODYwOCB8IGVuZHRyeSIKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIE4oKQorICAgIFJFVFVSTiAxNjc3NzIxNgorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIE8oKQorICAgIGV4ZWN1dGUgInRyeSB8IHJldHVybiA2NzEwODg2NCB8IGZpbmFsbHkgfCByZXR1cm4gMTM0MjE3NzI4IHwgZW5kdHJ5IgorZW5kZnVuY3Rpb24KKworbGV0IHN1bQkgICAgID0gRigpICsgRygpICsgSCgpICArIEkoKSAgICsgSigpICsgSygpICsgTCgpICAgICArIE0oKQorbGV0IGV4cGVjdGVkID0gMTYgICsgMjU2ICsgMTAyNCArIDE2Mzg0ICsgMCAgICsgMCAgICsgMjA5NzE1MiArIDgzODg2MDgKK2xldCBzdW0JICAgICA9IHN1bSAgICAgICsgTigpICAgICAgKyBPKCkKK2xldCBleHBlY3RlZCA9IGV4cGVjdGVkICsgMzM1NTQ0MzIgKyAxMzQyMTc3MjgKKworaWYgc3VtID09IGV4cGVjdGVkCisgICAgWG91dCAic3VtID0gIiAuIHN1bSAuICIgKG9rKSIKK2Vsc2UKKyAgICBYb3V0ICJzdW0gPSAiIC4gc3VtIC4gIiwgZXhwZWN0ZWQ6ICIgLiBleHBlY3RlZAorZW5kaWYKKworWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworaWYgc3VtICE9IGV4cGVjdGVkCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorZW5kaWYKKwordW5sZXQgc3VtIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBGCitkZWxmdW5jdGlvbiBHCitkZWxmdW5jdGlvbiBICitkZWxmdW5jdGlvbiBJCitkZWxmdW5jdGlvbiBKCitkZWxmdW5jdGlvbiBLCitkZWxmdW5jdGlvbiBMCitkZWxmdW5jdGlvbiBNCitkZWxmdW5jdGlvbiBOCitkZWxmdW5jdGlvbiBPCisKK1hjaGVjayAxMjE2OTA3NTM4CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzNDogIDpmaW5hbGx5IHJlYXNvbiBkaXNjYXJkZWQgYnkgOmNvbnRpbnVlCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQgZHVlIHRvIGEgOmNvbnRpbnVlLCA6YnJlYWssCisiCSAgICA6cmV0dXJuLCA6ZmluaXNoLCBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdywgdGhlIGp1bXAgcmVhc29uIGlzCisiCSAgICBkaXNjYXJkZWQgYnkgYSA6Y29udGludWUgaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA4CisKKyAgICBmdW5jdGlvbiEgQyhqdW1wKQorCVhsb29wTkVYVAorCWxldCBsb29wID0gMAorCXdoaWxlIGxvb3AgPCAyCisJICAgIGxldCBsb29wID0gbG9vcCArIDEKKwkgICAgaWYgbG9vcCA9PSAxCisJCXRyeQorCQkgICAgaWYgYTpqdW1wID09ICJjb250aW51ZSIKKwkJCWNvbnRpbnVlCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJicmVhayIKKwkJCWJyZWFrCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJyZXR1cm4iIHx8IGE6anVtcCA9PSAiZmluaXNoIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIGNvbnRpbnVlCSIgZGlzY2FyZHMganVtcCB0aGF0IGNhdXNlZCB0aGUgOmZpbmFsbHkKKwkJICAgIFhsb29wIDEJCSIgWDogMAorCQllbmR0cnkKKwkJWGxvb3AgMgkJCSIgWDogMAorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDQJCQkiIFg6IDQqKDErOCs2NCs1MTIrNDA5NiszMjc2OCsyNjIxNDQpCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY2FsbCBDKCJjb250aW51ZSIpCisgICAgWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBjYWxsIEMoImJyZWFrIikKKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorICAgIGNhbGwgQygicmV0dXJuIikKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogODM4ODYwOAorICAgIGxldCBnOmp1bXAgPSAiZmluaXNoIgorICAgIEV4ZWNBc1NjcmlwdCBDCisgICAgdW5sZXQgZzpqdW1wCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIHRyeQorCWNhbGwgQygiZXJyb3IiKQorCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKyAgICBmaW5hbGx5CisJWHBhdGggNjcxMDg4NjQJCQkJIiBYOiA2NzEwODg2NAorCXRyeQorCSAgICBjYWxsIEMoImludGVycnVwdCIpCisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJZmluYWxseQorCSAgICBYcGF0aCAyNjg0MzU0NTYJCQkiIFg6IDI2ODQzNTQ1NgorCSAgICBjYWxsIEMoInRocm93IikKKwkgICAgWHBhdGggNTM2ODcwOTEyCQkJIiBYOiA1MzY4NzA5MTIKKwllbmR0cnkKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorCisgICAgZGVsZnVuY3Rpb24gQworCitlbmRpZgorCitYY2hlY2sgMjE0NjU4NDg2OAorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzU6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IDpicmVhawkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIDpmaW5hbGx5IGNsYXVzZSBpcyBleGVjdXRlZCBkdWUgdG8gYSA6Y29udGludWUsIDpicmVhaywKKyIJICAgIDpyZXR1cm4sIDpmaW5pc2gsIGVycm9yLCBpbnRlcnJ1cHQgb3IgOnRocm93LCB0aGUganVtcCByZWFzb24gaXMKKyIJICAgIGRpc2NhcmRlZCBieSBhIDpicmVhayBpbiB0aGUgZmluYWxseSBjbGF1c2UuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgWGxvb3BJTklUISAxIDgKKworICAgIGZ1bmN0aW9uISBCKGp1bXApCisJWGxvb3BORVhUCisJbGV0IGxvb3AgPSAwCisJd2hpbGUgbG9vcCA8IDIKKwkgICAgbGV0IGxvb3AgPSBsb29wICsgMQorCSAgICBpZiBsb29wID09IDEKKwkJdHJ5CisJCSAgICBpZiBhOmp1bXAgPT0gImNvbnRpbnVlIgorCQkJY29udGludWUKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImJyZWFrIgorCQkJYnJlYWsKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInJldHVybiIgfHwgYTpqdW1wID09ICJmaW5pc2giCisJCQlyZXR1cm4KKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImVycm9yIgorCQkJYXNkZgorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiaW50ZXJydXB0IgorCQkJIklOVEVSUlVQVAorCQkJbGV0IGR1bW15ID0gMAorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAidGhyb3ciCisJCQl0aHJvdyAiYWJjIgorCQkgICAgZW5kaWYKKwkJZmluYWxseQorCQkgICAgYnJlYWsJIiBkaXNjYXJkcyBqdW1wIHRoYXQgY2F1c2VkIHRoZSA6ZmluYWxseQorCQkgICAgWGxvb3AgMQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCVhsb29wIDQJCQkJIiBYOiA0KigxKzgrNjQrNTEyKzQwOTYrMzI3NjgrMjYyMTQ0KQorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBjYWxsIEIoImNvbnRpbnVlIikKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorICAgIGNhbGwgQigiYnJlYWsiKQorICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiA0MTk0MzA0CisgICAgY2FsbCBCKCJyZXR1cm4iKQorICAgIFhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgbGV0IGc6anVtcCA9ICJmaW5pc2giCisgICAgRXhlY0FzU2NyaXB0IEIKKyAgICB1bmxldCBnOmp1bXAKKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDE2Nzc3MjE2CisgICAgdHJ5CisJY2FsbCBCKCJlcnJvciIpCisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAzMzU1NDQzMgorICAgIGZpbmFsbHkKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisJdHJ5CisJICAgIGNhbGwgQigiaW50ZXJydXB0IikKKwkgICAgWHBhdGggMTM0MjE3NzI4CQkJIiBYOiAxMzQyMTc3MjgKKwlmaW5hbGx5CisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMjY4NDM1NDU2CisJICAgIGNhbGwgQigidGhyb3ciKQorCSAgICBYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDUzNjg3MDkxMgorCWVuZHRyeQorICAgIGVuZHRyeQorICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAxMDczNzQxODI0CisKKyAgICBkZWxmdW5jdGlvbiBCCisKK2VuZGlmCisKK1hjaGVjayAyMTQ2NTg0ODY4CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCAzNjogIDpmaW5hbGx5IHJlYXNvbiBkaXNjYXJkZWQgYnkgOnJldHVybgkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGEgOmZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkIGR1ZSB0byBhIDpjb250aW51ZSwgOmJyZWFrLAorIgkgICAgOnJldHVybiwgOmZpbmlzaCwgZXJyb3IsIGludGVycnVwdCBvciA6dGhyb3csIHRoZSBqdW1wIHJlYXNvbiBpcworIgkgICAgZGlzY2FyZGVkIGJ5IGEgOnJldHVybiBpbiB0aGUgZmluYWxseSBjbGF1c2UuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgWGxvb3BJTklUISAxIDgKKworICAgIGZ1bmN0aW9uISBSKGp1bXAsIHJldHZhbCkgYWJvcnQKKwlYbG9vcE5FWFQKKwlsZXQgbG9vcCA9IDAKKwl3aGlsZSBsb29wIDwgMgorCSAgICBsZXQgbG9vcCA9IGxvb3AgKyAxCisJICAgIGlmIGxvb3AgPT0gMQorCQl0cnkKKwkJICAgIGlmIGE6anVtcCA9PSAiY29udGludWUiCisJCQljb250aW51ZQorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiYnJlYWsiCisJCQlicmVhaworCQkgICAgZWxzZWlmIGE6anVtcCA9PSAicmV0dXJuIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIHJldHVybiBhOnJldHZhbAkiIGRpc2NhcmRzIGp1bXAgdGhhdCBjYXVzZWQgdGhlIDpmaW5hbGx5CisJCSAgICBYbG9vcCAxCQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDIJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKwlYbG9vcCA0CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHN1bSA9ICAtUigiY29udGludWUiLCAtOCkKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorICAgIGxldCBzdW0gPSBzdW0gLSBSKCJicmVhayIsIC0xNikKKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorICAgIGxldCBzdW0gPSBzdW0gLSBSKCJyZXR1cm4iLCAtMzIpCisgICAgWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKyAgICB0cnkKKwlsZXQgc3VtID0gc3VtIC0gUigiZXJyb3IiLCAtNjQpCisJWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGZpbmFsbHkKKwlYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDMzNTU0NDMyCisJdHJ5CisJICAgIGxldCBzdW0gPSBzdW0gLSBSKCJpbnRlcnJ1cHQiLCAtMTI4KQorCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogNjcxMDg4NjQKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJICAgIGxldCBzdW0gPSBzdW0gLSBSKCJ0aHJvdyIsIC0yNTYpCisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMjY4NDM1NDU2CisJZW5kdHJ5CisgICAgZW5kdHJ5CisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogNTM2ODcwOTEyCisKKyAgICBsZXQgZXhwZWN0ZWQgPSA4ICsgMTYgKyAzMiArIDY0ICsgMTI4ICsgMjU2CisgICAgaWYgc3VtICE9IGV4cGVjdGVkCisJWHBhdGggMTA3Mzc0MTgyNAkJCSIgWDogMAorCVhvdXQgInN1bSA9IiAuIHN1bSAuICIsIGV4cGVjdGVkOiAiIC4gZXhwZWN0ZWQKKyAgICBlbmRpZgorCisgICAgdW5sZXQgc3VtIGV4cGVjdGVkCisgICAgZGVsZnVuY3Rpb24gUgorCitlbmRpZgorCitYY2hlY2sgMTA3MTY0NDY3MgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzc6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IDpmaW5pc2gJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIDpmaW5hbGx5IGNsYXVzZSBpcyBleGVjdXRlZCBkdWUgdG8gYSA6Y29udGludWUsIDpicmVhaywKKyIJICAgIDpyZXR1cm4sIDpmaW5pc2gsIGVycm9yLCBpbnRlcnJ1cHQgb3IgOnRocm93LCB0aGUganVtcCByZWFzb24gaXMKKyIJICAgIGRpc2NhcmRlZCBieSBhIDpmaW5pc2ggaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA4CisKKyAgICBmdW5jdGlvbiEgRihqdW1wKQkiIG5vdCBleGVjdXRlZCBhcyBmdW5jdGlvbiwgdHJhbnNmb3JtZWQgdG8gYSBzY3JpcHQKKwlYbG9vcE5FWFQKKwlsZXQgbG9vcCA9IDAKKwl3aGlsZSBsb29wIDwgMgorCSAgICBsZXQgbG9vcCA9IGxvb3AgKyAxCisJICAgIGlmIGxvb3AgPT0gMQorCQl0cnkKKwkJICAgIGlmIGE6anVtcCA9PSAiY29udGludWUiCisJCQljb250aW51ZQorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiYnJlYWsiCisJCQlicmVhaworCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiZmluaXNoIgorCQkJZmluaXNoCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIGZpbmlzaAkiIGRpc2NhcmRzIGp1bXAgdGhhdCBjYXVzZWQgdGhlIDpmaW5hbGx5CisJCSAgICBYbG9vcCAxCQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDIJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKwlYbG9vcCA0CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHNjcmlwdEYgPSBNYWtlU2NyaXB0KCJGIikKKyAgICBkZWxmdW5jdGlvbiBGCisKKyAgICBsZXQgZzpqdW1wID0gImNvbnRpbnVlIgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RgorICAgIFhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisgICAgbGV0IGc6anVtcCA9ICJicmVhayIKKyAgICBleGVjICJzb3VyY2UiIHNjcmlwdEYKKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogNDE5NDMwNAorICAgIGxldCBnOmp1bXAgPSAiZmluaXNoIgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RgorICAgIFhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgdHJ5CisJbGV0IGc6anVtcCA9ICJlcnJvciIKKwlleGVjICJzb3VyY2UiIHNjcmlwdEYKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDE2Nzc3MjE2CisgICAgZmluYWxseQorCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKwl0cnkKKwkgICAgbGV0IGc6anVtcCA9ICJpbnRlcnJ1cHQiCisJICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RgorCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogNjcxMDg4NjQKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMTM0MjE3NzI4CisJICAgIHRyeQorCQlsZXQgZzpqdW1wID0gInRocm93IgorCQlleGVjICJzb3VyY2UiIHNjcmlwdEYKKwkJWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAyNjg0MzU0NTYKKwkgICAgZmluYWxseQorCQlYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDUzNjg3MDkxMgorCSAgICBlbmR0cnkKKwllbmR0cnkKKyAgICBlbmR0cnkKKyAgICB1bmxldCBnOmp1bXAKKworICAgIGNhbGwgZGVsZXRlKHNjcmlwdEYpCisgICAgdW5sZXQgc2NyaXB0RgorCitlbmRpZgorCitYY2hlY2sgMTA3MTY0NDY3MgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzg6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IGFuIGVycm9yCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQgZHVlIHRvIGEgOmNvbnRpbnVlLCA6YnJlYWssCisiCSAgICA6cmV0dXJuLCA6ZmluaXNoLCBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdywgdGhlIGp1bXAgcmVhc29uIGlzCisiCSAgICBkaXNjYXJkZWQgYnkgYW4gZXJyb3IgaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA0CisKKyAgICBmdW5jdGlvbiEgRShqdW1wKQorCVhsb29wTkVYVAorCWxldCBsb29wID0gMAorCXdoaWxlIGxvb3AgPCAyCisJICAgIGxldCBsb29wID0gbG9vcCArIDEKKwkgICAgaWYgbG9vcCA9PSAxCisJCXRyeQorCQkgICAgaWYgYTpqdW1wID09ICJjb250aW51ZSIKKwkJCWNvbnRpbnVlCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJicmVhayIKKwkJCWJyZWFrCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJyZXR1cm4iIHx8IGE6anVtcCA9PSAiZmluaXNoIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIGFzZGYJIiBlcnJvcjsgZGlzY2FyZHMganVtcCB0aGF0IGNhdXNlZCB0aGUgOmZpbmFsbHkKKwkJZW5kdHJ5CisJICAgIGVsc2VpZiBsb29wID09IDIKKwkJWGxvb3AgMQkJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCVhsb29wIDIJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJY2FsbCBFKCJjb250aW51ZSIpCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgZmluYWxseQorCXRyeQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIGNhbGwgRSgiYnJlYWsiKQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIHRyeQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDI2MjE0NAorCQljYWxsIEUoInJldHVybiIpCisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCXRyeQorCQkgICAgWHBhdGggMTA0ODU3NgkJIiBYOiAxMDQ4NTc2CisJCSAgICBsZXQgZzpqdW1wID0gImZpbmlzaCIKKwkJICAgIEV4ZWNBc1NjcmlwdCBFCisJCSAgICBYcGF0aCAyMDk3MTUyCQkiIFg6IDAKKwkJZmluYWxseQorCQkgICAgdW5sZXQgZzpqdW1wCisJCSAgICB0cnkKKwkJCVhwYXRoIDQxOTQzMDQJCSIgWDogNDE5NDMwNAorCQkJY2FsbCBFKCJlcnJvciIpCisJCQlYcGF0aCA4Mzg4NjA4CQkiIFg6IDAKKwkJICAgIGZpbmFsbHkKKwkJCXRyeQorCQkJICAgIFhwYXRoIDE2Nzc3MjE2CSIgWDogMTY3NzcyMTYKKwkJCSAgICBjYWxsIEUoImludGVycnVwdCIpCisJCQkgICAgWHBhdGggMzM1NTQ0MzIJIiBYOiAwCisJCQlmaW5hbGx5CisJCQkgICAgdHJ5CisJCQkJWHBhdGggNjcxMDg4NjQJIiBYOiA2NzEwODg2NAorCQkJCWNhbGwgRSgidGhyb3ciKQorCQkJCVhwYXRoIDEzNDIxNzcyOAkiIFg6IDAKKwkJCSAgICBmaW5hbGx5CisJCQkJWHBhdGggMjY4NDM1NDU2CSIgWDogMjY4NDM1NDU2CisJCQkJZGVsZnVuY3Rpb24gRQorCQkJICAgIGVuZHRyeQorCQkJZW5kdHJ5CisJCSAgICBlbmR0cnkKKwkJZW5kdHJ5CisJICAgIGVuZHRyeQorCWVuZHRyeQorICAgIGVuZHRyeQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKworZW5kaWYKKworWGNoZWNrIDM1NzkwODQ4MAorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgMzk6ICA6ZmluYWxseSByZWFzb24gZGlzY2FyZGVkIGJ5IGFuIGludGVycnVwdAkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGEgOmZpbmFsbHkgY2xhdXNlIGlzIGV4ZWN1dGVkIGR1ZSB0byBhIDpjb250aW51ZSwgOmJyZWFrLAorIgkgICAgOnJldHVybiwgOmZpbmlzaCwgZXJyb3IsIGludGVycnVwdCBvciA6dGhyb3csIHRoZSBqdW1wIHJlYXNvbiBpcworIgkgICAgZGlzY2FyZGVkIGJ5IGFuIGludGVycnVwdCBpbiB0aGUgZmluYWxseSBjbGF1c2UuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgWGxvb3BJTklUISAxIDQKKworICAgIGZ1bmN0aW9uISBJKGp1bXApCisJWGxvb3BORVhUCisJbGV0IGxvb3AgPSAwCisJd2hpbGUgbG9vcCA8IDIKKwkgICAgbGV0IGxvb3AgPSBsb29wICsgMQorCSAgICBpZiBsb29wID09IDEKKwkJdHJ5CisJCSAgICBpZiBhOmp1bXAgPT0gImNvbnRpbnVlIgorCQkJY29udGludWUKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImJyZWFrIgorCQkJYnJlYWsKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInJldHVybiIgfHwgYTpqdW1wID09ICJmaW5pc2giCisJCQlyZXR1cm4KKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImVycm9yIgorCQkJYXNkZgorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAiaW50ZXJydXB0IgorCQkJIklOVEVSUlVQVAorCQkJbGV0IGR1bW15ID0gMAorCQkgICAgZWxzZWlmIGE6anVtcCA9PSAidGhyb3ciCisJCQl0aHJvdyAiYWJjIgorCQkgICAgZW5kaWYKKwkJZmluYWxseQorCQkgICAgIklOVEVSUlVQVCAtIGRpc2NhcmRzIGp1bXAgdGhhdCBjYXVzZWQgdGhlIDpmaW5hbGx5CisJCSAgICBsZXQgZHVtbXkgPSAwCisJCWVuZHRyeQorCSAgICBlbHNlaWYgbG9vcCA9PSAyCisJCVhsb29wIDEJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kd2hpbGUKKwlYbG9vcCAyCQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorCWNhbGwgSSgiY29udGludWUiKQorCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwl0cnkKKwkgICAgWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCSAgICBjYWxsIEkoImJyZWFrIikKKwkgICAgWHBhdGggMTMxMDcyCQkJIiBYOiAwCisJZmluYWxseQorCSAgICB0cnkKKwkJWHBhdGggMjYyMTQ0CQkJIiBYOiAyNjIxNDQKKwkJY2FsbCBJKCJyZXR1cm4iKQorCQlYcGF0aCA1MjQyODgJCQkiIFg6IDAKKwkgICAgZmluYWxseQorCQl0cnkKKwkJICAgIFhwYXRoIDEwNDg1NzYJCSIgWDogMTA0ODU3NgorCQkgICAgbGV0IGc6anVtcCA9ICJmaW5pc2giCisJCSAgICBFeGVjQXNTY3JpcHQgSQorCQkgICAgWHBhdGggMjA5NzE1MgkJIiBYOiAwCisJCWZpbmFsbHkKKwkJICAgIHVubGV0IGc6anVtcAorCQkgICAgdHJ5CisJCQlYcGF0aCA0MTk0MzA0CQkiIFg6IDQxOTQzMDQKKwkJCWNhbGwgSSgiZXJyb3IiKQorCQkJWHBhdGggODM4ODYwOAkJIiBYOiAwCisJCSAgICBmaW5hbGx5CisJCQl0cnkKKwkJCSAgICBYcGF0aCAxNjc3NzIxNgkiIFg6IDE2Nzc3MjE2CisJCQkgICAgY2FsbCBJKCJpbnRlcnJ1cHQiKQorCQkJICAgIFhwYXRoIDMzNTU0NDMyCSIgWDogMAorCQkJZmluYWxseQorCQkJICAgIHRyeQorCQkJCVhwYXRoIDY3MTA4ODY0CSIgWDogNjcxMDg4NjQKKwkJCQljYWxsIEkoInRocm93IikKKwkJCQlYcGF0aCAxMzQyMTc3MjgJIiBYOiAwCisJCQkgICAgZmluYWxseQorCQkJCVhwYXRoIDI2ODQzNTQ1NgkiIFg6IDI2ODQzNTQ1NgorCQkJCWRlbGZ1bmN0aW9uIEkKKwkJCSAgICBlbmR0cnkKKwkJCWVuZHRyeQorCQkgICAgZW5kdHJ5CisJCWVuZHRyeQorCSAgICBlbmR0cnkKKwllbmR0cnkKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisKK2VuZGlmCisKK1hjaGVjayAzNTc5MDg0ODAKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDQwOiAgOmZpbmFsbHkgcmVhc29uIGRpc2NhcmRlZCBieSA6dGhyb3cJCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQgZHVlIHRvIGEgOmNvbnRpbnVlLCA6YnJlYWssCisiCSAgICA6cmV0dXJuLCA6ZmluaXNoLCBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdywgdGhlIGp1bXAgcmVhc29uIGlzCisiCSAgICBkaXNjYXJkZWQgYnkgYSA6dGhyb3cgaW4gdGhlIGZpbmFsbHkgY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSA0CisKKyAgICBmdW5jdGlvbiEgVChqdW1wKQorCVhsb29wTkVYVAorCWxldCBsb29wID0gMAorCXdoaWxlIGxvb3AgPCAyCisJICAgIGxldCBsb29wID0gbG9vcCArIDEKKwkgICAgaWYgbG9vcCA9PSAxCisJCXRyeQorCQkgICAgaWYgYTpqdW1wID09ICJjb250aW51ZSIKKwkJCWNvbnRpbnVlCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJicmVhayIKKwkJCWJyZWFrCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJyZXR1cm4iIHx8IGE6anVtcCA9PSAiZmluaXNoIgorCQkJcmV0dXJuCisJCSAgICBlbHNlaWYgYTpqdW1wID09ICJlcnJvciIKKwkJCWFzZGYKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gImludGVycnVwdCIKKwkJCSJJTlRFUlJVUFQKKwkJCWxldCBkdW1teSA9IDAKKwkJICAgIGVsc2VpZiBhOmp1bXAgPT0gInRocm93IgorCQkJdGhyb3cgImFiYyIKKwkJICAgIGVuZGlmCisJCWZpbmFsbHkKKwkJICAgIHRocm93ICJ4eXoiCSIgZGlzY2FyZHMganVtcCB0aGF0IGNhdXNlZCB0aGUgOmZpbmFsbHkKKwkJZW5kdHJ5CisJICAgIGVsc2VpZiBsb29wID09IDIKKwkJWGxvb3AgMQkJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR3aGlsZQorCVhsb29wIDIJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJY2FsbCBUKCJjb250aW51ZSIpCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgZmluYWxseQorCXRyeQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIGNhbGwgVCgiYnJlYWsiKQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIHRyeQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDI2MjE0NAorCQljYWxsIFQoInJldHVybiIpCisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCXRyeQorCQkgICAgWHBhdGggMTA0ODU3NgkJIiBYOiAxMDQ4NTc2CisJCSAgICBsZXQgZzpqdW1wID0gImZpbmlzaCIKKwkJICAgIEV4ZWNBc1NjcmlwdCBUCisJCSAgICBYcGF0aCAyMDk3MTUyCQkiIFg6IDAKKwkJZmluYWxseQorCQkgICAgdW5sZXQgZzpqdW1wCisJCSAgICB0cnkKKwkJCVhwYXRoIDQxOTQzMDQJCSIgWDogNDE5NDMwNAorCQkJY2FsbCBUKCJlcnJvciIpCisJCQlYcGF0aCA4Mzg4NjA4CQkiIFg6IDAKKwkJICAgIGZpbmFsbHkKKwkJCXRyeQorCQkJICAgIFhwYXRoIDE2Nzc3MjE2CSIgWDogMTY3NzcyMTYKKwkJCSAgICBjYWxsIFQoImludGVycnVwdCIpCisJCQkgICAgWHBhdGggMzM1NTQ0MzIJIiBYOiAwCisJCQlmaW5hbGx5CisJCQkgICAgdHJ5CisJCQkJWHBhdGggNjcxMDg4NjQJIiBYOiA2NzEwODg2NAorCQkJCWNhbGwgVCgidGhyb3ciKQorCQkJCVhwYXRoIDEzNDIxNzcyOAkiIFg6IDAKKwkJCSAgICBmaW5hbGx5CisJCQkJWHBhdGggMjY4NDM1NDU2CSIgWDogMjY4NDM1NDU2CisJCQkJZGVsZnVuY3Rpb24gVAorCQkJICAgIGVuZHRyeQorCQkJZW5kdHJ5CisJCSAgICBlbmR0cnkKKwkJZW5kdHJ5CisJICAgIGVuZHRyeQorCWVuZHRyeQorICAgIGVuZHRyeQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKworZW5kaWYKKworWGNoZWNrIDM1NzkwODQ4MAorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDE6ICBTa2lwcGVkIDp0aHJvdyBmaW5kaW5nIG5leHQgY29tbWFuZAkJCQkgICAge3t7MQorIgorIgkgICAgQSA6dGhyb3cgaW4gYW4gaW5hY3RpdmUgY29uZGl0aW9uYWwgbXVzdCBub3QgaGlkZSBhIGZvbGxvd2luZworIgkgICAgY29tbWFuZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRigpCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCisgICAgaWYgMCB8IHRocm93ICJuZXZlciIgfCBlbmRpZiB8IFhwYXRoIDIJIiBYOiAyCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRygpCisgICAgWHBhdGggOAkJCQkJICAgICIgWDogOAorICAgIHdoaWxlIDAgfCB0aHJvdyAibmV2ZXIiIHwgZW5kd2hpbGUgfCBYcGF0aCAxNiAgICIgWDogMTYKKyAgICBYcGF0aCAzMgkJCQkJICAgICIgWDogMzIKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIEgoKQorICAgIFhwYXRoIDY0CQkJCQkJICAgICIgWDogNjQKKyAgICBpZiAwIHwgdHJ5IHwgdGhyb3cgIm5ldmVyIiB8IGVuZHRyeSB8IGVuZGlmIHwgWHBhdGggMTI4ICIgWDogMTI4CisgICAgWHBhdGggMjU2CQkJCQkJICAgICIgWDogMjU2CitlbmRmdW5jdGlvbgorCitYcGF0aCA1MTIJCQkJCSIgWDogNTEyCisKK3RyeQorICAgIFhwYXRoIDEwMjQJCQkJCSIgWDogMTAyNAorICAgIGNhbGwgRigpCisgICAgWHBhdGggMjA0OAkJCQkJIiBYOiAyMDQ4CitjYXRjaCAvLiovCisgICAgWHBhdGggNDA5NgkJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDgxOTIJCQkJCSIgWDogODE5MgorCit0cnkKKyAgICBYcGF0aCAxNjM4NAkJCQkJIiBYOiAxNjM4NAorICAgIGNhbGwgRygpCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDEzMTA3MgkJCQkJIiBYOiAxMzEwNzIKKwordHJ5CisgICAgWHBhdGggMjYyMTQ0CQkJCSIgWDogMjYyMTQ0CisgICAgY2FsbCBIKCkKKyAgICBYcGF0aCA1MjQyODgJCQkJIiBYOiA1MjQyODgKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitYcGF0aCAyMDk3MTUyCQkJCQkiIFg6IDIwOTcxNTIKKworZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gSAorCitYY2hlY2sgMzA3NjA5NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDI6ICBDYXRjaGluZyBudW1iZXIgYW5kIHN0cmluZyBleGNlcHRpb25zCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSBudW1iZXIgaXMgdGhyb3duLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgZXhjZXB0aW9uLgorIgkgICAgTnVtYmVycyBhbmQgc3RyaW5ncyBtYXkgYmUgY2F1Z2h0IGJ5IHNwZWNpZnlpbmcgYSByZWd1bGFyIGV4Y2VwdGlvbgorIgkgICAgYXMgYXJndW1lbnQgdG8gdGhlIDpjYXRjaCBjb21tYW5kLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorCisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdGhyb3cgNDcxMQorCVhwYXRoIDIJCQkJCSIgWDogMAorICAgIGNhdGNoIC80NzExLworCVhwYXRoIDQJCQkJCSIgWDogNAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggOAkJCQkJIiBYOiA4CisJdGhyb3cgNDcxMQorCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGNhdGNoIC9eNDcxMSQvCisJWHBhdGggMzIJCQkJIiBYOiAzMgorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNjQJCQkJIiBYOiA2NAorCXRocm93IDQ3MTEKKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL1xkLworCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNTEyCQkJCSIgWDogNTEyCisJdGhyb3cgNDcxMQorCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15cZFwrJC8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwl0aHJvdyAiYXJyZ2giCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvYXJyZ2gvCisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCXRocm93ICJhcnJnaCIKKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmFycmdoJC8KKwlYcGF0aCAxMzEwNzIJCQkJIiBYOiAxMzEwNzIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorCXRocm93ICJhcnJnaCIKKwlYcGF0aCA1MjQyODgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL1xsLworCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorCXRocm93ICJhcnJnaCIKKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eXGxcKyQvCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKyAgICBlbmR0cnkKKworICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgdGhyb3cgIkFSUkdIIgorCSAgICBYcGF0aCAzMzU1NDQzMgkJCSIgWDogMAorCWNhdGNoIC9eYXJyZ2gkLworCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogMAorCWVuZHRyeQorICAgIGNhdGNoIC9eXGNhcnJnaCQvCisJWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMTM0MjE3NzI4CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAyNjg0MzU0NTYKKwl0aHJvdyAiIgorCVhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXiQvCisJWHBhdGggMTA3Mzc0MTgyNAkJCSIgWDogMTA3Mzc0MTgyNAorICAgIGVuZHRyeQorCitjYXRjaCAvLiovCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitYY2hlY2sgMTUwNTE1NTk0OQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDM6ICBTZWxlY3RpbmcgdGhlIGNvcnJlY3QgOmNhdGNoIGNsYXVzZQkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFuZCB0aGVyZSBhcmUgbXVsdGlwbGUgOmNhdGNoIGNsYXVzZXMsCisiCSAgICB0aGUgZmlyc3QgbWF0Y2hpbmcgb25lIGlzIHRha2VuLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDEwMjQKK2xldCBsb29wcyA9IDMKK3doaWxlIGxvb3BzID4gMAorICAgIHRyeQorCWlmIGxvb3BzID09IDMKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDEKKwkgICAgdGhyb3cgImEiCisJICAgIFhsb29wIDIJCQkJIiBYOiAwCisJZWxzZWlmIGxvb3BzID09IDIKKwkgICAgWGxvb3AgNAkJCQkiIFg6IDQqMTAyNAorCSAgICB0aHJvdyAiYWIiCisJICAgIFhsb29wIDgJCQkJIiBYOiAwCisJZWxzZWlmIGxvb3BzID09IDEKKwkgICAgWGxvb3AgMTYJCQkJIiBYOiAxNioxMDI0KjEwMjQKKwkgICAgdGhyb3cgImFiYyIKKwkgICAgWGxvb3AgMzIJCQkJIiBYOiAwCisJZW5kaWYKKyAgICBjYXRjaCAvYWJjLworCVhsb29wIDY0CQkJCSIgWDogNjQqMTAyNCoxMDI0CisgICAgY2F0Y2ggL2FiLworCVhsb29wIDEyOAkJCQkiIFg6IDEyOCoxMDI0CisgICAgY2F0Y2ggLy4qLworCVhsb29wIDI1NgkJCQkiIFg6IDI1NgorICAgIGNhdGNoIC9hLworCVhsb29wIDUxMgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKworICAgIGxldCBsb29wcyA9IGxvb3BzIC0gMQorICAgIFhsb29wTkVYVAorZW5kd2hpbGUKK1hwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAxMDczNzQxODI0CisKK3VubGV0IGxvb3BzCisKK1hjaGVjayAxMTU3NzYzMzI5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0NDogIE1pc3Npbmcgb3IgZW1wdHkgOmNhdGNoIHBhdHRlcm5zCQkJCSAgICB7e3sxCisiCisiCSAgICBBIG1pc3Npbmcgb3IgZW1wdHkgOmNhdGNoIHBhdHRlcm4gbWVhbnMgdGhlIHNhbWUgYXMgLy4qLywgdGhhdCBpcywKKyIJICAgIGNhdGNoZXMgZXZlcnl0aGluZy4gIFRvIGNhdGNoIG9ubHkgZW1wdHkgZXhjZXB0aW9ucywgL14kLyBtdXN0IGJlCisiCSAgICB1c2VkLiAgQSA6Y2F0Y2ggd2l0aCBtaXNzaW5nLCBlbXB0eSwgb3IgLy4qLyBhcmd1bWVudCBhbHNvIHdvcmtzCisiCSAgICB3aGVuIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZCBzZXBhcmF0ZWQgYnkgYSBiYXIgb24gdGhlIHNhbWUKKyIJICAgIGxpbmUuICA6Y2F0Y2ggcGF0dGVybnMgY2Fubm90IGJlIHNwZWNpZmllZCBiZXR3ZWVuIHx8LiAgQnV0IG90aGVyCisiCSAgICBwYXR0ZXJuIHNlcGFyYXRvcnMgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAvLy4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCit0cnkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwl0aHJvdyAiIgorICAgIGNhdGNoIC9eJC8KKwlYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDQJCQkJCSIgWDogNAorCXRocm93ICIiCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgJCQkJCSIgWDogOAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAxNgorCXRocm93ICIiCisgICAgY2F0Y2ggLy8KKwlYcGF0aCAzMgkJCQkiIFg6IDMyCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCA2NAkJCQkiIFg6IDY0CisJdGhyb3cgIiIKKyAgICBjYXRjaAorCVhwYXRoIDEyOAkJCQkiIFg6IDEyOAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJdGhyb3cgIm9vcHMiCisgICAgY2F0Y2ggL14kLworCVhwYXRoIDUxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJdGhyb3cgImFycmdoIgorICAgIGNhdGNoIC9eJC8KKwlYcGF0aCA0MDk2CQkJCSIgWDogMAorICAgIGNhdGNoIC8vCisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwl0aHJvdyAiYnJyciIKKyAgICBjYXRjaCAvXiQvCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgY2F0Y2gKKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisgICAgZW5kdHJ5CisKKyAgICB0cnkgfCBYcGF0aCAxMzEwNzIgfCB0aHJvdyAieCIgfCBjYXRjaCAvLiovIHwgWHBhdGggMjYyMTQ0IHwgZW5kdHJ5CisJCQkJCQkiIFg6IDEzMTA3MiArIDI2MjE0NAorCisgICAgdHJ5IHwgWHBhdGggNTI0Mjg4IHwgdGhyb3cgInkiIHwgY2F0Y2ggLy8gfCBYcGF0aCAxMDQ4NTc2IHwgZW5kdHJ5CisJCQkJCQkiIFg6IDUyNDI4OCArIDEwNDg1NzYKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgIiBFeHRyYSB0cnkgbGV2ZWw6ICBpZiAiOmNhdGNoIiB3aXRob3V0IGFyZ3VtZW50cyBiZWxvdyByYWlzZXMKKwkgICAgIiBhIHN5bnRheCBlcnJvciBiZWNhdXNlIGl0IG1pc2ludGVycHJldHMgdGhlICJYcGF0aCIgYXMgYSBwYXR0ZXJuLAorCSAgICAiIGxldCBpdCBiZSBjYXVnaHQgYnkgdGhlICI6Y2F0Y2ggLy4qLyIgYmVsb3cuCisJICAgIHRyeQorCQl0cnkgfCBYcGF0aCAyMDk3MTUyIHwgdGhyb3cgInoiIHwgY2F0Y2ggfCBYcGF0aCA0MTk0MzA0IHwgOgorCQllbmR0cnkJCQkJIiBYOiAyMDk3MTUyICsgNDE5NDMwNAorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKwlmaW5hbGx5CisJICAgIGlmICRWSU1OT0VSUlRIUk9XICYmIHY6ZXJybXNnICE9ICIiCisJCVhvdXQgdjplcnJtc2cKKwkgICAgZW5kaWYKKwkgICAgaWYgY2F1Z2h0IHx8ICRWSU1OT0VSUlRIUk9XICYmIHY6ZXJybXNnICE9ICIiCisJCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIGxldCBjb2xvZ25lID0gNDcxMQorICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgdGhyb3cgInRocm93IGNvbG9nbmUiCisJIiBOZXh0IGxpbmVzIGNhdGNoZXMgYWxsIGFuZCB0aHJvd3MgNDcxMToKKwljYXRjaCB8dGhyb3cgY29sb2duZXwKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBjYXRjaCAvNDcxMS8KKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKwl0aHJvdyAicGx1cyIKKyAgICBjYXRjaCArcGx1cysKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAyNjg0MzU0NTYKKyAgICBlbmR0cnkKKworICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorY2F0Y2ggLy4qLworICAgIFhwYXRoIDEwNzM3NDE4MjQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK3VubGV0ISBjYXVnaHQgY29sb2duZQorCitYY2hlY2sgMTAzMTc2MTQwNworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDU6ICBDYXRjaGluZyBleGNlcHRpb25zIGZyb20gbmVzdGVkIDp0cnkgYmxvY2tzCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gOnRyeSBibG9ja3MgYXJlIG5lc3RlZCwgYW4gZXhjZXB0aW9uIGlzIGNhdWdodCBieSB0aGUgaW5uZXJtb3N0CisiCSAgICB0cnkgY29uZGl0aW9uYWwgdGhhdCBoYXMgYSBtYXRjaGluZyA6Y2F0Y2ggY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDEwMjQKK2xldCBsb29wcyA9IDMKK3doaWxlIGxvb3BzID4gMAorICAgIHRyeQorCXRyeQorCSAgICB0cnkKKwkJdHJ5CisJCSAgICBpZiBsb29wcyA9PSAzCisJCQlYbG9vcCAxCQkJIiBYOiAxCisJCQl0aHJvdyAiYSIKKwkJCVhsb29wIDIJCQkiIFg6IDAKKwkJICAgIGVsc2VpZiBsb29wcyA9PSAyCisJCQlYbG9vcCA0CQkJIiBYOiA0KjEwMjQKKwkJCXRocm93ICJhYiIKKwkJCVhsb29wIDgJCQkiIFg6IDAKKwkJICAgIGVsc2VpZiBsb29wcyA9PSAxCisJCQlYbG9vcCAxNgkJIiBYOiAxNioxMDI0KjEwMjQKKwkJCXRocm93ICJhYmMiCisJCQlYbG9vcCAzMgkJIiBYOiAwCisJCSAgICBlbmRpZgorCQljYXRjaCAvYWJjLworCQkgICAgWGxvb3AgNjQJCQkiIFg6IDY0KjEwMjQqMTAyNAorCQllbmR0cnkKKwkgICAgY2F0Y2ggL2FiLworCQlYbG9vcCAxMjgJCQkiIFg6IDEyOCoxMDI0CisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWGxvb3AgMjU2CQkJCSIgWDogMjU2CisJZW5kdHJ5CisgICAgY2F0Y2ggL2EvCisJWGxvb3AgNTEyCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgbGV0IGxvb3BzID0gbG9vcHMgLSAxCisgICAgWGxvb3BORVhUCitlbmR3aGlsZQorWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKwordW5sZXQgbG9vcHMKKworWGNoZWNrIDExNTc3NjMzMjkKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDQ2OiAgRXhlY3V0aW5nIDpmaW5hbGx5IGFmdGVyIGEgOnRocm93IGluIG5lc3RlZCA6dHJ5CQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gd2l0aGluIG5lc3RlZCA6dHJ5IGJsb2NrcywgdGhlCisiCSAgICA6ZmluYWxseSBjbGF1c2VzIG9mIHRoZSBub24tY2F0Y2hpbmcgdHJ5IGNvbmRpdGlvbmFscyBzaG91bGQgYmUKKyIJICAgIGV4ZWN1dGVkIGJlZm9yZSB0aGUgbWF0Y2hpbmcgOmNhdGNoIG9mIHRoZSBuZXh0IHN1cnJvdW5kaW5nIDp0cnkKKyIJICAgIGdldHMgdGhlIGNvbnRyb2wuICBJZiB0aGlzIGFsc28gaGFzIGEgOmZpbmFsbHkgY2xhdXNlLCBpdCBpcworIgkgICAgZXhlY3V0ZWQgYWZ0ZXJ3YXJkcy4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgc3VtID0gMAorCit0cnkKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICB0cnkKKwlYcGF0aCAyCQkJCQkiIFg6IDIKKwl0cnkKKwkgICAgWHBhdGggNAkJCQkiIFg6IDQKKwkgICAgdHJ5CisJCVhwYXRoIDgJCQkJIiBYOiA4CisJCXRocm93ICJBQkMiCisJCVhwYXRoIDE2CQkJIiBYOiAwCisJICAgIGNhdGNoIC94eXovCisJCVhwYXRoIDMyCQkJIiBYOiAwCisJICAgIGZpbmFsbHkKKwkJWHBhdGggNjQJCQkiIFg6IDY0CisJCWlmIHN1bSAhPSAwCisJCSAgICBYcGF0aCAxMjgJCQkiIFg6IDAKKwkJZW5kaWYKKwkJbGV0IHN1bSA9IHN1bSArIDEKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDAKKwljYXRjaCAvMTIzLworCSAgICBYcGF0aCA1MTIJCQkJIiBYOiAwCisJY2F0Y2ggLzMyMS8KKwkgICAgWHBhdGggMTAyNAkJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIGlmIHN1bSAhPSAxCisJCVhwYXRoIDQwOTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgbGV0IHN1bSA9IHN1bSArIDIKKwllbmR0cnkKKwlYcGF0aCA4MTkyCQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJaWYgc3VtICE9IDMKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJZW5kaWYKKwlsZXQgc3VtID0gc3VtICsgNAorICAgIGVuZHRyeQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDAKK2NhdGNoIC9BQkMvCisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisgICAgaWYgc3VtICE9IDcKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBsZXQgc3VtID0gc3VtICsgOAorZmluYWxseQorICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGlmIHN1bSAhPSAxNQorCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBsZXQgc3VtID0gc3VtICsgMTYKK2VuZHRyeQorWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2lmIHN1bSAhPSAzMQorICAgIFhwYXRoIDEzMTA3MgkJCQkiIFg6IDAKK2VuZGlmCisKK3VubGV0IHN1bQorCitYY2hlY2sgNzM5NDA3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0NzogIFRocm93aW5nIGV4Y2VwdGlvbnMgZnJvbSBhIDpjYXRjaCBjbGF1c2UJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gYSA6Y2F0Y2ggY2xhdXNlLCBpdCBzaG91bGQgbm90IGJlCisiCSAgICBjYXVnaHQgYnkgYSA6Y2F0Y2ggb2YgdGhlIHNhbWUgOnRyeSBjb25kaXRpb25hbC4gIEFmdGVyIGV4ZWN1dGluZworIgkgICAgdGhlIDpmaW5hbGx5IGNsYXVzZSAoaWYgcHJlc2VudCksIHN1cnJvdW5kaW5nIHRyeSBjb25kaXRpb25hbHMKKyIJICAgIHNob3VsZCBiZSBjaGVja2VkIGZvciBhIG1hdGNoaW5nIDpjYXRjaC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYcGF0aCAxCQkJCQkJIiBYOiAxCit0cnkKKyAgICBYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICB0cnkKKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwl0cnkKKwkgICAgWHBhdGggOAkJCQkiIFg6IDgKKwkgICAgdGhyb3cgIngxIgorCSAgICBYcGF0aCAxNgkJCQkiIFg6IDAKKwljYXRjaCAveDEvCisJICAgIFhwYXRoIDMyCQkJCSIgWDogMzIKKwkgICAgdHJ5CisJCVhwYXRoIDY0CQkJIiBYOiA2NAorCQl0aHJvdyAieDIiCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBjYXRjaCAveDEvCisJCVhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBjYXRjaCAveDIvCisJCVhwYXRoIDUxMgkJCSIgWDogNTEyCisJCXRyeQorCQkgICAgWHBhdGggMTAyNAkJCSIgWDogMTAyNAorCQkgICAgdGhyb3cgIngzIgorCQkgICAgWHBhdGggMjA0OAkJCSIgWDogMAorCQljYXRjaCAveDEvCisJCSAgICBYcGF0aCA0MDk2CQkJIiBYOiAwCisJCWNhdGNoIC94Mi8KKwkJICAgIFhwYXRoIDgxOTIJCQkiIFg6IDAKKwkJZmluYWxseQorCQkgICAgWHBhdGggMTYzODQJCQkiIFg6IDE2Mzg0CisJCWVuZHRyeQorCQlYcGF0aCAzMjc2OAkJCSIgWDogMAorCSAgICBjYXRjaCAveDMvCisJCVhwYXRoIDY1NTM2CQkJIiBYOiAwCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwljYXRjaCAveDEvCisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMAorCWNhdGNoIC94Mi8KKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJY2F0Y2ggL3gzLworCSAgICBYcGF0aCAxMDQ4NTc2CQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJZW5kdHJ5CisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAveDEvCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDAKKyAgICBjYXRjaCAveDIvCisJWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3gzLworCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CitjYXRjaCAvLiovCisgICAgWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorWHBhdGggMjY4NDM1NDU2CQkJCQkiIFg6IDI2ODQzNTQ1NgorCitYY2hlY2sgMzcxMjEzOTM1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA0ODogIFRocm93aW5nIGV4Y2VwdGlvbnMgZnJvbSBhIDpmaW5hbGx5IGNsYXVzZQkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBhIDpmaW5hbGx5IGNsYXVzZSwgaXQgc2hvdWxkIG5vdCBiZQorIgkgICAgY2F1Z2h0IGJ5IGEgOmNhdGNoIG9mIHRoZSBzYW1lIDp0cnkgY29uZGl0aW9uYWwuICBTdXJyb3VuZGluZyB0cnkKKyIJICAgIGNvbmRpdGlvbmFscyBzaG91bGQgYmUgY2hlY2tlZCBmb3IgYSBtYXRjaGluZyA6Y2F0Y2guICBBIHByZXZpb3VzbHkKKyIJICAgIHRocm93biBleGNlcHRpb24gaXMgZGlzY2FyZGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDEJCQkJIiBYOiAxCisJY2F0Y2ggL3gxLworCSAgICBYcGF0aCAyCQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggNAkJCQkiIFg6IDQKKwkgICAgdGhyb3cgIngxIgorCSAgICBYcGF0aCA4CQkJCSIgWDogMAorCWVuZHRyeQorCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGNhdGNoIC94MS8KKwlYcGF0aCAzMgkJCQkiIFg6IDMyCisgICAgZW5kdHJ5CisgICAgWHBhdGggNjQJCQkJCSIgWDogNjQKKworICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxMjgJCQkJIiBYOiAxMjgKKwkgICAgdGhyb3cgIngyIgorCSAgICBYcGF0aCAyNTYJCQkJIiBYOiAwCisJY2F0Y2ggL3gyLworCSAgICBYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwljYXRjaCAveDMvCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorCSAgICB0aHJvdyAieDMiCisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiAwCisJZW5kdHJ5CisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBjYXRjaCAveDIvCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3gzLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMzI3NjgKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorCisgICAgdHJ5CisJdHJ5CisJICAgIHRyeQorCQlYcGF0aCAxMzEwNzIJCQkiIFg6IDEzMTA3MgorCQl0aHJvdyAieDQiCisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMAorCSAgICBjYXRjaCAveDUvCisJCVhwYXRoIDUyNDI4OAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkJdGhyb3cgIng1IgkiIGRpc2NhcmRzICJ4NCIKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMAorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogMAorCWNhdGNoIC94NC8KKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMTY3NzcyMTYJCQkiIFg6IDE2Nzc3MjE2CisJZW5kdHJ5CisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3g1LworCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogNjcxMDg4NjQKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKworY2F0Y2ggLy4qLworICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKK1hwYXRoIDUzNjg3MDkxMgkJCQkJIiBYOiA1MzY4NzA5MTIKKworWGNoZWNrIDc1NjI1NTQ2MQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNDk6ICBUaHJvd2luZyBleGNlcHRpb25zIGFjY3Jvc3MgZnVuY3Rpb25zCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93biBidXQgbm90IGNhdWdodCBpbnNpZGUgYSBmdW5jdGlvbiwgdGhlCisiCSAgICBjYWxsZXIgaXMgY2hlY2tlZCBmb3IgYSBtYXRjaGluZyA6Y2F0Y2ggY2xhdXNlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBDKCkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwl0aHJvdyAiYXJyZ2giCisJWHBhdGggMgkJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDQJCQkJCSIgWDogNAorICAgIGVuZHRyeQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kZnVuY3Rpb24KKworWGxvb3BJTklUISAxNiAxNgorCitmdW5jdGlvbiEgVDEoKQorICAgIFhsb29wTkVYVAorICAgIHRyeQorCVhsb29wIDEJCQkJCSIgWDogMTYgKyAxNioxNgorCXRocm93ICJhcnJnaCIKKwlYbG9vcCAyCQkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWGxvb3AgNAkJCQkJIiBYOiA2NCArIDY0KjE2CisgICAgZW5kdHJ5CisgICAgWGxvb3AgOAkJCQkJIiBYOiAwCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgVDIoKQorICAgIHRyeQorCVhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJY2FsbCBUMSgpCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorICAgIGVuZHRyeQorICAgIFhwYXRoIDMyNzY4CQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK3RyeQorICAgIFhwYXRoIDY1NTM2CQkJCQkiIFg6IDY1NTM2CisgICAgY2FsbCBDKCkJIiB0aHJvdyBhbmQgY2F0Y2gKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiAxMzEwNzIKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK3RyeQorICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGNhbGwgVDEoKSAgIiB0aHJvdywgb25lIGxldmVsCisgICAgWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKK2NhdGNoIC9hcnJnaC8KKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorY2F0Y2ggLy4qLworICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK3RyeQorICAgIFhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgY2FsbCBUMigpCSIgdGhyb3csIHR3byBsZXZlbHMKKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKK2NhdGNoIC9hcnJnaC8KKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDMzNTU0NDMyCitjYXRjaCAvLiovCisgICAgWHBhdGggNjcxMDg4NjQJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CitYcGF0aCAxMzQyMTc3MjgJCQkJCSIgWDogMTM0MjE3NzI4CisKK1hjaGVjayAxNzkwMDA2NjkKKworIiBMZWF2ZSBDLCBUMSwgYW5kIFQyIGZvciBleGVjdXRpb24gYXMgc2NyaXB0cyBpbiB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTA6ICBUaHJvd2luZyBleGNlcHRpb25zIGFjY3Jvc3Mgc2NyaXB0IGZpbGVzCQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93biBidXQgbm90IGNhdWdodCBpbnNpZGUgYSBzY3JpcHQgZmlsZSwKKyIJICAgIHRoZSBzb3VyY2luZyBzY3JpcHQgb3IgZnVuY3Rpb24gaXMgY2hlY2tlZCBmb3IgYSBtYXRjaGluZyA6Y2F0Y2gKKyIJICAgIGNsYXVzZS4KKyIKKyIJICAgIFRoaXMgdGVzdCBleGVjdXRlcyB0aGUgYm9kaWVzIG9mIHRoZSBmdW5jdGlvbnMgQywgVDEsIGFuZCBUMiBmcm9tCisiCSAgICB0aGUgcHJldmlvdXMgdGVzdCBhcyBzY3JpcHQgZmlsZXMgKDpyZXR1cm4gcmVwbGFjZWQgYnkgOmZpbmlzaCkuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworbGV0IHNjcmlwdEMgPSBNYWtlU2NyaXB0KCJDIikJCQkiIFg6IDEgKyA0ICsgOAorZGVsZnVuY3Rpb24gQworCitYbG9vcElOSVQhIDE2IDE2CisKK2xldCBzY3JpcHRUMSA9IE1ha2VTY3JpcHQoIlQxIikJCQkiIFg6IDE2ICsgNjQgKyAxNioxNiArIDY0KjE2CitkZWxmdW5jdGlvbiBUMQorCitsZXQgc2NyaXB0VDIgPSBNYWtlU2NyaXB0KCJUMiIsIHNjcmlwdFQxKQkiIFg6IDQwOTYgKyAxNjM4NAorZGVsZnVuY3Rpb24gVDIKKworZnVuY3Rpb24hIEYoKQorICAgIHRyeQorCVhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwlleGVjICJzb3VyY2UiIGc6c2NyaXB0QworCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDEzMTA3MgorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisJZXhlYyAic291cmNlIiBnOnNjcmlwdFQxCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvYXJyZ2gvCisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CitlbmRmdW5jdGlvbgorCit0cnkKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogODM4ODYwOAorICAgIGNhbGwgRigpCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0VDIKKyAgICBYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKK2NhdGNoIC9hcnJnaC8KKyAgICBYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CitjYXRjaCAvLiovCisgICAgWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorWHBhdGggMjY4NDM1NDU2CQkJCQkiIFg6IDI2ODQzNTQ1NgorCitjYWxsIGRlbGV0ZShzY3JpcHRDKQorY2FsbCBkZWxldGUoc2NyaXB0VDEpCitjYWxsIGRlbGV0ZShzY3JpcHRUMikKK3VubGV0IHNjcmlwdEMgc2NyaXB0VDEgc2NyaXB0VDIKK2RlbGZ1bmN0aW9uIEYKKworWGNoZWNrIDM2MzU1MDA0NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTE6ICBUaHJvd2luZyBleGNlcHRpb25zIGFjY3Jvc3MgOmV4ZWN1dGUgYW5kIHVzZXIgY29tbWFuZHMJICAgIHt7ezEKKyIKKyIJICAgIEEgOnRocm93IGNvbW1hbmQgbWF5IGJlIGV4ZWN1dGVkIHVuZGVyIGFuICI6ZXhlY3V0ZSIgb3IgZnJvbQorIgkgICAgYSB1c2VyIGNvbW1hbmQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworY29tbWFuZCEgLW5hcmdzPT8gVEhST1cxICAgIHRocm93IDxhcmdzPiB8IHRocm93IDEKK2NvbW1hbmQhIC1uYXJncz0/IFRIUk9XMiAgICB0cnkgfCB0aHJvdyA8YXJncz4gfCBlbmR0cnkgfCB0aHJvdyAyCitjb21tYW5kISAtbmFyZ3M9PyBUSFJPVzMgICAgdHJ5IHwgdGhyb3cgMyB8IGNhdGNoIC8zLyB8IHRocm93IDxhcmdzPiB8IGVuZHRyeQorY29tbWFuZCEgLW5hcmdzPT8gVEhST1c0ICAgIHRyeSB8IHRocm93IDQgfCBmaW5hbGx5ICAgfCB0aHJvdyA8YXJncz4gfCBlbmR0cnkKKwordHJ5CisKKyAgICB0cnkKKwl0cnkKKwkgICAgWHBhdGggMQkJCQkiIFg6IDEKKwkgICAgVEhST1cxICJBIgorCWNhdGNoIC9BLworCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCWVuZHRyeQorICAgIGNhdGNoIC8xLworCVhwYXRoIDQJCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDgJCQkJIiBYOiA4CisJICAgIFRIUk9XMiAiQiIKKwljYXRjaCAvQi8KKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCWVuZHRyeQorICAgIGNhdGNoIC8yLworCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDY0CQkJCSIgWDogNjQKKwkgICAgVEhST1czICJDIgorCWNhdGNoIC9DLworCSAgICBYcGF0aCAxMjgJCQkJIiBYOiAxMjgKKwllbmR0cnkKKyAgICBjYXRjaCAvMy8KKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwl0cnkKKwkgICAgWHBhdGggNTEyCQkJCSIgWDogNTEyCisJICAgIFRIUk9XNCAiRCIKKwljYXRjaCAvRC8KKwkgICAgWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKwllbmR0cnkKKyAgICBjYXRjaCAvNC8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGV4ZWN1dGUgJ3Rocm93ICJFIiB8IHRocm93IDUnCisJY2F0Y2ggL0UvCisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJZW5kdHJ5CisgICAgY2F0Y2ggLzUvCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwl0cnkKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCSAgICBleGVjdXRlICd0cnkgfCB0aHJvdyAiRiIgfCBlbmR0cnkgfCB0aHJvdyA2JworCWNhdGNoIC9GLworCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJZW5kdHJ5CisgICAgY2F0Y2ggLzYvCisJWHBhdGggMTMxMDcyCQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMjYyMTQ0CisJICAgIGV4ZWN1dGUndHJ5IHwgdGhyb3cgNyB8IGNhdGNoIC83LyB8IHRocm93ICJHIiB8IGVuZHRyeScKKwljYXRjaCAvRy8KKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiA1MjQyODgKKwllbmR0cnkKKyAgICBjYXRjaCAvNy8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDIwOTcxNTIKKwkgICAgZXhlY3V0ZSAndHJ5IHwgdGhyb3cgOCB8IGZpbmFsbHkgICB8IHRocm93ICJIIiB8IGVuZHRyeScKKwljYXRjaCAvSC8KKwkgICAgWHBhdGggNDE5NDMwNAkJCSIgWDogNDE5NDMwNAorCWVuZHRyeQorICAgIGNhdGNoIC84LworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKworWHBhdGggMzM1NTQ0MzIJCQkJCSIgWDogMzM1NTQ0MzIKKworZGVsY29tbWFuZCBUSFJPVzEKK2RlbGNvbW1hbmQgVEhST1cyCitkZWxjb21tYW5kIFRIUk9XMworZGVsY29tbWFuZCBUSFJPVzQKKworWGNoZWNrIDQwNzQ0NjY3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA1MjogIFVuY2F1Z2h0IGV4Y2VwdGlvbnMJCQkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGJ1dCBub3QgY2F1Z2h0LCBhbiBlcnJvciBtZXNzYWdlIGlzCisiCSAgICBkaXNwbGF5ZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHRlcm1pbmF0ZWQuICBJbiBjYXNlIG9mIGFuIGludGVycnVwdAorIgkgICAgb3IgZXJyb3IgZXhjZXB0aW9uLCB0aGUgbm9ybWFsIGludGVycnVwdCBvciBlcnJvciBtZXNzYWdlKHMpIGFyZQorIgkgICAgZGlzcGxheWVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCBtc2dmaWxlID0gdGVtcG5hbWUoKQorCitmdW5jdGlvbiEgTUVTU0FHRVMoLi4uKQorICAgIHRyeQorCWV4ZWMgImVkaXQiIGc6bXNnZmlsZQorICAgIGNhdGNoIC9eVmltKGVkaXQpOi8KKwlyZXR1cm4gMAorICAgIGVuZHRyeQorCisgICAgbGV0IGVuZ2xpc2ggPSB2OmxhbmcgPT0gIkMiIHx8IHY6bGFuZyA9fiAnXltFZV1uJworICAgIGxldCBtYXRjaCA9IDEKKyAgICBub3JtIGdnCisKKyAgICBsZXQgbnVtID0gYTowIC8gMgorICAgIGxldCBjbnQgPSAxCisgICAgd2hpbGUgY250IDw9IG51bQorCWxldCBlbnIgPSBhOnsyKmNudCAtIDF9CisJbGV0IGVtc2c9IGE6ezIqY250fQorCWxldCBjbnQgPSBjbnQgKyAxCisKKwlpZiBlbnIgPT0gIiIKKwkgICAgWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGVtc2cKKwllbHNlaWYgZW5yID09ICJJTlQiCisJICAgIGxldCBlbnIgPSAiIgorCWVuZGlmCisJaWYgZW5yID09ICIiICYmICFlbmdsaXNoCisJICAgIGNvbnRpbnVlCisJZW5kaWYKKwlsZXQgcGF0dGVybiA9IChlbnIgIT0gIiIpID8gZW5yIC4gJzouKicgOiAnJworCWlmIGVuZ2xpc2gKKwkgICAgbGV0IHBhdHRlcm4gPSBwYXR0ZXJuIC4gZW1zZworCWVuZGlmCisJaWYgIXNlYXJjaChwYXR0ZXJuLCAiVyIpCisJICAgIGxldCBtYXRjaCA9IDAKKwkgICAgWG91dCAiTm8gbWF0Y2ggZm9yOiIgcGF0dGVybgorCWVuZGlmCisJbm9ybSAkCisgICAgZW5kd2hpbGUKKworICAgIGJ3aXBlb3V0IQorICAgIHJldHVybiBtYXRjaAorZW5kZnVuY3Rpb24KKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKKyAgICB0aHJvdyAiYXJyZ2giCitlbmRpZgorCitYcGF0aCAyCQkJCQkJIiBYOiAyCitpZiAhTUVTU0FHRVMoJ0U2MDUnLCAiRXhjZXB0aW9uIG5vdCBjYXVnaHQiKQorICAgIFhwYXRoIDQJCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyAgICB0cnkKKwlYcGF0aCA4CQkJCQkiIFg6IDgKKwl0aHJvdyAib29wcyIKKyAgICBjYXRjaCAvYXJyZ2gvCisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggMzIJCQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggNjQJCQkJCSIgWDogNjQKK2lmICFNRVNTQUdFUygnRTYwNScsICJFeGNlcHRpb24gbm90IGNhdWdodCIpCisgICAgWHBhdGggMTI4CQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisgICAgZnVuY3Rpb24hIFQoKQorCXRocm93ICJicnJyIgorICAgIGVuZGZ1bmN0aW9uCisKKyAgICB0cnkKKwlYcGF0aCAyNTYJCQkJIiBYOiAyNTYKKwl0aHJvdyAiYXJyZ2giCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCWNhbGwgVCgpCisgICAgZW5kdHJ5CisgICAgWHBhdGggMTAyNAkJCQkJIiBYOiAwCitlbmRpZgorCitYcGF0aCAyMDQ4CQkJCQkiIFg6IDIwNDgKK2lmICFNRVNTQUdFUygnRTYwNScsICJFeGNlcHRpb24gbm90IGNhdWdodCIpCisgICAgWHBhdGggNDA5NgkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorICAgIHRyeQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJdGhyb3cgImFycmdoIgorICAgIGZpbmFsbHkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJdGhyb3cgImJycnIiCisgICAgZW5kdHJ5CisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2lmICFNRVNTQUdFUygnRTYwNScsICJFeGNlcHRpb24gbm90IGNhdWdodCIpCisgICAgWHBhdGggMTMxMDcyCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyAgICB0cnkKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwkiSU5URVJSVVBUCisgICAgZW5kdHJ5CisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggMTA0ODU3NgkJCQkJIiBYOiAxMDQ4NTc2CitpZiAhTUVTU0FHRVMoJ0lOVCcsICJJbnRlcnJ1cHRlZCIpCisgICAgWHBhdGggMjA5NzE1MgkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisgICAgdHJ5CisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDQxOTQzMDQKKwlsZXQgeCA9IG5vdmFyCSIgZXJyb3IgRTEyMS9FMTU7IGV4Y2VwdGlvbjogRTEyMQorICAgIGNhdGNoIC9FMTU6LwkiIHNob3VsZCBub3QgY2F0Y2gKKwlYcGF0aCA4Mzg4NjA4CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorZW5kaWYKKworWHBhdGggMzM1NTQ0MzIJCQkJCSIgWDogMzM1NTQ0MzIKK2lmICFNRVNTQUdFUygnRTEyMScsICJVbmRlZmluZWQgdmFyaWFibGUiLCAnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisgICAgWHBhdGggNjcxMDg4NjQJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorICAgIHRyeQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorIgl1bmxldCBub3ZhciAjCSIgZXJyb3IgRTEwOC9FNDg4OyBleGNlcHRpb246IEU0ODgKKyAgICBjYXRjaCAvRTEwODovCSIgc2hvdWxkIG5vdCBjYXRjaAorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCitlbmRpZgorCitYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAoraWYgIU1FU1NBR0VTKCdFMTA4JywgIk5vIHN1Y2ggdmFyaWFibGUiLCAnRTQ4OCcsICJUcmFpbGluZyBjaGFyYWN0ZXJzIikKKyAgICAiIFRoZSBYcGF0aCBjb21tYW5kIGRvZXMgbm90IGFjY2VwdCAyXjMxIChuZWdhdGl2ZSk7IGFkZCBleHBsaWNpdGx5OgorICAgIGxldCBYcGF0aCA9IFhwYXRoICsgMjE0NzQ4MzY0OAkJIiBYOiAwCitlbmRpZgorCitjYWxsIGRlbGV0ZShtc2dmaWxlKQordW5sZXQgbXNnZmlsZQorCitYY2hlY2sgMTI0NzExMjAxMQorCisiIExlYXZlIE1FU1NBR0VTKCkgZm9yIHRoZSBuZXh0IHRlc3RzLgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTM6ICBOZXN0aW5nIGVycm9yczogOmVuZGlmLzplbHNlLzplbHNlaWYJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDppZiBjb25kaXRpb25hbHMgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZXMKKyIJICAgIHNob3VsZCBiZSBnaXZlbi4KKyIKKyIJICAgIFRoaXMgdGVzdCByZXVzZXMgdGhlIGZ1bmN0aW9uIE1FU1NBR0VTKCkgZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4KKyIJICAgIFRoaXMgZnVuY3Rpb25zIGNoZWNrcyB0aGUgbWVzc2FnZXMgaW4gZzptc2dmaWxlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCBtc2dmaWxlID0gdGVtcG5hbWUoKQorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODAnLCAiOmVuZGlmIHdpdGhvdXQgOmlmIikKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBlbmRpZgorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODAnLCAiOmVuZGlmIHdpdGhvdXQgOmlmIikKKyAgICBYcGF0aCAyCQkJCQkiIFg6IDIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgZmluYWxseQorIiAgICAgICBlbmRpZgorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgwJywgIjplbmRpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICBlbmRpZgorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgwJywgIjplbmRpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggOAkJCQkJIiBYOiA4CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgZW5kaWYKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MCcsICI6ZW5kaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDE2CQkJCQkiIFg6IDE2CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGVsc2UKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBlbHNlCisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggNjQJCQkJCSIgWDogNjQKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgZmluYWxseQorIiAgICAgICBlbHNlCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODEnLCAiOmVsc2Ugd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAxMjgKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgICAgIGVsc2UKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgdGhyb3cgImEiCisiICAgY2F0Y2ggL2EvCisiICAgICAgIGVsc2UKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MScsICI6ZWxzZSB3aXRob3V0IDppZiIpCisgICAgWHBhdGggNTEyCQkJCQkiIFg6IDUxMgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBlbHNlaWYKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MicsICI6ZWxzZWlmIHdpdGhvdXQgOmlmIikKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDEwMjQKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBlbHNlaWYKKyIgICBlbmR3aGlsZQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDIwNDgJCQkJCSIgWDogMjA0OAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICBmaW5hbGx5CisiICAgICAgIGVsc2VpZgorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogNDA5NgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgZWxzZWlmCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODInLCAiOmVsc2VpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggODE5MgkJCQkJIiBYOiA4MTkyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgZWxzZWlmCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODInLCAiOmVsc2VpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMTYzODQJCQkJCSIgWDogMTYzODQKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgIGVsc2UKKyIgICBlbHNlCisiICAgZW5kaWYKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4MycsICJtdWx0aXBsZSA6ZWxzZSIpCisgICAgWHBhdGggMzI3NjgJCQkJCSIgWDogMzI3NjgKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgIGVsc2UKKyIgICBlbHNlaWYgMQorIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODQnLCAiOmVsc2VpZiBhZnRlciA6ZWxzZSIpCisgICAgWHBhdGggNjU1MzYJCQkJCSIgWDogNjU1MzYKK2VuZGlmCisKK2NhbGwgZGVsZXRlKG1zZ2ZpbGUpCit1bmxldCBtc2dmaWxlCisKK1hjaGVjayAxMzEwNzEKKworIiBMZWF2ZSBNRVNTQUdFUygpIGZvciB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTQ6ICBOZXN0aW5nIGVycm9yczogOndoaWxlLzplbmR3aGlsZQkJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDp3aGlsZSBjb25kaXRpb25hbHMgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZXMKKyIJICAgIHNob3VsZCBiZSBnaXZlbi4KKyIKKyIJICAgIFRoaXMgdGVzdCByZXVzZXMgdGhlIGZ1bmN0aW9uIE1FU1NBR0VTKCkgZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4KKyIJICAgIFRoaXMgZnVuY3Rpb25zIGNoZWNrcyB0aGUgbWVzc2FnZXMgaW4gZzptc2dmaWxlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCBtc2dmaWxlID0gdGVtcG5hbWUoKQorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDEKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgICAgICBlbmR3aGlsZQorIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAyCQkJCQkiIFg6IDIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICBpZiAxCisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTE3MScsICJNaXNzaW5nIDplbmRpZiIpCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgIGZpbmFsbHkKKyIgICAgICAgZW5kd2hpbGUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4OCcsICI6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB3aGlsZSAxCisiICAgICAgIHRyeQorIiAgICAgICBmaW5hbGx5CisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMCcsICJNaXNzaW5nIDplbmR0cnkiKQorICAgIFhwYXRoIDE2CQkJCQkiIFg6IDE2CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHdoaWxlIDEKKyIgICAgICAgaWYgMQorIgkgICAgdHJ5CisiCSAgICBmaW5hbGx5CisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMCcsICJNaXNzaW5nIDplbmR0cnkiKQorICAgIFhwYXRoIDMyCQkJCQkiIFg6IDMyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHdoaWxlIDEKKyIgICAgICAgdHJ5CisiICAgICAgIGZpbmFsbHkKKyIJICAgIGlmIDEKKyIgICBlbmR3aGlsZQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgZW5kd2hpbGUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4OCcsICI6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAxMjgKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICB0cnkKKyIJICAgIGVuZHdoaWxlCisiICAgICAgIGVuZHRyeQorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAyNTYJCQkJCSIgWDogMjU2CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgZW5kd2hpbGUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4OCcsICI6ZW5kd2hpbGUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDUxMgkJCQkJIiBYOiA1MTIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgd2hpbGUgMQorIiAgICAgICB0cnkKKyIJICAgIHRocm93ICJhIgorIgljYXRjaCAvYS8KKyIJICAgIGVuZHdoaWxlCisiICAgICAgIGVuZHRyeQorIiAgIGVuZHdoaWxlCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODgnLCAiOmVuZHdoaWxlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxMDI0CQkJCQkiIFg6IDEwMjQKK2VuZGlmCisKKworY2FsbCBkZWxldGUobXNnZmlsZSkKK3VubGV0IG1zZ2ZpbGUKKworWGNoZWNrIDIwNDcKKworIiBMZWF2ZSBNRVNTQUdFUygpIGZvciB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNTU6ICBOZXN0aW5nIGVycm9yczogOmNvbnRpbnVlLzpicmVhawkJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDpjb250aW51ZSBhbmQgOmJyZWFrIGNvbW1hbmRzIHRoZSBjb3JyZWN0CisiCSAgICBlcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgZ2l2ZW4uCisiCisiCSAgICBUaGlzIHRlc3QgcmV1c2VzIHRoZSBmdW5jdGlvbiBNRVNTQUdFUygpIGZyb20gdGhlIHByZXZpb3VzIHRlc3QuCisiCSAgICBUaGlzIGZ1bmN0aW9ucyBjaGVja3MgdGhlIG1lc3NhZ2VzIGluIGc6bXNnZmlsZS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgbXNnZmlsZSA9IHRlbXBuYW1lKCkKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBjb250aW51ZQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg2JywgIjpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGlmIDEKKyIgICAgICAgY29udGludWUKKyIgICBlbmRpZgorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg2JywgIjpjb250aW51ZSB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMgkJCQkJIiBYOiAyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgIGZpbmFsbHkKKyIgICAgICAgY29udGludWUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4NicsICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDQJCQkJCSIgWDogNAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgY29udGludWUKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTU4NicsICI6Y29udGludWUgd2l0aG91dCA6d2hpbGUiKQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgdGhyb3cgImEiCisiICAgY2F0Y2ggL2EvCisiICAgICAgIGNvbnRpbnVlCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODYnLCAiOmNvbnRpbnVlIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxNgkJCQkJIiBYOiAxNgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBicmVhaworZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg3JywgIjpicmVhayB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgaWYgMQorIiAgICAgICBicmVhaworIiAgIGVuZGlmCitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODcnLCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCA2NAkJCQkJIiBYOiA2NAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICBmaW5hbGx5CisiICAgICAgIGJyZWFrCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODcnLCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMTI4CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICBicmVhaworIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFNTg3JywgIjpicmVhayB3aXRob3V0IDp3aGlsZSIpCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgdGhyb3cgImEiCisiICAgY2F0Y2ggL2EvCisiICAgICAgIGJyZWFrCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0U1ODcnLCAiOmJyZWFrIHdpdGhvdXQgOndoaWxlIikKKyAgICBYcGF0aCA1MTIJCQkJCSIgWDogNTEyCitlbmRpZgorCitjYWxsIGRlbGV0ZShtc2dmaWxlKQordW5sZXQgbXNnZmlsZQorCitYY2hlY2sgMTAyMworCisiIExlYXZlIE1FU1NBR0VTKCkgZm9yIHRoZSBuZXh0IHRlc3QuCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA1NjogIE5lc3RpbmcgZXJyb3JzOiA6ZW5kdHJ5CQkJCQkgICAge3t7MQorIgorIgkgICAgRm9yIG5lc3RpbmcgZXJyb3JzIG9mIDp0cnkgY29uZGl0aW9uYWxzIHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2VzCisiCSAgICBzaG91bGQgYmUgZ2l2ZW4uCisiCisiCSAgICBUaGlzIHRlc3QgcmV1c2VzIHRoZSBmdW5jdGlvbiBNRVNTQUdFUygpIGZyb20gdGhlIHByZXZpb3VzIHRlc3QuCisiCSAgICBUaGlzIGZ1bmN0aW9ucyBjaGVja3MgdGhlIG1lc3NhZ2VzIGluIGc6bXNnZmlsZS4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgbXNnZmlsZSA9IHRlbXBuYW1lKCkKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMicsICI6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIpCisgICAgWHBhdGggMQkJCQkJIiBYOiAxCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIGlmIDEKKyIgICAgICAgZW5kdHJ5CisiICAgZW5kaWYKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMicsICI6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIpCisgICAgWHBhdGggMgkJCQkJIiBYOiAyCitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHdoaWxlIDEKKyIgICAgICAgZW5kdHJ5CisiICAgZW5kd2hpbGUKK2VuZGlmCitpZiBNRVNTQUdFUygnRTYwMicsICI6ZW5kdHJ5IHdpdGhvdXQgOnRyeSIpCisgICAgWHBhdGggNAkJCQkJIiBYOiA0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICBpZiAxCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0UxNzEnLCAiTWlzc2luZyA6ZW5kaWYiKQorICAgIFhwYXRoIDgJCQkJCSIgWDogOAorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICAgICAgd2hpbGUgMQorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcwJywgIk1pc3NpbmcgOmVuZHdoaWxlIikKKyAgICBYcGF0aCAxNgkJCQkJIiBYOiAxNgorZW5kaWYKKworaWYgRXh0cmFWaW0obXNnZmlsZSkKKyIgICB0cnkKKyIgICBmaW5hbGx5CisiICAgICAgIGlmIDEKKyIgICBlbmR0cnkKK2VuZGlmCitpZiBNRVNTQUdFUygnRTE3MScsICJNaXNzaW5nIDplbmRpZiIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMzIKK2VuZGlmCisKK2lmIEV4dHJhVmltKG1zZ2ZpbGUpCisiICAgdHJ5CisiICAgZmluYWxseQorIiAgICAgICB3aGlsZSAxCisiICAgZW5kdHJ5CitlbmRpZgoraWYgTUVTU0FHRVMoJ0UxNzAnLCAiTWlzc2luZyA6ZW5kd2hpbGUiKQorICAgIFhwYXRoIDY0CQkJCQkiIFg6IDY0CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgaWYgMQorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIikKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMTI4CitlbmRpZgorCitpZiBFeHRyYVZpbShtc2dmaWxlKQorIiAgIHRyeQorIiAgICAgICB0aHJvdyAiYSIKKyIgICBjYXRjaCAvYS8KKyIgICAgICAgd2hpbGUgMQorIiAgIGVuZHRyeQorZW5kaWYKK2lmIE1FU1NBR0VTKCdFMTcwJywgIk1pc3NpbmcgOmVuZHdoaWxlIikKKyAgICBYcGF0aCAyNTYJCQkJCSIgWDogMjU2CitlbmRpZgorCitjYWxsIGRlbGV0ZShtc2dmaWxlKQordW5sZXQgbXNnZmlsZQorCitkZWxmdW5jdGlvbiBNRVNTQUdFUworCitYY2hlY2sgNTExCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA1NzogIHY6ZXhjZXB0aW9uIGFuZCB2OnRocm93cG9pbnQgZm9yIHVzZXIgZXhjZXB0aW9ucwkJICAgIHt7ezEKKyIKKyIJICAgIHY6ZXhjZXB0aW9uIGV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBjYXVnaHQKKyIJICAgIG1vc3QgcmVjZW50bHkgYW5kIGlzIG5vdCBmaW5pc2hlZC4gIChBIGNhdWdodCBleGNlcHRpb24gaXMgZmluaXNoZWQKKyIJICAgIHdoZW4gdGhlIG5leHQgIjpjYXRjaCIsICI6ZmluYWxseSIsIG9yICI6ZW5kdHJ5IiBpcyByZWFjaGVkLikKKyIJICAgIHY6dGhyb3dwb2ludCBldmFsdWF0ZXMgdG8gdGhlIHNjcmlwdC9mdW5jdGlvbiBuYW1lIGFuZCBsaW5lIG51bWJlcgorIgkgICAgd2hlcmUgdGhhdCBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGdW5jRXhjZXB0aW9uKCkKKyAgICBsZXQgZzpleGNlcHRpb24gPSB2OmV4Y2VwdGlvbgorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEZ1bmNUaHJvd3BvaW50KCkKKyAgICBsZXQgZzp0aHJvd3BvaW50ID0gdjp0aHJvd3BvaW50CitlbmRmdW5jdGlvbgorCitsZXQgc2NyaXB0RXhjZXB0aW9uICA9IE1ha2VTY3JpcHQoIkZ1bmNFeGNlcHRpb24iKQorbGV0IHNjcmlwdFRocm93UG9pbnQgPSBNYWtlU2NyaXB0KCJGdW5jVGhyb3dwb2ludCIpCisKK2NvbW1hbmQhIENtZEV4Y2VwdGlvbiAgbGV0IGc6ZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCitjb21tYW5kISBDbWRUaHJvd3BvaW50IGxldCBnOnRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKworWGxvb3BJTklUISAxIDIKKworZnVuY3Rpb24hIENIRUNLKG4sIGV4Y2VwdGlvbiwgdGhyb3duYW1lLCB0aHJvd2xpbmUpCisgICAgWGxvb3BORVhUCisgICAgbGV0IGVycm9yID0gMAorICAgIGlmIHY6ZXhjZXB0aW9uICE9IGE6ZXhjZXB0aW9uCisJWG91dCBhOm4uIjogdjpleGNlcHRpb24gaXMiIHY6ZXhjZXB0aW9uICJpbnN0ZWFkIG9mIiBhOmV4Y2VwdGlvbgorCWxldCBlcnJvciA9IDEKKyAgICBlbmRpZgorICAgIGlmIHY6dGhyb3dwb2ludCAhfiBhOnRocm93bmFtZQorCWxldCBuYW1lID0gZXNjYXBlKGE6dGhyb3duYW1lLCAnXCcpCisJWG91dCBhOm4uIjogdjp0aHJvd3BvaW50ICgiLnY6dGhyb3dwb2ludC4iKSBkb2VzIG5vdCBtYXRjaCIgbmFtZQorCWxldCBlcnJvciA9IDEKKyAgICBlbmRpZgorICAgIGlmIHY6dGhyb3dwb2ludCAhfiBhOnRocm93bGluZQorCWxldCBsaW5lID0gZXNjYXBlKGE6dGhyb3dsaW5lLCAnXCcpCisJWG91dCBhOm4uIjogdjp0aHJvd3BvaW50ICgiLnY6dGhyb3dwb2ludC4iKSBkb2VzIG5vdCBtYXRjaCIgbGluZQorCWxldCBlcnJvciA9IDEKKyAgICBlbmRpZgorICAgIGlmIGVycm9yCisJWGxvb3AgMQkJCQkJIiBYOiAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBUKGFyZywgbGluZSkKKyAgICBpZiBhOmxpbmUgPT0gMgorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgMgorICAgIGVsc2VpZiBhOmxpbmUgPT0gNAorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgNAorICAgIGVsc2VpZiBhOmxpbmUgPT0gNgorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgNgorICAgIGVsc2VpZiBhOmxpbmUgPT0gOAorCXRocm93IGE6YXJnCQkiIGluIGxpbmUgOAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRyhhcmcsIGxpbmUpCisgICAgY2FsbCBUKGE6YXJnLCBhOmxpbmUpCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRihhcmcsIGxpbmUpCisgICAgY2FsbCBHKGE6YXJnLCBhOmxpbmUpCitlbmRmdW5jdGlvbgorCitsZXQgc2NyaXB0VCA9IE1ha2VTY3JpcHQoIlQiKQorbGV0IHNjcmlwdEcgPSBNYWtlU2NyaXB0KCJHIiwgc2NyaXB0VCkKK2xldCBzY3JpcHRGID0gTWFrZVNjcmlwdCgiRiIsIHNjcmlwdEcpCisKK3RyeQorICAgIFhwYXRoIDMyNzY4CQkJCQkiIFg6IDMyNzY4CisgICAgY2FsbCBGKCJvb3BzIiwgMikKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorICAgIGxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKyAgICBsZXQgdGhyb3dwb2ludCA9IHY6dGhyb3dwb2ludAorICAgIGNhbGwgQ0hFQ0soMSwgIm9vcHMiLCAnXDxGXC5cLkdcLlwuVFw+JywgJ1w8Mlw+JykKKyAgICBleGVjICJsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uIgorICAgIGV4ZWMgImxldCB0aHJvd3BvaW50ID0gdjp0aHJvd3BvaW50IgorICAgIGNhbGwgQ0hFQ0soMiwgIm9vcHMiLCAnXDxGXC5cLkdcLlwuVFw+JywgJ1w8Mlw+JykKKyAgICBDbWRFeGNlcHRpb24KKyAgICBDbWRUaHJvd3BvaW50CisgICAgY2FsbCBDSEVDSygzLCAib29wcyIsICdcPEZcLlwuR1wuXC5UXD4nLCAnXDwyXD4nKQorICAgIGNhbGwgRnVuY0V4Y2VwdGlvbigpCisgICAgY2FsbCBGdW5jVGhyb3dwb2ludCgpCisgICAgY2FsbCBDSEVDSyg0LCAib29wcyIsICdcPEZcLlwuR1wuXC5UXD4nLCAnXDwyXD4nKQorICAgIGV4ZWMgInNvdXJjZSIgc2NyaXB0RXhjZXB0aW9uCisgICAgZXhlYyAic291cmNlIiBzY3JpcHRUaHJvd1BvaW50CisgICAgY2FsbCBDSEVDSyg1LCAib29wcyIsICdcPEZcLlwuR1wuXC5UXD4nLCAnXDwyXD4nKQorICAgIHRyeQorCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDEzMTA3MgorCWNhbGwgRygiYXJyZ2giLCA0KQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwlsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCisJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwljYWxsIENIRUNLKDYsICJhcnJnaCIsICdcPEdcLlwuVFw+JywgJ1w8NFw+JykKKwl0cnkKKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiA1MjQyODgKKwkgICAgbGV0IGc6YXJnID0gImF1dHNjaCIKKwkgICAgbGV0IGc6bGluZSA9IDYKKwkgICAgZXhlYyAic291cmNlIiBzY3JpcHRGCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxMDQ4NTc2CQkJIiBYOiAxMDQ4NTc2CisJICAgIGxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkgICAgbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkgICAgIiBTeW1ib2xpYyBsaW5rcyBpbiB0ZW1wbmFtZSgpcyBhcmUgbm90IHJlc29sdmVkLCB3aGVyZWFzIHJlc29sdmluZworCSAgICAiIGlzIGRvbmUgZm9yIHY6dGhyb3dwb2ludC4gIFJlc29sdmUgdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yCisJICAgICIgc2NyaXB0VCwgc28gdGhhdCBpdCBjYW4gYmUgbWF0Y2hlZCBhZ2FpbnN0IHY6dGhyb3dwb2ludC4KKwkgICAgY2FsbCBDSEVDSyg3LCAiYXV0c2NoIiwgcmVzb2x2ZShzY3JpcHRUKSwgJ1w8Nlw+JykKKwlmaW5hbGx5CisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDIwOTcxNTIKKwkgICAgbGV0IGV4Y2VwdGlvbiAgPSB2OmV4Y2VwdGlvbgorCSAgICBsZXQgdGhyb3dwb2ludCA9IHY6dGhyb3dwb2ludAorCSAgICBjYWxsIENIRUNLKDgsICJhcnJnaCIsICdcPEdcLlwuVFw+JywgJ1w8NFw+JykKKwkgICAgdHJ5CisJCVhwYXRoIDQxOTQzMDQJCQkiIFg6IDQxOTQzMDQKKwkJbGV0IGc6YXJnID0gImJycnJyIgorCQlsZXQgZzpsaW5lID0gOAorCQlleGVjICJzb3VyY2UiIHNjcmlwdEcKKwkgICAgY2F0Y2ggLy4qLworCQlYcGF0aCA4Mzg4NjA4CQkJIiBYOiA4Mzg4NjA4CisJCWxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkJIiBSZXNvbHZlIHNjcmlwdFQgZm9yIG1hdGNoaW5nIGl0IGFnYWluc3Qgdjp0aHJvd3BvaW50LgorCQljYWxsIENIRUNLKDksICJicnJyciIsIHJlc29sdmUoc2NyaXB0VCksICdcPDhcPicpCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMTY3NzcyMTYJCQkiIFg6IDE2Nzc3MjE2CisJCWxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkJY2FsbCBDSEVDSygxMCwgImFycmdoIiwgJ1w8R1wuXC5UXD4nLCAnXDw0XD4nKQorCSAgICBlbmR0cnkKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDMzNTU0NDMyCisJICAgIGxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwkgICAgbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwkgICAgY2FsbCBDSEVDSygxMSwgImFycmdoIiwgJ1w8R1wuXC5UXD4nLCAnXDw0XD4nKQorCWVuZHRyeQorCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogNjcxMDg4NjQKKwlsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCisJbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKwljYWxsIENIRUNLKDEyLCAiYXJyZ2giLCAnXDxHXC5cLlRcPicsICdcPDRcPicpCisgICAgZmluYWxseQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorCWxldCBleGNlcHRpb24gID0gdjpleGNlcHRpb24KKwlsZXQgdGhyb3dwb2ludCA9IHY6dGhyb3dwb2ludAorCWNhbGwgQ0hFQ0soMTMsICJvb3BzIiwgJ1w8RlwuXC5HXC5cLlRcPicsICdcPDJcPicpCisgICAgZW5kdHJ5CisgICAgWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMjY4NDM1NDU2CisgICAgbGV0IGV4Y2VwdGlvbiAgPSB2OmV4Y2VwdGlvbgorICAgIGxldCB0aHJvd3BvaW50ID0gdjp0aHJvd3BvaW50CisgICAgY2FsbCBDSEVDSygxNCwgIm9vcHMiLCAnXDxGXC5cLkdcLlwuVFw+JywgJ1w8Mlw+JykKK2ZpbmFsbHkKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiA1MzY4NzA5MTIKKyAgICBsZXQgZXhjZXB0aW9uICA9IHY6ZXhjZXB0aW9uCisgICAgbGV0IHRocm93cG9pbnQgPSB2OnRocm93cG9pbnQKKyAgICBjYWxsIENIRUNLKDE1LCAiIiwgJ14kJywgJ14kJykKK2VuZHRyeQorCitYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorCit1bmxldCBleGNlcHRpb24gdGhyb3dwb2ludAorZGVsZnVuY3Rpb24gRnVuY0V4Y2VwdGlvbgorZGVsZnVuY3Rpb24gRnVuY1Rocm93cG9pbnQKK2NhbGwgZGVsZXRlKHNjcmlwdEV4Y2VwdGlvbikKK2NhbGwgZGVsZXRlKHNjcmlwdFRocm93UG9pbnQpCit1bmxldCBzY3JpcHRFeGNlcHRpb24gc2NyaXB0VGhyb3dQb2ludAorZGVsY29tbWFuZCBDbWRFeGNlcHRpb24KK2RlbGNvbW1hbmQgQ21kVGhyb3dwb2ludAorZGVsZnVuY3Rpb24gVAorZGVsZnVuY3Rpb24gRworZGVsZnVuY3Rpb24gRgorY2FsbCBkZWxldGUoc2NyaXB0VCkKK2NhbGwgZGVsZXRlKHNjcmlwdEcpCitjYWxsIGRlbGV0ZShzY3JpcHRGKQordW5sZXQgc2NyaXB0VCBzY3JpcHRHIHNjcmlwdEYKKworWGNoZWNrIDIxNDc0NTA4ODAKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIgorIiBUZXN0IDU4OiAgdjpleGNlcHRpb24gYW5kIHY6dGhyb3dwb2ludCBmb3IgZXJyb3IvaW50ZXJydXB0IGV4Y2VwdGlvbnMJICAgIHt7ezEKKyIKKyIJICAgIHY6ZXhjZXB0aW9uIGFuZCB2OnRocm93cG9pbnQgd29yayBhbHNvIGZvciBlcnJvciBhbmQgaW50ZXJydXB0CisiCSAgICBleGNlcHRpb25zLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGZ1bmN0aW9uISBUKGxpbmUpCisJaWYgYTpsaW5lID09IDIKKwkgICAgZGVsZnVuY3Rpb24gVAkJIiBlcnJvciAoZnVuY3Rpb24gaW4gdXNlKSBpbiBsaW5lIDIKKwllbHNlaWYgYTpsaW5lID09IDQKKwkgICAgbGV0IGR1bW15ID0gMAkJIiBJTlRFUlJVUFQxIC0gaW50ZXJydXB0IGluIGxpbmUgNAorCWVuZGlmCisgICAgZW5kZnVuY3Rpb24KKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgWHBhdGggMQkJCQkiIFg6IDEKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgY2FsbCBUKDIpCisJY2F0Y2ggLy4qLworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBpZiB2OmV4Y2VwdGlvbiAhfiAnVmltKGRlbGZ1bmN0aW9uKTonCisJCVhwYXRoIDIJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmIHY6dGhyb3dwb2ludCAhfiAnXDxUXD4nCisJCVhwYXRoIDQJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmIHY6dGhyb3dwb2ludCAhfiAnXDwyXD4nCisJCVhwYXRoIDgJCQkJIiBYOiAwCisJICAgIGVuZGlmCisJZmluYWxseQorCSAgICBYcGF0aCAxNgkJCQkiIFg6IDE2CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVworCQlYcGF0aCAzMgkJCSIgWDogMzIKKwkgICAgZW5kaWYKKwkgICAgaWYgdjpleGNlcHRpb24gIT0gIiIKKwkJWHBhdGggNjQJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgdjp0aHJvd3BvaW50ICE9ICIiCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICBYcGF0aCAyNTYJCQkJCSIgWDogMjU2CisgICAgaWYgdjpleGNlcHRpb24gIT0gIiIKKwlYcGF0aCA1MTIJCQkJIiBYOiAwCisgICAgZW5kaWYKKyAgICBpZiB2OnRocm93cG9pbnQgIT0gIiIKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGVuZGlmCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGNhbGwgVCg0KQorCWNhdGNoIC8uKi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgaWYgdjpleGNlcHRpb24gIT0gJ1ZpbTpJbnRlcnJ1cHQnCisJCVhwYXRoIDQwOTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgdjp0aHJvd3BvaW50ICF+ICdcPFRcPicKKwkJWHBhdGggODE5MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiB2OnRocm93cG9pbnQgIX4gJ1w8NFw+JworCQlYcGF0aCAxNjM4NAkJCSIgWDogMAorCSAgICBlbmRpZgorCWZpbmFsbHkKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCSAgICBpZiBjYXVnaHQgfHwgJFZJTU5PSU5UVEhST1cKKwkJWHBhdGggNjU1MzYJCQkiIFg6IDY1NTM2CisJICAgIGVuZGlmCisJICAgIGlmIHY6ZXhjZXB0aW9uICE9ICIiCisJCVhwYXRoIDEzMTA3MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiB2OnRocm93cG9pbnQgIT0gIiIKKwkJWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIFhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGlmIHY6ZXhjZXB0aW9uICE9ICIiCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBlbmRpZgorICAgIGlmIHY6dGhyb3dwb2ludCAhPSAiIgorCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCisgICAgZW5kaWYKKworZW5kaWYKKworWGNoZWNrIDYyNDk0NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiCisiIFRlc3QgNTk6ICB2OmV4Y2VwdGlvbiBhbmQgdjp0aHJvd3BvaW50IHdoZW4gZGlzY2FyZGluZyBleGNlcHRpb25zCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGEgOmNhdGNoIGNsYXVzZSBpcyBsZWZ0IGJ5IGEgIjpicmVhayIgZXRjIG9yIGFuIGVycm9yIG9yCisiCSAgICBpbnRlcnJ1cHQgZXhjZXB0aW9uLCB2OmV4Y2VwdGlvbiBhbmQgdjp0aHJvd3BvaW50IGFyZSByZXNldC4gIFRoZXkKKyIJICAgIGFyZSBub3QgYWZmZWN0ZWQgYnkgYW4gZXhjZXB0aW9uIHRoYXQgaXMgZGlzY2FyZGVkIGJlZm9yZSBiZWluZworIgkgICAgY2F1Z2h0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIFhsb29wSU5JVCEgMSAyCisKKyAgICBsZXQgc2ZpbGUgPSBleHBhbmQoIjxzZmlsZT4iKQorCisgICAgZnVuY3Rpb24hIExpbmVOdW1iZXIoKQorCXJldHVybiBzdWJzdGl0dXRlKHN1YnN0aXR1dGUodjp0aHJvd3BvaW50LCBnOnNmaWxlLCAnJywgIiIpLAorCSAgICBcICdcRCpcKFxkKlwpLionLCAnXDEnLCAiIikKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY29tbWFuZCEgLW5hcmdzPTEgU2V0TGluZU51bWJlcgorCVwgdHJ5IHwgdGhyb3cgImxpbmUiIHwgY2F0Y2ggLy4qLyB8IGxldCA8YXJncz4gPSAgTGluZU51bWJlcigpIHwgZW5kdHJ5CisKKyAgICAiIENoZWNrIHY6ZXhjZXB0aW9uL3Y6dGhyb3dwb2ludCBhZ2FpbnN0IHNlY29uZC9mb3VydGggcGFyYW1ldGVyIGlmCisgICAgIiBzcGVjaWZpZWQsIGNoZWNrIGZvciBiZWluZyBlbXB0eSBlbHNlLgorICAgIGZ1bmN0aW9uISBDSEVDSyhuLCAuLi4pCisJWGxvb3BORVhUCisJbGV0IGV4Y2VwdGlvbiA9IGE6MCAhPSAwID8gYToxIDogIiIJIiBzZWNvbmQgcGFyYW1ldGVyIChvcHRpb25hbCkKKwlsZXQgZW1zZyAgICAgID0gYTowICE9IDAgPyBhOjIgOiAiIgkiIHRoaXJkIHBhcmFtZXRlciAob3B0aW9uYWwpCisJbGV0IGxpbmUgICAgICA9IGE6MCAhPSAwID8gYTozIDogMAkiIGZvdXJ0aCBwYXJhbWV0ZXIgKG9wdGlvbmFsKQorCWxldCBlcnJvciA9IDAKKwlpZiBlbXNnICE9ICIiCisJICAgICIgZXhjZXB0aW9uIGlzIHRoZSBlcnJvciBudW1iZXIsIGVtc2cgdGhlIGVuZ2xpc2ggZXJyb3IgbWVzc2FnZSB0ZXh0CisJICAgIGlmIGV4Y2VwdGlvbiAhfiAnXkVcZFwrJCcKKwkJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGVtc2cKKwkgICAgZWxzZWlmIHY6bGFuZyA9PSAiQyIgfHwgdjpsYW5nID1+ICdeW0VlXW4nCisJCWlmIGV4Y2VwdGlvbiA9PSAiRTQ5MiIgJiYgZW1zZyA9PSAiTm90IGFuIGVkaXRvciBjb21tYW5kIgorCQkgICAgbGV0IGV4Y2VwdGlvbiA9ICdeVmltOicgLiBleGNlcHRpb24gLiAnOiAnIC4gZW1zZworCQllbHNlCisJCSAgICBsZXQgZXhjZXB0aW9uID0gJ15WaW0oXGFcKyk6JyAuIGV4Y2VwdGlvbiAuICc6ICcgLiBlbXNnCisJCWVuZGlmCisJICAgIGVsc2UKKwkJaWYgZXhjZXB0aW9uID09ICJFNDkyIgorCQkgICAgbGV0IGV4Y2VwdGlvbiA9ICdeVmltOicgLiBleGNlcHRpb24KKwkJZWxzZQorCQkgICAgbGV0IGV4Y2VwdGlvbiA9ICdeVmltKFxhXCspOicgLiBleGNlcHRpb24KKwkJZW5kaWYKKwkgICAgZW5kaWYKKwllbmRpZgorCWlmIGV4Y2VwdGlvbiA9PSAiIiAmJiB2OmV4Y2VwdGlvbiAhPSAiIgorCSAgICBYb3V0IGE6bi4iOiB2OmV4Y2VwdGlvbiBpcyBzZXQ6IiB2OmV4Y2VwdGlvbgorCSAgICBsZXQgZXJyb3IgPSAxCisJZWxzZWlmIGV4Y2VwdGlvbiAhPSAiIiAmJiB2OmV4Y2VwdGlvbiAhfiBleGNlcHRpb24KKwkgICAgWG91dCBhOm4uIjogdjpleGNlcHRpb24gKCIudjpleGNlcHRpb24uIikgZG9lcyBub3QgbWF0Y2giIGV4Y2VwdGlvbgorCSAgICBsZXQgZXJyb3IgPSAxCisJZW5kaWYKKwlpZiBsaW5lID09IDAgJiYgdjp0aHJvd3BvaW50ICE9ICIiCisJICAgIFhvdXQgYTpuLiI6IHY6dGhyb3dwb2ludCBpcyBzZXQ6IiB2OnRocm93cG9pbnQKKwkgICAgbGV0IGVycm9yID0gMQorCWVsc2VpZiBsaW5lICE9IDAgJiYgdjp0aHJvd3BvaW50ICF+ICdcPCcgLiBsaW5lIC4gJ1w+JworCSAgICBYb3V0IGE6bi4iOiB2OnRocm93cG9pbnQgKCIudjp0aHJvd3BvaW50LiIpIGRvZXMgbm90IG1hdGNoIiBsaW5lCisJICAgIGxldCBlcnJvciA9IDEKKwllbmRpZgorCWlmICFlcnJvcgorCSAgICBYbG9vcCAxCQkJCSIgWDogMjA5NzE1MQorCWVuZGlmCisgICAgZW5kZnVuY3Rpb24KKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgdGhyb3cgIngxIgorCWNhdGNoIC8uKi8KKwkgICAgYnJlYWsKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIGNhbGwgQ0hFQ0soMSkKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgdGhyb3cgIngyIgorCWNhdGNoIC8uKi8KKwkgICAgYnJlYWsKKwlmaW5hbGx5CisJICAgIGNhbGwgQ0hFQ0soMikKKwllbmR0cnkKKwlicmVhaworICAgIGVuZHdoaWxlCisgICAgY2FsbCBDSEVDSygzKQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgZXJyY2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisJCSAgICB0aHJvdyAieDMiCisJCWNhdGNoIC8uKi8KKwkJICAgIFNldExpbmVOdW1iZXIgbGluZV9iZWZvcmVfZXJyb3IKKwkJICAgIGFzZGYKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC8uKi8KKwkJbGV0IGVycmNhdWdodCA9IDEKKwkJY2FsbCBDSEVDSyg0LCAnRTQ5MicsICJOb3QgYW4gZWRpdG9yIGNvbW1hbmQiLAorCQkgICAgXCBsaW5lX2JlZm9yZV9lcnJvciArIDEpCisJICAgIGVuZHRyeQorCWZpbmFsbHkKKwkgICAgaWYgIWVycmNhdWdodCAmJiAkVklNTk9FUlJUSFJPVworCQljYWxsIENIRUNLKDQpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBjYWxsIENIRUNLKDUpCisKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMjA5NzE1MgorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgaW50Y2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisJCSAgICB0aHJvdyAieDQiCisJCWNhdGNoIC8uKi8KKwkJICAgIFNldExpbmVOdW1iZXIgdHdvX2xpbmVzX2JlZm9yZV9pbnRlcnJ1cHQKKwkJICAgICJJTlRFUlJVUFQKKwkJICAgIGxldCBkdW1teSA9IDAKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC8uKi8KKwkJbGV0IGludGNhdWdodCA9IDEKKwkJY2FsbCBDSEVDSyg2LCAiVmltOkludGVycnVwdCIsICcnLAorCQkgICAgXCB0d29fbGluZXNfYmVmb3JlX2ludGVycnVwdCArIDIpCisJICAgIGVuZHRyeQorCWZpbmFsbHkKKwkgICAgaWYgIWludGNhdWdodCAmJiAkVklNTk9JTlRUSFJPVworCQljYWxsIENIRUNLKDYpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgaW50ZXJydXB0IGZvciAkVklNTk9JTlRUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgY2FsbCBDSEVDSyg3KQorCisgICAgWHBhdGggNDE5NDMwNAkJCQkiIFg6IDQxOTQzMDQKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGVycmNhdWdodCA9IDAKKwkgICAgdHJ5CisJCXRyeQorIgkJICAgIGlmIDEKKwkJCVNldExpbmVOdW1iZXIgbGluZV9iZWZvcmVfdGhyb3cKKwkJCXRocm93ICJ4NSIKKwkJICAgICIgbWlzc2luZyBlbmRpZgorCQljYXRjaCAvLiovCisJCSAgICBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJCWVuZHRyeQorCSAgICBjYXRjaCAvLiovCisJCWxldCBlcnJjYXVnaHQgPSAxCisJCWNhbGwgQ0hFQ0soOCwgJ0UxNzEnLCAiTWlzc2luZyA6ZW5kaWYiLCBsaW5lX2JlZm9yZV90aHJvdyArIDMpCisJICAgIGVuZHRyeQorCWZpbmFsbHkKKwkgICAgaWYgIWVycmNhdWdodCAmJiAkVklNTk9FUlJUSFJPVworCQljYWxsIENIRUNLKDgpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBjYWxsIENIRUNLKDkpCisKKyAgICBYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDE2Nzc3MjE2CisKKyAgICB0cnkKKwl3aGlsZSAxCisJICAgIHRyeQorCQl0aHJvdyAieDYiCisJICAgIGZpbmFsbHkKKwkJYnJlYWsKKwkgICAgZW5kdHJ5CisJICAgIGJyZWFrCisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgY2FsbCBDSEVDSygxMCkKKworICAgIHRyeQorCXdoaWxlIDEKKwkgICAgdHJ5CisJCXRocm93ICJ4NyIKKwkgICAgZmluYWxseQorCQlicmVhaworCSAgICBlbmR0cnkKKwkgICAgYnJlYWsKKwllbmR3aGlsZQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDAKKyAgICBmaW5hbGx5CisJY2FsbCBDSEVDSygxMSkKKyAgICBlbmR0cnkKKyAgICBjYWxsIENIRUNLKDEyKQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgZXJyY2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisJCSAgICB0aHJvdyAieDgiCisJCWZpbmFsbHkKKwkJICAgIFNldExpbmVOdW1iZXIgbGluZV9iZWZvcmVfZXJyb3IKKwkJICAgIGFzZGYKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC8uKi8KKwkJbGV0IGVycmNhdWdodCA9IDEKKwkJY2FsbCBDSEVDSygxMywgJ0U0OTInLCAiTm90IGFuIGVkaXRvciBjb21tYW5kIiwKKwkJICAgIFwgbGluZV9iZWZvcmVfZXJyb3IgKyAxKQorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIGlmICFlcnJjYXVnaHQgJiYgJFZJTU5PRVJSVEhST1cKKwkJY2FsbCBDSEVDSygxMykKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIGNhbGwgQ0hFQ0soMTQpCisKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGludGNhdWdodCA9IDAKKwkgICAgdHJ5CisJCXRyeQorCQkgICAgdGhyb3cgIng5IgorCQlmaW5hbGx5CisJCSAgICBTZXRMaW5lTnVtYmVyIHR3b19saW5lc19iZWZvcmVfaW50ZXJydXB0CisJCSAgICAiSU5URVJSVVBUCisJCWVuZHRyeQorCSAgICBjYXRjaCAvLiovCisJCWxldCBpbnRjYXVnaHQgPSAxCisJCWNhbGwgQ0hFQ0soMTUsICJWaW06SW50ZXJydXB0IiwgJycsCisJCSAgICBcIHR3b19saW5lc19iZWZvcmVfaW50ZXJydXB0ICsgMikKKwkgICAgZW5kdHJ5CisJZmluYWxseQorCSAgICBpZiAhaW50Y2F1Z2h0ICYmICRWSU1OT0lOVFRIUk9XCisJCWNhbGwgQ0hFQ0soMTUpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgaW50ZXJydXB0IGZvciAkVklNTk9JTlRUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgY2FsbCBDSEVDSygxNikKKworICAgIFhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDI2ODQzNTQ1NgorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICBsZXQgZXJyY2F1Z2h0ID0gMAorCSAgICB0cnkKKwkJdHJ5CisiCQkgICAgaWYgMQorCQkJU2V0TGluZU51bWJlciBsaW5lX2JlZm9yZV90aHJvdworCQkJdGhyb3cgIngxMCIKKwkJICAgICIgbWlzc2luZyBlbmRpZgorCQlmaW5hbGx5CisJCSAgICBjYWxsIENIRUNLKDE3KQorCQllbmR0cnkKKwkgICAgY2F0Y2ggLy4qLworCQlsZXQgZXJyY2F1Z2h0ID0gMQorCQljYWxsIENIRUNLKDE4LCAnRTE3MScsICJNaXNzaW5nIDplbmRpZiIsIGxpbmVfYmVmb3JlX3Rocm93ICsgMykKKwkgICAgZW5kdHJ5CisJZmluYWxseQorCSAgICBpZiAhZXJyY2F1Z2h0ICYmICRWSU1OT0VSUlRIUk9XCisJCWNhbGwgQ0hFQ0soMTgpCisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKyAgICBjYWxsIENIRUNLKDE5KQorCisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogNTM2ODcwOTEyCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBlcnJjYXVnaHQgPSAwCisJICAgIHRyeQorCQl0cnkKKyIJCSAgICBpZiAxCisJCQlTZXRMaW5lTnVtYmVyIGxpbmVfYmVmb3JlX3Rocm93CisJCQl0aHJvdyAieDExIgorCQkgICAgIiBtaXNzaW5nIGVuZGlmCisJCWVuZHRyeQorCSAgICBjYXRjaCAvLiovCisJCWxldCBlcnJjYXVnaHQgPSAxCisJCWNhbGwgQ0hFQ0soMjAsICdFMTcxJywgIk1pc3NpbmcgOmVuZGlmIiwgbGluZV9iZWZvcmVfdGhyb3cgKyAzKQorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIGlmICFlcnJjYXVnaHQgJiYgJFZJTU5PRVJSVEhST1cKKwkJY2FsbCBDSEVDSygyMCkKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorICAgIGNhbGwgQ0hFQ0soMjEpCisKKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMTA3Mzc0MTgyNAorCitlbmRpZgorCitYY2hlY2sgMjAzODQzMTc0MworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiCisiIFRlc3QgNjA6ICAoUmUpdGhyb3dpbmcgdjpleGNlcHRpb247IDplY2hvZXJyLgkJCQkgICAge3t7MQorIgorIgkgICAgQSB1c2VyIGV4Y2VwdGlvbiBjYW4gYmUgcmV0aHJvd24gYWZ0ZXIgY2F0Y2hpbmcgYnkgdGhyb3dpbmcKKyIJICAgIHY6ZXhjZXB0aW9uLiAgQW4gZXJyb3Igb3IgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYW5ub3QgYmUgcmV0aHJvd24KKyIJICAgIGJlY2F1c2UgVmltIGV4Y2VwdGlvbnMgY2Fubm90IGJlIGZha2VkLiAgQSBWaW0gZXhjZXB0aW9uIHVzaW5nIHRoZQorIgkgICAgdmFsdWUgb2YgdjpleGNlcHRpb24gY2FuLCBob3dldmVyLCBiZSB0cmlnZ2VyZWQgYnkgdGhlIDplY2hvZXJyCisiCSAgICBjb21tYW5kLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK3RyeQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRocm93ICJvb3BzIgorICAgIGNhdGNoIC9vb3BzLworCVhwYXRoIDIJCQkJCSIgWDogMgorCXRocm93IHY6ZXhjZXB0aW9uCSIgcmV0aHJvdyB1c2VyIGV4Y2VwdGlvbgorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA0CQkJCQkiIFg6IDAKKyAgICBlbmR0cnkKK2NhdGNoIC9eb29wcyQvCQkJIiBjYXRjaGVzIHJldGhyb3duIHVzZXIgZXhjZXB0aW9uCisgICAgWHBhdGggOAkJCQkJIiBYOiA4CitjYXRjaCAvLiovCisgICAgWHBhdGggMTYJCQkJCSIgWDogMAorZW5kdHJ5CisKK2Z1bmN0aW9uISBGKCkKKyAgICB0cnkKKwlsZXQgY2F1Z2h0ID0gMAorCXRyeQorCSAgICBYcGF0aCAzMgkJCQkiIFg6IDMyCisJICAgIHdyaXRlIC9uL28vbi93L3IvaS90L2EvYi9sL2UvXy9mL2kvbC9lCisJICAgIFhwYXRoIDY0CQkJCSIgWDogMAorCSAgICBYb3V0ICJkaWRfZW1zZyB3YXMgcmVzZXQgYmVmb3JlIGV4ZWN1dGluZyAiIC4KKwkJXCAiQnVmV3JpdGVQb3N0IGF1dG9jb21tYW5kcy4iCisJY2F0Y2ggL15WaW0od3JpdGUpOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgdGhyb3cgdjpleGNlcHRpb24JIiB0aHJvdyBlcnJvcjogY2Fubm90IGZha2UgVmltIGV4Y2VwdGlvbgorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMTI4CQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMjU2CQkJCSIgWDogMjU2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDUxMgkJCSIgWDogMAorCSAgICBlbmRpZgorCWVuZHRyeQorICAgIGNhdGNoIC9eVmltKHRocm93KTovCSIgY2F0Y2hlcyB0aHJvdyBlcnJvcgorCWxldCBjYXVnaHQgPSBjYXVnaHQgKyAxCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDEwMjQJCQkJIiBYOiAwCisgICAgZmluYWxseQorCVhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJaWYgY2F1Z2h0ICE9IDIKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggNDA5NgkJCSIgWDogMAorCSAgICBlbHNlaWYgY2F1Z2h0CisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgcmV0dXJuCQl8ICIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmRpZgorICAgIGVuZHRyeQorZW5kZnVuY3Rpb24KKworY2FsbCBGKCkKK2RlbGZ1bmN0aW9uIEYKKworZnVuY3Rpb24hIEcoKQorICAgIHRyeQorCWxldCBjYXVnaHQgPSAwCisJdHJ5CisJICAgIFhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKwkgICAgYXNkZgorCWNhdGNoIC9eVmltLwkJIiBjYXRjaCBlcnJvciBleGNlcHRpb24KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgIiBUcmlnZ2VyIFZpbSBlcnJvciBleGNlcHRpb24gd2l0aCB2YWx1ZSBzcGVjaWZpZWQgYWZ0ZXIgOmVjaG9lcnIKKwkgICAgbGV0IHZhbHVlID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKCguKilcKVw9OicsICcnLCAiIikKKwkgICAgZWNob2VyciB2YWx1ZQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIGlmICFjYXVnaHQKKwkJaWYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAxMzEwNzIJCSIgWDogMAorCQllbHNlCisJCSAgICBsZXQgdmFsdWUgPSAiRXJyb3IiCisJCSAgICBlY2hvZXJyIHZhbHVlCisJCWVuZGlmCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggL15WaW0oZWNob2Vycik6LworCWxldCBjYXVnaHQgPSBjYXVnaHQgKyAxCisJaWYgdjpleGNlcHRpb24gIX4gdmFsdWUKKwkgICAgWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJZW5kaWYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorICAgIGZpbmFsbHkKKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMTA0ODU3NgorCWlmIGNhdWdodCAhPSAyCisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDIwOTcxNTIJCQkiIFg6IDAKKwkgICAgZWxzZWlmIGNhdWdodAorCQlYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIHJldHVybgkJfCAiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kaWYKKyAgICBlbmR0cnkKK2VuZGZ1bmN0aW9uCisKK2NhbGwgRygpCitkZWxmdW5jdGlvbiBHCisKK3VubGV0ISB2YWx1ZSBjYXVnaHQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCWxldCBlcnJjYXVnaHQgPSAwCisJdHJ5CisJICAgIFhwYXRoIDgzODg2MDgJCQkiIFg6IDgzODg2MDgKKwkgICAgbGV0IGludGNhdWdodCA9IDAKKwkgICAgIklOVEVSUlVQVAorCWNhdGNoIC9eVmltOi8JCSIgY2F0Y2ggaW50ZXJydXB0IGV4Y2VwdGlvbgorCSAgICBsZXQgaW50Y2F1Z2h0ID0gMQorCSAgICAiIFRyaWdnZXIgVmltIGVycm9yIGV4Y2VwdGlvbiB3aXRoIHZhbHVlIHNwZWNpZmllZCBhZnRlciA6ZWNob2VycgorCSAgICBlY2hvZXJyIHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoLiopXClcPTonLCAnJywgIiIpCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDMzNTU0NDMyCisJICAgIGlmICFpbnRjYXVnaHQKKwkJaWYgISRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCA2NzEwODg2NAkJIiBYOiAwCisJCWVsc2UKKwkJICAgIGVjaG9lcnIgIkludGVycnVwdCIKKwkJZW5kaWYKKwkgICAgZW5kaWYKKwllbmR0cnkKKyAgICBjYXRjaCAvXlZpbShlY2hvZXJyKTovCisJbGV0IGVycmNhdWdodCA9IDEKKwlpZiB2OmV4Y2VwdGlvbiAhfiAiSW50ZXJydXB0IgorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwllbmRpZgorICAgIGZpbmFsbHkKKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAyNjg0MzU0NTYKKwlpZiAhZXJyY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCSAgICBYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDAKKwllbmRpZgorICAgIGVuZHRyeQorZW5kaWYKKworWGNoZWNrIDMxMTUxMTMzOQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNjE6ICBDYXRjaGluZyBpbnRlcnJ1cHQgZXhjZXB0aW9ucwkJCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzIGluc2lkZSBhIDp0cnkvOmVuZHRyeSByZWdpb24sIGFuCisiCSAgICBpbnRlcnJ1cHQgZXhjZXB0aW9uIGlzIHRocm93biBhbmQgY2FuIGJlIGNhdWdodC4gIEl0cyB2YWx1ZSBpcworIgkgICAgIlZpbTpJbnRlcnJ1cHQiLiAgSWYgdGhlIGludGVycnVwdCBvY2N1cnMgYWZ0ZXIgYW4gZXJyb3Igb3IgYSA6dGhyb3cKKyIJICAgIGJ1dCBiZWZvcmUgYSBtYXRjaGluZyA6Y2F0Y2ggaXMgcmVhY2hlZCwgYWxsIGZvbGxvd2luZyA6Y2F0Y2hlcyBvZgorIgkgICAgdGhhdCB0cnkgYmxvY2sgYXJlIGlnbm9yZWQsIGJ1dCB0aGUgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYW4gYmUKKyIJICAgIGNhdWdodCBieSB0aGUgbmV4dCBzdXJyb3VuZGluZyB0cnkgY29uZGl0aW9uYWwuICBBbiBpbnRlcnJ1cHQgaXMKKyIJICAgIGlnbm9yZWQgd2hlbiB0aGVyZSBpcyBhIHByZXZpb3VzIGludGVycnVwdCB0aGF0IGhhcyBub3QgYmVlbiBjYXVnaHQKKyIJICAgIG9yIGNhdXNlcyBhIDpmaW5hbGx5IGNsYXVzZSB0byBiZSBleGVjdXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlYcGF0aCAxCQkJCSIgWDogMQorCQlsZXQgY2F1Z2h0ID0gMAorCQkiSU5URVJSVVBUCisJCVhwYXRoIDIJCQkJIiBYOiAwCisJICAgIGNhdGNoIC9eVmltOkludGVycnVwdCQvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggNAkJCQkiIFg6IDQKKwkJaWYgY2F1Z2h0IHx8ICRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCA4CQkJIiBYOiA4CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMTYJCQkJIiBYOiAwCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKwlmaW5hbGx5CisJICAgIGJyZWFrCQkiIGRpc2NhcmQgaW50ZXJydXB0IGZvciAkVklNTk9JTlRUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQl0cnkKKwkJICAgIFhwYXRoIDMyCQkJIiBYOiAzMgorCQkgICAgYXNkZgorCQkgICAgWHBhdGggNjQJCQkiIFg6IDAKKwkJY2F0Y2ggL2RvX25vdF9jYXRjaC8KKwkJICAgIFhwYXRoIDEyOAkJCSIgWDogMAorCQljYXRjaCAvLiovCSJJTlRFUlJVUFQgLSB0aHJvdyBpbnRlcnJ1cHQgaWYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAyNTYJCQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICAgWHBhdGggNTEyCQkJIiBYOiAwCisJCWZpbmFsbHkJCSJJTlRFUlJVUFQgLSB0aHJvdyBpbnRlcnJ1cHQgaWYgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDEwMjQJCQkiIFg6IDEwMjQKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC9eVmltOkludGVycnVwdCQvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMjA0OAkJCSIgWDogMjA0OAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PSU5UVEhST1cKKwkJICAgIFhwYXRoIDQwOTYJCQkiIFg6IDQwOTYKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCA4MTkyCQkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGludGVycnVwdCBmb3IgJFZJTU5PSU5UVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICB0cnkKKwkJbGV0IGNhdWdodCA9IDAKKwkJdHJ5CisJCSAgICBYcGF0aCAxNjM4NAkJCSIgWDogMTYzODQKKwkJICAgIHRocm93ICJ4IgorCQkgICAgWHBhdGggMzI3NjgJCQkiIFg6IDAKKwkJY2F0Y2ggL2RvX25vdF9jYXRjaC8KKwkJICAgIFhwYXRoIDY1NTM2CQkJIiBYOiAwCisJCWNhdGNoIC94LwkiSU5URVJSVVBUCisJCSAgICBYcGF0aCAxMzEwNzIJCSIgWDogMAorCQljYXRjaCAvLiovCisJCSAgICBYcGF0aCAyNjIxNDQJCSIgWDogMAorCQllbmR0cnkKKwkgICAgY2F0Y2ggL15WaW06SW50ZXJydXB0JC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCA1MjQyODgJCQkiIFg6IDUyNDI4OAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PSU5UVEhST1cKKwkJICAgIFhwYXRoIDEwNDg1NzYJCSIgWDogMTA0ODU3NgorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWZpbmFsbHkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBpbnRlcnJ1cHQgZm9yICRWSU1OT0lOVFRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgdHJ5CisJCVhwYXRoIDQxOTQzMDQJCQkiIFg6IDQxOTQzMDQKKwkJIklOVEVSUlVQVAorCQlYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJICAgIGNhdGNoIC9kb19ub3RfY2F0Y2gvICJJTlRFUlJVUFQKKwkJWHBhdGggMTY3NzcyMTYJCQkiIFg6IDAKKwkgICAgY2F0Y2ggL15WaW06SW50ZXJydXB0JC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCAzMzU1NDQzMgkJCSIgWDogMzM1NTQ0MzIKKwkJaWYgY2F1Z2h0IHx8ICRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCA2NzEwODg2NAkJIiBYOiA2NzEwODg2NAorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDEzNDIxNzcyOAkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGludGVycnVwdCBmb3IgJFZJTU5PSU5UVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMjY4NDM1NDU2CisKK2VuZGlmCisKK1hjaGVjayAzNzQ4ODk1MTcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDYyOiAgQ2F0Y2hpbmcgZXJyb3IgZXhjZXB0aW9ucwkJCQkJICAgIHt7ezEKKyIKKyIJICAgIEFuIGVycm9yIGluc2lkZSBhIDp0cnkvOmVuZHRyeSByZWdpb24gaXMgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbgorIgkgICAgYW5kIGNhbiBiZSBjYXVnaHQuICBUaGUgZXJyb3IgZXhjZXB0aW9uIGhhcyBhICJWaW0oY21kbmFtZSk6IiBwcmVmaXgKKyIJICAgIHdoZXJlIGNtZG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGZhaWxpbmcgY29tbWFuZCwgb3IgYSAiVmltOiIgcHJlZml4CisiCSAgICBpZiBubyBjb21tYW5kIG5hbWUgaXMga25vd24uICBUaGUgIlZpbSIgcHJlZml4ZXMgY2Fubm90IGJlIGZha2VkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBNU0coZW5yLCBlbXNnKQorICAgIGxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKyAgICBpZiBhOmVuciA9PSAiIgorCVhvdXQgIlRPRE86IEFkZCBtZXNzYWdlIG51bWJlciBmb3I6IiBhOmVtc2cKKwlsZXQgdjplcnJtc2cgPSAiOiIgLiB2OmVycm1zZworICAgIGVuZGlmCisgICAgbGV0IG1hdGNoID0gMQorICAgIGlmIHY6ZXJybXNnICF+ICdeJy5hOmVuci4nOicgfHwgKGVuZ2xpc2ggJiYgdjplcnJtc2cgIX4gYTplbXNnKQorCWxldCBtYXRjaCA9IDAKKwlpZiB2OmVycm1zZyA9PSAiIgorCSAgICBYb3V0ICJNZXNzYWdlIG1pc3NpbmcuIgorCWVsc2UKKwkgICAgbGV0IHY6ZXJybXNnID0gZXNjYXBlKHY6ZXJybXNnLCAnIicpCisJICAgIFhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIHY6ZXJybXNnCisJZW5kaWYKKyAgICBlbmRpZgorICAgIHJldHVybiBtYXRjaAorZW5kZnVuY3Rpb24KKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICB1bmxldCBub3ZhcgorCWNhdGNoIC9eVmltKHVubGV0KTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKHVubGV0KTonLCAnJywgIiIpCisJZmluYWxseQorCSAgICBYcGF0aCAxCQkJCSIgWDogMQorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAyCQkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFMTA4JywgIk5vIHN1Y2ggdmFyaWFibGUiKQorCQlYcGF0aCA0CQkJCSIgWDogMAorCSAgICBlbmRpZgorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA4CQkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIHRocm93IG5vdmFyCQkJIiBlcnJvciBpbiA6dGhyb3cKKwljYXRjaCAvXlZpbSh0aHJvdyk6LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbSh0aHJvdyk6JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAzMgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBjYXVnaHQgPyAhTVNHKCdFMTIxJywgIlVuZGVmaW5lZCB2YXJpYWJsZSIpCisJCQlcIDogIU1TRygnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisJCVhwYXRoIDY0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDEyOAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIHRocm93ICJWaW06ZmFrZWQiCQkiIGVycm9yOiBjYW5ub3QgZmFrZSBWaW0gZXhjZXB0aW9uCisJY2F0Y2ggL15WaW0odGhyb3cpOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW0odGhyb3cpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCA1MTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTYwOCcsICJDYW5ub3QgOnRocm93IGV4Y2VwdGlvbnMgd2l0aCAnVmltJyBwcmVmaXgiKQorCQlYcGF0aCAxMDI0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKworZnVuY3Rpb24hIEYoKQorICAgIHdoaWxlIDEKKyAgICAiIE1pc3NpbmcgOmVuZHdoaWxlCitlbmRmdW5jdGlvbgorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGNhbGwgRigpCisJY2F0Y2ggL15WaW0oZW5kZnVuY3Rpb24pOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW0oZW5kZnVuY3Rpb24pOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTE3MCcsICJNaXNzaW5nIDplbmR3aGlsZSIpCisJCVhwYXRoIDE2Mzg0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK3doaWxlIDEKKyAgICB0cnkKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgRXhlY0FzU2NyaXB0IEYKKwljYXRjaCAvXlZpbTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggMTMxMDcyCQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmICFNU0coJ0UxNzAnLCAiTWlzc2luZyA6ZW5kd2hpbGUiKQorCQlYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK2Z1bmN0aW9uISBHKCkKKyAgICBjYWxsIEcoKQorZW5kZnVuY3Rpb24KKword2hpbGUgMQorICAgIHRyeQorCWxldCBtZmRfc2F2ZSA9ICZtZmQKKwlzZXQgbWZkPTMKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgY2FsbCBHKCkKKwljYXRjaCAvXlZpbShjYWxsKTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKGNhbGwpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFMTMyJywgIkZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciKQorCQlYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlsZXQgJm1mZCA9IG1mZF9zYXZlCisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK2Z1bmN0aW9uISBIKCkKKyAgICByZXR1cm4gSCgpCitlbmRmdW5jdGlvbgorCit3aGlsZSAxCisgICAgdHJ5CisJbGV0IG1mZF9zYXZlID0gJm1mZAorCXNldCBtZmQ9MworCXRyeQorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBjYWxsIEgoKQorCWNhdGNoIC9eVmltKHJldHVybik6LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbShyZXR1cm4pOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAxNjc3NzIxNgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAzMzU1NDQzMgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFMTMyJywgIkZ1bmN0aW9uIGNhbGwgZGVwdGggaXMgaGlnaGVyIHRoYW4gJ21heGZ1bmNkZXB0aCciKQorCQlYcGF0aCA2NzEwODg2NAkJCSIgWDogMAorCSAgICBlbmRpZgorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlsZXQgJm1mZCA9IG1mZF9zYXZlCisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK3VubGV0ISBjYXVnaHQgbWZkX3NhdmUKK2RlbGZ1bmN0aW9uIEYKK2RlbGZ1bmN0aW9uIEcKK2RlbGZ1bmN0aW9uIEgKK1hwYXRoIDI2ODQzNTQ1NgkJCQkJIiBYOiAyNjg0MzU0NTYKKworWGNoZWNrIDI4NjMzMTE1MworCisiIExlYXZlIE1TRygpIGZvciB0aGUgbmV4dCB0ZXN0LgorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgNjM6ICBTdXBwcmVzc2luZyBlcnJvciBleGNlcHRpb25zIGJ5IDpzaWxlbnQhLgkJCSAgICB7e3sxCisiCisiCSAgICBBIDpzaWxlbnQhIGNvbW1hbmQgaW5zaWRlIGEgOnRyeS86ZW5kdHJ5IHJlZ2lvbiBzdXBwcmVzc2VzIHRoZQorIgkgICAgY29udmVyc2lvbiBvZiBlcnJvcnMgdG8gYW4gZXhjZXB0aW9uIGFuZCB0aGUgaW1tZWRpYXRlIGFib3J0aW9uIG9uCisiCSAgICBlcnJvci4gIFdoZW4gdGhlIGNvbW1hbmRzIGV4ZWN1dGVkIGJ5IHRoZSA6c2lsZW50ISB0aGVtc2VsdmVzIG9wZW4KKyIJICAgIGEgbmV3IDp0cnkvOmVuZHRyeSByZWdpb24sIGNvbnZlcnNpb24gb2YgZXJyb3JzIHRvIGV4Y2VwdGlvbiBhbmQKKyIJICAgIGltbWVkaWF0ZSBhYm9ydGlvbiBpcyBzd2l0Y2hlZCBvbiBhZ2FpbiAtIHVudGlsIHRoZSBuZXh0IDpzaWxlbnQhCisiCSAgICBldGMuICBUaGUgOnNpbGVudCEgaGFzIHRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB2OmVycm1zZyB0byB0aGUgZXJyb3IKKyIJICAgIG1lc3NhZ2UgdGV4dCAod2l0aG91dCBkaXNwbGF5aW5nIGl0KSBhbmQgY29udGludWluZyB3aXRoIHRoZSBuZXh0CisiCSAgICBzY3JpcHQgbGluZS4KKyIKKyIJICAgIFdoZW4gYSBjb21tYW5kIHRyaWdnZXJpbmcgYXV0b2NvbW1hbmRzIGlzIGV4ZWN1dGVkIGJ5IDpzaWxlbnQhCisiCSAgICBpbnNpZGUgYSA6dHJ5LzplbmR0cnksIHRoZSBhdXRvY29tbWFuZCBleGVjdXRpb24gaXMgbm90IHN1cHByZXNzZWQKKyIJICAgIG9uIGVycm9yLgorIgorIgkgICAgVGhpcyB0ZXN0IHJldXNlcyB0aGUgZnVuY3Rpb24gTVNHKCkgZnJvbSB0aGUgcHJldmlvdXMgdGVzdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYbG9vcElOSVQhIDEgNAorCitsZXQgdGFrZW4gPSAiIgorCitmdW5jdGlvbiEgUyhuKSBhYm9ydAorICAgIFhsb29wTkVYVAorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJFIiAuIGE6bgorICAgIGxldCB2OmVycm1zZyA9ICIiCisgICAgZXhlYyAiYXNkZiIgLiBhOm4KKworICAgICIgQ2hlY2sgdGhhdCAiOnNpbGVudCEiIGNvbnRpbnVlczoKKyAgICBYbG9vcCAxCisKKyAgICAiIENoZWNrIHRoYXQgIjpzaWxlbnQhIiBzZXRzICJ2OmVycm1zZyI6CisgICAgaWYgTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJWGxvb3AgMgorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRm9vKCkKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQkiIFRoaXMgaXMgbm90IHNpbGVudDoKKwkJY2FsbCBTKDMpCQkJCSIgWDogMCAqIDE2CisJICAgIGNhdGNoIC9eVmltOi8KKwkJbGV0IGNhdWdodCA9IDEKKwkJbGV0IGVycm1zZzMgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbTonLCAnJywgIiIpCisJCXNpbGVudCEgY2FsbCBTKDQpCQkJIiBYOiAzICogNjQKKwkgICAgZmluYWxseQorCQlpZiAhY2F1Z2h0CisJCSAgICBsZXQgZXJybXNnMyA9IHY6ZXJybXNnCisJCSAgICAiIERvIGNhbGwgUyg0KSBoZXJlIGlmIG5vdCBleGVjdXRlZCBpbiA6Y2F0Y2guCisJCSAgICBzaWxlbnQhIGNhbGwgUyg0KQorCQllbmRpZgorCQlYcGF0aCAxMDQ4NTc2CQkJIiBYOiAxMDQ4NTc2CisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAyMDk3MTUyCQkiIFg6IDAKKwkJZW5kaWYKKwkJbGV0IHY6ZXJybXNnID0gZXJybXNnMworCQlpZiAhTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJCSAgICBYcGF0aCA0MTk0MzA0CQkiIFg6IDAKKwkJZW5kaWYKKwkJc2lsZW50ISBjYWxsIFMoNSkJCQkiIFg6IDMgKiAyNTYKKwkJIiBCcmVhayBvdXQgb2YgdHJ5IGNvbmRzIHRoYXQgY292ZXIgIjpzaWxlbnQhIi4gIFRoaXMgYWxzbworCQkiIGRpc2NhcmRzIHRoZSBhYm9ydGluZyBlcnJvciB3aGVuICRWSU1OT0VSUlRIUk9XIGlzIG5vbi16ZXJvLgorCQlicmVhaworCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDgzODg2MDgJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgIiBUaGlzIGlzIGEgZG91YmxlICI6c2lsZW50ISIgKHNlZSBjYWxsZXIpLgorICAgIHNpbGVudCEgY2FsbCBTKDYpCQkJCQkiIFg6IDMgKiAxMDI0CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgQmFyKCkKKyAgICB0cnkKKwlzaWxlbnQhIGNhbGwgUygyKQkJCQkiIFg6IDMgKiA0CisJCQkJCQkJIiBYOiAzICogNDA5NgorCXNpbGVudCEgZXhlY3V0ZSAiY2FsbCBGb28oKSB8IGNhbGwgUyg3KSIKKwlzaWxlbnQhIGNhbGwgUyg4KQkJCQkiIFg6IDMgKiAxNjM4NAorICAgIGVuZHRyeQkiIG5vcm1hbCBlbmQgb2YgdHJ5IGNvbmQgdGhhdCBjb3ZlcnMgIjpzaWxlbnQhIgorICAgICIgVGhpcyBoYXMgYSAiOnNpbGVudCEiIGZyb20gdGhlIGNhbGxlcjoKKyAgICBjYWxsIFMoOSkJCQkJCQkiIFg6IDMgKiA2NTUzNgorZW5kZnVuY3Rpb24KKworc2lsZW50ISBjYWxsIFMoMSkJCQkJCSIgWDogMyAqIDEKK3NpbGVudCEgY2FsbCBCYXIoKQorc2lsZW50ISBjYWxsIFMoMTApCQkJCQkiIFg6IDMgKiAyNjIxNDQKKworbGV0IGV4cGVjdGVkID0gIkUxRTJFM0U0RTVFNkU3RThFOUUxMCIKK2lmIHRha2VuICE9IGV4cGVjdGVkCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAwCisgICAgWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCitlbmRpZgorCithdWdyb3VwIFRNUAorICAgIGF1dG9jbWQgQnVmV3JpdGVQb3N0ICogWHBhdGggMzM1NTQ0MzIJIiBYOiAzMzU1NDQzMgorYXVncm91cCBFTkQKKworWHBhdGggNjcxMDg4NjQJCQkJCSIgWDogNjcxMDg4NjQKK3dyaXRlIC9pL20vcC9vL3Mvcy9pL2IvbC9lCitYcGF0aCAxMzQyMTc3MjgJCQkJCSIgWDogMTM0MjE3NzI4CisKK2F1dG9jbWQhIFRNUAordW5sZXQhIGNhdWdodCBlcnJtc2czIHRha2VuIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBTCitkZWxmdW5jdGlvbiBGb28KK2RlbGZ1bmN0aW9uIEJhcgorZGVsZnVuY3Rpb24gTVNHCisKK1hjaGVjayAyMzY5NzgxMjcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY0OiAgRXJyb3IgZXhjZXB0aW9ucyBhZnRlciBlcnJvciwgaW50ZXJydXB0IG9yIDp0aHJvdwkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzIGFmdGVyIGFuIGludGVycnVwdCBvciBhIDp0aHJvdyBidXQgYmVmb3JlCisiCSAgICBhIG1hdGNoaW5nIDpjYXRjaCBpcyByZWFjaGVkLCBhbGwgZm9sbG93aW5nIDpjYXRjaGVzIG9mIHRoYXQgdHJ5CisiCSAgICBibG9jayBhcmUgaWdub3JlZCwgYnV0IHRoZSBlcnJvciBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieSB0aGUgbmV4dAorIgkgICAgc3Vycm91bmRpbmcgdHJ5IGNvbmRpdGlvbmFsLiAgQW55IHByZXZpb3VzIGVycm9yIGV4Y2VwdGlvbiBpcworIgkgICAgZGlzY2FyZGVkLiAgQW4gZXJyb3IgaXMgaWdub3JlZCB3aGVuIHRoZXJlIGlzIGEgcHJldmlvdXMgZXJyb3IgdGhhdAorIgkgICAgaGFzIG5vdCBiZWVuIGNhdWdodC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlYcGF0aCAxCQkJCSIgWDogMQorCQlsZXQgY2F1Z2h0ID0gMAorCQl3aGlsZSAxCisiCQkgICAgaWYgMQorCQkgICAgIiBNaXNzaW5nIDplbmRpZgorCQllbmR3aGlsZQkiIHRocm93IGVycm9yIGV4Y2VwdGlvbgorCSAgICBjYXRjaCAvXlZpbSgvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMgkJCQkiIFg6IDIKKwkJaWYgY2F1Z2h0IHx8ICRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCA0CQkJIiBYOiA0CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggOAkJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWZpbmFsbHkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgd2hpbGUgMQorCXRyeQorCSAgICB0cnkKKwkJWHBhdGggMTYJCQkiIFg6IDE2CisJCWxldCBjYXVnaHQgPSAwCisJCXRyeQorIgkJICAgIGlmIDEKKwkJICAgICIgTWlzc2luZyA6ZW5kaWYKKwkJY2F0Y2ggLy4qLwkiIHRocm93IGVycm9yIGV4Y2VwdGlvbgorCQkgICAgWHBhdGggMzIJCQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICAgWHBhdGggNjQJCQkiIFg6IDAKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC9eVmltKC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCAxMjgJCQkiIFg6IDEyOAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDI1NgkJCSIgWDogMjU2CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggNTEyCQkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQl0cnkKKwkJICAgIFhwYXRoIDEwMjQJCQkiIFg6IDEwMjQKKwkJICAgICJJTlRFUlJVUFQKKwkJY2F0Y2ggL2RvX25vdF9jYXRjaC8KKwkJICAgIFhwYXRoIDIwNDgJCQkiIFg6IDAKKyIJCSAgICBpZiAxCisJCSAgICAiIE1pc3NpbmcgOmVuZGlmCisJCWNhdGNoIC8uKi8JIiB0aHJvdyBlcnJvciBleGNlcHRpb24KKwkJICAgIFhwYXRoIDQwOTYJCQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICAgWHBhdGggODE5MgkJCSIgWDogMAorCQllbmR0cnkKKwkgICAgY2F0Y2ggL15WaW0oLworCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDE2Mzg0CQkJIiBYOiAxNjM4NAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDMyNzY4CQkJIiBYOiAzMjc2OAorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQl0cnkKKwkJICAgIFhwYXRoIDEzMTA3MgkJIiBYOiAxMzEwNzIKKwkJICAgIHRocm93ICJ4IgorCQljYXRjaCAvZG9fbm90X2NhdGNoLworCQkgICAgWHBhdGggMjYyMTQ0CQkiIFg6IDAKKyIJCSAgICBpZiAxCisJCSAgICAiIE1pc3NpbmcgOmVuZGlmCisJCWNhdGNoIC94LwkiIHRocm93IGVycm9yIGV4Y2VwdGlvbgorCQkgICAgWHBhdGggNTI0Mjg4CQkiIFg6IDAKKwkJY2F0Y2ggLy4qLworCQkgICBYcGF0aCAxMDQ4NTc2CQkiIFg6IDAKKwkJZW5kdHJ5CisJICAgIGNhdGNoIC9eVmltKC8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCAyMDk3MTUyCQkJIiBYOiAyMDk3MTUyCisJCWlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVworCQkgICAgWHBhdGggNDE5NDMwNAkJIiBYOiA0MTk0MzA0CisJCWVuZGlmCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogMAorCSAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisJZmluYWxseQorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIHRyeQorCQlsZXQgY2F1Z2h0ID0gMAorCQlYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKyIJCWVuZGlmCQkiIDplbmRpZiB3aXRob3V0IDppZjsgdGhyb3cgZXJyb3IgZXhjZXB0aW9uCisiCQlpZiAxCisJCSIgTWlzc2luZyA6ZW5kaWYKKwkgICAgY2F0Y2ggL2RvX25vdF9jYXRjaC8gIiBpZ25vcmUgbmV3IGVycm9yCisJCVhwYXRoIDMzNTU0NDMyCQkJIiBYOiAwCisJICAgIGNhdGNoIC9eVmltKGVuZGlmKTovCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGNhdGNoIC9eVmltKC8KKwkJWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwkgICAgZmluYWxseQorCQlYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDEzNDIxNzcyOAorCQlpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDI2ODQzNTQ1NgkJIiBYOiAyNjg0MzU0NTYKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWZpbmFsbHkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworZW5kaWYKKworWGNoZWNrIDE0OTk2NDUzMzUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY1OiAgRXJyb3JzIGluIHRoZSAvcGF0dGVybi8gYXJndW1lbnQgb2YgYSA6Y2F0Y2gJCSAgICB7e3sxCisiCisiCSAgICBPbiBhbiBlcnJvciBpbiB0aGUgL3BhdHRlcm4vIGFyZ3VtZW50IG9mIGEgOmNhdGNoLCB0aGUgOmNhdGNoIGRvZXMKKyIJICAgIG5vdCBtYXRjaC4gIEFueSBmb2xsb3dpbmcgOmNhdGNoZXMgb2YgdGhlIHNhbWUgOnRyeS86ZW5kdHJ5IGRvbid0CisiCSAgICBtYXRjaCBlaXRoZXIuICBGaW5hbGx5IGNsYXVzZXMgYXJlIGV4ZWN1dGVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBNU0coZW5yLCBlbXNnKQorICAgIGxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKyAgICBpZiBhOmVuciA9PSAiIgorCVhvdXQgIlRPRE86IEFkZCBtZXNzYWdlIG51bWJlciBmb3I6IiBhOmVtc2cKKwlsZXQgdjplcnJtc2cgPSAiOiIgLiB2OmVycm1zZworICAgIGVuZGlmCisgICAgbGV0IG1hdGNoID0gMQorICAgIGlmIHY6ZXJybXNnICF+ICdeJy5hOmVuci4nOicgfHwgKGVuZ2xpc2ggJiYgdjplcnJtc2cgIX4gYTplbXNnKQorCWxldCBtYXRjaCA9IDAKKwlpZiB2OmVycm1zZyA9PSAiIgorCSAgICBYb3V0ICJNZXNzYWdlIG1pc3NpbmcuIgorCWVsc2UKKwkgICAgbGV0IHY6ZXJybXNnID0gZXNjYXBlKHY6ZXJybXNnLCAnIicpCisJICAgIFhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIHY6ZXJybXNnCisJZW5kaWYKKyAgICBlbmRpZgorICAgIHJldHVybiBtYXRjaAorZW5kZnVuY3Rpb24KKwordHJ5CisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdGhyb3cgIm9vcHMiCisgICAgY2F0Y2ggL15vb3BzJC8KKwlYcGF0aCAyCQkJCQkiIFg6IDIKKyAgICBjYXRjaCAvXCkvCQkiIG5vdCBjaGVja2VkOyBleGNlcHRpb24gaGFzIGFscmVhZHkgYmVlbiBjYXVnaHQKKwlYcGF0aCA0CQkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDgKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxNgkJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK2Z1bmN0aW9uISBGKCkKKyAgICB0cnkKKwlsZXQgY2F1Z2h0ID0gMAorCXRyeQorCSAgICB0cnkKKwkJWHBhdGggMzIJCQkiIFg6IDMyCisJCXRocm93ICJhYiIKKwkgICAgY2F0Y2ggL2FiYy8JIiBkb2VzIG5vdCBjYXRjaAorCQlYcGF0aCA2NAkJCSIgWDogMAorCSAgICBjYXRjaCAvXCkvCSIgZXJyb3I7IGRpc2NhcmRzIGV4Y2VwdGlvbgorCQlYcGF0aCAxMjgJCQkiIFg6IDAKKwkgICAgY2F0Y2ggLy4qLwkiIG5vdCBjaGVja2VkCisJCVhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDUxMgkJCSIgWDogNTEyCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWNhdGNoIC9eYWIkLwkiIGNoZWNrZWQsIGJ1dCBvcmlnaW5hbCBleGNlcHRpb24gaXMgZGlzY2FyZGVkCisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAwCisJY2F0Y2ggL15WaW0oY2F0Y2gpOi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW0oY2F0Y2gpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgY2F1Z2h0ID8gIU1TRygnRTU1JywgJ1VubWF0Y2hlZCBcXCknKQorCQkJXCA6ICFNU0coJ0U0NzUnLCAiSW52YWxpZCBhcmd1bWVudCIpCisJCVhwYXRoIDE2Mzg0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmICFjYXVnaHQKKwkJcmV0dXJuCXwgIiBkaXNjYXJkIGVycm9yCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKK2VuZGZ1bmN0aW9uCisKK2NhbGwgRigpCitYcGF0aCA2NTUzNgkJCQkJIiBYOiA2NTUzNgorCitkZWxmdW5jdGlvbiBNU0cKK2RlbGZ1bmN0aW9uIEYKK3VubGV0ISBjYXVnaHQKKworWGNoZWNrIDcwMTg3CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA2NjogIFN0b3AgcmFuZ2UgOmNhbGwgb24gZXJyb3IsIGludGVycnVwdCwgb3IgOnRocm93CQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIGZ1bmN0aW9uIHdoaWNoIGlzIG11bHRpcGx5IGNhbGxlZCBmb3IgYSByYW5nZSBzaW5jZSBpdAorIgkgICAgZG9lc24ndCBoYW5kbGUgdGhlIHJhbmdlIGl0c2VsZiBoYXMgYW4gZXJyb3IgaW4gYSBjb21tYW5kCisiCSAgICBkeW5hbWljYWxseSBlbmNsb3NlZCBieSA6dHJ5LzplbmR0cnkgb3IgZ2V0cyBhbiBpbnRlcnJ1cHQgb3IKKyIJICAgIGV4ZWN1dGVzIGEgOnRocm93LCBubyBtb3JlIGNhbGxzIGZvciB0aGUgcmVtYWluaW5nIGxpbmVzIGluIHRoZQorIgkgICAgcmFuZ2UgYXJlIG1hZGUuICBPbiBhbiBlcnJvciBpbiBhIGNvbW1hbmQgbm90IGR5bmFtaWNhbGx5IGVuY2xvc2VkCisiCSAgICBieSA6dHJ5LzplbmR0cnksIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhZ2FpbiBmb3IgdGhlIHJlbWFpbmluZworIgkgICAgbGluZXMgaW4gdGhlIHJhbmdlLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGxldCBmaWxlID0gdGVtcG5hbWUoKQorICAgIGV4ZWMgImVkaXQiIGZpbGUKKworICAgIGluc2VydAorbGluZSAxCitsaW5lIDIKK2xpbmUgMworLgorCisgICAgWGxvb3BJTklUISAxIDIKKworICAgIGxldCB0YWtlbiA9ICIiCisgICAgbGV0IGV4cGVjdGVkID0gIkcxRUYxRSgxKUYxRSgyKUYxRSgzKUcyRUYyRSgxKUczSUYzSSgxKUc0VEY0VCgxKUc1QUY1QSgxKSIKKworICAgIGZ1bmN0aW9uISBGKHJlYXNvbiwgbikgYWJvcnQKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRiIgLiBhOm4gLgorCSAgICBcIHN1YnN0aXR1dGUoYTpyZWFzb24sICdcKFxsXCkuKicsICdcdVwxJywgIiIpIC4KKwkgICAgXCAiKCIgLiBsaW5lKCIuIikgLiAiKSIKKworCWlmIGE6cmVhc29uID09ICJlcnJvciIKKwkgICAgYXNkZgorCWVsc2VpZiBhOnJlYXNvbiA9PSAiaW50ZXJydXB0IgorCSAgICAiSU5URVJSVVBUCisJICAgIGxldCBkdW1teSA9IDAKKwllbHNlaWYgYTpyZWFzb24gPT0gInRocm93IgorCSAgICB0aHJvdyAieHl6IgorCWVsc2VpZiBhOnJlYXNvbiA9PSAiYWJvcnRpbmcgZXJyb3IiCisJICAgIFhsb29wTkVYVAorCSAgICBpZiBnOnRha2VuICE9IGc6ZXhwZWN0ZWQKKwkJWGxvb3AgMQkJCQkiIFg6IDAKKwkJWG91dCAiJ3Rha2VuJyBpcyIgZzp0YWtlbiAiaW5zdGVhZCBvZiIgZzpleHBlY3RlZAorCSAgICBlbmRpZgorCSAgICB0cnkKKwkJYndpcGVvdXQhCisJCWNhbGwgZGVsZXRlKGZpbGUpCisJCWFzZGYKKwkgICAgZW5kdHJ5CisJZW5kaWYKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIEcocmVhc29uLCBuKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJHIiAuIGE6biAuCisJICAgIFwgc3Vic3RpdHV0ZShhOnJlYXNvbiwgJ1woXGxcKS4qJywgJ1x1XDEnLCAiIikKKwkxLDNjYWxsIEYoYTpyZWFzb24sIGE6bikKKyAgICBlbmRmdW5jdGlvbgorCisgICAgWHBhdGggOAkJCQkJIiBYOiA4CisgICAgY2FsbCBHKCJlcnJvciIsIDEpCisgICAgdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAxNgorCXRyeQorCSAgICBjYWxsIEcoImVycm9yIiwgMikKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCA2NAkJCQkiIFg6IDY0CisJICAgIHRyeQorCQljYWxsIEcoImludGVycnVwdCIsIDMpCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBmaW5hbGx5CisJCVhwYXRoIDI1NgkJCSIgWDogMjU2CisJCXRyeQorCQkgICAgY2FsbCBHKCJ0aHJvdyIsIDQpCisJCSAgICBYcGF0aCA1MTIJCQkiIFg6IDAKKwkJZW5kdHJ5CisJICAgIGVuZHRyeQorCWVuZHRyeQorICAgIGNhdGNoIC94eXovCisJWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMjA0OAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgRXh0cmFWaW1UaHJvd3BvaW50KCkKKyAgICBlbmR0cnkKKyAgICBYcGF0aCA0MDk2CQkJCQkiIFg6IDQwOTYKKyAgICBjYWxsIEcoImFib3J0aW5nIGVycm9yIiwgNSkKKyAgICBYcGF0aCA4MTkyCQkJCQkiIFg6IDAKKyAgICBYb3V0ICIndGFrZW4nIGlzIiB0YWtlbiAiaW5zdGVhZCBvZiIgZXhwZWN0ZWQKKworZW5kaWYKKworWGNoZWNrIDU0NjQKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY3OiAgOnRocm93IGFjY3Jvc3MgOmNhbGwgY29tbWFuZAkJCQkgICAge3t7MQorIgorIgkgICAgT24gYSBjYWxsIGNvbW1hbmQsIGFuIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gd2hlbiBldmFsdWF0aW5nIHRoZQorIgkgICAgZnVuY3Rpb24gbmFtZSwgZHVyaW5nIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cywgb3Igd2hlbiB0aGUKKyIJICAgIGZ1bmN0aW9uIGlzIGJlaW5nIGV4ZWN1dGVkLiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUgY2F1Z2h0IGJ5IHRoZQorIgkgICAgY2FsbGVyLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBUSFJPVyh4LCBuKQorICAgIGlmIGE6biA9PSAxCisJWHBhdGggMQkJCQkJIiBYOiAxCisgICAgZWxzZWlmIGE6biA9PSAyCisJWHBhdGggMgkJCQkJIiBYOiAyCisgICAgZWxzZWlmIGE6biA9PSAzCisJWHBhdGggNAkJCQkJIiBYOiA0CisgICAgZW5kaWYKKyAgICB0aHJvdyBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBOQU1FKHgsIG4pCisgICAgaWYgYTpuID09IDEKKwlYcGF0aCA4CQkJCQkiIFg6IDAKKyAgICBlbHNlaWYgYTpuID09IDIKKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisgICAgZWxzZWlmIGE6biA9PSAzCisJWHBhdGggMzIJCQkJIiBYOiAzMgorICAgIGVsc2VpZiBhOm4gPT0gNAorCVhwYXRoIDY0CQkJCSIgWDogNjQKKyAgICBlbmRpZgorICAgIHJldHVybiBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBBUkcoeCwgbikKKyAgICBpZiBhOm4gPT0gMQorCVhwYXRoIDEyOAkJCQkiIFg6IDAKKyAgICBlbHNlaWYgYTpuID09IDIKKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisgICAgZWxzZWlmIGE6biA9PSAzCisJWHBhdGggNTEyCQkJCSIgWDogNTEyCisgICAgZWxzZWlmIGE6biA9PSA0CisJWHBhdGggMTAyNAkJCQkiIFg6IDEwMjQKKyAgICBlbmRpZgorICAgIHJldHVybiBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBGKHgsIG4pCisgICAgaWYgYTpuID09IDIKKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVsc2VpZiBhOm4gPT0gNAorCVhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK3RyeQorCisgICAgdHJ5CisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKwljYWxsIHtOQU1FKFRIUk9XKCJuYW1lIiwgMSksIDEpfShBUkcoNDcxMSwgMSksIDEpCisJWHBhdGggMTYzODQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15uYW1lJC8KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDY1NTM2CQkJCSIgWDogMAorCVhvdXQgIjE6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMTMxMDcyCQkJCSIgWDogMTMxMDcyCisJY2FsbCB7TkFNRSgiRiIsIDIpfShBUkcoVEhST1coImFyZyIsIDIpLCAyKSwgMikKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15hcmckLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorCVhvdXQgIjI6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKwljYWxsIHtOQU1FKCJUSFJPVyIsIDMpfShBUkcoImNhbGwiLCAzKSwgMykKKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eY2FsbCQvCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDgzODg2MDgKKyAgICBjYXRjaCAvXjAkLwkgICAgIiBkZWZhdWx0IHJldHVybiB2YWx1ZQorCVhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorCVhvdXQgIjM6IiB2OnRocm93cG9pbnQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisJWG91dCAiMzoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCA2NzEwODg2NAkJCQkiIFg6IDY3MTA4ODY0CisJY2FsbCB7TkFNRSgiRiIsIDQpfShBUkcoNDcxMSwgNCksIDQpCisJWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMTM0MjE3NzI4CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKwlYb3V0ICI0OiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKyAgICBYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisgICAgWG91dCB2OnRocm93cG9pbnQKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCAxMDczNzQxODI0CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitkZWxmdW5jdGlvbiBGCisKK1hjaGVjayAyMTI1MTQ0MjMKKworIiBMZWF2ZSBUSFJPVygpLCBOQU1FKCksIGFuZCBBUkcoKSBmb3IgdGhlIG5leHQgdGVzdC4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDY4OiAgOnRocm93IGFjY3Jvc3MgZnVuY3Rpb24gY2FsbHMgaW4gZXhwcmVzc2lvbnMJCSAgICB7e3sxCisiCisiCSAgICBPbiBhIGZ1bmN0aW9uIGNhbGwgd2l0aGluIGFuIGV4cHJlc3Npb24sIGFuIGV4Y2VwdGlvbiBtaWdodCBiZQorIgkgICAgdGhyb3duIHdoZW4gZXZhbHVhdGluZyB0aGUgZnVuY3Rpb24gbmFtZSwgZHVyaW5nIGV2YWx1YXRpb24gb2YgdGhlCisiCSAgICBhcmd1bWVudHMsIG9yIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGV4ZWN1dGVkLiAgVGhlIGV4Y2VwdGlvbgorIgkgICAgY2FuIGJlIGNhdWdodCBieSB0aGUgY2FsbGVyLgorIgorIgkgICAgVGhpcyB0ZXN0IHJldXNlcyB0aGUgZnVuY3Rpb25zIFRIUk9XKCksIE5BTUUoKSwgYW5kIEFSRygpIGZyb20gdGhlCisiCSAgICBwcmV2aW91cyB0ZXN0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2Z1bmN0aW9uISBGKHgsIG4pCisgICAgaWYgYTpuID09IDIKKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVsc2VpZiBhOm4gPT0gNAorCVhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisgICAgZW5kaWYKKyAgICByZXR1cm4gYTp4CitlbmRmdW5jdGlvbgorCit1bmxldCEgdmFyMSB2YXIyIHZhcjMgdmFyNAorCit0cnkKKworICAgIHRyeQorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJbGV0IHZhcjEgPSB7TkFNRShUSFJPVygibmFtZSIsIDEpLCAxKX0oQVJHKDQ3MTEsIDEpLCAxKQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMAorICAgIGNhdGNoIC9ebmFtZSQvCisJWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDAKKwlYb3V0ICIxOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDEzMTA3MgkJCQkiIFg6IDEzMTA3MgorCWxldCB2YXIyID0ge05BTUUoIkYiLCAyKX0oQVJHKFRIUk9XKCJhcmciLCAyKSwgMiksIDIpCisJWHBhdGggMjYyMTQ0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eYXJnJC8KKwlYcGF0aCA1MjQyODgJCQkJIiBYOiA1MjQyODgKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKwlYb3V0ICIyOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisJbGV0IHZhcjMgPSB7TkFNRSgiVEhST1ciLCAzKX0oQVJHKCJjYWxsIiwgMyksIDMpCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmNhbGwkLworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisgICAgY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKwlYb3V0ICIzOiIgdjp0aHJvd3BvaW50CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMAorCVhvdXQgIjM6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNjcxMDg4NjQJCQkJIiBYOiA2NzEwODg2NAorCWxldCB2YXI0ID0ge05BTUUoIkYiLCA0KX0oQVJHKDQ3MTEsIDQpLCA0KQorCVhwYXRoIDEzNDIxNzcyOAkJCQkiIFg6IDEzNDIxNzcyOAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNjg0MzU0NTYJCQkJIiBYOiAwCisJWG91dCAiNDoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKK2NhdGNoIC9eMCQvCSAgICAiIGRlZmF1bHQgcmV0dXJuIHZhbHVlCisgICAgWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKworaWYgZXhpc3RzKCJ2YXIxIikgfHwgZXhpc3RzKCJ2YXIyIikgfHwgZXhpc3RzKCJ2YXIzIikgfHwKKwkgICAgXCAhZXhpc3RzKCJ2YXI0IikgfHwgdmFyNCAhPSA0NzExCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorICAgIGlmIGV4aXN0cygidmFyMSIpCisJWG91dCAidmFyMSA9IiB2YXIxCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoInZhcjIiKQorCVhvdXQgInZhcjIgPSIgdmFyMgorICAgIGVuZGlmCisgICAgaWYgZXhpc3RzKCJ2YXIzIikKKwlYb3V0ICJ2YXIzID0iIHZhcjMKKyAgICBlbmRpZgorICAgIGlmICFleGlzdHMoInZhcjQiKQorCVhvdXQgInZhcjQgdW5zZXQiCisgICAgZWxzZWlmIHZhcjQgIT0gNDcxMQorCVhvdXQgInZhcjQgPSIgdmFyNAorICAgIGVuZGlmCitlbmRpZgorCit1bmxldCEgdmFyMSB2YXIyIHZhcjMgdmFyNAorZGVsZnVuY3Rpb24gVEhST1cKK2RlbGZ1bmN0aW9uIE5BTUUKK2RlbGZ1bmN0aW9uIEFSRworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMjEyNTE0NDIzCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA2OTogIDp0aHJvdyBhY2Nyb3NzIDppZiwgOmVsc2VpZiwgOndoaWxlCQkJCSAgICB7e3sxCisiCisiCSAgICBPbiBhbiA6aWYsIDplbHNlaWYsIG9yIDp3aGlsZSBjb21tYW5kLCBhbiBleGNlcHRpb24gbWlnaHQgYmUgdGhyb3duCisiCSAgICBkdXJpbmcgZXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiB0byB0ZXN0LiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUKKyIJICAgIGNhdWdodCBieSB0aGUgc2NyaXB0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCEgMSAyCisKK2Z1bmN0aW9uISBUSFJPVyh4KQorICAgIFhsb29wTkVYVAorICAgIFhsb29wIDEJCQkJCSIgWDogMSArIDIgKyA0CisgICAgdGhyb3cgYTp4CitlbmRmdW5jdGlvbgorCit0cnkKKworICAgIHRyeQorCVhwYXRoIDgJCQkJCSIgWDogOAorCWlmIDQ3MTEgPT0gVEhST1coImlmIikgKyAxMTEKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAwCisJZWxzZQorCSAgICBYcGF0aCAzMgkJCQkiIFg6IDAKKwllbmRpZgorCVhwYXRoIDY0CQkJCSIgWDogMAorICAgIGNhdGNoIC9eaWYkLworCVhwYXRoIDEyOAkJCQkiIFg6IDEyOAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyNTYJCQkJIiBYOiAwCisJWG91dCAiaWY6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNTEyCQkJCSIgWDogNTEyCisJaWYgNDcxMSA9PSA0ICsgNyArIDEgKyAxCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZWxzZWlmIDQ3MTEgPT0gVEhST1coImVsc2VpZiIpICsgMjIyCisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAwCisJZWxzZQorCSAgICBYcGF0aCA0MDk2CQkJCSIgWDogMAorCWVuZGlmCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmVsc2VpZiQvCisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDAKKwlYb3V0ICJlbHNlaWY6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCXdoaWxlIDQ3MTEgPT0gVEhST1coIndoaWxlIikgKyA0NzExCisJICAgIFhwYXRoIDEzMTA3MgkJCSIgWDogMAorCSAgICBicmVhaworCWVuZHdoaWxlCisJWHBhdGggMjYyMTQ0CQkJCSIgWDogMAorICAgIGNhdGNoIC9ed2hpbGUkLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDUyNDI4OAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorCVhvdXQgIndoaWxlOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKyAgICBYcGF0aCAyMDk3MTUyCQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIFhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCitlbmR0cnkKKworWHBhdGggODM4ODYwOAkJCQkJIiBYOiA4Mzg4NjA4CisKK2RlbGZ1bmN0aW9uIFRIUk9XCisKK1hjaGVjayA4OTk1NDcxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3MDogIDp0aHJvdyBhY2Nyb3NzIDpyZXR1cm4gb3IgOnRocm93CQkJCSAgICB7e3sxCisiCisiCSAgICBPbiBhIDpyZXR1cm4gb3IgOnRocm93IGNvbW1hbmQsIGFuIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gZHVyaW5nCisiCSAgICBldmFsdWF0aW9uIG9mIHRoZSBleHByZXNzaW9uIHRvIHJldHVybiBvciB0aHJvdywgcmVzcGVjdGl2ZWx5LiAgVGhlCisiCSAgICBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieSB0aGUgc2NyaXB0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCB0YWtlbiA9ICIiCisKK2Z1bmN0aW9uISBUSFJPVyh4LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorICAgIHRocm93IGE6eAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEYoeCwgeSwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRiIgLiBhOm4KKyAgICByZXR1cm4gYTp4ICsgVEhST1coYTp5LCBhOm4pCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRyh4LCB5LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJHIiAuIGE6bgorICAgIHRocm93IGE6eCAuIFRIUk9XKGE6eSwgYTpuKQorICAgIHJldHVybiBhOngKK2VuZGZ1bmN0aW9uCisKK3RyeQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCWNhbGwgRig0NzExLCAicmV0dXJuIiwgMSkKKwlYcGF0aCAyCQkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnJldHVybiQvCisJWHBhdGggNAkJCQkJIiBYOiA0CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgJCQkJCSIgWDogMAorCVhvdXQgInJldHVybjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisJbGV0IHZhciA9IEYoNDcxMiwgInJldHVybi12YXIiLCAyKQorCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGNhdGNoIC9ecmV0dXJuLXZhciQvCisJWHBhdGggNjQJCQkJIiBYOiA2NAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMjgJCQkJIiBYOiAwCisJWG91dCAicmV0dXJuLXZhcjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCXVubGV0ISB2YXIKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCXRocm93ICJleGNlcHQxIiAuIFRIUk9XKCJ0aHJvdzEiLCAzKQorCVhwYXRoIDUxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmV4Y2VwdDEvCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnRocm93MSQvCisJWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNDA5NgkJCQkiIFg6IDAKKwlYb3V0ICJ0aHJvdzE6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggODE5MgkJCQkiIFg6IDgxOTIKKwljYWxsIEcoImV4Y2VwdDIiLCAidGhyb3cyIiwgNCkKKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmV4Y2VwdDIvCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL150aHJvdzIkLworCVhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTMxMDcyCQkJCSIgWDogMAorCVhvdXQgInRocm93MjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwlsZXQgdmFyID0gRygiZXhjZXB0MyIsICJ0aHJvdzMiLCA1KQorCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmV4Y2VwdDMvCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnRocm93MyQvCisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKKwlYb3V0ICJ0aHJvdzM6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwl1bmxldCEgdmFyCisgICAgZW5kdHJ5CisKKyAgICBsZXQgZXhwZWN0ZWQgPSAiRjFUMUYyVDJUM0c0VDRHNVQ1IgorICAgIGlmIHRha2VuICE9IGV4cGVjdGVkCisJWHBhdGggODM4ODYwOAkJCQkiIFg6IDAKKwlYb3V0ICIndGFrZW4nIGlzIiB0YWtlbiAiaW5zdGVhZCBvZiIgZXhwZWN0ZWQKKyAgICBlbmRpZgorCitjYXRjaCAvXjAkLwkgICAgIiBkZWZhdWx0IHJldHVybiB2YWx1ZQorICAgIFhwYXRoIDE2Nzc3MjE2CQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWHBhdGggMzM1NTQ0MzIJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDY3MTA4ODY0CQkJCQkiIFg6IDY3MTA4ODY0CisKK3VubGV0IHRha2VuIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBUSFJPVworZGVsZnVuY3Rpb24gRgorZGVsZnVuY3Rpb24gRworCitYY2hlY2sgNjk1NDQyNzcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDcxOiAgOnRocm93IGFjY3Jvc3MgOmVjaG8gdmFyaWFudHMgYW5kIDpleGVjdXRlCQkJICAgIHt7ezEKKyIKKyIJICAgIE9uIGFuIDplY2hvLCA6ZWNob24sIDplY2hvbXNnLCA6ZWNob2Vyciwgb3IgOmV4ZWN1dGUgY29tbWFuZCwgYW4KKyIJICAgIGV4Y2VwdGlvbiBtaWdodCBiZSB0aHJvd24gZHVyaW5nIGV2YWx1YXRpb24gb2YgdGhlIGFyZ3VtZW50cyB0bworIgkgICAgYmUgZGlzcGxheWVkIG9yIGV4ZWN1dGVkIGFzIGEgY29tbWFuZCwgcmVzcGVjdGl2ZWx5LiAgQW55IGZvbGxvd2luZworIgkgICAgYXJndW1lbnRzIGFyZSBub3QgZXZhbHVhdGVkLCB0aGVuLiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUgY2F1Z2h0IGJ5CisiCSAgICB0aGUgc2NyaXB0LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2xldCB0YWtlbiA9ICIiCisKK2Z1bmN0aW9uISBUSFJPVyh4LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorICAgIHRocm93IGE6eAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEYobikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRiIgLiBhOm4KKyAgICByZXR1cm4gIkYiIC4gYTpuCitlbmRmdW5jdGlvbgorCit0cnkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwllY2hvICJlY2hvIiAuIFRIUk9XKCJlY2hvLWV4Y2VwdCIsIDEpIEYoMSkKKwlYcGF0aCAyCQkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmVjaG8tZXhjZXB0JC8KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggOAkJCQkJIiBYOiAwCisJWG91dCAiZWNobzoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxNgkJCQkiIFg6IDE2CisJZWNob24gImVjaG9uIiAuIFRIUk9XKCJlY2hvbi1leGNlcHQiLCAyKSBGKDIpCisJWHBhdGggMzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15lY2hvbi1leGNlcHQkLworCVhwYXRoIDY0CQkJCSIgWDogNjQKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTI4CQkJCSIgWDogMAorCVhvdXQgImVjaG9uOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCWVjaG9tc2cgImVjaG9tc2ciIC4gVEhST1coImVjaG9tc2ctZXhjZXB0IiwgMykgRigzKQorCVhwYXRoIDUxMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmVjaG9tc2ctZXhjZXB0JC8KKwlYcGF0aCAxMDI0CQkJCSIgWDogMTAyNAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorCVhvdXQgImVjaG9tc2c6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKwllY2hvZXJyICJlY2hvZXJyIiAuIFRIUk9XKCJlY2hvZXJyLWV4Y2VwdCIsIDQpIEYoNCkKKwlYcGF0aCA4MTkyCQkJCSIgWDogMAorICAgIGNhdGNoIC9eZWNob2Vyci1leGNlcHQkLworCVhwYXRoIDE2Mzg0CQkJCSIgWDogMTYzODQKKyAgICBjYXRjaCAvVmltLworCVhwYXRoIDMyNzY4CQkJCSIgWDogMAorICAgIGNhdGNoIC9lY2hvZXJyLworCVhwYXRoIDY1NTM2CQkJCSIgWDogMAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxMzEwNzIJCQkJIiBYOiAwCisJWG91dCAiZWNob2VycjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAyNjIxNDQJCQkJIiBYOiAyNjIxNDQKKwlleGVjdXRlICJlY2hvICdleGVjdXRlIiAuIFRIUk9XKCJleGVjdXRlLWV4Y2VwdCIsIDUpIEYoNSkgIiciCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorICAgIGNhdGNoIC9eZXhlY3V0ZS1leGNlcHQkLworCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCisJWG91dCAiZXhlY3V0ZToiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICBsZXQgZXhwZWN0ZWQgPSAiVDFUMlQzVDRUNSIKKyAgICBpZiB0YWtlbiAhPSBleHBlY3RlZAorCVhwYXRoIDQxOTQzMDQJCQkJIiBYOiAwCisJWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCisgICAgZW5kaWYKKworY2F0Y2ggL14wJC8JICAgICIgZGVmYXVsdCByZXR1cm4gdmFsdWUKKyAgICBYcGF0aCA4Mzg4NjA4CQkJCSIgWDogMAorICAgIFhvdXQgdjp0aHJvd3BvaW50CitjYXRjaCAvLiovCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAwCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hwYXRoIDMzNTU0NDMyCQkJCQkiIFg6IDMzNTU0NDMyCisKK3VubGV0IHRha2VuIGV4cGVjdGVkCitkZWxmdW5jdGlvbiBUSFJPVworZGVsZnVuY3Rpb24gRgorCitYY2hlY2sgMzQ4ODY5OTcKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDcyOiAgOnRocm93IGFjY3Jvc3MgOmxldCBvciA6dW5sZXQJCQkJICAgIHt7ezEKKyIKKyIJICAgIE9uIGEgOmxldCBjb21tYW5kLCBhbiBleGNlcHRpb24gbWlnaHQgYmUgdGhyb3duIGR1cmluZyBldmFsdWF0aW9uCisiCSAgICBvZiB0aGUgZXhwcmVzc2lvbiB0byBhc3NpZ24uICBPbiBhbiA6bGV0IG9yIDp1bmxldCBjb21tYW5kLCB0aGUKKyIJICAgIGV2YWx1YXRpb24gb2YgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGFzc2lnbmVkIG9yIGxpc3Qgb3IKKyIJICAgIGRlbGV0ZWQsIHJlc3BlY3RpdmVseSwgbWF5IHRocm93IGFuIGV4Y2VwdGlvbi4gIEFueSBmb2xsb3dpbmcKKyIJICAgIGFyZ3VtZW50cyBhcmUgbm90IGV2YWx1YXRlZCwgdGhlbi4gIFRoZSBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieQorIgkgICAgdGhlIHNjcmlwdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgdGhyb3djb3VudCA9IDAKKworZnVuY3Rpb24hIFRIUk9XKHgpCisgICAgbGV0IGc6dGhyb3djb3VudCA9IGc6dGhyb3djb3VudCArIDEKKyAgICB0aHJvdyBhOngKK2VuZGZ1bmN0aW9uCisKK3RyeQorICAgIHRyeQorCWxldCAkVkFSID0gIm9sZF92YWx1ZSIKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwlsZXQgJFZBUiA9ICJsZXQoIiAuIFRIUk9XKCJ2YXIiKSAuICIpIgorCVhwYXRoIDIJCQkJCSIgWDogMAorICAgIGNhdGNoIC9edmFyJC8KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKyAgICBmaW5hbGx5CisJaWYgJFZBUiAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCA4CQkJCSIgWDogMAorCWVuZGlmCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlsZXQgQGEgPSAib2xkX3ZhbHVlIgorCVhwYXRoIDE2CQkJCSIgWDogMTYKKwlsZXQgQGEgPSAibGV0KCIgLiBUSFJPVygicmVnIikgLiAiKSIKKwlYcGF0aCAzMgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnJlZyQvCisJdHJ5CisJICAgIFhwYXRoIDY0CQkJCSIgWDogNjQKKwkgICAgbGV0IEBBID0gImxldCgiIC4gVEhST1coIlJFRyIpIC4gIikiCisJICAgIFhwYXRoIDEyOAkJCQkiIFg6IDAKKwljYXRjaCAvXlJFRyQvCisJICAgIFhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCWVuZHRyeQorICAgIGZpbmFsbHkKKwlpZiBAYSAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiAwCisJZW5kaWYKKwlpZiBAQSAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWVuZGlmCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlsZXQgc2F2ZWRfZ3BhdGggPSAmZzpwYXRoCisJbGV0IHNhdmVkX2xwYXRoID0gJmw6cGF0aAorCVhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJbGV0ICZwYXRoID0gImxldCgiIC4gVEhST1coIm9wdCIpIC4gIikiCisJWHBhdGggNDA5NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXm9wdCQvCisJdHJ5CisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJICAgIGxldCAmZzpwYXRoID0gImxldCgiIC4gVEhST1coImdvcHQiKSAuICIpIgorCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKwljYXRjaCAvXmdvcHQkLworCSAgICB0cnkKKwkJWHBhdGggMzI3NjgJCQkiIFg6IDMyNzY4CisJCWxldCAmbDpwYXRoID0gImxldCgiIC4gVEhST1coImxvcHQiKSAuICIpIgorCQlYcGF0aCA2NTUzNgkJCSIgWDogMAorCSAgICBjYXRjaCAvXmxvcHQkLworCQlYcGF0aCAxMzEwNzIJCQkiIFg6IDEzMTA3MgorCSAgICBlbmR0cnkKKwllbmR0cnkKKyAgICBmaW5hbGx5CisJaWYgJmc6cGF0aCAhPSBzYXZlZF9ncGF0aCB8fCAmbDpwYXRoICE9IHNhdmVkX2xwYXRoCisJICAgIFhwYXRoIDI2MjE0NAkJCSIgWDogMAorCWVuZGlmCisJbGV0ICZnOnBhdGggPSBzYXZlZF9ncGF0aAorCWxldCAmbDpwYXRoID0gc2F2ZWRfbHBhdGgKKyAgICBlbmR0cnkKKworICAgIHVubGV0ISB2YXIxIHZhcjIgdmFyMworCisgICAgdHJ5CisJWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisJbGV0IHZhcjEgPSAibGV0KCIgLiBUSFJPVygidmFyMSIpIC4gIikiCisJWHBhdGggMTA0ODU3NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnZhcjEkLworCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAyMDk3MTUyCisgICAgZmluYWxseQorCWlmIGV4aXN0cygidmFyMSIpCisJICAgIFhwYXRoIDQxOTQzMDQJCQkiIFg6IDAKKwllbmRpZgorICAgIGVuZHRyeQorCisgICAgdHJ5CisJbGV0IHZhcjIgPSAib2xkX3ZhbHVlIgorCVhwYXRoIDgzODg2MDgJCQkJIiBYOiA4Mzg4NjA4CisJbGV0IHZhcjIgPSAibGV0KCIgLiBUSFJPVygidmFyMiIpLiAiKSIKKwlYcGF0aCAxNjc3NzIxNgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnZhcjIkLworCVhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKKyAgICBmaW5hbGx5CisJaWYgdmFyMiAhPSAib2xkX3ZhbHVlIgorCSAgICBYcGF0aCA2NzEwODg2NAkJCSIgWDogMAorCWVuZGlmCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKwlsZXQgdmFye1RIUk9XKCJ2YXIzIil9ID0gNDcxMQorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnZhcjMkLworCVhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDUzNjg3MDkxMgorICAgIGVuZHRyeQorCisgICAgbGV0IGFkZHBhdGggPSAiIgorCisgICAgZnVuY3Rpb24gQUREUEFUSChwKQorCWxldCBnOmFkZHBhdGggPSBnOmFkZHBhdGggLiBhOnAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgdHJ5CisJY2FsbCBBRERQQVRIKCJUMSIpCisJbGV0IHZhcntUSFJPVygidmFyNCIpfSB2YXJ7QUREUEFUSCgiVDIiKX0gfCBjYWxsIEFERFBBVEgoIlQzIikKKwljYWxsIEFERFBBVEgoIlQ0IikKKyAgICBjYXRjaCAvXnZhcjQkLworCWNhbGwgQUREUEFUSCgiVDUiKQorICAgIGVuZHRyeQorCisgICAgdHJ5CisJY2FsbCBBRERQQVRIKCJUNiIpCisJdW5sZXQgdmFye1RIUk9XKCJ2YXI1Iil9IHZhcntBRERQQVRIKCJUNyIpfSB8IGNhbGwgQUREUEFUSCgiVDgiKQorCWNhbGwgQUREUEFUSCgiVDkiKQorICAgIGNhdGNoIC9edmFyNSQvCisJY2FsbCBBRERQQVRIKCJUMTAiKQorICAgIGVuZHRyeQorCisgICAgaWYgYWRkcGF0aCAhPSAiVDFUNVQ2VDEwIiB8fCB0aHJvd2NvdW50ICE9IDExCisJdGhyb3cgImFkZHBhdGg6ICIgLiBhZGRwYXRoIC4gIiwgdGhyb3djb3VudDogIiAuIHRocm93Y291bnQKKyAgICBlbmRpZgorCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworY2F0Y2ggLy4qLworICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKwordW5sZXQhIHZhcjEgdmFyMiB2YXIzIGFkZHBhdGggdGhyb3djb3VudAorZGVsZnVuY3Rpb24gVEhST1cKKworWGNoZWNrIDE3ODk1NjkzNjUKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDczOiAgOnRocm93IGFjY3Jvc3MgOmZ1bmN0aW9uLCA6ZGVsZnVuY3Rpb24JCQkgICAge3t7MQorIgorIgkgICAgVGhlIDpmdW5jdGlvbiBhbmQgOmRlbGZ1bmN0aW9uIGNvbW1hbmRzIG1heSBjYXVzZSBhbiBleHByZXNzaW9uCisiCSAgICBzcGVjaWZpZWQgaW4gYnJhY2VzIHRvIGJlIGV2YWx1YXRlZC4gIER1cmluZyBldmFsdWF0aW9uLCBhbgorIgkgICAgZXhjZXB0aW9uIG1pZ2h0IGJlIHRocm93bi4gIFRoZSBleGNlcHRpb24gY2FuIGJlIGNhdWdodCBieSB0aGUKKyIJICAgIHNjcmlwdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitsZXQgdGFrZW4gPSAiIgorCitmdW5jdGlvbiEgVEhST1coeCwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiVCIgLiBhOm4KKyAgICB0aHJvdyBhOngKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBFWFBSKHgsIG4pCisgICAgbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIkUiIC4gYTpuCisgICAgaWYgYTpuICUgMiA9PSAwCisJY2FsbCBUSFJPVyhhOngsIGE6bikKKyAgICBlbmRpZgorICAgIHJldHVybiAyIC0gYTpuICUgMgorZW5kZnVuY3Rpb24KKwordHJ5CisgICAgdHJ5CisJIiBEZWZpbmUgZnVuY3Rpb24uCisJWHBhdGggMQkJCQkJIiBYOiAxCisJZnVuY3Rpb24hIEYwKCkKKwllbmRmdW5jdGlvbgorCVhwYXRoIDIJCQkJCSIgWDogMgorCWZ1bmN0aW9uISBGe0VYUFIoImZ1bmN0aW9uLWRlZi1vayIsIDEpfSgpCisJZW5kZnVuY3Rpb24KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwlmdW5jdGlvbiEgRntFWFBSKCJmdW5jdGlvbi1kZWYiLCAyKX0oKQorCWVuZGZ1bmN0aW9uCisJWHBhdGggOAkJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15mdW5jdGlvbi1kZWYtb2skLworCVhwYXRoIDE2CQkJCSIgWDogMAorICAgIGNhdGNoIC9eZnVuY3Rpb24tZGVmJC8KKwlYcGF0aCAzMgkJCQkiIFg6IDMyCisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDY0CQkJCSIgWDogMAorCVhvdXQgImRlZjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwkiIExpc3QgZnVuY3Rpb24uCisJWHBhdGggMTI4CQkJCSIgWDogMTI4CisJZnVuY3Rpb24gRjAKKwlYcGF0aCAyNTYJCQkJIiBYOiAyNTYKKwlmdW5jdGlvbiBGe0VYUFIoImZ1bmN0aW9uLWxzdC1vayIsIDMpfQorCVhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCWZ1bmN0aW9uIEZ7RVhQUigiZnVuY3Rpb24tbHN0IiwgNCl9CisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmZ1bmN0aW9uLWxzdC1vayQvCisJWHBhdGggMjA0OAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmZ1bmN0aW9uLWxzdCQvCisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKwlYb3V0ICJsc3Q6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGVuZHRyeQorCisgICAgdHJ5CisJIiBEZWxldGUgZnVuY3Rpb24KKwlYcGF0aCAxNjM4NAkJCQkiIFg6IDE2Mzg0CisJZGVsZnVuY3Rpb24gRjAKKwlYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisJZGVsZnVuY3Rpb24gRntFWFBSKCJmdW5jdGlvbi1kZWwtb2siLCA1KX0KKwlYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJZGVsZnVuY3Rpb24gRntFWFBSKCJmdW5jdGlvbi1kZWwiLCA2KX0KKwlYcGF0aCAxMzEwNzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15mdW5jdGlvbi1kZWwtb2skLworCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXmZ1bmN0aW9uLWRlbCQvCisJWHBhdGggNTI0Mjg4CQkJCSIgWDogNTI0Mjg4CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisJWG91dCAiZGVsOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIGxldCBleHBlY3RlZCA9ICJFMUUyVDJFM0U0VDRFNUU2VDYiCisgICAgaWYgdGFrZW4gIT0gZXhwZWN0ZWQKKwlYcGF0aCAyMDk3MTUyCQkJCSIgWDogMAorCVhvdXQgIid0YWtlbicgaXMiIHRha2VuICJpbnN0ZWFkIG9mIiBleHBlY3RlZAorICAgIGVuZGlmCisKK2NhdGNoIC8uKi8KKyAgICBYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCitYcGF0aCA4Mzg4NjA4CQkJCQkiIFg6IDgzODg2MDgKKwordW5sZXQgdGFrZW4gZXhwZWN0ZWQKK2RlbGZ1bmN0aW9uIFRIUk9XCitkZWxmdW5jdGlvbiBFWFBSCisKK1hjaGVjayA5MDMyNjE1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3NDogIDp0aHJvdyBhY2Nyb3NzIGJ1aWx0aW4gZnVuY3Rpb25zIGFuZCBjb21tYW5kcwkJICAgIHt7ezEKKyIKKyIJICAgIFNvbWUgZnVuY3Rpb25zIGxpa2UgZXhpc3RzKCksIHNlYXJjaHBhaXIoKSB0YWtlIGV4cHJlc3Npb24KKyIJICAgIGFyZ3VtZW50cywgb3RoZXIgZnVuY3Rpb25zIG9yIGNvbW1hbmRzIGxpa2Ugc3Vic3RpdHV0ZSgpIG9yCisiCSAgICA6c3Vic3RpdHV0ZSBjYXVzZSBhbiBleHByZXNzaW9uIChzcGVjaWZpZWQgaW4gdGhlIHJlZ3VsYXIKKyIJICAgIGV4cHJlc3Npb24pIHRvIGJlIGV2YWx1YXRlZC4gIER1cmluZyBldmFsdWF0aW9uIGFuIGV4Y2VwdGlvbgorIgkgICAgbWlnaHQgYmUgdGhyb3duLiAgVGhlIGV4Y2VwdGlvbiBjYW4gYmUgY2F1Z2h0IGJ5IHRoZSBzY3JpcHQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworbGV0IHRha2VuID0gIiIKKworZnVuY3Rpb24hIFRIUk9XKHgsIG4pCisgICAgbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIlQiIC4gYTpuCisgICAgdGhyb3cgYTp4CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgRVhQUih4LCBuKQorICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJFIiAuIGE6bgorICAgIGNhbGwgVEhST1coYTp4IC4gYTpuLCBhOm4pCisgICAgcmV0dXJuICJFWFBSIgorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIFNLSVAoeCwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiUyIgLiBhOm4gLiAiKCIgLiBsaW5lKCIuIikKKyAgICBsZXQgdGhlbGluZSA9IGdldGxpbmUoIi4iKQorICAgIGlmIHRoZWxpbmUgPX4gInNraXAiCisJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gInMpIgorCXJldHVybiAxCisgICAgZWxzZWlmIHRoZWxpbmUgPX4gInRocm93IgorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ0KSIKKwljYWxsIFRIUk9XKGE6eCAuIGE6biwgYTpuKQorICAgIGVsc2UKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiKSIKKwlyZXR1cm4gMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgU1VCU1QoeCwgbikKKyAgICBsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiVSIgLiBhOm4gLiAiKCIgLiBsaW5lKCIuIikKKyAgICBsZXQgdGhlbGluZSA9IGdldGxpbmUoIi4iKQorICAgIGlmIHRoZWxpbmUgPX4gIm5vdCIJICAgICIgU1VCU1QoKSBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgdGhpcyBsaW5lCisJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIm4pIgorCWNhbGwgVEhST1coYTp4IC4gYTpuLCBhOm4pCisgICAgZWxzZWlmIHRoZWxpbmUgPX4gInRocm93IgorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ0KSIKKwljYWxsIFRIUk9XKGE6eCAuIGE6biwgYTpuKQorICAgIGVsc2UKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiKSIKKwlyZXR1cm4gInJlcGxhY2VkIgorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCit0cnkKKyAgICB0cnkKKwlYcGF0aCAxCQkJCQkiIFg6IDEKKwlsZXQgcmVzdWx0ID0gZXhpc3RzKCcqe0VYUFIoImV4aXN0cyIsIDEpfScpCisJWHBhdGggMgkJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15leGlzdHMxJC8KKwlYcGF0aCA0CQkJCQkiIFg6IDQKKwl0cnkKKwkgICAgbGV0IHJlc3VsdCA9IGV4aXN0cygne0VYUFIoImV4aXN0cyIsIDIpfScpCisJICAgIFhwYXRoIDgJCQkJIiBYOiAwCisJY2F0Y2ggL15leGlzdHMyJC8KKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJICAgIFhvdXQgImV4aXN0czI6IiB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA2NAkJCQkiIFg6IDAKKwlYb3V0ICJleGlzdHMxOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCWxldCBmaWxlID0gdGVtcG5hbWUoKQorCWV4ZWMgImVkaXQiIGZpbGUKKwlpbnNlcnQKK2JlZ2luCisgICAgeHgKK21pZGRsZSAzCisgICAgeHgKK21pZGRsZSA1IHNraXAKKyAgICB4eAorbWlkZGxlIDcgdGhyb3cKKyAgICB4eAorZW5kCisuCisJbm9ybWFsISBnZworCVhwYXRoIDEyOAkJCQkiIFg6IDEyOAorCWxldCByZXN1bHQgPQorCSAgICBcIHNlYXJjaHBhaXIoImJlZ2luIiwgIm1pZGRsZSIsICJlbmQiLCAnJywgJ1NLSVAoInNlYXJjaHBhaXIiLCAzKScpCisJWHBhdGggMjU2CQkJCSIgWDogMjU2CisJbGV0IHJlc3VsdCA9CisJICAgIFwgc2VhcmNocGFpcigiYmVnaW4iLCAibWlkZGxlIiwgImVuZCIsICcnLCAnU0tJUCgic2VhcmNocGFpciIsIDQpJykKKwlYcGF0aCA1MTIJCQkJIiBYOiAwCisJbGV0IHJlc3VsdCA9CisJICAgIFwgc2VhcmNocGFpcigiYmVnaW4iLCAibWlkZGxlIiwgImVuZCIsICcnLCAnU0tJUCgic2VhcmNocGFpciIsIDUpJykKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGNhdGNoIC9ec2VhcmNocGFpclszNV0kLworCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL15zZWFyY2hwYWlyNCQvCisJWHBhdGggNDA5NgkJCQkiIFg6IDQwOTYKKyAgICBjYXRjaCAvLiovCisJWHBhdGggODE5MgkJCQkiIFg6IDAKKwlYb3V0ICJzZWFyY2hwYWlyOiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYndpcGVvdXQhCisJY2FsbCBkZWxldGUoZmlsZSkKKyAgICBlbmR0cnkKKworICAgIHRyeQorCWxldCBmaWxlID0gdGVtcG5hbWUoKQorCWV4ZWMgImVkaXQiIGZpbGUKKwlpbnNlcnQKK3N1YnN0IDEKK3N1YnN0IDIKK25vdAorc3Vic3QgNAorc3Vic3QgdGhyb3cKK3N1YnN0IDYKKy4KKwlub3JtYWwhIGdnCisJWHBhdGggMTYzODQJCQkJIiBYOiAxNjM4NAorCTEsMnN1YnN0aXR1dGUvc3Vic3QvXD1TVUJTVCgic3Vic3RpdHV0ZSIsIDYpLworCXRyeQorCSAgICBYcGF0aCAzMjc2OAkJCQkiIFg6IDMyNzY4CisJICAgIHRyeQorCQlsZXQgdjplcnJtc2cgPSAiIgorCQkzc3Vic3RpdHV0ZS9zdWJzdC9cPVNVQlNUKCJzdWJzdGl0dXRlIiwgNykvCisJICAgIGZpbmFsbHkKKwkJaWYgdjplcnJtc2cgIT0gIiIKKwkJICAgICIgSWYgZXhjZXB0aW9ucyBhcmUgbm90IHRocm93biBvbiBlcnJvcnMsIGZha2UgdGhlIGVycm9yCisJCSAgICAiIGV4Y2VwdGlvbiBpbiBvcmRlciB0byBnZXQgdGhlIHNhbWUgZXhlY3V0aW9uIHBhdGguCisJCSAgICB0aHJvdyAiZmFrZWQgVmltKHN1YnN0aXR1dGUpIgorCQllbmRpZgorCSAgICBlbmR0cnkKKwljYXRjaCAvVmltKHN1YnN0aXR1dGUpLwkgICAgIiBQYXR0ZXJuIG5vdCBmb3VuZCAoJ2UnIGZsYWcgbWlzc2luZykKKwkgICAgWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCSAgICAzc3Vic3RpdHV0ZS9zdWJzdC9cPVNVQlNUKCJzdWJzdGl0dXRlIiwgOCkvZQorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDEzMTA3MgorCWVuZHRyeQorCVhwYXRoIDI2MjE0NAkJCQkiIFg6IDI2MjE0NAorCTQsNnN1YnN0aXR1dGUvc3Vic3QvXD1TVUJTVCgic3Vic3RpdHV0ZSIsIDkpLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKyAgICBjYXRjaCAvXnN1YnN0aXR1dGVbNjc4XS8KKwlYcGF0aCAxMDQ4NTc2CQkJCSIgWDogMAorICAgIGNhdGNoIC9ec3Vic3RpdHV0ZTkvCisJWHBhdGggMjA5NzE1MgkJCQkiIFg6IDIwOTcxNTIKKyAgICBmaW5hbGx5CisJYndpcGVvdXQhCisJY2FsbCBkZWxldGUoZmlsZSkKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDQxOTQzMDQJCQkJIiBYOiA0MTk0MzA0CisJbGV0IHZhciA9IHN1YnN0aXR1dGUoInN1YiIsICJzdWIiLCAnXD1USFJPVygic3Vic3RpdHV0ZSgpeSIsIDEwKScsICcnKQorCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisgICAgY2F0Y2ggL3N1YnN0aXR1dGUoKXkvCisJWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAzMzU1NDQzMgkJCQkiIFg6IDAKKwlYb3V0ICJzdWJzdGl0dXRlKCl5OiIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHRyeQorCVhwYXRoIDY3MTA4ODY0CQkJCSIgWDogNjcxMDg4NjQKKwlsZXQgdmFyID0gc3Vic3RpdHV0ZSgibm90IiwgInN1YiIsICdcPVRIUk9XKCJzdWJzdGl0dXRlKCluIiwgMTEpJywgJycpCisJWHBhdGggMTM0MjE3NzI4CQkJCSIgWDogMTM0MjE3NzI4CisgICAgY2F0Y2ggL3N1YnN0aXR1dGUoKW4vCisJWHBhdGggMjY4NDM1NDU2CQkJCSIgWDogMAorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA1MzY4NzA5MTIJCQkJIiBYOiAwCisJWG91dCAic3Vic3RpdHV0ZSgpbjoiIHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZW5kdHJ5CisKKyAgICBsZXQgZXhwZWN0ZWQgPSAiRTFUMUUyVDJTMygzKVM0KDVzKVM0KDd0KVQ0VTYoMSlVNigyKVU5KDQpVTkoNXQpVDlUMTAiCisgICAgaWYgdGFrZW4gIT0gZXhwZWN0ZWQKKwlYcGF0aCAxMDczNzQxODI0CQkJIiBYOiAwCisJWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCisgICAgZW5kaWYKKworY2F0Y2ggLy4qLworICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitlbmR0cnkKKwordW5sZXQgcmVzdWx0IHZhciB0YWtlbiBleHBlY3RlZAorZGVsZnVuY3Rpb24gVEhST1cKK2RlbGZ1bmN0aW9uIEVYUFIKK2RlbGZ1bmN0aW9uIFNLSVAKK2RlbGZ1bmN0aW9uIFNVQlNUCisKK1hjaGVjayAyMjQ5MDc2NjkKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDc1OiAgRXJyb3JzIGluIGJ1aWx0aW4gZnVuY3Rpb25zLgkJCQkgICAge3t7MQorIgorIgkgICAgT24gYW4gZXJyb3IgaW4gYSBidWlsdGluIGZ1bmN0aW9uIGNhbGxlZCBpbnNpZGUgYSA6dHJ5LzplbmR0cnkKKyIJICAgIHJlZ2lvbiwgdGhlIGV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY2FsbGluZyB0aGF0IGZ1bmN0aW9uIGFuZAorIgkgICAgdGhlIGNvbW1hbmQgY29udGFpbmluZyB0aGF0IGV4cHJlc3Npb24gYXJlIGFiYW5kb25lZC4gIFRoZSBlcnJvciBjYW4KKyIJICAgIGJlIGNhdWdodCBhcyBhbiBleGNlcHRpb24uCisiCisiCSAgICBBIHNpbXBsZSA6Y2FsbCBvZiB0aGUgYnVpbHRpbiBmdW5jdGlvbiBpcyBhIHRyaXZpYWwgY2FzZS4gIElmIHRoZQorIgkgICAgYnVpbHRpbiBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgYW5vdGhlciBmdW5jdGlvbiwKKyIJICAgIG5vIGZ1cnRoZXIgYXJndW1lbnRzIGFyZSBldmFsdWF0ZWQsIGFuZCB0aGUgb3RoZXIgZnVuY3Rpb24gaXMgbm90CisiCSAgICBleGVjdXRlZC4gIElmIHRoZSBidWlsdGluIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBhcmd1bWVudCBvZgorIgkgICAgYSA6cmV0dXJuIGNvbW1hbmQsIHRoZSA6cmV0dXJuIGNvbW1hbmQgaXMgbm90IGV4ZWN1dGVkLiAgSWYgdGhlCisiCSAgICBidWlsdGluIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBhcmd1bWVudCBvZiBhIDp0aHJvdyBjb21tYW5kLAorIgkgICAgdGhlIDp0aHJvdyBjb21tYW5kIGlzIG5vdCBleGVjdXRlZC4gIFRoZSBldmFsdWF0aW9uIG9mIHRoZQorIgkgICAgZXhwcmVzc2lvbiBjYWxsaW5nIHRoZSBidWlsdGluIGZ1bmN0aW9uIGlzIGFiYW5kb25lZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgRjEoYXJnMSkKKyAgICBYcGF0aCAxCQkJCQkiIFg6IDAKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uISBGMihhcmcxLCBhcmcyKQorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEcoKQorICAgIFhwYXRoIDQJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEgoKQorICAgIFhwYXRoIDgJCQkJCSIgWDogMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIFIoKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCSAgICByZXR1cm4gYXBwZW5kKDEsICJzIikKKwljYXRjaCAvRTIxLworCSAgICBsZXQgY2F1Z2h0ID0gMQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggMzIJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCA2NAkJCQkiIFg6IDY0CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVyAmJiB2OmVycm1zZyA9fiAnRTIxJworCQlYcGF0aCAxMjgJCQkiIFg6IDEyOAorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisgICAgWHBhdGggMjU2CQkJCQkiIFg6IDI1NgorZW5kZnVuY3Rpb24KKwordHJ5CisgICAgc2V0IG5vbWEJIiBsZXQgYXBwZW5kKCkgZmFpbCB3aXRoICJFMjEiCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDUxMgkJCQkiIFg6IDUxMgorCSAgICBjYWxsIGFwcGVuZCgxLCAicyIpCisJY2F0Y2ggL0UyMS8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDEwMjQJCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAyMDQ4CQkJCSIgWDogMjA0OAorCSAgICBpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cgJiYgdjplcnJtc2cgPX4gJ0UyMScKKwkJWHBhdGggNDA5NgkJCSIgWDogNDA5NgorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisJICAgIGNhbGwgRjEoJ3gnIC4gYXBwZW5kKDEsICJzIikpCisJY2F0Y2ggL0UyMS8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwljYXRjaCAvLiovCisJICAgIFhwYXRoIDE2Mzg0CQkJCSIgWDogMAorCWZpbmFsbHkKKwkgICAgWHBhdGggMzI3NjgJCQkJIiBYOiAzMjc2OAorCSAgICBpZiBjYXVnaHQgfHwgJFZJTU5PRVJSVEhST1cgJiYgdjplcnJtc2cgPX4gJ0UyMScKKwkJWHBhdGggNjU1MzYJCQkiIFg6IDY1NTM2CisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgWHBhdGggMTMxMDcyCQkJIiBYOiAxMzEwNzIKKwkgICAgY2FsbCBGMigneCcgLiBhcHBlbmQoMSwgInMiKSwgRygpKQorCWNhdGNoIC9FMjEvCisJICAgIGxldCBjYXVnaHQgPSAxCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAyNjIxNDQJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDUyNDI4OAkJCSIgWDogNTI0Mjg4CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVyAmJiB2OmVycm1zZyA9fiAnRTIxJworCQlYcGF0aCAxMDQ4NTc2CQkJIiBYOiAxMDQ4NTc2CisJICAgIGVuZGlmCisJICAgIGJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIGNhbGwgUigpCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDIwOTcxNTIJCQkiIFg6IDIwOTcxNTIKKwkgICAgdGhyb3cgIlQiIC4gYXBwZW5kKDEsICJzIikKKwljYXRjaCAvRTIxLworCSAgICBsZXQgY2F1Z2h0ID0gMQorCWNhdGNoIC9eVC4qLworCSAgICBYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCA4Mzg4NjA4CQkJIiBYOiAwCisJZmluYWxseQorCSAgICBYcGF0aCAxNjc3NzIxNgkJCSIgWDogMTY3NzcyMTYKKwkgICAgaWYgY2F1Z2h0IHx8ICRWSU1OT0VSUlRIUk9XICYmIHY6ZXJybXNnID1+ICdFMjEnCisJCVhwYXRoIDMzNTU0NDMyCQkJIiBYOiAzMzU1NDQzMgorCSAgICBlbmRpZgorCSAgICBicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworCWVuZHRyeQorICAgIGVuZHdoaWxlCisKKyAgICB3aGlsZSAxCisJdHJ5CisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIFhwYXRoIDY3MTA4ODY0CQkJIiBYOiA2NzEwODg2NAorCSAgICBsZXQgeCA9ICJhIgorCSAgICBsZXQgeCA9IHggLiAiYiIgLiBhcHBlbmQoMSwgInMiKSAuIEgoKQorCWNhdGNoIC9FMjEvCisJICAgIGxldCBjYXVnaHQgPSAxCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwlmaW5hbGx5CisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMjY4NDM1NDU2CisJICAgIGlmIGNhdWdodCB8fCAkVklNTk9FUlJUSFJPVyAmJiB2OmVycm1zZyA9fiAnRTIxJworCQlYcGF0aCA1MzY4NzA5MTIJCQkiIFg6IDUzNjg3MDkxMgorCSAgICBlbmRpZgorCSAgICBpZiB4ID09ICJhIgorCQlYcGF0aCAxMDczNzQxODI0CQkiIFg6IDEwNzM3NDE4MjQKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorY2F0Y2ggLy4qLworICAgICIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgYWRkIGV4cGxpY2l0bHk6CisgICAgbGV0IFhwYXRoID0gWHBhdGggKyAyMTQ3NDgzNjQ4CQkiIFg6IDAKKyAgICBYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CitmaW5hbGx5CisgICAgc2V0IG1hJgorZW5kdHJ5CisKK3VubGV0ISBjYXVnaHQgeAorZGVsZnVuY3Rpb24gRjEKK2RlbGZ1bmN0aW9uIEYyCitkZWxmdW5jdGlvbiBHCitkZWxmdW5jdGlvbiBICitkZWxmdW5jdGlvbiBSCisKK1hjaGVjayAyMDAwNDAzNDA4CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3NjogIEVycm9ycywgaW50ZXJ1cHRzLCA6dGhyb3cgZHVyaW5nIGV4cHJlc3Npb24gZXZhbHVhdGlvbgkgICAge3t7MQorIgorIgkgICAgV2hlbiBhIGZ1bmN0aW9uIGNhbGwgbWFkZSBkdXJpbmcgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFib3J0ZWQKKyIJICAgIGR1ZSB0byBhbiBlcnJvciBpbnNpZGUgYSA6dHJ5LzplbmR0cnkgcmVnaW9uIG9yIGR1ZSB0byBhbiBpbnRlcnJ1cHQKKyIJICAgIG9yIGEgOnRocm93LCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFib3J0ZWQgYXMgd2VsbC4JTm8KKyIJICAgIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGZvciB0aGUgY2FuY2VsbGVkIGV4cHJlc3Npb24gZXZhbHVhdGlvbi4gIE9uIGFuCisiCSAgICBlcnJvciBub3QgaW5zaWRlIDp0cnkvOmVuZHRyeSwgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBjb250aW51ZXMuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgbGV0IHRha2VuID0gIiIKKworICAgIGZ1bmN0aW9uISBFUlIobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiRSIgLiBhOm4KKwlhc2RmCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBFUlJhYm9ydChuKSBhYm9ydAorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJBIiAuIGE6bgorCWFzZGYKKyAgICBlbmRmdW5jdGlvbgkiIHJldHVybnMgLTEKKworICAgIGZ1bmN0aW9uISBJTlQobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiSSIgLiBhOm4KKwkiSU5URVJSVVBUOQorCWxldCBkdW1teSA9IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIFRIUihuKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorCXRocm93ICJzaG91bGQgbm90IGJlIGNhdWdodCIKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIENPTlQobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiQyIgLiBhOm4KKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIE1TRyhuKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJNIiAuIGE6bgorCWlmIChhOm4gPj0gMTAgJiYgYTpuIDw9IDI3KSA/IHY6ZXJybXNnICE9ICIiIDogdjplcnJtc2cgIX4gImFzZGYiCisJICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ4IgorCWVuZGlmCisJbGV0IHY6ZXJybXNnID0gIiIKKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKworICAgIHRyeQorCWxldCB0ID0gMQorCVhsb29wSU5JVCAxIDIKKwl3aGlsZSB0IDw9IDkKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDUxMQorCSAgICB0cnkKKwkJaWYgdCA9PSAxCisJCSAgICBsZXQgdntFUlIodCkgKyBDT05UKHQpfSA9IDAKKwkJZWxzZWlmIHQgPT0gMgorCQkgICAgbGV0IHZ7RVJSKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMworCQkgICAgbGV0IHZhciA9IGV4aXN0cygndntFUlIodCkgKyBDT05UKHQpfScpCisJCWVsc2VpZiB0ID09IDQKKwkJICAgIHVubGV0IHZ7RVJSKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gNQorCQkgICAgZnVuY3Rpb24gRntFUlIodCkgKyBDT05UKHQpfSgpCisJCSAgICBlbmRmdW5jdGlvbgorCQllbHNlaWYgdCA9PSA2CisJCSAgICBmdW5jdGlvbiBGe0VSUih0KSArIENPTlQodCl9CisJCWVsc2VpZiB0ID09IDcKKwkJICAgIGxldCB2YXIgPSBleGlzdHMoJypGe0VSUih0KSArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gOAorCQkgICAgZGVsZnVuY3Rpb24gRntFUlIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSA5CisJCSAgICBsZXQgdmFyID0gRVJSKHQpICsgQ09OVCh0KQorCQllbmRpZgorCSAgICBjYXRjaCAvYXNkZi8KKwkJIiB2OmVycm1zZyBpcyBub3Qgc2V0IHdoZW4gdGhlIGVycm9yIG1lc3NhZ2UgaXMgY29udmVydGVkIHRvIGFuCisJCSIgZXhjZXB0aW9uLiAgU2V0IGl0IHRvIHRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlLgorCQlsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbTonLCAnJywgIiIpCisJICAgIGNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkJIiBBbiBlcnJvciBleGNlcHRpb24gaGFzIGJlZW4gdGhyb3duIGFmdGVyIHRoZSBvcmlnaW5hbCBlcnJvci4KKwkJbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgZmluYWxseQorCQljYWxsIE1TRyh0KQorCQlsZXQgdCA9IHQgKyAxCisJCVhsb29wTkVYVAorCQljb250aW51ZQkiIGRpc2NhcmQgYW4gYWJvcnRpbmcgZXJyb3IKKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTEyCQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorICAgIGVuZHRyeQorCisgICAgdHJ5CisJbGV0IHQgPSAxMAorCVhsb29wSU5JVCAxMDI0IDIKKwl3aGlsZSB0IDw9IDE4CisJICAgIFhsb29wIDEJCQkJIiBYOiAxMDI0ICogNTExCisJICAgIHRyeQorCQlpZiB0ID09IDEwCisJCSAgICBsZXQgdntJTlQodCkgKyBDT05UKHQpfSA9IDAKKwkJZWxzZWlmIHQgPT0gMTEKKwkJICAgIGxldCB2e0lOVCh0KSArIENPTlQodCl9CisJCWVsc2VpZiB0ID09IDEyCisJCSAgICBsZXQgdmFyID0gZXhpc3RzKCd2e0lOVCh0KSArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gMTMKKwkJICAgIHVubGV0IHZ7SU5UKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTQKKwkJICAgIGZ1bmN0aW9uIEZ7SU5UKHQpICsgQ09OVCh0KX0oKQorCQkgICAgZW5kZnVuY3Rpb24KKwkJZWxzZWlmIHQgPT0gMTUKKwkJICAgIGZ1bmN0aW9uIEZ7SU5UKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTYKKwkJICAgIGxldCB2YXIgPSBleGlzdHMoJypGe0lOVCh0KSArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gMTcKKwkJICAgIGRlbGZ1bmN0aW9uIEZ7SU5UKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTgKKwkJICAgIGxldCB2YXIgPSBJTlQodCkgKyBDT05UKHQpCisJCWVuZGlmCisJICAgIGNhdGNoIC9eVmltXCgoXGFcKylcKVw9OlwoSW50ZXJydXB0XClcQCEvCisJCSIgQW4gZXJyb3IgZXhjZXB0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBhZnRlciB0aGUgaW50ZXJydXB0LgorCQlsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLAorCQkgICAgXCAnXlZpbVwoKFxhXCspXClcPTonLCAnJywgIiIpCisJICAgIGZpbmFsbHkKKwkJY2FsbCBNU0codCkKKwkJbGV0IHQgPSB0ICsgMQorCQlYbG9vcE5FWFQKKwkJY29udGludWUJIiBkaXNjYXJkIGludGVycnVwdAorCSAgICBlbmR0cnkKKwllbmR3aGlsZQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA1MjQyODgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisgICAgZW5kdHJ5CisKKyAgICB0cnkKKwlsZXQgdCA9IDE5CisJWGxvb3BJTklUIDEwNDg1NzYgMgorCXdoaWxlIHQgPD0gMjcKKwkgICAgWGxvb3AgMQkJCQkiIFg6IDEwNDg1NzYgKiA1MTEKKwkgICAgdHJ5CisJCWlmIHQgPT0gMTkKKwkJICAgIGxldCB2e1RIUih0KSArIENPTlQodCl9ID0gMAorCQllbHNlaWYgdCA9PSAyMAorCQkgICAgbGV0IHZ7VEhSKHQpICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMjEKKwkJICAgIGxldCB2YXIgPSBleGlzdHMoJ3Z7VEhSKHQpICsgQ09OVCh0KX0nKQorCQllbHNlaWYgdCA9PSAyMgorCQkgICAgdW5sZXQgdntUSFIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAyMworCQkgICAgZnVuY3Rpb24gRntUSFIodCkgKyBDT05UKHQpfSgpCisJCSAgICBlbmRmdW5jdGlvbgorCQllbHNlaWYgdCA9PSAyNAorCQkgICAgZnVuY3Rpb24gRntUSFIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAyNQorCQkgICAgbGV0IHZhciA9IGV4aXN0cygnKkZ7VEhSKHQpICsgQ09OVCh0KX0nKQorCQllbHNlaWYgdCA9PSAyNgorCQkgICAgZGVsZnVuY3Rpb24gRntUSFIodCkgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAyNworCQkgICAgbGV0IHZhciA9IFRIUih0KSArIENPTlQodCkKKwkJZW5kaWYKKwkgICAgY2F0Y2ggL15WaW1cKChcYVwrKVwpXD06LworCQkiIEFuIGVycm9yIGV4Y2VwdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIDp0aHJvdy4KKwkJbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwKKwkJICAgIFwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCSAgICBmaW5hbGx5CisJCWNhbGwgTVNHKHQpCisJCWxldCB0ID0gdCArIDEKKwkJWGxvb3BORVhUCisJCWNvbnRpbnVlCSIgZGlzY2FyZCBleGNlcHRpb24KKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWHBhdGggNTM2ODcwOTEyCQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorICAgIGVuZHRyeQorCisgICAgbGV0IHZ7RVJSKDI4KSArIENPTlQoMjgpfSA9IDAKKyAgICBjYWxsIE1TRygyOCkKKyAgICBsZXQgdntFUlIoMjkpICsgQ09OVCgyOSl9CisgICAgY2FsbCBNU0coMjkpCisgICAgbGV0IHZhciA9IGV4aXN0cygndntFUlIoMzApICsgQ09OVCgzMCl9JykKKyAgICBjYWxsIE1TRygzMCkKKyAgICB1bmxldCB2e0VSUigzMSkgKyBDT05UKDMxKX0KKyAgICBjYWxsIE1TRygzMSkKKyAgICBmdW5jdGlvbiBGe0VSUigzMikgKyBDT05UKDMyKX0oKQorICAgIGVuZGZ1bmN0aW9uCisgICAgY2FsbCBNU0coMzIpCisgICAgZnVuY3Rpb24gRntFUlIoMzMpICsgQ09OVCgzMyl9CisgICAgY2FsbCBNU0coMzMpCisgICAgbGV0IHZhciA9IGV4aXN0cygnKkZ7RVJSKDM0KSArIENPTlQoMzQpfScpCisgICAgY2FsbCBNU0coMzQpCisgICAgZGVsZnVuY3Rpb24gRntFUlIoMzUpICsgQ09OVCgzNSl9CisgICAgY2FsbCBNU0coMzUpCisgICAgbGV0IHZhciA9IEVSUigzNikgKyBDT05UKDM2KQorICAgIGNhbGwgTVNHKDM2KQorCisgICAgbGV0IHZ7RVJSYWJvcnQoMzcpICsgQ09OVCgzNyl9ID0gMAorICAgIGNhbGwgTVNHKDM3KQorICAgIGxldCB2e0VSUmFib3J0KDM4KSArIENPTlQoMzgpfQorICAgIGNhbGwgTVNHKDM4KQorICAgIGxldCB2YXIgPSBleGlzdHMoJ3Z7RVJSYWJvcnQoMzkpICsgQ09OVCgzOSl9JykKKyAgICBjYWxsIE1TRygzOSkKKyAgICB1bmxldCB2e0VSUmFib3J0KDQwKSArIENPTlQoNDApfQorICAgIGNhbGwgTVNHKDQwKQorICAgIGZ1bmN0aW9uIEZ7RVJSYWJvcnQoNDEpICsgQ09OVCg0MSl9KCkKKyAgICBlbmRmdW5jdGlvbgorICAgIGNhbGwgTVNHKDQxKQorICAgIGZ1bmN0aW9uIEZ7RVJSYWJvcnQoNDIpICsgQ09OVCg0Mil9CisgICAgY2FsbCBNU0coNDIpCisgICAgbGV0IHZhciA9IGV4aXN0cygnKkZ7RVJSYWJvcnQoNDMpICsgQ09OVCg0Myl9JykKKyAgICBjYWxsIE1TRyg0MykKKyAgICBkZWxmdW5jdGlvbiBGe0VSUmFib3J0KDQ0KSArIENPTlQoNDQpfQorICAgIGNhbGwgTVNHKDQ0KQorICAgIGxldCB2YXIgPSBFUlJhYm9ydCg0NSkgKyBDT05UKDQ1KQorICAgIGNhbGwgTVNHKDQ1KQorCisgICAgWHBhdGggMTA3Mzc0MTgyNAkJCQkiIFg6IDEwNzM3NDE4MjQKKworICAgIGxldCBleHBlY3RlZCA9ICIiCisJXCAuICJFMU0xRTJNMkUzTTNFNE00RTVNNUU2TTZFN003RThNOEU5TTkiCisJXCAuICJJMTBNMTBJMTFNMTFJMTJNMTJJMTNNMTNJMTRNMTRJMTVNMTVJMTZNMTZJMTdNMTdJMThNMTgiCisJXCAuICJUMTlNMTlUMjBNMjBUMjFNMjFUMjJNMjJUMjNNMjNUMjRNMjRUMjVNMjVUMjZNMjZUMjdNMjciCisJXCAuICJFMjhDMjhNMjhFMjlDMjlNMjlFMzBDMzBNMzBFMzFDMzFNMzFFMzJDMzJNMzJFMzNDMzNNMzMiCisJXCAuICJFMzRDMzRNMzRFMzVDMzVNMzVFMzZDMzZNMzYiCisJXCAuICJBMzdDMzdNMzdBMzhDMzhNMzhBMzlDMzlNMzlBNDBDNDBNNDBBNDFDNDFNNDFBNDJDNDJNNDIiCisJXCAuICJBNDNDNDNNNDNBNDRDNDRNNDRBNDVDNDVNNDUiCisKKyAgICBpZiB0YWtlbiAhPSBleHBlY3RlZAorCSIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgZGlzcGxheSBleHBsaWNpdGx5OgorCWV4ZWMgIiFlY2hvIDIxNDc0ODM2NDggPj4iIC4gZzpFeHRyYVZpbVJlc3VsdAorCQkJCQkJIiBYOiAwCisJWG91dCAiJ3Rha2VuJyBpcyIgdGFrZW4gImluc3RlYWQgb2YiIGV4cGVjdGVkCisJaWYgc3Vic3RpdHV0ZSh0YWtlbiwKKwlcICdcKC4qXClFM0MzTTN4XCguKlwpRTMwQzMwTTMweFwoLipcKUEzOUMzOU0zOXhcKC4qXCknLAorCVwgJ1wxRTNNM1wyRTMwQzMwTTMwXDNBMzlDMzlNMzlcNCcsCisJXCAiIikgPT0gZXhwZWN0ZWQKKwkgICAgWG91dCAiSXMgKytlbXNnX3NraXAgZm9yIHZhciB3aXRoIGV4cHJfc3RhcnQgbm9uLU5VTEwiCisJCVwgImluIGZfZXhpc3RzIG9rPyIKKwllbmRpZgorICAgIGVuZGlmCisKKyAgICB1bmxldCEgdmFyIHRha2VuIGV4cGVjdGVkCisgICAgY2FsbCBkZWxldGUoV0FfdDUpCisgICAgY2FsbCBkZWxldGUoV0FfdDE0KQorICAgIGNhbGwgZGVsZXRlKFdBX3QyMykKKyAgICB1bmxldCEgV0FfdDUgV0FfdDE0IFdBX3QyMworICAgIGRlbGZ1bmN0aW9uIFdBX3Q1CisgICAgZGVsZnVuY3Rpb24gV0FfdDE0CisgICAgZGVsZnVuY3Rpb24gV0FfdDIzCisKK2VuZGlmCisKK1hjaGVjayAxNjEwMDg3OTM1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3NzogIEVycm9ycywgaW50ZXJ1cHRzLCA6dGhyb3cgaW4gbmFtZXticmFjZS1leHByZXNzaW9ufQkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYSBmdW5jdGlvbiBjYWxsIG1hZGUgZHVyaW5nIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbgorIgkgICAgYnJhY2VzIGFzIHBhcnQgb2YgYSBmdW5jdGlvbiBuYW1lIGFmdGVyICI6ZnVuY3Rpb24iIGlzIGFib3J0ZWQgZHVlCisiCSAgICB0byBhbiBlcnJvciBpbnNpZGUgYSA6dHJ5LzplbmR0cnkgcmVnaW9uIG9yIGR1ZSB0byBhbiBpbnRlcnJ1cHQgb3IKKyIJICAgIGEgOnRocm93LCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uIGlzIGFib3J0ZWQgYXMgd2VsbCwgYW5kIHRoZQorIgkgICAgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBpZ25vcmVkLCBza2lwcGluZyBhbGwgY29tbWFuZHMgdG8gdGhlCisiCSAgICAiOmVuZGZ1bmN0aW9uIi4gIE9uIGFuIGVycm9yIG5vdCBpbnNpZGUgOnRyeS86ZW5kdHJ5LCB0aGUgZXhwcmVzc2lvbgorIgkgICAgZXZhbHVhdGlvbiBjb250aW51ZXMgYW5kIHRoZSBmdW5jdGlvbiBnZXRzIGRlZmluZWQsIGFuZCBjYW4gYmUKKyIJICAgIGNhbGxlZCBhbmQgZGVsZXRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitYbG9vcElOSVQgMSA0CisKK2Z1bmN0aW9uISBFUlIoKSBhYm9ydAorICAgIFhsb29wIDEJCQkJCSIgWDogMSArIDQgKyAxNiArIDY0CisgICAgYXNkZgorZW5kZnVuY3Rpb24JCSIgcmV0dXJucyAtMQorCitmdW5jdGlvbiEgT0soKQorICAgIFhsb29wIDIJCQkJCSIgWDogMiAqICgxICsgNCArIDE2KQorICAgIGxldCB2OmVycm1zZyA9ICIiCisgICAgcmV0dXJuIDAKK2VuZGZ1bmN0aW9uCisKK2xldCB2OmVycm1zZyA9ICIiCisKK1hwYXRoIDQwOTYJCQkJCSIgWDogNDA5NgorZnVuY3Rpb24hIEZ7MSArIEVSUigpICsgT0soKX0oYXJnKQorICAgICIgRjAgc2hvdWxkIGJlIGRlZmluZWQuCisgICAgaWYgZXhpc3RzKCJhOmFyZyIpICYmIGE6YXJnID09ICJjYWxsaW5nIgorCVhwYXRoIDgxOTIJCQkJIiBYOiA4MTkyCisgICAgZWxzZQorCVhwYXRoIDE2Mzg0CQkJCSIgWDogMAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgoraWYgdjplcnJtc2cgIT0gIiIKKyAgICBYcGF0aCAzMjc2OAkJCQkJIiBYOiAwCitlbmRpZgorWGxvb3BORVhUCisKK1hwYXRoIDY1NTM2CQkJCQkiIFg6IDY1NTM2CitjYWxsIEZ7MSArIEVSUigpICsgT0soKX0oImNhbGxpbmciKQoraWYgdjplcnJtc2cgIT0gIiIKKyAgICBYcGF0aCAxMzEwNzIJCQkJIiBYOiAwCitlbmRpZgorWGxvb3BORVhUCisKK1hwYXRoIDI2MjE0NAkJCQkJIiBYOiAyNjIxNDQKK2RlbGZ1bmN0aW9uIEZ7MSArIEVSUigpICsgT0soKX0KK2lmIHY6ZXJybXNnICE9ICIiCisgICAgWHBhdGggNTI0Mjg4CQkJCSIgWDogMAorZW5kaWYKK1hsb29wTkVYVAorCit0cnkKKyAgICB3aGlsZSAxCisJbGV0IGNhdWdodCA9IDAKKwl0cnkKKwkgICAgWHBhdGggMTA0ODU3NgkJCSIgWDogMTA0ODU3NgorCSAgICBmdW5jdGlvbiEgR3sxICsgRVJSKCkgKyBPSygpfShhcmcpCisJCSIgRzAgc2hvdWxkIG5vdCBiZSBkZWZpbmVkLCBhbmQgdGhlIGZ1bmN0aW9uIGJvZHkgc2hvdWxkIGJlCisJCSIgc2tpcHBlZC4KKwkJaWYgZXhpc3RzKCJhOmFyZyIpICYmIGE6YXJnID09ICJjYWxsaW5nIgorCQkgICAgWHBhdGggMjA5NzE1MgkJIiBYOiAwCisJCWVsc2UKKwkJICAgIFhwYXRoIDQxOTQzMDQJCSIgWDogMAorCQllbmRpZgorCQkiIFVzZSBhbiB1bm1hdGNoZWQgIjpmaW5hbGx5IiB0byBjaGVjayB3aGV0aGVyIHRoZSBib2R5IGlzCisJCSIgc2tpcHBlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBpbiBFUlIoKS4gIFRoaXMgd29ya3Mgd2hldGhlciBvcgorCQkiIG5vdCB0aGUgZXhjZXB0aW9uIGlzIGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24uCisJCWZpbmFsbHkKKwkJICAgIFhwYXRoIDgzODg2MDgJCSIgWDogMAorCQkgICAgWG91dCAiQm9keSBvZiBHezEgKyBFUlIoKSArIE9LKCl9KCkgbm90IHNraXBwZWQiCisJCSAgICAiIERpc2NhcmQgdGhlIGFib3J0aW5nIGVycm9yIG9yIGV4Y2VwdGlvbiwgYW5kIGJyZWFrIHRoZQorCQkgICAgIiB3aGlsZSBsb29wLgorCQkgICAgYnJlYWsKKwkJIiBFbmQgdGhlIHRyeSBjb25kaXRpb25hbCBhbmQgc3RhcnQgYSBuZXcgb25lIHRvIGF2b2lkCisJCSIgIjpjYXRjaCBhZnRlciA6ZmluYWxseSIgZXJyb3JzLgorCQllbmR0cnkKKwkJdHJ5CisJCVhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAwCisJICAgIGVuZGZ1bmN0aW9uCisKKwkgICAgIiBXaGVuIHRoZSBmdW5jdGlvbiB3YXMgbm90IGRlZmluZWQsIHRoaXMgd29uJ3QgYmUgcmVhY2hlZCAtIHdoZXRoZXIKKwkgICAgIiB0aGUgYm9keSB3YXMgc2tpcHBlZCBvciBub3QuICBXaGVuIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgaXQKKwkgICAgIiBjYW4gYmUgY2FsbGVkIGFuZCBkZWxldGVkIGhlcmUuCisJICAgIFhwYXRoIDMzNTU0NDMyCQkJIiBYOiAwCisJICAgIFhvdXQgIkcwKCkgaGFzIGJlZW4gZGVmaW5lZCIKKwkgICAgWGxvb3BORVhUCisJICAgIHRyeQorCQljYWxsIEd7MSArIEVSUigpICsgT0soKX0oImNhbGxpbmciKQorCSAgICBjYXRjaCAvLiovCisJCVhwYXRoIDY3MTA4ODY0CQkJIiBYOiAwCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwkgICAgWGxvb3BORVhUCisJICAgIHRyeQorCQlkZWxmdW5jdGlvbiBHezEgKyBFUlIoKSArIE9LKCl9CisJICAgIGNhdGNoIC8uKi8KKwkJWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAwCisJICAgIGVuZHRyeQorCWNhdGNoIC9hc2RmLworCSAgICAiIEp1bXBlZCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCBhbmQgdGhlIGJvZHkgaXMKKwkgICAgIiBza2lwcGVkLgorCSAgICBsZXQgY2F1Z2h0ID0gMQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggNTM2ODcwOTEyCQkJIiBYOiAwCisJZmluYWxseQorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAxMDczNzQxODI0CQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKwllbmR0cnkJCQkiIGp1bXBlZCB0byB3aGVuIHRoZSBib2R5IGlzIG5vdCBza2lwcGVkCisgICAgZW5kd2hpbGUKK2NhdGNoIC8uKi8KKyAgICAiIFRoZSBYcGF0aCBjb21tYW5kIGRvZXMgbm90IGFjY2VwdCAyXjMxIChuZWdhdGl2ZSk7IGFkZCBleHBsaWNpdGx5OgorICAgIGxldCBYcGF0aCA9IFhwYXRoICsgMjE0NzQ4MzY0OAkJIiBYOiAwCisgICAgWG91dCAiQm9keSBvZiBHezEgKyBFUlIoKSArIE9LKCl9KCkgbm90IHNraXBwZWQsIGV4Y2VwdGlvbiBjYXVnaHQiCisgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorZW5kdHJ5CisKK1hjaGVjayAxMzg4NjcxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA3ODogIE1lc3NhZ2VzIG9uIHBhcnNpbmcgZXJyb3JzIGluIGV4cHJlc3Npb24gZXZhbHVhdGlvbgkJICAgIHt7ezEKKyIKKyIJICAgIFdoZW4gYW4gZXhwcmVzc2lvbiBldmFsdWF0aW9uIGRldGVjdHMgYSBwYXJzaW5nIGVycm9yLCBhbiBlcnJvcgorIgkgICAgbWVzc2FnZSBpcyBnaXZlbiBhbmQgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSBleHByZXNzaW9uCisiCSAgICBldmFsdWF0aW9uIGlzIGFib3J0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorCisgICAgbGV0IHRha2VuID0gIiIKKworICAgIGZ1bmN0aW9uISBGKG4pCisJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIkYiIC4gYTpuCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBNU0cobiwgZW5yLCBlbXNnKQorCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJNIiAuIGE6bgorCWxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKwlpZiBhOmVuciA9PSAiIgorCSAgICBYb3V0ICJUT0RPOiBBZGQgbWVzc2FnZSBudW1iZXIgZm9yOiIgYTplbXNnCisJICAgIGxldCB2OmVycm1zZyA9ICI6IiAuIHY6ZXJybXNnCisJZW5kaWYKKwlpZiB2OmVycm1zZyAhfiAnXicuYTplbnIuJzonIHx8IChlbmdsaXNoICYmIHY6ZXJybXNnICF+IGE6ZW1zZykKKwkgICAgaWYgdjplcnJtc2cgPT0gIiIKKwkJWG91dCAiRXhwciIgYTpuLiI6IE1lc3NhZ2UgbWlzc2luZy4iCisJCWxldCBnOnRha2VuID0gZzp0YWtlbiAuICJ4IgorCSAgICBlbHNlCisJCWxldCB2OmVycm1zZyA9IGVzY2FwZSh2OmVycm1zZywgJyInKQorCQlYb3V0ICJFeHByIiBhOm4uIjogVW5leHBlY3RlZCBtZXNzYWdlOiIgdjplcnJtc2cKKwkJbGV0IGc6dGFrZW4gPSBnOnRha2VuIC4gIlgiCisJICAgIGVuZGlmCisJZW5kaWYKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIENPTlQobikKKwlsZXQgZzp0YWtlbiA9IGc6dGFrZW4gLiAiQyIgLiBhOm4KKyAgICBlbmRmdW5jdGlvbgorCisgICAgbGV0IHY6ZXJybXNnID0gIiIKKyAgICBYbG9vcElOSVQgMSAyCisKKyAgICB0cnkKKwlsZXQgdCA9IDEKKwl3aGlsZSB0IDw9IDE0CisJICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIHQKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgdHJ5CisJCWxldCBjYXVnaHQgPSAwCisJCWlmIHQgPT0gMQorCQkgICAgbGV0IHZ7bm92YXIgKyBDT05UKHQpfSA9IDAKKwkJZWxzZWlmIHQgPT0gMgorCQkgICAgbGV0IHZ7bm92YXIgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAzCisJCSAgICBsZXQgdmFyID0gZXhpc3RzKCd2e25vdmFyICsgQ09OVCh0KX0nKQorCQllbHNlaWYgdCA9PSA0CisJCSAgICB1bmxldCB2e25vdmFyICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gNQorCQkgICAgZnVuY3Rpb24gRntub3ZhciArIENPTlQodCl9KCkKKwkJICAgIGVuZGZ1bmN0aW9uCisJCWVsc2VpZiB0ID09IDYKKwkJICAgIGZ1bmN0aW9uIEZ7bm92YXIgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSA3CisJCSAgICBsZXQgdmFyID0gZXhpc3RzKCcqRntub3ZhciArIENPTlQodCl9JykKKwkJZWxzZWlmIHQgPT0gOAorCQkgICAgZGVsZnVuY3Rpb24gRntub3ZhciArIENPTlQodCl9CisJCWVsc2VpZiB0ID09IDkKKwkJICAgIGVjaG8gbm92YXIgKyBDT05UKHQpCisJCWVsc2VpZiB0ID09IDEwCisJCSAgICBlY2hvIHZ7bm92YXIgKyBDT05UKHQpfQorCQllbHNlaWYgdCA9PSAxMQorCQkgICAgZWNobyBGe25vdmFyICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTIKKwkJICAgIGxldCB2YXIgPSBub3ZhciArIENPTlQodCkKKwkJZWxzZWlmIHQgPT0gMTMKKwkJICAgIGxldCB2YXIgPSB2e25vdmFyICsgQ09OVCh0KX0KKwkJZWxzZWlmIHQgPT0gMTQKKwkJICAgIGxldCB2YXIgPSBGe25vdmFyICsgQ09OVCh0KX0oKQorCQllbmRpZgorCSAgICBjYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJCSIgdjplcnJtc2cgaXMgbm90IHNldCB3aGVuIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNvbnZlcnRlZCB0byBhbgorCQkiIGV4Y2VwdGlvbi4gIFNldCBpdCB0byB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZS4KKwkJbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwKKwkJICAgIFwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCWlmICFjYXVnaHQJIiBubyBlcnJvciBleGNlcHRpb25zICgkVklNTk9FUlJUSFJPVyBzZXQpCisJCSAgICBpZiB0IDw9IDggJiYgdCAhPSAzCisJCQljYWxsIE1TRyh0LCAnRTQ3NScsICdJbnZhbGlkIGFyZ3VtZW50XD4nKQorCQkgICAgZWxzZQorCQkJY2FsbCBNU0codCwgJ0UxNScsICJJbnZhbGlkIGV4cHJlc3Npb24iKQorCQkgICAgZW5kaWYKKwkJZWxzZQorCQkgICAgaWYgdCA9PSAyIHx8IHQgPT0gNAorCQkJY2FsbCBNU0codCwgJ0U0NzUnLCAnSW52YWxpZCBhcmd1bWVudFw+JykKKwkJICAgIGVsc2UKKwkJCWNhbGwgTVNHKHQsICdFMTIxJywgIlVuZGVmaW5lZCB2YXJpYWJsZSIpCisJCSAgICBlbmRpZgorCQllbmRpZgorCQlsZXQgdCA9IHQgKyAxCisJCVhsb29wTkVYVAorCQljb250aW51ZQkiIGRpc2NhcmQgYW4gYWJvcnRpbmcgZXJyb3IKKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKyAgICBjYXRjaCAvLiovCisJWGxvb3AgMQkJCQkJIiBYOiAwCisJWG91dCB0LiI6IiB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisgICAgZW5kdHJ5CisKKyAgICBmdW5jdGlvbiEgVChuLCBleHByLCBlbnIsIGVtc2cpCisJdHJ5CisJICAgIGxldCBnOnRha2VuID0gZzp0YWtlbiAuICJUIiAuIGE6bgorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICB0cnkKKwkJbGV0IGNhdWdodCA9IDAKKwkJZXhlY3V0ZSAibGV0IHZhciA9ICIgLiBhOmV4cHIKKwkgICAgY2F0Y2ggL15WaW1cKChcYVwrKVwpXD06LworCQkiIHY6ZXJybXNnIGlzIG5vdCBzZXQgd2hlbiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjb252ZXJ0ZWQgdG8gYW4KKwkJIiBleGNlcHRpb24uICBTZXQgaXQgdG8gdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UuCisJCWxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sCisJCSAgICBcICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlpZiAhY2F1Z2h0CSIgbm8gZXJyb3IgZXhjZXB0aW9ucyAoJFZJTU5PRVJSVEhST1cgc2V0KQorCQkgICAgY2FsbCBNU0coYTpuLCAnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisJCWVsc2UKKwkJICAgIGNhbGwgTVNHKGE6biwgYTplbnIsIGE6ZW1zZykKKwkJZW5kaWYKKwkJWGxvb3BORVhUCisJCSIgRGlzY2FyZCBhbiBhYm9ydGluZyBlcnJvcjoKKwkJcmV0dXJuCisJICAgIGVuZHRyeQorCWNhdGNoIC8uKi8KKwkgICAgWGxvb3AgMQkJCQkiIFg6IDAKKwkgICAgWG91dCBhOm4uIjoiIHY6ZXhjZXB0aW9uICJpbiIgRXh0cmFWaW1UaHJvd3BvaW50KCkKKwllbmR0cnkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY2FsbCBUKDE1LCAnTm9mdW5jKCkgKyBDT05UKDE1KScsCSdFMTE3JywJIlVua25vd24gZnVuY3Rpb24iKQorICAgIGNhbGwgVCgxNiwgJ0YoMSAyICsgQ09OVCgxNikpJywJJ0UxMTYnLAkiSW52YWxpZCBhcmd1bWVudHMiKQorICAgIGNhbGwgVCgxNywgJ0YoMSwgMikgKyBDT05UKDE3KScsCSdFMTE4JywJIlRvbyBtYW55IGFyZ3VtZW50cyIpCisgICAgY2FsbCBUKDE4LCAnRigpICsgQ09OVCgxOCknLAknRTExOScsCSJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpCisgICAgY2FsbCBUKDE5LCAneygxfSArIENPTlQoMTkpJywJJ0UxMTAnLAkiTWlzc2luZyAnKSciKQorICAgIGNhbGwgVCgyMCwgJygiYWJjIlsxKSArIENPTlQoMjApJywJJ0UxMTEnLAkiTWlzc2luZyAnXSciKQorICAgIGNhbGwgVCgyMSwgJygxICspICsgQ09OVCgyMSknLAknRTE1JywJIkludmFsaWQgZXhwcmVzc2lvbiIpCisgICAgY2FsbCBUKDIyLCAnMSAyICsgQ09OVCgyMiknLAknRTE1JywJIkludmFsaWQgZXhwcmVzc2lvbiIpCisgICAgY2FsbCBUKDIzLCAnKDEgPyAyKSArIENPTlQoMjMpJywJJ0UxMDknLAkiTWlzc2luZyAnOicgYWZ0ZXIgJz8nIikKKyAgICBjYWxsIFQoMjQsICcoImFiYykgKyBDT05UKDI0KScsCSdFMTE0JywJIk1pc3NpbmcgcXVvdGUiKQorICAgIGNhbGwgVCgyNSwgIignYWJjKSArIENPTlQoMjUpIiwJJ0UxMTUnLAkiTWlzc2luZyBxdW90ZSIpCisgICAgY2FsbCBUKDI2LCAnJiArIENPTlQoMjYpJywJCSdFMTEyJywgIk9wdGlvbiBuYW1lIG1pc3NpbmciKQorICAgIGNhbGwgVCgyNywgJyZhc2RmICsgQ09OVCgyNyknLAknRTExMycsICJVbmtub3duIG9wdGlvbiIpCisKKyAgICBYcGF0aCAxMzQyMTc3MjgJCQkJIiBYOiAxMzQyMTc3MjgKKworICAgIGxldCBleHBlY3RlZCA9ICIiCisJXCAuICJUMU0xVDJNMlQzTTNUNE00VDVNNVQ2TTZUN003VDhNOFQ5TTlUMTBNMTBUMTFNMTFUMTJNMTJUMTNNMTNUMTRNMTQiCisJXCAuICJUMTVNMTVUMTZNMTZUMTdNMTdUMThNMThUMTlNMTlUMjBNMjBUMjFNMjFUMjJNMjJUMjNNMjNUMjRNMjRUMjVNMjUiCisJXCAuICJUMjZNMjZUMjdNMjciCisKKyAgICBpZiB0YWtlbiAhPSBleHBlY3RlZAorCVhwYXRoIDI2ODQzNTQ1NgkJCQkiIFg6IDAKKwlYb3V0ICIndGFrZW4nIGlzIiB0YWtlbiAiaW5zdGVhZCBvZiIgZXhwZWN0ZWQKKwlpZiBzdWJzdGl0dXRlKHRha2VuLCAnXCguKlwpVDNNM3hcKC4qXCknLCAnXDFUM00zXDInLCAiIikgPT0gZXhwZWN0ZWQKKwkgICAgWG91dCAiSXMgKytlbXNnX3NraXAgZm9yIHZhciB3aXRoIGV4cHJfc3RhcnQgbm9uLU5VTEwiCisJCVwgImluIGZfZXhpc3RzIG9rPyIKKwllbmRpZgorICAgIGVuZGlmCisKKyAgICB1bmxldCEgdmFyIGNhdWdodCB0YWtlbiBleHBlY3RlZAorICAgIGNhbGwgZGVsZXRlKFdBX3Q1KQorICAgIHVubGV0ISBXQV90NQorICAgIGRlbGZ1bmN0aW9uIFdBX3Q1CisKK2VuZGlmCisKK1hjaGVjayAxMzQyMTc3MjgKKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBUZXN0IDc5OiAgVGhyb3dpbmcgb25lIG9mIHNldmVyYWwgZXJyb3JzIGZvciB0aGUgc2FtZSBjb21tYW5kCQkgICAge3t7MQorIgorIgkgICAgV2hlbiBzZXZlcmFsIGVycm9ycyBhcHBlYXIgaW4gYSByb3cgKGZvciBpbnN0YW5jZSBkdXJpbmcgZXhwcmVzc2lvbgorIgkgICAgZXZhbHVhdGlvbiksIHRoZSBmaXJzdCBhcyB0aGUgbW9zdCBzcGVjaWZpYyBvbmUgaXMgdXNlZCB3aGVuCisiCSAgICB0aHJvd2luZyBhbiBlcnJvciBleGNlcHRpb24uICBJZiwgaG93ZXZlciwgYSBzeW50YXggZXJyb3IgaXMKKyIJICAgIGRldGVjdGVkIGFmdGVyd2FyZHMsIHRoaXMgb25lIGlzIHVzZWQgZm9yIHRoZSBlcnJvciBleGNlcHRpb24uCisiCSAgICBPbiBhIHN5bnRheCBlcnJvciwgdGhlIG5leHQgY29tbWFuZCBpcyBub3QgZXhlY3V0ZWQsIG9uIGEgbm9ybWFsCisiCSAgICBlcnJvciwgaG93ZXZlciwgaXQgaXMgKHJlbGV2YW50IG9ubHkgaW4gYSBmdW5jdGlvbiB3aXRob3V0IHRoZQorIgkgICAgImFib3J0IiBmbGFnKS4gIHY6ZXJybXNnIGlzIG5vdCBzZXQuCisiCisiCSAgICBJZiB0aHJvd2luZyBlcnJvciBleGNlcHRpb25zIGlzIGNvbmZpZ3VyZWQgb2ZmLCB2OmVycm1zZyBpcyBhbHdheXMKKyIJICAgIHNldCB0byB0aGUgbGF0ZXN0IGVycm9yIG1lc3NhZ2UsIHRoYXQgaXMsIHRvIHRoZSBtb3JlIGdlbmVyYWwKKyIJICAgIG1lc3NhZ2Ugb3IgdGhlIHN5bnRheCBlcnJvciwgcmVzcGVjdGl2ZWx5LgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK1hsb29wSU5JVCAxIDIKKworZnVuY3Rpb24hIE5FWFQoY21kKQorICAgIGV4ZWMgYTpjbWQgLiAiIHwgWGxvb3AgMSIKK2VuZGZ1bmN0aW9uCisKK2NhbGwgTkVYVCgnZWNobyBub3ZhcicpCQkJCSIgWDogMSAqICAxICAoY2hlY2tzIG5leHRjbWQpCitYbG9vcE5FWFQKK2NhbGwgTkVYVCgnbGV0IG5vdmFyICMnKQkJCSIgWDogMCAqICAyICAoc2tpcHMgbmV4dGNtZCkKK1hsb29wTkVYVAorY2FsbCBORVhUKCd1bmxldCBub3ZhciAjJykJCQkiIFg6IDAgKiAgNCAgKHNraXBzIG5leHRjbWQpCitYbG9vcE5FWFQKK2NhbGwgTkVYVCgnbGV0IHtub3Zhcn0nKQkJCSIgWDogMCAqICA4ICAoc2tpcHMgbmV4dGNtZCkKK1hsb29wTkVYVAorY2FsbCBORVhUKCd1bmxldHsgbm92YXJ9JykJCQkiIFg6IDAgKiAxNiAgKHNraXBzIG5leHRjbWQpCisKK2Z1bmN0aW9uISBFWEVDKGNtZCkKKyAgICBleGVjIGE6Y21kCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgTUFUQ0goZXhwZWN0ZWQsIG1zZywgZW5yLCBlbXNnKQorICAgIGxldCBtc2cgPSBhOm1zZworICAgIGlmIGE6ZW5yID09ICIiCisJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGE6ZW1zZworCWxldCBtc2cgPSAiOiIgLiBtc2cKKyAgICBlbmRpZgorICAgIGxldCBlbmdsaXNoID0gdjpsYW5nID09ICJDIiB8fCB2OmxhbmcgPX4gJ15bRWVdbicKKyAgICBpZiBtc2cgIX4gJ14nLmE6ZW5yLic6JyB8fCAoZW5nbGlzaCAmJiBtc2cgIX4gYTplbXNnKQorCWxldCBtYXRjaCA9ICAwCisJaWYgYTpleHBlY3RlZAkJIiBubyBtYXRjaCBhbHRob3VnaCBleHBlY3RlZAorCSAgICBpZiBhOm1zZyA9PSAiIgorCQlYb3V0ICJNZXNzYWdlIG1pc3NpbmcuIgorCSAgICBlbHNlCisJCWxldCBtc2cgPSBlc2NhcGUobXNnLCAnIicpCisJCVhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIG1zZworCSAgICBlbmRpZgorCWVuZGlmCisgICAgZWxzZQorCWxldCBtYXRjaCA9ICAxCisJaWYgIWE6ZXhwZWN0ZWQJCSIgbWF0Y2ggYWx0aG91Z2ggbm90IGV4cGVjdGVkCisJICAgIGxldCBtc2cgPSBlc2NhcGUobXNnLCAnIicpCisJICAgIFhvdXQgIlVuZXhwZWN0ZWQgbWVzc2FnZToiIG1zZworCWVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gbWF0Y2gKK2VuZGZ1bmN0aW9uCisKK3RyeQorCisgICAgd2hpbGUgMQkJCQkiIGR1bW15IGxvb3AKKwl0cnkKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHRocm1zZyA9ICIiCisJICAgIGNhbGwgRVhFQygnZWNobyBub3ZhcicpCSIgbm9ybWFsIGVycm9yCisJY2F0Y2ggL15WaW1cKChcYVwrKVwpXD06LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdGhybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAzMgorCSAgICBpZiAhY2F1Z2h0CisJCWlmICEkVklNTk9FUlJUSFJPVworCQkgICAgWHBhdGggNjQJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZWxzZWlmICFNQVRDSCgxLCB0aHJtc2csICdFMTIxJywgIlVuZGVmaW5lZCB2YXJpYWJsZSIpCisJICAgIFwgfHwgdjplcnJtc2cgIT0gIiIKKwkJWHBhdGggMTI4CQkJIiBYOiAwCisJICAgIGVuZGlmCisJICAgIGlmICFjYXVnaHQgJiYgIU1BVENIKDEsIHY6ZXJybXNnLCAnRTE1JywgIkludmFsaWQgZXhwcmVzc2lvbiIpCisJCVhwYXRoIDI1NgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBicmVhawkJCSIgZGlzY2FyZCBlcnJvciBpZiAkVklNTk9FUlJUSFJPVyA9PSAxCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIFhwYXRoIDUxMgkJCQkJIiBYOiA1MTIKKyAgICBsZXQgY21kID0gImxldCIKKyAgICBYbG9vcElOSVQgMTAyNCAzMgorICAgIHdoaWxlIGNtZCAhPSAiIgorCXRyeQorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBsZXQgdGhybXNnID0gIiIKKwkgICAgY2FsbCBFWEVDKGNtZCAuICcgbm92YXIgIycpCQkiIG5vcm1hbCBwbHVzIHN5bnRheCBlcnJvcgorCWNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHRocm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhsb29wIDEJCQkJIiBYOiAxMDI0ICogKDEgKyAzMikKKwkgICAgaWYgIWNhdWdodAorCQlpZiAhJFZJTU5PRVJSVEhST1cKKwkJICAgIFhsb29wIDIJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZWxzZQorCQlpZiBjbWQgPT0gImxldCIKKwkJICAgIGxldCBtYXRjaCA9IE1BVENIKDAsIHRocm1zZywgJ0UxMDYnLCAiVW5rbm93biB2YXJpYWJsZSIpCisJCWVsc2VpZiBjbWQgPT0gInVubGV0IgorCQkgICAgbGV0IG1hdGNoID0gTUFUQ0goMCwgdGhybXNnLCAnRTEwOCcsICJObyBzdWNoIHZhcmlhYmxlIikKKwkJZW5kaWYKKwkJaWYgbWF0Y2gJCQkJCSIgbm9ybWFsIGVycm9yCisJCSAgICBYbG9vcCA0CQkJIiBYOiAwCisJCWVuZGlmCisJCWlmICFNQVRDSCgxLCB0aHJtc2csICdFNDg4JywgIlRyYWlsaW5nIGNoYXJhY3RlcnMiKQorCQlcfHwgdjplcnJtc2cgIT0gIiIKKwkJCQkJCQkJIiBzeW50YXggZXJyb3IKKwkJICAgIFhsb29wIDgJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZW5kaWYKKwkgICAgaWYgIWNhdWdodCAmJiAhTUFUQ0goMSwgdjplcnJtc2csICdFNDg4JywgIlRyYWlsaW5nIGNoYXJhY3RlcnMiKQorCQkJCQkJCQkiIGxhc3QgZXJyb3IKKwkJWGxvb3AgMTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgY21kID09ICJsZXQiCisJCWxldCBjbWQgPSAidW5sZXQiCisJICAgIGVsc2UKKwkJbGV0IGNtZCA9ICIiCisJICAgIGVuZGlmCisJICAgIFhsb29wTkVYVAorCSAgICBjb250aW51ZQkJCSIgZGlzY2FyZCBlcnJvciBpZiAkVklNTk9FUlJUSFJPVyA9PSAxCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKKworICAgIFhwYXRoIDEwNDg1NzYJCQkJIiBYOiAxMDQ4NTc2CisgICAgbGV0IGNtZCA9ICJsZXQiCisgICAgWGxvb3BJTklUIDIwOTcxNTIgMzIKKyAgICB3aGlsZSBjbWQgIT0gIiIKKwl0cnkKKwkgICAgbGV0IHY6ZXJybXNnID0gIiIKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgbGV0IHRocm1zZyA9ICIiCisJICAgIGNhbGwgRVhFQyhjbWQgLiAnIHtub3Zhcn0nKQkJIiBub3JtYWwgcGx1cyBzeW50YXggZXJyb3IKKwljYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB0aHJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbVwoKFxhXCspXClcPTonLCAnJywgIiIpCisJZmluYWxseQorCSAgICBYbG9vcCAxCQkJCSIgWDogMjA5NzE1MiAqICgxICsgMzIpCisJICAgIGlmICFjYXVnaHQKKwkJaWYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYbG9vcCAyCQkJIiBYOiAwCisJCWVuZGlmCisJICAgIGVsc2UKKwkJaWYgTUFUQ0goMCwgdGhybXNnLCAnRTEyMScsICJVbmRlZmluZWQgdmFyaWFibGUiKSAiIG5vcm1hbCBlcnJvcgorCQkgICAgWGxvb3AgNAkJCSIgWDogMAorCQllbmRpZgorCQlpZiAhTUFUQ0goMSwgdGhybXNnLCAnRTQ3NScsICdJbnZhbGlkIGFyZ3VtZW50XD4nKQorCQlcIHx8IHY6ZXJybXNnICE9ICIiCQkJCSAgIiBzeW50YXggZXJyb3IKKwkJICAgIFhsb29wIDgJCQkiIFg6IDAKKwkJZW5kaWYKKwkgICAgZW5kaWYKKwkgICAgaWYgIWNhdWdodCAmJiAhTUFUQ0goMSwgdjplcnJtc2csICdFNDc1JywgJ0ludmFsaWQgYXJndW1lbnRcPicpCisJCQkJCQkJCSIgbGFzdCBlcnJvcgorCQlYbG9vcCAxNgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBjbWQgPT0gImxldCIKKwkJbGV0IGNtZCA9ICJ1bmxldCIKKwkgICAgZWxzZQorCQlsZXQgY21kID0gIiIKKwkgICAgZW5kaWYKKwkgICAgWGxvb3BORVhUCisJICAgIGNvbnRpbnVlCQkJIiBkaXNjYXJkIGVycm9yIGlmICRWSU1OT0VSUlRIUk9XID09IDEKKwllbmR0cnkKKyAgICBlbmR3aGlsZQorCitjYXRjaCAvLiovCisgICAgIiBUaGUgWHBhdGggY29tbWFuZCBkb2VzIG5vdCBhY2NlcHQgMl4zMSAobmVnYXRpdmUpOyBhZGQgZXhwbGljaXRseToKKyAgICBsZXQgWHBhdGggPSBYcGF0aCArIDIxNDc0ODM2NDgJCSIgWDogMAorICAgIFhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKK2VuZHRyeQorCit1bmxldCEgbmV4dF9jb21tYW5kIHRocm1zZyBtYXRjaAorZGVsZnVuY3Rpb24gTkVYVAorZGVsZnVuY3Rpb24gRVhFQworZGVsZnVuY3Rpb24gTUFUQ0gKKworWGNoZWNrIDcwMjg4OTI5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4MDogIFN5bnRheCBlcnJvciBpbiBleHByZXNzaW9uIGZvciBpbGxlZ2FsIDplbHNlaWYJCSAgICB7e3sxCisiCisiCSAgICBJZiB0aGVyZSBpcyBhIHN5bnRheCBlcnJvciBpbiB0aGUgZXhwcmVzc2lvbiBhZnRlciBhbiBpbGxlZ2FsCisiCSAgICA6ZWxzZWlmLCBhbiBlcnJvciBtZXNzYWdlIGlzIGdpdmVuIChvciBhbiBlcnJvciBleGNlcHRpb24gdGhyb3duKQorIgkgICAgZm9yIHRoZSBpbGxlZ2FsIDplbHNlaWYgcmF0aGVyIHRoYW4gdGhlIGV4cHJlc3Npb24gZXJyb3IuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworZnVuY3Rpb24hIE1TRyhlbnIsIGVtc2cpCisgICAgbGV0IGVuZ2xpc2ggPSB2OmxhbmcgPT0gIkMiIHx8IHY6bGFuZyA9fiAnXltFZV1uJworICAgIGlmIGE6ZW5yID09ICIiCisJWG91dCAiVE9ETzogQWRkIG1lc3NhZ2UgbnVtYmVyIGZvcjoiIGE6ZW1zZworCWxldCB2OmVycm1zZyA9ICI6IiAuIHY6ZXJybXNnCisgICAgZW5kaWYKKyAgICBsZXQgbWF0Y2ggPSAxCisgICAgaWYgdjplcnJtc2cgIX4gJ14nLmE6ZW5yLic6JyB8fCAoZW5nbGlzaCAmJiB2OmVycm1zZyAhfiBhOmVtc2cpCisJbGV0IG1hdGNoID0gMAorCWlmIHY6ZXJybXNnID09ICIiCisJICAgIFhvdXQgIk1lc3NhZ2UgbWlzc2luZy4iCisJZWxzZQorCSAgICBsZXQgdjplcnJtc2cgPSBlc2NhcGUodjplcnJtc2csICciJykKKwkgICAgWG91dCAiVW5leHBlY3RlZCBtZXNzYWdlOiIgdjplcnJtc2cKKwllbmRpZgorICAgIGVuZGlmCisgICAgcmV0dXJuIG1hdGNoCitlbmRmdW5jdGlvbgorCitsZXQgdjplcnJtc2cgPSAiIgoraWYgMAorZWxzZQorZWxzZWlmIDEgfHx8IDIKK2VuZGlmCitYcGF0aCAxCQkJCQkJIiBYOiAxCitpZiAhTVNHKCdFNTg0JywgIjplbHNlaWYgYWZ0ZXIgOmVsc2UiKQorICAgIFhwYXRoIDIJCQkJCSIgWDogMAorZW5kaWYKKworbGV0IHY6ZXJybXNnID0gIiIKK2lmIDEKK2Vsc2UKK2Vsc2VpZiAxIHx8fCAyCitlbmRpZgorWHBhdGggNAkJCQkJCSIgWDogNAoraWYgIU1TRygnRTU4NCcsICI6ZWxzZWlmIGFmdGVyIDplbHNlIikKKyAgICBYcGF0aCA4CQkJCQkiIFg6IDAKK2VuZGlmCisKK2xldCB2OmVycm1zZyA9ICIiCitlbHNlaWYgMSB8fHwgMgorWHBhdGggMTYJCQkJCSIgWDogMTYKK2lmICFNU0coJ0U1ODInLCAiOmVsc2VpZiB3aXRob3V0IDppZiIpCisgICAgWHBhdGggMzIJCQkJCSIgWDogMAorZW5kaWYKKworbGV0IHY6ZXJybXNnID0gIiIKK3doaWxlIDEKKyAgICBlbHNlaWYgMSB8fHwgMgorZW5kd2hpbGUKK1hwYXRoIDY0CQkJCQkiIFg6IDY0CitpZiAhTVNHKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAwCitlbmRpZgorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIGlmIDAKKwkgICAgZWxzZQorCSAgICBlbHNlaWYgMSB8fHwgMgorCSAgICBlbmRpZgorCWNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMjU2CQkJCSIgWDogMjU2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDUxMgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFNTg0JywgIjplbHNlaWYgYWZ0ZXIgOmVsc2UiKQorCQlYcGF0aCAxMDI0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDIwNDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBpZiAxCisJICAgIGVsc2UKKwkgICAgZWxzZWlmIDEgfHx8IDIKKwkgICAgZW5kaWYKKwljYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDQwOTYJCQkJIiBYOiA0MDk2CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTU4NCcsICI6ZWxzZWlmIGFmdGVyIDplbHNlIikKKwkJWHBhdGggMTYzODQJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgdjplcnJtc2cgPSAiIgorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICBlbHNlaWYgMSB8fHwgMgorCWNhdGNoIC9eVmltXCgoXGFcKylcKVw9Oi8KKwkgICAgbGV0IGNhdWdodCA9IDEKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChcYVwrKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggNjU1MzYJCQkJIiBYOiA2NTUzNgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgIU1TRygnRTU4MicsICI6ZWxzZWlmIHdpdGhvdXQgOmlmIikKKwkJWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDUyNDI4OAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCB2OmVycm1zZyA9ICIiCisJICAgIGxldCBjYXVnaHQgPSAwCisJICAgIHdoaWxlIDEKKwkJZWxzZWlmIDEgfHx8IDIKKwkgICAgZW5kd2hpbGUKKwljYXRjaCAvXlZpbVwoKFxhXCspXClcPTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltXCgoXGFcKylcKVw9OicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkgICAgaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiAhTVNHKCdFNTgyJywgIjplbHNlaWYgd2l0aG91dCA6aWYiKQorCQlYcGF0aCA0MTk0MzA0CQkJIiBYOiAwCisJICAgIGVuZGlmCisJZW5kdHJ5CisgICAgY2F0Y2ggLy4qLworCVhwYXRoIDgzODg2MDgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKworWHBhdGggMTY3NzcyMTYJCQkJCSIgWDogMTY3NzcyMTYKKwordW5sZXQhIGNhdWdodAorZGVsZnVuY3Rpb24gTVNHCisKK1hjaGVjayAxNzg5NTc2NQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODE6ICBEaXNjYXJkaW5nIGV4Y2VwdGlvbnMgYWZ0ZXIgYW4gZXJyb3Igb3IgaW50ZXJydXB0CQkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5zaWRlIGEgOnRyeSBjb25kaXRpb25hbCB3aXRob3V0CisiCSAgICA6Y2F0Y2ggYW5kIDpmaW5hbGx5IGNsYXVzZXMgYW5kIGFuIGVycm9yIG9yIGludGVycnVwdCBvY2N1cnMgYmVmb3JlCisiCSAgICB0aGUgOmVuZHRyeSBpcyByZWFjaGVkLCB0aGUgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitpZiBFeHRyYVZpbSgpCisgICAgdHJ5CisJWHBhdGggMQkJCQkJIiBYOiAxCisJdHJ5CisJICAgIFhwYXRoIDIJCQkJIiBYOiAyCisJICAgIHRocm93ICJhcnJnaCIKKwkgICAgWHBhdGggNAkJCQkiIFg6IDAKKyIJICAgIGlmIDEKKwkJWHBhdGggOAkJCQkiIFg6IDAKKwkgICAgIiBlcnJvciBhZnRlciA6dGhyb3c6IG1pc3NpbmcgOmVuZGlmCisJZW5kdHJ5CisJWHBhdGggMTYJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDY0CQkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICB0cnkKKwlYcGF0aCAxMjgJCQkJIiBYOiAxMjgKKwl0cnkKKwkgICAgWHBhdGggMjU2CQkJCSIgWDogMjU2CisJICAgIHRocm93ICJhcnJnaCIKKwkgICAgWHBhdGggNTEyCQkJCSIgWDogMAorCWVuZHRyeQkJIiBJTlRFUlJVUFQKKwlYcGF0aCAxMDI0CQkJCSIgWDogMAorICAgIGNhdGNoIC9hcnJnaC8KKwlYcGF0aCAyMDQ4CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDQwOTYJCQkJCSIgWDogMAorZW5kaWYKKworWGNoZWNrIDM4NworCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODI6ICBJZ25vcmluZyA6Y2F0Y2ggY2xhdXNlcyBhZnRlciBhbiBlcnJvciBvciBpbnRlcnJ1cHQJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gYW5kIGFuIGVycm9yIG9yIGludGVycnVwdCBvY2N1cnMgYmVmb3JlCisiCSAgICB0aGUgbWF0Y2hpbmcgOmNhdGNoIGNsYXVzZSBpcyByZWFjaGVkLCB0aGUgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZAorIgkgICAgYW5kIHRoZSA6Y2F0Y2ggY2xhdXNlIGlzIGlnbm9yZWQgKGFsc28gZm9yIHRoZSBlcnJvciBvciBpbnRlcnJ1cHQKKyIJICAgIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gdGhlbikuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCXRyeQorCSAgICBYcGF0aCAxCQkJCSIgWDogMQorCSAgICB0aHJvdyAiYXJyZ2giCisJICAgIFhwYXRoIDIJCQkJIiBYOiAwCisiCSAgICBpZiAxCisJCVhwYXRoIDQJCQkJIiBYOiAwCisJCSIgZXJyb3IgYWZ0ZXIgOnRocm93OiBtaXNzaW5nIDplbmRpZgorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggOAkJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJY2F0Y2ggLy4qLworCSAgICBYcGF0aCAxNgkJCQkiIFg6IDAKKwkgICAgWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJZW5kdHJ5CisJWHBhdGggMzIJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDY0CQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDEyOAkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgZnVuY3Rpb24hIEUoKQorCXRyeQorCSAgICB0cnkKKwkJWHBhdGggMjU2CQkJIiBYOiAyNTYKKwkJdGhyb3cgImFycmdoIgorCQlYcGF0aCA1MTIJCQkiIFg6IDAKKyIJCWlmIDEKKwkJICAgIFhwYXRoIDEwMjQJCQkiIFg6IDAKKwkJICAgICIgZXJyb3IgYWZ0ZXIgOnRocm93OiBtaXNzaW5nIDplbmRpZgorCSAgICBjYXRjaCAvLiovCisJCVhwYXRoIDIwNDgJCQkiIFg6IDAKKwkJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJICAgIGNhdGNoIC8uKi8KKwkJWHBhdGggNDA5NgkJCSIgWDogMAorCQlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgRXh0cmFWaW1UaHJvd3BvaW50KCkKKwkgICAgZW5kdHJ5CisJICAgIFhwYXRoIDgxOTIJCQkJIiBYOiAwCisJY2F0Y2ggL2FycmdoLworCSAgICBYcGF0aCAxNjM4NAkJCQkiIFg6IDAKKwllbmR0cnkKKyAgICBlbmRmdW5jdGlvbgorCisgICAgY2FsbCBFKCkKKyAgICBYcGF0aCAzMjc2OAkJCQkJIiBYOiAwCitlbmRpZgorCitpZiBFeHRyYVZpbSgpCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwkgICAgdGhyb3cgImFycmdoIgorCSAgICBYcGF0aCAxMzEwNzIJCQkiIFg6IDAKKwljYXRjaCAvLiovCSJJTlRFUlJVUFQKKwkgICAgWHBhdGggMjYyMTQ0CQkJIiBYOiAwCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorCWNhdGNoIC8uKi8KKwkgICAgWHBhdGggNTI0Mjg4CQkJIiBYOiAwCisJICAgIFhvdXQgdjpleGNlcHRpb24gImluIiBFeHRyYVZpbVRocm93cG9pbnQoKQorCWVuZHRyeQorCVhwYXRoIDEwNDg1NzYJCQkJIiBYOiAwCisgICAgY2F0Y2ggL2FycmdoLworCVhwYXRoIDIwOTcxNTIJCQkJIiBYOiAwCisgICAgZW5kdHJ5CisgICAgWHBhdGggNDE5NDMwNAkJCQkiIFg6IDAKK2VuZGlmCisKK2lmIEV4dHJhVmltKCkKKyAgICBmdW5jdGlvbiBJKCkKKwl0cnkKKwkgICAgdHJ5CisJCVhwYXRoIDgzODg2MDgJCQkiIFg6IDgzODg2MDgKKwkJdGhyb3cgImFycmdoIgorCQlYcGF0aCAxNjc3NzIxNgkJCSIgWDogMAorCSAgICBjYXRjaCAvLiovCSJJTlRFUlJVUFQKKwkJWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDAKKwkJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJICAgIGNhdGNoIC8uKi8KKwkJWHBhdGggNjcxMDg4NjQJCQkiIFg6IDAKKwkJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIEV4dHJhVmltVGhyb3dwb2ludCgpCisJICAgIGVuZHRyeQorCSAgICBYcGF0aCAxMzQyMTc3MjgJCQkiIFg6IDAKKwljYXRjaCAvYXJyZ2gvCisJICAgIFhwYXRoIDI2ODQzNTQ1NgkJCSIgWDogMAorCWVuZHRyeQorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBjYWxsIEkoKQorICAgIFhwYXRoIDUzNjg3MDkxMgkJCQkiIFg6IDAKK2VuZGlmCisKK1hjaGVjayA4NDU0NDAxCisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4MzogIEV4ZWN1dGluZyA6ZmluYWxseSBjbGF1c2VzIGFmdGVyIGFuIGVycm9yIG9yIGludGVycnVwdAkgICAge3t7MQorIgorIgkgICAgV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFuZCBhbiBlcnJvciBvciBpbnRlcnJ1cHQgb2NjdXJzIGJlZm9yZQorIgkgICAgdGhlIDpmaW5hbGx5IG9mIHRoZSBpbm5lcm1vc3QgOnRyeSBpcyByZWFjaGVkLCB0aGUgZXhjZXB0aW9uIGlzCisiCSAgICBkaXNjYXJkZWQgYW5kIHRoZSA6ZmluYWxseSBjbGF1c2UgaXMgZXhlY3V0ZWQuCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitYcGF0aElOSVQKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDEJCQkJCSIgWDogMQorCXRyeQorCSAgICBYcGF0aCAyCQkJCSIgWDogMgorCSAgICB0aHJvdyAiYXJyZ2giCisJICAgIFhwYXRoIDQJCQkJIiBYOiAwCisiCSAgICBpZiAxCisJCVhwYXRoIDgJCQkJIiBYOiAwCisJICAgICIgZXJyb3IgYWZ0ZXIgOnRocm93OiBtaXNzaW5nIDplbmRpZgorCWZpbmFsbHkKKwkgICAgWHBhdGggMTYJCQkJIiBYOiAxNgorCWVuZHRyeQorCVhwYXRoIDMyCQkJCSIgWDogMAorICAgIGNhdGNoIC9hcnJnaC8KKwlYcGF0aCA2NAkJCQkiIFg6IDAKKyAgICBlbmR0cnkKKyAgICBYcGF0aCAxMjgJCQkJCSIgWDogMAorZW5kaWYKKworaWYgRXh0cmFWaW0oKQorICAgIHRyeQorCVhwYXRoIDI1NgkJCQkiIFg6IDI1NgorCXRyeQorCSAgICBYcGF0aCA1MTIJCQkJIiBYOiA1MTIKKwkgICAgdGhyb3cgImFycmdoIgorCSAgICBYcGF0aCAxMDI0CQkJCSIgWDogMAorCWZpbmFsbHkJCSJJTlRFUlJVUFQKKwkgICAgWHBhdGggMjA0OAkJCQkiIFg6IDIwNDgKKwllbmR0cnkKKwlYcGF0aCA0MDk2CQkJCSIgWDogMAorICAgIGNhdGNoIC9hcnJnaC8KKwlYcGF0aCA4MTkyCQkJCSIgWDogMAorICAgIGVuZHRyeQorICAgIFhwYXRoIDE2Mzg0CQkJCQkiIFg6IDAKK2VuZGlmCisKK1hjaGVjayAyODM1CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4NDogIEV4Y2VwdGlvbnMgaW4gYXV0b2NvbW1hbmQgc2VxdWVuY2VzLgkJCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYSBzZXF1ZW5jZSBvZiBhdXRvY29tbWFuZHMgZm9yCisiCSAgICBhIHNwZWNpZmljIGV2ZW50LCB0aGUgcmVzdCBvZiB0aGUgc2VxdWVuY2UgaXMgbm90IGV4ZWN1dGVkLiAgVGhlCisiCSAgICBjb21tYW5kIHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRvY29tbWFuZCBleGVjdXRpb24gYWJvcnRzLCBhbmQgdGhlCisiCSAgICBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyLgorIgorIgkgICAgRm9yIHRoZSBGdW5jVW5kZWZpbmVkIGV2ZW50IHVuZGVyIGEgZnVuY3Rpb24gY2FsbCBleHByZXNzaW9uIG9yCisiCSAgICA6Y2FsbCBjb21tYW5kLCB0aGUgZnVuY3Rpb24gaXMgbm90IGV4ZXhlY3V0ZWQsIGV2ZW4gd2hlbiBpdCBoYXMKKyIJICAgIGJlZW4gZGVmaW5lZCBieSB0aGUgYXV0b2NvbW1hbmRzIGJlZm9yZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGZ1bmN0aW9uISBJTlQoKQorCSJJTlRFUlJVUFQKKwlsZXQgZHVtbXkgPSAwCisgICAgZW5kZnVuY3Rpb24KKworICAgIGF1ZyBUTVAKKwlhdXRvY21kIQorCisJYXV0b2NtZCBVc2VyIHgxIFhwYXRoIDEJCQkiIFg6IDEKKwlhdXRvY21kIFVzZXIgeDEgdGhyb3cgIngxIgorCWF1dG9jbWQgVXNlciB4MSBYcGF0aCAyCQkJIiBYOiAwCisKKwlhdXRvY21kIFVzZXIgeDIgWHBhdGggNAkJCSIgWDogNAorCWF1dG9jbWQgVXNlciB4MiBhc2RmCisJYXV0b2NtZCBVc2VyIHgyIFhwYXRoIDgJCQkiIFg6IDAKKworCWF1dG9jbWQgVXNlciB4MyBYcGF0aCAxNgkJIiBYOiAxNgorCWF1dG9jbWQgVXNlciB4MyBjYWxsIElOVCgpCisJYXV0b2NtZCBVc2VyIHgzIFhwYXRoIDMyCQkiIFg6IDAKKworCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMSBmdW5jdGlvbiEgVTEoKQorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMSAgICAgWHBhdGggNjQJIiBYOiAwCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUxIGVuZGZ1bmN0aW9uCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUxIFhwYXRoIDEyOAkiIFg6IDEyOAorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMSB0aHJvdyAiVTEiCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUxIFhwYXRoIDI1NgkiIFg6IDAKKworCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBmdW5jdGlvbiEgVTIoKQorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiAgICAgWHBhdGggNTEyCSIgWDogMAorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBlbmRmdW5jdGlvbgorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBYcGF0aCAxMDI0CSIgWDogMTAyNAorCWF1dG9jbWQgRnVuY1VuZGVmaW5lZCBVMiBBU0RGCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUyIFhwYXRoIDIwNDgJIiBYOiAwCisKKwlhdXRvY21kIEZ1bmNVbmRlZmluZWQgVTMgZnVuY3Rpb24hIFUzKCkKKwlhdXRvY21kIEZ1bmNVbmRlZmluZWQgVTMgICAgIFhwYXRoIDQwOTYJIiBYOiAwCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUzIGVuZGZ1bmN0aW9uCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUzIFhwYXRoIDgxOTIJIiBYOiA4MTkyCisJYXV0b2NtZCBGdW5jVW5kZWZpbmVkIFUzIGNhbGwgSU5UKCkKKwlhdXRvY21kIEZ1bmNVbmRlZmluZWQgVTMgWHBhdGggMTYzODQJIiBYOiAwCisgICAgYXVnIEVORAorCisgICAgdHJ5CisJdHJ5CisJICAgIFhwYXRoIDMyNzY4CQkJCSIgWDogMzI3NjgKKwkgICAgZG9hdXRvY21kIFVzZXIgeDEKKwljYXRjaCAveDEvCisJICAgIFhwYXRoIDY1NTM2CQkJCSIgWDogNjU1MzYKKwllbmR0cnkKKworCXdoaWxlIDEKKwkgICAgdHJ5CisJCVhwYXRoIDEzMTA3MgkJCSIgWDogMTMxMDcyCisJCWxldCBjYXVnaHQgPSAwCisJCWRvYXV0b2NtZCBVc2VyIHgyCisJICAgIGNhdGNoIC9hc2RmLworCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDI2MjE0NAkJCSIgWDogMjYyMTQ0CisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCA1MjQyODgJCSIgWDogMAorCQkgICAgIiBQcm9wYWdhdGUgdW5jYXVnaHQgZXJyb3IgZXhjZXB0aW9uLAorCQllbHNlCisJCSAgICAiIC4uLiBidXQgYnJlYWsgbG9vcCBmb3IgY2F1Z2h0IGVycm9yIGV4Y2VwdGlvbiwKKwkJICAgICIgb3IgZGlzY2FyZCBlcnJvciBhbmQgYnJlYWsgbG9vcCBpZiAkVklNTk9FUlJUSFJPVworCQkgICAgYnJlYWsKKwkJZW5kaWYKKwkgICAgZW5kdHJ5CisJZW5kd2hpbGUKKworCXdoaWxlIDEKKwkgICAgdHJ5CisJCVhwYXRoIDEwNDg1NzYJCQkiIFg6IDEwNDg1NzYKKwkJbGV0IGNhdWdodCA9IDAKKwkJZG9hdXRvY21kIFVzZXIgeDMKKwkgICAgY2F0Y2ggL1ZpbTpJbnRlcnJ1cHQvCisJCWxldCBjYXVnaHQgPSAxCisJICAgIGZpbmFsbHkKKwkJWHBhdGggMjA5NzE1MgkJCSIgWDogMjA5NzE1MgorCQlpZiAhY2F1Z2h0ICYmICEkVklNTk9JTlRUSFJPVworCQkgICAgWHBhdGggNDE5NDMwNAkJIiBYOiAwCisJCSAgICAiIFByb3BhZ2F0ZSB1bmNhdWdodCBpbnRlcnJ1cHQgZXhjZXB0aW9uLAorCQllbHNlCisJCSAgICAiIC4uLiBidXQgYnJlYWsgbG9vcCBmb3IgY2F1Z2h0IGludGVycnVwdCBleGNlcHRpb24sCisJCSAgICAiIG9yIGRpc2NhcmQgaW50ZXJydXB0IGFuZCBicmVhayBsb29wIGlmICRWSU1OT0lOVFRIUk9XCisJCSAgICBicmVhaworCQllbmRpZgorCSAgICBlbmR0cnkKKwllbmR3aGlsZQorCisJaWYgZXhpc3RzKCIqVTEiKSB8IGRlbGZ1bmN0aW9uIFUxIHwgZW5kaWYKKwlpZiBleGlzdHMoIipVMiIpIHwgZGVsZnVuY3Rpb24gVTIgfCBlbmRpZgorCWlmIGV4aXN0cygiKlUzIikgfCBkZWxmdW5jdGlvbiBVMyB8IGVuZGlmCisKKwl0cnkKKwkgICAgWHBhdGggODM4ODYwOAkJCSIgWDogODM4ODYwOAorCSAgICBjYWxsIFUxKCkKKwljYXRjaCAvVTEvCisJICAgIFhwYXRoIDE2Nzc3MjE2CQkJIiBYOiAxNjc3NzIxNgorCWVuZHRyeQorCisJd2hpbGUgMQorCSAgICB0cnkKKwkJWHBhdGggMzM1NTQ0MzIJCQkiIFg6IDMzNTU0NDMyCisJCWxldCBjYXVnaHQgPSAwCisJCWNhbGwgVTIoKQorCSAgICBjYXRjaCAvQVNERi8KKwkJbGV0IGNhdWdodCA9IDEKKwkgICAgZmluYWxseQorCQlYcGF0aCA2NzEwODg2NAkJCSIgWDogNjcxMDg4NjQKKwkJaWYgIWNhdWdodCAmJiAhJFZJTU5PRVJSVEhST1cKKwkJICAgIFhwYXRoIDEzNDIxNzcyOAkJIiBYOiAwCisJCSAgICAiIFByb3BhZ2F0ZSB1bmNhdWdodCBlcnJvciBleGNlcHRpb24sCisJCWVsc2UKKwkJICAgICIgLi4uIGJ1dCBicmVhayBsb29wIGZvciBjYXVnaHQgZXJyb3IgZXhjZXB0aW9uLAorCQkgICAgIiBvciBkaXNjYXJkIGVycm9yIGFuZCBicmVhayBsb29wIGlmICRWSU1OT0VSUlRIUk9XCisJCSAgICBicmVhaworCQllbmRpZgorCSAgICBlbmR0cnkKKwllbmR3aGlsZQorCisJd2hpbGUgMQorCSAgICB0cnkKKwkJWHBhdGggMjY4NDM1NDU2CQkJIiBYOiAyNjg0MzU0NTYKKwkJbGV0IGNhdWdodCA9IDAKKwkJY2FsbCBVMygpCisJICAgIGNhdGNoIC9WaW06SW50ZXJydXB0LworCQlsZXQgY2F1Z2h0ID0gMQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDUzNjg3MDkxMgkJCSIgWDogNTM2ODcwOTEyCisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0lOVFRIUk9XCisJCSAgICBYcGF0aCAxMDczNzQxODI0CQkiIFg6IDAKKwkJICAgICIgUHJvcGFnYXRlIHVuY2F1Z2h0IGludGVycnVwdCBleGNlcHRpb24sCisJCWVsc2UKKwkJICAgICIgLi4uIGJ1dCBicmVhayBsb29wIGZvciBjYXVnaHQgaW50ZXJydXB0IGV4Y2VwdGlvbiwKKwkJICAgICIgb3IgZGlzY2FyZCBpbnRlcnJ1cHQgYW5kIGJyZWFrIGxvb3AgaWYgJFZJTU5PSU5UVEhST1cKKwkJICAgIGJyZWFrCisJCWVuZGlmCisJICAgIGVuZHRyeQorCWVuZHdoaWxlCisgICAgY2F0Y2ggLy4qLworCSIgVGhlIFhwYXRoIGNvbW1hbmQgZG9lcyBub3QgYWNjZXB0IDJeMzEgKG5lZ2F0aXZlKTsgZGlzcGxheSBleHBsaWNpdGx5OgorCWV4ZWMgIiFlY2hvIDIxNDc0ODM2NDggPj4iIC4gZzpFeHRyYVZpbVJlc3VsdAorCVhvdXQgIkNhdWdodCIgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBlbmR0cnkKKworICAgIHVubGV0IGNhdWdodAorICAgIGRlbGZ1bmN0aW9uIElOVAorICAgIGRlbGZ1bmN0aW9uIFUxCisgICAgZGVsZnVuY3Rpb24gVTIKKyAgICBkZWxmdW5jdGlvbiBVMworICAgIGF1ISBUTVAKKyAgICBhdWchIFRNUAorZW5kaWYKKworWGNoZWNrIDkzNDc4MjEwMQorCisKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIFRlc3QgODU6ICBFcnJvciBleGNlcHRpb25zIGluIGF1dG9jb21tYW5kcyBmb3IgSS9PIGNvbW1hbmQgZXZlbnRzCSAgICB7e3sxCisiCisiCSAgICBXaGVuIGFuIEkvTyBjb21tYW5kIGlzIGluc2lkZSA6dHJ5LzplbmR0cnksIGF1dG9jb21tYW5kcyB0byBiZQorIgkgICAgZXhlY3V0ZWQgYWZ0ZXIgaXQgc2hvdWxkIGJlIHNraXBwZWQgb24gYW4gZXJyb3IgKGV4Y2VwdGlvbikgaW4gdGhlCisiCSAgICBjb21tYW5kIGl0c2VsZiBvciBpbiBhdXRvY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBjb21tYW5kLgorIgkgICAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgSS9PIGNvbW1hbmQgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBlaXRoZXIuCisiCSAgICBFeGFtcGxlIDE6IEJ1ZldyaXRlUHJlLCA6d3JpdGUsIEJ1ZldyaXRlUG9zdAorIgkgICAgRXhhbXBsZSAyOiBGaWxlUmVhZFByZSwgOnJlYWQsIEZpbGVSZWFkUG9zdC4KKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hwYXRoSU5JVAorCitmdW5jdGlvbiEgTVNHKGVuciwgZW1zZykKKyAgICBsZXQgZW5nbGlzaCA9IHY6bGFuZyA9PSAiQyIgfHwgdjpsYW5nID1+ICdeW0VlXW4nCisgICAgaWYgYTplbnIgPT0gIiIKKwlYb3V0ICJUT0RPOiBBZGQgbWVzc2FnZSBudW1iZXIgZm9yOiIgYTplbXNnCisJbGV0IHY6ZXJybXNnID0gIjoiIC4gdjplcnJtc2cKKyAgICBlbmRpZgorICAgIGxldCBtYXRjaCA9IDEKKyAgICBpZiB2OmVycm1zZyAhfiAnXicuYTplbnIuJzonIHx8IChlbmdsaXNoICYmIHY6ZXJybXNnICF+IGE6ZW1zZykKKwlsZXQgbWF0Y2ggPSAwCisJaWYgdjplcnJtc2cgPT0gIiIKKwkgICAgWG91dCAiTWVzc2FnZSBtaXNzaW5nLiIKKwllbHNlCisJICAgIGxldCB2OmVycm1zZyA9IGVzY2FwZSh2OmVycm1zZywgJyInKQorCSAgICBYb3V0ICJVbmV4cGVjdGVkIG1lc3NhZ2U6IiB2OmVycm1zZworCWVuZGlmCisgICAgZW5kaWYKKyAgICByZXR1cm4gbWF0Y2gKK2VuZGZ1bmN0aW9uCisKKyIgUmVtb3ZlIHRoZSBhdXRvY29tbWFuZHMgZm9yIHRoZSBldmVudHMgc3BlY2lmaWVkIGFzIGFyZ3VtZW50cyBpbiBhbGwgdXNlZAorIiBhdXRvZ3JvdXBzLgorZnVuY3Rpb24hIERlbGV0ZV9hdXRvY29tbWFuZHMoLi4uKQorICAgIGxldCBhdWdmaWxlID0gdGVtcG5hbWUoKQorICAgIHdoaWxlIDEKKwl0cnkKKwkgICAgZXhlYyAicmVkaXIgPiIgLiBhdWdmaWxlCisJICAgIGF1ZworCSAgICByZWRpciBFTkQKKwkgICAgZXhlYyAiZWRpdCIgYXVnZmlsZQorCSAgICBnL14kL2QKKwkgICAgbm9ybSBHJAorCSAgICBsZXQgd3JhcCA9ICJ3IgorCSAgICB3aGlsZSBzZWFyY2goJ1wlKCAgXHxeXClcQDw9Llx7LX1cJSggIFwpXEA9Jywgd3JhcCkgPiAwCisJCWxldCB3cmFwID0gIlciCisJCWV4ZWMgIm5vcm0geS8gIFxuIgorCQlsZXQgYXJnbm8gPSAxCisJCXdoaWxlIGFyZ25vIDw9IGE6MAorCQkgICAgZXhlYyAiYXUhIiBlc2NhcGUoQCIsICIgIikgYTp7YXJnbm99CisJCSAgICBsZXQgYXJnbm8gPSBhcmdubyArIDEKKwkJZW5kd2hpbGUKKwkgICAgZW5kd2hpbGUKKwljYXRjaCAvLiovCisJZmluYWxseQorCSAgICBid2lwZW91dCEKKwkgICAgY2FsbCBkZWxldGUoYXVnZmlsZSkKKwkgICAgYnJlYWsJCSIgZGlzY2FyZCBlcnJvcnMgZm9yICRWSU1OT0VSUlRIUk9XCisJZW5kdHJ5CisgICAgZW5kd2hpbGUKK2VuZGZ1bmN0aW9uCisKK2NhbGwgRGVsZXRlX2F1dG9jb21tYW5kcygiQnVmV3JpdGVQcmUiLCAiQnVmV3JpdGVQb3N0IikKKword2hpbGUgMQorICAgIHRyeQorCXRyeQorCSAgICBsZXQgcG9zdCA9IDAKKwkgICAgYXVnIFRNUAorCQlhdSEgQnVmV3JpdGVQb3N0ICogbGV0IHBvc3QgPSAxCisJICAgIGF1ZyBFTkQKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgd3JpdGUgL24vby9uL2UveC9pL3MvdC9lL24vdAorCWNhdGNoIC9eVmltKHdyaXRlKTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKHdyaXRlKTonLCAnJywgIiIpCisJZmluYWxseQorCSAgICBYcGF0aCAxCQkJCSIgWDogMQorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCAyCQkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXJybXNnLCAnXiIvbi9vL24vZS94L2kvcy90L2Uvbi90IiAnLAorCQlcICcnLCAiIikKKwkgICAgaWYgIU1TRygnRTIxMicsICJDYW4ndCBvcGVuIGZpbGUgZm9yIHdyaXRpbmciKQorCQlYcGF0aCA0CQkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBwb3N0CisJCVhwYXRoIDgJCQkJIiBYOiAwCisJCVhvdXQgIkJ1ZldyaXRlUG9zdCBjb21tYW5kcyBleGVjdXRlZCBhZnRlciB3cml0ZSBlcnJvciIKKwkgICAgZW5kaWYKKwkgICAgYXUhIFRNUAorCSAgICBhdWchIFRNUAorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCAxNgkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBwb3N0ID0gMAorCSAgICBhdWcgVE1QCisJCWF1ISBCdWZXcml0ZVByZSAgKiBhc2RmCisJCWF1ISBCdWZXcml0ZVBvc3QgKiBsZXQgcG9zdCA9IDEKKwkgICAgYXVnIEVORAorCSAgICBsZXQgdG1wZmlsZSA9IHRlbXBuYW1lKCkKKwkgICAgbGV0IGNhdWdodCA9IDAKKwkgICAgZXhlYyAid3JpdGUiIHRtcGZpbGUKKwljYXRjaCAvXlZpbVwoKHdyaXRlKVwpXD06LworCSAgICBsZXQgY2F1Z2h0ID0gMQorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXhjZXB0aW9uLCAnXlZpbVwoKHdyaXRlKVwpXD06JywgJycsICIiKQorCWZpbmFsbHkKKwkgICAgWHBhdGggMzIJCQkJIiBYOiAzMgorCSAgICBpZiAhY2F1Z2h0ICYmICEkVklNTk9FUlJUSFJPVworCQlYcGF0aCA2NAkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXJybXNnLCAnXiInLnRtcGZpbGUuJyIgJywgJycsICIiKQorCSAgICBpZiAhTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJCVhwYXRoIDEyOAkJCSIgWDogMAorCSAgICBlbmRpZgorCSAgICBpZiBmaWxlcmVhZGFibGUodG1wZmlsZSkKKwkJWHBhdGggMjU2CQkJIiBYOiAwCisJCVhvdXQgIjp3cml0ZSBjb21tYW5kIG5vdCBzdXBwcmVzc2VkIGFmdGVyIEJ1ZldyaXRlUHJlIGVycm9yIgorCSAgICBlbmRpZgorCSAgICBpZiBwb3N0CisJCVhwYXRoIDUxMgkJCSIgWDogMAorCQlYb3V0ICJCdWZXcml0ZVBvc3QgY29tbWFuZHMgZXhlY3V0ZWQgYWZ0ZXIgQnVmV3JpdGVQcmUgZXJyb3IiCisJICAgIGVuZGlmCisJICAgIGF1ISBUTVAKKwkgICAgYXVnISBUTVAKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMTAyNAkJCQkiIFg6IDAKKwlYb3V0IHY6ZXhjZXB0aW9uICJpbiIgdjp0aHJvd3BvaW50CisgICAgZmluYWxseQorCWJyZWFrCQkiIGRpc2NhcmQgZXJyb3IgZm9yICRWSU1OT0VSUlRIUk9XCisgICAgZW5kdHJ5CitlbmR3aGlsZQorCitjYWxsIGRlbGV0ZSh0bXBmaWxlKQorCitjYWxsIERlbGV0ZV9hdXRvY29tbWFuZHMoIkJ1ZldyaXRlUHJlIiwgIkJ1ZldyaXRlUG9zdCIsCisgICAgXCAiQnVmUmVhZFByZSIsICJCdWZSZWFkUG9zdCIsICJGaWxlUmVhZFByZSIsICJGaWxlUmVhZFBvc3QiKQorCit3aGlsZSAxCisgICAgdHJ5CisJdHJ5CisJICAgIGxldCBwb3N0ID0gMAorCSAgICBhdWcgVE1QCisJCWF1ISBGaWxlUmVhZFBvc3QgKiBsZXQgcG9zdCA9IDEKKwkgICAgYXVnIEVORAorCSAgICBsZXQgY2F1Z2h0ID0gMAorCSAgICByZWFkIC9uL28vbi9lL3gvaS9zL3QvZS9uL3QKKwljYXRjaCAvXlZpbShyZWFkKTovCisJICAgIGxldCBjYXVnaHQgPSAxCisJICAgIGxldCB2OmVycm1zZyA9IHN1YnN0aXR1dGUodjpleGNlcHRpb24sICdeVmltKHJlYWQpOicsICcnLCAiIikKKwlmaW5hbGx5CisJICAgIFhwYXRoIDIwNDgJCQkJIiBYOiAyMDQ4CisJICAgIGlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCVhwYXRoIDQwOTYJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmVycm1zZywgJyAvbi9vL24vZS94L2kvcy90L2Uvbi90JCcsCisJCVwgJycsICIiKQorCSAgICBpZiAhTVNHKCdFNDg0JywgIkNhbid0IG9wZW4gZmlsZSIpCisJCVhwYXRoIDgxOTIJCQkiIFg6IDAKKwkgICAgZW5kaWYKKwkgICAgaWYgcG9zdAorCQlYcGF0aCAxNjM4NAkJCSIgWDogMAorCQlYb3V0ICJGaWxlUmVhZFBvc3QgY29tbWFuZHMgZXhlY3V0ZWQgYWZ0ZXIgd3JpdGUgZXJyb3IiCisJICAgIGVuZGlmCisJICAgIGF1ISBUTVAKKwkgICAgYXVnISBUTVAKKwllbmR0cnkKKyAgICBjYXRjaCAvLiovCisJWHBhdGggMzI3NjgJCQkJIiBYOiAwCisJWG91dCB2OmV4Y2VwdGlvbiAiaW4iIHY6dGhyb3dwb2ludAorICAgIGZpbmFsbHkKKwlicmVhawkJIiBkaXNjYXJkIGVycm9yIGZvciAkVklNTk9FUlJUSFJPVworICAgIGVuZHRyeQorZW5kd2hpbGUKKword2hpbGUgMQorICAgIHRyeQorCWxldCBpbmZpbGUgPSB0ZW1wbmFtZSgpCisJbGV0IHRtcGZpbGUgPSB0ZW1wbmFtZSgpCisJZXhlYyAiIWVjaG8gWFlaID4iIC4gaW5maWxlCisJZXhlYyAiZWRpdCIgdG1wZmlsZQorCXRyeQorCSAgICBYcGF0aCA2NTUzNgkJCQkiIFg6IDY1NTM2CisJICAgIHRyeQorCQlsZXQgcG9zdCA9IDAKKwkJYXVnIFRNUAorCQkgICAgYXUhIEZpbGVSZWFkUHJlICAqIGFzZGYKKwkJICAgIGF1ISBGaWxlUmVhZFBvc3QgKiBsZXQgcG9zdCA9IDEKKwkJYXVnIEVORAorCQlsZXQgY2F1Z2h0ID0gMAorCQlleGVjICIwcmVhZCIgaW5maWxlCisJICAgIGNhdGNoIC9eVmltXCgocmVhZClcKVw9Oi8KKwkJbGV0IGNhdWdodCA9IDEKKwkJbGV0IHY6ZXJybXNnID0gc3Vic3RpdHV0ZSh2OmV4Y2VwdGlvbiwgJ15WaW1cKChyZWFkKVwpXD06JywgJycsCisJCSAgICBcICIiKQorCSAgICBmaW5hbGx5CisJCVhwYXRoIDEzMTA3MgkJCSIgWDogMTMxMDcyCisJCWlmICFjYXVnaHQgJiYgISRWSU1OT0VSUlRIUk9XCisJCSAgICBYcGF0aCAyNjIxNDQJCSIgWDogMAorCQllbmRpZgorCQlsZXQgdjplcnJtc2cgPSBzdWJzdGl0dXRlKHY6ZXJybXNnLCAnICcuaW5maWxlLickJywgJycsICIiKQorCQlpZiAhTVNHKCdFNDkyJywgIk5vdCBhbiBlZGl0b3IgY29tbWFuZCIpCisJCSAgICBYcGF0aCA1MjQyODgJCSIgWDogMAorCQllbmRpZgorCQlpZiBnZXRsaW5lKCIxIikgPT0gIlhZWiIKKwkJICAgIFhwYXRoIDEwNDg1NzYJCSIgWDogMAorCQkgICAgWG91dCAiOnJlYWQgY29tbWFuZCBub3Qgc3VwcHJlc3NlZCBhZnRlciBGaWxlUmVhZFByZSBlcnJvciIKKwkJZW5kaWYKKwkJaWYgcG9zdAorCQkgICAgWHBhdGggMjA5NzE1MgkJIiBYOiAwCisJCSAgICBYb3V0ICJGaWxlUmVhZFBvc3QgY29tbWFuZHMgZXhlY3V0ZWQgYWZ0ZXIgIiAuCisJCQlcICJGaWxlUmVhZFByZSBlcnJvciIKKwkJZW5kaWYKKwkJYXUhIFRNUAorCQlhdWchIFRNUAorCSAgICBlbmR0cnkKKwlmaW5hbGx5CisJICAgIGJ3aXBlb3V0IQorCWVuZHRyeQorICAgIGNhdGNoIC8uKi8KKwlYcGF0aCA0MTk0MzA0CQkJCSIgWDogMAorCVhvdXQgdjpleGNlcHRpb24gImluIiB2OnRocm93cG9pbnQKKyAgICBmaW5hbGx5CisJYnJlYWsJCSIgZGlzY2FyZCBlcnJvciBmb3IgJFZJTU5PRVJSVEhST1cKKyAgICBlbmR0cnkKK2VuZHdoaWxlCisKK2NhbGwgZGVsZXRlKGluZmlsZSkKK2NhbGwgZGVsZXRlKHRtcGZpbGUpCit1bmxldCEgY2F1Z2h0IHBvc3QgaW5maWxlIHRtcGZpbGUKK2RlbGZ1bmN0aW9uIE1TRworZGVsZnVuY3Rpb24gRGVsZXRlX2F1dG9jb21tYW5kcworCitYY2hlY2sgMTk4Njg5CisKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgVGVzdCA4NjogICRWSU1OT0VSUlRIUk9XIGFuZCAkVklNTk9JTlRUSFJPVyBzdXBwb3J0CQkJICAgIHt7ezEKKyIKKyIJICAgIEl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBWaW0gZm9yIHRocm93aW5nIGV4Y2VwdGlvbnMgb24gZXJyb3IKKyIJICAgIG9yIGludGVycnVwdCwgY29udHJvbGxlZCBieSB2YXJpYWJsZXMgJFZJTU5PRVJSVEhST1cgYW5kCisiCSAgICAkVklNTk9JTlRUSFJPVy4gIFRoaXMgaXMganVzdCBmb3IgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIHRlc3RzLgorIgkgICAgQWxsIHRlc3RzIGhlcmUgc2hvdWxkIHJ1biBmb3IgYWxsIGZvdXIgY29tYmluYXRpb25zIG9mIHNldHRpbmcKKyIJICAgIHRoZXNlIHZhcmlhYmxlcyB0byAwIG9yIDEuICBUaGUgdmFyaWFibGVzIGFyZSBpbnRlbmRlZCBmb3IgdGhlCisiCSAgICBkZXZlbG9wbWVudCBwaGFzZSBvbmx5LiAgSW4gdGhlIGZpbmFsIHJlbGVhc2UsIFZpbSBzaG91bGQgYmUKKyIJICAgIGNvbmZpZ3VyZWQgdG8gYWx3YXlzIHVzZSBlcnJvciBhbmQgaW50ZXJydXB0IGV4Y2VwdGlvbnMuCisiCisiCSAgICBUaGUgdGVzdCByZXN1bHQgaXMgIk9LIiwKKyIKKyIJCS0gaWYgdGhlICRWSU1OT0VSUlRIUk9XIGFuZCB0aGUgJFZJTU5PSU5UVEhST1cgY29udHJvbCBhcmUgbm90CisiCQkgIGNvbmZpZ3VyZWQgYW5kIGV4Y2VwdGlvbnMgYXJlIHRocm93biBvbiBlcnJvciBhbmQgb24KKyIJCSAgaW50ZXJydXB0LgorIgorIgkJLSBpZiB0aGUgJFZJTU5PRVJSVEhST1cgb3IgdGhlICRWSU1OT0lOVFRIUk9XIGNvbnRyb2wgaXMKKyIJCSAgY29uZmlndXJlZCBhbmQgd29ya3MgYXMgaW50ZW5kZWQuCisiCisiCSAgICBXaGF0IGFjdHVhbGx5IGhhcHBlbnMsIGlzIHNob3duIGluIHRoZSB0ZXN0IG91dHB1dC4KKyIKKyIJICAgIE90aGVyd2lzZSwgdGhlIHRlc3QgcmVzdWx0IGlzICJGQUlMIiwgYW5kIHRoZSB0ZXN0IG91dHB1dCBkZXNjcmliZXMKKyIJICAgIHRoZSBwcm9ibGVtLgorIgorIiBJTVBPUlRBTlQ6ICBUaGlzIG11c3QgYmUgdGhlIGxhc3QgdGVzdCBiZWNhdXNlIGl0IHNldHMgJFZJTU5PRVJSVEhST1cgYW5kCisiCSAgICAgICRWSU1OT0lOVFRIUk9XLgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWHBhdGhJTklUCisKK2lmIEV4dHJhVmltKCkKKworICAgIGZ1bmN0aW9uISBUaHJvd09uRXJyb3IoKQorCVhsb29wTkVYVAorCWxldCBjYXVnaHQgPSAwCisJdHJ5CisJICAgIFhsb29wIDEJCQkJIiBYOiAxICsgOCArIDY0CisJICAgIGFzZGYKKwljYXRjaCAvLiovCisJICAgIGxldCBjYXVnaHQgPSAxCSIgZXJyb3IgZXhjZXB0aW9uIGNhdWdodAorCWZpbmFsbHkKKwkgICAgWGxvb3AgMgkJCQkiIFg6IDIgKyAxNiArIDEyOAorCSAgICByZXR1cm4gY2F1Z2h0CSIgZGlzY2FyZCBhYm9ydGluZyBlcnJvcgorCWVuZHRyeQorCVhsb29wIDQJCQkJCSIgWDogMAorICAgIGVuZGZ1bmN0aW9uCisKKyAgICBsZXQgcXVpdHNfc2tpcHBlZCA9IDAKKworICAgIGZ1bmN0aW9uISBUaHJvd09uSW50ZXJydXB0KCkKKwlYbG9vcE5FWFQKKwlsZXQgY2F1Z2h0ID0gMAorCXRyeQorCSAgICBYbG9vcCAxCQkJCSIgWDogKDEgKyA4ICsgNjQpICogNTEyCisJICAgICJJTlRFUlJVUFQzCisJICAgIGxldCBkdW1teSA9IDAKKwkgICAgbGV0IGc6cXVpdHNfc2tpcHBlZCA9IGc6cXVpdHNfc2tpcHBlZCArIDEKKwljYXRjaCAvLiovCisJICAgIGxldCBjYXVnaHQgPSAxCSIgaW50ZXJydXB0IGV4Y2VwdGlvbiBjYXVnaHQKKwlmaW5hbGx5CisJICAgIFhsb29wIDIJCQkJIiBYOiAoMiArIDE2ICsgMTI4KSAqIDUxMgorCSAgICByZXR1cm4gY2F1Z2h0CSIgZGlzY2FyZCBpbnRlcnJ1cHQKKwllbmR0cnkKKwlYbG9vcCA0CQkJCQkiIFg6IDAKKyAgICBlbmRmdW5jdGlvbgorCisgICAgZnVuY3Rpb24hIENoZWNrVGhyb3coVHlwZSkKKwlleGVjdXRlICdyZXR1cm4gVGhyb3dPbicgLiBhOlR5cGUgLiAnKCknCisgICAgZW5kZnVuY3Rpb24KKworICAgIGZ1bmN0aW9uISBDaGVja0NvbmZpZ3VyYXRpb24odHlwZSkJICAgICIgdHlwZSBpcyAiZXJyb3IiIG9yICJpbnRlcnJ1cHQiCisKKwlsZXQgdHlwZSA9IGE6dHlwZQorCWxldCBUeXBlID0gc3Vic3RpdHV0ZSh0eXBlLCAnLionLCAnXHUmJywgIiIpCisJbGV0IFZBUiA9ICckVklNTk8nIC4gc3Vic3RpdHV0ZSh0eXBlLCAnXCguLi5cKS4qJywgJ1xVXDEnLCAiIikgLiAnVEhST1cnCisKKwlpZiB0eXBlID09ICJlcnJvciIKKwkgICAgWGxvb3BJTklUISAxIDgKKwllbHNlaWYgdHlwZSA9PSAiaW50ZXJydXB0IgorCSAgICBYbG9vcElOSVQhIDUxMiA4CisJZW5kaWYKKworCWV4ZWMgJ2xldCByZXF1ZXN0ZWRfZm9yX3Rlc3RzID0gZXhpc3RzKFZBUikgJiYgJyAuIFZBUiAuICcgPT0gMCcKKwlleGVjICdsZXQgc3VwcHJlc3NlZF9mb3JfdGVzdHMgPSAnIC4gVkFSIC4gJyAhPSAwJworCWxldCB1c2VkX2luX3Rlc3RzID0gQ2hlY2tUaHJvdyhUeXBlKQorCisJZXhlYyAnbGV0ICcgLiBWQVIgLiAnID0gMCcKKwlsZXQgcmVxdWVzdF93b3JrcyA9IENoZWNrVGhyb3coVHlwZSkKKworCWV4ZWMgJ2xldCAnIC4gVkFSIC4gJyA9IDEnCisJbGV0IHN1cHByZXNzX3dvcmtzID0gIUNoZWNrVGhyb3coVHlwZSkKKworCWlmIHR5cGUgPT0gImVycm9yIgorCSAgICBYbG9vcElOSVQhIDI2MjE0NCA4CisJZWxzZWlmIHR5cGUgPT0gImludGVycnVwdCIKKwkgICAgWGxvb3BJTklUISAyMDk3MTUyIDgKKworCSAgICBpZiBnOnF1aXRzX3NraXBwZWQgIT0gMAorCQlYbG9vcCAxCQkJCSIgWDogMCoyMDk3MTUyCisJCVhvdXQgIlRlc3QgZW52aXJvbm1lbnQgZXJyb3IuICBJbnRlcnJ1cHQgYnJlYWtwb2ludHMgc2tpcHBlZDogIgorCQkgICAgXCAuIGc6cXVpdHNfc2tpcHBlZCAuICIuXG4iCisJCSAgICBcIC4gIkNhbm5vdCBjaGVjayB3aGV0aGVyIGludGVycnVwdCBleGNlcHRpb25zIGFyZSB0aHJvd24uIgorCQlyZXR1cm4KKwkgICAgZW5kaWYKKwllbmRpZgorCisJbGV0IGZhaWx1cmUgPQorCSAgICBcICFzdXBwcmVzc2VkX2Zvcl90ZXN0cyAmJiAhdXNlZF9pbl90ZXN0cworCSAgICBcIHx8ICFyZXF1ZXN0X3dvcmtzCisKKwlsZXQgY29udHJhZGljdGlvbiA9CisJICAgIFwgdXNlZF9pbl90ZXN0cworCQlcID8gc3VwcHJlc3NlZF9mb3JfdGVzdHMgJiYgIXJlcXVlc3Rfd29ya3MKKwkJXCA6ICFzdXBwcmVzc2VkX2Zvcl90ZXN0cworCisJaWYgZmFpbHVyZQorCSAgICAiIEZhaWx1cmUgaW4gY29uZmlndXJhdGlvbi4KKwkgICAgWGxvb3AgMgkJCQkiIFg6IDAgKiAyKiAgKDI2MjE0NCArIDIwOTcxNTIpCisJZWxzZWlmIGNvbnRyYWRpY3Rpb24KKwkgICAgIiBGYWlsdXJlIGluIHRlc3QgbG9naWMuICBTaG91bGQgbm90IGhhcHBlbi4KKwkgICAgWGxvb3AgNAkJCQkiIFg6IDAgKiA0ICogKDI2MjE0NCArIDIwOTcxNTIpCisJZW5kaWYKKworCWxldCB2YXJfY29udHJvbF9jb25maWd1cmVkID0KKwkgICAgXCByZXF1ZXN0X3dvcmtzICE9IHVzZWRfaW5fdGVzdHMKKwkgICAgXCB8fCBzdXBwcmVzc193b3JrcyA9PSB1c2VkX2luX3Rlc3RzCisKKwlsZXQgdmFyX2NvbnRyb2xfbm90X2NvbmZpZ3VyZWQgPQorCSAgICBcIHJlcXVlc3RlZF9mb3JfdGVzdHMgfHwgc3VwcHJlc3NlZF9mb3JfdGVzdHMKKwkJXCA/IHJlcXVlc3Rfd29ya3MgJiYgIXN1cHByZXNzX3dvcmtzCisJCVwgOiByZXF1ZXN0X3dvcmtzID09IHVzZWRfaW5fdGVzdHMKKwkJICAgIFwgJiYgc3VwcHJlc3Nfd29ya3MgIT0gdXNlZF9pbl90ZXN0cworCisJbGV0IHdpdGggPSB1c2VkX2luX3Rlc3RzID8gIndpdGgiIDogIndpdGhvdXQiCisKKwlsZXQgc2V0ID0gc3VwcHJlc3NlZF9mb3JfdGVzdHMgPyAibm9uLXplcm8iIDoKKwkgICAgXCByZXF1ZXN0ZWRfZm9yX3Rlc3RzID8gIjAiIDogInVuc2V0IgorCisJbGV0IGFsdGhvdWdoID0gY29udHJhZGljdGlvbiAmJiAhdmFyX2NvbnRyb2xfbm90X2NvbmZpZ3VyZWQKKwkgICAgXCA/ICIsXG5hbHRob3VnaCAiCisJICAgIFwgOiAiLlxuIgorCisJbGV0IG91dHB1dCA9ICJBbGwgdGVzdHMgd2VyZSBydW4gIiAuIHdpdGggLiAiIHRocm93aW5nIGV4Y2VwdGlvbnMgb24gIgorCSAgICBcIC4gdHlwZSAuIGFsdGhvdWdoCisKKwlpZiAhdmFyX2NvbnRyb2xfbm90X2NvbmZpZ3VyZWQKKwkgICAgbGV0IG91dHB1dCA9IG91dHB1dCAuIFZBUiAuICIgd2FzICIgLiBzZXQgLiAiLiIKKworCSAgICBpZiAhcmVxdWVzdF93b3JrcyAmJiAhcmVxdWVzdGVkX2Zvcl90ZXN0cworCQlsZXQgb3V0cHV0ID0gb3V0cHV0IC4KKwkJICAgIFwgIlxuIiAuIFR5cGUgLiAiIGV4Y2VwdGlvbnMgYXJlIG5vdCB0aHJvd24gd2hlbiAiIC4gVkFSIC4KKwkJICAgIFwgIiBpc1xuc2V0IHRvIDAuIgorCSAgICBlbmRpZgorCisJICAgIGlmICFzdXBwcmVzc193b3JrcyAmJiAoIXVzZWRfaW5fdGVzdHMgfHwKKwkgICAgXCAhcmVxdWVzdF93b3JrcyAmJgorCSAgICBcICFyZXF1ZXN0ZWRfZm9yX3Rlc3RzICYmICFzdXBwcmVzc2VkX2Zvcl90ZXN0cykKKwkJbGV0IG91dHB1dCA9IG91dHB1dCAuCisJCSAgICBcICJcbiIgLiBUeXBlIC4gIiBleGNlcHRpb25zIGFyZSB0aHJvd24gd2hlbiAiIC4gVkFSIC4KKwkJICAgIFwgIiBpcyBzZXQgdG8gMS4iCisJICAgIGVuZGlmCisKKwkgICAgaWYgIWZhaWx1cmUgJiYgdmFyX2NvbnRyb2xfY29uZmlndXJlZAorCQlsZXQgb3V0cHV0ID0gb3V0cHV0IC4KKwkJICAgIFwgIlxuUnVuIHRlc3RzIGFsc28gd2l0aCAiIC4gc3Vic3RpdHV0ZShWQVIsICdeXCQnLCAnJywgIiIpCisJCSAgICBcIC4gIj0iIC4gdXNlZF9pbl90ZXN0cyAuICIuIgorCQkgICAgXCAuICJcblRoaXMgaXMgZm9yIHRlc3RpbmcgaW4gdGhlIGRldmVsb3BtZW50IHBoYXNlIG9ubHkuIgorCQkgICAgXCAuICIgIFJlbW92ZSB0aGUgXG4iCisJCSAgICBcIC4gVkFSIC4gIiBjb250cm9sIGluIHRoZSBmaW5hbCByZWxlYXNlLiIKKwkgICAgZW5kaWYKKwllbHNlCisJICAgIGxldCBvdXRwdXQgPSBvdXRwdXQgLgorCQlcICJUaGUgIiAuIFZBUiAuICIgY29udHJvbCBpcyBub3QgY29uZmlndXJlZC4iCisJZW5kaWYKKworCVhvdXQgb3V0cHV0CisgICAgZW5kZnVuY3Rpb24KKworICAgIGNhbGwgQ2hlY2tDb25maWd1cmF0aW9uKCJlcnJvciIpCisgICAgWHBhdGggMTY3NzcyMTYJCQkJIiBYOiAxNjc3NzIxNgorICAgIGNhbGwgQ2hlY2tDb25maWd1cmF0aW9uKCJpbnRlcnJ1cHQiKQorICAgIFhwYXRoIDMzNTU0NDMyCQkJCSIgWDogMzM1NTQ0MzIKK2VuZGlmCisKK1hjaGVjayA1MDQ0Mzk5NQorCisiIElNUE9SVEFOVDogTm8gdGVzdCBzaG91bGQgYmUgYWRkZWQgYWZ0ZXIgdGhpcyB0ZXN0IGJlY2F1c2UgaXQgY2hhbmdlcworIgkgICAgICRWSU1OT0VSUlRIUk9XIGFuZCAkVklNTk9JTlRUSFJPVy4KKworCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBNb2RlbGluZXMJCQkJCQkJCSAgICB7e3sxCisiIHZpbTogdHM9OCBzdz00IHR3PTgwIGZkbT1tYXJrZXIKKyIgdmltOiBmZHQ9c3Vic3RpdHV0ZShzdWJzdGl0dXRlKGZvbGR0ZXh0KCksXCAnXFwlKF4rLS1cXClcXEA8PVxcKFxccypcXClcXCguXFx7LX1cXClcOlwgXFwlKFwiXCBcXClcXD1cXChUZXN0XCBcXGQqXFwpXDpcXHMqJyxcICdcXDNcIChcXDIpXDpcIFxcMScsXCBcIlwiKSxcICdcXChUZXN0XFxzKlxcKVxcKFxcZFxcKVxcRFxcQD0nLFwgJ1xcMVwgXFwyJyxcICIiKQorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5ZTIwZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1LmluCkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3QgZm9yIGF1dG9jb21tYW5kIHRoYXQgZGVsZXRlcyB0aGUgY3VycmVudCBidWZmZXIgb24gQnVmTGVhdmUgZXZlbnQuCitBbHNvIHRlc3QgZGVsZXRpbmcgdGhlIGxhc3QgYnVmZmVyLCBzaG91bGQgZ2l2ZSBhIG5ldywgZW1wdHkgYnVmZmVyLgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzphdSBCdWZMZWF2ZSBYeHggYndpcGUKKy9zdGFydCBvZgorOi4sL2VuZCBvZi93ISBYeHggICAgICAgICAgICAgICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgKKzpzcCBYeHggICAgICAgICAgICAgICAgICAgICAgICAgIiBzcGxpdCB0byBYeHgKKzpid2lwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkZWxldGUgYnVmZmVyIFh4eCwgbm93IHdlJ3JlIGJhY2sgaGVyZQorRz90aGlzIGlzIGEKK290aGlzIGlzIHNvbWUgbW9yZSB0ZXh0GworOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIEFwcGVuZCBzb21lIHRleHQgdG8gdGhpcyBmaWxlCis6P3N0YXJ0PywkdyEgdGVzdC5vdXQgICAgICAgICAgICIgV3JpdGUgY3VycmVudCBmaWxlIGNvbnRlbnRzCis6YndpcGUgdGVzdC5vdXQgICAgICAgICAgICAgICAgICIgZGVsZXRlIGFsdGVybmF0ZSBidWZmZXIKKzphdSBidWZsZWF2ZSB0ZXN0NS5pbiBid2lwZQorOmJ3aXBlISAgICAgICAgICAgICAgICAgICAgICAgICAiIGRlbGV0ZSBjdXJyZW50IGJ1ZmZlciwgZ2V0IGFuIGVtcHR5IG9uZQoraXRoaXMgaXMgYW5vdGhlciB0ZXN0IGxpbmUbOncgPj50ZXN0Lm91dAorOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFwcGVuZCBhbiBleHRyYSBsaW5lIHRvIHRoZSBvdXRwdXQgZmlsZQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4Cit2aW06IHNldCBub2FpIDoKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDUub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0MzA2MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1Lm9rCkBAIC0wLDAgKzEsOSBAQAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eAordmltOiBzZXQgbm9haSA6CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK3RoaXMgaXMgc29tZSBtb3JlIHRleHQKK2VuZCBvZiB0ZXN0IGZpbGUgWHh4Cit0aGlzIGlzIGFub3RoZXIgdGVzdCBsaW5lCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NTAuaW4gYi9zcmMvdGVzdGRpci90ZXN0NTAuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4YWM4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q1MC5pbgpAQCAtMCwwICsxLDg1IEBACitUZXN0IGZvciBzaG9ydHBhdGhuYW1lICc6OCcgZXh0ZW5zaW9uLgorT25seSBmb3IgdXNlIG9uIFdpbjMyIHN5c3RlbXMhCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmZ1biEgVGVzdEl0KGZpbGUsIGJpdHMsIGV4cGVjdGVkKQorCWxldCByZXM9Zm5hbWVtb2RpZnkoYTpmaWxlLGE6Yml0cykKKwlpZiBhOmV4cGVjdGVkID09ICcnCisJCWVjaG8gIiciLmE6ZmlsZS4iJy0+KCIuYTpiaXRzLiIpLT4nIi5yZXMuIiciCisJZWxzZQorCQlpZiBzdWJzdGl0dXRlKHJlcywnLycsJ1xcJywgJ2cnKSAhPSBzdWJzdGl0dXRlKCBhOmV4cGVjdGVkLCAnLycsJ1xcJywgJ2cnKSAKKwkJCWVjaG8gIkZBSUxFRDogJyIuYTpmaWxlLiInLT4oIi5hOmJpdHMuIiktPiciLnJlcy4iJyIKKwkJCWVjaG8gIkV4cGVjdGVkOiAnIi5hOmV4cGVjdGVkLiInIgorCQllbHNlCisJCQllY2hvICJPSyIKKwkJZW5kaWYKKwllbmRpZgorZW5kZnVuCis6ZnVuISBNYWtlRGlyKCBkaXJuYW1lICkKKwkiZXhlICchbWtkaXIgJy5zdWJzdGl0dXRlKGE6ZGlybmFtZSwnLycsJ1xcJywnZycpCisJY2FsbCBzeXN0ZW0oJ21rZGlyICcuc3Vic3RpdHV0ZShhOmRpcm5hbWUsJy8nLCdcXCcsJ2cnKSkKK2VuZGZ1bgorOmZ1biEgUk1EaXIoIGRpcm5hbWUpCisJImV4ZSAnIXJtZGlyICcuc3Vic3RpdHV0ZShhOmRpcm5hbWUsJy8nLCdcXCcsJ2cnKQorCWNhbGwgc3lzdGVtKCdybWRpciAnLnN1YnN0aXR1dGUoYTpkaXJuYW1lLCcvJywnXFwnLCdnJykpCitlbmRmdW4KKzpmdW4hIE1ha2VGaWxlKCBmaWxlbmFtZSkKKwkiZXhlICchY29weSBudWwgJy5zdWJzdGl0dXRlKGE6ZmlsZW5hbWUsJy8nLCdcXCcsJ2cnKQorCWNhbGwgc3lzdGVtKCdjb3B5IG51bCAnLnN1YnN0aXR1dGUoYTpmaWxlbmFtZSwnLycsJ1xcJywnZycpKQorZW5kZnVuCis6ZnVuISBUZXN0Q29sb25FaWdodCgpCisgICByZWRpciEgPnRlc3Qub3V0CisJIiBUaGlzIGNvdWxkIGNoYW5nZSBmb3IgQ3lnV2luIHRvIC8vY3lnZHJpdmUvYworCWxldCBkaXIxPSdjOi94LngueScKKwlpZiBmaWxlcmVhZGFibGUoZGlyMSkgfHwgaXNkaXJlY3RvcnkoZGlyMSkKKwkJY2FsbCBjb25maXJtKCAiJyIuZGlyMS4iJyBleGlzdHMsIGNhbm5vdCBydW4gdGVzdCIgKQorCQlyZXR1cm4KKwllbmRpZgorCWxldCBmaWxlMT1kaXIxLicvenoueS50eHQnCisJbGV0IG5vZmlsZTE9ZGlyMS4nL3oueS50eHQnCisJbGV0IGRpcjI9ZGlyMS4nL1ZpbUlzVGhlR3JlYXRlc3RTaW5jZVNsaWNlZEJyZWFkJworCWxldCBmaWxlMj1kaXIyLicvei50eHQnCisJbGV0IG5vZmlsZTI9ZGlyMi4nL3p6LnR4dCcKKwlsZXQgcmVzZGlyMT0nYzovWFgyMjM1fjEuWScKKwlsZXQgcmVzZmlsZTE9cmVzZGlyMS4nL1paWX4xLlRYVCcKKwlsZXQgcmVzbm9maWxlMT1yZXNkaXIxLicvei55LnR4dCcKKwlsZXQgcmVzZGlyMj1yZXNkaXIxLicvVklNSVNUfjEnCisJbGV0IHJlc2ZpbGUyPXJlc2RpcjIuJy96LnR4dCcKKwlsZXQgcmVzbm9maWxlMj1yZXNkaXIyLicvenoudHh0JworCWNhbGwgTWFrZURpciggZGlyMSApCisJY2FsbCBNYWtlRGlyKCBkaXIyICkKKwljYWxsIE1ha2VGaWxlKCBmaWxlMSApCisJY2FsbCBNYWtlRmlsZSggZmlsZTIgKQorCWNhbGwgVGVzdEl0KGZpbGUxLCAnOnA6OCcsIHJlc2ZpbGUxKQorCWNhbGwgVGVzdEl0KG5vZmlsZTEsICc6cDo4JywgcmVzbm9maWxlMSkKKwljYWxsIFRlc3RJdChmaWxlMiwgJzpwOjgnLCByZXNmaWxlMikKKwljYWxsIFRlc3RJdChub2ZpbGUyLCAnOnA6OCcsIHJlc25vZmlsZTIpCisJY2FsbCBUZXN0SXQobm9maWxlMiwgJzpwOjg6aCcsIGZuYW1lbW9kaWZ5KHJlc25vZmlsZTIsJzpoJykpCisJZXhlICdjZCAnLmRpcjEKKwljYWxsIFRlc3RJdChmaWxlMSwgJzouOjgnLCBzdHJwYXJ0KHJlc2ZpbGUxLHN0cmxlbihyZXNkaXIxKSsxKSkKKwljYWxsIFRlc3RJdChub2ZpbGUxLCAnOi46OCcsIHN0cnBhcnQocmVzbm9maWxlMSxzdHJsZW4ocmVzZGlyMSkrMSkpCisJY2FsbCBUZXN0SXQoZmlsZTIsICc6Ljo4Jywgc3RycGFydChyZXNmaWxlMixzdHJsZW4ocmVzZGlyMSkrMSkpCisJY2FsbCBUZXN0SXQobm9maWxlMiwgJzouOjgnLCBzdHJwYXJ0KHJlc25vZmlsZTIsc3RybGVuKHJlc2RpcjEpKzEpKQorCWxldCAkSE9NRT1kaXIxCisJY2FsbCBUZXN0SXQoZmlsZTEsICc6fjo4JywgJ34nLnN0cnBhcnQocmVzZmlsZTEsc3RybGVuKHJlc2RpcjEpKSkKKwljYWxsIFRlc3RJdChub2ZpbGUxLCAnOn46OCcsICd+Jy5zdHJwYXJ0KHJlc25vZmlsZTEsc3RybGVuKHJlc2RpcjEpKSkKKwljYWxsIFRlc3RJdChmaWxlMiwgJzp+OjgnLCAnficuc3RycGFydChyZXNmaWxlMixzdHJsZW4ocmVzZGlyMSkpKQorCWNhbGwgVGVzdEl0KG5vZmlsZTIsICc6fjo4JywgJ34nLnN0cnBhcnQocmVzbm9maWxlMixzdHJsZW4ocmVzZGlyMSkpKQorCWNkIGM6LworCWNhbGwgZGVsZXRlKCBmaWxlMiApCisJY2FsbCBkZWxldGUoIGZpbGUxICkKKwljYWxsIFJNRGlyKCBkaXIyICkKKwljYWxsIFJNRGlyKCBkaXIxICkKKyAgICAgICBlY2hvCisgICByZWRpciBFTkQKK2VuZGZ1bgorOmxldCBkaXIgPSBnZXRjd2QoKQorOmNhbGwgVGVzdENvbG9uRWlnaHQoKQorOmV4ZSAiY2QgIiAuIGRpcgorOmVkaXQhIHRlc3Qub3V0Cis6c2V0IGZmPWRvcworOncKKzpxYSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDUwLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDUwLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZWYxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NTAub2sKQEAgLTAsMCArMSwxNCBAQAorCitPSworT0sKK09LCitPSworT0sKK09LCitPSworT0sKK09LCitPSworT0sKK09LCitPSwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDUxLmluIGIvc3JjL3Rlc3RkaXIvdGVzdDUxLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNThjODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NTEuaW4KQEAgLTAsMCArMSwzNCBAQAorVGVzdHMgZm9yICI6aGlnaGxpZ2h0Ii4gdmltOiBzZXQgZnQ9dmltIDoKKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6IiBiYXNpYyB0ZXN0IGlmICI6aGlnaGxpZ2h0IiBkb2Vzbid0IGNyYXNoCis6aGlnaGxpZ2h0Cis6aGkgU2VhcmNoCis6IiB0ZXN0IHNldHRpbmcgY29sb3JzLgorOiIgdGVzdCBjbGVhcmluZyBvbmUgY29sb3IgYW5kIGFsbCBkb2Vzbid0IGdlbmVyYXRlIGVycm9yIG9yIHdhcm5pbmcKKzpoaSBOZXdHcm91cCB0ZXJtPWJvbGQgY3Rlcm09aXRhbGljIGN0ZXJtZmc9RGFya0JsdWUgY3Rlcm1iZz1HcmV5IGd1aT0gZ3VpZmc9IzAwZmYwMCBndWliZz1DeWFuCis6aGkgR3JvdXAyIHRlcm09IGN0ZXJtPQorOmhpIEdyb3VwMyB0ZXJtPXVuZGVybGluZSBjdGVybT1ib2xkCis6cmVkaXIgPnRlc3Qub3V0Cis6aGkgTmV3R3JvdXAKKzpoaSBHcm91cDIKKzpoaSBHcm91cDMKKzpoaSBjbGVhciBOZXdHcm91cAorOmhpIE5ld0dyb3VwCis6aGkgR3JvdXAyCis6aGkgR3JvdXAyIE5PTkUKKzpoaSBHcm91cDIKKzpoaSBjbGVhcgorOmhpIEdyb3VwMworOmhpIENyYXNoIHRlcm09J2FzZGYKKzpyZWRpciBFTkQKKzoiIGZpbHRlciBjdGVybWZnIGFuZCBjdGVybWJnLCB0aGUgbnVtYmVycyBkZXBlbmQgb24gdGhlIHRlcm1pbmFsCis6ZSB0ZXN0Lm91dAorOiVzL2N0ZXJtZmc9XGQqL2N0ZXJtZmc9Mi8KKzolcy9jdGVybWJnPVxkKi9jdGVybWJnPTMvCis6IiBmaWx0ZXIgb3V0IHBvc3NpYmx5IHRyYW5zbGF0ZWQgZXJyb3IgbWVzc2FnZQorOiVzL0U0NzU6IFteOl0qOi9FNDc1Oi8KKzp3cSEKK0VORFRFU1QKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDUxLm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDUxLm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTgzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0NTEub2sKQEAgLTAsMCArMSwxNSBAQAorCisKK05ld0dyb3VwICAgICAgIHh4eCB0ZXJtPWJvbGQgY3Rlcm09aXRhbGljIGN0ZXJtZmc9MiBjdGVybWJnPTMKKworCitHcm91cDMgICAgICAgICB4eHggdGVybT11bmRlcmxpbmUgY3Rlcm09Ym9sZAorCisKKworCisKKworCisKK0U0NzU6IHRlcm09J2FzZGYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZiNjVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDUyLmluCkBAIC0wLDAgKzEsNjUgQEAKK1Rlc3RzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIHdpdGggY29udmVyc2lvbiBmb3IgV2luMzIuCisKK1NUQVJUVEVTVAorOnNvIG1ieXRlLnZpbQorOiIgbWFrZSB0aGlzIGEgZHVtbXkgdGVzdCBmb3Igbm9uLVdpbjMyIHN5c3RlbXMKKzppZiAhaGFzKCJ3aW4zMiIpIHwgZSEgdGVzdC5vayB8IHdxISB0ZXN0Lm91dCB8IGVuZGlmCis6IgorOiIgd3JpdGUgdGVzdHM6Cis6IiBjb21iaW5lIHRocmVlIHZhbHVlcyBmb3IgJ2VuY29kaW5nJyB3aXRoIHRocmVlIHZhbHVlcyBmb3IgJ2ZpbGVlbmNvZGluZycKKzoiIGFsc28gd3JpdGUgZmlsZXMgZm9yIHJlYWQgdGVzdHMKKy9eMQorOnNldCBlbmNvZGluZz11dGYtOAorOi53ISArK2VuYz11dGYtOCB0ZXN0Lm91dAorOi53ICsrZW5jPWNwMTI1MSA+PnRlc3Qub3V0Cis6LncgKytlbmM9Y3A4NjYgPj50ZXN0Lm91dAorOi53ISArK2VuYz11dGYtOCBYdXRmOAorL14yCis6c2V0IGVuY29kaW5nPWNwMTI1MQorOi53ICsrZW5jPXV0Zi04ID4+dGVzdC5vdXQKKzoudyArK2VuYz1jcDEyNTEgPj50ZXN0Lm91dAorOi53ICsrZW5jPWNwODY2ID4+dGVzdC5vdXQKKzoudyEgKytlbmM9Y3AxMjUxIFhjcDEyNTEKKy9eMworOnNldCBlbmNvZGluZz1jcDg2NgorOi53ICsrZW5jPXV0Zi04ID4+dGVzdC5vdXQKKzoudyArK2VuYz1jcDEyNTEgPj50ZXN0Lm91dAorOi53ICsrZW5jPWNwODY2ID4+dGVzdC5vdXQKKzoudyEgKytlbmM9Y3A4NjYgWGNwODY2Cis6IgorOiIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCB1dGYtOCAnZW5jb2RpbmcnCis6c2V0IGVuY29kaW5nPXV0Zi04IGZlbmNzPXV0Zi04LGNwMTI1MQorOmUgWHV0ZjgKKzoudyArK2VuYz11dGYtOCA+PnRlc3Qub3V0Cis6ZSBYY3AxMjUxCis6LncgKytlbmM9dXRmLTggPj50ZXN0Lm91dAorOnNldCBmZW5jcz11dGYtOCxjcDg2NgorOmUgWGNwODY2Cis6LncgKytlbmM9dXRmLTggPj50ZXN0Lm91dAorOiIKKzoiIHJlYWQgdGhyZWUgJ2ZpbGVlbmNvZGluZydzIHdpdGggY3AxMjUxICdlbmNvZGluZycKKzpzZXQgZW5jb2Rpbmc9dXRmLTggZmVuY3M9dXRmLTgsY3AxMjUxCis6ZSBYdXRmOAorOi53ICsrZW5jPWNwMTI1MSA+PnRlc3Qub3V0Cis6ZSBYY3AxMjUxCis6LncgKytlbmM9Y3AxMjUxID4+dGVzdC5vdXQKKzpzZXQgZmVuY3M9dXRmLTgsY3A4NjYKKzplIFhjcDg2NgorOi53ICsrZW5jPWNwMTI1MSA+PnRlc3Qub3V0Cis6IgorOiIgcmVhZCB0aHJlZSAnZmlsZWVuY29kaW5nJ3Mgd2l0aCBjcDg2NiAnZW5jb2RpbmcnCis6c2V0IGVuY29kaW5nPWNwODY2IGZlbmNzPXV0Zi04LGNwMTI1MQorOmUgWHV0ZjgKKzoudyArK2VuYz1jcDg2NiA+PnRlc3Qub3V0Cis6ZSBYY3AxMjUxCis6LncgKytlbmM9Y3A4NjYgPj50ZXN0Lm91dAorOnNldCBmZW5jcz11dGYtOCxjcDg2NgorOmUgWGNwODY2Cis6LncgKytlbmM9Y3A4NjYgPj50ZXN0Lm91dAorOiIKKzpxYSEKK0VORFRFU1QKKworMSB1dGYtOCB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKKzIgY3AxMjUxIHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q1Mi5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI1MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDUyLm9rCkBAIC0wLDAgKzEsMTggQEAKKzEgdXRmLTggdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCisxIHV0Zi04IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMSB1dGYtOCB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzIgY3AxMjUxIHRleHQ6INCU0LvRjyBWaW0gdmVyc2lvbiA2LjIuICDQn9C+0YHQu9C10LTQvdC10LUg0LjQt9C80LXQvdC10L3QuNC1OiAxOTcwIEphbiAwMQorMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCisyIGNwMTI1MSB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzMgY3A4NjYgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCiszIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzEgdXRmLTggdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCisyIGNwMTI1MSB0ZXh0OiDQlNC70Y8gVmltIHZlcnNpb24gNi4yLiAg0J/QvtGB0LvQtdC00L3QtdC1INC40LfQvNC10L3QtdC90LjQtTogMTk3MCBKYW4gMDEKKzMgY3A4NjYgdGV4dDog0JTQu9GPIFZpbSB2ZXJzaW9uIDYuMi4gINCf0L7RgdC70LXQtNC90LXQtSDQuNC30LzQtdC90LXQvdC40LU6IDE5NzAgSmFuIDAxCisxIHV0Zi04IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMiBjcDEyNTEgdGV4dDogxOv/IFZpbSB2ZXJzaW9uIDYuMi4gIM/u8evl5O3l5SDo5+zl7eXt6OU6IDE5NzAgSmFuIDAxCiszIGNwODY2IHRleHQ6IMTr/yBWaW0gdmVyc2lvbiA2LjIuICDP7vHr5eTt5eUg6Ofs5e3l7ejlOiAxOTcwIEphbiAwMQorMSB1dGYtOCB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKKzIgY3AxMjUxIHRleHQ6IISr7yBWaW0gdmVyc2lvbiA2LjIuICCPruGrpaStpaUgqKespa2lrailOiAxOTcwIEphbiAwMQorMyBjcDg2NiB0ZXh0OiCEq+8gVmltIHZlcnNpb24gNi4yLiAgj67hq6WkraWlIKinrKWtpa2opTogMTk3MCBKYW4gMDEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q2LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDYuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViYmUyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q2LmluCkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgZm9yIGF1dG9jb21tYW5kIHRoYXQgcmVkZWZpbmVzIHRoZSBhcmd1bWVudCBsaXN0LCB3aGVuIGRvaW5nICI6YWxsIi4KKworU1RBUlRURVNUCis6c28gc21hbGwudmltCis6YXUgQnVmUmVhZFBvc3QgWHh4MiBuZXh0IFh4eDIgWHh4MQorL15zdGFydCBvZgorQTEbOi4sL2VuZCBvZi93ISBYeHgxICAgICIgd3JpdGUgdGVzdCBmaWxlIFh4eDEKKyRyMjouLC9lbmQgb2YvdyEgWHh4MiAgICAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MgorJHIzOi4sL2VuZCBvZi93ISBYeHgzICAgICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgzCis6bmV4dCEgWHh4MSBYeHgyIFh4eDMgICAgICIgcmVkZWZpbmUgYXJnbGlzdDsgZ28gdG8gWHh4MQorOmFsbCAgICAgICAgICAgICAgICAgICAgICAiIG9wZW4gd2luZG93IGZvciBhbGwgYXJncworOnchIHRlc3Qub3V0ICAgICAgICAgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIFh4eDEKKxcXFxc6dyA+PnRlc3Qub3V0ICAgICAiIEFwcGVuZCBjb250ZW50cyBvZiBsYXN0IHdpbmRvdyAoWHh4MSkKKzpyZXcgICAgICAgICAgICAgICAgICAgICAgIiBzaG91bGQgbm93IGJlIGluIFh4eDIKKzp3ID4+dGVzdC5vdXQgICAgICAgICAgICAgIiBBcHBlbmQgY29udGVudHMgb2YgWHh4MgorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK2VuZCBvZiB0ZXN0IGZpbGUgWHh4CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Ni5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q2Lm9rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YjBjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Ni5vawpAQCAtMCwwICsxLDE4IEBACitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4MQorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CitlbmQgb2YgdGVzdCBmaWxlIFh4eAorc3RhcnQgb2YgdGVzdCBmaWxlIFh4eDEKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHgyCisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorCXRoaXMgaXMgYSB0ZXN0CisJdGhpcyBpcyBhIHRlc3QKK2VuZCBvZiB0ZXN0IGZpbGUgWHh4CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0Ny5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3Q3LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2MwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdGRpci90ZXN0Ny5pbgpAQCAtMCwwICsxLDI2IEBACitUZXN0IGZvciBhdXRvY29tbWFuZCB0aGF0IGNoYW5nZXMgdGhlIGJ1ZmZlciBsaXN0LCB3aGVuIGRvaW5nICI6YmFsbCIuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorL15zdGFydCBvZgorQTEbOi4sL2VuZCBvZi93ISBYeHgxICAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MQorOnNwIFh4eDEKKzpjbG9zZQorJHIyOi4sL2VuZCBvZi93ISBYeHgyICAgICIgd3JpdGUgdGVzdCBmaWxlIFh4eDIKKzpzcCBYeHgyCis6Y2xvc2UKKyRyMzouLC9lbmQgb2YvdyEgWHh4MyAgICAiIHdyaXRlIHRlc3QgZmlsZSBYeHgzCis6c3AgWHh4MworOmNsb3NlCis6YXUgQnVmUmVhZFBvc3QgWHh4MiBid2lwZQorJHI0OmJhbGwgICAgICAgICAgICAgICAgICIgb3BlbiB3aW5kb3cgZm9yIGFsbCBhcmdzLCBjbG9zZSBYeHgyCis6LiwkdyEgdGVzdC5vdXQgICAgICAgICAgIiBXcml0ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUKKxcXOncgPj50ZXN0Lm91dCAgICAgICAgIiBBcHBlbmQgY29udGVudHMgb2Ygc2Vjb25kIHdpbmRvdyAoWHh4MSkKKxcXOi9ec3RhcnQgb2YvLCR3ID4+dGVzdC5vdXQgICAiIEFwcGVuZCBjb250ZW50cyBvZiBsYXN0IHdpbmRvdyAodGhpcyBmaWxlKQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgWHh4CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q3Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDcub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkMWZmOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q3Lm9rCkBAIC0wLDAgKzEsMTIgQEAKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHg0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHgxCisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKK3N0YXJ0IG9mIHRlc3QgZmlsZSBYeHg0CisJdGhpcyBpcyBhIHRlc3QKKwl0aGlzIGlzIGEgdGVzdAorZW5kIG9mIHRlc3QgZmlsZSBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q4LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlMTcxNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q4LmluCkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgZm9yIEJ1ZldyaXRlUHJlIGF1dG9jb21tYW5kIHRoYXQgZGVsZXRlcyBvciB1bmxvYWRzIHRoZSBidWZmZXIuCisKK1NUQVJUVEVTVAorOnNvIHNtYWxsLnZpbQorOmF1IEJ1ZldyaXRlUHJlIFh4eDEgYnVubG9hZAorOmF1IEJ1ZldyaXRlUHJlIFh4eDIgYndpcGUKKy9ec3RhcnQgb2YKK0ExGzouLC9lbmQgb2YvdyEgWHh4MSAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MQorJHIyOi4sL2VuZCBvZi93ISBYeHgyICAgIiB3cml0ZSB0ZXN0IGZpbGUgWHh4MgorOmUhIFh4eDIgICAgICAgICAgICAgICAgIiBlZGl0IFh4eDIKKzpiZGVsIHRlc3Q4LmluCQkiIGRlbGV0ZSB0aGlzIGZpbGUgZnJvbSB0aGUgYnVmZmVyIGxpc3QKKzplIFh4eDEgICAgICAgICAgICAgICAgICIgZWRpdCBYeHgxCis6dyAgICAgICAgICAgICAgICAgICAgICAiIHdyaXRlIGl0LCB3aWxsIHVubG9hZCBpdCBhbmQgZ2l2ZSBhbiBlcnJvciBtc2cKKzp3ISB0ZXN0Lm91dCAgICAgICAgICAgICIgV3JpdGUgY29udGVudHMgb2YgdGhpcyBmaWxlCis6ZSEgWHh4MiAgICAgICAgICAgICAgICAiIHN0YXJ0IGVkaXRpbmcgWHh4MgorOmJ3aXBlIHRlc3Qub3V0ICAgICAgICAgIiByZW1vdmUgdGVzdC5vdXQgZnJvbSB0aGUgYnVmZmVyIGxpc3QKKzp3ICAgICAgICAgICAgICAgICAgICAgICIgd3JpdGUgaXQsIHdpbGwgZGVsZXRlIHRoZSBidWZmZXIgYW5kIGdpdmUgYW4gZXJyb3IgbXNnCis6dyA+PnRlc3Qub3V0ICAgICAgICAgICAiIEFwcGVuZCBjb250ZW50cyBvZiB0aGlzIGZpbGUKKzpxYSEKK0VORFRFU1QKKworc3RhcnQgb2YgWHh4CisJdGVzdAorZW5kIG9mIFh4eApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdDgub2sgYi9zcmMvdGVzdGRpci90ZXN0OC5vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWIwNjZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDgub2sKQEAgLTAsMCArMSw2IEBACitzdGFydCBvZiBYeHgyCisJdGVzdAorZW5kIG9mIFh4eAorc3RhcnQgb2YgWHh4MQorCXRlc3QKK2VuZCBvZiBYeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q5LmluIGIvc3JjL3Rlc3RkaXIvdGVzdDkuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlMTc5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q5LmluCkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgZm9yIEJ1ZmxlYXZlIGF1dG9jb21tYW5kIHRoYXQgZGVsZXRlcyB0aGUgYnVmZmVyIHdlIGFyZSBhYm91dCB0byBlZGl0LgorCitTVEFSVFRFU1QKKzpzbyBzbWFsbC52aW0KKzphdSBCdWZMZWF2ZSB0ZXN0OS5pbiBid2lwZSB5eQorOmUgeXkKKzovXnN0YXJ0IG9mLywkdyEgdGVzdC5vdXQgICAgICAiIFdyaXRlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZQorOnFhIQorRU5EVEVTVAorCitzdGFydCBvZiB0ZXN0IGZpbGUgeHgKK2VuZCBvZiB0ZXN0IGZpbGUgeHgKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q5Lm9rIGIvc3JjL3Rlc3RkaXIvdGVzdDkub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjYjVmMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q5Lm9rCkBAIC0wLDAgKzEsMiBAQAorc3RhcnQgb2YgdGVzdCBmaWxlIHh4CitlbmQgb2YgdGVzdCBmaWxlIHh4CmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90b2Rvcy52aW0gYi9zcmMvdGVzdGRpci90b2Rvcy52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1NmE1MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3RvZG9zLnZpbQpAQCAtMCwwICsxLDMgQEAKKzoiIFNjcmlwdCB0byBtYWtlIHN1cmUgYSBmaWxlIGlzIGluICJkb3MiIGZpbGUgZm9ybWF0LgorOnNldCBmZj1kb3MKKzp3cQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdW5peC52aW0gYi9zcmMvdGVzdGRpci91bml4LnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzY2ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdW5peC52aW0KQEAgLTAsMCArMSwzIEBACisiIFNldHRpbmdzIGZvciB0ZXN0IHNjcmlwdCBleGVjdXRpb24KKyIgQWx3YXlzIHVzZSAic2giLCBkb24ndCB1c2UgdGhlIHZhbHVlIG9mICIkU0hFTEwiLgorc2V0IHNoZWxsPXNoCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci92bXMudmltIGIvc3JjL3Rlc3RkaXIvdm1zLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA1YTc3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3RkaXIvdm1zLnZpbQpAQCAtMCwwICsxLDQgQEAKKyIgU2V0dGluZ3MgZm9yIHRlc3Qgc2NyaXB0IGV4ZWN1dGlvbiB1bmRlciBPcGVuVk1TCisKKyIgRG8gbm90IG1ha2UgYW55IHN3YXAgZmlsZXMKK3NldCBub3N3YXBmaWxlCg==