You are viewing a single comment's thread from:

RE: Test title

in #topic16 years ago

{
"id": "ssc-b8923f70-c1f7-497f-961i",
"json": {
"contractName": "contract",
"contractAction": "deploy",
"contractPayload": {
"name": "account",
"code": "YWN0aW9ucy5jcmVhdGVTU0MgPSBmdW5jdGlvbiAocGF5bG9hZCkgewogIGRiLmNyZWF0ZVRhYmxlKCdhY2NvdW50cycpOwp9CgovLyByZWdpc3RlciBhbiBhY2NvdW50IGhlbHBzIG90aGVyIGNvbnRyYWN0cyB0byBrbm93IAovLyBpZiBhbiBhY2NvdW50IGV4aXN0cyBvbiB0aGUgU3RlZW0gYmxvY2tjaGFpbgphY3Rpb25zLnJlZ2lzdGVyID0gZnVuY3Rpb24gKHBheWxvYWQpIHsKICBsZXQgYWNjb3VudHMgPSBkYi5nZXRUYWJsZSgnYWNjb3VudHMnKTsKCiAgbGV0IGFjY291bnQgPSBhY2NvdW50cy5maW5kT25lKHsgJ2lkJzogc2VuZGVyIH0pOwoKICBpZiAoYWNjb3VudCA9PT0gbnVsbCkgewogICAgY29uc3QgbmV3QWNjb3VudCA9IHsKICAgICAgJ2lkJzogc2VuZGVyCiAgICB9OwoKICAgIGFjY291bnRzLmluc2VydChuZXdBY2NvdW50KTsKICB9IAp9"
}
}
}

Sort:  

{
"id": "ssc-b8923f70-c1f7-497f-961i",
"json": {
"contractName": "account",
"contractAction": "register",
"contractPayload": {}
}
}

