diff --git a/baystation12.dme b/baystation12.dme
index 57711d68ba8..34a7ff11be1 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -581,6 +581,7 @@
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\grille.dm"
+#include "code\game\objects\structures\inflatable.dm"
#include "code\game\objects\structures\janicart.dm"
#include "code\game\objects\structures\kitchen_spike.dm"
#include "code\game\objects\structures\ladders.dm"
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 7d880242001..3e8dae5405c 100755
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -174,6 +174,16 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Emergency Crate"
group = "Engineering"
+/datum/supply_packs/evacuation
+ name = "Inflatable barriers"
+ contains = list(/obj/item/weapon/storage/briefcase/inflatable,
+ /obj/item/weapon/storage/briefcase/inflatable,
+ /obj/item/weapon/storage/briefcase/inflatable)
+ cost = 20
+ containertype = /obj/structure/closet/crate
+ containername = "Inflatable Barrier Crate"
+ group = "Engineering"
+
/datum/supply_packs/janitor
name = "Janitorial supplies"
contains = list(/obj/item/weapon/reagent_containers/glass/bucket,
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index 6fa791782d7..126d60e1e42 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -2,6 +2,7 @@
name = "briefcase"
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
icon_state = "briefcase"
+ item_state = "briefcase"
flags = FPRINT | TABLEPASS| CONDUCT
force = 8.0
throw_speed = 1
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
new file mode 100644
index 00000000000..bc0f907a58f
--- /dev/null
+++ b/code/game/objects/structures/inflatable.dm
@@ -0,0 +1,304 @@
+/obj/item/inflatable
+ name = "inflatable wall"
+ desc = "A folded membrane which rapidly expands into a large cubical shape on activation."
+ icon = 'icons/obj/inflatable.dmi'
+ icon_state = "folded_wall"
+ w_class = 3.0
+
+ attack_self(mob/user)
+ playsound(loc, 'sound/items/zip.ogg', 75, 1)
+ user << "\blue You inflate [src]."
+ var/obj/structure/inflatable/R = new /obj/structure/inflatable(user.loc)
+ src.transfer_fingerprints_to(R)
+ R.add_fingerprint(user)
+ del(src)
+
+/obj/structure/inflatable
+ name = "inflatable wall"
+ desc = "An inflated membrane. Do not puncture."
+ density = 1
+ anchored = 1
+ opacity = 0
+
+ icon = 'icons/obj/inflatable.dmi'
+ icon_state = "wall"
+
+ var/health = 50.0
+
+
+ New(location)
+ ..()
+ update_nearby_tiles(need_rebuild=1)
+
+ Del()
+ update_nearby_tiles()
+ ..()
+
+ proc/update_nearby_tiles(need_rebuild) //Copypasta from airlock code
+ if(!air_master)
+ return 0
+ air_master.mark_for_update(get_turf(src))
+ return 1
+
+
+
+ CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ return 0
+
+ bullet_act(var/obj/item/projectile/Proj)
+ health -= Proj.damage
+ ..()
+ if(health <= 0)
+ deflate(1)
+ return
+
+
+ ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ deflate(1)
+ return
+ if(3.0)
+ if(prob(50))
+ deflate(1)
+ return
+
+
+ blob_act()
+ deflate(1)
+
+
+ meteorhit()
+ //world << "glass at [x],[y],[z] Mhit"
+ deflate(1)
+
+ attack_paw(mob/user as mob)
+ return attack_generic(user, 15)
+
+ attack_hand(mob/user as mob)
+ add_fingerprint(user)
+ return
+
+
+ proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime
+ health -= damage
+ if(health <= 0)
+ user.visible_message("[user] tears open [src]!")
+ deflate(1)
+ else //for nicer text~
+ user.visible_message("[user] tears at [src]!")
+
+ attack_alien(mob/user as mob)
+ if(islarva(user)) return
+ attack_generic(user, 15)
+
+ attack_animal(mob/user as mob)
+ if(!isanimal(user)) return
+ var/mob/living/simple_animal/M = user
+ if(M.melee_damage_upper <= 0) return
+ attack_generic(M, M.melee_damage_upper)
+
+
+ attack_slime(mob/user as mob)
+ if(!isslimeadult(user)) return
+ attack_generic(user, rand(10, 15))
+
+
+ attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(!istype(W)) return
+
+ if (is_sharp(W))
+ visible_message("\red [user] pierces [src] with [W]!")
+ deflate(1)
+ if(W.damtype == BRUTE || W.damtype == BURN)
+ hit(W.force)
+ ..()
+ return
+
+ proc/hit(var/damage, var/sound_effect = 1)
+ health = max(0, health - damage)
+ if(sound_effect)
+ playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
+ if(health <= 0)
+ deflate(1)
+
+
+ proc/deflate(var/violent=0)
+ playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
+ if(violent)
+ visible_message("[src] rapidly deflates!")
+ var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc)
+ src.transfer_fingerprints_to(R)
+ del(src)
+ else
+ //user << "\blue You slowly deflate the inflatable wall."
+ visible_message("[src] slowly deflates.")
+ spawn(50)
+ var/obj/item/inflatable/R = new /obj/item/inflatable(loc)
+ src.transfer_fingerprints_to(R)
+ del(src)
+
+ verb/hand_deflate()
+ set name = "Deflate"
+ set category = "Object"
+ set src in oview(1)
+
+ deflate()
+
+/obj/item/inflatable/door/
+ name = "inflatable door"
+ desc = "A folded membrane which rapidly expands into a simple door on activation."
+ icon = 'icons/obj/inflatable.dmi'
+ icon_state = "folded_door"
+
+ attack_self(mob/user)
+ playsound(loc, 'sound/items/zip.ogg', 75, 1)
+ user << "\blue You inflate [src]."
+ var/obj/structure/inflatable/door/R = new /obj/structure/inflatable/door(user.loc)
+ src.transfer_fingerprints_to(R)
+ R.add_fingerprint(user)
+ del(src)
+
+/obj/structure/inflatable/door //Based on mineral door code
+ name = "inflatable door"
+ density = 1
+ anchored = 1
+ opacity = 0
+
+ icon = 'icons/obj/inflatable.dmi'
+ icon_state = "door_closed"
+
+ var/state = 0 //closed, 1 == open
+ var/isSwitchingStates = 0
+
+ //Bumped(atom/user)
+ // ..()
+ // if(!state)
+ // return TryToSwitchState(user)
+ // return
+
+ attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral
+ if(isAI(user)) //so the AI can't open it
+ return
+ else if(isrobot(user)) //but cyborgs can
+ if(get_dist(user,src) <= 1) //not remotely though
+ return TryToSwitchState(user)
+
+ attack_paw(mob/user as mob)
+ return TryToSwitchState(user)
+
+ attack_hand(mob/user as mob)
+ return TryToSwitchState(user)
+
+ CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if(air_group)
+ return state
+ if(istype(mover, /obj/effect/beam))
+ return !opacity
+ return !density
+
+ proc/TryToSwitchState(atom/user)
+ if(isSwitchingStates) return
+ if(ismob(user))
+ var/mob/M = user
+ if(world.time - user.last_bumped <= 60) return //NOTE do we really need that?
+ if(M.client)
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(!C.handcuffed)
+ SwitchState()
+ else
+ SwitchState()
+ else if(istype(user, /obj/mecha))
+ SwitchState()
+
+ proc/SwitchState()
+ if(state)
+ Close()
+ else
+ Open()
+ update_nearby_tiles()
+
+ proc/Open()
+ isSwitchingStates = 1
+ //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1)
+ flick("door_opening",src)
+ sleep(10)
+ density = 0
+ opacity = 0
+ state = 1
+ update_icon()
+ isSwitchingStates = 0
+
+ proc/Close()
+ isSwitchingStates = 1
+ //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1)
+ flick("door_closing",src)
+ sleep(10)
+ density = 1
+ opacity = 0
+ state = 0
+ update_icon()
+ isSwitchingStates = 0
+
+ update_icon()
+ if(state)
+ icon_state = "door_open"
+ else
+ icon_state = "door_closed"
+
+ deflate(var/violent=0)
+ playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
+ if(violent)
+ visible_message("[src] rapidly deflates!")
+ var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc)
+ src.transfer_fingerprints_to(R)
+ del(src)
+ else
+ //user << "\blue You slowly deflate the inflatable wall."
+ visible_message("[src] slowly deflates.")
+ spawn(50)
+ var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc)
+ src.transfer_fingerprints_to(R)
+ del(src)
+
+
+/obj/item/inflatable/torn
+ name = "torn inflatable wall"
+ desc = "A folded membrane which rapidly expands into a large cubical shape on activation. It is too torn to be usable."
+ icon = 'icons/obj/inflatable.dmi'
+ icon_state = "folded_wall_torn"
+
+ attack_self(mob/user)
+ user << "\blue The inflatable wall is too torn to be inflated!"
+ add_fingerprint(user)
+
+/obj/item/inflatable/door/torn
+ name = "torn inflatable door"
+ desc = "A folded membrane which rapidly expands into a simple door on activation. It is too torn to be usable."
+ icon = 'icons/obj/inflatable.dmi'
+ icon_state = "folded_door_torn"
+
+ attack_self(mob/user)
+ user << "\blue The inflatable door is too torn to be inflated!"
+ add_fingerprint(user)
+
+/obj/item/weapon/storage/briefcase/inflatable
+ name = "inflatable barrier box"
+ desc = "Contains inflatable walls and doors."
+ icon_state = "inf_box"
+ item_state = "syringe_kit"
+ max_combined_w_class = 21
+
+ New()
+ ..()
+ new /obj/item/inflatable/door(src)
+ new /obj/item/inflatable/door(src)
+ new /obj/item/inflatable/door(src)
+ new /obj/item/inflatable(src)
+ new /obj/item/inflatable(src)
+ new /obj/item/inflatable(src)
+ new /obj/item/inflatable(src)
\ No newline at end of file
diff --git a/html/changelog.html b/html/changelog.html
index 4cbb7242b3f..ce63a24b997 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,14 @@ should be listed in the changelog upon commit though. Thanks. -->
+
+
30 March 2014
+
RavingManiac updated:
+
+ - Inflatable walls and doors added. Useful for sealing off hull breaches, but easily punctured by sharp objects and Tajarans.
+
+
+
10 March 2014
Chinsky updated:
@@ -72,7 +80,7 @@ should be listed in the changelog upon commit though. Thanks. -->
- Smartfridges added to the bar, chemistry and virology. No more clutter!
- A certain musical instrument has returned to the bar.
- - There is now a ten second delay between ingesting a pill/donut/milkshake and feeling the effects of the vile chemicals within.
+ - There is now a ten second delay between ingesting a pill/donut/milkshake and regretting it.
diff --git a/icons/obj/inflatable.dmi b/icons/obj/inflatable.dmi
new file mode 100644
index 00000000000..d80e12b7077
Binary files /dev/null and b/icons/obj/inflatable.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 941c984f1d3..d1f2d00b447 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm
index e1eb3098842..4cccf0ed5ac 100644
--- a/maps/tgstation2.dmm
+++ b/maps/tgstation2.dmm
@@ -3190,7 +3190,7 @@
"bjr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/port)
"bjs" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/port)
"bjt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/port)
-"bju" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor{dir = 2; icon_state = "yellowpatch"},/area/hallway/primary/aft)
+"bju" = (/obj/machinery/door/window/westright{name = "Inflatable Barriers"},/obj/structure/rack{layer = 2.6},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{req_one_access_txt = "11;24"},/turf/simulated/floor{dir = 2; icon_state = "yellowpatch"},/area/hallway/primary/aft)
"bjv" = (/obj/machinery/door/poddoor/shutters{dir = 2; id = "qm_warehouse"; name = "Warehouse Shutters"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/quartermaster/storage)
"bjw" = (/obj/structure/disposalpipe/wrapsortjunction{dir = 1},/turf/simulated/wall,/area/quartermaster/storage)
"bjx" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/aft)
@@ -3219,7 +3219,7 @@
"bjU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/chiefs_office)
"bjV" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/medical/sleeper)
"bjW" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/medical/sleeper)
-"bjX" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor{dir = 4; icon_state = "yellowpatch"},/area/hallway/primary/aft)
+"bjX" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor{dir = 4; icon_state = "yellowpatch"},/area/hallway/primary/aft)
"bjY" = (/obj/machinery/atmospherics/pipe/simple{dir = 6; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/medical/sleeper)
"bjZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Diagnostics Maintenance Access"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/medical/sleeper)
"bka" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -3234,6 +3234,7 @@
"bkj" = (/obj/structure/table/reinforced,/obj/item/device/gps/science,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bkk" = (/obj/structure/table/reinforced,/obj/machinery/ignition_switch{id = "Xenobio"; pixel_x = -6; pixel_y = 4},/obj/item/device/gps/science,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bkl" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Hygiene Facilities"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
+"bkm" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atm{pixel_x = -32},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
"bkn" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bko" = (/obj/machinery/portable_atmospherics/pump,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bkp" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/asmaint2)
@@ -3318,7 +3319,7 @@
"blQ" = (/obj/effect/decal/cleanable/blood/oil{amount = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
"blR" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
"blS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft)
-"blT" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
+"blT" = (/obj/structure/window/reinforced,/obj/machinery/door/window/westleft{name = "Inflatable Barriers"; req_one_access_txt = "11;24"},/obj/structure/rack{layer = 2.6},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
"blU" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access_txt = "8"},/turf/simulated/floor/engine,/area/toxins/mixing)
"blV" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2; frequency = 1379; id = "tox_airlock_pump"},/turf/simulated/floor/engine,/area/toxins/mixing)
"blW" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access_txt = "8"},/turf/simulated/floor/engine,/area/toxins/mixing)
@@ -4716,7 +4717,6 @@
"bMK" = (/obj/machinery/door/airlock/engineering{name = "Tech Storage"; req_access_txt = "23"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/storage/tech)
"bML" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medical Equipment"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bMM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/assembly/robotics)
-"bMN" = (/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
"bMO" = (/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance"; req_access_txt = "26"},/turf/simulated/floor/plating,/area/janitor)
"bMP" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3)
"bMQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3)
@@ -11053,11 +11053,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYhbHCbHCbHCaYhbKKbKLbKMbKNbKObEWbKPbLsbLkbLibKVbKVbKZbKWbKVbKDbKEbKQbKYaaabGLbLabLbbLcbLdbHVbLebLfbLgbLhbGFbIabLjbKRbGHbLlbLmbLnbLobLpbLqbLrbKUboNbKSbKTbEabPybPybKnbymbFmbBxbFlbETbBxbHcbKcbFtbKmbKlbKkbKebKBbKCbGXbGYbLxbIAbIBbIBbIubKxbEcbKwbKzbKAbmobKybKbbKabkybksbIGbWLcaxbWLbWLbWLbWLbWLbWLbIGbQDbEybMbbMbbBTbLObMdbBWbMebKvbKvbMfbLFbLHbLIbLKbMkbLLbLCbLBbLwbLvbLubLtbMsbMtbKGbMuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbGtbGubASbASbMAbMAbMAbASbASbGDbJkbJkbGibJkbJkbJkblPbKYaaabGLbMDbMEbMFbMGbMHbMIbMJbMGbMGbMKbGBbGxbGjbGHbGHbGHbGHbGHbGHbMObGHbGHbGIbGGbGEbEabPycpqasZbymbEbbBxbBxbBxbHdbHcbApbFtbHabGZbHbbBtbGVbGWbGXbGYbGRbGSbGTbGUbGNbGObEcbGPbGcbGdbmobGgbHgbHebkybksbIGbIGbwTbWLbWLbWLbWLbIGbIGbIGbNtbNubMbbMbbBTbHQbMdbBWbIPbNwbNxbNybNzbNAbHPbNCbKvbNDbNEbHrbGQbGMbNHbJbbNIbNJbNKbNLaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbNNbGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQaaaaafaaaaaabASbNRbNSbNTbASaaabGDccpcbybHWbJkbJkbJkblPbKYaaabGLbNWbNXbNYbNZbHVbOabObbOcbOdbGFbIabHYbIcbIbbIdbIdbIdbIdbIdbIdbIdbIdbIebIebIgbHhbGKbGKbGKbymbymbHwbHMbHwbymbymbHvbHobHjbHibzGbBubCUbInbIlbImbEcbIkbEcbEcbEcbEcbEcbIjbIfbIibmobHSbIsbIrbkybksbIGbINbIqbIpbXTbWRbMCbMabINbmvbOSbIWbDsbBTbBTbJmbMdbOVbJbbJbbHrbHrbHrbHrbBqbHrbOWbKvbOXbHrbIhbCWbyVbJbbOZbPabPbbJbaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbPcbPcbPcbPcbPcbPcbPdbGnbPebPcbNNbGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafcbxbGDbGDbGDbGDbJkblQblPbPiaaabPjbJpbPkbPlbPmbHVbHVbPnblOblMblNblTblSblRbgXbgXbgXbgXbgXbgXbgXbgXbgXbPwbPxbPybmqblAblzbGKbymblCblBblEblDblGblFblIblHblKblJblYblXbmabmbbmcbmdbmebmfbmgbmibmjbmkbidbmlbmmbmnbmobmpblfblebkybksbIGbmtbkkbkjbIIbIIbOPbOObOQbmvbBTbllbBTbBTbQebgnbMdbojbQgaafbQhbQibQjbQkblwbQkblvbQnbQobHrblLbgpbQqbJbbQrbQsbQsbQtaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQubGlbGlbGlbGlbGlbGlbGlbQvbGobGnbGnbGnbGnbQwbGobEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafcbxbGDbGDbGDbGDbJkblQblPbPiaaabPjbJpbPkbPlbPmbHVbHVbPnblOblMblNbkmblSblRbgXbgXbgXbgXbgXbgXbgXbgXbgXbPwbPxbPybmqblAblzbGKbymblCblBblEblDblGblFblIblHblKblJblYblXbmabmbbmcbmdbmebmfbmgbmibmjbmkbidbmlbmmbmnbmobmpblfblebkybksbIGbmtbkkbkjbIIbIIbOPbOObOQbmvbBTbllbBTbBTbQebgnbMdbojbQgaafbQhbQibQjbQkblwbQkblvbQnbQobHrblLbgpbQqbJbbQrbQsbQsbQtaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQubGlbGlbGlbGlbGlbGlbGlbQvbGobGnbGnbGnbGnbQwbGobEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDccfbJkbmKbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbGFbmIbmHbmJbgXbgXbmEbmGbmFbmCbmBbmDbfNbfNbfNbfNbfNbfNbkabnZbnXbpdboXboUboObpkbpjbpibphbpobpnbnIbpmbnIbnJbnubnvbnNbnObnLbnMbnObnSbnPbnQbnVbnWbnTbnUbmublgblyblxbmxbmwbsqbspbmAbQabQbbQabIobQcbRlbmhbojbRnbojbgnbMdbojbRoaafbQhbRpbRpblUblVblWbRtbRubRvbHrbgqbgpbAEbJbbJbbJbbJbbJbaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbKJbKJbKJbKJbKJbKJbRxbGnbKIbKJbRybGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRecbncbocbpbJkbgsbJkbJkbgtbGDbguaaaaaaaaabGFbGFbGFbGFbGFbGFbGFbGFbhybhibhhbgXbgXbhBbgwbgxbgxbgwbgvbfNbgMbgLbgDbgBbfNbfGbymbymbfCbfAbfFbfEbBzbggbgibghbfJbfHbgfbfLbgTbgVbgWbgYbgjbgkbglbgrbhebhfbhjbhEbgZbhabhcbhdbinbilbidbhHbIGbhGbhGbhFbIIbisbIJbIIbIIbIHbSlbgmbSnbojbSobgnbMdbSpbSqaafbQhbRpbSrbQkbgobQkbStbSubSvbHrbgqbgpbiubitbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbRybGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbiLbkebGDbkubGDccgbkvbkEccgccgbjFbjLbjMbjSbjTbjUbjXbYpbjqbjxbjubjybgwbjEbjDbiNbiMbiObfNbiQbiPbjpbiRbfNbkabPybjZbjYbjWbjVbiTbiTbkhbkgbkfbiDbkdbkcbkbbiDbiDbiBbiCbizbwUbivbiybivbiKbiIbiJbiGbiHbiEbiFbiGbklbidbksbIGbhIbkibhJbkobknbiAbNrbIGbIGbrhbiwbrhbrhbrhbhTbTwbhRbrhbHrbHrbHrbHrbHrbhYbHrbHrbHrbHrbHrbgqbgpbkrbkpbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabxlbwsbwsbwsbxkbwsbwsbwqbwrccgbwobwhccgbwJbwKbwHbwIbwDbwGbwtbwvbwSbwObwNbMNbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbkabPybymbvnbvlbvpbvobuQbtXbvebvdbiDbvfbvkbvjbvxbiDbvAbvFbvNbwUbvqbslbvqbiKbvrbvsbiGbvtbvubvwbiGbtTbidbksbIGbIGbIGbtUbIGbIGbuObIGbIGbUwbUxbuPbUzbUAbrhbiwbUvbvabrhbUDbUEbUFbUGbuSbgqbUIbAEbUJbAEbAEbgqbgpbUKbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbPebPcbPcbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabxlbwsbwsbwsbxkbwsbwsbwqbwrccgbwobwhccgbwJbwKbwHbwIbwDbwGbwtbwvbwSbwObwNblTbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbkabPybymbvnbvlbvpbvobuQbtXbvebvdbiDbvfbvkbvjbvxbiDbvAbvFbvNbwUbvqbslbvqbiKbvrbvsbiGbvtbvubvwbiGbtTbidbksbIGbIGbIGbtUbIGbIGbuObIGbIGbUwbUxbuPbUzbUAbrhbiwbUvbvabrhbUDbUEbUFbUGbuSbgqbUIbAEbUJbAEbAEbgqbgpbUKbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbPebPcbPcbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbAVbATbptbAybAtbqmbAdbAfbAgccgbzSbzVccgccgbAlbAmbAnbAhbAibAjbAkbYpbyNbyRbyObyxbyJbyMbyLbzDbyJbyJbyybzpbznbzAcjcbfNbkabqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbytbtDbiDbylbynbyqbwUbskbypbwYbiKbwWbwXbiGbyibwZbyhbwFbwEbwQbwPbwRbwRbwRbwVbhCbhCbhDbhCbhCbhCbhCbyubxEbhCbxQbxSbyabyjbykbyobxAbxBbxAbxCbxDbxAbxAbxAbxAbxAbxzbxybxxbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbpsbpsbptbpvbpubqmbqqbpwbpPccgbqvbqsbqubqCbqDbqwbqBbqObqQbqIbqKbqVbqUbqTbqSbstbrMbrGbribsdbsebsdbsvbsubsjbjpbshbfNbkabqZbqYbqWbqRbqXbqWbqMbqLbqPbqNbpxbppbqJbqJbsmbiDbsnbsobsibwUbskbslbscbiKbsfbsgbiGbrObrVbsbbiGbssbidbvKboNbsrbmzbmyboJboGboibnRbnKbnEbnEbnwbprbnEbnEbpqbpgbplbpabpabpebpfbpbbngbpabnjboZbnhbnhbngbnjbnibAEbnkbnmbnlbWWbnfbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXbbXcbXcbXdbEPbEPbGnbGnbXebGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbudbuhccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtxbtubtEbtCbtGbfNbtVbtHbtYbtWbfNbtRbtQbtPbtObtObtNbtMbtLbqZbtKbtJbiDbtIbtFbqJbtDbiDbtAbtBbtzbwUbtybslbsBbiKbszbsAbiGbiGbiGbiGbiGbssbidbidbidbyBcmHbPybGKbXObXPbXQbGKbGKaaaaaaaaaaaabXRbXSbTrbtlbHkbtrbTnbthbTpbTqbsLbjmbSkbIEbIEbShbHkbyVbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbXYbXZbYabHzbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa