true
null
nil
-
0
0
0
0
1
0
0
0
1
0
0
0
1
yuZpQdnvvUBOTYh1jqZ2cA==
0
0
0
0
false
[null]
1
yuZpQdnvvUBOTYh1jqZ2cA==
17.5
4.171
-26.4860001
8.47889225e-08
0.207909048
-0.978148162
4.37113883e-08
0.978148162
0.207909048
1
-6.03846004e-08
7.38481347e-08
0
false
Restrafes XCS
7108324788
yuZpQdnvvUBOTYh1jqZ2cA==
-
{B88BC829-2E70-458E-9567-27196412A674}
0
false
config
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
false
0
{CD756DAA-C3CA-4FCF-8E82-33ACB5E578B6}
0
false
loader
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
{ef7612db-42e6-4525-8e79-9c583fec2bff}
17996771963439872
true
xcssrc
7108284356
yuZpQdnvvUBOTYh1jqZ2cA==
-
true
0
{cd26dcdf-c1c0-4c32-a66e-890426c8e596}
17996771963439872
true
httpm
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
true
0
1
2
true
false
0
true
[null]
0
0
0
0
false
0
false
XCS_HTTP
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
0
false
0
0
0
0
0
0
0
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0.5
-300
0
0
0
false
[null]
0
0
600
0
50
0
true
1
true
[null]
0
0
0
0
false
0
false
Frame
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
http://www.roblox.com/asset/?id=14511145204
1
1
1
0
0
0
0
0
0
3
0
0
0
0
1
1
0
1
0
false
[null]
false
[null]
false
0
true
0
0.5
0
1
1
1
1
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0
10
0.5
0
0
false
[null]
0
0
80
0
18
0
true
1
true
[null]
0
0
0
0
false
0
false
Logo
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
rbxasset://fonts/families/Roboto.json
400
1
-1
false
HttpService is required, please enable it in game settings.
1
1
1
0
false
18
0
0
0
1
0
0
true
0
0
false
0
0
0
1
1
1
1
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0
100
0
25
0
false
[null]
0
0
500
0
25
0
true
1
true
[null]
0
0
0
0
false
0
false
Line2
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
rbxasset://fonts/families/Roboto.json
400
1
-1
false
Restrafes XCS Controller Error
1
1
1
0
false
18
0
0
0
1
0
0
true
0
2
false
0
0
0
1
1
1
1
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0
100
0
0
0
false
[null]
0
0
500
0
25
0
true
1
true
[null]
0
0
0
0
false
0
false
Line1
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
{8416f780-f0d8-4765-95fe-36fa95288001}
17996771963439872
true
controllerAxesys
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
syncTimed
spawn(function()
_m.events["accessReady"]();
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;});
if (proximityObject) then
proximityObject.Enabled = true;
end
else
spawn(function()
_m.events["accessDenied"](player);
end)
_m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];});
if (_m.sound) then
_m.sound.SoundId = _m.sounds["accessDenied"];
_m.sound:Play();
end
if (proximityObject) then
proximityObject.Enabled = false;
end
wait(_m.config["accessDeniedTimer"]);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
if (proximityObject) then
proximityObject.Enabled = true;
end
end
_m.cardScan = false
end
end
function _m.touchScan(x)
if (x.Parent:FindFirstChild("CardNumber") or x.Parent:FindFirstChild("_axesysCard") and x.Name == "Handle" and x.Parent.ClassName == "Tool") then
local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent);
local uid = tostring(player.UserId);
_m.negotiate(player);
end
end
function readerSettings()
local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"})["data"];
_m.doorActive = (newSettings["Active"] == "1" and true or false);
_m.doorLocked = (newSettings["Locked"] == "1" and true or false);
_m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["Locked"] == "0" and true or false);["player"]=player;});
_m.indicatorChange("LEDR",(newSettings["Active"] == "0" and 1 or 0));
_m.indicatorChange("LEDG",(newSettings["Locked"] == "1" and 0 or 1));
_m.indicatorChange("LEDS",(newSettings["Active"] == "1" and newSettings["Locked"] == "1" and 1 or 0));
if (_m.doorActive and _m.doorLocked) then
spawn(function()
_m.events["accessReady"]();
end)
elseif (_m.doorActive and not _m.doorLocked) then
spawn(function()
_m.events["enabled"]();
end)
elseif (not _m.doorActive) then
spawn(function()
_m.events["disabled"]();
end)
end
_m.doorTimer = tonumber(newSettings["Timer"]);
wait(60);
readerSettings();
end
function _m.indicatorChange(N,S)
for _,x in pairs(_m.model:GetChildren()) do
if (x.Name == N) then
x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S])
if (S == 1) then
x.Material = "Neon";
else
x.Material = "SmoothPlastic";
end
end
end
end
function _m.init(data)
wait(2.5)
_m.config = data["config"];
_m.model = _m.config["model"];
_m.doorId = _m.config["doorId"];
_m.sounds = _m.config["sounds"];
_m.events = _m.config["events"];
_m.sound = nil;
_m.api = _m.model.API;
if (_m.model:FindFirstChild("_main")) then
_m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound");
end
if (_m.config["_legacy_indicators"] == nil) then
_m.config["_legacy_indicators"] = {
["LEDR"]={[0]="Really black",[1]="Really red"};
["LEDG"]={[0]="Really black",[1]="Lime green"};
["LEDS"]={[0]="Really black",[1]="Institutional white"};
};
end
if (_m.events["accessGranted"] == nil) then
_m.events["accessGranted"] = function(player)
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessDenied"] == nil) then
_m.events["accessDenied"] = function(player)
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["enabled"] == nil) then
_m.events["enabled"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["disabled"] == nil) then
_m.events["disabled"] = function()
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessReady"] == nil) then
_m.events["accessReady"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
end
end
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
local startUp = true;
repeat
_m.indicatorChange("LEDR",1)
local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";})
if (waitPing["response"]) then
startUp = false;
break;
end
if (waitPing["response"] == "invalid-reader") then
_m.indicatorChange("LEDR",1);
assert(false,"eve axesys (reader): [".._m.doorId.."]: invalid reader!");
end
until not startUp
_m.indicatorChange("LEDR",0);
wait(0.2);
_m.indicatorChange("LEDR",1);
wait(0.2);
_m.indicatorChange("LEDG",1);
wait(0.2);
_m.indicatorChange("LEDS",1);
wait(2.5);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
if (_m.model:FindFirstChild("_main")) then
_m.model:FindFirstChild("_main").Touched:connect(_m.touchScan);
end
-- new interaction method
_m.api.Event:Connect(function(data)
if (data["request"] == "onScan") then
if (data["isProximityPrompt"]) then
if (data["proximityPrompAccessWithoutCard"]) then
_m.negotiate(data["player"]);
else
for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do
if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then
_m.negotiate(data["player"], data["proximityObject"]);
return;
end
end
for _,v in pairs(data["player"].Character:GetChildren()) do
if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then
_m.negotiate(data["player"], data["proximityObject"]);
return;
end
end
end
else
_m.negotiate(data["player"]);
end
elseif (data["request"] == "setDoorTrigger") then
_m._legacy_trigger(data["value"]);
end
end)
readerSettings()
end
return _m
]]>
{2ca9fb29-cd45-4b62-b6c1-f333e2d89b32}
17996771963439872
true
unitAxesys
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
{c94b318e-9267-42d2-8881-9790a1f569d9}
17996771963439872
true
controller
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
syncTimed
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]);
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;});
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
else
if (_m.sound and _m.sounds) then
_m.sound.SoundId = _m.sounds["denied"] or _m.sounds["accessDenied"];
_m.sound:Play();
end
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessDenied"] or _m.events["denied"], player, checkUser["scan_data"]);
end)
_m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];});
wait(_m.config["accessDeniedTimer"]);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]);
end)
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
end
_m.cardScan = false
end
end)
if (not s0) then
print(string.format("There was an error while negotiating an access point: %s", m0))
end
end
function _m.touchScan(x)
if (_m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"}) and x.Name == "Handle" and x.Parent.ClassName == "Tool") then
local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent);
local uid = tostring(player.UserId);
local cardNumber = nil;
local cardNumberObject = _m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"});
if (cardNumberObject and (cardNumberObject:IsA("StringValue") or cardNumberObject:IsA("NumberValue") or cardNumberObject:IsA("IntValue"))) then
cardNumber = cardNumberObject.Value;
end
_m.negotiate(player, nil, {cardNumber});
end
end
function readerSettings()
local s0, m0 = pcall(function()
spawn(function()
local proximityObject = _m.model:FindFirstChild("xcsInteraction", true);
local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"});
if (newSettings["response"] == "invalid-reader") then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {});
end)
assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName()));
end
newSettings = newSettings["data"];
_m.doorActive = (newSettings["active"]);
_m.doorLocked = (newSettings["armed"]);
_m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["armed"]);["player"]=player;});
_m.indicatorChange("LEDR",(newSettings["active"] == false and 1 or 0));
_m.indicatorChange("LEDG",(newSettings["armed"] == true and 0 or 1));
_m.indicatorChange("LEDS",(newSettings["active"] == true and newSettings["armed"] == true and 1 or 0));
if (_m.doorActive and _m.doorLocked) then
if (not _m.cardScan) then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], newSettings["scanData"]["ready"] or {});
end)
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
end
elseif (_m.doorActive and not _m.doorLocked) then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["enabled"] or _m.events["disarmed"], newSettings["scanData"]["disarmed"] or {});
end)
if (proximityObject) then
proximityObject.Enabled = false;
end
elseif (not _m.doorActive) then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {});
end)
if (proximityObject) then
proximityObject.Enabled = false;
end
end
_m.doorTimer = tonumber(newSettings["unlockTime"] or 5);
wait(15);
readerSettings();
end)
end)
if (not s0) then
print(string.format("There was an error while grabbing up-to-date reader settings: %s", m0))
end
end
function _m.indicatorChange(N,S)
for _,x in pairs(_m.model:GetChildren()) do
if (x.Name == N) then
x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S])
if (S == 1) then
x.Material = "Neon";
else
x.Material = "SmoothPlastic";
end
end
end
end
function _m.remoteUnlock(unlockSeconds)
if (not _m.doorActive or _m.cardScan) then return; end
_m.cardScan = true;
if (_m.sound and _m.sounds) then
_m.sound.SoundId = _m.sounds["granted"] or _m.sounds["accessGranted"];
_m.sound:Play();
end
spawn(function()
local proximityObject = _m.model:FindFirstChild("xcsInteraction", true);
if (proximityObject) then
proximityObject.Enabled = false;
end
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessGranted"] or _m.events["granted"], nil, {});
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=true;});
local time = 0;
local syncTimed = tonumber(unlockSeconds) or _m.doorTimer;
_m.api:Fire({["request"]="onAccessGranted";["timerLength"]=syncTimed;});
repeat
wait(1);
time += 1;
until time > syncTimed
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], {});
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=false;});
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
_m.cardScan = false;
end)
end
function _m.init(data)
_m.config = data["config"];
_m.model = _m.config["model"];
_m.doorId = _m.config["accessPointId"] or _m.config["doorId"];
_m.sounds = _m.config["sounds"];
_m.events = _m.config["events"];
_m.sound = nil;
_m.api = _m.model.API;
if (_m.model:FindFirstChild("_main")) then
_m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound");
if (_m.sound and _m.sounds) then
_m.sounds["granted"] = _m.sounds["granted"] or _m.sounds["accessGranted"] or "";
_m.sounds["denied"] = _m.sounds["denied"] or _m.sounds["accessDenied"] or "";
_m.sounds["pending"] = _m.sounds["pending"] or _m.sounds["accessPending"] or "";
end
end
if (_m.config["_legacy_indicators"] == nil) then
_m.config["_legacy_indicators"] = {
["LEDR"]={[0]="Really black",[1]="Really red"};
["LEDG"]={[0]="Really black",[1]="Lime green"};
["LEDS"]={[0]="Really black",[1]="Institutional white"};
};
end
if (_m.events["accessGranted"] == nil and _m.events["granted"] == nil) then
_m.events["accessGranted"] = function(player)
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessDenied"] == nil and _m.events["denied"] == nil) then
_m.events["accessDenied"] = function(player)
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["enabled"] == nil and _m.events["disarmed"] == nil) then
_m.events["enabled"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessDisabled"] == nil and _m.events["disabled"] == nil) then
_m.events["disabled"] = function()
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessReady"] == nil and _m.events["ready"] == nil) then
_m.events["accessReady"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
end
end
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
local startUp = true;
repeat
_m.indicatorChange("LEDR",1)
local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";})
if (waitPing["response"]) then
startUp = false;
break;
end
if (waitPing["response"] == "invalid-reader") then
_m.indicatorChange("LEDR",1);
assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName()));
end
until not startUp
_m.indicatorChange("LEDR",0);
wait(0.2);
_m.indicatorChange("LEDR",1);
wait(0.2);
_m.indicatorChange("LEDG",1);
wait(0.2);
_m.indicatorChange("LEDS",1);
wait(2.5);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
if (_m.model:FindFirstChild("_touch")) then
_m.model:FindFirstChild("_touch").Touched:connect(_m.touchScan);
end
if (_m.model:FindFirstChild("_main")) then
_m.model:FindFirstChild("_main").Touched:connect(_m.touchScan);
end
-- new interaction method
_m.api.Event:Connect(function(data)
if (data["request"] == "onScan") then
local cardNumbers = {};
for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do
if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then
table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value);
end
end
for _,v in pairs(data["player"].Character:GetChildren()) do
if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then
table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value);
end
end
if (data["isProximityPrompt"]) then
if (data["proximityPromptAccessWithoutCard"]) then
_m.negotiate(data["player"], data["proximityObject"], cardNumbers);
end
else
_m.negotiate(data["player"], nil, cardNumbers);
end
elseif (data["request"] == "setDoorTrigger") then
_m._legacy_trigger(data["value"]);
end
end)
repeat wait() until _G.xcsRemoteUnlock ~= nil;
_G.xcsRemoteUnlock.Event:Connect(function(accessPointId, payload)
if (accessPointId ~= _m.doorId) then return; end
local unlockSeconds = nil;
if (type(payload) == "table") then
unlockSeconds = payload["unlockTime"];
end
_m.remoteUnlock(unlockSeconds);
end)
readerSettings()
end
return _m
]]>
{c00ee4b0-06dd-4ca9-a4a3-038539ed2047}
17996771963439872
true
unit
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
0
false
Readers
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
0
0
0
0
1
0
0
0
1
0
0
0
1
yuZpQdnvvUBOTYh1jqZ2cA==
0
0
0
0
false
[null]
1
yuZpQdnvvUBOTYh1jqZ2cA==
4.9749999
4
-19.75
-4.37113883e-08
0
-1
0
1
0
1
0
-4.37113883e-08
0
false
XCS Ax1
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
false
false
false
0.200000003
0.600000024
0.0500000007
0
0
0
rbxassetid://14392193893
0
606
yuZpQdnvvUBOTYh1jqZ2cA==
0
true
9youQqgpV70GZVe57RLKHg==
-2.40652412e-06
-2.03360287e-06
3.12777206e-06
4.21279692e-05
6.70220561e-06
4.84613956e-05
-9.36211109e-11
-6.75776058e-13
5.57743999e-12
0.000885298126
true
true
-0.5
0.5
0
0
-0.5
0.5
0
0
4.9749999
4
-19.75
-4.37113883e-08
0
-1
0
1
0
1
0
-4.37113883e-08
true
true
true
true
Default
0
4280492835
false
true
-0.5
0.5
0
0
-0.5
0.5
0
0
false
false
272
0
0
0
1
0
0
0
1
0
0
0
1
0
-0.5
0.5
0
0
0
0
0
0
-0.5
0.5
0
0
0
0
0
0
0.200000003
0.600000024
0.0500000007
0
false
finish
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
false
false
false
0.180000007
0.579999983
0.0290130004
0
0
0
rbxassetid://14392195965
0
4352
yuZpQdnvvUBOTYh1jqZ2cA==
0
true
aTIjYIeEFqyQ2bhuh8rtLg==
-1.80013018e-07
4.32734441e-06
3.48552157e-06
8.50336146e-05
8.37962762e-06
9.29887392e-05
-3.94808665e-12
-3.17759881e-12
-1.5377595e-12
0.00302734436
true
true
-0.5
0.5
0
0
-0.5
0.5
0
0
4.98549414
4
-19.75
-4.37113883e-08
0
-1
0
1
0
1
0
-4.37113883e-08
true
true
true
true
Default
0
4280821800
false
true
-0.5
0.5
0
0
-0.5
0.5
0
0
false
false
272
0
0
0
1
0
0
0
1
0
0
0
1
0
-0.5
0.5
0
0
0
0
0
0
-0.5
0.5
0
0
0
0
0
0
0.180000007
0.579999983
0.0290130004
0
false
_main
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
true
0 60000
false
false
0 60000
false
4
false
20
10
0
[null]
rbxassetid://138093550
0
0.200000003
0
false
sound
138093550
yuZpQdnvvUBOTYh1jqZ2cA==
-
Present your card
true
true
true
0
1000
0.5
101
3
0
Restrafes XCS
true
[null]
0
0
0
0
false
xcsInteraction
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
1
1
true
true
-0.5
0.5
0
0
-0.5
0.5
0
0
4.99205351
4.20106602
-19.75
-4.37113883e-08
0
-1
0
1
0
1
0
-4.37113883e-08
true
true
true
true
Default
0
4289350989
false
true
-0.5
0.5
0
0
-0.5
0.5
0
0
false
false
288
0
0
0
1
0
0
0
1
0
0
0
1
0
-0.5
0.5
0
0
0
0
0
0
-0.5
0.5
0
0
0
0
0
0
0.129999995
0.0299999993
0.0140100848
0
false
LED
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
1
1
true
true
-0.5
0.5
0
0
-0.5
0.5
0
0
4.9922843
3.75778842
-19.75
-4.37113883e-08
0
-1
0
1
0
1
0
-4.37113883e-08
true
true
true
true
Default
0
4280821800
false
true
-0.5
0.5
0
0
-0.5
0.5
0
0
false
false
272
0
0
0
1
0
0
0
1
0
0
0
1
0.25
-0.5
0.5
0
0
0
0
0
0
-0.5
0.5
0
0
0
0
0
0
0.129999995
0.0464786291
0.0144716632
0
false
logo
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
{E15B3E24-9BEB-4154-9296-28F128C272E9}
0
false
config
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
false
0
{02982804-CB63-4C38-9D47-006FC5451CFB}
0
false
loader
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
{6E7ABAAB-C1D7-4974-9A2A-6C2921275D30}
17996771963439872
true
xcssrc
7108284356
yuZpQdnvvUBOTYh1jqZ2cA==
-
true
0
{CB14BE36-E440-4206-BD11-413CD05BF88C}
17996771963439872
true
httpm
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
true
0
1
2
true
false
0
true
[null]
0
0
0
0
false
0
false
XCS_HTTP
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
0
false
0
0
0
0
0
0
0
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0.5
-300
0
0
0
false
[null]
0
0
600
0
50
0
true
1
true
[null]
0
0
0
0
false
0
false
Frame
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
http://www.roblox.com/asset/?id=14511145204
1
1
1
0
0
0
0
0
0
3
0
0
0
0
1
1
0
1
0
false
[null]
false
[null]
false
0
true
0
0.5
0
1
1
1
1
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0
10
0.5
0
0
false
[null]
0
0
80
0
18
0
true
1
true
[null]
0
0
0
0
false
0
false
Logo
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
rbxasset://fonts/families/Roboto.json
400
1
-1
false
HttpService is required, please enable it in game settings.
1
1
1
0
false
18
0
0
0
1
0
0
true
0
0
false
0
0
0
1
1
1
1
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0
100
0
25
0
false
[null]
0
0
500
0
25
0
true
1
true
[null]
0
0
0
0
false
0
false
Line2
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
rbxasset://fonts/families/Roboto.json
400
1
-1
false
Restrafes XCS Controller Error
1
1
1
0
false
18
0
0
0
1
0
0
true
0
2
false
0
0
0
1
1
1
1
0.105882362
0.164705887
0.207843155
0
0
false
false
0
true
0
[null]
[null]
[null]
[null]
0
100
0
0
0
false
[null]
0
0
500
0
25
0
true
1
true
[null]
0
0
0
0
false
0
false
Line1
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
{37B9E8B8-0A75-4BA1-8AC7-90F7F2A33ECF}
17996771963439872
true
controllerAxesys
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
syncTimed
spawn(function()
_m.events["accessReady"]();
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;});
if (proximityObject) then
proximityObject.Enabled = true;
end
else
spawn(function()
_m.events["accessDenied"](player);
end)
_m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];});
if (_m.sound) then
_m.sound.SoundId = _m.sounds["accessDenied"];
_m.sound:Play();
end
if (proximityObject) then
proximityObject.Enabled = false;
end
wait(_m.config["accessDeniedTimer"]);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
if (proximityObject) then
proximityObject.Enabled = true;
end
end
_m.cardScan = false
end
end
function _m.touchScan(x)
if (x.Parent:FindFirstChild("CardNumber") or x.Parent:FindFirstChild("_axesysCard") and x.Name == "Handle" and x.Parent.ClassName == "Tool") then
local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent);
local uid = tostring(player.UserId);
_m.negotiate(player);
end
end
function readerSettings()
local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"})["data"];
_m.doorActive = (newSettings["Active"] == "1" and true or false);
_m.doorLocked = (newSettings["Locked"] == "1" and true or false);
_m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["Locked"] == "0" and true or false);["player"]=player;});
_m.indicatorChange("LEDR",(newSettings["Active"] == "0" and 1 or 0));
_m.indicatorChange("LEDG",(newSettings["Locked"] == "1" and 0 or 1));
_m.indicatorChange("LEDS",(newSettings["Active"] == "1" and newSettings["Locked"] == "1" and 1 or 0));
if (_m.doorActive and _m.doorLocked) then
spawn(function()
_m.events["accessReady"]();
end)
elseif (_m.doorActive and not _m.doorLocked) then
spawn(function()
_m.events["enabled"]();
end)
elseif (not _m.doorActive) then
spawn(function()
_m.events["disabled"]();
end)
end
_m.doorTimer = tonumber(newSettings["Timer"]);
wait(60);
readerSettings();
end
function _m.indicatorChange(N,S)
for _,x in pairs(_m.model:GetChildren()) do
if (x.Name == N) then
x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S])
if (S == 1) then
x.Material = "Neon";
else
x.Material = "SmoothPlastic";
end
end
end
end
function _m.init(data)
wait(2.5)
_m.config = data["config"];
_m.model = _m.config["model"];
_m.doorId = _m.config["doorId"];
_m.sounds = _m.config["sounds"];
_m.events = _m.config["events"];
_m.sound = nil;
_m.api = _m.model.API;
if (_m.model:FindFirstChild("_main")) then
_m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound");
end
if (_m.config["_legacy_indicators"] == nil) then
_m.config["_legacy_indicators"] = {
["LEDR"]={[0]="Really black",[1]="Really red"};
["LEDG"]={[0]="Really black",[1]="Lime green"};
["LEDS"]={[0]="Really black",[1]="Institutional white"};
};
end
if (_m.events["accessGranted"] == nil) then
_m.events["accessGranted"] = function(player)
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessDenied"] == nil) then
_m.events["accessDenied"] = function(player)
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["enabled"] == nil) then
_m.events["enabled"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["disabled"] == nil) then
_m.events["disabled"] = function()
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessReady"] == nil) then
_m.events["accessReady"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
end
end
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
local startUp = true;
repeat
_m.indicatorChange("LEDR",1)
local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";})
if (waitPing["response"]) then
startUp = false;
break;
end
if (waitPing["response"] == "invalid-reader") then
_m.indicatorChange("LEDR",1);
assert(false,"eve axesys (reader): [".._m.doorId.."]: invalid reader!");
end
until not startUp
_m.indicatorChange("LEDR",0);
wait(0.2);
_m.indicatorChange("LEDR",1);
wait(0.2);
_m.indicatorChange("LEDG",1);
wait(0.2);
_m.indicatorChange("LEDS",1);
wait(2.5);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
if (_m.model:FindFirstChild("_main")) then
_m.model:FindFirstChild("_main").Touched:connect(_m.touchScan);
end
-- new interaction method
_m.api.Event:Connect(function(data)
if (data["request"] == "onScan") then
if (data["isProximityPrompt"]) then
if (data["proximityPrompAccessWithoutCard"]) then
_m.negotiate(data["player"]);
else
for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do
if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then
_m.negotiate(data["player"], data["proximityObject"]);
return;
end
end
for _,v in pairs(data["player"].Character:GetChildren()) do
if (v:FindFirstChild("CardNumber") or v:FindFirstChild("_axesysCard") and v.Parent.ClassName == "Tool") then
_m.negotiate(data["player"], data["proximityObject"]);
return;
end
end
end
else
_m.negotiate(data["player"]);
end
elseif (data["request"] == "setDoorTrigger") then
_m._legacy_trigger(data["value"]);
end
end)
readerSettings()
end
return _m
]]>
{4214A8E4-66AA-4E63-99F9-A5806F1460C1}
17996771963439872
true
unitAxesys
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
{0216645A-D8E9-4C6D-96F1-A05978DA1E36}
17996771963439872
true
controller
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
syncTimed
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]);
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=false;["player"]=player;});
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
else
if (_m.sound and _m.sounds) then
_m.sound.SoundId = _m.sounds["denied"] or _m.sounds["accessDenied"];
_m.sound:Play();
end
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessDenied"] or _m.events["denied"], player, checkUser["scan_data"]);
end)
_m.api:Fire({["request"]="onAccessDenied";["player"]=player;["timerLength"]=_m.config["accessDeniedTimer"];});
wait(_m.config["accessDeniedTimer"]);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], checkUser["scan_data"]);
end)
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
end
_m.cardScan = false
end
end)
if (not s0) then
print(string.format("There was an error while negotiating an access point: %s", m0))
end
end
function _m.touchScan(x)
if (_m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"}) and x.Name == "Handle" and x.Parent.ClassName == "Tool") then
local player = game.Players:GetPlayerFromCharacter(x.Parent.Parent);
local uid = tostring(player.UserId);
local cardNumber = nil;
local cardNumberObject = _m.findAny(x.Parent, {"CardNumber", "_xcsCard", "XCS"});
if (cardNumberObject and (cardNumberObject:IsA("StringValue") or cardNumberObject:IsA("NumberValue") or cardNumberObject:IsA("IntValue"))) then
cardNumber = cardNumberObject.Value;
end
_m.negotiate(player, nil, {cardNumber});
end
end
function readerSettings()
local s0, m0 = pcall(function()
spawn(function()
local proximityObject = _m.model:FindFirstChild("xcsInteraction", true);
local newSettings = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="settings"});
if (newSettings["response"] == "invalid-reader") then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {});
end)
assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName()));
end
newSettings = newSettings["data"];
_m.doorActive = (newSettings["active"]);
_m.doorLocked = (newSettings["armed"]);
_m.api:Fire({["request"]="setDoorTrigger";["value"]=(newSettings["armed"]);["player"]=player;});
_m.indicatorChange("LEDR",(newSettings["active"] == false and 1 or 0));
_m.indicatorChange("LEDG",(newSettings["armed"] == true and 0 or 1));
_m.indicatorChange("LEDS",(newSettings["active"] == true and newSettings["armed"] == true and 1 or 0));
if (_m.doorActive and _m.doorLocked) then
if (not _m.cardScan) then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], newSettings["scanData"]["ready"] or {});
end)
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
end
elseif (_m.doorActive and not _m.doorLocked) then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["enabled"] or _m.events["disarmed"], newSettings["scanData"]["disarmed"] or {});
end)
if (proximityObject) then
proximityObject.Enabled = false;
end
elseif (not _m.doorActive) then
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessDisabled"] or _m.events["disabled"], {});
end)
if (proximityObject) then
proximityObject.Enabled = false;
end
end
_m.doorTimer = tonumber(newSettings["unlockTime"] or 5);
wait(15);
readerSettings();
end)
end)
if (not s0) then
print(string.format("There was an error while grabbing up-to-date reader settings: %s", m0))
end
end
function _m.indicatorChange(N,S)
for _,x in pairs(_m.model:GetChildren()) do
if (x.Name == N) then
x.BrickColor = BrickColor.new(_m.config["_legacy_indicators"][N][S])
if (S == 1) then
x.Material = "Neon";
else
x.Material = "SmoothPlastic";
end
end
end
end
function _m.remoteUnlock(unlockSeconds)
if (not _m.doorActive or _m.cardScan) then return; end
_m.cardScan = true;
if (_m.sound and _m.sounds) then
_m.sound.SoundId = _m.sounds["granted"] or _m.sounds["accessGranted"];
_m.sound:Play();
end
spawn(function()
local proximityObject = _m.model:FindFirstChild("xcsInteraction", true);
if (proximityObject) then
proximityObject.Enabled = false;
end
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessGranted"] or _m.events["granted"], nil, {});
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=true;});
local time = 0;
local syncTimed = tonumber(unlockSeconds) or _m.doorTimer;
_m.api:Fire({["request"]="onAccessGranted";["timerLength"]=syncTimed;});
repeat
wait(1);
time += 1;
until time > syncTimed
spawn(function()
_m.cancelEventThread()
_m.eventThread = task.spawn(_m.events["accessReady"] or _m.events["ready"], {});
end)
_m.api:Fire({["request"]="setDoorTrigger";["value"]=false;});
if (proximityObject and _m.doorActive) then
proximityObject.Enabled = true;
end
_m.cardScan = false;
end)
end
function _m.init(data)
_m.config = data["config"];
_m.model = _m.config["model"];
_m.doorId = _m.config["accessPointId"] or _m.config["doorId"];
_m.sounds = _m.config["sounds"];
_m.events = _m.config["events"];
_m.sound = nil;
_m.api = _m.model.API;
if (_m.model:FindFirstChild("_main")) then
_m.sound = _m.model:FindFirstChild("_main"):FindFirstChild("sound");
if (_m.sound and _m.sounds) then
_m.sounds["granted"] = _m.sounds["granted"] or _m.sounds["accessGranted"] or "";
_m.sounds["denied"] = _m.sounds["denied"] or _m.sounds["accessDenied"] or "";
_m.sounds["pending"] = _m.sounds["pending"] or _m.sounds["accessPending"] or "";
end
end
if (_m.config["_legacy_indicators"] == nil) then
_m.config["_legacy_indicators"] = {
["LEDR"]={[0]="Really black",[1]="Really red"};
["LEDG"]={[0]="Really black",[1]="Lime green"};
["LEDS"]={[0]="Really black",[1]="Institutional white"};
};
end
if (_m.events["accessGranted"] == nil and _m.events["granted"] == nil) then
_m.events["accessGranted"] = function(player)
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessDenied"] == nil and _m.events["denied"] == nil) then
_m.events["accessDenied"] = function(player)
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["enabled"] == nil and _m.events["disarmed"] == nil) then
_m.events["enabled"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",1);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessDisabled"] == nil and _m.events["disabled"] == nil) then
_m.events["disabled"] = function()
_m.indicatorChange("LEDR",1);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
end
end
if (_m.events["accessReady"] == nil and _m.events["ready"] == nil) then
_m.events["accessReady"] = function()
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",1);
end
end
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
local startUp = true;
repeat
_m.indicatorChange("LEDR",1)
local waitPing = _m.superiorApi:Invoke({["reader"]=_m.doorId;["request"]="ping";})
if (waitPing["response"]) then
startUp = false;
break;
end
if (waitPing["response"] == "invalid-reader") then
_m.indicatorChange("LEDR",1);
assert(false, string.format("Restrafes XCS (reader): [%s]: Invalid reader ID!\n%s", _m.doorId, _m.model:GetFullName()));
end
until not startUp
_m.indicatorChange("LEDR",0);
wait(0.2);
_m.indicatorChange("LEDR",1);
wait(0.2);
_m.indicatorChange("LEDG",1);
wait(0.2);
_m.indicatorChange("LEDS",1);
wait(2.5);
_m.indicatorChange("LEDR",0);
_m.indicatorChange("LEDG",0);
_m.indicatorChange("LEDS",0);
if (_m.model:FindFirstChild("_touch")) then
_m.model:FindFirstChild("_touch").Touched:connect(_m.touchScan);
end
if (_m.model:FindFirstChild("_main")) then
_m.model:FindFirstChild("_main").Touched:connect(_m.touchScan);
end
-- new interaction method
_m.api.Event:Connect(function(data)
if (data["request"] == "onScan") then
local cardNumbers = {};
for _,v in pairs(data["player"]:FindFirstChild("Backpack"):GetChildren()) do
if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then
table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value);
end
end
for _,v in pairs(data["player"].Character:GetChildren()) do
if (v:FindFirstChild("CardNumber") and v.ClassName == "Tool") then
table.insert(cardNumbers, v:FindFirstChild("CardNumber").Value);
end
end
if (data["isProximityPrompt"]) then
if (data["proximityPromptAccessWithoutCard"]) then
_m.negotiate(data["player"], data["proximityObject"], cardNumbers);
end
else
_m.negotiate(data["player"], nil, cardNumbers);
end
elseif (data["request"] == "setDoorTrigger") then
_m._legacy_trigger(data["value"]);
end
end)
repeat wait() until _G.xcsRemoteUnlock ~= nil;
_G.xcsRemoteUnlock.Event:Connect(function(accessPointId, payload)
if (accessPointId ~= _m.doorId) then return; end
local unlockSeconds = nil;
if (type(payload) == "table") then
unlockSeconds = payload["unlockTime"];
end
_m.remoteUnlock(unlockSeconds);
end)
readerSettings()
end
return _m
]]>
{B5B5954E-557A-4C96-9012-20855D9E30F8}
17996771963439872
true
unit
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
0
false
API
-1
yuZpQdnvvUBOTYh1jqZ2cA==
-
false
0
{78B78716-EAE9-4F7E-AC3F-B6940EE03A8A}
0
false
LICENSE
-1
yuZpQdnvvUBOTYh1jqZ2cA==
Q1NHUEhTCAAAAAIAKLUv/WDEDW0mANQiEgAAACsBAAAOAgAAI0IACgQAAIQEDgAA7FG4veF6
lL6srG28PT48bcstFNduQeHrAsVdLZS7tgsFb1sUbrd1yl3XLVuU2y1RLRS3QGkBbtJSbbXr
um7bcAHgrqVVJ1UC7Vmqb92ivK5yu0W5AC0FgGpVVbW3Ps+q3tqtXaBaABRVVa0WujerqlvX
bu3bckHBC4r3LoJyu3YtrdKWgOJunbZVZrm/AwAAsEg4vfzrgbztUTi9EM6MRfeTad0/Xezi
ehQ+rJg5YEO2CEa39Z9lCeW2N6ZovD0+krd3QGO8QhG4+ktfhUL3k+GamTlSuF48Dj1uEq49
8nmUzxCwPdttBvmtPc72kyy6Xgb/sT25Rxs2sT3hzTKrrz2k62Cesj2EnRLdsz1pXAnitD1a
DbihtT00spLOGbY9i1C545G4POqRHR+4PahpkgGJtz1b5YSWtj3mVeNQtT1ruavDsz1EC5TO
HLi9qWm9PX8Xtr2MvVy9Nb1bw9qzvWpcvYW94r2lt/atvbq9571svUW9ur3cvfN2tl4+y/aT
LOqRvZtpkrKGt71S5c5Wk5ROtb1VulzBs70wDJQY+LG9uEceE7C97WxEpK+9kOx8MbG9zM5/
nb1iXLrftL1ADr0pspK9bFG9qeORPT09PT09PT09PVC8fBQWwLYYxGm8bH9iuGu87KAsdLaY
0LctTGFwc83QRb0AAIAyAOBttwfiu1JET7cUvpRMNz6hawo9sh9qVr2B66jR1pBEqVHZ48Gp
gAxZ3TaREKioUkIVJSlIljG36P19NSaVnLYUhh8RfWdRvA3Z9AL9spQ/ifrjF93u+BDlio1e
knVdtX9mEpY7vRawre1I/ky0iw8X/HlBojb3wNqite/f94/qejz8DKXGc3vCfBMyuHvh/tMe
/fps740Yfue3HK/EWmoETlIKC09s3ItHuhLQKmipFe3pBMcLAEh0+7i/d2v+AqA9gNdOnEcd
7h/H5WZULctuiB48uzb71/sH506nrkn7lfe/5EzqD4ldv4j341NvrmdXos/5Xaf9+zxxHhMx
7oIbX17XgI54Ri+MiJpd2CySHFbFx42MvRsuAMnOnOzYpzKWdHQH7ND16sh6CvEMPHCo9OAW
5zaHC6JJ//gYtffm7C1fpY5iPSV3wp0CFs2E9Ivje170mD/X+14mdq0kHayHZnjqG5uL+lnS
FLWnKSYNKFeCfjUHdL67bWzoAhCT8ttmEva7Gx9kx0jyvhLmHgJJl/hx1MelIU+8bhEfYpTj
bdGvyWu1aBtTHpX21N81HJedvnscC1Pf5xHH9EJk+ELEzkcOgJ3Ig2NfQl2A+K38mUfTYZ9j
dcd7+Lw5BO5ajR9D9B2C6QnzcmY/p2VfJLIasitcmMwvcBFxdj5bvuMAwMvTFmS8TyiGsL2I
WzzwjQTyvzk4pZ3rXQ3uJZ6mKNkinrCLNIHvJe6U6NwCvYLc/qnfzVxDXWsOmd45Kstz1D+4
AeGqMQun/40XOaJg43Oka76Ix/kP8GIj6p2+U9O234z32UtSRfnhWO3nzmMSsNRFu8ieyuyX
X65/JKc8afeH6TJhnbIGjTgWidthBEOH80ZsdrzeInUep+fzIHAR09lq2190t4LMh6fqgXpl
JeyXlfLQLZEK
Q1NHUEhTCAAAAAIAKLUv/WCUDl0lAIQdFAAAADwBAAAoAgAAIAA8BAAAiNAOAABJzMy9mpmZ
vs3MzLw9PjwtZxUoBQpet9y167q7dVahu3ULhWVpQXFVFG73ULw9td2ebimtlkK5VoHys+D1
S6296dSiVrWgvBaUu62A8ranLcBZBda1WVVev67rWygAoFsA125uXdd1AMrrul3XpFWv67p1
FACUu67rtgDXdd26hQtvXVDenlWgvD2rlJ9ttW+r1QLsZYa++e+4XmdmPLxHc2mNybxzjeY7
yrybbBdaybxwUj6suDxi+J2822KCHMm9ZmaGPmZmCt/lW8yaq8i+zcxMvetSlzx6q8dMveJ6
lAAApLa8AAAAMmWilDB4mE6LlL6xWsq8zveClD4mg8m8rEnghrs8PT08gZUAQKQ2qw6XpI6U
vs6syj09uJaWh5sZPnpkZrxoYMLldzSsybyDyjPMy7wOpdzVyrw9hvo5yz3xb5Y+zD0tm2PM
PRx6leJmhjzRTbjw0UzPzEyOTbw9oH8+JMA9DjWGsMM907uYWMnGPTgZDFXJPYhSl7ygoZTs
cpmUPv3qy7zuvjzKzNAKatSI5Ow8moVFkZS+chPLvBDXvZ+9+1IMrGNqvX293b31vS69zb2H
7jw9m8KVNp+9PYIeqEJGZaNJUqlsjQFikwIJUarheWIwLR/BRHAURLWWAwd/tNCt9PnwvMbN
LYop0FF3bmHPj9/vocNnLXY3wy76/P97Vt/lfBr+teAS6QVM4KXFNep6+lCiYVjysh+sFBdg
zNn1Mcc8sdr/cLy8QTT4V5tryf3wH2cG2btpC2suVHTe3ZbjMKTVDZNF2q+g4jKxw7PvgUzx
thmBUM33t5eLgSOcqk2d/ijjXKvN9vvpbJ64E4vytzzBDLM6Xxf6K+cc2sN+w/mvs24x+qxf
Dvq/HrkM/DWOpH5o/5WFwJpj7ZI2zbh5+1X0zP34pQ6/pRvRpxreM7lew+X2H/K3d7iW/zP7
h0CckfG14aKZ39k+MlQ/rtScyMemUxhMFyf4LsDmXhzTOdmu2F+NJ0tbpwtzYoQcv/Dh6RxA
TCzDThWH98fYd/1Cu79HCv1/vevUrmKxt+p8bNgmM584vkf1T63DGa9oF02+PMj9hCbhUBRE
8hGbeMHL6VKNcOypOewFTM9YFoH+lNCxONuXy4ydiFrXuXdGL7/wTbm+mDT1i+p1t9vkKQ71
nUnW/DQsfm4EBnLO8XEXGAf99UrhDiIt1f9/jO8u3pfpJ7+OG7VyvBy9rMz+rK++eGZl9ziO
yC71/pLxnn3qZLHEr/3fr3ECzjP7/Xmm/squBT3iN8JWdV6CZ6H/vXo6XOgFvIzh9VbkLO3c
mHGiBaaxBXxNh75o8oiRXvdnyO9sgX5ycfDCwTI5/z8Pdl/93kq56J7oEpv/CStP8kdmDmz3
KGMsjj5i/+FA48J5u759Ip740/P4HNS31UFZvAApdrQTDJcuvEgfGZ1H90Lu44zwyXvEJipM
1ueNVz+vYUX+5G/1lB1fLu+nLXTeHTEJMwcWPUKfJbyxILXP2Qqn576J+15DMY0EDAn6AiYs
LuKtU0gzSvcSdFWagwuh7d7qGDI/hgP8xIsHV7Q=