{
"id": "ssc-b8923f70-c1f7-497f-961i",
"json": {
"contractName": "contract",
"contractAction": "deploy",
"contractPayload": {
"name": "token",
"code": "YWN0aW9ucy5jcmVhdGVTU0MgPSBmdW5jdGlvbiAocGF5bG9hZCkgewogIGRiLmNyZWF0ZVRhYmxlKCd0b2tlbnMnKTsKICBkYi5jcmVhdGVUYWJsZSgnYmFsYW5jZXMnKTsKfQoKYWN0aW9ucy5jcmVhdGUgPSBmdW5jdGlvbiAocGF5bG9hZCkgewogIGNvbnN0IHsgc3ltYm9sLCBwcmVjaXNpb24sIG1heFN1cHBseSB9ID0gcGF5bG9hZDsKCiAgaWYgKHN5bWJvbCAmJiB0eXBlb2Ygc3ltYm9sID09PSAnc3RyaW5nJwogICAgJiYgKHByZWNpc2lvbiAmJiB0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyB8fCBwcmVjaXNpb24gPT09IDApCiAgICAmJiBtYXhTdXBwbHkgJiYgdHlwZW9mIG1heFN1cHBseSA9PT0gJ251bWJlcicpIHsKCiAgICBjb25zdCBSZWdleFB1cmVMZXR0ZXJzID0gL15bYS16QS1aXSskLzsKCiAgICAvLyB0aGUgc3ltYm9sIG11c3QgYmUgbWFkZSBvZiBsZXR0ZXJzIG9ubHkKICAgIC8vIHRoZSBwcmVjaXNpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDggYW5kIG11c3QgYmUgYW4gaW50ZWdlcgogICAgLy8gdGhlIG1heCBzdXBwbHkgbXVzdCBiZSBwb3NpdGl2ZQogICAgaWYgKGFzc2VydChSZWdleFB1cmVMZXR0ZXJzLnRlc3Qoc3ltYm9sKSwgJ2ludmFsaWQgc3ltYm9sJykKICAgICAgJiYgYXNzZXJ0KChwcmVjaXNpb24gPj0gMCAmJiBwcmVjaXNpb24gPD0gOCkgJiYgKE51bWJlci5pc0ludGVnZXIocHJlY2lzaW9uKSksICdpbnZhbGlkIHByZWNpc2lvbicpCiAgICAgICYmIGFzc2VydChtYXhTdXBwbHkgPiAwLCAnbWF4U3VwcGx5IG11c3QgYmUgcG9zaXRpdmUnKSkgewogICAgICBsZXQgdG9rZW5zID0gZGIuZ2V0VGFibGUoJ3Rva2VucycpOwoKICAgICAgLy8gY2hlY2sgaWYgdGhlIHRva2VuIGFscmVhZHkgZXhpc3RzCiAgICAgIGxldCB0b2tlbiA9IHRva2Vucy5maW5kT25lKHsgc3ltYm9sIH0pOwoKICAgICAgaWYgKGFzc2VydCh0b2tlbiA9PT0gbnVsbCwgJ3N5bWJvbCBhbHJlYWR5IGV4aXN0cycpKSB7CiAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB7CiAgICAgICAgICAnaXNzdWVyJzogc2VuZGVyLAogICAgICAgICAgc3ltYm9sLAogICAgICAgICAgcHJlY2lzaW9uLAogICAgICAgICAgbWF4U3VwcGx5LAogICAgICAgICAgJ3N1cHBseSc6IDAKICAgICAgICB9OwoKICAgICAgICB0b2tlbnMuaW5zZXJ0KG5ld1Rva2VuKTsKICAgICAgfQogICAgfQogIH0KfQoKYWN0aW9ucy5pc3N1ZSA9IGZ1bmN0aW9uIChwYXlsb2FkKSB7CiAgY29uc3QgeyB0bywgc3ltYm9sLCBxdWFudGl0eSwgaXNTaWduZWRXaXRoQWN0aXZlS2V5IH0gPSBwYXlsb2FkOwoKICBpZiAoYXNzZXJ0KGlzU2lnbmVkV2l0aEFjdGl2ZUtleSA9PT0gdHJ1ZSwgJ3lvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleScpCiAgICAmJiB0byAmJiB0eXBlb2YgdG8gPT09ICdzdHJpbmcnCiAgICAmJiBzeW1ib2wgJiYgdHlwZW9mIHN5bWJvbCA9PT0gJ3N0cmluZycKICAgICYmIHF1YW50aXR5ICYmIHR5cGVvZiBxdWFudGl0eSA9PT0gJ251bWJlcicpIHsKCiAgICBsZXQgdG9rZW5zID0gZGIuZ2V0VGFibGUoJ3Rva2VucycpOwogICAgbGV0IHRva2VuID0gdG9rZW5zLmZpbmRPbmUoeyBzeW1ib2wgfSk7CgogICAgLy8gdGhlIHN5bWJvbCBtdXN0IGV4aXN0CiAgICAvLyB0aGUgc2VuZGVyIG11c3QgYmUgdGhlIGlzc3VlcgogICAgLy8gdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIHF1YW50aXR5IGlzIGNvcnJlY3QKICAgIGlmIChhc3NlcnQodG9rZW4gIT09IG51bGwsICdzeW1ib2wgZG9lcyBub3QgZXhpc3QnKQogICAgICAmJiBhc3NlcnQodG9rZW4uaXNzdWVyID09PSBzZW5kZXIsICdub3QgYWxsb3dlZCB0byBpc3N1ZSB0b2tlbnMnKQogICAgICAmJiBhc3NlcnQoY291bnREZWNpbWFscyhxdWFudGl0eSkgPD0gdG9rZW4ucHJlY2lzaW9uLCAnc3ltYm9sIHByZWNpc2lvbiBtaXNtYXRjaCcpCiAgICAgICYmIGFzc2VydChxdWFudGl0eSA+IDAsICdtdXN0IGlzc3VlIHBvc2l0aXZlIHF1YW50aXR5JykKICAgICAgJiYgYXNzZXJ0KHF1YW50aXR5IDw9ICh0b2tlbi5tYXhTdXBwbHkgLSB0b2tlbi5zdXBwbHkpLCAncXVhbnRpdHkgZXhjZWVkcyBhdmFpbGFibGUgc3VwcGx5JykpIHsKCiAgICAgIGxldCBhY2NvdW50ID0gZGIuZmluZE9uZUluVGFibGUoJ2FjY291bnQnLCAnYWNjb3VudHMnLCB7ICdpZCc6IHRvIH0pOwoKICAgICAgLy8gdGhlIGFjY291bnQgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUKICAgICAgaWYgKGFzc2VydChhY2NvdW50ICE9PSBudWxsLCAndG8gYWNjb3VudCBkb2VzIG5vdCBleGlzdCcpKSB7CiAgICAgICAgLy8gd2UgbWFkZSBhbGwgdGhlIHJlcXVpcmVkIHZlcmlmaWNhdGlvbiwgbGV0J3Mgbm93IGlzc3VlIHRoZSB0b2tlbnMKCiAgICAgICAgdG9rZW4uc3VwcGx5ID0gY2FsY3VsYXRlQmFsYW5jZSh0b2tlbi5zdXBwbHksIHF1YW50aXR5LCB0b2tlbi5wcmVjaXNpb24sIHRydWUpOwogICAgICAgIHRva2Vucy51cGRhdGUodG9rZW4pOwoKICAgICAgICBhZGRCYWxhbmNlKHRva2VuLmlzc3VlciwgdG9rZW4sIHF1YW50aXR5KTsKCiAgICAgICAgaWYgKHRvICE9PSB0b2tlbi5pc3N1ZXIpIHsKICAgICAgICAgIGFjdGlvbnMudHJhbnNmZXIocGF5bG9hZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgphY3Rpb25zLnRyYW5zZmVyID0gZnVuY3Rpb24gKHBheWxvYWQpIHsKICBjb25zdCB7IHRvLCBzeW1ib2wsIHF1YW50aXR5LCBpc1NpZ25lZFdpdGhBY3RpdmVLZXkgfSA9IHBheWxvYWQ7CgogIGlmIChhc3NlcnQoaXNTaWduZWRXaXRoQWN0aXZlS2V5ID09PSB0cnVlLCAneW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5JykKICAgICYmIHRvICYmIHR5cGVvZiB0byA9PT0gJ3N0cmluZycKICAgICYmIHN5bWJvbCAmJiB0eXBlb2Ygc3ltYm9sID09PSAnc3RyaW5nJwogICAgJiYgcXVhbnRpdHkgJiYgdHlwZW9mIHF1YW50aXR5ID09PSAnbnVtYmVyJykgewoKICAgIGlmIChhc3NlcnQodG8gIT09IHNlbmRlciwgJ2Nhbm5vdCB0cmFuc2ZlciB0byBzZWxmJykpIHsKICAgICAgbGV0IGFjY291bnQgPSBkYi5maW5kT25lSW5UYWJsZSgnYWNjb3VudCcsICdhY2NvdW50cycsIHsgJ2lkJzogdG8gfSk7CgogICAgICAvLyB0aGUgYWNjb3VudCBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZQogICAgICBpZiAoYXNzZXJ0KGFjY291bnQgIT09IG51bGwsICd0byBhY2NvdW50IGRvZXMgbm90IGV4aXN0JykpIHsKICAgICAgICBsZXQgdG9rZW5zID0gZGIuZ2V0VGFibGUoJ3Rva2VucycpOwogICAgICAgIGxldCB0b2tlbiA9IHRva2Vucy5maW5kT25lKHsgc3ltYm9sIH0pOwoKICAgICAgICAvLyB0aGUgc3ltYm9sIG11c3QgZXhpc3QKICAgICAgICAvLyB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGUgcXVhbnRpdHkgaXMgY29ycmVjdAogICAgICAgIGlmIChhc3NlcnQodG9rZW4gIT09IG51bGwsICdzeW1ib2wgZG9lcyBub3QgZXhpc3QnKQogICAgICAgICAgJiYgYXNzZXJ0KGNvdW50RGVjaW1hbHMocXVhbnRpdHkpIDw9IHRva2VuLnByZWNpc2lvbiwgJ3N5bWJvbCBwcmVjaXNpb24gbWlzbWF0Y2gnKQogICAgICAgICAgJiYgYXNzZXJ0KHF1YW50aXR5ID4gMCwgJ211c3QgdHJhbnNmZXIgcG9zaXRpdmUgcXVhbnRpdHknKSkgewoKICAgICAgICAgIGlmIChzdWJCYWxhbmNlKHNlbmRlciwgdG9rZW4sIHF1YW50aXR5KSkgewogICAgICAgICAgICBhZGRCYWxhbmNlKHRvLCB0b2tlbiwgcXVhbnRpdHkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKbGV0IHN1YkJhbGFuY2UgPSBmdW5jdGlvbiAoYWNjb3VudCwgdG9rZW4sIHF1YW50aXR5KSB7CiAgbGV0IGJhbGFuY2VzID0gZGIuZ2V0VGFibGUoJ2JhbGFuY2VzJyk7CiAgbGV0IGJhbGFuY2UgPSBiYWxhbmNlcy5maW5kT25lKHsgYWNjb3VudCwgJ3N5bWJvbCc6IHRva2VuLnN5bWJvbCB9KTsKICBkZWJ1ZyhiYWxhbmNlcy5jb3VudCgpKQogIGlmIChhc3NlcnQoYmFsYW5jZSAhPT0gbnVsbCwgJ2JhbGFuY2UgZG9lcyBub3QgZXhpc3QnKSAmJgogICAgYXNzZXJ0KGJhbGFuY2UuYmFsYW5jZSA+PSBxdWFudGl0eSwgJ292ZXJkcmF3biBiYWxhbmNlJykpIHsKCiAgICBiYWxhbmNlLmJhbGFuY2UgPSBjYWxjdWxhdGVCYWxhbmNlKGJhbGFuY2UuYmFsYW5jZSwgcXVhbnRpdHksIHRva2VuLnByZWNpc2lvbiwgZmFsc2UpOwoKICAgIGlmIChiYWxhbmNlLmJhbGFuY2UgPD0gMCkgewogICAgICBiYWxhbmNlcy5yZW1vdmUoYmFsYW5jZSk7CiAgICB9IGVsc2UgewogICAgICBiYWxhbmNlcy51cGRhdGUoYmFsYW5jZSk7CiAgICB9CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICByZXR1cm4gZmFsc2U7Cn0KCmxldCBhZGRCYWxhbmNlID0gZnVuY3Rpb24gKGFjY291bnQsIHRva2VuLCBxdWFudGl0eSkgewogIGxldCBiYWxhbmNlcyA9IGRiLmdldFRhYmxlKCdiYWxhbmNlcycpOwogIGxldCBiYWxhbmNlID0gYmFsYW5jZXMuZmluZE9uZSh7IGFjY291bnQsICdzeW1ib2wnOiB0b2tlbi5zeW1ib2wgfSk7CgogIGlmIChiYWxhbmNlID09PSBudWxsKSB7CiAgICBiYWxhbmNlID0gewogICAgICBhY2NvdW50LAogICAgICAnc3ltYm9sJzogdG9rZW4uc3ltYm9sLAogICAgICAnYmFsYW5jZSc6IHF1YW50aXR5CiAgICB9CgogICAgYmFsYW5jZXMuaW5zZXJ0KGJhbGFuY2UpOwogIH0gZWxzZSB7CiAgICBiYWxhbmNlLmJhbGFuY2UgPSBjYWxjdWxhdGVCYWxhbmNlKGJhbGFuY2UuYmFsYW5jZSwgcXVhbnRpdHksIHRva2VuLnByZWNpc2lvbiwgdHJ1ZSk7CgogICAgYmFsYW5jZXMudXBkYXRlKGJhbGFuY2UpOwogIH0KfQoKbGV0IGNhbGN1bGF0ZUJhbGFuY2UgPSBmdW5jdGlvbiAoYmFsYW5jZSwgcXVhbnRpdHksIHByZWNpc2lvbiwgYWRkKSB7CiAgaWYgKHByZWNpc2lvbiA9PT0gMCkgewogICAgcmV0dXJuIGFkZCA/IGJhbGFuY2UgKyBxdWFudGl0eSA6IGJhbGFuY2UgLSBxdWFudGl0eQogIH0KCiAgbGV0IHJhdGUgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTsKICBsZXQgdG1wUXR5ID0gcXVhbnRpdHkgKiByYXRlOwogIGxldCB0bXBCYWxhbmNlID0gYmFsYW5jZSAqIHJhdGU7CgogIHJldHVybiBhZGQgPyAodG1wQmFsYW5jZSArIHRtcFF0eSkgLyByYXRlIDogKHRtcEJhbGFuY2UgLSB0bXBRdHkpIC8gcmF0ZTsKfQoKbGV0IGNvdW50RGVjaW1hbHMgPSBmdW5jdGlvbiAodmFsdWUpIHsKICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlKSByZXR1cm4gMDsKICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdLmxlbmd0aCB8fCAwOwp9"
}
}
}

