diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 78fc644..ef5a187 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2142,13 +2142,13 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_pcall_method(ctx, 2); duk_pop(ctx); free(_servicemanager); - char *_usersessions = ILibMemory_Allocate(106484, 0, NULL, NULL); - memcpy_s(_usersessions + 0, 60848, "LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBOT1RJRllfRk9SX1RISVNfU0VTU0lPTiA9IDA7CnZhciBOT1RJRllfRk9SX0FMTF9TRVNTSU9OUyA9IDE7CnZhciBXTV9XVFNTRVNTSU9OX0NIQU5HRSA9IDB4MDJCMTsKdmFyIFdNX1BPV0VSQlJPQURDQVNUID0gMHgyMTg7CnZhciBQQlRfUE9XRVJTRVRUSU5HQ0hBTkdFID0gMHg4MDEzOwp2YXIgUEJUX0FQTVNVU1BFTkQgPSAweDQ7CnZhciBQQlRfQVBNUkVTVU1FU1VTUEVORCA9IDB4NzsKdmFyIFBCVF9BUE1SRVNVTUVBVVRPTUFUSUMgPSAweDEyOwp2YXIgUEJUX0FQTVBPV0VSU1RBVFVTQ0hBTkdFID0gMHhBOwp2YXIgUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiA9IDB4MDQwMDsNCnZhciBUT0tFTl9RVUVSWSA9IDB4MDAwODsNCnZhciBUb2tlblVzZXIgPSAxOwp2YXIgVG9rZW5UeXBlID0gODsKdmFyIFRva2VuU2Vzc2lvbklkID0gMTI7CnZhciBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSID0gMTIyOw0KdmFyIEhFQVBfWkVST19NRU1PUlkgPSAweDAwMDAwMDA4Ow0KCnZhciBXVFNfQ09OU09MRV9DT05ORUNUICAgICAgICAgPSAoMHgxKTsKdmFyIFdUU19DT05TT0xFX0RJU0NPTk5FQ1QgICAgICA9ICgweDIpOwp2YXIgV1RTX1JFTU9URV9DT05ORUNUICAgICAgICAgID0gKDB4Myk7CnZhciBXVFNfUkVNT1RFX0RJU0NPTk5FQ1QgICAgICAgPSAoMHg0KTsKdmFyIFdUU19TRVNTSU9OX0xPR09OICAgICAgICAgICA9ICgweDUpOwp2YXIgV1RTX1NFU1NJT05fTE9HT0ZGICAgICAgICAgID0gKDB4Nik7CnZhciBXVFNfU0VTU0lPTl9MT0NLICAgICAgICAgICAgPSAoMHg3KTsKdmFyIFdUU19TRVNTSU9OX1VOTE9DSyAgICAgICAgICA9ICgweDgpOwp2YXIgV1RTX1NFU1NJT05fUkVNT1RFX0NPTlRST0wgID0gKDB4OSk7CnZhciBXVFNfU0VTU0lPTl9DUkVBVEUgICAgICAgICAgPSAoMHhBKTsKdmFyIFdUU19TRVNTSU9OX1RFUk1JTkFURSAgICAgICA9ICgweEIpOwoKdmFyIEdVSURfQUNEQ19QT1dFUl9TT1VSQ0U7CnZhciBHVUlEX0JBVFRFUllfUEVSQ0VOVEFHRV9SRU1BSU5JTkc7CnZhciBHVUlEX0NPTlNPTEVfRElTUExBWV9TVEFURTsKCmZ1bmN0aW9uIGNvbHVtblBhcnNlKGRhdGEsIGRlbGltaXRlcikKewogICAgdmFyIHRva2VucyA9IGRhdGEuc3BsaXQoZGVsaW1pdGVyKTsKICAgIHZhciByZXQgPSBbXTsKICAgIGZvcih2YXIgaSBpbiB0b2tlbnMpCiAgICB7CiAgICAgICAgaWYgKHRva2Vuc1tpXS5sZW5ndGggPiAwKSB7IHJldC5wdXNoKHRva2Vuc1tpXSk7IH0KICAgIH0KICAgIHJldHVybiAocmV0KTsKfQoKCmZ1bmN0aW9uIFVzZXJTZXNzaW9ucygpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ3VzZXItc2Vzc2lvbnMnOwogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwodGhpcywgdHJ1ZSkKICAgICAgICAuY3JlYXRlRXZlbnQoJ2NoYW5nZWQnKQogICAgICAgIC5jcmVhdGVFdmVudCgnbG9ja2VkJykKICAgICAgICAuY3JlYXRlRXZlbnQoJ3VubG9ja2VkJyk7CgogICAgdGhpcy5lbnVtZXJhdGVVc2VycyA9IGZ1bmN0aW9uIGVudW1lcmF0ZVVzZXJzKCkKICAgIHsKICAgICAgICB2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKICAgICAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMuX19yZXNvbHZlciA9IHJlczsKICAgICAgICAgICAgdGhpcy5fX3JlamVjdG9yID0gcmVqOwogICAgICAgIH0pOwogICAgICAgIHAuX19oYW5kbGVyID0gZnVuY3Rpb24gX19oYW5kbGVyKHVzZXJzKQogICAgICAgIHsKICAgICAgICAgICAgcC5fX3Jlc29sdmVyKHVzZXJzKTsKICAgICAgICB9OwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5DdXJyZW50KHAuX19oYW5kbGVyKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goZSkKICAgICAgICB7CiAgICAgICAgICAgIHAuX19yZWplY3RvcihlKTsKICAgICAgICB9CiAgICAgICAgcC5wYXJlbnQgPSB0aGlzOwogICAgICAgIHJldHVybiAocCk7CiAgICB9CgogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykKICAgIHsKICAgICAgICB0aGlzLl9zZXJ2aWNlSG9va2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5fbWFyc2hhbCA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwogICAgICAgIHRoaXMuX2tlcm5lbDMyID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVOYXRpdmVQcm94eSgnS2VybmVsMzIuZGxsJyk7CiAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHZXRMYXN0RXJyb3InKTsKICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1dUU0dldEFjdGl2ZUNvbnNvbGVTZXNzaW9uSWQnKQogICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnQ2xvc2VIYW5kbGUnKTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB0aGlzLl93dHMgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZU5hdGl2ZVByb3h5KCdXdHNhcGkzMi5kbGwnKTsKICAgICAgICAgICAgdGhpcy5fd3RzLkNyZWF0ZU1ldGhvZCgnV1RTRW51bWVyYXRlU2Vzc2lvbnNBJyk7CiAgICAgICAgICAgIHRoaXMuX3d0cy5DcmVhdGVNZXRob2QoJ1dUU1F1ZXJ5U2Vzc2lvbkluZm9ybWF0aW9uVycpOwogICAgICAgICAgICB0aGlzLl93dHMuQ3JlYXRlTWV0aG9kKCdXVFNSZWdpc3RlclNlc3Npb25Ob3RpZmljYXRpb24nKTsKICAgICAgICAgICAgdGhpcy5fd3RzLkNyZWF0ZU1ldGhvZCgnV1RTVW5SZWdpc3RlclNlc3Npb25Ob3RpZmljYXRpb24nKTsKICAgICAgICAgICAgdGhpcy5fd3RzLkNyZWF0ZU1ldGhvZCgnV1RTRnJlZU1lbW9yeScpOwogICAgICAgIH0KICAgICAgICBjYXRjaChleGMpCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgdGhpcy5fYWR2YXBpID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVOYXRpdmVQcm94eSgnQWR2YXBpMzIuZGxsJyk7CiAgICAgICAgdGhpcy5fYWR2YXBpLkNyZWF0ZU1ldGhvZCgnQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkJyk7CiAgICAgICAgdGhpcy5fYWR2YXBpLkNyZWF0ZU1ldGhvZCgnQ2hlY2tUb2tlbk1lbWJlcnNoaXAnKTsKICAgICAgICB0aGlzLl9hZHZhcGkuQ3JlYXRlTWV0aG9kKCdGcmVlU2lkJyk7CgogICAgICAgIHRoaXMuX3VzZXIzMiA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsKICAgICAgICB0aGlzLl91c2VyMzIuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnUmVnaXN0ZXJQb3dlclNldHRpbmdOb3RpZmljYXRpb24nLCB0aHJlYWREaXNwYXRjaDogMX0pOwogICAgICAgIHRoaXMuX3VzZXIzMi5DcmVhdGVNZXRob2QoJ1VucmVnaXN0ZXJQb3dlclNldHRpbmdOb3RpZmljYXRpb24nKTsKICAgICAgICB0aGlzLl9ycGNydCA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlTmF0aXZlUHJveHkoJ1JwY3J0NC5kbGwnKTsKICAgICAgICB0aGlzLl9ycGNydC5DcmVhdGVNZXRob2QoJ1V1aWRGcm9tU3RyaW5nQScpOwogICAgICAgIHRoaXMuX3JwY3J0LlN0cmluZ1RvVVVJRCA9IGZ1bmN0aW9uIFN0cmluZ1RvVVVJRChndWlkKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHJldFZhbCA9IFN0cmluZ1RvVVVJRC51cy5fbWFyc2hhbC5DcmVhdGVWYXJpYWJsZSgxNik7CiAgICAgICAgICAgIGlmKFN0cmluZ1RvVVVJRC51cy5fcnBjcnQuVXVpZEZyb21TdHJpbmdBKFN0cmluZ1RvVVVJRC51cy5fbWFyc2hhbC5DcmVhdGVWYXJpYWJsZShndWlkKSwgcmV0VmFsKS5WYWwgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgKCdDb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gVVVJRCcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX3JwY3J0LlN0cmluZ1RvVVVJRC51cyA9IHRoaXM7CgogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdPcGVuUHJvY2VzcycpCiAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5DcmVhdGVNZXRob2QoJ09wZW5Qcm9jZXNzVG9rZW4nKTsNCiAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5DcmVhdGVNZXRob2QoJ0dldFRva2VuSW5mb3JtYXRpb24nKTsNCiAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5DcmVhdGVNZXRob2QoJ0xvb2t1cEFjY291bnRTaWRXJyk7DQogICAgICAgICAgICB0aGlzLl9hZHZhcGkuQ3JlYXRlTWV0aG9kKCdPcGVuVGhyZWFkVG9rZW4nKTsNCiAgICAgICAgfQogICAgICAgIGNhdGNoKGUpCiAgICAgICAgew0KICAgICAgICB9CgoKICAgICAgICBHVUlEX0FDRENfUE9XRVJfU09VUkNFID0gdGhpcy5fcnBjcnQuU3RyaW5nVG9VVUlEKCc1ZDNlOWE1OS1lOUQ1LTRiMDAtYTZiZC1mZjM0ZmY1MTY1NDgnKTsKICAgICAgICBHVUlEX0JBVFRFUllfUEVSQ0VOVEFHRV9SRU1BSU5JTkcgPSB0aGlzLl9ycGNydC5TdHJpbmdUb1VVSUQoJ2E3YWQ4MDQxLWI0NWEtNGNhZS04N2EzLWVlY2JiNDY4YTllMScpOwogICAgICAgIEdVSURfQ09OU09MRV9ESVNQTEFZX1NUQVRFID0gdGhpcy5fcnBjcnQuU3RyaW5nVG9VVUlEKCc2ZmU2OTU1Ni03MDRhLTQ3YTAtOGYyNC1jMjhkOTM2ZmRhNDcnKTsKCiAgICAgICAgdGhpcy5TZXNzaW9uU3RhdGVzID0gWydBY3RpdmUnLCAnQ29ubmVjdGVkJywgJ0Nvbm5lY3RRdWVyeScsICdTaGFkb3cnLCAnRGlzY29ubmVjdGVkJywgJ0lkbGUnLCAnTGlzdGVuaW5nJywgJ1Jlc2V0JywgJ0Rvd24nLCAnSW5pdCddOwogICAgICAgIHRoaXMuSW5mb0NsYXNzID0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ1dUU0luaXRpYWxQcm9ncmFtJzogMCwKICAgICAgICAgICAgICAgICdXVFNBcHBsaWNhdGlvbk5hbWUnOiAxLAogICAgICAgICAgICAgICAgJ1dUU1dvcmtpbmdEaXJlY3RvcnknOiAyLAogICAgICAgICAgICAgICAgJ1dUU09FTUlkJzogMywKICAgICAgICAgICAgICAgICdXVFNTZXNzaW9uSWQnOiA0LAogICAgICAgICAgICAgICAgJ1dUU1VzZXJOYW1lJzogNSwKICAgICAgICAgICAgICAgICdXVFNXaW5TdGF0aW9uTmFtZSc6IDYsCiAgICAgICAgICAgICAgICAnV1RTRG9tYWluTmFtZSc6IDcsCiAgICAgICAgICAgICAgICAnV1RTQ29ubmVjdFN0YXRlJzogOCwKICAgICAgICAgICAgICAgICdXVFNDbGllbnRCdWlsZE51bWJlcic6IDksCiAgICAgICAgICAgICAgICAnV1RTQ2xpZW50TmFtZSc6IDEwLAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudERpcmVjdG9yeSc6IDExLAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudFByb2R1Y3RJZCc6IDEyLAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudEhhcmR3YXJlSWQnOiAxMywKICAgICAgICAgICAgICAgICdXVFNDbGllbnRBZGRyZXNzJzogMTQsCiAgICAgICAgICAgICAgICAnV1RTQ2xpZW50RGlzcGxheSc6IDE1LAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudFByb3RvY29sVHlwZSc6IDE2LAogICAgICAgICAgICAgICAgJ1dUU0lkbGVUaW1lJzogMTcsCiAgICAgICAgICAgICAgICAnV1RTTG9nb25UaW1lJzogMTgsCiAgICAgICAgICAgICAgICAnV1RTSW5jb21pbmdCeXRlcyc6IDE5LAogICAgICAgICAgICAgICAgJ1dUU091dGdvaW5nQnl0ZXMnOiAyMCwKICAgICAgICAgICAgICAgICdXVFNJbmNvbWluZ0ZyYW1lcyc6IDIxLAogICAgICAgICAgICAgICAgJ1dUU091dGdvaW5nRnJhbWVzJzogMjIsCiAgICAgICAgICAgICAgICAnV1RTQ2xpZW50SW5mbyc6IDIzLAogICAgICAgICAgICAgICAgJ1dUU1Nlc3Npb25JbmZvJzogMjQsCiAgICAgICAgICAgICAgICAnV1RTU2Vzc2lvbkluZm9FeCc6IDI1LAogICAgICAgICAgICAgICAgJ1dUU0NvbmZpZ0luZm8nOiAyNiwKICAgICAgICAgICAgICAgICdXVFNWYWxpZGF0aW9uSW5mbyc6IDI3LAogICAgICAgICAgICAgICAgJ1dUU1Nlc3Npb25BZGRyZXNzVjQnOiAyOCwKICAgICAgICAgICAgICAgICdXVFNJc1JlbW90ZVNlc3Npb24nOiAyOQogICAgICAgICAgICB9OwoKICAgICAgICB0aGlzLmlzUm9vdCA9IGZ1bmN0aW9uIGlzUm9vdCgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgTlRBdXRob3JpdHkgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDYpOwogICAgICAgICAgICBOVEF1dGhvcml0eS50b0J1ZmZlcigpLndyaXRlSW50OCg1LCA1KTsKCiAgICAgICAgICAgIHZhciBBZG1pbmlzdHJhdG9yc0dyb3VwID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVQb2ludGVyKCk7CiAgICAgICAgICAgIHZhciBhZG1pbiA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKHRoaXMuX2FkdmFwaS5BbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQoTlRBdXRob3JpdHksIDIsIDMyLCA1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIEFkbWluaXN0cmF0b3JzR3JvdXApLlZhbCAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgbWVtYmVyID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVJbnRlZ2VyKCk7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWR2YXBpLkNoZWNrVG9rZW5NZW1iZXJzaGlwKDAsIEFkbWluaXN0cmF0b3JzR3JvdXAuRGVyZWYoKSwgbWVtYmVyKS5WYWwgIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAobWVtYmVyLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgIT0gMCkgeyBhZG1pbiA9IHRydWU7IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5GcmVlU2lkKEFkbWluaXN0cmF0b3JzR3JvdXAuRGVyZWYoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFkbWluOwogICAgICAgIH0KICAgICAgICB0aGlzLmdldFByb2Nlc3NPd25lck5hbWUgPSBmdW5jdGlvbiBnZXRQcm9jZXNzT3duZXJOYW1lKHBpZCkKICAgICAgICB7DQogICAgICAgICAgICB2YXIgcmV0ID0gbnVsbDsNCiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgIHZhciBkb21haW4gPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOw0KICAgICAgICAgICAgdmFyIG5hbWVEb21haW5MZW5ndGggPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOyBuYW1lRG9tYWluTGVuZ3RoLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgxMDI0KTsNCiAgICAgICAgICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdmFyIHNpZHR5cGUgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdmFyIHRva2VudXNlciA9IDA7DQogICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVBvaW50ZXIoKTsNCg0KICAgICAgICAgICAgdmFyIGggPSB0aGlzLl9rZXJuZWwzMi5PcGVuUHJvY2VzcyhQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OLCAxLCBwaWQpOw0KICAgICAgICAgICAgaWYgKGguVmFsID09IDApIHsgdGhyb3cgKCdGYWlsZWQgdG8gcXVlcnkgcHJvY2VzcyBpZDogJyArIHBpZCk7IH0NCg0KICAgICAgICAgICAgaWYodGhpcy5fYWR2YXBpLk9wZW5Qcm9jZXNzVG9rZW4oaCwgVE9LRU5fUVVFUlksIHRva2VuKS5WYWw9PTApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ2xvc2VIYW5kbGUoaCk7DQogICAgICAgICAgICAgICAgdGhyb3cgKCdGYWlsZWQgdG8gUXVlcnkgUHJvY2VzcyBUb2tlbiBmb3IgcGlkOiAnICsgcGlkKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHRzaWQgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdGhpcy5fYWR2YXBpLkdldFRva2VuSW5mb3JtYXRpb24odG9rZW4uRGVyZWYoKSwgVG9rZW5TZXNzaW9uSWQsIHRzaWQsIDQsIGJ1ZmZlckxlbmd0aCk7DQogICAgICAgICAgICB0aGlzLl9hZHZhcGkuR2V0VG9rZW5JbmZvcm1hdGlvbih0b2tlbi5EZXJlZigpLCBUb2tlblVzZXIsIHRva2VudXNlciwgMCwgYnVmZmVyTGVuZ3RoKTsNCiAgICAgICAgICAgIHRva2VudXNlciA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlVmFyaWFibGUoYnVmZmVyTGVuZ3RoLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpOw0KDQogICAgICAgICAgICBpZiAodGhpcy5fYWR2YXBpLkdldFRva2VuSW5mb3JtYXRpb24odG9rZW4uRGVyZWYoKSwgVG9rZW5Vc2VyLCB0b2tlbnVzZXIsIGJ1ZmZlckxlbmd0aC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpLCBidWZmZXJMZW5ndGgpLlZhbCA9PSAwKSB7IHRocm93ICgnSW50ZXJuYWwgRXJyb3InKTsgfQ0KICAgICAgICAgICAgaWYodGhpcy5fYWR2YXBpLkxvb2t1cEFjY291bnRTaWRXKDAsIHRva2VudXNlci5EZXJlZigpLCBuYW1lLCBuYW1lRG9tYWluTGVuZ3RoLCBkb21haW4sIG5hbWVEb21haW5MZW5ndGgsIHNpZHR5cGUpLlZhbCA9PSAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRocm93ICgnTG9va3VwIEVycm9yJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgbmFtZS5fc2l6ZSA9IDA7IGRvbWFpbi5fc2l6ZSA9IDA7DQogICAgICAgICAgICAgICAgcmV0ID0geyBuYW1lOiBuYW1lLldpZGUyVVRGOCwgZG9tYWluOiBkb21haW4uV2lkZTJVVEY4LCB0c2lkOiB0c2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ2xvc2VIYW5kbGUodG9rZW4uRGVyZWYoKSk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DbG9zZUhhbmRsZShoKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfTsKCiAgICAgICAgdGhpcy5nZXRSYXdTZXNzaW9uQXR0cmlidXRlID0gZnVuY3Rpb24gZ2V0UmF3U2Vzc2lvbkF0dHJpYnV0ZShzZXNzaW9uSWQsIGF0dHIpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVBvaW50ZXIoKTsKICAgICAgICAgICAgdmFyIGJ5dGVzUmV0dXJuZWQgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOwoKICAgICAgICAgICAgaWYgKHRoaXMuX3d0cy5XVFNRdWVyeVNlc3Npb25JbmZvcm1hdGlvblcoMCwgc2Vzc2lvbklkLCBhdHRyLCBidWZmZXIsIGJ5dGVzUmV0dXJuZWQpLlZhbCA9PSAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRocm93ICgnRXJyb3IgY2FsbGluZyBXVFNRdWVyeVNlc3Npb25JbmZvcm1hdGlvblc6ICcgKyB0aGlzLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IuVmFsKTsNCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBiID0gYnVmZmVyLkRlcmVmKCkuRGVyZWYoMCwgYnl0ZXNSZXR1cm5lZC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpKS50b0J1ZmZlcigpOwogICAgICAgICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jKGJ5dGVzUmV0dXJuZWQudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSk7CiAgICAgICAgICAgIGIuY29weShyZXQpOwogICAgICAgICAgICB0aGlzLl93dHMuV1RTRnJlZU1lbW9yeShidWZmZXIuRGVyZWYoKSk7CiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQogICAgICAgIHRoaXMuZ2V0U2Vzc2lvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uIGdldFNlc3Npb25BdHRyaWJ1dGUoc2Vzc2lvbklkLCBhdHRyKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlUG9pbnRlcigpOwogICAgICAgICAgICB2YXIgYnl0ZXNSZXR1cm5lZCA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlVmFyaWFibGUoNCk7CgogICAgICAgICAgICBpZiAodGhpcy5fd3RzLldUU1F1ZXJ5U2Vzc2lvbkluZm9ybWF0aW9uVygwLCBzZXNzaW9uSWQsIGF0dHIsIGJ1ZmZlciwgYnl0ZXNSZXR1cm5lZCkuVmFsID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRocm93ICgnRXJyb3IgY2FsbGluZyBXVFNRdWVyeVNlc3Npb25JbmZvcm1hdGlvblc6ICcgKyB0aGlzLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IuVmFsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJldFZhbCA9IGJ1ZmZlci5EZXJlZigpLldpZGUyVVRGODsKCiAgICAgICAgICAgIHRoaXMuX3d0cy5XVFNGcmVlTWVtb3J5KGJ1ZmZlci5EZXJlZigpKTsKICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5jb25zb2xlVWlkID0gZnVuY3Rpb24gY29uc29sZVVpZCgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9rZXJuZWwzMi5XVFNHZXRBY3RpdmVDb25zb2xlU2Vzc2lvbklkKCkuVmFsOwogICAgICAgICAgICBpZihpZD09MHhGRkZGRkZGRikge3Rocm93KCdOb2JvZHkgbG9nZ2VkIGluJyk7fQogICAgICAgICAgICByZXR1cm4gKGlkKTsKICAgICAgICB9OwogICAgICAgIHRoaXMuZ2V0VXNlcm5hbWUgPSBmdW5jdGlvbiBnZXRVc2VybmFtZSh1aWQpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKHRoaXMuZ2V0U2Vzc2lvbkF0dHJpYnV0ZSh1aWQsIHRoaXMuSW5mb0NsYXNzLldUU1VzZXJOYW1lKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuQ3VycmVudCA9IGZ1bmN0aW9uIEN1cnJlbnQoY2IpCiAgICAgICAgewogICAgICAgICAgICB2YXIgcmV0VmFsID0ge307CiAgICAgICAgICAgIHZhciBwaW5mbyA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlUG9pbnRlcigpOwogICAgICAgICAgICB2YXIgY291bnQgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOwogICAgICAgICAgICBpZiAodGhpcy5fd3RzLldUU0VudW1lcmF0ZVNlc3Npb25zQSgwLCAwLCAxLCBwaW5mbywgY291bnQpLlZhbCA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyAoJ0Vycm9yIGNhbGxpbmcgV1RTRW51bWVyYXRlU2Vzc2lvbnNBOiAnICsgdGhpcy5fa2VybmVsMzIuR2V0TGFzdEVycm9yKCkuVmFsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpIDsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHBpbmZvLkRlcmVmKCkuRGVyZWYoaSAqICh0aGlzLl9tYXJzaGFsLlBvaW50ZXJTaXplID09IDQgPyAxMiA6IDI0KSwgdGhpcy5fbWFyc2hhbC5Qb2ludGVyU2l6ZSA9PSA0ID8gMTIgOiAyNCk7CiAgICAgICAgICAgICAgICB2YXIgaiA9IHsgU2Vzc2lvbklkOiBpbmZvLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfTsKICAgICAgICAgICAgICAgIGouU3RhdGlvbk5hbWUgPSBpbmZvLkRlcmVmKHRoaXMuX21hcnNoYWwuUG9pbnRlclNpemUgPT0gNCA/IDQgOiA4LCB0aGlzLl9tYXJzaGFsLlBvaW50ZXJTaXplKS5EZXJlZigpLlN0cmlu", 16000); - memcpy_s(_usersessions + 16000, 44848, "ZzsKICAgICAgICAgICAgICAgIGouU3RhdGUgPSB0aGlzLlNlc3Npb25TdGF0ZXNbaW5mby5EZXJlZih0aGlzLl9tYXJzaGFsLlBvaW50ZXJTaXplID09IDQgPyA4IDogMTYsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCldOwogICAgICAgICAgICAgICAgaWYgKGouU3RhdGUgPT0gJ0FjdGl2ZScpIHsKICAgICAgICAgICAgICAgICAgICBqLlVzZXJuYW1lID0gdGhpcy5nZXRTZXNzaW9uQXR0cmlidXRlKGouU2Vzc2lvbklkLCB0aGlzLkluZm9DbGFzcy5XVFNVc2VyTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgai5Eb21haW4gPSB0aGlzLmdldFNlc3Npb25BdHRyaWJ1dGUoai5TZXNzaW9uSWQsIHRoaXMuSW5mb0NsYXNzLldUU0RvbWFpbk5hbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0VmFsW2ouU2Vzc2lvbklkXSA9IGo7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMuX3d0cy5XVFNGcmVlTWVtb3J5KHBpbmZvLkRlcmVmKCkpOwoKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldFZhbCwgJ0FjdGl2ZScsIHsgdmFsdWU6IHNob3dBY3RpdmVPbmx5KHJldFZhbCkgfSk7CiAgICAgICAgICAgIGlmIChjYikgeyBjYihyZXRWYWwpOyB9CiAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsKICAgICAgICB9OwoKICAgICAgICBpZiAoIWdsb2JhbC5fbm9NZXNzYWdlUHVtcCkNCiAgICAgICAgewogICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNwaW4gdXAgYSBtZXNzYWdlIHB1bXAsIGFuZCBmZXRjaCBhIHdpbmRvdyBoYW5kbGUKICAgICAgICAgICAgdmFyIG1lc3NhZ2VfcHVtcCA9IHJlcXVpcmUoJ3dpbi1tZXNzYWdlLXB1bXAnKTsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAgPSBuZXcgbWVzc2FnZV9wdW1wKHsgZmlsdGVyOiBXTV9XVFNTRVNTSU9OX0NIQU5HRSB9KTsgdGhpcy5fbWVzc2FnZXB1bXAucGFyZW50ID0gdGhpczsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5fd3RzLldUU1VuUmVnaXN0ZXJTZXNzaW9uTm90aWZpY2F0aW9uKHRoaXMucGFyZW50Lmh3bmQpOyB9KTsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAub24oJ2h3bmQnLCBmdW5jdGlvbiAoaCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5od25kID0gaDsKCiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHlpZWxkLCBhbmQgZG8gdGhpcyBpbiB0aGUgbmV4dCBldmVudCBsb29wIHBhc3MsIGJlY3Vhc2Ugd2UgZG9uJ3Qgd2FudCB0byBjYWxsICdSZWdpc3RlclBvd2VyU2V0dGluZ05vdGlmaWNhdGlvbicKICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG1lc3NhZ2VwdW1wICd0aHJlYWQnLCBiZWNhdXNlIHdlIGFyZSBhY3R1YWxseSBvbiB0aGUgbWljcm9zdGFjayB0aHJlYWQsIHN1Y2ggdGhhdCB0aGUgbWVzc2FnZSBwdW1wIHRocmVhZCwgaXMgaG9sZGluZwogICAgICAgICAgICAgICAgLy8gb24gYSBzZW1hcGhvcmUgZm9yIHVzIHRvIHJldHVybi4gSWYgd2UgY2FsbCBub3csIHdlIG1heSBkZWFkbG9jayBvbiBXaW5kb3dzIDcsIGJlY3Vhc2UgaXQgd2lsbCB0cnkgdG8gbm90aWZ5IGltbWVkaWF0ZWx5CiAgICAgICAgICAgICAgICB0aGlzLmltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZShmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHdpbmRvdyBoYW5kbGUsIHdlIGNhbiByZWdpc3RlciBpdCB0byByZWNlaXZlIFdpbmRvd3MgTWVzc2FnZXMKICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5wYXJlbnQuX3d0cykgeyBzZWxmLnBhcmVudC5fd3RzLldUU1JlZ2lzdGVyU2Vzc2lvbk5vdGlmaWNhdGlvbihzZWxmLnBhcmVudC5od25kLCBOT1RJRllfRk9SX0FMTF9TRVNTSU9OUyk7IH0KICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5fdXNlcjMyLkFDRENfSCA9IHNlbGYucGFyZW50Ll91c2VyMzIuUmVnaXN0ZXJQb3dlclNldHRpbmdOb3RpZmljYXRpb24oc2VsZi5wYXJlbnQuaHduZCwgR1VJRF9BQ0RDX1BPV0VSX1NPVVJDRSwgMCk7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQuX3VzZXIzMi5CQVRUX0ggPSBzZWxmLnBhcmVudC5fdXNlcjMyLlJlZ2lzdGVyUG93ZXJTZXR0aW5nTm90aWZpY2F0aW9uKHNlbGYucGFyZW50Lmh3bmQsIEdVSURfQkFUVEVSWV9QRVJDRU5UQUdFX1JFTUFJTklORywgMCk7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQuX3VzZXIzMi5ESVNQX0ggPSBzZWxmLnBhcmVudC5fdXNlcjMyLlJlZ2lzdGVyUG93ZXJTZXR0aW5nTm90aWZpY2F0aW9uKHNlbGYucGFyZW50Lmh3bmQsIEdVSURfQ09OU09MRV9ESVNQTEFZX1NUQVRFLCAwKTsKICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHNlbGYucGFyZW50Ll91c2VyMzIuQUNEQ19ILlZhbCwgc2VsZi5wYXJlbnQuX3VzZXIzMi5CQVRUX0guVmFsLCBzZWxmLnBhcmVudC5fdXNlcjMyLkRJU1BfSC5WYWwpOwogICAgICAgICAgICAgICAgfSwgdGhpcyk7DQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAobXNnKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLm1lc3NhZ2UpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIFdNX1dUU1NFU1NJT05fQ0hBTkdFOgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53cGFyYW0pDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXVFNfU0VTU0lPTl9MT0NLOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmVudW1lcmF0ZVVzZXJzKCkudGhlbihmdW5jdGlvbiAodXNlcnMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2Vyc1ttc2cubHBhcmFtXSkgeyB0aGlzLnBhcmVudC5lbWl0KCdsb2NrZWQnLCB1c2Vyc1ttc2cubHBhcmFtXSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdUU19TRVNTSU9OX1VOTE9DSzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5lbnVtZXJhdGVVc2VycygpLnRoZW4oZnVuY3Rpb24gKHVzZXJzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlcnNbbXNnLmxwYXJhbV0pIHsgdGhpcy5wYXJlbnQuZW1pdCgndW5sb2NrZWQnLCB1c2Vyc1ttc2cubHBhcmFtXSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdUU19TRVNTSU9OX0xPR09OOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXVFNfU0VTU0lPTl9MT0dPRkY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdCgnY2hhbmdlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIFdNX1BPV0VSQlJPQURDQVNUOgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53cGFyYW0pDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV01fUE9XRVJCUk9BRENBU1QgW1VOS05PV04gd3BhcmFtXTogJyArIG1zZy53cGFyYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQlRfQVBNU1VTUEVORDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnc3gnLCAnU0xFRVAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEJUX0FQTVJFU1VNRUFVVE9NQVRJQzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnc3gnLCAnUkVTVU1FX05PTl9JTlRFUkFDVElWRScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQlRfQVBNUkVTVU1FU1VTUEVORDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnc3gnLCAnUkVTVU1FX0lOVEVSQUNUSVZFJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBCVF9BUE1QT1dFUlNUQVRVU0NIQU5HRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnY2hhbmdlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQlRfUE9XRVJTRVRUSU5HQ0hBTkdFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBscGFyYW0gPSB0aGlzLnBhcmVudC5fbWFyc2hhbC5DcmVhdGVQb2ludGVyKEJ1ZmZlci5mcm9tKG1zZy5scGFyYW1faGV4LCAnaGV4JykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbHBhcmFtLkRlcmVmKDIwLCBscGFyYW0uRGVyZWYoMTYsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKDApKS50b0J1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobHBhcmFtLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHVUlEX0FDRENfUE9XRVJfU09VUkNFLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5yZWFkVUludDMyTEUoMCkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdhY2RjJywgJ0FDJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncG93ZXItbW9uaXRvcicpLmVtaXQoJ2FjZGMnLCAnQkFUVEVSWScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdhY2RjJywgJ0hPVCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHVUlEX0JBVFRFUllfUEVSQ0VOVEFHRV9SRU1BSU5JTkcuRGVyZWYoMCwgMTYpLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncG93ZXItbW9uaXRvcicpLmVtaXQoJ2JhdHRlcnlMZXZlbCcsIGRhdGEucmVhZFVJbnQzMkxFKDApKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdVSURfQ09OU09MRV9ESVNQTEFZX1NUQVRFLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5yZWFkVUludDMyTEUoMCkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdkaXNwbGF5JywgJ09GRicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdkaXNwbGF5JywgJ09OJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncG93ZXItbW9uaXRvcicpLmVtaXQoJ2Rpc3BsYXknLCAnRElNTUVEJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJykKICAgIHsKICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGRidXMgPSByZXF1aXJlKCdsaW51eC1kYnVzJyk7CiAgICAgICAgICAgIGlmIChyZXF1aXJlKCdmcycpLndhdGNoKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9saW51eFdhdGNoZXIgPSByZXF1aXJlKCdmcycpLndhdGNoKCcvdmFyL3J1bi91dG1wJyk7CiAgICAgICAgICAgICAgICB0aGlzLl9saW51eFdhdGNoZXIudXNlcl9zZXNzaW9uID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuX2xpbnV4V2F0Y2hlci5vbignY2hhbmdlJywgZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJfc2Vzc2lvbi5lbWl0KCdjaGFuZ2VkJyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLkN1cnJlbnQgPSBmdW5jdGlvbiBDdXJyZW50KGNiKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0VmFsID0ge307CiAgICAgICAgICAgICAgICByZXRWYWwuX09iamVjdElEID0gJ1VzZXJTZXNzaW9uJwogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldFZhbCwgJ19jYWxsYmFjaycsIHsgdmFsdWU6IGNiIH0pOwogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldFZhbCwgJ19jaGlsZCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL3Vzci9iaW4vbGFzdCcsIFsnbGFzdCcsICctZicsICcvdmFyL3J1bi91dG1wJ10pIH0pOwoKICAgICAgICAgICAgICAgIHJldFZhbC5fY2hpbGQuUGFyZW50ID0gcmV0VmFsOwogICAgICAgICAgICAgICAgcmV0VmFsLl9jaGlsZC5fdHh0ID0gJyc7CiAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLl90eHQuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlc3Npb25zID0gW107CiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJzID0ge307CgogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gbGluZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gZ2V0VG9rZW5zKGxpbmVzW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0geyBVc2VybmFtZTogdG9rZW5zWzBdLCBTZXNzaW9uSWQ6IHRva2Vuc1sxXSB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzNdLmluY2x1ZGVzKCdzdGlsbCBsb2dnZWQgaW4nKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuU3RhdGUgPSAnQWN0aXZlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuTGFzdEFjdGl2ZSA9IHRva2Vuc1szXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9ucy5wdXNoKHMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNlc3Npb25zLnBvcCgpOwoKCiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJuYW1lcyA9IHt9OwogICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHNlc3Npb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uc1tpXS5Vc2VybmFtZSAhPSAncmVib290JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNbc2Vzc2lvbnNbaV0uU2Vzc2lvbklkXSA9IHNlc3Npb25zW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJuYW1lc1tzZXNzaW9uc1tpXS5Vc2VybmFtZV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lc1tzZXNzaW9uc1tpXS5Vc2VybmFtZV0gPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncHJvbWlzZScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodXNlcnMsICdBY3RpdmUnLCB7IHZhbHVlOiBzaG93QWN0aXZlT25seSh1c2VycykgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlBhcmVudC5fY2FsbGJhY2spIHsgdGhpcy5QYXJlbnQuX2NhbGxiYWNrLmNhbGwodGhpcy5QYXJlbnQsIHVzZXJzKTsgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuIGluIHVzZXJuYW1lcykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX3VzZXJuYW1lID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX19yZXNvbHZlciA9IHJlczsgdGhpcy5fX3JlamVjdG9yID0gcmVqOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2NoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9pZCcsIFsnaWQnLCAnLXUnLCBuXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9fY2hpbGQucHJvbWlzZSA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9fY2hpbGQuc3Rkb3V0Ll90eHQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX19jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5fdHh0ICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2NoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludCh0aGlzLnN0ZG91dC5fdHh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9fcmVqZWN0b3IoJ2ludmFsaWQgdWlkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IHBhcnNlSW50KHRoaXMuc3Rkb3V0Ll90eHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fX3Jlc29sdmVyKGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKHBsaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbmUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcGxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlW3BsaXN0W2ldLl9fdXNlcm5hbWVdID0gcGxpc3RbaV0uX2ludGVybmFsLmNvbXBsZXRlZEFyZ3NbMF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1c2VycykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNbaV0udWlkID0gdGFibGVbdXNlcnNbaV0uVXNlcm5hbWVdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg", 16000); - memcpy_s(_usersessions + 32000, 28848, "ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1c2VycywgJ0FjdGl2ZScsIHsgdmFsdWU6IHNob3dBY3RpdmVPbmx5KHVzZXJzKSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFZhbC5fY2FsbGJhY2spIHsgcmV0VmFsLl9jYWxsYmFjay5jYWxsKHJldFZhbCwgdXNlcnMpOyB9CiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWlsZWQKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVzZXJzLCAnQWN0aXZlJywgeyB2YWx1ZTogc2hvd0FjdGl2ZU9ubHkodXNlcnMpIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0VmFsLl9jYWxsYmFjaykgeyByZXRWYWwuX2NhbGxiYWNrLmNhbGwocmV0VmFsLCB1c2Vycyk7IH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0VmFsLl9jaGlsZC5zdGRvdXQuUGFyZW50ID0gcmV0VmFsLl9jaGlsZDsKICAgICAgICAgICAgICAgIHJldFZhbC5fY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuUGFyZW50Ll90eHQgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX3JlY2hlY2tMb2dnZWRJblVzZXJzID0gZnVuY3Rpb24gX3JlY2hlY2tMb2dnZWRJblVzZXJzKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy5lbnVtZXJhdGVVc2VycygpLnRoZW4oZnVuY3Rpb24gKHUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHUuQWN0aXZlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYWxyZWFkeSBhIHVzZXIgbG9nZ2VkIGluLCBzbyB3ZSBjYW4gbW9uaXRvciBEQlVTIGZvciBsb2NrL3VubG9jawogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQuX2xpbnV4X2xvY2tfd2F0Y2hlciAhPSBudWxsICYmIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIudWlkICE9IHUuQWN0aXZlWzBdLnVpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX2xpbnV4X2xvY2tfd2F0Y2hlciA9IG5ldyBkYnVzKHByb2Nlc3MuZW52WydYREdfQ1VSUkVOVF9ERVNLVE9QJ10gPT0gJ1VuaXR5JyA/ICdjb20udWJ1bnR1LlVwc3RhcnQwXzYnIDogJ29yZy5nbm9tZS5TY3JlZW5TYXZlcicsIHUuQWN0aXZlWzBdLnVpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIudXNlcl9zZXNzaW9uID0gdGhpcy5wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIub24oJ3NpZ25hbCcsIGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHRoaXMudXNlcl9zZXNzaW9uLmVudW1lcmF0ZVVzZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnNpZ25hbERhdGEgPSBzLmRhdGFbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnRoZW4oZnVuY3Rpb24gKHUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2lnbmFsRGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rlc2t0b3AtbG9jayc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5lbWl0KCdsb2NrZWQnLCB1LkFjdGl2ZVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVza3RvcC11bmxvY2snOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdCgndW5sb2NrZWQnLCB1LkFjdGl2ZVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJlbnQuX2xpbnV4X2xvY2tfd2F0Y2hlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuZ2V0VWlkQ29uZmlnID0gZnVuY3Rpb24gZ2V0VWlkQ29uZmlnKCkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IHt9OwogICAgICAgICAgICAgICAgdmFyIGNmZyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvZXRjL2xvZ2luLmRlZnMnKS50b1N0cmluZygpLnNwbGl0KCdcbicpOwogICAgICAgICAgICAgICAgdmFyIHRva2VuczsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gY2ZnKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gY29sdW1uUGFyc2UoY2ZnW2ldLCAnXHQnKTsgLy9jb25zb2xlLmxvZyh0b2tlbnMpOwogICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0gPT0gJ1VJRF9NSU4nKSB7IHJldC5NSU4gPSBwYXJzZUludCh0b2tlbnNbMV0pOyB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXSA9PSAnVUlEX01BWCcpIHsgcmV0Lk1BWCA9IHBhcnNlSW50KHRva2Vuc1sxXSk7IH0KICAgICAgICAgICAgICAgICAgICBpZiAocmV0Lk1JTiAhPSBudWxsICYmIHJldC5NQVggIT0gbnVsbCkgeyBicmVhazsgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9uKCdjaGFuZ2VkJywgdGhpcy5fcmVjaGVja0xvZ2dlZEluVXNlcnMpOyAvLyBGb3IgbGludXggTG9jay9VbmxvY2sgbW9uaXRvcmluZywgd2UgbmVlZCB0byB3YXRjaCBmb3IgTG9nT24vTG9nT2ZmLCBhbmQga2VlcCB0cmFjayBvZiB0aGUgVUlELgoKICAgICAgICAgICAgLy8gRmlyc3Qgc3RlcCwgaXMgdG8gc2VlIGlmIHRoZXJlIGlzIGEgdXNlciBsb2dnZWQgaW46CiAgICAgICAgICAgIHRoaXMuX3JlY2hlY2tMb2dnZWRJblVzZXJzKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMubWluVWlkID0gIGZ1bmN0aW9uIG1pblVpZCgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJjYXQgL2V0Yy9sb2dpbi5kZWZzIHwgZ3JlcCBVSURfIHwgYXdrICd7IGlmKCQxPT1cIlVJRF9NSU5cIikgeyBwcmludCAkMjsgfSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpID49IDAgPyBwYXJzZUludChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkgOiA1MDApOwogICAgICAgIH0KICAgICAgICB0aGlzLl91c2VycyA9IGZ1bmN0aW9uIF91c2VycygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImdldGVudCBwYXNzd2QgfCBhd2sgLUY6ICd7IGlmKCQzPj0wKSB7IHByaW50ZiBcIiVzOiVzXFxuXCIsICQxLCAkMzsgfSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICB2YXIgcmV0ID0ge30sIHRva2VuczsKICAgICAgICAgICAgZm9yICh2YXIgbG4gaW4gbGluZXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VucyA9IGxpbmVzW2xuXS5zcGxpdCgnOicpOwogICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXSkgeyByZXRbdG9rZW5zWzBdXSA9IHRva2Vuc1sxXTsgfSAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLl91aWRzID0gZnVuY3Rpb24gX3VpZHMoKSB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiZ2V0ZW50IHBhc3N3ZCB8IGF3ayAtRjogJ3sgaWYoJDM+PTApIHsgcHJpbnRmIFwiJXM6JXNcXG5cIiwgJDEsICQzOyB9IH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIHZhciByZXQgPSB7fSwgdG9rZW5zOwogICAgICAgICAgICBmb3IgKHZhciBsbiBpbiBsaW5lcykgewogICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZXNbbG5dLnNwbGl0KCc6Jyk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdKSB7IHJldFt0b2tlbnNbMV1dID0gdG9rZW5zWzBdOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmxvZ2luVWlkcyA9IGZ1bmN0aW9uIGxvZ2luVWlkcygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgbWluID0gdGhpcy5taW5VaWQoKTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZ2V0ZW50IHBhc3N3ZCB8IGF3ayAtRjogXCd7IGlmKCQzID49ICcgKyBtaW4gKyAnKSB7IGE9c3BsaXQoJDcsYiwiLyIpOyBpZihiW2FdIT0ibm9sb2dpbiIpIHsgcHJpbnQgJDM7IH0gfX1cJyB8IHRyICJcXG4iICJcXCwiIHwgYXdrIFwneyBwcmludGYgIlslc10iLCAkMDsgfVwnXG5leGl0XG4nKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpLnJlcGxhY2UoJyxdJywnXScpKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuY29uc29sZVVpZCA9IGZ1bmN0aW9uIGNvbnNvbGVVaWQoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnd2hvXG5leGl0XG4nKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIGlmIChjaGlsZC5zdGRlcnIuc3RyICE9ICcnKSB7IHJldHVybiAoMCk7IH0KCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIHZhciB0b2tlbnMsIGksIGo7CiAgICAgICAgICAgIGZvciAoaSBpbiBsaW5lcykgewogICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZXNbaV0uc3BsaXQoJyAnKTsKICAgICAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCB0b2tlbnMubGVuZ3RoOyArK2opIHsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW2pdLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludCh0aGlzLl91c2VycygpW3Rva2Vuc1swXV0pKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgKCdub2JvZHkgbG9nZ2VkIGludG8gY29uc29sZScpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLmdldEhvbWVGb2xkZXIgPSBmdW5jdGlvbiBnZXRIb21lRm9sZGVyKGlkKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJnZXRlbnQgcGFzc3dkICIgKyBpZCArICIgfCBhd2sgLUY6ICd7cHJpbnQgJDZ9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOwogICAgICAgIH0KICAgICAgICB0aGlzLmdldFVpZCA9IGZ1bmN0aW9uIGdldFVpZCh1c2VybmFtZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiZ2V0ZW50IHBhc3N3ZCBcIiIgKyB1c2VybmFtZSArICJcIiB8IGF3ayAtRjogJ3twcmludCAkM30nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIHZhciByZXQgPSBwYXJzZUludChjaGlsZC5zdGRvdXQuc3RyKTsgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJldCA+PSAwKSB7IHJldHVybiAocmV0KTsgfQogICAgICAgICAgICB0aHJvdyAoJ3VzZXJuYW1lOiAnICsgdXNlcm5hbWUgKyAnIE5PVCBGT1VORCcpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5nZXRVc2VybmFtZSA9IGZ1bmN0aW9uIGdldFVzZXJuYW1lKHVpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiZ2V0ZW50IHBhc3N3ZCAiICsgdWlkICsgIiB8IGF3ayAtRjogJ3twcmludCAkMX0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIubGVuZ3RoID4gMCkgeyByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsgfQogICAgICAgICAgICB0aHJvdyAoJ3VpZDogJyArIHVpZCArICcgTk9UIEZPVU5EJyk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLmdldEdyb3VwbmFtZSA9IGZ1bmN0aW9uIGdldEdyb3VwbmFtZShnaWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImdldGVudCBncm91cCAiICsgZ2lkICsgIiB8IGF3ayAtRjogJ3twcmludCAkMX0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIubGVuZ3RoID4gMCkgeyByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsgfQogICAgICAgICAgICB0aHJvdyAoJ2dpZDogJyArIGdpZCArICcgTk9UIEZPVU5EJyk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLndob2FtaSA9IGZ1bmN0aW9uIHdob2FtaSgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndob2FtaVxuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5nZXRFbnZGcm9tUGlkID0gZnVuY3Rpb24gZ2V0RW52RnJvbVBpZChwaWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgcmV0ID0ge307CiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CgogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImNhdCAvcHJvYy8iICsgcGlkICsgIi9lbnZpcm9uIHwgdHIgJ1xcMCcgJ1xcdCcgfCIgKyAnIGF3ayAtRiJcdCIgXCd7IHByaW50ZiAieyI7IGZvcihpPTE7aTxORjsrK2kpIHsgaWYoaT4xKSB7cHJpbnRmICIsIjt9IHg9c3BsaXQoJGksIHRvaywgIj0iKTsgcHJpbnRmICJcXCIlc1xcIjogXFwiJXNcXCIiLCB0b2tbMV0sIHN1YnN0cigkaSwgMitsZW5ndGgodG9rWzFdKSk7IH0gcHJpbnRmICJ9IjsgfVwnJyk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkpOw0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoKGVlKQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHt9KTsNCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicHJvY3N0YXQgLWUgIiArIHBpZCArICIgfCBncmVwICIgKyBwaWQgKyAiIHwgYXdrICd7ICQxPVwiXCI7ICQyPVwiXCI7IHByaW50ICQwIH0nIHwgdHIgXCJcXCBcIiBcIlxcblwiXG5leGl0XG4iKTsgCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoJCQogICAgICAgICAgICAgICAgdmFyIGVudjsKICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKS5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgICAgIGZvcih2YXIgaSBpbiB0b2tlbnMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZW52ID0gdG9rZW5zW2ldLnNwbGl0KCc9Jyk7CiAgICAgICAgICAgICAgICAgICAgcmV0W2VudlswXV0gPSBlbnZbMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5maW5kRW52ID0gZnVuY3Rpb24gZmluZEVudih1aWQsIGVudikKICAgICAgICB7CiAgICAgICAgICAgIHZhciB1bmFtZSA9IHRoaXMuZ2V0VXNlcm5hbWUodWlkKTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAiICsgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnID8gIi1heCAiOiIiKSArICItZSAtbyBwaWQgLW8gdXNlciB8IGdyZXAgIiArIHVuYW1lICsgIiB8IGF3ayAneyBwcmludCAkMSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICBmb3IgKHZhciBuIGluIGxpbmVzKQogICAgICAgICAgICB7CiAg", 16000); - memcpy_s(_usersessions + 48000, 12848, "ICAgICAgICAgICAgICB2YXIgbG4gPSBsaW5lc1tuXS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAobG4ubGVuZ3RoID4gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuZ2V0RW52RnJvbVBpZChsbik7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbZW52XSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZVtlbnZdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChudWxsKTsKICAgICAgICB9OwogICAgfQogICAgZWxzZSBpZihwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQogICAgewogICAgICAgIHRoaXMuZ2V0VWlkID0gZnVuY3Rpb24gZ2V0VWlkKHVzZXJuYW1lKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJpZCAiICsgdXNlcm5hbWUgKyAiIHwgYXdrICd7IHNwbGl0KCQxLCB0b2tlbiwgXCI9XCIpOyBzcGxpdCh0b2tlblsyXSwgdWlkLCBcIihcIik7IHByaW50IHVpZFsxXTsgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLmdldEdyb3VwSUQgPSBmdW5jdGlvbiBnZXRHcm91cElEKHVpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiaWQgIiArIHVpZCArICIgfCBhd2sgJ3sgc3BsaXQoJDIsIGdpZCwgXCI9XCIpOyBpZihnaWRbMV09PVwiZ2lkXCIpIHsgc3BsaXQoZ2lkWzJdLCBnaWRudW0sIFwiKFwiKTsgcHJpbnQgZ2lkbnVtWzFdOyAgfSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5nZXRVc2VybmFtZSA9IGZ1bmN0aW9uIGdldFVzZXJuYW1lKHVpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImRzY2wgLiBsaXN0IC9Vc2VycyBVbmlxdWVJRCB8IGdyZXAgIiArIHVpZCArICIgfCBhd2sgJ3sgaWYoJDI9PSIgKyB1aWQgKyAiKXsgcHJpbnQgJDEgfX0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgaWYoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgIT0gJycpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgKCd1aWQ6ICcgKyB1aWQgKyAnIG5vdCBmb3VuZCcpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLmdldEdyb3VwbmFtZSA9IGZ1bmN0aW9uIGdldEdyb3VwbmFtZShnaWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJkc2NsIC4gbGlzdCAvR3JvdXBzIFByaW1hcnlHcm91cElEIHwgZ3JlcCAiICsgZ2lkICsgIiB8IGF3ayAneyBpZigkMj09IiArIGdpZCArICIpeyBwcmludCAkMSB9fSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICBpZihjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAnJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyAoJ2dpZDogJyArIGdpZCArICcgbm90IGZvdW5kJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHRoaXMuY29uc29sZVVpZCA9IGZ1bmN0aW9uIGNvbnNvbGVVaWQoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aG8gfCB0ciAnXG4nICdcLicgfCBhd2sgJ3sgcHJpbnQgJDEgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgdmFyIHJldCA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwogICAgICAgICAgICBpZiAocmV0ICE9ICcnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuZ2V0VWlkKHJldCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93ICgnbm9ib2R5IGxvZ2dlZCBpbnRvIGNvbnNvbGUnKTsgICAgIAogICAgICAgIH0KICAgICAgICB0aGlzLmdldEhvbWVGb2xkZXIgPSBmdW5jdGlvbiBnZXRIb21lRm9sZGVyKHVzZXIpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImRzY2wgLiAtcmVhZCAvVXNlcnMvIiArIHVzZXIgKyAiIHwgZ3JlcCBORlNIb21lRGlyZWN0b3J5IHwgYXdrIC1GOiAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIGlmIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAnJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyAoJ3VzZXI6ICcgKyB1c2VyICsgJyBub3QgZm91bmQnKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5fdXNlcnMgPSBmdW5jdGlvbiAoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9kc2NsJywgWydkc2NsJywgJy4nLCAnbGlzdCcsICcvVXNlcnMnLCAnVW5pcXVlSUQnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2V4aXRcbicpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIHZhciB0b2tlbnMsIGk7CiAgICAgICAgICAgIHZhciB1c2VycyA9IHt9OwoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICB0b2tlbnMgPSBsaW5lc1tpXS5zcGxpdCgnICcpOwogICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXSkgeyB1c2Vyc1t0b2tlbnNbMF1dID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTsgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gKHVzZXJzKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fdWlkcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9kc2NsJywgWydkc2NsJywgJy4nLCAnbGlzdCcsICcvVXNlcnMnLCAnVW5pcXVlSUQnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZXhpdFxuJyk7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICB2YXIgdG9rZW5zLCBpOwogICAgICAgICAgICB2YXIgdXNlcnMgPSB7fTsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZXNbaV0uc3BsaXQoJyAnKTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0pIHsgdXNlcnNbdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXV0gPSB0b2tlbnNbMF07IH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICh1c2Vycyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2lkVGFibGUgPSBmdW5jdGlvbigpCiAgICAgICAgewogICAgICAgICAgICB2YXIgdGFibGUgPSB7fTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9pZCcsIFsnaWQnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgdmFyIGxpbmVzID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXG4nKVswXS5zcGxpdCgnICcpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZXMgPSBsaW5lc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHR5cGVzWzFdLnNwbGl0KCcsJyk7CiAgICAgICAgICAgICAgICB0YWJsZVt0eXBlc1swXV0gPSB7fTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBqIGluIHRva2VucykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZGFyciA9IHRva2Vuc1tqXS5zcGxpdCgnKCcpOwogICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGlkYXJyWzBdOwogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaWRhcnJbMV0uc3Vic3RyaW5nKDAsIGlkYXJyWzFdLmxlbmd0aCAtIDEpLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZVt0eXBlc1swXV1bbmFtZV0gPSBpZDsKICAgICAgICAgICAgICAgICAgICB0YWJsZVt0eXBlc1swXV1baWRdID0gbmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gKHRhYmxlKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5DdXJyZW50ID0gZnVuY3Rpb24gKGNiKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHVzZXJzID0ge307CiAgICAgICAgICAgIHZhciB0YWJsZSA9IHRoaXMuX2lkVGFibGUoKTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9sYXN0JywgWydsYXN0J10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoICYmIGxpbmVzW2ldLmxlbmd0aCA+IDA7ICsraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCF1c2Vyc1tsaW5lc1tpXS5zcGxpdCgnICcpWzBdXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzW2xpbmVzW2ldLnNwbGl0KCcgJylbMF1dID0geyBVc2VybmFtZTogbGluZXNbaV0uc3BsaXQoJyAnKVswXSwgU3RhdGU6IGxpbmVzW2ldLnNwbGl0KCdzdGlsbCBsb2dnZWQgaW4nKS5sZW5ndGggPiAxID8gJ0FjdGl2ZScgOiAnSW5hY3RpdmUnLCB1aWQ6IHRhYmxlLnVpZFtsaW5lc1tpXS5zcGxpdCgnICcpWzBdXSB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaChlKQogICAgICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYodXNlcnNbbGluZXNbaV0uc3BsaXQoJyAnKVswXV0uU3RhdGUgIT0gJ0FjdGl2ZScgJiYgbGluZXNbaV0uc3BsaXQoJ3N0aWxsIGxvZ2dlZCBpbicpLmxlbmd0aCA+IDEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB1c2Vyc1tsaW5lc1tpXS5zcGxpdCgnICcpWzBdXS5TdGF0ZSA9ICdBY3RpdmUnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVzZXJzLCAnQWN0aXZlJywgeyB2YWx1ZTogc2hvd0FjdGl2ZU9ubHkodXNlcnMpIH0pOwogICAgICAgICAgICBpZiAoY2IpIHsgY2IuY2FsbCh0aGlzLCB1c2Vycyk7IH0KICAgICAgICB9CiAgICB9CgogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKSAvLyBMaW51eCwgTWFjT1MsIEZyZWVCU0QKICAgIHsKICAgICAgICB0aGlzLlNlbGYgPSBmdW5jdGlvbiBTZWxmKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL3Vzci9iaW4vaWQnLCBbJ2lkJywgJy11J10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChjaGlsZC5zdGRvdXQuc3RyKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNSb290ID0gZnVuY3Rpb24gaXNSb290KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAodGhpcy5TZWxmKCkgPT0gMCk7CiAgICAgICAgfQogICAgfQoKCn0KZnVuY3Rpb24gc2hvd0FjdGl2ZU9ubHkoc291cmNlKQp7CiAgICB2YXIgcmV0VmFsID0gW107CiAgICB2YXIgdW5pcXVlID0ge307CiAgICB2YXIgdXNlcm5hbWVzID0gW107CiAgICB2YXIgdG1wOwoKICAgIGZvciAodmFyIGkgaW4gc291cmNlKQogICAgewogICAgICAgIGlmIChzb3VyY2VbaV0uU3RhdGUgPT0gJ0FjdGl2ZScpCiAgICAgICAgewogICAgICAgICAgICByZXRWYWwucHVzaChzb3VyY2VbaV0pOwogICAgICAgICAgICB0bXAgPSAoc291cmNlW2ldLkRvbWFpbiA/IChzb3VyY2VbaV0uRG9tYWluICsgJ1xcJykgOiAnJykgKyBzb3VyY2VbaV0uVXNlcm5hbWU7CiAgICAgICAgICAgIGlmICghdW5pcXVlW3RtcF0pIHsgdW5pcXVlW3RtcF0gPSB0bXA7fQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKHZhciBpIGluIHVuaXF1ZSkKICAgIHsKICAgICAgICB1c2VybmFtZXMucHVzaChpKTsKICAgIH0KCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0VmFsLCAndXNlcm5hbWVzJywgeyB2YWx1ZTogdXNlcm5hbWVzIH0pOwogICAgcmV0dXJuIChyZXRWYWwpOwp9CmZ1bmN0aW9uIGdldFRva2VucyhzdHIpCnsKICAgIHZhciBjb2x1bW5zID0gW107CiAgICB2YXIgaTsKCiAgICBjb2x1bW5zLnB1c2goc3RyLnN1YnN0cmluZygwLCAoaT1zdHIuaW5kZXhPZignICcpKSkpOwogICAgd2hpbGUgKHN0clsrK2ldID09ICcgJyk7CiAgICBjb2x1bW5zLnB1c2goc3RyLnN1YnN0cmluZyhpLCAoaT1zdHIuc3Vic3RyaW5nKGkpLmluZGV4T2YoJyAnKSArIGkpKSk7CiAgICB3aGlsZSAoc3RyWysraV0gPT0gJyAnKTsKICAgIGNvbHVtbnMucHVzaChzdHIuc3Vic3RyaW5nKGksIChpPXN0ci5zdWJzdHJpbmcoaSkuaW5kZXhPZignICcpICsgaSkpKTsKICAgIHdoaWxlIChzdHJbKytpXSA9PSAnICcpOwogICAgdmFyIHN0YXR1cyA9IHN0ci5zdWJzdHJpbmcoaSkudHJpbSgpOwogICAgY29sdW1ucy5wdXNoKHN0YXR1cyk7CgogICAgcmV0dXJuIChjb2x1bW5zKTsKfQoKbW9kdWxlLmV4cG9ydHMgPSBuZXcgVXNlclNlc3Npb25zKCk7Cv==", 12848); - ILibBase64DecodeEx((unsigned char*)_usersessions, 60848, (unsigned char*)_usersessions + 60848); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "user-sessions"); duk_push_string(ctx, _usersessions + 60848); + char *_usersessions = ILibMemory_Allocate(108913, 0, NULL, NULL); + memcpy_s(_usersessions + 0, 62236, "LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBOT1RJRllfRk9SX1RISVNfU0VTU0lPTiA9IDA7CnZhciBOT1RJRllfRk9SX0FMTF9TRVNTSU9OUyA9IDE7CnZhciBXTV9XVFNTRVNTSU9OX0NIQU5HRSA9IDB4MDJCMTsKdmFyIFdNX1BPV0VSQlJPQURDQVNUID0gMHgyMTg7CnZhciBQQlRfUE9XRVJTRVRUSU5HQ0hBTkdFID0gMHg4MDEzOwp2YXIgUEJUX0FQTVNVU1BFTkQgPSAweDQ7CnZhciBQQlRfQVBNUkVTVU1FU1VTUEVORCA9IDB4NzsKdmFyIFBCVF9BUE1SRVNVTUVBVVRPTUFUSUMgPSAweDEyOwp2YXIgUEJUX0FQTVBPV0VSU1RBVFVTQ0hBTkdFID0gMHhBOwp2YXIgUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiA9IDB4MDQwMDsNCnZhciBUT0tFTl9RVUVSWSA9IDB4MDAwODsNCnZhciBUb2tlblVzZXIgPSAxOwp2YXIgVG9rZW5UeXBlID0gODsKdmFyIFRva2VuU2Vzc2lvbklkID0gMTI7CnZhciBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSID0gMTIyOw0KdmFyIEhFQVBfWkVST19NRU1PUlkgPSAweDAwMDAwMDA4Ow0KCnZhciBXVFNfQ09OU09MRV9DT05ORUNUICAgICAgICAgPSAoMHgxKTsKdmFyIFdUU19DT05TT0xFX0RJU0NPTk5FQ1QgICAgICA9ICgweDIpOwp2YXIgV1RTX1JFTU9URV9DT05ORUNUICAgICAgICAgID0gKDB4Myk7CnZhciBXVFNfUkVNT1RFX0RJU0NPTk5FQ1QgICAgICAgPSAoMHg0KTsKdmFyIFdUU19TRVNTSU9OX0xPR09OICAgICAgICAgICA9ICgweDUpOwp2YXIgV1RTX1NFU1NJT05fTE9HT0ZGICAgICAgICAgID0gKDB4Nik7CnZhciBXVFNfU0VTU0lPTl9MT0NLICAgICAgICAgICAgPSAoMHg3KTsKdmFyIFdUU19TRVNTSU9OX1VOTE9DSyAgICAgICAgICA9ICgweDgpOwp2YXIgV1RTX1NFU1NJT05fUkVNT1RFX0NPTlRST0wgID0gKDB4OSk7CnZhciBXVFNfU0VTU0lPTl9DUkVBVEUgICAgICAgICAgPSAoMHhBKTsKdmFyIFdUU19TRVNTSU9OX1RFUk1JTkFURSAgICAgICA9ICgweEIpOwoKdmFyIEdVSURfQUNEQ19QT1dFUl9TT1VSQ0U7CnZhciBHVUlEX0JBVFRFUllfUEVSQ0VOVEFHRV9SRU1BSU5JTkc7CnZhciBHVUlEX0NPTlNPTEVfRElTUExBWV9TVEFURTsKCmZ1bmN0aW9uIGNvbHVtblBhcnNlKGRhdGEsIGRlbGltaXRlcikKewogICAgdmFyIHRva2VucyA9IGRhdGEuc3BsaXQoZGVsaW1pdGVyKTsKICAgIHZhciByZXQgPSBbXTsKICAgIGZvcih2YXIgaSBpbiB0b2tlbnMpCiAgICB7CiAgICAgICAgaWYgKHRva2Vuc1tpXS5sZW5ndGggPiAwKSB7IHJldC5wdXNoKHRva2Vuc1tpXSk7IH0KICAgIH0KICAgIHJldHVybiAocmV0KTsKfQoKCmZ1bmN0aW9uIFVzZXJTZXNzaW9ucygpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ3VzZXItc2Vzc2lvbnMnOwogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwodGhpcywgdHJ1ZSkKICAgICAgICAuY3JlYXRlRXZlbnQoJ2NoYW5nZWQnKQogICAgICAgIC5jcmVhdGVFdmVudCgnbG9ja2VkJykKICAgICAgICAuY3JlYXRlRXZlbnQoJ3VubG9ja2VkJyk7CgogICAgdGhpcy5lbnVtZXJhdGVVc2VycyA9IGZ1bmN0aW9uIGVudW1lcmF0ZVVzZXJzKCkKICAgIHsKICAgICAgICB2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKICAgICAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMuX19yZXNvbHZlciA9IHJlczsKICAgICAgICAgICAgdGhpcy5fX3JlamVjdG9yID0gcmVqOwogICAgICAgIH0pOwogICAgICAgIHAuX19oYW5kbGVyID0gZnVuY3Rpb24gX19oYW5kbGVyKHVzZXJzKQogICAgICAgIHsKICAgICAgICAgICAgcC5fX3Jlc29sdmVyKHVzZXJzKTsKICAgICAgICB9OwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5DdXJyZW50KHAuX19oYW5kbGVyKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goZSkKICAgICAgICB7CiAgICAgICAgICAgIHAuX19yZWplY3RvcihlKTsKICAgICAgICB9CiAgICAgICAgcC5wYXJlbnQgPSB0aGlzOwogICAgICAgIHJldHVybiAocCk7CiAgICB9CgogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykKICAgIHsKICAgICAgICB0aGlzLl9zZXJ2aWNlSG9va2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5fbWFyc2hhbCA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwogICAgICAgIHRoaXMuX2tlcm5lbDMyID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVOYXRpdmVQcm94eSgnS2VybmVsMzIuZGxsJyk7CiAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHZXRMYXN0RXJyb3InKTsKICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1dUU0dldEFjdGl2ZUNvbnNvbGVTZXNzaW9uSWQnKQogICAgICAgIHRoaXMuX2tlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnQ2xvc2VIYW5kbGUnKTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB0aGlzLl93dHMgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZU5hdGl2ZVByb3h5KCdXdHNhcGkzMi5kbGwnKTsKICAgICAgICAgICAgdGhpcy5fd3RzLkNyZWF0ZU1ldGhvZCgnV1RTRW51bWVyYXRlU2Vzc2lvbnNBJyk7CiAgICAgICAgICAgIHRoaXMuX3d0cy5DcmVhdGVNZXRob2QoJ1dUU1F1ZXJ5U2Vzc2lvbkluZm9ybWF0aW9uVycpOwogICAgICAgICAgICB0aGlzLl93dHMuQ3JlYXRlTWV0aG9kKCdXVFNSZWdpc3RlclNlc3Npb25Ob3RpZmljYXRpb24nKTsKICAgICAgICAgICAgdGhpcy5fd3RzLkNyZWF0ZU1ldGhvZCgnV1RTVW5SZWdpc3RlclNlc3Npb25Ob3RpZmljYXRpb24nKTsKICAgICAgICAgICAgdGhpcy5fd3RzLkNyZWF0ZU1ldGhvZCgnV1RTRnJlZU1lbW9yeScpOwogICAgICAgIH0KICAgICAgICBjYXRjaChleGMpCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgdGhpcy5fYWR2YXBpID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVOYXRpdmVQcm94eSgnQWR2YXBpMzIuZGxsJyk7CiAgICAgICAgdGhpcy5fYWR2YXBpLkNyZWF0ZU1ldGhvZCgnQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkJyk7CiAgICAgICAgdGhpcy5fYWR2YXBpLkNyZWF0ZU1ldGhvZCgnQ2hlY2tUb2tlbk1lbWJlcnNoaXAnKTsKICAgICAgICB0aGlzLl9hZHZhcGkuQ3JlYXRlTWV0aG9kKCdGcmVlU2lkJyk7CgogICAgICAgIHRoaXMuX3VzZXIzMiA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsKICAgICAgICB0aGlzLl91c2VyMzIuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnUmVnaXN0ZXJQb3dlclNldHRpbmdOb3RpZmljYXRpb24nLCB0aHJlYWREaXNwYXRjaDogMX0pOwogICAgICAgIHRoaXMuX3VzZXIzMi5DcmVhdGVNZXRob2QoJ1VucmVnaXN0ZXJQb3dlclNldHRpbmdOb3RpZmljYXRpb24nKTsKICAgICAgICB0aGlzLl9ycGNydCA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlTmF0aXZlUHJveHkoJ1JwY3J0NC5kbGwnKTsKICAgICAgICB0aGlzLl9ycGNydC5DcmVhdGVNZXRob2QoJ1V1aWRGcm9tU3RyaW5nQScpOwogICAgICAgIHRoaXMuX3JwY3J0LlN0cmluZ1RvVVVJRCA9IGZ1bmN0aW9uIFN0cmluZ1RvVVVJRChndWlkKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHJldFZhbCA9IFN0cmluZ1RvVVVJRC51cy5fbWFyc2hhbC5DcmVhdGVWYXJpYWJsZSgxNik7CiAgICAgICAgICAgIGlmKFN0cmluZ1RvVVVJRC51cy5fcnBjcnQuVXVpZEZyb21TdHJpbmdBKFN0cmluZ1RvVVVJRC51cy5fbWFyc2hhbC5DcmVhdGVWYXJpYWJsZShndWlkKSwgcmV0VmFsKS5WYWwgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgKCdDb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gVVVJRCcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX3JwY3J0LlN0cmluZ1RvVVVJRC51cyA9IHRoaXM7CgogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdPcGVuUHJvY2VzcycpCiAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5DcmVhdGVNZXRob2QoJ09wZW5Qcm9jZXNzVG9rZW4nKTsNCiAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5DcmVhdGVNZXRob2QoJ0dldFRva2VuSW5mb3JtYXRpb24nKTsNCiAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5DcmVhdGVNZXRob2QoJ0xvb2t1cEFjY291bnRTaWRXJyk7DQogICAgICAgICAgICB0aGlzLl9hZHZhcGkuQ3JlYXRlTWV0aG9kKCdPcGVuVGhyZWFkVG9rZW4nKTsNCiAgICAgICAgfQogICAgICAgIGNhdGNoKGUpCiAgICAgICAgew0KICAgICAgICB9CgoKICAgICAgICBHVUlEX0FDRENfUE9XRVJfU09VUkNFID0gdGhpcy5fcnBjcnQuU3RyaW5nVG9VVUlEKCc1ZDNlOWE1OS1lOUQ1LTRiMDAtYTZiZC1mZjM0ZmY1MTY1NDgnKTsKICAgICAgICBHVUlEX0JBVFRFUllfUEVSQ0VOVEFHRV9SRU1BSU5JTkcgPSB0aGlzLl9ycGNydC5TdHJpbmdUb1VVSUQoJ2E3YWQ4MDQxLWI0NWEtNGNhZS04N2EzLWVlY2JiNDY4YTllMScpOwogICAgICAgIEdVSURfQ09OU09MRV9ESVNQTEFZX1NUQVRFID0gdGhpcy5fcnBjcnQuU3RyaW5nVG9VVUlEKCc2ZmU2OTU1Ni03MDRhLTQ3YTAtOGYyNC1jMjhkOTM2ZmRhNDcnKTsKCiAgICAgICAgdGhpcy5TZXNzaW9uU3RhdGVzID0gWydBY3RpdmUnLCAnQ29ubmVjdGVkJywgJ0Nvbm5lY3RRdWVyeScsICdTaGFkb3cnLCAnRGlzY29ubmVjdGVkJywgJ0lkbGUnLCAnTGlzdGVuaW5nJywgJ1Jlc2V0JywgJ0Rvd24nLCAnSW5pdCddOwogICAgICAgIHRoaXMuSW5mb0NsYXNzID0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ1dUU0luaXRpYWxQcm9ncmFtJzogMCwKICAgICAgICAgICAgICAgICdXVFNBcHBsaWNhdGlvbk5hbWUnOiAxLAogICAgICAgICAgICAgICAgJ1dUU1dvcmtpbmdEaXJlY3RvcnknOiAyLAogICAgICAgICAgICAgICAgJ1dUU09FTUlkJzogMywKICAgICAgICAgICAgICAgICdXVFNTZXNzaW9uSWQnOiA0LAogICAgICAgICAgICAgICAgJ1dUU1VzZXJOYW1lJzogNSwKICAgICAgICAgICAgICAgICdXVFNXaW5TdGF0aW9uTmFtZSc6IDYsCiAgICAgICAgICAgICAgICAnV1RTRG9tYWluTmFtZSc6IDcsCiAgICAgICAgICAgICAgICAnV1RTQ29ubmVjdFN0YXRlJzogOCwKICAgICAgICAgICAgICAgICdXVFNDbGllbnRCdWlsZE51bWJlcic6IDksCiAgICAgICAgICAgICAgICAnV1RTQ2xpZW50TmFtZSc6IDEwLAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudERpcmVjdG9yeSc6IDExLAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudFByb2R1Y3RJZCc6IDEyLAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudEhhcmR3YXJlSWQnOiAxMywKICAgICAgICAgICAgICAgICdXVFNDbGllbnRBZGRyZXNzJzogMTQsCiAgICAgICAgICAgICAgICAnV1RTQ2xpZW50RGlzcGxheSc6IDE1LAogICAgICAgICAgICAgICAgJ1dUU0NsaWVudFByb3RvY29sVHlwZSc6IDE2LAogICAgICAgICAgICAgICAgJ1dUU0lkbGVUaW1lJzogMTcsCiAgICAgICAgICAgICAgICAnV1RTTG9nb25UaW1lJzogMTgsCiAgICAgICAgICAgICAgICAnV1RTSW5jb21pbmdCeXRlcyc6IDE5LAogICAgICAgICAgICAgICAgJ1dUU091dGdvaW5nQnl0ZXMnOiAyMCwKICAgICAgICAgICAgICAgICdXVFNJbmNvbWluZ0ZyYW1lcyc6IDIxLAogICAgICAgICAgICAgICAgJ1dUU091dGdvaW5nRnJhbWVzJzogMjIsCiAgICAgICAgICAgICAgICAnV1RTQ2xpZW50SW5mbyc6IDIzLAogICAgICAgICAgICAgICAgJ1dUU1Nlc3Npb25JbmZvJzogMjQsCiAgICAgICAgICAgICAgICAnV1RTU2Vzc2lvbkluZm9FeCc6IDI1LAogICAgICAgICAgICAgICAgJ1dUU0NvbmZpZ0luZm8nOiAyNiwKICAgICAgICAgICAgICAgICdXVFNWYWxpZGF0aW9uSW5mbyc6IDI3LAogICAgICAgICAgICAgICAgJ1dUU1Nlc3Npb25BZGRyZXNzVjQnOiAyOCwKICAgICAgICAgICAgICAgICdXVFNJc1JlbW90ZVNlc3Npb24nOiAyOQogICAgICAgICAgICB9OwoKICAgICAgICB0aGlzLmlzUm9vdCA9IGZ1bmN0aW9uIGlzUm9vdCgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgTlRBdXRob3JpdHkgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDYpOwogICAgICAgICAgICBOVEF1dGhvcml0eS50b0J1ZmZlcigpLndyaXRlSW50OCg1LCA1KTsKCiAgICAgICAgICAgIHZhciBBZG1pbmlzdHJhdG9yc0dyb3VwID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVQb2ludGVyKCk7CiAgICAgICAgICAgIHZhciBhZG1pbiA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKHRoaXMuX2FkdmFwaS5BbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQoTlRBdXRob3JpdHksIDIsIDMyLCA1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIEFkbWluaXN0cmF0b3JzR3JvdXApLlZhbCAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgbWVtYmVyID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVJbnRlZ2VyKCk7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWR2YXBpLkNoZWNrVG9rZW5NZW1iZXJzaGlwKDAsIEFkbWluaXN0cmF0b3JzR3JvdXAuRGVyZWYoKSwgbWVtYmVyKS5WYWwgIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAobWVtYmVyLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgIT0gMCkgeyBhZG1pbiA9IHRydWU7IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFwaS5GcmVlU2lkKEFkbWluaXN0cmF0b3JzR3JvdXAuRGVyZWYoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFkbWluOwogICAgICAgIH0KICAgICAgICB0aGlzLmdldFByb2Nlc3NPd25lck5hbWUgPSBmdW5jdGlvbiBnZXRQcm9jZXNzT3duZXJOYW1lKHBpZCkKICAgICAgICB7DQogICAgICAgICAgICB2YXIgcmV0ID0gbnVsbDsNCiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5fbWFyc2hhbC5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgIHZhciBkb21haW4gPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOw0KICAgICAgICAgICAgdmFyIG5hbWVEb21haW5MZW5ndGggPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOyBuYW1lRG9tYWluTGVuZ3RoLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgxMDI0KTsNCiAgICAgICAgICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdmFyIHNpZHR5cGUgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdmFyIHRva2VudXNlciA9IDA7DQogICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVBvaW50ZXIoKTsNCg0KICAgICAgICAgICAgdmFyIGggPSB0aGlzLl9rZXJuZWwzMi5PcGVuUHJvY2VzcyhQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OLCAxLCBwaWQpOw0KICAgICAgICAgICAgaWYgKGguVmFsID09IDApIHsgdGhyb3cgKCdGYWlsZWQgdG8gcXVlcnkgcHJvY2VzcyBpZDogJyArIHBpZCk7IH0NCg0KICAgICAgICAgICAgaWYodGhpcy5fYWR2YXBpLk9wZW5Qcm9jZXNzVG9rZW4oaCwgVE9LRU5fUVVFUlksIHRva2VuKS5WYWw9PTApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ2xvc2VIYW5kbGUoaCk7DQogICAgICAgICAgICAgICAgdGhyb3cgKCdGYWlsZWQgdG8gUXVlcnkgUHJvY2VzcyBUb2tlbiBmb3IgcGlkOiAnICsgcGlkKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHRzaWQgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOw0KICAgICAgICAgICAgdGhpcy5fYWR2YXBpLkdldFRva2VuSW5mb3JtYXRpb24odG9rZW4uRGVyZWYoKSwgVG9rZW5TZXNzaW9uSWQsIHRzaWQsIDQsIGJ1ZmZlckxlbmd0aCk7DQogICAgICAgICAgICB0aGlzLl9hZHZhcGkuR2V0VG9rZW5JbmZvcm1hdGlvbih0b2tlbi5EZXJlZigpLCBUb2tlblVzZXIsIHRva2VudXNlciwgMCwgYnVmZmVyTGVuZ3RoKTsNCiAgICAgICAgICAgIHRva2VudXNlciA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlVmFyaWFibGUoYnVmZmVyTGVuZ3RoLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpOw0KDQogICAgICAgICAgICBpZiAodGhpcy5fYWR2YXBpLkdldFRva2VuSW5mb3JtYXRpb24odG9rZW4uRGVyZWYoKSwgVG9rZW5Vc2VyLCB0b2tlbnVzZXIsIGJ1ZmZlckxlbmd0aC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpLCBidWZmZXJMZW5ndGgpLlZhbCA9PSAwKSB7IHRocm93ICgnSW50ZXJuYWwgRXJyb3InKTsgfQ0KICAgICAgICAgICAgaWYodGhpcy5fYWR2YXBpLkxvb2t1cEFjY291bnRTaWRXKDAsIHRva2VudXNlci5EZXJlZigpLCBuYW1lLCBuYW1lRG9tYWluTGVuZ3RoLCBkb21haW4sIG5hbWVEb21haW5MZW5ndGgsIHNpZHR5cGUpLlZhbCA9PSAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRocm93ICgnTG9va3VwIEVycm9yJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgbmFtZS5fc2l6ZSA9IDA7IGRvbWFpbi5fc2l6ZSA9IDA7DQogICAgICAgICAgICAgICAgcmV0ID0geyBuYW1lOiBuYW1lLldpZGUyVVRGOCwgZG9tYWluOiBkb21haW4uV2lkZTJVVEY4LCB0c2lkOiB0c2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy5fa2VybmVsMzIuQ2xvc2VIYW5kbGUodG9rZW4uRGVyZWYoKSk7DQogICAgICAgICAgICB0aGlzLl9rZXJuZWwzMi5DbG9zZUhhbmRsZShoKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfTsKCiAgICAgICAgdGhpcy5nZXRSYXdTZXNzaW9uQXR0cmlidXRlID0gZnVuY3Rpb24gZ2V0UmF3U2Vzc2lvbkF0dHJpYnV0ZShzZXNzaW9uSWQsIGF0dHIpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVBvaW50ZXIoKTsKICAgICAgICAgICAgdmFyIGJ5dGVzUmV0dXJuZWQgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOwoKICAgICAgICAgICAgaWYgKHRoaXMuX3d0cy5XVFNRdWVyeVNlc3Npb25JbmZvcm1hdGlvblcoMCwgc2Vzc2lvbklkLCBhdHRyLCBidWZmZXIsIGJ5dGVzUmV0dXJuZWQpLlZhbCA9PSAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRocm93ICgnRXJyb3IgY2FsbGluZyBXVFNRdWVyeVNlc3Npb25JbmZvcm1hdGlvblc6ICcgKyB0aGlzLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IuVmFsKTsNCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBiID0gYnVmZmVyLkRlcmVmKCkuRGVyZWYoMCwgYnl0ZXNSZXR1cm5lZC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpKS50b0J1ZmZlcigpOwogICAgICAgICAgICB2YXIgcmV0ID0gQnVmZmVyLmFsbG9jKGJ5dGVzUmV0dXJuZWQudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSk7CiAgICAgICAgICAgIGIuY29weShyZXQpOwogICAgICAgICAgICB0aGlzLl93dHMuV1RTRnJlZU1lbW9yeShidWZmZXIuRGVyZWYoKSk7CiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQogICAgICAgIHRoaXMuZ2V0U2Vzc2lvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uIGdldFNlc3Npb25BdHRyaWJ1dGUoc2Vzc2lvbklkLCBhdHRyKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlUG9pbnRlcigpOwogICAgICAgICAgICB2YXIgYnl0ZXNSZXR1cm5lZCA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlVmFyaWFibGUoNCk7CgogICAgICAgICAgICBpZiAodGhpcy5fd3RzLldUU1F1ZXJ5U2Vzc2lvbkluZm9ybWF0aW9uVygwLCBzZXNzaW9uSWQsIGF0dHIsIGJ1ZmZlciwgYnl0ZXNSZXR1cm5lZCkuVmFsID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRocm93ICgnRXJyb3IgY2FsbGluZyBXVFNRdWVyeVNlc3Npb25JbmZvcm1hdGlvblc6ICcgKyB0aGlzLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IuVmFsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJldFZhbCA9IGJ1ZmZlci5EZXJlZigpLldpZGUyVVRGODsKCiAgICAgICAgICAgIHRoaXMuX3d0cy5XVFNGcmVlTWVtb3J5KGJ1ZmZlci5EZXJlZigpKTsKICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5jb25zb2xlVWlkID0gZnVuY3Rpb24gY29uc29sZVVpZCgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9rZXJuZWwzMi5XVFNHZXRBY3RpdmVDb25zb2xlU2Vzc2lvbklkKCkuVmFsOwogICAgICAgICAgICBpZihpZD09MHhGRkZGRkZGRikge3Rocm93KCdOb2JvZHkgbG9nZ2VkIGluJyk7fQogICAgICAgICAgICByZXR1cm4gKGlkKTsKICAgICAgICB9OwogICAgICAgIHRoaXMuZ2V0VXNlcm5hbWUgPSBmdW5jdGlvbiBnZXRVc2VybmFtZSh1aWQpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKHRoaXMuZ2V0U2Vzc2lvbkF0dHJpYnV0ZSh1aWQsIHRoaXMuSW5mb0NsYXNzLldUU1VzZXJOYW1lKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuQ3VycmVudCA9IGZ1bmN0aW9uIEN1cnJlbnQoY2IpCiAgICAgICAgewogICAgICAgICAgICB2YXIgcmV0VmFsID0ge307CiAgICAgICAgICAgIHZhciBwaW5mbyA9IHRoaXMuX21hcnNoYWwuQ3JlYXRlUG9pbnRlcigpOwogICAgICAgICAgICB2YXIgY291bnQgPSB0aGlzLl9tYXJzaGFsLkNyZWF0ZVZhcmlhYmxlKDQpOwogICAgICAgICAgICBpZiAodGhpcy5fd3RzLldUU0VudW1lcmF0ZVNlc3Npb25zQSgwLCAwLCAxLCBwaW5mbywgY291bnQpLlZhbCA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyAoJ0Vycm9yIGNhbGxpbmcgV1RTRW51bWVyYXRlU2Vzc2lvbnNBOiAnICsgdGhpcy5fa2VybmVsMzIuR2V0TGFzdEVycm9yKCkuVmFsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudC50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpIDsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHBpbmZvLkRlcmVmKCkuRGVyZWYoaSAqICh0aGlzLl9tYXJzaGFsLlBvaW50ZXJTaXplID09IDQgPyAxMiA6IDI0KSwgdGhpcy5fbWFyc2hhbC5Qb2ludGVyU2l6ZSA9PSA0ID8gMTIgOiAyNCk7CiAgICAgICAgICAgICAgICB2YXIgaiA9IHsgU2Vzc2lvbklkOiBpbmZvLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfTsKICAgICAgICAgICAgICAgIGouU3RhdGlvbk5hbWUgPSBpbmZvLkRlcmVmKHRoaXMuX21hcnNoYWwuUG9pbnRlclNpemUgPT0gNCA/IDQgOiA4LCB0aGlzLl9tYXJzaGFsLlBvaW50ZXJTaXplKS5EZXJlZigpLlN0cmlu", 16000); + memcpy_s(_usersessions + 16000, 46236, "ZzsKICAgICAgICAgICAgICAgIGouU3RhdGUgPSB0aGlzLlNlc3Npb25TdGF0ZXNbaW5mby5EZXJlZih0aGlzLl9tYXJzaGFsLlBvaW50ZXJTaXplID09IDQgPyA4IDogMTYsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCldOwogICAgICAgICAgICAgICAgaWYgKGouU3RhdGUgPT0gJ0FjdGl2ZScpIHsKICAgICAgICAgICAgICAgICAgICBqLlVzZXJuYW1lID0gdGhpcy5nZXRTZXNzaW9uQXR0cmlidXRlKGouU2Vzc2lvbklkLCB0aGlzLkluZm9DbGFzcy5XVFNVc2VyTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgai5Eb21haW4gPSB0aGlzLmdldFNlc3Npb25BdHRyaWJ1dGUoai5TZXNzaW9uSWQsIHRoaXMuSW5mb0NsYXNzLldUU0RvbWFpbk5hbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0VmFsW2ouU2Vzc2lvbklkXSA9IGo7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMuX3d0cy5XVFNGcmVlTWVtb3J5KHBpbmZvLkRlcmVmKCkpOwoKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldFZhbCwgJ0FjdGl2ZScsIHsgdmFsdWU6IHNob3dBY3RpdmVPbmx5KHJldFZhbCkgfSk7CiAgICAgICAgICAgIGlmIChjYikgeyBjYihyZXRWYWwpOyB9CiAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsKICAgICAgICB9OwoKICAgICAgICBpZiAoIWdsb2JhbC5fbm9NZXNzYWdlUHVtcCkNCiAgICAgICAgewogICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNwaW4gdXAgYSBtZXNzYWdlIHB1bXAsIGFuZCBmZXRjaCBhIHdpbmRvdyBoYW5kbGUKICAgICAgICAgICAgdmFyIG1lc3NhZ2VfcHVtcCA9IHJlcXVpcmUoJ3dpbi1tZXNzYWdlLXB1bXAnKTsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAgPSBuZXcgbWVzc2FnZV9wdW1wKHsgZmlsdGVyOiBXTV9XVFNTRVNTSU9OX0NIQU5HRSB9KTsgdGhpcy5fbWVzc2FnZXB1bXAucGFyZW50ID0gdGhpczsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5fd3RzLldUU1VuUmVnaXN0ZXJTZXNzaW9uTm90aWZpY2F0aW9uKHRoaXMucGFyZW50Lmh3bmQpOyB9KTsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAub24oJ2h3bmQnLCBmdW5jdGlvbiAoaCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5od25kID0gaDsKCiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHlpZWxkLCBhbmQgZG8gdGhpcyBpbiB0aGUgbmV4dCBldmVudCBsb29wIHBhc3MsIGJlY3Vhc2Ugd2UgZG9uJ3Qgd2FudCB0byBjYWxsICdSZWdpc3RlclBvd2VyU2V0dGluZ05vdGlmaWNhdGlvbicKICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG1lc3NhZ2VwdW1wICd0aHJlYWQnLCBiZWNhdXNlIHdlIGFyZSBhY3R1YWxseSBvbiB0aGUgbWljcm9zdGFjayB0aHJlYWQsIHN1Y2ggdGhhdCB0aGUgbWVzc2FnZSBwdW1wIHRocmVhZCwgaXMgaG9sZGluZwogICAgICAgICAgICAgICAgLy8gb24gYSBzZW1hcGhvcmUgZm9yIHVzIHRvIHJldHVybi4gSWYgd2UgY2FsbCBub3csIHdlIG1heSBkZWFkbG9jayBvbiBXaW5kb3dzIDcsIGJlY3Vhc2UgaXQgd2lsbCB0cnkgdG8gbm90aWZ5IGltbWVkaWF0ZWx5CiAgICAgICAgICAgICAgICB0aGlzLmltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZShmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIHdpbmRvdyBoYW5kbGUsIHdlIGNhbiByZWdpc3RlciBpdCB0byByZWNlaXZlIFdpbmRvd3MgTWVzc2FnZXMKICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5wYXJlbnQuX3d0cykgeyBzZWxmLnBhcmVudC5fd3RzLldUU1JlZ2lzdGVyU2Vzc2lvbk5vdGlmaWNhdGlvbihzZWxmLnBhcmVudC5od25kLCBOT1RJRllfRk9SX0FMTF9TRVNTSU9OUyk7IH0KICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5fdXNlcjMyLkFDRENfSCA9IHNlbGYucGFyZW50Ll91c2VyMzIuUmVnaXN0ZXJQb3dlclNldHRpbmdOb3RpZmljYXRpb24oc2VsZi5wYXJlbnQuaHduZCwgR1VJRF9BQ0RDX1BPV0VSX1NPVVJDRSwgMCk7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQuX3VzZXIzMi5CQVRUX0ggPSBzZWxmLnBhcmVudC5fdXNlcjMyLlJlZ2lzdGVyUG93ZXJTZXR0aW5nTm90aWZpY2F0aW9uKHNlbGYucGFyZW50Lmh3bmQsIEdVSURfQkFUVEVSWV9QRVJDRU5UQUdFX1JFTUFJTklORywgMCk7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQuX3VzZXIzMi5ESVNQX0ggPSBzZWxmLnBhcmVudC5fdXNlcjMyLlJlZ2lzdGVyUG93ZXJTZXR0aW5nTm90aWZpY2F0aW9uKHNlbGYucGFyZW50Lmh3bmQsIEdVSURfQ09OU09MRV9ESVNQTEFZX1NUQVRFLCAwKTsKICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHNlbGYucGFyZW50Ll91c2VyMzIuQUNEQ19ILlZhbCwgc2VsZi5wYXJlbnQuX3VzZXIzMi5CQVRUX0guVmFsLCBzZWxmLnBhcmVudC5fdXNlcjMyLkRJU1BfSC5WYWwpOwogICAgICAgICAgICAgICAgfSwgdGhpcyk7DQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5fbWVzc2FnZXB1bXAub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiAobXNnKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLm1lc3NhZ2UpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIFdNX1dUU1NFU1NJT05fQ0hBTkdFOgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53cGFyYW0pDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXVFNfU0VTU0lPTl9MT0NLOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmVudW1lcmF0ZVVzZXJzKCkudGhlbihmdW5jdGlvbiAodXNlcnMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2Vyc1ttc2cubHBhcmFtXSkgeyB0aGlzLnBhcmVudC5lbWl0KCdsb2NrZWQnLCB1c2Vyc1ttc2cubHBhcmFtXSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdUU19TRVNTSU9OX1VOTE9DSzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5lbnVtZXJhdGVVc2VycygpLnRoZW4oZnVuY3Rpb24gKHVzZXJzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlcnNbbXNnLmxwYXJhbV0pIHsgdGhpcy5wYXJlbnQuZW1pdCgndW5sb2NrZWQnLCB1c2Vyc1ttc2cubHBhcmFtXSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdUU19TRVNTSU9OX0xPR09OOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXVFNfU0VTU0lPTl9MT0dPRkY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdCgnY2hhbmdlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIFdNX1BPV0VSQlJPQURDQVNUOgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy53cGFyYW0pDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV01fUE9XRVJCUk9BRENBU1QgW1VOS05PV04gd3BhcmFtXTogJyArIG1zZy53cGFyYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQlRfQVBNU1VTUEVORDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnc3gnLCAnU0xFRVAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUEJUX0FQTVJFU1VNRUFVVE9NQVRJQzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnc3gnLCAnUkVTVU1FX05PTl9JTlRFUkFDVElWRScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQlRfQVBNUkVTVU1FU1VTUEVORDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnc3gnLCAnUkVTVU1FX0lOVEVSQUNUSVZFJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBCVF9BUE1QT1dFUlNUQVRVU0NIQU5HRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdwb3dlci1tb25pdG9yJykuZW1pdCgnY2hhbmdlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQQlRfUE9XRVJTRVRUSU5HQ0hBTkdFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBscGFyYW0gPSB0aGlzLnBhcmVudC5fbWFyc2hhbC5DcmVhdGVQb2ludGVyKEJ1ZmZlci5mcm9tKG1zZy5scGFyYW1faGV4LCAnaGV4JykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbHBhcmFtLkRlcmVmKDIwLCBscGFyYW0uRGVyZWYoMTYsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKDApKS50b0J1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobHBhcmFtLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHVUlEX0FDRENfUE9XRVJfU09VUkNFLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5yZWFkVUludDMyTEUoMCkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdhY2RjJywgJ0FDJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncG93ZXItbW9uaXRvcicpLmVtaXQoJ2FjZGMnLCAnQkFUVEVSWScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdhY2RjJywgJ0hPVCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHVUlEX0JBVFRFUllfUEVSQ0VOVEFHRV9SRU1BSU5JTkcuRGVyZWYoMCwgMTYpLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncG93ZXItbW9uaXRvcicpLmVtaXQoJ2JhdHRlcnlMZXZlbCcsIGRhdGEucmVhZFVJbnQzMkxFKDApKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdVSURfQ09OU09MRV9ESVNQTEFZX1NUQVRFLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5yZWFkVUludDMyTEUoMCkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdkaXNwbGF5JywgJ09GRicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ3Bvd2VyLW1vbml0b3InKS5lbWl0KCdkaXNwbGF5JywgJ09OJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncG93ZXItbW9uaXRvcicpLmVtaXQoJ2Rpc3BsYXknLCAnRElNTUVEJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJykKICAgIHsKICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGRidXMgPSByZXF1aXJlKCdsaW51eC1kYnVzJyk7CiAgICAgICAgICAgIGlmIChyZXF1aXJlKCdmcycpLndhdGNoKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9saW51eFdhdGNoZXIgPSByZXF1aXJlKCdmcycpLndhdGNoKCcvdmFyL3J1bi91dG1wJyk7CiAgICAgICAgICAgICAgICB0aGlzLl9saW51eFdhdGNoZXIudXNlcl9zZXNzaW9uID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuX2xpbnV4V2F0Y2hlci5vbignY2hhbmdlJywgZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJfc2Vzc2lvbi5lbWl0KCdjaGFuZ2VkJyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLkN1cnJlbnQgPSBmdW5jdGlvbiBDdXJyZW50KGNiKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0VmFsID0ge307CiAgICAgICAgICAgICAgICByZXRWYWwuX09iamVjdElEID0gJ1VzZXJTZXNzaW9uJwogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldFZhbCwgJ19jYWxsYmFjaycsIHsgdmFsdWU6IGNiIH0pOwogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldFZhbCwgJ19jaGlsZCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL3Vzci9iaW4vbGFzdCcsIFsnbGFzdCcsICctZicsICcvdmFyL3J1bi91dG1wJ10pIH0pOwoKICAgICAgICAgICAgICAgIHJldFZhbC5fY2hpbGQuUGFyZW50ID0gcmV0VmFsOwogICAgICAgICAgICAgICAgcmV0VmFsLl9jaGlsZC5fdHh0ID0gJyc7CiAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSB0aGlzLl90eHQuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlc3Npb25zID0gW107CiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJzID0ge307CgogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gbGluZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gZ2V0VG9rZW5zKGxpbmVzW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0geyBVc2VybmFtZTogdG9rZW5zWzBdLCBTZXNzaW9uSWQ6IHRva2Vuc1sxXSB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzNdLmluY2x1ZGVzKCdzdGlsbCBsb2dnZWQgaW4nKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuU3RhdGUgPSAnQWN0aXZlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuTGFzdEFjdGl2ZSA9IHRva2Vuc1szXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9ucy5wdXNoKHMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNlc3Npb25zLnBvcCgpOwoKCiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJuYW1lcyA9IHt9OwogICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHNlc3Npb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uc1tpXS5Vc2VybmFtZSAhPSAncmVib290JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNbc2Vzc2lvbnNbaV0uU2Vzc2lvbklkXSA9IHNlc3Npb25zW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJuYW1lc1tzZXNzaW9uc1tpXS5Vc2VybmFtZV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lc1tzZXNzaW9uc1tpXS5Vc2VybmFtZV0gPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgncHJvbWlzZScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodXNlcnMsICdBY3RpdmUnLCB7IHZhbHVlOiBzaG93QWN0aXZlT25seSh1c2VycykgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlBhcmVudC5fY2FsbGJhY2spIHsgdGhpcy5QYXJlbnQuX2NhbGxiYWNrLmNhbGwodGhpcy5QYXJlbnQsIHVzZXJzKTsgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuIGluIHVzZXJuYW1lcykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX3VzZXJuYW1lID0gbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX19yZXNvbHZlciA9IHJlczsgdGhpcy5fX3JlamVjdG9yID0gcmVqOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2NoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9pZCcsIFsnaWQnLCAnLXUnLCBuXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9fY2hpbGQucHJvbWlzZSA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9fY2hpbGQuc3Rkb3V0Ll90eHQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX19jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5fdHh0ICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2NoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludCh0aGlzLnN0ZG91dC5fdHh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9fcmVqZWN0b3IoJ2ludmFsaWQgdWlkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IHBhcnNlSW50KHRoaXMuc3Rkb3V0Ll90eHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fX3Jlc29sdmVyKGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKHBsaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbmUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcGxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlW3BsaXN0W2ldLl9fdXNlcm5hbWVdID0gcGxpc3RbaV0uX2ludGVybmFsLmNvbXBsZXRlZEFyZ3NbMF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1c2VycykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNbaV0udWlkID0gdGFibGVbdXNlcnNbaV0uVXNlcm5hbWVdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg", 16000); + memcpy_s(_usersessions + 32000, 30236, "ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1c2VycywgJ0FjdGl2ZScsIHsgdmFsdWU6IHNob3dBY3RpdmVPbmx5KHVzZXJzKSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFZhbC5fY2FsbGJhY2spIHsgcmV0VmFsLl9jYWxsYmFjay5jYWxsKHJldFZhbCwgdXNlcnMpOyB9CiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWlsZWQKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVzZXJzLCAnQWN0aXZlJywgeyB2YWx1ZTogc2hvd0FjdGl2ZU9ubHkodXNlcnMpIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0VmFsLl9jYWxsYmFjaykgeyByZXRWYWwuX2NhbGxiYWNrLmNhbGwocmV0VmFsLCB1c2Vycyk7IH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0VmFsLl9jaGlsZC5zdGRvdXQuUGFyZW50ID0gcmV0VmFsLl9jaGlsZDsKICAgICAgICAgICAgICAgIHJldFZhbC5fY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuUGFyZW50Ll90eHQgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX3JlY2hlY2tMb2dnZWRJblVzZXJzID0gZnVuY3Rpb24gX3JlY2hlY2tMb2dnZWRJblVzZXJzKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy5lbnVtZXJhdGVVc2VycygpLnRoZW4oZnVuY3Rpb24gKHUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHUuQWN0aXZlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYWxyZWFkeSBhIHVzZXIgbG9nZ2VkIGluLCBzbyB3ZSBjYW4gbW9uaXRvciBEQlVTIGZvciBsb2NrL3VubG9jawogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQuX2xpbnV4X2xvY2tfd2F0Y2hlciAhPSBudWxsICYmIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIudWlkICE9IHUuQWN0aXZlWzBdLnVpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX2xpbnV4X2xvY2tfd2F0Y2hlciA9IG5ldyBkYnVzKHByb2Nlc3MuZW52WydYREdfQ1VSUkVOVF9ERVNLVE9QJ10gPT0gJ1VuaXR5JyA/ICdjb20udWJ1bnR1LlVwc3RhcnQwXzYnIDogJ29yZy5nbm9tZS5TY3JlZW5TYXZlcicsIHUuQWN0aXZlWzBdLnVpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIudXNlcl9zZXNzaW9uID0gdGhpcy5wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIub24oJ3NpZ25hbCcsIGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHRoaXMudXNlcl9zZXNzaW9uLmVudW1lcmF0ZVVzZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnNpZ25hbERhdGEgPSBzLmRhdGFbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnRoZW4oZnVuY3Rpb24gKHUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2lnbmFsRGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rlc2t0b3AtbG9jayc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5lbWl0KCdsb2NrZWQnLCB1LkFjdGl2ZVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVza3RvcC11bmxvY2snOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdCgndW5sb2NrZWQnLCB1LkFjdGl2ZVswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGFyZW50Ll9saW51eF9sb2NrX3dhdGNoZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wYXJlbnQuX2xpbnV4X2xvY2tfd2F0Y2hlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuZ2V0VWlkQ29uZmlnID0gZnVuY3Rpb24gZ2V0VWlkQ29uZmlnKCkgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IHt9OwogICAgICAgICAgICAgICAgdmFyIGNmZyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvZXRjL2xvZ2luLmRlZnMnKS50b1N0cmluZygpLnNwbGl0KCdcbicpOwogICAgICAgICAgICAgICAgdmFyIHRva2VuczsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gY2ZnKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gY29sdW1uUGFyc2UoY2ZnW2ldLCAnXHQnKTsgLy9jb25zb2xlLmxvZyh0b2tlbnMpOwogICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0gPT0gJ1VJRF9NSU4nKSB7IHJldC5NSU4gPSBwYXJzZUludCh0b2tlbnNbMV0pOyB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXSA9PSAnVUlEX01BWCcpIHsgcmV0Lk1BWCA9IHBhcnNlSW50KHRva2Vuc1sxXSk7IH0KICAgICAgICAgICAgICAgICAgICBpZiAocmV0Lk1JTiAhPSBudWxsICYmIHJldC5NQVggIT0gbnVsbCkgeyBicmVhazsgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9uKCdjaGFuZ2VkJywgdGhpcy5fcmVjaGVja0xvZ2dlZEluVXNlcnMpOyAvLyBGb3IgbGludXggTG9jay9VbmxvY2sgbW9uaXRvcmluZywgd2UgbmVlZCB0byB3YXRjaCBmb3IgTG9nT24vTG9nT2ZmLCBhbmQga2VlcCB0cmFjayBvZiB0aGUgVUlELgoKICAgICAgICAgICAgLy8gRmlyc3Qgc3RlcCwgaXMgdG8gc2VlIGlmIHRoZXJlIGlzIGEgdXNlciBsb2dnZWQgaW46CiAgICAgICAgICAgIHRoaXMuX3JlY2hlY2tMb2dnZWRJblVzZXJzKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7DQogICAgICAgICAgICB0aGlzLkN1cnJlbnQgPSBmdW5jdGlvbiBDdXJyZW50KGNiKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndobyB8IHRyICdcXG4nICdgJyB8IGF3ayAtRidgJyAnIiArICd7IHByaW50ZiAieyI7IGZvcihhPTE7YTxORjsrK2EpIHsgbj1zcGxpdCgkYSwgdG9rLCAiICIpOyBwcmludGYgIiVzXFwiJXNcXCI6IFxcIiVzXFwiIiwgKGE+MT8iLCI6IiIpLCB0b2tbMl0sIHRva1sxXTsgIH0gcHJpbnRmICJ9IjsgIH1cJ1xuZXhpdFxuJyk7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIHZhciByZXQgPSBKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IHsgVXNlcm5hbWU6IHJldFtrZXldLCBTZXNzaW9uSWQ6IGtleSwgU3RhdGU6ICdBY3RpdmUnLCB1aWQ6IHRoaXMuZ2V0VWlkKHJldFtrZXldKSB9Ow0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjYikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNiLmNhbGwodGhpcywgcmV0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMubWluVWlkID0gIGZ1bmN0aW9uIG1pblVpZCgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJjYXQgL2V0Yy9sb2dpbi5kZWZzIHwgZ3JlcCBVSURfIHwgYXdrICd7IGlmKCQxPT1cIlVJRF9NSU5cIikgeyBwcmludCAkMjsgfSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpID49IDAgPyBwYXJzZUludChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkgOiA1MDApOwogICAgICAgIH0KICAgICAgICB0aGlzLl91c2VycyA9IGZ1bmN0aW9uIF91c2VycygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImdldGVudCBwYXNzd2QgfCBhd2sgLUY6ICd7IGlmKCQzPj0wKSB7IHByaW50ZiBcIiVzOiVzXFxuXCIsICQxLCAkMzsgfSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICB2YXIgcmV0ID0ge30sIHRva2VuczsKICAgICAgICAgICAgZm9yICh2YXIgbG4gaW4gbGluZXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VucyA9IGxpbmVzW2xuXS5zcGxpdCgnOicpOwogICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXSkgeyByZXRbdG9rZW5zWzBdXSA9IHRva2Vuc1sxXTsgfSAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLl91aWRzID0gZnVuY3Rpb24gX3VpZHMoKSB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiZ2V0ZW50IHBhc3N3ZCB8IGF3ayAtRjogJ3sgaWYoJDM+PTApIHsgcHJpbnRmIFwiJXM6JXNcXG5cIiwgJDEsICQzOyB9IH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIHZhciByZXQgPSB7fSwgdG9rZW5zOwogICAgICAgICAgICBmb3IgKHZhciBsbiBpbiBsaW5lcykgewogICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZXNbbG5dLnNwbGl0KCc6Jyk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdKSB7IHJldFt0b2tlbnNbMV1dID0gdG9rZW5zWzBdOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmxvZ2luVWlkcyA9IGZ1bmN0aW9uIGxvZ2luVWlkcygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgbWluID0gdGhpcy5taW5VaWQoKTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZ2V0ZW50IHBhc3N3ZCB8IGF3ayAtRjogXCd7IGlmKCQzID49ICcgKyBtaW4gKyAnKSB7IGE9c3BsaXQoJDcsYiwiLyIpOyBpZihiW2FdIT0ibm9sb2dpbiIpIHsgcHJpbnQgJDM7IH0gfX1cJyB8IHRyICJcXG4iICJcXCwiIHwgYXdrIFwneyBwcmludGYgIlslc10iLCAkMDsgfVwnXG5leGl0XG4nKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgcmV0dXJuIChKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpLnJlcGxhY2UoJyxdJywnXScpKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuY29uc29sZVVpZCA9IGZ1bmN0aW9uIGNvbnNvbGVVaWQoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnd2hvXG5leGl0XG4nKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIGlmIChjaGlsZC5zdGRlcnIuc3RyICE9ICcnKSB7IHJldHVybiAoMCk7IH0KCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIHZhciB0b2tlbnMsIGksIGo7CiAgICAgICAgICAgIGZvciAoaSBpbiBsaW5lcykgewogICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZXNbaV0uc3BsaXQoJyAnKTsKICAgICAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCB0b2tlbnMubGVuZ3RoOyArK2opIHsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zW2pdLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludCh0aGlzLl91c2VycygpW3Rva2Vuc1swXV0pKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgKCdub2JvZHkgbG9nZ2VkIGludG8gY29uc29sZScpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLmdldEhvbWVGb2xkZXIgPSBmdW5jdGlvbiBnZXRIb21lRm9sZGVyKGlkKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJnZXRlbnQgcGFzc3dkICIgKyBpZCArICIgfCBhd2sgLUY6ICd7cHJpbnQgJDZ9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOwogICAgICAgIH0KICAgICAgICB0aGlzLmdldFVpZCA9IGZ1bmN0aW9uIGdldFVpZCh1c2VybmFtZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiZ2V0ZW50IHBhc3N3ZCBcIiIgKyB1c2VybmFtZSArICJcIiB8IGF3ayAtRjogJ3twcmludCAkM30nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIHZhciByZXQgPSBwYXJzZUludChjaGlsZC5zdGRvdXQuc3RyKTsgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJldCA+PSAwKSB7IHJldHVybiAocmV0KTsgfQogICAgICAgICAgICB0aHJvdyAoJ3VzZXJuYW1lOiAnICsgdXNlcm5hbWUgKyAnIE5PVCBGT1VORCcpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5nZXRVc2VybmFtZSA9IGZ1bmN0aW9uIGdldFVzZXJuYW1lKHVpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiZ2V0ZW50IHBhc3N3ZCAiICsgdWlkICsgIiB8IGF3ayAtRjogJ3twcmludCAkMX0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIubGVuZ3RoID4gMCkgeyByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsgfQogICAgICAgICAgICB0aHJvdyAoJ3VpZDogJyArIHVpZCArICcgTk9UIEZPVU5EJyk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLmdldEdyb3VwbmFtZSA9IGZ1bmN0aW9uIGdldEdyb3VwbmFtZShnaWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImdldGVudCBncm91cCAiICsgZ2lkICsgIiB8IGF3ayAtRjogJ3twcmludCAkMX0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIubGVuZ3RoID4gMCkgeyByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsgfQogICAgICAgICAgICB0aHJvdyAoJ2dpZDogJyArIGdpZCArICcgTk9UIEZPVU5EJyk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLndob2FtaSA9IGZ1bmN0aW9uIHdob2FtaSgpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndob2FtaVxuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5nZXRFbnZGcm9tUGlkID0gZnVuY3Rpb24gZ2V0RW52RnJvbVBpZChwaWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgcmV0ID0ge307CiAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CgogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImNhdCAvcHJvYy8iICsgcGlkICsgIi9lbnZpcm9uIHwgdHIgJ1xcMCcgJ1xcdCcgfCIgKyAnIGF3ayAtRiJcdCIgXCd7IHByaW50ZiAieyI7IGZvcihpPTE7aTxORjsrK2kpIHsgaWYoaT4xKSB7cHJpbnRmICIsIjt9IHg9c3BsaXQoJGksIHRvaywgIj0iKTsgcHJpbnRmICJcXCIlc1xcIjogXFwiJXNcXCIiLCB0b2tbMV0sIHN1YnN0cigkaSwgMitsZW5ndGgodG9rWzFdKSk7IH0gcHJpbnRmICJ9IjsgfVwnJyk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ1xuZXhpdFxuJyk7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkpOw0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoKGVlKQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHt9KTsNCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicHJvY3N0YXQgLWUgIiAr", 16000); + memcpy_s(_usersessions + 48000, 14236, "IHBpZCArICIgfCBncmVwICIgKyBwaWQgKyAiIHwgYXdrICd7ICQxPVwiXCI7ICQyPVwiXCI7IHByaW50ICQwIH0nIHwgdHIgXCJcXCBcIiBcIlxcblwiXG5leGl0XG4iKTsgCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoJCQogICAgICAgICAgICAgICAgdmFyIGVudjsKICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKS5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgICAgIGZvcih2YXIgaSBpbiB0b2tlbnMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZW52ID0gdG9rZW5zW2ldLnNwbGl0KCc9Jyk7CiAgICAgICAgICAgICAgICAgICAgcmV0W2VudlswXV0gPSBlbnZbMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5maW5kRW52ID0gZnVuY3Rpb24gZmluZEVudih1aWQsIGVudikKICAgICAgICB7CiAgICAgICAgICAgIHZhciB1bmFtZSA9IHRoaXMuZ2V0VXNlcm5hbWUodWlkKTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAiICsgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnID8gIi1heCAiOiIiKSArICItZSAtbyBwaWQgLW8gdXNlciB8IGdyZXAgIiArIHVuYW1lICsgIiB8IGF3ayAneyBwcmludCAkMSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICBmb3IgKHZhciBuIGluIGxpbmVzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgbG4gPSBsaW5lc1tuXS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAobG4ubGVuZ3RoID4gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuZ2V0RW52RnJvbVBpZChsbik7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVbZW52XSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZVtlbnZdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChudWxsKTsKICAgICAgICB9OwogICAgfQogICAgZWxzZSBpZihwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQogICAgewogICAgICAgIHRoaXMuZ2V0VWlkID0gZnVuY3Rpb24gZ2V0VWlkKHVzZXJuYW1lKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJpZCAiICsgdXNlcm5hbWUgKyAiIHwgYXdrICd7IHNwbGl0KCQxLCB0b2tlbiwgXCI9XCIpOyBzcGxpdCh0b2tlblsyXSwgdWlkLCBcIihcIik7IHByaW50IHVpZFsxXTsgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKSk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLmdldEdyb3VwSUQgPSBmdW5jdGlvbiBnZXRHcm91cElEKHVpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiaWQgIiArIHVpZCArICIgfCBhd2sgJ3sgc3BsaXQoJDIsIGdpZCwgXCI9XCIpOyBpZihnaWRbMV09PVwiZ2lkXCIpIHsgc3BsaXQoZ2lkWzJdLCBnaWRudW0sIFwiKFwiKTsgcHJpbnQgZ2lkbnVtWzFdOyAgfSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5nZXRVc2VybmFtZSA9IGZ1bmN0aW9uIGdldFVzZXJuYW1lKHVpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImRzY2wgLiBsaXN0IC9Vc2VycyBVbmlxdWVJRCB8IGdyZXAgIiArIHVpZCArICIgfCBhd2sgJ3sgaWYoJDI9PSIgKyB1aWQgKyAiKXsgcHJpbnQgJDEgfX0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgaWYoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgIT0gJycpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgKCd1aWQ6ICcgKyB1aWQgKyAnIG5vdCBmb3VuZCcpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLmdldEdyb3VwbmFtZSA9IGZ1bmN0aW9uIGdldEdyb3VwbmFtZShnaWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJkc2NsIC4gbGlzdCAvR3JvdXBzIFByaW1hcnlHcm91cElEIHwgZ3JlcCAiICsgZ2lkICsgIiB8IGF3ayAneyBpZigkMj09IiArIGdpZCArICIpeyBwcmludCAkMSB9fSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICBpZihjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAnJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyAoJ2dpZDogJyArIGdpZCArICcgbm90IGZvdW5kJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHRoaXMuY29uc29sZVVpZCA9IGZ1bmN0aW9uIGNvbnNvbGVVaWQoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aG8gfCB0ciAnXG4nICdcLicgfCBhd2sgJ3sgcHJpbnQgJDEgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgdmFyIHJldCA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwogICAgICAgICAgICBpZiAocmV0ICE9ICcnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuZ2V0VWlkKHJldCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93ICgnbm9ib2R5IGxvZ2dlZCBpbnRvIGNvbnNvbGUnKTsgICAgIAogICAgICAgIH0KICAgICAgICB0aGlzLmdldEhvbWVGb2xkZXIgPSBmdW5jdGlvbiBnZXRIb21lRm9sZGVyKHVzZXIpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImRzY2wgLiAtcmVhZCAvVXNlcnMvIiArIHVzZXIgKyAiIHwgZ3JlcCBORlNIb21lRGlyZWN0b3J5IHwgYXdrIC1GOiAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIGlmIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAnJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyAoJ3VzZXI6ICcgKyB1c2VyICsgJyBub3QgZm91bmQnKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5fdXNlcnMgPSBmdW5jdGlvbiAoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9kc2NsJywgWydkc2NsJywgJy4nLCAnbGlzdCcsICcvVXNlcnMnLCAnVW5pcXVlSUQnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2V4aXRcbicpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIHZhciB0b2tlbnMsIGk7CiAgICAgICAgICAgIHZhciB1c2VycyA9IHt9OwoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICB0b2tlbnMgPSBsaW5lc1tpXS5zcGxpdCgnICcpOwogICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXSkgeyB1c2Vyc1t0b2tlbnNbMF1dID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTsgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gKHVzZXJzKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fdWlkcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9kc2NsJywgWydkc2NsJywgJy4nLCAnbGlzdCcsICcvVXNlcnMnLCAnVW5pcXVlSUQnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgnZXhpdFxuJyk7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICB2YXIgdG9rZW5zLCBpOwogICAgICAgICAgICB2YXIgdXNlcnMgPSB7fTsKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZXNbaV0uc3BsaXQoJyAnKTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0pIHsgdXNlcnNbdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXV0gPSB0b2tlbnNbMF07IH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICh1c2Vycyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2lkVGFibGUgPSBmdW5jdGlvbigpCiAgICAgICAgewogICAgICAgICAgICB2YXIgdGFibGUgPSB7fTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9pZCcsIFsnaWQnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgdmFyIGxpbmVzID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXG4nKVswXS5zcGxpdCgnICcpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZXMgPSBsaW5lc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHR5cGVzWzFdLnNwbGl0KCcsJyk7CiAgICAgICAgICAgICAgICB0YWJsZVt0eXBlc1swXV0gPSB7fTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBqIGluIHRva2VucykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZGFyciA9IHRva2Vuc1tqXS5zcGxpdCgnKCcpOwogICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGlkYXJyWzBdOwogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaWRhcnJbMV0uc3Vic3RyaW5nKDAsIGlkYXJyWzFdLmxlbmd0aCAtIDEpLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZVt0eXBlc1swXV1bbmFtZV0gPSBpZDsKICAgICAgICAgICAgICAgICAgICB0YWJsZVt0eXBlc1swXV1baWRdID0gbmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gKHRhYmxlKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5DdXJyZW50ID0gZnVuY3Rpb24gKGNiKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHVzZXJzID0ge307CiAgICAgICAgICAgIHZhciB0YWJsZSA9IHRoaXMuX2lkVGFibGUoKTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvdXNyL2Jpbi9sYXN0JywgWydsYXN0J10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoICYmIGxpbmVzW2ldLmxlbmd0aCA+IDA7ICsraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCF1c2Vyc1tsaW5lc1tpXS5zcGxpdCgnICcpWzBdXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzW2xpbmVzW2ldLnNwbGl0KCcgJylbMF1dID0geyBVc2VybmFtZTogbGluZXNbaV0uc3BsaXQoJyAnKVswXSwgU3RhdGU6IGxpbmVzW2ldLnNwbGl0KCdzdGlsbCBsb2dnZWQgaW4nKS5sZW5ndGggPiAxID8gJ0FjdGl2ZScgOiAnSW5hY3RpdmUnLCB1aWQ6IHRhYmxlLnVpZFtsaW5lc1tpXS5zcGxpdCgnICcpWzBdXSB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaChlKQogICAgICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYodXNlcnNbbGluZXNbaV0uc3BsaXQoJyAnKVswXV0uU3RhdGUgIT0gJ0FjdGl2ZScgJiYgbGluZXNbaV0uc3BsaXQoJ3N0aWxsIGxvZ2dlZCBpbicpLmxlbmd0aCA+IDEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB1c2Vyc1tsaW5lc1tpXS5zcGxpdCgnICcpWzBdXS5TdGF0ZSA9ICdBY3RpdmUnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVzZXJzLCAnQWN0aXZlJywgeyB2YWx1ZTogc2hvd0FjdGl2ZU9ubHkodXNlcnMpIH0pOwogICAgICAgICAgICBpZiAoY2IpIHsgY2IuY2FsbCh0aGlzLCB1c2Vycyk7IH0KICAgICAgICB9CiAgICB9CgogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnd2luMzInKSAvLyBMaW51eCwgTWFjT1MsIEZyZWVCU0QKICAgIHsKICAgICAgICB0aGlzLlNlbGYgPSBmdW5jdGlvbiBTZWxmKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL3Vzci9iaW4vaWQnLCBbJ2lkJywgJy11J10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChjaGlsZC5zdGRvdXQuc3RyKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNSb290ID0gZnVuY3Rpb24gaXNSb290KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAodGhpcy5TZWxmKCkgPT0gMCk7CiAgICAgICAgfQogICAgfQoKCn0KZnVuY3Rpb24gc2hvd0FjdGl2ZU9ubHkoc291cmNlKQp7CiAgICB2YXIgcmV0VmFsID0gW107CiAgICB2YXIgdW5pcXVlID0ge307CiAgICB2YXIgdXNlcm5hbWVzID0gW107CiAgICB2YXIgdG1wOwoKICAgIGZvciAodmFyIGkgaW4gc291cmNlKQogICAgewogICAgICAgIGlmIChzb3VyY2VbaV0uU3RhdGUgPT0gJ0FjdGl2ZScpCiAgICAgICAgewogICAgICAgICAgICByZXRWYWwucHVzaChzb3VyY2VbaV0pOwogICAgICAgICAgICB0bXAgPSAoc291cmNlW2ldLkRvbWFpbiA/IChzb3VyY2VbaV0uRG9tYWluICsgJ1xcJykgOiAnJykgKyBzb3VyY2VbaV0uVXNlcm5hbWU7CiAgICAgICAgICAgIGlmICghdW5pcXVlW3RtcF0pIHsgdW5pcXVlW3RtcF0gPSB0bXA7fQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKHZhciBpIGluIHVuaXF1ZSkKICAgIHsKICAgICAgICB1c2VybmFtZXMucHVzaChpKTsKICAgIH0KCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0VmFsLCAndXNlcm5hbWVzJywgeyB2YWx1ZTogdXNlcm5hbWVzIH0pOwogICAgcmV0dXJuIChyZXRWYWwpOwp9CmZ1bmN0aW9uIGdldFRva2VucyhzdHIpCnsKICAgIHZhciBjb2x1bW5zID0gW107CiAgICB2YXIgaTsKCiAgICBjb2x1bW5zLnB1c2goc3RyLnN1YnN0cmluZygwLCAoaT1zdHIuaW5kZXhPZignICcpKSkpOwogICAgd2hpbGUgKHN0clsrK2ldID09ICcgJyk7CiAgICBjb2x1bW5zLnB1c2goc3RyLnN1YnN0cmluZyhpLCAoaT1zdHIuc3Vic3RyaW5nKGkpLmluZGV4T2YoJyAnKSArIGkpKSk7CiAgICB3aGlsZSAoc3RyWysraV0gPT0gJyAnKTsKICAgIGNvbHVtbnMucHVzaChzdHIuc3Vic3RyaW5nKGksIChpPXN0ci5zdWJzdHJpbmcoaSkuaW5kZXhPZignICcpICsgaSkpKTsKICAgIHdoaWxlIChzdHJbKytpXSA9PSAnICcpOwogICAgdmFyIHN0YXR1cyA9IHN0ci5zdWJzdHJpbmcoaSkudHJpbSgpOwogICAgY29sdW1ucy5wdXNoKHN0YXR1cyk7CgogICAgcmV0dXJuIChjb2x1bW5zKTsKfQoKbW9kdWxlLmV4cG9ydHMgPSBuZXcgVXNlclNlc3Npb25zKCk7Cv==", 14236); + ILibBase64DecodeEx((unsigned char*)_usersessions, 62236, (unsigned char*)_usersessions + 62236); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "user-sessions"); duk_push_string(ctx, _usersessions + 62236); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_usersessions); diff --git a/modules/user-sessions.js b/modules/user-sessions.js index 53c0fe9..c70400c 100644 --- a/modules/user-sessions.js +++ b/modules/user-sessions.js @@ -592,6 +592,27 @@ function UserSessions() // First step, is to see if there is a user logged in: this._recheckLoggedInUsers(); } + else + { + this.Current = function Current(cb) + { + var child = require('child_process').execFile('/bin/sh', ['sh']); + child.stdout.str = ''; child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); + child.stderr.str = ''; child.stderr.on('data', function (chunk) { this.str += chunk.toString(); }); + child.stdin.write("who | tr '\\n' '`' | awk -F'`' '" + '{ printf "{"; for(a=1;a1?",":""), tok[2], tok[1]; } printf "}"; }\'\nexit\n'); + child.waitExit(); + + var ret = JSON.parse(child.stdout.str.trim()); + for (var key in ret) + { + ret[key] = { Username: ret[key], SessionId: key, State: 'Active', uid: this.getUid(ret[key]) }; + } + if (cb) + { + cb.call(this, ret); + } + } + } this.minUid = function minUid() { var child = require('child_process').execFile('/bin/sh', ['sh']);