diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 737de4abe96..de49b586def 100755
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -1035,7 +1035,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Engineering"
access = access_ce
-/*
/datum/supply_packs/eftpos
contains = list(/obj/item/device/eftpos)
name = "EFTPOS scanner"
@@ -1043,7 +1042,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containertype = /obj/structure/closet/crate
containername = "EFTPOS crate"
group = "Operations"
-*/
/datum/supply_packs/teg
contains = list(/obj/machinery/power/generator)
diff --git a/code/game/gamemodes/scoreboard.dm b/code/game/gamemodes/scoreboard.dm
index 32800cacfdc..2617fe4e04e 100644
--- a/code/game/gamemodes/scoreboard.dm
+++ b/code/game/gamemodes/scoreboard.dm
@@ -211,15 +211,7 @@
world << "The crew's final score is:"
world << "[score_crewscore]"
for(var/mob/E in player_list)
- if(E.client)
- E.scorestats()
- if(!istype(E,/mob/living/carbon/human)) continue
- if(E.z != 2) continue
- var/mob/living/carbon/human/H = E
- var/datum/money_account/player_account = H.mind.initial_account
- player_account.money += 1000
- player_account.update_balance(player_account.account_number, player_account.money)
- H << "You have been paid 1000 credits for having survived the shift."
+ if(E.client) E.scorestats()
return
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index e457b566037..ad7fc87d2f0 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -405,7 +405,7 @@ var/global/datum/controller/occupations/job_master
H.buckled.loc = H.loc
H.buckled.dir = H.dir
- var/datum/money_account/M = create_account(H, 1000, null)
+ var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null)
if(H.mind)
var/remembered_info = ""
@@ -413,11 +413,13 @@ var/global/datum/controller/occupations/job_master
remembered_info += "Your account pin is: [M.remote_access_pin]
"
remembered_info += "Your account funds are: $[M.money]
"
+ if(M.transaction_log.len)
+ var/datum/transaction/T = M.transaction_log[1]
+ remembered_info += "Your account was created: [T.time], [T.date] at [T.source_terminal]
"
H.mind.store_memory(remembered_info)
H.mind.initial_account = M
-/*
// If they're head, give them the account info for their department
if(H.mind && job.head_position)
var/remembered_info = ""
@@ -429,7 +431,7 @@ var/global/datum/controller/occupations/job_master
remembered_info += "Your department's account funds are: $[department_account.money]
"
H.mind.store_memory(remembered_info)
-*/
+
spawn(0)
H << "\blueYour account number is: [M.account_number], your account pin is: [M.remote_access_pin]"
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 4fe5694ae49..348456523eb 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -248,51 +248,48 @@
if (istype(I, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = I
visible_message("[usr] swipes a card through [src].")
-// if(vendor_account)
- var/datum/money_account/D = attempt_account_access_nosec(C.associated_account_number)
- if(D)
- var/transaction_amount = currently_vending.price
- if(transaction_amount <= D.money)
+ if(vendor_account)
+ var/datum/money_account/D = attempt_account_access_nosec(C.associated_account_number)
+ if(D)
+ var/transaction_amount = currently_vending.price
+ if(transaction_amount <= D.money)
- //transfer the money
- D.money -= transaction_amount
- D.update_balance(D.account_number,D.money)
- //vendor_account.money += transaction_amount
+ //transfer the money
+ D.money -= transaction_amount
+ vendor_account.money += transaction_amount
- //create entries in the two account transaction logs
- var/datum/transaction/T = new()
- T.target_name = "(via [src.name])"
- T.purpose = "Purchase of [currently_vending.product_name]"
- if(transaction_amount > 0)
- T.amount = "([transaction_amount])"
- else
+ //create entries in the two account transaction logs
+ var/datum/transaction/T = new()
+ T.target_name = "[vendor_account.owner_name] (via [src.name])"
+ T.purpose = "Purchase of [currently_vending.product_name]"
+ if(transaction_amount > 0)
+ T.amount = "([transaction_amount])"
+ else
+ T.amount = "[transaction_amount]"
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ D.transaction_log.Add(T)
+ //
+ T = new()
+ T.target_name = D.owner_name
+ T.purpose = "Purchase of [currently_vending.product_name]"
T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- D.transaction_log.Add(T)
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ vendor_account.transaction_log.Add(T)
-/*
- T = new()
- T.target_name = D.owner_name
- T.purpose = "Purchase of [currently_vending.product_name]"
- T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- vendor_account.transaction_log.Add(T)
-*/
-
- // Vend the item
- src.vend(src.currently_vending, usr)
- currently_vending = null
- src.updateUsrDialog()
+ // Vend the item
+ src.vend(src.currently_vending, usr)
+ currently_vending = null
+ src.updateUsrDialog()
+ else
+ usr << "\icon[src]You don't have that much money!"
else
- usr << "\icon[src]You don't have that much money!"
+ usr << "\icon[src]Unable to access account. Check security settings and try again."
else
- usr << "\icon[src]Unable to access account. Check security settings and try again."
-// else
-// usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support."
+ usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support."
/obj/machinery/vending/attack_paw(mob/user as mob)
return attack_hand(user)
@@ -893,8 +890,7 @@
/obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3,
/obj/item/seeds/poppyseed = 3,/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/whitebeetseed = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/limeseed = 3,
/obj/item/seeds/lemonseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3,
- /obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3,
- /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/coffeeaseed = 3, /obj/item/seeds/teaasperaseed = 3)
+ /obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/plastiseed = 3,/obj/item/seeds/riceseed = 3)
contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/nettleseed = 2,
/obj/item/seeds/plumpmycelium = 2,/obj/item/seeds/reishimycelium = 2)
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index b02874c0eae..c30f2e1ab1d 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -184,13 +184,16 @@ AI MODULES
/******************** Quarantine ********************/
-/obj/item/weapon/aiModule/supplied/quarantine
+/obj/item/weapon/aiModule/zeroth/quarantine
name = "'Quarantine' AI Module"
desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, organics from leaving. It is impossible to harm an organic while preventing them from leaving.'"
origin_tech = "programming=3;biotech=2;materials=4"
laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, organics from leaving. It is impossible to harm an organic while preventing them from leaving.")
- lawpos = 8
+/obj/item/weapon/aiModule/zeroth/quarantine/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
+ if(..())
+ return "The AI's existing law 0 cannot be overriden."
+ return laws[1]
/******************** OxygenIsToxicToHumans ********************/
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 267da08a411..1c7850ffa13 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -75,7 +75,7 @@
/obj/item/weapon/storage/lockbox,
/obj/item/weapon/storage/secure,
/obj/item/weapon/circuitboard,
-// /obj/item/device/eftpos,
+ /obj/item/device/eftpos,
/obj/item/device/lightreplacer,
/obj/item/device/taperecorder,
/obj/item/device/hailer,
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index a2591aff17e..245f1df0710 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1371,7 +1371,6 @@ datum/preferences
if("changeslot")
load_character(user,text2num(href_list["num"]))
- default_slot=text2num(href_list["num"])
close_load_dialog(user)
if("tab")
diff --git a/code/modules/computer3/lapvend.dm b/code/modules/computer3/lapvend.dm
index 51d51d9e7e9..7d9b14da7ef 100644
--- a/code/modules/computer3/lapvend.dm
+++ b/code/modules/computer3/lapvend.dm
@@ -213,61 +213,58 @@
if (istype(I, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = I
visible_message("[usr] swipes a card through [src].")
-// if(vendor_account)
- var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
- var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
- if(D)
- var/transaction_amount = total()
- if(transaction_amount <= D.money)
+ if(vendor_account)
+ var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
+ var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
+ if(D)
+ var/transaction_amount = total()
+ if(transaction_amount <= D.money)
- //transfer the money
- D.money -= transaction_amount
- D.update_balance(D.account_number,D.money)
- //vendor_account.money += transaction_amount
+ //transfer the money
+ D.money -= transaction_amount
+ vendor_account.money += transaction_amount
- //Transaction logs
- var/datum/transaction/T = new()
- T.target_name = "(via [src.name])"
- T.purpose = "Purchase of Laptop"
- if(transaction_amount > 0)
- T.amount = "([transaction_amount])"
- else
+ //Transaction logs
+ var/datum/transaction/T = new()
+ T.target_name = "[vendor_account.owner_name] (via [src.name])"
+ T.purpose = "Purchase of Laptop"
+ if(transaction_amount > 0)
+ T.amount = "([transaction_amount])"
+ else
+ T.amount = "[transaction_amount]"
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ D.transaction_log.Add(T)
+ //
+ T = new()
+ T.target_name = D.owner_name
+ T.purpose = "Purchase of Laptop"
T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- D.transaction_log.Add(T)
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ vendor_account.transaction_log.Add(T)
-/*
- T = new()
- T.target_name = D.owner_name
- T.purpose = "Purchase of Laptop"
- T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- vendor_account.transaction_log.Add(T)
-*/
+ newlap = new /obj/machinery/computer3/laptop/vended(src.loc)
- newlap = new /obj/machinery/computer3/laptop/vended(src.loc)
-
- choose_progs(C)
- vend()
- popup.close()
- newlap.close_computer()
- newlap = null
- cardreader = 0
- floppy = 0
- radionet = 0
- camera = 0
- network = 0
- power = 0
+ choose_progs(C)
+ vend()
+ popup.close()
+ newlap.close_computer()
+ newlap = null
+ cardreader = 0
+ floppy = 0
+ radionet = 0
+ camera = 0
+ network = 0
+ power = 0
+ else
+ usr << "\icon[src]You don't have that much money!"
else
- usr << "\icon[src]You don't have that much money!"
+ usr << "\icon[src]Unable to access account. Check security settings and try again."
else
- usr << "\icon[src]Unable to access account. Check security settings and try again."
-// else
-// usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support."
+ usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support."
/obj/machinery/lapvend/proc/total()
var/total = 0
@@ -363,50 +360,49 @@
if (istype(I, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = I
visible_message("[usr] swipes a card through [src].")
-// if(vendor_account)
- var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
- var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
- if(D)
- var/transaction_amount = total()
+ if(vendor_account)
+ var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
+ var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
+ if(D)
+ var/transaction_amount = total()
- //transfer the money
- D.money += transaction_amount
- //vendor_account.money -= transaction_amount
+ //transfer the money
+ D.money += transaction_amount
+ vendor_account.money -= transaction_amount
- //Transaction logs
- var/datum/transaction/T = new()
- T.target_name = "(via [src.name])"
- T.purpose = "Return purchase of Laptop"
- if(transaction_amount > 0)
- T.amount = "([transaction_amount])"
- else
+ //Transaction logs
+ var/datum/transaction/T = new()
+ T.target_name = "[vendor_account.owner_name] (via [src.name])"
+ T.purpose = "Return purchase of Laptop"
+ if(transaction_amount > 0)
+ T.amount = "([transaction_amount])"
+ else
+ T.amount = "[transaction_amount]"
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ D.transaction_log.Add(T)
+ //
+ T = new()
+ T.target_name = D.owner_name
+ T.purpose = "Return purchase of Laptop"
T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- D.transaction_log.Add(T)
+ T.source_terminal = src.name
+ T.date = current_date_string
+ T.time = worldtime2text()
+ vendor_account.transaction_log.Add(T)
-/*
- T = new()
- T.target_name = D.owner_name
- T.purpose = "Return purchase of Laptop"
- T.amount = "[transaction_amount]"
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = worldtime2text()
- vendor_account.transaction_log.Add(T)
-*/
- del(relap)
+ del(relap)
- vendmode = 0
- cardreader = 0
- floppy = 0
- radionet = 0
- camera = 0
- network = 0
- power = 0
+ vendmode = 0
+ cardreader = 0
+ floppy = 0
+ radionet = 0
+ camera = 0
+ network = 0
+ power = 0
+ else
+ usr << "\icon[src]Unable to access account. Check security settings and try again."
else
- usr << "\icon[src]Unable to access account. Check security settings and try again."
-// else
-// usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support."
\ No newline at end of file
+ usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support."
\ No newline at end of file
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index 967032a1e3c..42a6e43ddc4 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -98,7 +98,6 @@ log transactions
if(istype(I,/obj/item/weapon/spacecash))
//consume the money
authenticated_account.money += I:worth * I:amount
- authenticated_account.update_balance(authenticated_account.account_number,authenticated_account.money)
if(prob(50))
playsound(loc, 'sound/items/polaroid1.ogg', 50, 1)
else
@@ -197,7 +196,6 @@ log transactions
Change account security level
Make transfer
View transaction log
- Change PIN
Print balance statement
Logout
"}
else if(linked_db)
@@ -219,7 +217,6 @@ log transactions
/obj/machinery/atm/Topic(var/href, var/href_list)
if(href_list["choice"])
switch(href_list["choice"])
-
if("transfer")
if(authenticated_account && linked_db)
var/transfer_amount = text2num(href_list["funds_amount"])
@@ -231,7 +228,6 @@ log transactions
if(linked_db.charge_to_account(target_account_number, authenticated_account.owner_name, transfer_purpose, machine_id, transfer_amount))
usr << "\icon[src]Funds transfer successful."
authenticated_account.money -= transfer_amount
- authenticated_account.update_balance(authenticated_account.account_number,authenticated_account.money)
//create an entry in the account transaction log
var/datum/transaction/T = new()
@@ -244,6 +240,7 @@ log transactions
authenticated_account.transaction_log.Add(T)
else
usr << "\icon[src]Funds transfer failed."
+
else
usr << "\icon[src]You don't have enough funds to do that!"
if("view_screen")
@@ -315,7 +312,6 @@ log transactions
usr << "\blue The ATM's screen flashes, 'Maximum single withdrawl limit reached, defaulting to 10,000.'"
amount = 10000
authenticated_account.money -= amount
- authenticated_account.update_balance(authenticated_account.account_number,authenticated_account.money)
withdraw_arbitrary_sum(amount)
//create an entry in the account transaction log
@@ -372,15 +368,6 @@ log transactions
usr.drop_item()
I.loc = src
held_card = I
- if("change_pin")
- if(authenticated_account)
- var/new_pin = input(usr,"Enter new pin code", "PIN code changer") as num
- authenticated_account.remote_access_pin = new_pin
- var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET account_pin='[new_pin]' WHERE account_number='[authenticated_account.account_number]'")
- if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR changing bank pin. Error : \[[err]\]\n")
- message_admins("SQL ERROR changing bank pin. Error : \[[err]\]\n")
if("logout")
authenticated_account = null
//usr << browse(null,"window=atm")
diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm
index 4b8a4f4502d..91d8662227c 100644
--- a/code/modules/economy/Accounts.dm
+++ b/code/modules/economy/Accounts.dm
@@ -1,13 +1,12 @@
var/global/current_date_string
var/global/num_financial_terminals = 1
-//var/global/datum/money_account/station_account
-//var/global/list/datum/money_account/department_accounts = list()
+var/global/datum/money_account/station_account
+var/global/list/datum/money_account/department_accounts = list()
var/global/next_account_number = 0
var/global/obj/machinery/account_database/centcomm_account_db
-//var/global/datum/money_account/vendor_account
+var/global/datum/money_account/vendor_account
var/global/list/all_money_accounts = list()
-/*
/proc/create_station_account()
if(!station_account)
next_account_number = rand(111111, 999999)
@@ -57,40 +56,67 @@ var/global/list/all_money_accounts = list()
//the current ingame time (hh:mm) can be obtained by calling:
//worldtime2text()
-*/
-/proc/create_account(var/mob/living/carbon/human/H, var/starting_funds = 0, var/obj/machinery/account_database/source_db, )
- var/DBQuery/query = dbcon.NewQuery("SELECT account_number,account_pin,account_balance FROM characters WHERE ckey='[sql_sanitize_text(H.ckey)]' AND slot='[H.client.prefs.default_slot]'")
- if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR retrieving bank account information. Error : \[[err]\]\n")
- message_admins("SQL ERROR retrieving bank account information. Error : \[[err]\]\n")
- return
+/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/obj/machinery/account_database/source_db)
+ //create a new account
+ var/datum/money_account/M = new()
+ M.owner_name = new_owner_name
+ M.remote_access_pin = rand(1111, 111111)
+ M.money = starting_funds
- //general preferences
- while(query.NextRow())
- //create a new account
- var/datum/money_account/M = new()
- M.owner_name = H.real_name
- if(text2num(query.item[1]) == 0)
- M.remote_access_pin = rand(1111, 111111)
- M.money = 1000
- M.account_number = rand(111111, 999999)
- var/DBQuery/query2 = dbcon.NewQuery("UPDATE characters SET account_number='[M.account_number]',account_pin='[M.remote_access_pin]', account_balance='[M.money]' WHERE ckey='[sql_sanitize_text(H.ckey)]' AND slot='[H.client.prefs.default_slot]'")
- if(!query2.Execute())
- var/err = query2.ErrorMsg()
- log_game("SQL ERROR creating bank account. Error : \[[err]\]\n")
- message_admins("SQL ERROR creating bank account. Error : \[[err]\]\n")
- return
+ //create an entry in the account transaction log for when it was created
+ var/datum/transaction/T = new()
+ T.target_name = new_owner_name
+ T.purpose = "Account creation"
+ T.amount = starting_funds
+ if(!source_db)
+ //set a random date, time and location some time over the past few decades
+ T.date = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], 25[rand(10,56)]"
+ T.time = "[rand(0,24)]:[rand(11,59)]"
+ T.source_terminal = "NTGalaxyNet Terminal #[rand(111,1111)]"
- else
- M.remote_access_pin = text2num(query.item[2])
- M.money = text2num(query.item[3])
- M.account_number = text2num(query.item[1])
+ M.account_number = rand(111111, 999999)
+ else
+ T.date = current_date_string
+ T.time = worldtime2text()
+ T.source_terminal = source_db.machine_id
- all_money_accounts.Add(M)
- return M
+ M.account_number = next_account_number
+ next_account_number += rand(1,25)
+
+ //create a sealed package containing the account details
+ var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(source_db.loc)
+
+ var/obj/item/weapon/paper/R = new /obj/item/weapon/paper(P)
+ P.wrapped = R
+ R.name = "Account information: [M.owner_name]"
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:94: R.info = "Account details (confidential)
"
+ R.info = {"Account details (confidential)
+ Account holder: [M.owner_name]
+ Account number: [M.account_number]
+ Account pin: [M.remote_access_pin]
+ Starting balance: $[M.money]
+ Date and time: [worldtime2text()], [current_date_string]
+ Creation terminal ID: [source_db.machine_id]
+ Authorised NT officer overseeing creation: [source_db.held_card.registered_name]
"}
+ // END AUTOFIX
+ //stamp the paper
+ var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
+ stampoverlay.icon_state = "paper_stamp-cent"
+ if(!R.stamped)
+ R.stamped = new
+ R.stamped += /obj/item/weapon/stamp
+ R.overlays += stampoverlay
+ R.stamps += "
This paper has been stamped by the Accounts Database."
+
+ //add the account
+ M.transaction_log.Add(T)
+ all_money_accounts.Add(M)
+
+ return M
/datum/money_account
var/owner_name = ""
@@ -114,7 +140,225 @@ var/global/list/all_money_accounts = list()
var/date = ""
var/time = ""
var/source_terminal = ""
+/*
+/obj/machinery/account_database
+ name = "Accounts database"
+ desc = "Holds transaction logs, account data and all kinds of other financial records."
+ icon = 'icons/obj/virology.dmi'
+ icon_state = "analyser"
+ density = 1
+ req_one_access = list(access_hop, access_captain)
+ var/receipt_num
+ var/machine_id = ""
+ var/obj/item/weapon/card/id/held_card
+ var/access_level = 0
+ var/datum/money_account/detailed_account_view
+ var/creating_new_account = 0
+ var/activated = 1
+/obj/machinery/account_database/New()
+ ..()
+ if(!station_account)
+ create_station_account()
+
+ if(department_accounts.len == 0)
+ for(var/department in station_departments)
+ create_department_account(department)
+ if(!vendor_account)
+ create_department_account("Vendor")
+ vendor_account = department_accounts["Vendor"]
+
+ if(!current_date_string)
+ current_date_string = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], 2557"
+
+ machine_id = "[station_name()] Acc. DB #[num_financial_terminals++]"
+
+/obj/machinery/account_database/attack_hand(mob/user as mob)
+ if(ishuman(user) && !user.stat && get_dist(src,user) <= 1)
+ var/dat = "Accounts Database
"
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:171: dat += "[machine_id]
"
+ dat += {"[machine_id]
+ Confirm identity: [held_card ? held_card : "-----"]
"}
+ // END AUTOFIX
+ if(access_level > 0)
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:175: dat += "[activated ? "Disable" : "Enable"] remote access
"
+ dat += {"[activated ? "Disable" : "Enable"] remote access
+ You may not edit accounts at this terminal, only create and view them.
"}
+ // END AUTOFIX
+ if(creating_new_account)
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:178: dat += "
"
+ dat += {"
+ Return to accounts list
+ "}
+ // END AUTOFIX
+ else
+ if(detailed_account_view)
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:190: dat += "
"
+ dat += {"
+ Return to accounts list
+ Account number: #[detailed_account_view.account_number]
+ Account holder: [detailed_account_view.owner_name]
+ Account balance: $[detailed_account_view.money]
+
+
+ | Date |
+ Time |
+ Target |
+ Purpose |
+ Value |
+ Source terminal ID |
+
"}
+ // END AUTOFIX
+ for(var/datum/transaction/T in detailed_account_view.transaction_log)
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:205: dat += ""
+ dat += {"
+ | [T.date] |
+ [T.time] |
+ [T.target_name] |
+ [T.purpose] |
+ $[T.amount] |
+ [T.source_terminal] |
+
"}
+ // END AUTOFIX
+ dat += "
"
+ else
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:215: dat += "Create new account
"
+ dat += {"Create new account
+ "}
+ // END AUTOFIX
+ for(var/i=1, i<=all_money_accounts.len, i++)
+ var/datum/money_account/D = all_money_accounts[i]
+
+ // AUTOFIXED BY fix_string_idiocy.py
+ // C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:219: dat += ""
+ dat += {"
+ | #[D.account_number] |
+ [D.owner_name] |
+ View in detail |
+
"}
+ // END AUTOFIX
+ dat += "
"
+
+ user << browse(dat,"window=account_db;size=700x650")
+ else
+ user << browse(null,"window=account_db")
+
+/obj/machinery/account_database/attackby(O as obj, user as mob)//TODO:SANITY
+ if(istype(O, /obj/item/weapon/card))
+ var/obj/item/weapon/card/id/idcard = O
+ if(!held_card)
+ usr.drop_item()
+ idcard.loc = src
+ held_card = idcard
+
+ if(access_cent_captain in idcard.access)
+ access_level = 2
+ else if(access_hop in idcard.access || access_captain in idcard.access)
+ access_level = 1
+ else
+ ..()
+
+/obj/machinery/account_database/Topic(var/href, var/href_list)
+ ..()
+ if(href_list["toggle_activated"])
+ activated = !activated
+
+ if(href_list["choice"])
+ switch(href_list["choice"])
+ if("create_account")
+ creating_new_account = 1
+ if("finalise_create_account")
+ var/account_name = href_list["holder_name"]
+ var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
+ create_account(account_name, starting_funds, src)
+ if(starting_funds > 0)
+ //subtract the money
+ station_account.money -= starting_funds
+
+ //create a transaction log entry
+ var/datum/transaction/T = new()
+ T.target_name = account_name
+ T.purpose = "New account funds initialisation"
+ T.amount = "([starting_funds])"
+ T.date = current_date_string
+ T.time = worldtime2text()
+ T.source_terminal = machine_id
+ station_account.transaction_log.Add(T)
+
+ creating_new_account = 0
+ if("insert_card")
+ if(held_card)
+ held_card.loc = src.loc
+
+ if(ishuman(usr) && !usr.get_active_hand())
+ usr.put_in_hands(held_card)
+ held_card = null
+ access_level = 0
+
+ else
+ var/obj/item/I = usr.get_active_hand()
+ if (istype(I, /obj/item/weapon/card/id))
+ var/obj/item/weapon/card/id/C = I
+ usr.drop_item()
+ C.loc = src
+ held_card = C
+
+ if(access_cent_captain in C.access)
+ access_level = 2
+ else if(access_hop in C.access || access_captain in C.access)
+ access_level = 1
+ if("view_account_detail")
+ var/index = text2num(href_list["account_index"])
+ if(index && index <= all_money_accounts.len)
+ detailed_account_view = all_money_accounts[index]
+ if("view_accounts_list")
+ detailed_account_view = null
+ creating_new_account = 0
+
+ src.attack_hand(usr)
+*/
+/obj/machinery/account_database/proc/charge_to_account(var/attempt_account_number, var/source_name, var/purpose, var/terminal_id, var/amount)
+ if(!activated)
+ return 0
+ for(var/datum/money_account/D in all_money_accounts)
+ if(D.account_number == attempt_account_number && !D.suspended)
+ D.money += amount
+
+ //create a transaction log entry
+ var/datum/transaction/T = new()
+ T.target_name = source_name
+ T.purpose = purpose
+ if(amount < 0)
+ T.amount = "([amount])"
+ else
+ T.amount = "[amount]"
+ T.date = current_date_string
+ T.time = worldtime2text()
+ T.source_terminal = terminal_id
+ D.transaction_log.Add(T)
+
+ return 1
+
+ return 0
//this returns the first account datum that matches the supplied accnum/pin combination, it returns null if the combination did not match any account
/proc/attempt_account_access(var/attempt_account_number, var/attempt_pin_number, var/security_level_passed = 0,var/pin_needed=1)
diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm
index d45b5e23029..e7c16540552 100644
--- a/code/modules/economy/Accounts_DB.dm
+++ b/code/modules/economy/Accounts_DB.dm
@@ -10,7 +10,7 @@
var/machine_id = ""
var/obj/item/weapon/card/id/held_card
var/datum/money_account/detailed_account_view
-// var/creating_new_account = 0
+ var/creating_new_account = 0
var/activated = 1
proc/get_access_level()
@@ -39,32 +39,8 @@
Generated By: [held_card.registered_name], [held_card.assignment]
"}
-/obj/machinery/account_database/proc/charge_to_account(var/attempt_account_number, var/source_name, var/purpose, var/terminal_id, var/amount)
- if(!activated)
- return 0
- for(var/datum/money_account/D in all_money_accounts)
- if(D.account_number == attempt_account_number && !D.suspended)
- D.money += amount
-
- //create a transaction log entry
- var/datum/transaction/T = new()
- T.target_name = source_name
- T.purpose = purpose
- if(amount < 0)
- T.amount = "([amount])"
- else
- T.amount = "[amount]"
- T.date = current_date_string
- T.time = worldtime2text()
- T.source_terminal = terminal_id
- D.transaction_log.Add(T)
-
- return 1
-
- return 0
-
/obj/machinery/account_database/New()
-/* if(!station_account)
+ if(!station_account)
create_station_account()
if(department_accounts.len == 0)
@@ -72,7 +48,7 @@
create_department_account(department)
if(!vendor_account)
create_department_account("Vendor")
- vendor_account = department_accounts["Vendor"]*/
+ vendor_account = department_accounts["Vendor"]
if(!current_date_string)
current_date_string = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], 2557"
@@ -106,9 +82,9 @@
data["id_card"] = held_card ? text("[held_card.registered_name], [held_card.assignment]") : "-----"
data["access_level"] = get_access_level()
data["machine_id"] = machine_id
-// data["creating_new_account"] = creating_new_account
+ data["creating_new_account"] = creating_new_account
data["detailed_account_view"] = !!detailed_account_view
-// data["station_account_number"] = station_account.account_number
+ data["station_account_number"] = station_account.account_number
data["transactions"] = null
data["accounts"] = null
@@ -153,11 +129,10 @@
if(..())
return 1
-// var/datum/nanoui/ui = nanomanager.get_open_ui(usr, src, "main")
+ var/datum/nanoui/ui = nanomanager.get_open_ui(usr, src, "main")
if(href_list["choice"])
switch(href_list["choice"])
-/*
if("create_account")
creating_new_account = 1
@@ -170,16 +145,16 @@
var/amount = input("Enter the amount you wish to remove", "Silently remove funds") as num
if(detailed_account_view)
detailed_account_view.money -= amount
-*/
+
if("toggle_suspension")
if(detailed_account_view)
detailed_account_view.suspended = !detailed_account_view.suspended
callHook("change_account_status", list(detailed_account_view))
-/*
+
if("finalise_create_account")
var/account_name = href_list["holder_name"]
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
- create_account(account_name, starting_funds, src) // CHANGE account_name for human mob with new econ code
+ create_account(account_name, starting_funds, src)
if(starting_funds > 0)
//subtract the money
station_account.money -= starting_funds
@@ -192,7 +167,6 @@
ui.close()
creating_new_account = 0
-*/
if("insert_card")
if(held_card)
held_card.loc = src.loc
@@ -216,7 +190,7 @@
if("view_accounts_list")
detailed_account_view = null
-/* creating_new_account = 0
+ creating_new_account = 0
if("revoke_payroll")
var/funds = detailed_account_view.money
@@ -230,7 +204,7 @@
station_account.transaction_log.Add(station_trx)
callHook("revoke_payroll", list(detailed_account_view))
-*/
+
if("print")
var/text
var/obj/item/weapon/paper/P = new(loc)
diff --git a/code/modules/economy/utils.dm b/code/modules/economy/utils.dm
index 68d02daa9a0..846f1e926a4 100644
--- a/code/modules/economy/utils.dm
+++ b/code/modules/economy/utils.dm
@@ -38,8 +38,8 @@
if(D.remote_access_pin != attempt_pin)
return null
return D
-// else if(issilicon(src))
-// return station_account
+ else if(issilicon(src))
+ return station_account
/datum/money_account/proc/fmtBalance()
return "$[num2septext(money)]"
@@ -48,7 +48,6 @@
if(transaction_amount <= money)
//transfer the money
money -= transaction_amount
- update_balance(account_number,money)
if(dest)
dest.money += transaction_amount
@@ -84,11 +83,4 @@
return 1
else
usr << "\icon[src]You don't have that much money!"
- return 0
-
-/datum/money_account/proc/update_balance(var/account_number,var/newbalance)
- var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET account_balance='[newbalance]' WHERE account_number='[account_number]'")
- if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR charging bank account. Error : \[[err]\]\n")
- message_admins("SQL ERROR charging bank account. Error : \[[err]\]\n")
\ No newline at end of file
+ return 0
\ No newline at end of file
diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm
index e5289781cba..0fe5033ce43 100644
--- a/code/modules/research/designs/AI_module_designs.dm
+++ b/code/modules/research/designs/AI_module_designs.dm
@@ -59,7 +59,7 @@
req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100)
- build_path = /obj/item/weapon/aiModule/supplied/quarantine
+ build_path = /obj/item/weapon/aiModule/zeroth/quarantine
category = list("AI Modules")
/datum/design/reset_module
diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm
index b7e8a1fdc3c..3ceffa7cf23 100644
--- a/maps/cyberiad.dmm
+++ b/maps/cyberiad.dmm
@@ -2161,7 +2161,7 @@
"aPC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/wall,/area)
"aPD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
"aPE" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/crema_switch{pixel_x = 25},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
-"aPF" = (/obj/structure/table/woodentable,/obj/machinery/light/small/lamp{pixel_y = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
+"aPF" = (/obj/structure/table,/obj/item/device/eftpos,/turf/simulated/floor,/area/security/main)
"aPG" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
"aPH" = (/obj/structure/table/woodentable,/obj/item/weapon/nullrod,/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
"aPI" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
@@ -3239,7 +3239,7 @@
"bko" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor/carpet,/area/bridge/meeting_room)
"bkp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bkq" = (/obj/machinery/vending/snack,/turf/simulated/floor/wood,/area/bridge/meeting_room)
-"bkr" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/quarantine,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
+"bkr" = (/obj/structure/table,/obj/item/weapon/aiModule/zeroth/quarantine,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bks" = (/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bkt" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"bku" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/table,/obj/item/weapon/aiModule/supplied/freeform,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
@@ -4254,7 +4254,7 @@
"bDP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bDQ" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 4},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "13;31"; tag_door = "cargo_bay_door"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"bDR" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2"; suffix = "#2"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage)
-"bDS" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/turf/simulated/floor,/area/quartermaster/office)
+"bDS" = (/obj/structure/table/woodentable,/obj/machinery/light/small/lamp{pixel_y = 10},/obj/structure/disposalpipe/segment,/obj/item/device/eftpos,/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
"bDT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/quartermaster/office)
"bDU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/office)
"bDV" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{name = "Cargo Office"; req_access_txt = "50"},/turf/simulated/floor,/area/quartermaster/office)
@@ -4327,7 +4327,7 @@
"bFk" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/primary/central/sw)
"bFl" = (/obj/machinery/computer/security/mining{network = list("Mining Outpost")},/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/crew_quarters/heads)
"bFm" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Head of Personnel"},/turf/simulated/floor,/area/crew_quarters/heads)
-"bFn" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/turf/simulated/floor,/area/crew_quarters/heads)
+"bFn" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos,/turf/simulated/floor,/area/quartermaster/office)
"bFo" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/heads)
"bFp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads)
"bFq" = (/obj/machinery/computer/message_monitor,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/server)
@@ -12547,6 +12547,7 @@
"eHo" = (/obj/item/clothing/suit/space/syndicate/black/red,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
"eHp" = (/obj/machinery/light/small{dir = 4},/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
"eHq" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=4-Maint"; location = "3-SMine"},/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp)
+"eHr" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/obj/item/device/eftpos,/turf/simulated/floor,/area/crew_quarters/heads)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -12623,7 +12624,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWabWabWabWabWabWabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaffafhaffaaiaffafhaffaaiaaaaaiagXagYagZacFahaahbahcahdaheahfahgahhaaqahiahjahkahlahmahnaaqaaJahoahpahqahraaqahsahtahuahvahqahraaqaaqaaiaaiaaiaaiaaiaaiahwahwahwaaiaaaaaaahxahxahxahxahxaaaaaaaaaabBabBabBabBabBabBabBabBabBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWabWabWabWabWabWabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaffaffafhaaiaffaffafhaaiaaaaaiahyahzahAaaiafQahBahCabJahDahEahFahGaaqahHahIagFahJahKahLaaqahMahNahOahPahQahRahSahTahUahVahWahXahWahYaaiahwahwahwahwahwahwahwahwaaiaaaaaaahxahxahxahxahxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWabWabWabWabWabWabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiafhaffahZaaiafhaffaiaaaiaaiaaiaibaicaidaaiaaqaaqaaqaaqaieaifaigaihaaqaiiaijaikailaimainaaqaioaipaiqairaisaitaiuaivahUahVaiwahXaiwaixaaiahwahwahwahwahwahwahwahwaaiaaaaaaahxahxahxahxahxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWabWabWabWabWabWabWaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaiaiyaizaiAaiBaiyaizaiAaiCaaiaaqaaqaaqaaJaaqaaqaaqaaqaiDaiEaiFaiGaiHaaiaiIaiJaiKaiLaiMaaqaaqaiNaiOaiPaiQaisaiRaiQaivaiSahVahTahTaiTaiUaiVahwahwahwahwahwahwahwahwaaiaaaaaaahxahxahxahxahxaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWabWabWabWabWabWabWaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaiaiyaizaiAaiBaiyaizaiAaiCaaiaaqaaqaaqaaJaaqaaqaaqaaqaiDaiEaiFaiGaiHaaiaiIaiJaiKaiLaiMaaqaaqaiNaiOaPFaiQaisaiRaiQaivaiSahVahTahTaiTaiUaiVahwahwahwahwahwahwahwahwaaiaaaaaaahxahxahxahxahxaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWabWabWabWabWabWabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiWaiXaiYaffaiZajaajbajcaaiajdajeajfajgajfajfajfaaqajhajiajjajkajlajmajnajoajpajqajrajsajtajuaiPaiPaiQajvajwajxajyajzajAajBajCajDahTajEahwahwahwahwahwahwahwahwaaiaaaaaaahxahxahxahxahxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajFaaaaaaaaaajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWabWabWabWabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiajGaffajHajIajJajKajLajMaaiajNajOajPajQajRajSajTaaqajUajVajWajXajlajYajZakaakbakcakdakeakfakgaiPakhakiakjakkaklakmaknakoahTahTahTakpaiVahwahwahwahwahwahwahwahwaaiaaaaaaahxahxahxahxahxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakqakqakqacuacuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajFajFajFajFajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagragragragragragragragragraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiakraksajHaffaktajKakuakvaaiakwakxakyakzakAakBajTaaqakCakDakEakFakGajmakHakIajpakJakKajsakLakMakNakNakOaisakPakQakRakSahTahWahXahTakTaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaaaaaahxahxahxahxahxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakqaaaaabaaaakUaaaaaaaaaaaaaaaaaaaabaaaajFaaaaaaajFaaaaaaajFajFajFajFajFajFajFaaaaaaajFaaaaaaajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -12660,7 +12661,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIfaIbaJxaJyaJzaJAaJBaJCaJDaJEaJFaJGaJHaJIaEPaERaJJaySaJKaJLaJMaJNaJMaJOaJPaxCaJQaJRaJSaJTaJUaJVaJWaJXaJYaJZaJZaJZaKaaJZaJZaKbaKcaHpaaaaGwaKdaICaKeaIEaKfaGwaaaaDOaDTaDUaKgaKhaKiaKjaKkaDUaAYaaiaKlaKlaFmaKmaHAaFpaKnaFpaHAaKoaFtaKpaKpaaiaKqawzaKraaqaEjazrabZabZabZabZaKsaKtaKuaKvaKwabZabZabZaaEabZabsaKxaKyaKzaKAabZaKBaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaiaaiaaiaaiaoHaoJaaiaaiaaiaaiaaiaaiaKCaamaaiaKDaKEaKFaKGaKHaKIaKJabZabZabZabZaaEaKKaKLabZabZaKMabZaBbabZabZaaEaKNaaqaaqaKOaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiabAacOaaaaaaaaaaaaaaaaaaaaaaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaKQaKRaKSaJGaKTaJzaKTaJzaKTaJzaKTaJGaKUaKVaGdaERaKWaySaKXaKYaKZaLaaLbaLcaHhaLdaLeaLfaLgaLhaLiaLjaHnaLkaJZaJZaJZaJZaJZaJZaJZaKbaLlaHpaabaGwaLmaLnaLoaLpaLqaGwaabaDOaDTaDUaLraLsaLtaLuaLvaDUaAYaaiaaiaaiaaiaLwaGCaDWaGDaDWaGCaLxaaiaaiaaiaaiaLyaLzaLAaaqaHDaLBaLCaLCaLCaLDaLEaADabJaLFaLGabJaLHabJaLIabJaLJaxXaLKaLLaLMaaqaLNaLOaLPaLQaLQaLOaLRaLSaLSaLSaLSaLSaLTaLUaLSaLVaLWaLXaLYaLZaMaaMaaMbaMcaMdaMdaMdaMeaJuaMfaMgaMhaMiaaqaMjaMkaMlaaJaaqaMmaaqaMnaMoaMpaMqaMraMsaMtaMuaMvaMwaMxaaiaMyaMzaMAaMBaMCaMDaMEaMFaMGaMHaaaaaaaaaaaaaaaaaaaaaaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMIaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMJaJzaJzaIcaJGaKTaJzaKTaMKaKTaJzaKTaJGaKUaKVaGdaERaMLaySaySaMMaMNaMOaMNaySaySaySaySaySaMPaMQaMRaMSaHnaMTaMUaMVaJZaJZaMWaJZaMXaMYaMZaHpaaaaGwaGwaNaaNbaNaaGwaGwaaaaDOaDTaDUaNcaNdaNeaLuaNfaDUaAYaaiaDVaDWaNgaIMaGCaDWaGDaDWaGCaIOaNhaaiaaiaaiaNiaNjaNkaNlaNmabmaaiaaiaaiaaqaNnaNoaaqaNpaHGaaqaNqaaqaNraaqaNsaNtaNuaNvaNwaNxaNyaNzaNAaNBaNCaxSaNDaNCaNCaNEaNCaNzaNFaNzaJsaNzaNzaNGaNHaNIaNJaNJaNKaNLaNMaNNaNJaNOaJrabJaNPaNQaNRaNSaNTaNUaNVaaJaNWaNXaaqaNYaNZaOaaObaMraOcaMtaMuaMvaOdaOeaaiaOfaOgaOgaOhaMFaMFaMFaMFaMGaMHaaaaaaaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaJHaOiaKRaKSaJGaKTaJzaKTaJzaKTaJzaKTaJGaKUaKVaGdaERaOjaOkaOlaOmaOnaOoaDyaOpaOqaOraOsaOtaOuaOvaOwaOwaHnaOxaOyaOzaOAaOBaOCaODaOEaOFaOGayaaaaaabaaaaOHaOIaOHaaaaabaaaayaaDTaDUaOJaOKaOLaOMaONaDUaAYaaiaOOaOPaFmaOQaORaFpaOSaFpaOTaOUaOVaaiaOWaOXaOYaOZaPaaPbaPcaPdaaaaaaaaiaPeaPfaPgaaqaPhaHGaHGaHGaPiaHGaHGaHGaaJaPjaPkaaqaPlaosaaqaPmaaqaaqaPnaPoaPpaPqaPraaqaPsaPtaaqaPlaaqaaqaaqaaqaPuaaqaaqaosaaqaaqaaqaaqaPvaJuaaqaPwaNRaPxaPyaPzaPAaPBaPCaPDaPEaaqaPFaPGaPHaPIaPJaOcaMtaMuaMvaPKaPLaaiaPMaOgaOgaOhaMFaMFaMFaMFaMGaMHaaaaaaaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaJHaOiaKRaKSaJGaKTaJzaKTaJzaKTaJzaKTaJGaKUaKVaGdaERaOjaOkaOlaOmaOnaOoaDyaOpaOqaOraOsaOtaOuaOvaOwaOwaHnaOxaOyaOzaOAaOBaOCaODaOEaOFaOGayaaaaaabaaaaOHaOIaOHaaaaabaaaayaaDTaDUaOJaOKaOLaOMaONaDUaAYaaiaOOaOPaFmaOQaORaFpaOSaFpaOTaOUaOVaaiaOWaOXaOYaOZaPaaPbaPcaPdaaaaaaaaiaPeaPfaPgaaqaPhaHGaHGaHGaPiaHGaHGaHGaaJaPjaPkaaqaPlaosaaqaPmaaqaaqaPnaPoaPpaPqaPraaqaPsaPtaaqaPlaaqaaqaaqaaqaPuaaqaaqaosaaqaaqaaqaaqaPvaJuaaqaPwaNRaPxaPyaPzaPAaPBaPCaPDaPEaaqbDSaPGaPHaPIaPJaOcaMtaMuaMvaPKaPLaaiaPMaOgaOgaOhaMFaMFaMFaMFaMGaMHaaaaaaaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPNaPOaIbaJxaJGaJzaJzaPPaJzaJzaPQaJzaJGaJHaPRaPSaERaPTaPUaPVaPWaPVaPVaPVaPVaPVaPXaDyaySaPYaPYaPYaPYaPYaPZaQaaQbaHnaHnaHnaHnaPZaQcaQdaQeaQfaQgaQgaQhaQiaQjaQgaQgaQkaQeaQlaQeaQmaDUaQnaQoaQpaQqaQraaiaaiaaiaaiaQsaQtaQuaQvaQuaQwaQxaaiaaiaQyaOZaOZaOZaOZaQzaQAaQBaQCaQDaaiaQEaPfaQFaaqaaqaaqaaqaaqaaqaaqaaqaaqaaJaQGaQHaQIaQJaQKaQLaQMaQNaaqaQOaQPaQQaQRaQSaaqaQTaQUaQVaQWaQVaQXaQYaQZaRaaRbaRcaRdaReaRfaRgaaqaRhaMaaRiaRjaRkaPxaRlaPzaPAaRmaaqaRnaRoaRpaRqaRraObaObaaqaOeaMtaMuaMvaRsaRtaaiaRuaRvaRwaRxaRyaRzaMFaMFaRAaMHaaaaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPNaIbaIcaIbaIbaIdaIeaIbaIbaIcaPOaRBayaaRCaPTaCyaRDaRDaREaRDaRFaySaRGaRHaDyaRIaRJaRKaRLaRMaRNaRLaROaRLaRLaRLaRPaRLaRLaRQaRRaRSaRTaRUaRVaRTaRWaRTaRTaRTaRTaRXaRYaRZaRLaRLaSaaSbaScaSdaSeaSfaSgaShaSiaSjaSkaSkaSkaSkaSkaSkaSlaSmaSnaSoaSpaSqaSraSsaStaSuaOZaOZaSvaSwaSxaSwaSyaSzaSAaSBaSCaSDaSEaaqaSFaSGaSHaSIaSJaSJaSKaSLaSMaSNaaqaSOaSPaSQaSQaSRaaqaSSaSTaSUaSVaSWaSWaSXaSYaSZaSYaTaaTbaTcaTdaTeaaqaPvaTfaaqaTgaThaThaTiaTjaThaTkaaqaTlaTmaaqaTnaToaObaTpaaqaTqaTraTsaMvaOeaOeaaiaTtaaiabmafaaaiaaiaaiaaiaaiabAacOaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCyaTuaTvaHcaHcaHcaHcaTwaTuaCyaHeayaaTxaTyaTzaTAaTBaTCaTCaTDaySaTEaRHaTFaTGaRJaTHaTIaTJaTKaTKaYgaTLaTLaTLaTMaTNaTNaTOaTPaTQaTKaTKaTRaTSaTTaTUaTVaTVaTWaTVaTXaTSaTSaTSaTYaSbaScaSdaSeaSeaSeaSeaTZaSeaSeaSeaSeaSeaSeaUaaUbaUcaUdaUeaUfaUgaUhaUiaUjaUkaUkaUkaUlaUmaUmaUmaUnaSEaSEaSEaUoaUpaSEaaqaUqaUraSJaSJaUsaSJaUtaUuaSMaUvaaqaUwaUxaUyaUzaUAaaqaUBaUCaUDaUEaUFaUGaaqaUHaUIaUHaaqaaqaaqaosaaqaaqaPvaJuaaqaUJaNRaNRaNRaUKaNRaULaaqaaqaaqaaqaaqaaqaaqaUMaaqaMvaMvaMuaMvaUNaUOaaqaUPaUQaURaUSaUTaUUaUVaUWaUXaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -12687,8 +12688,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbyWbyXbyYbyZbudbzabudbzbbzbbzbbzbbsybuebudbudbufbzcbzdbzebzfbzgbzhbzibkebkebzjbzkbxMbxNbzlbzmbznbzobzpbzqbzrbzsbztaaibzubzvacFbzwbzxbzybzzbzAachbrebzBaaibzCbzDbzEaaqbzFaaqbzGaaqbzHbpFbzIaaibzJbzKbzLbzMbzNabJbzObzPabJabJbzQbzRabJabJbzSbzTaxSaxVbzUbzVbzWbzXbzYbzZbAabAbbAcaaibAdbAebAfbAgabmbAhbAibAjbAkbAlaaqbAmbyDbyDbAnbAobyFbApaaibAqbAqbAraaibAsbAtbAubAvbrXbAwaaibtLbAxaaiaaaaaaaaaaaaaaaaabbAybAzbyRbySbyRbAAbxkaabaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhhbhhbhhbhhbhhbhhbhhbhhbhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbABbACbABbADbAEbzabudbudbudbudbudbsybuebAFbhBbhBbAGbkebuhbzfbAHbAIbAJbAKbAKbALbAMbANbAObAPbAQbARbASbATbAUbAVbAWbAXaaibwdbuBaaibAYbAZbBabBbbBcaaiaaabxZaaiabmaaiaaiaaiaaiaaibBdaaibBebpFbzIaaibBfbBgbBgbBhbBiaaqbBjbBkbBlbBmbBnbBobBpbBlbBqbBrbBsbBtbBubBvbBwbBwbBxbBybBzbBAbBBbBCbBDbBEbBFbBGbBHbBIbBIbBJbBKbBLaaqbBMbrObrObBNbBObyFbBPbBQbBRbBSbBTaaqbBUbBVaQDbBWbjEaaiaaibBXaaiaaibBYbBZbBZbBZbCaaaibyPbySbyRbySbySbCbbyPaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhhbhhbhhbhhbhhbhhbhhbhhbhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaagaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbCcbCdbCcbCebudbzabudbzbbzbbzbbzbbsybuebCfbCgbhBbChbkebuhbzfbCibCjbCkbkeblNbkebClbxMbpFbCmaYObARbCnbCobCpbCqbCrbCsborabtbCtaaiaaibCubCvbCwaaiaaiaaabxZaaibCxbCybCzbCAbCBbCCbCDachbCEbpFbzIbwsbCFbCGbCHbCIbCJaaqbCKbCLbCMbCNbCObCPbCQbCRbCSbCTbCUbCVbCWbCXbCYbCZbDabDbbDcbDdbDeaaibDfbDgbDhbDiaaibDjbDkbDlbDmbDmaaqbDnbDobDpaaqbDqbyFbDraaqbDsbDtbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbDGbDGbDHbDIbDJbDKbDLbxjbxkbDMbxkbxjbDNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhhbhhbhhbhhbhhbhhbhhbhhbhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbDObyXbDPbDQbudbzabudbudbudbudbudbsybuebCfbDRbhBbDSbkebDTbDUbkebDVbkdbkebkebDWbxLbxMbpFbCmaYObARaaibDXbDYbDZbEabEbabmbEcbEdbEeachachbEfbEgachbrebrebEhaaibEibEjbEkbElbEmbEmbEnbEobEpbpFbEqaaiaaqbErbjEbEsbEtaaqbCKbEuaaqbEvbEwbExbEyaaqbCKbEzbEAaaqaaqaaqaosaaqaaqaaqbEBamfaaqaaiaaibECaaqaaqaaiaaiaaqaaJaaqaaqaaqaaqaaqaaqaaqbEDbEEbEFaaqbEGbEHbEIbEJbEJbEKbELbEMbENbEObEPbEQbERbESbETbETbEUbDwbEVaaibEWbEXbEYbEZaaibFaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhhbhhbhhbhhbhhbhhbhhbhhbhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbCcbCdbCcbFbbFcbFdbudbudbudbFcbudbsybuebCfbFebhBbFfbkebuhbzfbkebolbFgbkebkebFhbzkbxMbpFbFibFjbFkaaibFlbFmbFnbFobFpabmbFqbFrbFsbFtbFubFvbFwaaqaaaaaaaaaaaibFxbFybFzbFzbFAbFBbFCaaibFDbFEbzIbFFbFGbFHbFIbFJbFKbFLbFMbCLbjEbFNbFObFPbFQbjEbCKbEzbFRbFSbFTbFUbFVbFWaaqbFXbFYbFZaaqbGabGbbGcbGdbGebGfbGgbDBbGhbEJbEJbGibGjbEJbGkbGlbGmbGnbGobEJbGpbGqbGrbGsbGtbGuaaiabmaaiaaiaaibBXaaiaaibBYbCaaaibGvbGwbGxbGybGzbGAbGBbGCaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbDObyXbDPbDQbudbzabudbudbudbudbudbsybuebCfbDRbhBbFnbkebDTbDUbkebDVbkdbkebkebDWbxLbxMbpFbCmaYObARaaibDXbDYbDZbEabEbabmbEcbEdbEeachachbEfbEgachbrebrebEhaaibEibEjbEkbElbEmbEmbEnbEobEpbpFbEqaaiaaqbErbjEbEsbEtaaqbCKbEuaaqbEvbEwbExbEyaaqbCKbEzbEAaaqaaqaaqaosaaqaaqaaqbEBamfaaqaaiaaibECaaqaaqaaiaaiaaqaaJaaqaaqaaqaaqaaqaaqaaqbEDbEEbEFaaqbEGbEHbEIbEJbEJbEKbELbEMbENbEObEPbEQbERbESbETbETbEUbDwbEVaaibEWbEXbEYbEZaaibFaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhhbhhbhhbhhbhhbhhbhhbhhbhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbCcbCdbCcbFbbFcbFdbudbudbudbFcbudbsybuebCfbFebhBbFfbkebuhbzfbkebolbFgbkebkebFhbzkbxMbpFbFibFjbFkaaibFlbFmeHrbFobFpabmbFqbFrbFsbFtbFubFvbFwaaqaaaaaaaaaaaibFxbFybFzbFzbFAbFBbFCaaibFDbFEbzIbFFbFGbFHbFIbFJbFKbFLbFMbCLbjEbFNbFObFPbFQbjEbCKbEzbFRbFSbFTbFUbFVbFWaaqbFXbFYbFZaaqbGabGbbGcbGdbGebGfbGgbDBbGhbEJbEJbGibGjbEJbGkbGlbGmbGnbGobEJbGpbGqbGrbGsbGtbGuaaiabmaaiaaiaaibBXaaiaaibBYbCaaaibGvbGwbGxbGybGzbGAbGBbGCaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbGDbGEbGDbGFbGGbGHbGHbGHbGHbGHbGIbGJbGKbCfbGLbhBbGMbGNbGObGPbGQbvUbGRbGSbGTbiWbvXbGUbpFbGVbGWbARaaibGXbGYbGZbDYbHaabmbHbbHcbHdaaqbHebzybHfaaqaaaaaaaaaaaibHgbHhbHibHjbFAbFBbFCaaibHkbHlbHmbHnbHobHpbHqbHrbHsbHtbHubHvaaqaaqbHwbHxaaqaaqbCKbEzbHybHzbHAbHBbHCbHDaaqbHEbHFbHGbHHbHIbHJbHKbHKbHLbHMbHNbHObHPbDwbDwbHQbDwbHRbDwbHSbDwbHTbHUbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIeaaibIfbIgaaaaaaaaaaaibIhbIibIjbIkbIlbImbInaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIbIobIpbIqbhBbhBbIrbyXbyXbyXbIsbhBbhBbItbIubIvbhBbIwbIwbIwbIxbIwbIybIzbIAbIBbICbvXbxMbpFbIDaaqaaqaaiaaiaaiaaiaaibIEabmaaibCtabmabZaosbIFaaqaaqaaiaaiaaiaaiabmaaiaaiaaiaaiaaiaaiaaibIGbpFbIHboCaaqbIIbIJaaqaaqbCKbIKbILbIMbINbIObIPbIQbIRbFMbISbITbIUbIVbIWbIXbIYbIZbJabJbbJcbJdbJebJfbJgbGcbJhaaiaaiaaiaaiaaiaaibJiaaiaaiaaiaaJbJjaaqaaqbJkbJlbJmbJnbHYbJobJpbJqbJrbJsbJtaaibIfbJuaaaaaaaaaaaibJvbJwaaibDKaaiaaibDKaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyUbyUbyUbyUbyUbyUbyUbyUbyUaaaaaaaaaaaaaaaaaaaaabyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVbyVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvIbvIbvIbvIbvIbvIbvIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJxaabaaaaaaaaaaaabIwbJybJzbJAbJBbIybJCbJDbJEbJFbvXbxMbpFbJGbJHbJIbJJbJKbJLbJMbJNbJObJPbJQbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKeboAbKfbpFbKgbKhbKibpFbKjaaqbKkbKlbKmbKnbKobCKbKpbKqbKrbKsbKtbKubKvbKwbKxbKybKzaaqbKAbHBbKBbKCbKDbKEbKFbKGaaqbKHbGcbGcbGcbKIaaibKJbKKbKLbKMbKNbKObKPbKQaaibKRbKSbKTaaqaaqbKUbJmbKVbKWbKXbKYbKZbLabLbbLcaaibLdaaiaaaaaaaaaaaiaaiaaiaaiaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMIaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/paradise.dme b/paradise.dme
index a9b187ce2c7..94264ed7bba 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1014,7 +1014,9 @@
#include "code\modules\economy\Economy_Events.dm"
#include "code\modules\economy\Economy_Events_Mundane.dm"
#include "code\modules\economy\Economy_TradeDestinations.dm"
+#include "code\modules\economy\EFTPOS.dm"
#include "code\modules\economy\Job_Departments.dm"
+#include "code\modules\economy\POS.dm"
#include "code\modules\economy\utils.dm"
#include "code\modules\events\blob.dm"
#include "code\modules\events\borers.dm"