4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
热卖商品
新闻详情
RCTF crypto100(1)_公众号:顽虫面试-CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-25

\"\"


题面是一个文件 里面是用base64加密的字符串 如下所示

IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyN IyAJCQkJRG9jdW1lbnRhdGlvbgkJCQkgICAgI0 IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyO IyBBdXRob3I6ICAgVG9kZCBXaGl0ZW1hbk IyBEYXRlOiAgICAgN3RoIE1heSwgMjAwM/ IyBWZXJpb246ICAgMS4xIyBIb21lcGFnZTogaHR0cDovL2hvbWUucGFjaWZpYy5uZXQuYXUvfnR3aGl0ZW1hL2Rlcy5odG1sI0 IyBNb2RpZmljYXRpb25zIHRvIDNkZXMgQ0JDIGNvZGUgYnkgTWF0dCBKb2huc3RvbiAyMDA0IDxtYXR0IGF0IHVjYyBhc24gYXU I5 IyBUaGlzIGFsZ29yaXRobSBpcyBhIHB1cmUgcHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBERVMgYWxnb3JpdGhtLl IyBJdCBpcyBpbiBwdXJlIHB5dGhvbiB0byBhdm9pZCBwb3J0YWJpbGl0eSBpc3N1ZXMsIHNpbmNlIG1vc3QgREVTID IyBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb2dyYW1tZWQgaW4gQyAoZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMpLn I7 IyBUcmlwbGUgREVTIGNsYXNzIGlzIGFsc28gaW1wbGVtZW50ZWQsIHV0aWxpc2luZyB0aGUgREVTIGJhc2UuIFRyaXBsZSBERVN IyBpcyBlaXRoZXIgREVTLUVERTMgd2l0aCBhIDI0IGJ5dGUga2V5LCBvciBERVMtRURFMiB3aXRoIGEgMTYgYnl0ZSBrZXkuI4 IyBTZWUgdGhlIFJFQURNRS50eHQgdGhhdCBzaG91bGQgY29tZSB3aXRoIHRoaXMgcHl0aG9uIG1vZHVsZSBmb3IgdGhlIyBpbXBsZW1lbnRhdGlvbiBtZXRob2RzIHVzZWQuIiIiQSBwdXJlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgREVTIGFuZCBUUklQTEUgREVTIGVuY3J5cHRpb24gYWxnb3JpdGhtc5 cHlEZXMuZGVzKGtleSwgW21vZGVdLCBbSVZdKY cHlEZXMudHJpcGxlX2RlcyhrZXksIFttb2RlXSwgW0lWXSl a2V5ICAtPiBTdHJpbmcgY29udGFpbmluZyB0aGUgZW5jcnlwdGlvbiBrZXkuIDggYnl0ZXMgZm9yIERFUywgMTYgb3IgMjQgYnl0ZXN CWZvciBUcmlwbGUgREVTbW9kZSAtPiBPcHRpb25hbCBhcmd1bWVudCBmb3IgZW5jcnlwdGlvbiB0eXBlLCBjYW4gYmUgZWl0aGVyICAgICAgICBweURlcy5FQ0IgKEVsZWN0cm9uaWMgQ29kZSBCb29rKSBvciBweURlcy5DQkMgKEN5cGhlciBCbG9jayBDaGFpbmluZyn SVYgICAtPiBPcHRpb25hbCBhcmd1bWVudCwgbXVzdCBiZSBzdXBwbGllZCBpZiB1c2luZyBDQkMgbW9kZS4gTXVzdCBiZSA4IGJ5dGVzRXhhbXBsZTo ZnJvbSBweURlcyBpbXBvcnQgKt ZGF0YSA9ICJQbGVhc2UgZW5jcnlwdCBteSBzdHJpbmciayA9IGRlcygiREVTQ1JZUFQiLCAiICIsIENCQywgIlwwXDBcMFwwXDBcMFwwXDAiKZ ZCA9IGsuZW5jcnlwdChkYXRhKV cHJpbnQgIkVuY3lwdGVkIHN0cmluZzogIiArIGR cHJpbnQgIkRlY3lwdGVkIHN0cmluZzogIiArIGsuZGVjcnlwdChkKf U2VlIHRoZSBtb2R1bGUgc291cmNlIChweURlcy5weSkgZm9yIG1vcmUgZXhhbXBsZXMgb2YgdXNlLk WW91IGNhbiBzbG8gcnVuIHRoZSBweURlcy5weSBmaWxlIHdpdGhvdXQgYW5kIGFyZ3VtZW50cyB0byBzZWUgYSBzaW1wbGUgdGVzdC5 Tm90ZTogVGhpcyBjb2RlIHdhcyBub3Qgd3JpdHRlbiBmb3IgaGlnaC1lbmQgc3lzdGVtcyBuZWVkaW5nIGEgZmFzdN ICAgICAgaW1wbGVtZW50YXRpb24sIGJ1dCByYXRoZXIgYSBoYW5keSBwb3J0YWJsZSBzb2x1dGlvbiB3aXRoIHNtYWxsIHVzYWdlLg IiIiIyBNb2RlcyBvZiBjcnlwdGluZyAvIGN5cGhlcmluZ1 RUNCID0JMH Q0JDID0JMd IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyO IyAJCQkJICAgIERFUwkJCQkJICAgICM IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyP Y2xhc3MgZGVzOm CSIiIkRFUyBlbmNyeXB0aW9uL2RlY3J5dHBpb24gY2xhc3M CVN1cHBvcnRzIEVDQiAoRWxlY3Ryb25pYyBDb2RlIEJvb2spIGFuZCBDQkMgKEN5cGhlciBCbG9jayBDaGFpbmluZykgbW9kZXMuCXB5RGVzLmRlcyhrZXksW21vZGVdLCBbSVZdKV CWtleSAgLT4gVGhlIGVuY3J5cHRpb24ga2V5IHN0cmluZywgbXVzdCBiZSBleGFjdGx5IDggYnl0ZXM CW1vZGUgLT4gT3B0aW9uYWwgYXJndW1lbnQgZm9yIGVuY3J5cHRpb24gdHlwZSwgY2FuIGJlIGVpdGhlciBweURlcy5FQ0L CQkoRWxlY3Ryb25pYyBDb2RlIEJvb2spLCBweURlcy5DQkMgKEN5cGhlciBCbG9jayBDaGFpbmluZym CUlWICAgLT4gT3B0aW9uYWwgc3RyaW5nIGFyZ3VtZW50LCBtdXN0IGJlIHN1cHBsaWVkIGlmIHVzaW5nIENCQyBtb2RlLl CQlNdXN0IGJlIDggYnl0ZXMgaW4gbGVuZ3RoLv CSIiIm CSMgUGVybXV0YXRpb24gYW5kIHRyYW5zbGF0aW9uIHRhYmxlcyBmb3IgREVTCV9fcGMxID0gWzU2LCA0OCwgNDAsIDMyLCAyNCwgMTYsICA4LC CQkgIDAsIDU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsCQkgIDksICAxLCA1OCwgNTAsIDQyLCAzNCwgMjYsCQkgMTgsIDEwLCAgMiwgNTksIDUxLCA0MywgMzUsCQkgNjIsIDU0LCA0NiwgMzgsIDMwLCAyMiwgMTQsCQkgIDYsIDYxLCA1MywgNDUsIDM3LCAyOSwgMjEsCQkgMTMsICA1LCA2MCwgNTIsIDQ0LCAzNiwgMjgsCQkgMjAsIDEyLCAgNCwgMjcsIDE5LCAxMSwgIDM CV3 CSMgbnVtYmVyIGxlZnQgcm90YXRpb25zIG9mIHBjMT CV9fbGVmdF9yb3RhdGlvbnMgPSBbCQkxLCAxLCAyLCAyLCAyLCAyLCAyLCAyLCAxLCAyLCAyLCAyLCAyLCAyLCAyLCAxCV1 CSMgcGVybXV0ZWQgY2hvaWNlIGtleSAodGFibGUgMil CV9fcGMyID0gW/ CQkxMywgMTYsIDEwLCAyMywgIDAsICA0LG CQkgMiwgMjcsIDE0LCAgNSwgMjAsICA5LE CQkyMiwgMTgsIDExLCAgMywgMjUsICA3LD CQkxNSwgIDYsIDI2LCAxOSwgMTIsICAxLB CQk0MCwgNTEsIDMwLCAzNiwgNDYsIDU0LG CQkyOSwgMzksIDUwLCA0NCwgMzIsIDQ3LG CQk0MywgNDgsIDM4LCA1NSwgMzMsIDUyLG CQk0NSwgNDEsIDQ5LCAzNSwgMjgsIDMxCV1 CSMgaW5pdGlhbCBwZXJtdXRhdGlvbiBJUJ CV9faXAgPSBbNTcsIDQ5LCA0MSwgMzMsIDI1LCAxNywgOSwgIDEsCQk1OSwgNTEsIDQzLCAzNSwgMjcsIDE5LCAxMSwgMyy CQk2MSwgNTMsIDQ1LCAzNywgMjksIDIxLCAxMywgNSx CQk2MywgNTUsIDQ3LCAzOSwgMzEsIDIzLCAxNSwgNyx CQk1NiwgNDgsIDQwLCAzMiwgMjQsIDE2LCA4LCAgMCx CQk1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMix CQk2MCwgNTIsIDQ0LCAzNiwgMjgsIDIwLCAxMiwgNCw CQk2MiwgNTQsIDQ2LCAzOCwgMzAsIDIyLCAxNCwgNo CV3 CSMgRXhwYW5zaW9uIHRhYmxlIGZvciB0dXJuaW5nIDMyIGJpdCBibG9ja3MgaW50byA0OCBiaXRzCV9fZXhwYW5zaW9uX3RhYmxlID0gWz CQkzMSwgIDAsICAxLCAgMiwgIDMsICA0LG CQkgMywgIDQsICA1LCAgNiwgIDcsICA4LO CQkgNywgIDgsICA5LCAxMCwgMTEsIDEyLF CQkxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LE CQkxNSwgMTYsIDE3LCAxOCwgMTksIDIwLH CQkxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LN CQkyMywgMjQsIDI1LCAyNiwgMjcsIDI4LA CQkyNywgMjgsIDI5LCAzMCwgMzEsICAwCV0 CSMgVGhlIChpbilmYW1vdXMgUy1ib3hlcw CV9fc2JveCA9IFs CQkjIFMxCQlbMTQsIDQsIDEzLCAxLCAyLCAxNSwgMTEsIDgsIDMsIDEwLCA2LCAxMiwgNSwgOSwgMCwgNyw CQkgMCwgMTUsIDcsIDQsIDE0LCAyLCAxMywgMSwgMTAsIDYsIDEyLCAxMSwgOSwgNSwgMywgOCw CQkgNCwgMSwgMTQsIDgsIDEzLCA2LCAyLCAxMSwgMTUsIDEyLCA5LCA3LCAzLCAxMCwgNSwgMCw CQkgMTUsIDEyLCA4LCAyLCA0LCA5LCAxLCA3LCA1LCAxMSwgMywgMTQsIDEwLCAwLCA2LCAxM10sCQkjIFMyCQlbMTUsIDEsIDgsIDE0LCA2LCAxMSwgMywgNCwgOSwgNywgMiwgMTMsIDEyLCAwLCA1LCAxMCw CQkgMywgMTMsIDQsIDcsIDE1LCAyLCA4LCAxNCwgMTIsIDAsIDEsIDEwLCA2LCA5LCAxMSwgNSw CQkgMCwgMTQsIDcsIDExLCAxMCwgNCwgMTMsIDEsIDUsIDgsIDEyLCA2LCA5LCAzLCAyLCAxNSw CQkgMTMsIDgsIDEwLCAxLCAzLCAxNSwgNCwgMiwgMTEsIDYsIDcsIDEyLCAwLCA1LCAxNCwgOV0sCQkjIFMzCQlbMTAsIDAsIDksIDE0LCA2LCAzLCAxNSwgNSwgMSwgMTMsIDEyLCA3LCAxMSwgNCwgMiwgOCw CQkgMTMsIDcsIDAsIDksIDMsIDQsIDYsIDEwLCAyLCA4LCA1LCAxNCwgMTIsIDExLCAxNSwgMSw CQkgMTMsIDYsIDQsIDksIDgsIDE1LCAzLCAwLCAxMSwgMSwgMiwgMTIsIDUsIDEwLCAxNCwgNyw CQkgMSwgMTAsIDEzLCAwLCA2LCA5LCA4LCA3LCA0LCAxNSwgMTQsIDMsIDExLCA1LCAyLCAxMl0sCQkjIFM0CQlbNywgMTMsIDE0LCAzLCAwLCA2LCA5LCAxMCwgMSwgMiwgOCwgNSwgMTEsIDEyLCA0LCAxNSw CQkgMTMsIDgsIDExLCA1LCA2LCAxNSwgMCwgMywgNCwgNywgMiwgMTIsIDEsIDEwLCAxNCwgOSw CQkgMTAsIDYsIDksIDAsIDEyLCAxMSwgNywgMTMsIDE1LCAxLCAzLCAxNCwgNSwgMiwgOCwgNCw CQkgMywgMTUsIDAsIDYsIDEwLCAxLCAxMywgOCwgOSwgNCwgNSwgMTEsIDEyLCA3LCAyLCAxNF0sCQkjIFM1CQlbMiwgMTIsIDQsIDEsIDcsIDEwLCAxMSwgNiwgOCwgNSwgMywgMTUsIDEzLCAwLCAxNCwgOSw CQkgMTQsIDExLCAyLCAxMiwgNCwgNywgMTMsIDEsIDUsIDAsIDE1LCAxMCwgMywgOSwgOCwgNiw CQkgNCwgMiwgMSwgMTEsIDEwLCAxMywgNywgOCwgMTUsIDksIDEyLCA1LCA2LCAzLCAwLCAxNCw CQkgMTEsIDgsIDEyLCA3LCAxLCAxNCwgMiwgMTMsIDYsIDE1LCAwLCA5LCAxMCwgNCwgNSwgM10sCQkjIFM2CQlbMTIsIDEsIDEwLCAxNSwgOSwgMiwgNiwgOCwgMCwgMTMsIDMsIDQsIDE0LCA3LCA1LCAxMSw CQkgMTAsIDE1LCA0LCAyLCA3LCAxMiwgOSwgNSwgNiwgMSwgMTMsIDE0LCAwLCAxMSwgMywgOCw CQkgOSwgMTQsIDE1LCA1LCAyLCA4LCAxMiwgMywgNywgMCwgNCwgMTAsIDEsIDEzLCAxMSwgNiw CQkgNCwgMywgMiwgMTIsIDksIDUsIDE1LCAxMCwgMTEsIDE0LCAxLCA3LCA2LCAwLCA4LCAxM10sCQkjIFM3CQlbNCwgMTEsIDIsIDE0LCAxNSwgMCwgOCwgMTMsIDMsIDEyLCA5LCA3LCA1LCAxMCwgNiwgMSw CQkgMTMsIDAsIDExLCA3LCA0LCA5LCAxLCAxMCwgMTQsIDMsIDUsIDEyLCAyLCAxNSwgOCwgNiw CQkgMSwgNCwgMTEsIDEzLCAxMiwgMywgNywgMTQsIDEwLCAxNSwgNiwgOCwgMCwgNSwgOSwgMiw CQkgNiwgMTEsIDEzLCA4LCAxLCA0LCAxMCwgNywgOSwgNSwgMCwgMTUsIDE0LCAyLCAzLCAxMl0sCQkjIFM4CQlbMTMsIDIsIDgsIDQsIDYsIDE1LCAxMSwgMSwgMTAsIDksIDMsIDE0LCA1LCAwLCAxMiwgNyw CQkgMSwgMTUsIDEzLCA4LCAxMCwgMywgNywgNCwgMTIsIDUsIDYsIDExLCAwLCAxNCwgOSwgMiw CQkgNywgMTEsIDQsIDEsIDksIDEyLCAxNCwgMiwgMCwgNiwgMTAsIDEzLCAxNSwgMywgNSwgOCw CQkgMiwgMSwgMTQsIDcsIDQsIDEwLCA4LCAxMywgMTUsIDEyLCA5LCAwLCAzLCA1LCA2LCAxMV0sCV0 CSMgMzItYml0IHBlcm11dGF0aW9uIGZ1bmN0aW9uIFAgdXNlZCBvbiB0aGUgb3V0cHV0IG9mIHRoZSBTLWJveGVzCV9fcCA9IFs CQkxNSwgNiwgMTksIDIwLCAyOCwgMTEsCQkyNywgMTYsIDAsIDE0LCAyMiwgMjUsCQk0LCAxNywgMzAsIDksIDEsIDcsCQkyMywxMywgMzEsIDI2LCAyLCA4LA CQkxOCwgMTIsIDI5LCA1LCAyMSwgMTAsCQkzLCAyNA CV0 CSMgZmluYWwgcGVybXV0YXRpb24gSVBeLTE CV9fZnAgPSBbCQkzOSwgIDcsIDQ3LCAxNSwgNTUsIDIzLCA2MywgMzEsCQkzOCwgIDYsIDQ2LCAxNCwgNTQsIDIyLCA2MiwgMzAsCQkzNywgIDUsIDQ1LCAxMywgNTMsIDIxLCA2MSwgMjksCQkzNiwgIDQsIDQ0LCAxMiwgNTIsIDIwLCA2MCwgMjgsCQkzNSwgIDMsIDQzLCAxMSwgNTEsIDE5LCA1OSwgMjcsCQkzNCwgIDIsIDQyLCAxMCwgNTAsIDE4LCA1OCwgMjYsCQkzMywgIDEsIDQxLCAgOSwgNDksIDE3LCA1NywgMjUsCQkzMiwgIDAsIDQwLCAgOCwgNDgsIDE2LCA1NiwgMjQ CV0 CSMgVHlwZSBvZiBjcnlwdGluZyBiZWluZyBkb25lCUVOQ1JZUFQgPQkweDAwCURFQ1JZUFQgPQkweDAxCSMgSW5pdGlhbGlzYXRpb24 CWRlZiBfX2luaXRfXyhzZWxmLCBrZXksIG1vZGU9RUNCLCBJVj1Ob25lKTo CQlpZiBsZW4oa2V5KSAhPSA4Og CQkJcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBERVMga2V5IHNpemUuIEtleSBtdXN0IGJlIGV4YWN0bHkgOCBieXRlcyBsb25nLiIpCQlzZWxmLmJsb2NrX3NpemUgPSA4CQlzZWxmLmtleV9zaXplID0gOA CQlzZWxmLl9fcGFkZGluZyA9ICcnCQkjIFNldCB0aGUgcGFzc2VkIGluIHZhcmlhYmxlcw CQlzZWxmLnNldE1vZGUobW9kZSk CQlpZiBJVjo CQkJc2VsZi5zZXRJVihJVik CQlzZWxmLkwgPSBbXQ CQlzZWxmLlIgPSBbXQ CQlzZWxmLktuID0gWyBbMF0gKiA0OCBdICogMTYJIyAxNiA0OC1iaXQga2V5cyAoSzEgLSBLMTYpCQlzZWxmLmZpbmFsID0gW10 CQlzZWxmLnNldEtleShrZXkpCWRlZiBnZXRLZXkoc2VsZik6CQkiIiJnZXRLZXkoKSAtPiBzdHJpbmciIiI CQlyZXR1cm4gc2VsZi5fX2tleQ CWRlZiBzZXRLZXkoc2VsZiwga2V5KTo CQkiIiJXaWxsIHNldCB0aGUgY3J5cHRpbmcga2V5IGZvciB0aGlzIG9iamVjdC4gTXVzdCBiZSA4IGJ5dGVzLiIiIg CQlzZWxmLl9fa2V5ID0ga2V5CQlzZWxmLl9fY3JlYXRlX3N1Yl9rZXlzKCk CWRlZiBnZXRNb2RlKHNlbGYpOg CQkiIiJnZXRNb2RlKCkgLT4gcHlEZXMuRUNCIG9yIHB5RGVzLkNCQyIiIg CQlyZXR1cm4gc2VsZi5fX21vZGU CWRlZiBzZXRNb2RlKHNlbGYsIG1vZGUpOg CQkiIiJTZXRzIHRoZSB0eXBlIG9mIGNyeXB0aW5nIG1vZGUsIHB5RGVzLkVDQiBvciBweURlcy5DQkMiIiI CQlzZWxmLl9fbW9kZSA9IG1vZGU CWRlZiBnZXRJVihzZWxmKTo CQkiIiJnZXRJVigpIC0 IHN0cmluZyIiIg CQlyZXR1cm4gc2VsZi5fX2l2CWRlZiBzZXRJVihzZWxmLCBJVik6CQkiIiJXaWxsIHNldCB0aGUgSW5pdGlhbCBWYWx1ZSwgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIENCQyBtb2RlIiIiCQlpZiBub3QgSVYgb3IgbGVuKElWKSAhPSBzZWxmLmJsb2NrX3NpemU6CQkJcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBJbml0aWFsIFZhbHVlIChJViksIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAiICsgc3RyKHNlbGYuYmxvY2tfc2l6ZSkgKyAiIGJ5dGVzIik CQlzZWxmLl9faXYgPSBJVg CWRlZiBnZXRQYWRkaW5nKHNlbGYpOg CQkiIiJnZXRQYWRkaW5nKCkgLT4gc3RyaW5nIG9mIGxlbmd0aCAxLiBQYWRkaW5nIGNoYXJhY3Rlci4iIiI CQlyZXR1cm4gc2VsZi5fX3BhZGRpbmc CWRlZiBfX1N0cmluZ190b19CaXRMaXN0KHNlbGYsIGRhdGEpOg CQkiIiJUdXJuIHRoZSBzdHJpbmcgZGF0YSwgaW50byBhIGxpc3Qgb2YgYml0cyAoMSwgMCkncyIiIg CQlsID0gbGVuKGRhdGEpICogOA CQlyZXN1bHQgPSBbMF0gKiBsCQlwb3MgPSAwCQlmb3IgYyBpbiBkYXRhOg CQkJaSA9IDc CQkJY2ggPSBvcmQoYyk CQkJd2hpbGUgaSA PSAwOg CQkJCWlmIGNoICYgKDEgPDwgaSkgIT0gMDo CQkJCQlyZXN1bHRbcG9zXSA9IDE CQkJCWVsc2U6CQkJCQlyZXN1bHRbcG9zXSA9IDA CQkJCXBvcyArPSAxCQkJCWkgLT0gMQ CQlyZXR1cm4gcmVzdWx0CWRlZiBfX0JpdExpc3RfdG9fU3RyaW5nKHNlbGYsIGRhdGEpOg CQkiIiJUdXJuIHRoZSBsaXN0IG9mIGJpdHMgLT4gZGF0YSwgaW50byBhIHN0cmluZyIiIg CQlyZXN1bHQgPSAnJw CQlwb3MgPSAwCQljID0gMA CQl3aGlsZSBwb3MgPCBsZW4oZGF0YSk6CQkJYyArPSBkYXRhW3Bvc10gPDwgKDcgLSAocG9zICUgOCkpCQkJaWYgKHBvcyAlIDgpID09IDc6CQkJCXJlc3VsdCArPSBjaHIoYyk CQkJCWMgPSAwCQkJcG9zICs9IDE CQlyZXR1cm4gcmVzdWx0CWRlZiBfX3Blcm11dGF0ZShzZWxmLCB0YWJsZSwgYmxvY2spOg CQkiIiJQZXJtdXRhdGUgdGhpcyBibG9jayB3aXRoIHRoZSBzcGVjaWZpZWQgdGFibGUiIiI CQlyZXR1cm4gbWFwKGxhbWJkYSB4OiBibG9ja1t4XSwgdGFibGUpCQkJIyBUcmFuc2Zvcm0gdGhlIHNlY3JldCBrZXksIHNvIHRoYXQgaXQgaXMgcmVhZHkgZm9yIGRhdGEgcHJvY2Vzc2luZw CSMgQ3JlYXRlIHRoZSAxNiBzdWJrZXlzLCBLWzFdIC0gS1sxNl0 CWRlZiBfX2NyZWF0ZV9zdWJfa2V5cyhzZWxmKTo CQkiIiJDcmVhdGUgdGhlIDE2IHN1YmtleXMgS1sxXSB0byBLWzE2XSBmcm9tIHRoZSBnaXZlbiBrZXkiIiI CQlrZXkgPSBzZWxmLl9fcGVybXV0YXRlKGRlcy5fX3BjMSwgc2VsZi5fX1N0cmluZ190b19CaXRMaXN0KHNlbGYuZ2V0S2V5KCkpKQ CQlpID0gMA CQkjIFNwbGl0IGludG8gTGVmdCBhbmQgUmlnaHQgc2VjdGlvbnM CQlzZWxmLkwgPSBrZXlbOjI4XQ CQlzZWxmLlIgPSBrZXlbMjg6XQ CQl3aGlsZSBpIDwgMTY6CQkJaiA9IDA CQkJIyBQZXJmb3JtIGNpcmN1bGFyIGxlZnQgc2hpZnRzCQkJd2hpbGUgaiA8IGRlcy5fX2xlZnRfcm90YXRpb25zW2ldOg CQkJCXNlbGYuTC5hcHBlbmQoc2VsZi5MWzBdKQ CQkJCWRlbCBzZWxmLkxbMF0 CQkJCXNlbGYuUi5hcHBlbmQoc2VsZi5SWzBdKQ CQkJCWRlbCBzZWxmLlJbMF0 CQkJCWogKz0gMQ CQkJIyBDcmVhdGUgb25lIG9mIHRoZSAxNiBzdWJrZXlzIHRocm91Z2ggcGMyIHBlcm11dGF0aW9uCQkJc2VsZi5LbltpXSA9IHNlbGYuX19wZXJtdXRhdGUoZGVzLl9fcGMyLCBzZWxmLkwgKyBzZWxmLlIpCQkJaSArPSAxCSMgTWFpbiBwYXJ0IG9mIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSwgdGhlIG51bWJlciBjcnVuY2hlciA6KQ CWRlZiBfX2Rlc19jcnlwdChzZWxmLCBibG9jaywgY3J5cHRfdHlwZSk6CQkiIiJDcnlwdCB0aGUgYmxvY2sgb2YgZGF0YSB0aHJvdWdoIERFUyBiaXQtbWFuaXB1bGF0aW9uIiIiCQlibG9jayA9IHNlbGYuX19wZXJtdXRhdGUoZGVzLl9faXAsIGJsb2NrKQ CQlzZWxmLkwgPSBibG9ja1s6MzJdCQlzZWxmLlIgPSBibG9ja1szMjpdCQkjIEVuY3J5cHRpb24gc3RhcnRzIGZyb20gS25bMV0gdGhyb3VnaCB0byBLblsxNl0 CQlpZiBjcnlwdF90eXBlID09IGRlcy5FTkNSWVBUOg CQkJaXRlcmF0aW9uID0gMA CQkJaXRlcmF0aW9uX2FkanVzdG1lbnQgPSAxCQkjIERlY3J5cHRpb24gc3RhcnRzIGZyb20gS25bMTZdIGRvd24gdG8gS25bMV0 CQllbHNlOg CQkJaXRlcmF0aW9uID0gMTU CQkJaXRlcmF0aW9uX2FkanVzdG1lbnQgPSAtMQ CQlpID0gMA CQl3aGlsZSBpIDwgMTY6CQkJIyBNYWtlIGEgY29weSBvZiBSW2ktMV0sIHRoaXMgd2lsbCBsYXRlciBiZWNvbWUgTFtpXQ CQkJdGVtcFIgPSBzZWxmLlJbOl0 CQkJIyBQZXJtdXRhdGUgUltpIC0gMV0gdG8gc3RhcnQgY3JlYXRpbmcgUltpXQ CQkJc2VsZi5SID0gc2VsZi5fX3Blcm11dGF0ZShkZXMuX19leHBhbnNpb25fdGFibGUsIHNlbGYuUik CQkJIyBFeGNsdXNpdmUgb3IgUltpIC0gMV0gd2l0aCBLW2ldLCBjcmVhdGUgQlsxXSB0byBCWzhdIHdoaWxzdCBoZXJlCQkJc2VsZi5SID0gbWFwKGxhbWJkYSB4LCB5OiB4IF4geSwgc2VsZi5SLCBzZWxmLktuW2l0ZXJhdGlvbl0pCQkJQiA9IFtzZWxmLlJbOjZdLCBzZWxmLlJbNjoxMl0sIHNlbGYuUlsxMjoxOF0sIHNlbGYuUlsxODoyNF0sIHNlbGYuUlsyNDozMF0sIHNlbGYuUlszMDozNl0sIHNlbGYuUlszNjo0Ml0sIHNlbGYuUls0MjpdXQ CQkJIyBPcHRpbWl6YXRpb246IFJlcGxhY2VkIGJlbG93IGNvbW1lbnRlZCBjb2RlIHdpdGggYWJvdmU CQkJI2ogPSAwCQkJI0IgPSBbXQ CQkJI3doaWxlIGogPCBsZW4oc2VsZi5SKTo CQkJIwlzZWxmLlJbal0gPSBzZWxmLlJbal0gXiBzZWxmLktuW2l0ZXJhdGlvbl1bal0 CQkJIwlqICs9IDE CQkJIwlpZiBqICUgNiA9PSAwOg CQkJIwkJQi5hcHBlbmQoc2VsZi5SW2otNjpqXSk CQkJIyBQZXJtdXRhdGUgQlsxXSB0byBCWzhdIHVzaW5nIHRoZSBTLUJveGVzCQkJaiA9IDA CQkJQm4gPSBbMF0gKiAzMg CQkJcG9zID0gMA CQkJd2hpbGUgaiA8IDg6CQkJCSMgV29yayBvdXQgdGhlIG9mZnNldHM CQkJCW0gPSAoQltqXVswXSA8PCAxKSArIEJbal1bNV0 CQkJCW4gPSAoQltqXVsxXSA8PCAzKSArIChCW2pdWzJdIDw8IDIpICsgKEJbal1bM10gPDwgMSkgKyBCW2pdWzRdCQkJCSMgRmluZCB0aGUgcGVybXV0YXRpb24gdmFsdWU CQkJCXYgPSBkZXMuX19zYm94W2pdWyhtIDw8IDQpICsgbl0 CQkJCSMgVHVybiB2YWx1ZSBpbnRvIGJpdHMsIGFkZCBpdCB0byByZXN1bHQ6IEJuCQkJCUJuW3Bvc10gPSAodiAmIDgpID4 IDM CQkJCUJuW3BvcyArIDFdID0gKHYgJiA0KSA PiAyCQkJCUJuW3BvcyArIDJdID0gKHYgJiAyKSA PiAxCQkJCUJuW3BvcyArIDNdID0gdiAmIDE CQkJCXBvcyArPSA0CQkJCWogKz0gMQ CQkJIyBQZXJtdXRhdGUgdGhlIGNvbmNhdGluYXRpb24gb2YgQlsxXSB0byBCWzhdIChCbik CQkJc2VsZi5SID0gc2VsZi5fX3Blcm11dGF0ZShkZXMuX19wLCBCbik CQkJIyBYb3Igd2l0aCBMW2kgLSAxXQ CQkJc2VsZi5SID0gbWFwKGxhbWJkYSB4LCB5OiB4IF4geSwgc2VsZi5SLCBzZWxmLkwpCQkJIyBPcHRpbWl6YXRpb246IFRoaXMgbm93IHJlcGxhY2VzIHRoZSBiZWxvdyBjb21tZW50ZWQgY29kZQ CQkJI2ogPSAwCQkJI3doaWxlIGogPCBsZW4oc2VsZi5SKTo CQkJIwlzZWxmLlJbal0gPSBzZWxmLlJbal0gXiBzZWxmLkxbal0 CQkJIwlqICs9IDE CQkJIyBMW2ldIGJlY29tZXMgUltpIC0gMV0 CQkJc2VsZi5MID0gdGVtcFI CQkJaSArPSAxCQkJaXRlcmF0aW9uICs9IGl0ZXJhdGlvbl9hZGp1c3RtZW50CQkJIyBGaW5hbCBwZXJtdXRhdGlvbiBvZiBSWzE2XUxbMTZdCQlzZWxmLmZpbmFsID0gc2VsZi5fX3Blcm11dGF0ZShkZXMuX19mcCwgc2VsZi5SICsgc2VsZi5MKQ CQlyZXR1cm4gc2VsZi5maW5hbA CSMgRGF0YSB0byBiZSBlbmNyeXB0ZWQvZGVjcnlwdGVkCWRlZiBjcnlwdChzZWxmLCBkYXRhLCBjcnlwdF90eXBlKTo CQkiIiJDcnlwdCB0aGUgZGF0YSBpbiBibG9ja3MsIHJ1bm5pbmcgaXQgdGhyb3VnaCBkZXNfY3J5cHQoKSIiIg CQkjIEVycm9yIGNoZWNrIHRoZSBkYXRhCQlpZiBub3QgZGF0YTo CQkJcmV0dXJuICcnCQlpZiBsZW4oZGF0YSkgJSBzZWxmLmJsb2NrX3NpemUgIT0gMDo CQkJaWYgY3J5cHRfdHlwZSA9PSBkZXMuREVDUllQVDogIyBEZWNyeXB0aW9uIG11c3Qgd29yayBvbiA4IGJ5dGUgYmxvY2tzCQkJCXJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZGF0YSBsZW5ndGgsIGRhdGEgbXVzdCBiZSBhIG11bHRpcGxlIG9mICIgKyBzdHIoc2VsZi5ibG9ja19zaXplKSArICIgYnl0ZXNcbi4iKQ CQkJaWYgbm90IHNlbGYuZ2V0UGFkZGluZygpOg CQkJCXJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZGF0YSBsZW5ndGgsIGRhdGEgbXVzdCBiZSBhIG11bHRpcGxlIG9mICIgKyBzdHIoc2VsZi5ibG9ja19zaXplKSArICIgYnl0ZXNcbi4gVHJ5IHNldHRpbmcgdGhlIG9wdGlvbmFsIHBhZGRpbmcgY2hhcmFjdGVyIik CQkJZWxzZTo CQkJCWRhdGEgKz0gKHNlbGYuYmxvY2tfc2l6ZSAtIChsZW4oZGF0YSkgJSBzZWxmLmJsb2NrX3NpemUpKSAqIHNlbGYuZ2V0UGFkZGluZygpCQkJIyBwcmludCAiTGVuIG9mIGRhdGE6ICVmIiAlIChsZW4oZGF0YSkgLyBzZWxmLmJsb2NrX3NpemUpCQlpZiBzZWxmLmdldE1vZGUoKSA9PSBDQkM6CQkJaWYgc2VsZi5nZXRJVigpOg CQkJCWl2ID0gc2VsZi5fX1N0cmluZ190b19CaXRMaXN0KHNlbGYuZ2V0SVYoKSk CQkJZWxzZTo CQkJCXJhaXNlIFZhbHVlRXJyb3IoIkZvciBDQkMgbW9kZSwgeW91IG11c3Qgc3VwcGx5IHRoZSBJbml0aWFsIFZhbHVlIChJVikgZm9yIGNpcGhlcmluZyIpCQkjIFNwbGl0IHRoZSBkYXRhIGludG8gYmxvY2tzLCBjcnlwdGluZyBlYWNoIG9uZSBzZXBlcmF0ZWx5CQlpID0gMA CQlkaWN0ID0ge30 CQlyZXN1bHQgPSBbXQ CQkjY2FjaGVkID0gMA CQkjbGluZXMgPSAwCQl3aGlsZSBpIDwgbGVuKGRhdGEpOg CQkJIyBUZXN0IGNvZGUgZm9yIGNhY2hpbmcgZW5jcnlwdGlvbiByZXN1bHRzCQkJI2xpbmVzICs9IDE CQkJI2lmIGRpY3QuaGFzX2tleShkYXRhW2k6aSs4XSk6CQkJCSNwcmludCAiQ2FjaGVkIHJlc3VsdCBmb3I6ICVzIiAlIGRhdGFbaTppKzhdCQkJIwljYWNoZWQgKz0gMQ CQkJIwlyZXN1bHQuYXBwZW5kKGRpY3RbZGF0YVtpOmkrOF1dKQ CQkJIwlpICs9IDg CQkJIwljb250aW51ZQ CQkJCQkJYmxvY2sgPSBzZWxmLl9fU3RyaW5nX3RvX0JpdExpc3QoZGF0YVtpOmkrOF0pCQkJIyBYb3Igd2l0aCBJViBpZiB1c2luZyBDQkMgbW9kZQ CQkJaWYgc2VsZi5nZXRNb2RlKCkgPT0gQ0JDOg CQkJCWlmIGNyeXB0X3R5cGUgPT0gZGVzLkVOQ1JZUFQ6CQkJCQlibG9jayA9IG1hcChsYW1iZGEgeCwgeTogeCBeIHksIGJsb2NrLCBpdik CQkJCQkjaiA9IDA CQkJCQkjd2hpbGUgaiA8IGxlbihibG9jayk6CQkJCQkjCWJsb2NrW2pdID0gYmxvY2tbal0gXiBpdltqXQ CQkJCQkjCWogKz0gMQ CQkJCXByb2Nlc3NlZF9ibG9jayA9IHNlbGYuX19kZXNfY3J5cHQoYmxvY2ssIGNyeXB0X3R5cGUpCQkJCWlmIGNyeXB0X3R5cGUgPT0gZGVzLkRFQ1JZUFQ6CQkJCQlwcm9jZXNzZWRfYmxvY2sgPSBtYXAobGFtYmRhIHgsIHk6IHggXiB5LCBwcm9jZXNzZWRfYmxvY2ssIGl2KQ CQkJCQkjaiA9IDA CQkJCQkjd2hpbGUgaiA8IGxlbihwcm9jZXNzZWRfYmxvY2spOg CQkJCQkjCXByb2Nlc3NlZF9ibG9ja1tqXSA9IHByb2Nlc3NlZF9ibG9ja1tqXSBeIGl2W2pdCQkJCQkjCWogKz0gMQ CQkJCQlpdiA9IGJsb2NrCQkJCWVsc2U6CQkJCQlpdiA9IHByb2Nlc3NlZF9ibG9jaw CQkJZWxzZTo CQkJCXByb2Nlc3NlZF9ibG9jayA9IHNlbGYuX19kZXNfY3J5cHQoYmxvY2ssIGNyeXB0X3R5cGUpCQkJIyBBZGQgdGhlIHJlc3VsdGluZyBjcnlwdGVkIGJsb2NrIHRvIG91ciBsaXN0CQkJI2QgPSBzZWxmLl9fQml0TGlzdF90b19TdHJpbmcocHJvY2Vzc2VkX2Jsb2NrKQ CQkJI3Jlc3VsdC5hcHBlbmQoZCk CQkJcmVzdWx0LmFwcGVuZChzZWxmLl9fQml0TGlzdF90b19TdHJpbmcocHJvY2Vzc2VkX2Jsb2NrKSk CQkJI2RpY3RbZGF0YVtpOmkrOF1dID0gZA CQkJaSArPSA4CQkjIHByaW50ICJMaW5lczogJWQsIGNhY2hlZDogJWQiICUgKGxpbmVzLCBjYWNoZWQpCQkjIFJlbW92ZSB0aGUgcGFkZGluZyBmcm9tIHRoZSBsYXN0IGJsb2NrCQlpZiBjcnlwdF90eXBlID09IGRlcy5ERUNSWVBUIGFuZCBzZWxmLmdldFBhZGRpbmcoKTo CQkJI3ByaW50ICJSZW1vdmluZyBkZWNyeXB0IHBhZCI CQkJcyA9IHJlc3VsdFstMV0 CQkJd2hpbGUgc1stMV0gPT0gc2VsZi5nZXRQYWRkaW5nKCk6CQkJCXMgPSBzWzotMV0 CQkJcmVzdWx0Wy0xXSA9IHM CQkjIFJldHVybiB0aGUgZnVsbCBjcnlwdGVkIHN0cmluZw CQlyZXR1cm4gJycuam9pbihyZXN1bHQpCWRlZiBlbmNyeXB0KHNlbGYsIGRhdGEsIHBhZD0nJyk6CQkiIiJlbmNyeXB0KGRhdGEsIFtwYWRdKSAtPiBzdHJpbmc CQlkYXRhIDogU3RyaW5nIHRvIGJlIGVuY3J5cHRlZA CQlwYWQgIDogT3B0aW9uYWwgYXJndW1lbnQgZm9yIGVuY3J5cHRpb24gcGFkZGluZy4gTXVzdCBvbmx5IGJlIG9uZSBieXRlCQlUaGUgZGF0YSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcyBhbmQgd2lsbCBiZSBlbmNyeXB0ZWQ CQl3aXRoIHRoZSBhbHJlYWR5IHNwZWNpZmllZCBrZXkuIERhdGEgZG9lcyBub3QgaGF2ZSB0byBiZSBhCQltdWx0aXBsZSBvZiA4IGJ5dGVzIGlmIHRoZSBwYWRkaW5nIGNoYXJhY3RlciBpcyBzdXBwbGllZCwgdGhlCQlkYXRhIHdpbGwgdGhlbiBiZSBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzIHdpdGggdGhpcw CQlwYWQgY2hhcmFjdGVyLg CQkiIiI CQlzZWxmLl9fcGFkZGluZyA9IHBhZA CQlyZXR1cm4gc2VsZi5jcnlwdChkYXRhLCBkZXMuRU5DUllQVCk CWRlZiBkZWNyeXB0KHNlbGYsIGRhdGEsIHBhZD0nJyk6CQkiIiJkZWNyeXB0KGRhdGEsIFtwYWRdKSAtPiBzdHJpbmc CQlkYXRhIDogU3RyaW5nIHRvIGJlIGVuY3J5cHRlZA CQlwYWQgIDogT3B0aW9uYWwgYXJndW1lbnQgZm9yIGRlY3J5cHRpb24gcGFkZGluZy4gTXVzdCBvbmx5IGJlIG9uZSBieXRlCQlUaGUgZGF0YSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcyBhbmQgd2lsbCBiZSBkZWNyeXB0ZWQ CQl3aXRoIHRoZSBhbHJlYWR5IHNwZWNpZmllZCBrZXkuIElmIHRoZSBvcHRpb25hbCBwYWRkaW5nIGNoYXJhY3Rlcg CQlpcyBzdXBwbGllZCwgdGhlbiB0aGUgdW4tZW5jeXB0ZWQgZGF0YSB3aWxsIGhhdmUgdGhlIHBhZGRpbmcgY2hhcmFjdGVycw CQlyZW1vdmVkIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiBUaGlzIHBhZCByZW1vdmFsIG9ubHkgb2NjdXJzIG9uIHRoZQ CQlsYXN0IDggYnl0ZXMgb2YgdGhlIGRhdGEgKGxhc3QgZGF0YSBibG9jaykuCQkiIiI CQlzZWxmLl9fcGFkZGluZyA9IHBhZA CQlyZXR1cm4gc2VsZi5jcnlwdChkYXRhLCBkZXMuREVDUllQVCk IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM IyAJCQkJVHJpcGxlIERFUwkJCQkgICAgIw IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM Y2xhc3MgdHJpcGxlX2Rlczo CSIiIlRyaXBsZSBERVMgZW5jcnlwdGlvbi9kZWNyeXRwaW9uIGNsYXNzCVRoaXMgYWxnb3JpdGhtIHVzZXMgdGhlIERFUy1FREUzICh3aGVuIGEgMjQgYnl0ZSBrZXkgaXMgc3VwcGxpZWQpIG9yCXRoZSBERVMtRURFMiAod2hlbiBhIDE2IGJ5dGUga2V5IGlzIHN1cHBsaWVkKSBlbmNyeXB0aW9uIG1ldGhvZHMuCVN1cHBvcnRzIEVDQiAoRWxlY3Ryb25pYyBDb2RlIEJvb2spIGFuZCBDQkMgKEN5cGhlciBCbG9jayBDaGFpbmluZykgbW9kZXMuCXB5RGVzLmRlcyhrZXksIFttb2RlXSwgW0lWXSk CWtleSAgLT4gVGhlIGVuY3J5cHRpb24ga2V5IHN0cmluZywgbXVzdCBiZSBlaXRoZXIgMTYgb3IgMjQgYnl0ZXMgbG9uZw CW1vZGUgLT4gT3B0aW9uYWwgYXJndW1lbnQgZm9yIGVuY3J5cHRpb24gdHlwZSwgY2FuIGJlIGVpdGhlciBweURlcy5FQ0I CQkoRWxlY3Ryb25pYyBDb2RlIEJvb2spLCBweURlcy5DQkMgKEN5cGhlciBCbG9jayBDaGFpbmluZyk CUlWICAgLT4gT3B0aW9uYWwgc3RyaW5nIGFyZ3VtZW50LCBtdXN0IGJlIHN1cHBsaWVkIGlmIHVzaW5nIENCQyBtb2RlLg CQlNdXN0IGJlIDggYnl0ZXMgaW4gbGVuZ3RoLg CSIiIg CWRlZiBfX2luaXRfXyhzZWxmLCBrZXksIG1vZGU9RUNCLCBJVj1Ob25lKTo CQlzZWxmLmJsb2NrX3NpemUgPSA4CQlzZWxmLnNldE1vZGUobW9kZSk CQlzZWxmLl9fcGFkZGluZyA9ICcnCQlzZWxmLl9faXYgPSBJVg CQlzZWxmLnNldEtleShrZXkpCWRlZiBnZXRLZXkoc2VsZik6CQkiIiJnZXRLZXkoKSAtPiBzdHJpbmciIiI CQlyZXR1cm4gc2VsZi5fX2tleQ CWRlZiBzZXRLZXkoc2VsZiwga2V5KTo CQkiIiJXaWxsIHNldCB0aGUgY3J5cHRpbmcga2V5IGZvciB0aGlzIG9iamVjdC4gRWl0aGVyIDE2IG9yIDI0IGJ5dGVzIGxvbmcuIiIiCQlzZWxmLmtleV9zaXplID0gMjQgICMgVXNlIERFUy1FREUzIG1vZGU CQlpZiBsZW4oa2V5KSAhPSBzZWxmLmtleV9zaXplOg CQkJaWYgbGVuKGtleSkgPT0gMTY6ICMgVXNlIERFUy1FREUyIG1vZGU CQkJCXNlbGYua2V5X3NpemUgPSAxNg CQkJZWxzZTo CQkJCXJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdHJpcGxlIERFUyBrZXkgc2l6ZS4gS2V5IG11c3QgYmUgZWl0aGVyIDE2IG9yIDI0IGJ5dGVzIGxvbmciKQ CQlpZiBzZWxmLmdldE1vZGUoKSA9PSBDQkMgYW5kIChub3Qgc2VsZi5nZXRJVigpIG9yIGxlbihzZWxmLmdldElWKCkpICE9IHNlbGYuYmxvY2tfc2l6ZSk6CQkJcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBJViwgbXVzdCBiZSA4IGJ5dGVzIGluIGxlbmd0aCIpICMjIFRPRE86IENoZWNrIHRoaXM CQkjIG1vZGVzIGdldCBoYW5kbGVkIGxhdGVyLCBzaW5jZSBDQkMgZ29lcyBvbiB0b3Agb2YgdGhlIHRyaXBsZS1kZXM CQlzZWxmLl9fa2V5MSA9IGRlcyhrZXlbOjhdKQ CQlzZWxmLl9fa2V5MiA9IGRlcyhrZXlbODoxNl0pCQlpZiBzZWxmLmtleV9zaXplID09IDE2Og CQkJc2VsZi5fX2tleTMgPSBzZWxmLl9fa2V5MQ CQllbHNlOg CQkJc2VsZi5fX2tleTMgPSBkZXMoa2V5WzE2Ol0pCQlzZWxmLl9fa2V5ID0ga2V5CWRlZiBnZXRNb2RlKHNlbGYpOg CQkiIiJnZXRNb2RlKCkgLT4gcHlEZXMuRUNCIG9yIHB5RGVzLkNCQyIiIg CQlyZXR1cm4gc2VsZi5fX21vZGU CWRlZiBzZXRNb2RlKHNlbGYsIG1vZGUpOg CQkiIiJTZXRzIHRoZSB0eXBlIG9mIGNyeXB0aW5nIG1vZGUsIHB5RGVzLkVDQiBvciBweURlcy5DQkMiIiI CQlzZWxmLl9fbW9kZSA9IG1vZGU CWRlZiBnZXRJVihzZWxmKTo CQkiIiJnZXRJVigpIC0 IHN0cmluZyIiIg CQlyZXR1cm4gc2VsZi5fX2l2CWRlZiBzZXRJVihzZWxmLCBJVik6CQkiIiJXaWxsIHNldCB0aGUgSW5pdGlhbCBWYWx1ZSwgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIENCQyBtb2RlIiIiCQlzZWxmLl9faXYgPSBJVg CWRlZiB4b3JzdHIoIHNlbGYsIHgsIHkgKTo CQkiIiJSZXR1cm5zIHRoZSBiaXR3aXNlIHhvciBvZiB0aGUgYnl0ZXMgaW4gdHdvIHN0cmluZ3MiIiI CQlpZiBsZW4oeCkgIT0gbGVuKHkpOg CQkJcmFpc2UgInN0cmluZyBsZW5ndGhzIGRpZmZlciAlZCAlZCIgJSAobGVuKHgpLCBsZW4oeSkpCQlyZXQgPSAnJw CQlmb3IgaSBpbiByYW5nZShsZW4oeCkpOg CQkJcmV0ICs9IGNocihvcmQoeFtpXSkgXiBvcmQoeVtpXSkpCQlyZXR1cm4gcmV0CWRlZiBlbmNyeXB0KHNlbGYsIGRhdGEsIHBhZD0nJyk6CQkiIiJlbmNyeXB0KGRhdGEsIFtwYWRdKSAtPiBzdHJpbmc CQlkYXRhIDogU3RyaW5nIHRvIGJlIGVuY3J5cHRlZA CQlwYWQgIDogT3B0aW9uYWwgYXJndW1lbnQgZm9yIGVuY3J5cHRpb24gcGFkZGluZy4gTXVzdCBvbmx5IGJlIG9uZSBieXRlCQlUaGUgZGF0YSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcyBhbmQgd2lsbCBiZSBlbmNyeXB0ZWQ CQl3aXRoIHRoZSBhbHJlYWR5IHNwZWNpZmllZCBrZXkuIERhdGEgZG9lcyBub3QgaGF2ZSB0byBiZSBhCQltdWx0aXBsZSBvZiA4IGJ5dGVzIGlmIHRoZSBwYWRkaW5nIGNoYXJhY3RlciBpcyBzdXBwbGllZCwgdGhlCQlkYXRhIHdpbGwgdGhlbiBiZSBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzIHdpdGggdGhpcw CQlwYWQgY2hhcmFjdGVyLg CQkiIiI CQlpZiBzZWxmLmdldE1vZGUoKSA9PSBFQ0I6CQkJIyBzaW1wbGU CQkJZGF0YSA9IHNlbGYuX19rZXkxLmVuY3J5cHQoZGF0YSwgcGFkKQ CQkJZGF0YSA9IHNlbGYuX19rZXkyLmRlY3J5cHQoZGF0YSk CQkJcmV0dXJuIHNlbGYuX19rZXkzLmVuY3J5cHQoZGF0YSk CQlpZiBzZWxmLmdldE1vZGUoKSA9PSBDQkM6CQkJcmFpc2UgIlRoaXMgY29kZSBoYXNuJ3QgYmVlbiB0ZXN0ZWQgeWV0Ig CQkJaWYgbGVuKGRhdGEpICUgc2VsZi5ibG9ja19zaXplICE9IDA6CQkJCXJhaXNlICJDQkMgbW9kZSBuZWVkcyBkYXRhbGVuIHRvIGJlIGEgbXVsdGlwbGUgb2YgYmxvY2tzaXplIChpZ25vcmluZyBwYWRkaW5nIGZvciBub3cpIg CQkJIyBzaW1wbGU CQkJbGFzdGJsb2NrID0gc2VsZi5nZXRJVigpCQkJcmV0ZGF0YSA9ICcnCQkJZm9yIGkgaW4gcmFuZ2UoIDAsIGxlbihkYXRhKSwgc2VsZi5ibG9ja19zaXplICk6CQkJCXRoaXNibG9jayA9IGRhdGFbIGk6aStzZWxmLmJsb2NrX3NpemUgXQ CQkJCSMgdGhlIFhPUiBmb3IgQ0JDCQkJCXRoaXNibG9jayA9IHNlbGYueG9yc3RyKCBsYXN0YmxvY2ssIHRoaXNibG9jayApCQkJCXRoaXNibG9jayA9IHNlbGYuX19rZXkxLmVuY3J5cHQodGhpc2Jsb2NrKQ CQkJCXRoaXNibG9jayA9IHNlbGYuX19rZXkyLmRlY3J5cHQodGhpc2Jsb2NrKQ CQkJCWxhc3RibG9jayA9IHNlbGYuX19rZXkzLmVuY3J5cHQodGhpc2Jsb2NrKQ CQkJCXJldGRhdGEgKz0gbGFzdGJsb2NrCQkJcmV0dXJuIHJldGRhdGE CQlyYWlzZSAiTm90IHJlYWNoZWQiCWRlZiBkZWNyeXB0KHNlbGYsIGRhdGEsIHBhZD0nJyk6CQkiIiJkZWNyeXB0KGRhdGEsIFtwYWRdKSAtPiBzdHJpbmc CQlkYXRhIDogU3RyaW5nIHRvIGJlIGVuY3J5cHRlZA CQlwYWQgIDogT3B0aW9uYWwgYXJndW1lbnQgZm9yIGRlY3J5cHRpb24gcGFkZGluZy4gTXVzdCBvbmx5IGJlIG9uZSBieXRlCQlUaGUgZGF0YSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcyBhbmQgd2lsbCBiZSBkZWNyeXB0ZWQ CQl3aXRoIHRoZSBhbHJlYWR5IHNwZWNpZmllZCBrZXkuIElmIHRoZSBvcHRpb25hbCBwYWRkaW5nIGNoYXJhY3Rlcg CQlpcyBzdXBwbGllZCwgdGhlbiB0aGUgdW4tZW5jeXB0ZWQgZGF0YSB3aWxsIGhhdmUgdGhlIHBhZGRpbmcgY2hhcmFjdGVycw CQlyZW1vdmVkIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiBUaGlzIHBhZCByZW1vdmFsIG9ubHkgb2NjdXJzIG9uIHRoZQ CQlsYXN0IDggYnl0ZXMgb2YgdGhlIGRhdGEgKGxhc3QgZGF0YSBibG9jaykuCQkiIiI CQlpZiBzZWxmLmdldE1vZGUoKSA9PSBFQ0I6CQkJIyBzaW1wbGU CQkJZGF0YSA9IHNlbGYuX19rZXkzLmRlY3J5cHQoZGF0YSk CQkJZGF0YSA9IHNlbGYuX19rZXkyLmVuY3J5cHQoZGF0YSk CQkJcmV0dXJuIHNlbGYuX19rZXkxLmRlY3J5cHQoZGF0YSwgcGFkKQ CQlpZiBzZWxmLmdldE1vZGUoKSA9PSBDQkM6CQkJaWYgbGVuKGRhdGEpICUgc2VsZi5ibG9ja19zaXplICE9IDA6CQkJCXJhaXNlICJDYW4gb25seSBkZWNyeXB0IG11bHRpcGxlcyBvZiBibG9ja3NpemUiCQkJbGFzdGJsb2NrID0gc2VsZi5nZXRJVigpCQkJcmV0ZGF0YSA9ICcnCQkJZm9yIGkgaW4gcmFuZ2UoIDAsIGxlbihkYXRhKSwgc2VsZi5ibG9ja19zaXplICk6CQkJCSMgY2FuIEkgYXJyYW5nZSB0aGlzIGJldHRlcj8gcHJvYmFibHkuLi4 CQkJCWNpcGhlcmNodW5rID0gZGF0YVsgaTppK3NlbGYuYmxvY2tfc2l6ZSBdCQkJCXRoaXNibG9jayA9IHNlbGYuX19rZXkzLmRlY3J5cHQoY2lwaGVyY2h1bmspCQkJCXRoaXNibG9jayA9IHNlbGYuX19rZXkyLmVuY3J5cHQodGhpc2Jsb2NrKQ CQkJCXRoaXNibG9jayA9IHNlbGYuX19rZXkxLmRlY3J5cHQodGhpc2Jsb2NrKQ CQkJCXJldGRhdGEgKz0gc2VsZi54b3JzdHIoIGxhc3RibG9jaywgdGhpc2Jsb2NrICk CQkJCWxhc3RibG9jayA9IGNpcGhlcmNodW5rCQkJcmV0dXJuIHJldGRhdGE CQlyYWlzZSAiTm90IHJlYWNoZWQiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM IyAJCQkJRXhhbXBsZXMJCQkJICAgICM IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM ZGVmIGV4YW1wbGVfdHJpcGxlX2RlcygpOg CWZyb20gdGltZSBpbXBvcnQgdGltZQ CSMgVXRpbGl0eSBtb2R1bGU CWZyb20gYmluYXNjaWkgaW1wb3J0IHVuaGV4bGlmeSBhcyB1bmhleA CSMgZXhhbXBsZSBzaG93cyB0cmlwbGUtZGVzIGVuY3J5cHRpb24gdXNpbmcgdGhlIGRlcyBjbGFzcw CXByaW50ICJFeGFtcGxlIG9mIHRyaXBsZSBERVMgZW5jcnlwdGlvbiBpbiBkZWZhdWx0IEVDQiBtb2RlIChERVMtRURFMylcbiI CXByaW50ICJUcmlwbGUgZGVzIHVzaW5nIHRoZSBkZXMgY2xhc3MgKDMgdGltZXMpIg CXQgPSB0aW1lKCk CWsxID0gZGVzKHVuaGV4KCIxMzM0NTc3OTlCQkNERkYxIikpCWsyID0gZGVzKHVuaGV4KCIxMTIyMzM0NDU1NjY3Nzg4IikpCWszID0gZGVzKHVuaGV4KCI3NzY2MTEwMEREMjIzMzExIikpCWQgPSAiVHJpcGxlIERFUyB0ZXN0IHN0cmluZywgdG8gYmUgZW5jcnlwdGVkIGFuZCBkZWNyeXB0ZWQuLi4iCXByaW50ICJLZXkxOiAgICAgICVzIiAlIGsxLmdldEtleSgpCXByaW50ICJLZXkyOiAgICAgICVzIiAlIGsyLmdldEtleSgpCXByaW50ICJLZXkzOiAgICAgICVzIiAlIGszLmdldEtleSgpCXByaW50ICJEYXRhOiAgICAgICVzIiAlIGQ CWUxID0gazEuZW5jcnlwdChkKQ CWUyID0gazIuZGVjcnlwdChlMSk CWUzID0gazMuZW5jcnlwdChlMik CXByaW50ICJFbmNyeXB0ZWQ6ICIgKyBlMw CWQzID0gazMuZGVjcnlwdChlMyk CWQyID0gazIuZW5jcnlwdChkMyk CWQxID0gazEuZGVjcnlwdChkMik CXByaW50ICJEZWNyeXB0ZWQ6ICIgKyBkMQ CXByaW50ICJERVMgdGltZSB0YWtlbjogJWYgKCVkIGNyeXB0IG9wZXJhdGlvbnMpIiAlICh0aW1lKCkgLSB0LCA2ICogKGxlbihkKSAvIDgpKQ CXByaW50ICIiCSMgRXhhbXBsZSBiZWxvdyB1c2VzIHRoZSB0cmlwbGUtZGVzIGNsYXNzIHRvIGFjaGlldmUgdGhlIHNhbWUgYXMgYWJvdmU CXByaW50ICJOb3cgdXNpbmcgdHJpcGxlIGRlcyBjbGFzcyI CXQgPSB0aW1lKCk CXQxID0gdHJpcGxlX2Rlcyh1bmhleCgiMTMzNDU3Nzk5QkJDREZGMTExMjIzMzQ0NTU2Njc3ODg3NzY2MTEwMEREMjIzMzExIikpCXByaW50ICJLZXk6ICAgICAgICVzIiAlIHQxLmdldEtleSgpCXByaW50ICJEYXRhOiAgICAgICVzIiAlIGQ CXRkMSA9IHQxLmVuY3J5cHQoZCk CXByaW50ICJFbmNyeXB0ZWQ6ICIgKyB0ZDE CXRkMiA9IHQxLmRlY3J5cHQodGQxKQ CXByaW50ICJEZWNyeXB0ZWQ6ICIgKyB0ZDI CXByaW50ICJUcmlwbGUgREVTIHRpbWUgdGFrZW46ICVmICglZCBjcnlwdCBvcGVyYXRpb25zKSIgJSAodGltZSgpIC0gdCwgNiAqIChsZW4oZCkgLyA4KSk ZGVmIGV4YW1wbGVfZGVzKCk6CWZyb20gdGltZSBpbXBvcnQgdGltZQ CSMgZXhhbXBsZSBvZiBERVMgZW5jcnlwdGluZyBpbiBDQkMgbW9kZSB3aXRoIHRoZSBJViBvZiAiXDBcMFwwXDBcMFwwXDBcMCI CXByaW50ICJFeGFtcGxlIG9mIERFUyBlbmNyeXB0aW9uIHVzaW5nIENCQyBtb2RlXG4iCXQgPSB0aW1lKCk CWsgPSBkZXMoIkRFU0NSWVBUIiwgQ0JDLCAiXDBcMFwwXDBcMFwwXDBcMCIpCWRhdGEgPSAiREVTIGVuY3J5cHRpb24gYWxnb3JpdGhtIg CXByaW50ICJLZXkgICAgICA6ICIgKyBrLmdldEtleSgpCXByaW50ICJEYXRhICAgICA6ICIgKyBkYXRhCWQgPSBrLmVuY3J5cHQoZGF0YSk CXByaW50ICJFbmNyeXB0ZWQ6ICIgKyBkCWQgPSBrLmRlY3J5cHQoZCk CXByaW50ICJEZWNyeXB0ZWQ6ICIgKyBkCXByaW50ICJERVMgdGltZSB0YWtlbjogJWYgKDYgY3J5cHQgb3BlcmF0aW9ucykiICUgKHRpbWUoKSAtIHQpCXByaW50ICIiZGVmIF9fdGVzdF9fKCk6CWV4YW1wbGVfZGVzKCk CWV4YW1wbGVfdHJpcGxlX2RlcygpZGVmIF9fZnVsbHRlc3RfXygpOg CSMgVGhpcyBzaG91bGQgbm90IHByb2R1Y2UgYW55IHVuZXhwZWN0ZWQgZXJyb3JzIG9yIGV4Y2VwdGlvbnM CWZyb20gYmluYXNjaWkgaW1wb3J0IHVuaGV4bGlmeSBhcyB1bmhleA CWZyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkgYXMgZG9oZXg CV9fdGVzdF9fKCk CXByaW50ICIiCWsgPSBkZXMoIlwwXDBcMFwwXDBcMFwwXDAiLCBDQkMsICJcMFwwXDBcMFwwXDBcMFwwIik CWQgPSBrLmVuY3J5cHQoIkRFUyBlbmNyeXB0aW9uIGFsZ29yaXRobSIpCWlmIGsuZGVjcnlwdChkKSAhPSAiREVTIGVuY3J5cHRpb24gYWxnb3JpdGhtIjo CQlwcmludCAiVGVzdCAxIEVycm9yOiBVbmVuY3lwdGVkIGRhdGEgYmxvY2sgZG9lcyBub3QgbWF0Y2ggc3RhcnQgZGF0YSI CWsgPSBkZXMoIlwwXDBcMFwwXDBcMFwwXDAiLCBDQkMsICJcMFwwXDBcMFwwXDBcMFwwIik CWQgPSBrLmVuY3J5cHQoIkRlZmF1bHQgc3RyaW5nIG9mIHRleHQiLCAnKicpCWlmIGsuZGVjcnlwdChkLCAiKiIpICE9ICJEZWZhdWx0IHN0cmluZyBvZiB0ZXh0Ijo CQlwcmludCAiVGVzdCAyIEVycm9yOiBVbmVuY3lwdGVkIGRhdGEgYmxvY2sgZG9lcyBub3QgbWF0Y2ggc3RhcnQgZGF0YSI CWsgPSBkZXMoIlxyXG5cdEFCQ1xyXG4iKQ CWQgPSBrLmVuY3J5cHQoIlN0cmluZyB0byBQYWQiLCAnKicpCWlmIGsuZGVjcnlwdChkKSAhPSAiU3RyaW5nIHRvIFBhZCoqKiI6CQlwcmludCAiJyVzJyIgJSBrLmRlY3J5cHQoZCk CQlwcmludCAiVGVzdCAzIEVycm9yOiBVbmVuY3lwdGVkIGRhdGEgYmxvY2sgZG9lcyBub3QgbWF0Y2ggc3RhcnQgZGF0YSI CWsgPSBkZXMoIlxyXG5cdEFCQ1xyXG4iKQ CWQgPSBrLmVuY3J5cHQodW5oZXgoIjAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MCIpLCB1bmhleCgiNDQiKSk CWlmIGsuZGVjcnlwdChkLCB1bmhleCgiNDQiKSkgIT0gdW5oZXgoIjAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MCIpOg CQlwcmludCAiVGVzdCA0YSBFcnJvcjogVW5lbmN5cHRlZCBkYXRhIGJsb2NrIGRvZXMgbm90IG1hdGNoIHN0YXJ0IGRhdGEiCWlmIGsuZGVjcnlwdChkKSAhPSB1bmhleCgiMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwNDQiKTo CQlwcmludCAiVGVzdCA0YiBFcnJvcjogVW5lbmN5cHRlZCBkYXRhIGJsb2NrIGRvZXMgbm90IG1hdGNoIHN0YXJ0IGRhdGEiCWsgPSB0cmlwbGVfZGVzKCJNeURlc0tleVxyXG5cdEFCQ1xyXG4wOTg3KjU0MyIpCWQgPSBrLmVuY3J5cHQodW5oZXgoIjAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MCIpKQ CWlmIGsuZGVjcnlwdChkKSAhPSB1bmhleCgiMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwIik6CQlwcmludCAiVGVzdCA1IEVycm9yOiBVbmVuY3lwdGVkIGRhdGEgYmxvY2sgZG9lcyBub3QgbWF0Y2ggc3RhcnQgZGF0YSI CWsgPSB0cmlwbGVfZGVzKCJcclxuXHRBQkNcclxuMDk4Nyo1NDMiKQ CWQgPSBrLmVuY3J5cHQodW5oZXgoIjAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MDAwMDEwMjAzMDQwNTA2MDcwOEZGOEZEQ0IwNDA4MCIpKQ CWlmIGsuZGVjcnlwdChkKSAhPSB1bmhleCgiMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwMDAwMTAyMDMwNDA1MDYwNzA4RkY4RkRDQjA0MDgwIik6CQlwcmludCAiVGVzdCA2IEVycm9yOiBVbmVuY3lwdGVkIGRhdGEgYmxvY2sgZG9lcyBub3QgbWF0Y2ggc3RhcnQgZGF0YSI ZGVmIF9fZmlsZXRlc3RfXygpOg CWZyb20gdGltZSBpbXBvcnQgdGltZQ CWYgPSBvcGVuKCJweURlcy5weSIsICJyYisiKQ CWQgPSBmLnJlYWQoKQ CWYuY2xvc2UoKQ CXQgPSB0aW1lKCk CWsgPSBkZXMoIk15REVTS2V5Iik CWQgPSBrLmVuY3J5cHQoZCwgIiAiKQ CWYgPSBvcGVuKCJweURlcy5weS5lbmMiLCAid2IrIik CWYud3JpdGUoZCk CWYuY2xvc2UoKQ CWQgPSBrLmRlY3J5cHQoZCwgIiAiKQ CWYgPSBvcGVuKCJweURlcy5weS5kZWMiLCAid2IrIik CWYud3JpdGUoZCk CWYuY2xvc2UoKQ CXByaW50ICJERVMgZmlsZSB0ZXN0IHRpbWU6ICVmIiAlICh0aW1lKCkgLSB0KQ ZGVmIF9fcHJvZmlsZV9fKCk6CWltcG9ydCBwcm9maWxlCXByb2ZpbGUucnVuKCdfX2Z1bGx0ZXN0X18oKScpCSNwcm9maWxlLnJ1bignX19maWxldGVzdF9fKCknKQ aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzo CV9fdGVzdF9fKCk CSNfX2Z1bGx0ZXN0X18oKQ CSNfX2ZpbGV0ZXN0X18oKQ CSNfX3Byb2ZpbGVfXygp