{
"id": "ssc-b8923f70-c1f7-497f-961i",
"json": {
"contractName": "token",
"contractAction": "create",
"contractPayload": {
"symbol": "PKTC",
"precision": 0,
"maxSupply": 1000000
}
}
}

{
"id": "ssc-b8923f70-c1f7-497f-961i",
"json": {
"contractName": "token",
"contractAction": "issue",
"contractPayload": {
"symbol": "PKTC",
"to": "harpagon",
"quantity": 1000
}
}
}

{
"id": "ssc-b8923f70-c1f7-497f-961j",
"json": {
"contractName": "contract",
"contractAction": "deploy",
"contractPayload": {
"name": "account",
"code": "YWN0aW9ucy5jcmVhdGVTU0MgPSBmdW5jdGlvbiAocGF5bG9hZCkgewogIGRiLmNyZWF0ZVRhYmxlKCdhY2NvdW50cycpOwp9CgovLyByZWdpc3RlciBhbiBhY2NvdW50IGhlbHBzIG90aGVyIGNvbnRyYWN0cyB0byBrbm93IAovLyBpZiBhbiBhY2NvdW50IGV4aXN0cyBvbiB0aGUgU3RlZW0gYmxvY2tjaGFpbgphY3Rpb25zLnJlZ2lzdGVyID0gZnVuY3Rpb24gKHBheWxvYWQpIHsKICBsZXQgYWNjb3VudHMgPSBkYi5nZXRUYWJsZSgnYWNjb3VudHMnKTsKCiAgbGV0IGFjY291bnQgPSBhY2NvdW50cy5maW5kT25lKHsgJ2lkJzogc2VuZGVyIH0pOwoKICBpZiAoYWNjb3VudCA9PT0gbnVsbCkgewogICAgY29uc3QgbmV3QWNjb3VudCA9IHsKICAgICAgJ2lkJzogc2VuZGVyCiAgICB9OwoKICAgIGFjY291bnRzLmluc2VydChuZXdBY2NvdW50KTsKICB9IAp9"
}
}
}

{
"id": "ssc-b8923f70-c1f7-497f-961j",
"json": {
"contractName": "account",
"contractAction": "register",
"contractPayload": {}
}
}

{
"id": "ssc-b8923f70-c1f7-497f-961j",
"json": {
"contractName": "contract",
"contractAction": "deploy",
"contractPayload": {
"name": "token",
"code": "YWN0aW9ucy5jcmVhdGVTU0MgPSBmdW5jdGlvbiAocGF5bG9hZCkgewogIGRiLmNyZWF0ZVRhYmxlKCdhY2NvdW50cycpOwp9CgovLyByZWdpc3RlciBhbiBhY2NvdW50IGhlbHBzIG90aGVyIGNvbnRyYWN0cyB0byBrbm93IAovLyBpZiBhbiBhY2NvdW50IGV4aXN0cyBvbiB0aGUgU3RlZW0gYmxvY2tjaGFpbgphY3Rpb25zLnJlZ2lzdGVyID0gZnVuY3Rpb24gKHBheWxvYWQpIHsKICBsZXQgYWNjb3VudHMgPSBkYi5nZXRUYWJsZSgnYWNjb3VudHMnKTsKCiAgbGV0IGFjY291bnQgPSBhY2NvdW50cy5maW5kT25lKHsgJ2lkJzogc2VuZGVyIH0pOwoKICBpZiAoYWNjb3VudCA9PT0gbnVsbCkgewogICAgY29uc3QgbmV3QWNjb3VudCA9IHsKICAgICAgJ2lkJzogc2VuZGVyCiAgICB9OwoKICAgIGFjY291bnRzLmluc2VydChuZXdBY2NvdW50KTsKICB9Cn0KICBgOwoKICAgIGxldCBjb2RlVG9rZW4gPSBgCmFjdGlvbnMuY3JlYXRlU1NDID0gZnVuY3Rpb24gKHBheWxvYWQpIHsKICBkYi5jcmVhdGVUYWJsZSgndG9rZW5zJyk7CiAgZGIuY3JlYXRlVGFibGUoJ2JhbGFuY2VzJyk7Cn0KCmFjdGlvbnMuY3JlYXRlID0gZnVuY3Rpb24gKHBheWxvYWQpIHsKICBjb25zdCB7IHN5bWJvbCwgcHJlY2lzaW9uLCBtYXhTdXBwbHkgfSA9IHBheWxvYWQ7CgogIGlmIChzeW1ib2wgJiYgdHlwZW9mIHN5bWJvbCA9PT0gJ3N0cmluZycKICAgICYmIChwcmVjaXNpb24gJiYgdHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgfHwgcHJlY2lzaW9uID09PSAwKQogICAgJiYgbWF4U3VwcGx5ICYmIHR5cGVvZiBtYXhTdXBwbHkgPT09ICdudW1iZXInKSB7CgogICAgY29uc3QgUmVnZXhQdXJlTGV0dGVycyA9IC9eW2EtekEtWl0rJC87CgogICAgLy8gdGhlIHN5bWJvbCBtdXN0IGJlIG1hZGUgb2YgbGV0dGVycyBvbmx5CiAgICAvLyB0aGUgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA4IGFuZCBtdXN0IGJlIGFuIGludGVnZXIKICAgIC8vIHRoZSBtYXggc3VwcGx5IG11c3QgYmUgcG9zaXRpdmUKICAgIGlmIChhc3NlcnQoUmVnZXhQdXJlTGV0dGVycy50ZXN0KHN5bWJvbCksICdpbnZhbGlkIHN5bWJvbCcpCiAgICAgICYmIGFzc2VydCgocHJlY2lzaW9uID49IDAgJiYgcHJlY2lzaW9uIDw9IDgpICYmIChOdW1iZXIuaXNJbnRlZ2VyKHByZWNpc2lvbikpLCAnaW52YWxpZCBwcmVjaXNpb24nKQogICAgICAmJiBhc3NlcnQobWF4U3VwcGx5ID4gMCwgJ21heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlJykpIHsKICAgICAgbGV0IHRva2VucyA9IGRiLmdldFRhYmxlKCd0b2tlbnMnKTsKCiAgICAgIC8vIGNoZWNrIGlmIHRoZSB0b2tlbiBhbHJlYWR5IGV4aXN0cwogICAgICBsZXQgdG9rZW4gPSB0b2tlbnMuZmluZE9uZSh7IHN5bWJvbCB9KTsKCiAgICAgIGlmIChhc3NlcnQodG9rZW4gPT09IG51bGwsICdzeW1ib2wgYWxyZWFkeSBleGlzdHMnKSkgewogICAgICAgIGNvbnN0IG5ld1Rva2VuID0gewogICAgICAgICAgJ2lzc3Vlcic6IHNlbmRlciwKICAgICAgICAgIHN5bWJvbCwKICAgICAgICAgIHByZWNpc2lvbiwKICAgICAgICAgIG1heFN1cHBseSwKICAgICAgICAgICdzdXBwbHknOiAwCiAgICAgICAgfTsKCiAgICAgICAgdG9rZW5zLmluc2VydChuZXdUb2tlbik7CiAgICAgIH0KICAgIH0KICB9Cn0KCmFjdGlvbnMuaXNzdWUgPSBmdW5jdGlvbiAocGF5bG9hZCkgewogIGNvbnN0IHsgdG8sIHN5bWJvbCwgcXVhbnRpdHksIGlzU2lnbmVkV2l0aEFjdGl2ZUtleSB9ID0gcGF5bG9hZDsKCiAgaWYgKGFzc2VydChpc1NpZ25lZFdpdGhBY3RpdmVLZXkgPT09IHRydWUsICd5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXknKQogICAgJiYgdG8gJiYgdHlwZW9mIHRvID09PSAnc3RyaW5nJwogICAgJiYgc3ltYm9sICYmIHR5cGVvZiBzeW1ib2wgPT09ICdzdHJpbmcnCiAgICAmJiBxdWFudGl0eSAmJiB0eXBlb2YgcXVhbnRpdHkgPT09ICdudW1iZXInKSB7CgogICAgbGV0IHRva2VucyA9IGRiLmdldFRhYmxlKCd0b2tlbnMnKTsKICAgIGxldCB0b2tlbiA9IHRva2Vucy5maW5kT25lKHsgc3ltYm9sIH0pOwoKICAgIC8vIHRoZSBzeW1ib2wgbXVzdCBleGlzdAogICAgLy8gdGhlIHNlbmRlciBtdXN0IGJlIHRoZSBpc3N1ZXIKICAgIC8vIHRoZW4gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZSBxdWFudGl0eSBpcyBjb3JyZWN0CiAgICBpZiAoYXNzZXJ0KHRva2VuICE9PSBudWxsLCAnc3ltYm9sIGRvZXMgbm90IGV4aXN0JykKICAgICAgJiYgYXNzZXJ0KHRva2VuLmlzc3VlciA9PT0gc2VuZGVyLCAnbm90IGFsbG93ZWQgdG8gaXNzdWUgdG9rZW5zJykKICAgICAgJiYgYXNzZXJ0KGNvdW50RGVjaW1hbHMocXVhbnRpdHkpIDw9IHRva2VuLnByZWNpc2lvbiwgJ3N5bWJvbCBwcmVjaXNpb24gbWlzbWF0Y2gnKQogICAgICAmJiBhc3NlcnQocXVhbnRpdHkgPiAwLCAnbXVzdCBpc3N1ZSBwb3NpdGl2ZSBxdWFudGl0eScpCiAgICAgICYmIGFzc2VydChxdWFudGl0eSA8PSAodG9rZW4ubWF4U3VwcGx5IC0gdG9rZW4uc3VwcGx5KSwgJ3F1YW50aXR5IGV4Y2VlZHMgYXZhaWxhYmxlIHN1cHBseScpKSB7CgogICAgICBsZXQgYWNjb3VudCA9IGRiLmZpbmRPbmVJblRhYmxlKCdhY2NvdW50JywgJ2FjY291bnRzJywgeyAnaWQnOiB0byB9KTsKCiAgICAgIC8vIHRoZSBhY2NvdW50IG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlCiAgICAgIGlmIChhc3NlcnQoYWNjb3VudCAhPT0gbnVsbCwgJ3RvIGFjY291bnQgZG9lcyBub3QgZXhpc3QnKSkgewogICAgICAgIC8vIHdlIG1hZGUgYWxsIHRoZSByZXF1aXJlZCB2ZXJpZmljYXRpb24sIGxldCdzIG5vdyBpc3N1ZSB0aGUgdG9rZW5zCgogICAgICAgIHRva2VuLnN1cHBseSA9IGNhbGN1bGF0ZUJhbGFuY2UodG9rZW4uc3VwcGx5LCBxdWFudGl0eSwgdG9rZW4ucHJlY2lzaW9uLCB0cnVlKTsKICAgICAgICB0b2tlbnMudXBkYXRlKHRva2VuKTsKCiAgICAgICAgYWRkQmFsYW5jZSh0b2tlbi5pc3N1ZXIsIHRva2VuLCBxdWFudGl0eSk7CgogICAgICAgIGlmICh0byAhPT0gdG9rZW4uaXNzdWVyKSB7CiAgICAgICAgICBhY3Rpb25zLnRyYW5zZmVyKHBheWxvYWQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKYWN0aW9ucy50cmFuc2ZlciA9IGZ1bmN0aW9uIChwYXlsb2FkKSB7CiAgY29uc3QgeyB0bywgc3ltYm9sLCBxdWFudGl0eSwgaXNTaWduZWRXaXRoQWN0aXZlS2V5IH0gPSBwYXlsb2FkOwoKICBpZiAoYXNzZXJ0KGlzU2lnbmVkV2l0aEFjdGl2ZUtleSA9PT0gdHJ1ZSwgJ3lvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleScpCiAgICAmJiB0byAmJiB0eXBlb2YgdG8gPT09ICdzdHJpbmcnCiAgICAmJiBzeW1ib2wgJiYgdHlwZW9mIHN5bWJvbCA9PT0gJ3N0cmluZycKICAgICYmIHF1YW50aXR5ICYmIHR5cGVvZiBxdWFudGl0eSA9PT0gJ251bWJlcicpIHsKCiAgICBpZiAoYXNzZXJ0KHRvICE9PSBzZW5kZXIsICdjYW5ub3QgdHJhbnNmZXIgdG8gc2VsZicpKSB7CiAgICAgIGxldCBhY2NvdW50ID0gZGIuZmluZE9uZUluVGFibGUoJ2FjY291bnQnLCAnYWNjb3VudHMnLCB7ICdpZCc6IHRvIH0pOwoKICAgICAgLy8gdGhlIGFjY291bnQgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUKICAgICAgaWYgKGFzc2VydChhY2NvdW50ICE9PSBudWxsLCAndG8gYWNjb3VudCBkb2VzIG5vdCBleGlzdCcpKSB7CiAgICAgICAgbGV0IHRva2VucyA9IGRiLmdldFRhYmxlKCd0b2tlbnMnKTsKICAgICAgICBsZXQgdG9rZW4gPSB0b2tlbnMuZmluZE9uZSh7IHN5bWJvbCB9KTsKCiAgICAgICAgLy8gdGhlIHN5bWJvbCBtdXN0IGV4aXN0CiAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIHF1YW50aXR5IGlzIGNvcnJlY3QKICAgICAgICBpZiAoYXNzZXJ0KHRva2VuICE9PSBudWxsLCAnc3ltYm9sIGRvZXMgbm90IGV4aXN0JykKICAgICAgICAgICYmIGFzc2VydChjb3VudERlY2ltYWxzKHF1YW50aXR5KSA8PSB0b2tlbi5wcmVjaXNpb24sICdzeW1ib2wgcHJlY2lzaW9uIG1pc21hdGNoJykKICAgICAgICAgICYmIGFzc2VydChxdWFudGl0eSA"
}
}
}