于是解密之后发现和python的一个官方文档相同。这个时候思路就开始跑偏了。。。当时自己想的是比较这两个文件 结果就是越来越偏。

看了别人的writeup之后才搞清楚base64原来有这么多的奥秘在里面。。。
事实上 这个题目利用的是base64加密后的字符串来藏字符。如果base64字符串后面有 时 说明前一个字符的后四位是任意的 既可以写入信息的。如果是 结尾的 前一个字符的后两位是任意的 可以写入信息。
然后还有一个地方在于base64的字符集 要对之前和之后的位置进行异或 再将其拼接起来 就是01字符串 转成字符串得flag。。。
代码

import base64f open( C:\\\\Users\\\\wangchong\\\\Desktop\\\\wangchong\\\\crypto100\\\\timian.txt )index ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 / line f.readline()while line: line2 base64.b64encode(base64.b64decode(line)) line line[0:len(line)-1] if(line[-1] line[-2] ): x line[-3] x1 line2[-3] res str(bin((index.find(x))^(index.find(x1)))).replace( 0b , 00 )[-4:] if(len(res) 3): res 0 res print (str(res)), elif(line[-1] and line[-2]! ): x line[-2] x1 line2[-2] print str(bin((index.find(x))^(index.find(x1)))).replace( 0b , 00 )[-2:], line f.readline()

结果如下

\"\"


将这些字符拼接到一起转字符串 得到

\"\"


\"\" \"\" \"\" 点赞 \"\" \"\" 评论 3

本文链接: http://syndoz.immuno-online.com/view-723854.html

发布于 : 2021-03-25 阅读(0)
公司介绍
品牌分类
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616