diff --git a/_maps/map_files/tgstation.2.1.2.dmm b/_maps/map_files/tgstation.2.1.2.dmm index afdd80be0ac..42da36f0a7d 100644 --- a/_maps/map_files/tgstation.2.1.2.dmm +++ b/_maps/map_files/tgstation.2.1.2.dmm @@ -7532,13 +7532,13 @@ "cOR" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned) "cOS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cOT" = (/turf/simulated/mineral,/area/mine/unexplored) -"cOU" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/north_outpost) +"cOU" = (/turf/space,/area) "cOV" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) "cOW" = (/turf/simulated/wall,/area/mine/abandoned) "cOX" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cOY" = (/obj/item/stack/rods,/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless,/area/mine/abandoned) -"cOZ" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space) -"cPa" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space) +"cOZ" = (/obj/structure/lattice,/turf/space,/area) +"cPa" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area) "cPb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cPc" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless,/area/mine/abandoned) "cPd" = (/obj/structure/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) @@ -7547,7 +7547,7 @@ "cPg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cPh" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless,/area/mine/abandoned) "cPi" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"cPj" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/space,/area/space) +"cPj" = (/obj/structure/barricade/wooden,/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/north_outpost) "cPk" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cPl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cPm" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) @@ -7562,7 +7562,7 @@ "cPv" = (/obj/structure/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned) "cPw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cPx" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"cPy" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/space,/area/space) +"cPy" = (/turf/simulated/floor/plating/airless,/area) "cPz" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) "cPA" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned) "cPB" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned) @@ -7779,7 +7779,7 @@ "cTE" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/wall,/area/mine/laborcamp) "cTF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp) "cTG" = (/obj/machinery/flasher{id = "Labor"; pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/simulated/wall,/area/mine/laborcamp) -"cTH" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/west_outpost) +"cTH" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area) "cTI" = (/obj/machinery/conveyor{dir = 2; id = "gulag"},/turf/simulated/floor{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp) "cTJ" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/north_outpost) "cTK" = (/obj/machinery/door/airlock/external{name = "Labor Camp Shuttle Airlock"},/turf/simulated/floor,/area/mine/laborcamp) @@ -7805,7 +7805,7 @@ "cUe" = (/turf/simulated/floor{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1; temperature = 273.15},/area/mine/explored) "cUf" = (/obj/machinery/camera{c_tag = "Labor Camp External"; dir = 4; network = list("Labor")},/turf/simulated/floor{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1; temperature = 273.15},/area/mine/explored) "cUg" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) -"cUh" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/production) +"cUh" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/space,/area) "cUi" = (/turf/simulated/floor{icon_state = "loadingarea"},/area/mine/production) "cUj" = (/obj/machinery/conveyor_switch{id = "mining_north"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) "cUk" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) @@ -8002,7 +8002,7 @@ "cXT" = (/turf/simulated/wall,/area/mine/production) "cXU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/production) "cXV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/production) -"cXW" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/machinery/camera{c_tag = "EVA"; dir = 4; network = list("MINE")},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/mine/eva) +"cXW" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/space,/area) "cXX" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor,/area/mine/eva) "cXY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor,/area/mine/eva) "cXZ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/mine/west_outpost) @@ -8139,7 +8139,7 @@ "daA" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "daB" = (/obj/machinery/conveyor{dir = 9; id = "mining_internal"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "daC" = (/obj/machinery/mineral/equipment_locker,/turf/simulated/floor,/area/mine/production) -"daD" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/mineral/equipment_locker,/turf/simulated/floor,/area/mine/production) +"daD" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4},/turf/space,/area) "daE" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/structure/plasticflaps/mining,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "daF" = (/obj/effect/decal/remains/human{desc = "Seems to be all that remains of a poor miner that didn't heed the warning signs."},/turf/simulated/floor/plating/asteroid/airless,/area/mine/explored) "daG" = (/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters) @@ -8206,14 +8206,17 @@ "dbP" = (/obj/machinery/door/window/westright{name = "Production Area"; req_access_txt = "48"},/turf/simulated/floor,/area/mine/production) "dbQ" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/camera{c_tag = "Production Room"; dir = 8; network = list("MINE")},/turf/simulated/floor,/area/mine/production) "dbR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/mine/production) +"dbS" = (/obj/structure/barricade/wooden,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/production) "dbT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/production) "dbU" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/mine/production) "dbV" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/turf/simulated/floor,/area/mine/production) "dbW" = (/obj/machinery/door/window/westleft{name = "Production Area"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor,/area/mine/production) "dbX" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"},/turf/simulated/floor,/area/mine/production) "dbY" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/mine/production) +"dbZ" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/machinery/camera{c_tag = "EVA"; dir = 4; network = list("MINE")},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/turf/simulated/floor,/area/mine/eva) "dca" = (/obj/machinery/computer/shuttle/mining,/turf/simulated/floor,/area/mine/production) "dcb" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/crate,/turf/simulated/floor,/area/mine/production) +"dcc" = (/obj/structure/barricade/wooden,/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/west_outpost) "dcd" = (/turf/simulated/wall/r_wall,/area/mine/production) "dce" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/mine/production) "dcf" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact-f"},/turf/simulated/floor,/area/mine/production) @@ -8224,11 +8227,11 @@ "dck" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/mine/production) "dcl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/mine/explored) "dcm" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/mine/explored) -"dcn" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4},/turf/space,/area/space) +"dcn" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dco" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/mine/production) "dcp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/mine/production) "dcq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/mine/production) -"dcr" = (/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/production) +"dcr" = (/obj/structure/barricade/wooden,/obj/item/weapon/paper{anchored = 0; info = "A hastily written note has been scribbled here...

Please use the ore redemption machine in the science wing for smelting. PLEASE!

--The Research Staff"; name = "URGENT!"},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/production) "dcs" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dct" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dcx" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/disposal) @@ -9299,261 +9302,261 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} (1,1,5) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOFcOGcOFaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOHcOIcOHaafaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOJcOKcOLcOMaafaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacONcOOcOPcOHaafaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacONcOQcORcOSaafaafcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaafaafaafaafaafaafaafaafaafaafcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODaaacODcODcODcODcODaaacODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOVcOPcOWcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaagaagaagaagaagaagaagaagaagaagcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODaaacODcODcODcODcODaaacODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcOXcOYcOIcOWcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaafaafaafaafaafcOZaafaafaafcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODaaaaaaaaaaaaaaaaaaaaacODcODcODcODcODaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcPacPbcPccPdcOWcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcPecPfcPgcOWcPhcPicOWcOWcOWcOWcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcPjcPkcONcPlcPmcPncOFcORcPocOWcPpcPqcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcPrcPscPkcORcPtcPucPvcPwcPocPhcPqcPxcPpcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPycPrcPzcPrcONcONcPAcPBcPtcOWcPCcPDcOWcPqcPEcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcPFcPGcONcPHcPIcPJcPKcPLcPucPMcPAcOPcOWcOWcOWcOWcOWcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcPNcPNcPOcPNcPNcPNcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcPPcPQcPRcONcPIcPqcORcPScPtcOIcOWcPLcPTcOWcPUcPVcPtcPWcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcPNcPXcPYcPZcQacPNcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafcOEcOEcOWcPncPdcQbcPpcPRcQccQdcPucPUcOFcPucQecOWcPUcPCcPVcPWcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcRjcOTcOTcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafcPNcQfcQgcQhcQicPNcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcOWcOWcOWcOWcOWcOWcPmcPtcQjcPdcPtcPLcQkcPUcPUcPwcPVcPCcOWcPUcORcPCcPWcOWcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcRjcQlcQlcQlcQlcRjcRjcRjcOTcOTcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaafcPNcPNcPNcPNcPNcQmcQncPNcPNcPNcPNcPNcPNcPNcPNcPNcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcOWcQocQpcQqcQrcOWcPPcQscPQcOWcPMcOWcQtcQucQvcOWcPtcOPcOIcPVcOIcPccPtcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaafcPNcQwcQxcQycQzcQAcQBcQCcQDcQDcQDcOUcQFcQEcQHcPNcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOWcQocQIcQJcQIcQKcOPcPCcQLcPCcOPcPtcORcQMcPVcPtcORcPKcOWcOIcQNcOIcOIcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaafcPNcQOcQDcQPcQQcQRcQScQTcPNcPNcQUcQVcQWcQWcQXcPNcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOWcQocQIcQYcQYcQKcPucPCcPhcORcQZcOPcPCcPVcQLcOIcPVcPCcOWcPCcPtcOPcOIcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRbcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaafcPNcRccRdcRecRfcRecRgcQDcRhcPNcRicUkcUjcTJcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOWcQocRmcQYcRncOWcRocOWcRpcRqcOWcPucOWcRpcRqcOWcOIcOPcOWcRrcPccOIcPLcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRbcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaafcPNcRucQDcRvcQzcQDcRwcQDcRhcPNcRicQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOWcOWcOWcOWcOWcOWcRocOWcOPcPVcOIcPCcPCcOIcRxcPtcOPcPtcOWcRycRzcRAcRBcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRbcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaafaafcPNcRCcQDcRDcQQcREcQDcQDcRhcPNcRicQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOWcRocOWcPVcPLcRFcPdcRGcPtcPVcOWcOIcPCcOWcRHcRIcRIcRJcOWcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjaaaaaaaaaaaaaaaaaaaafaafaafcPNcPNcRLcRMcPNcPNcRNcROcRNcPNcRicQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOWcRocOWcPCcPtcOPcPVcPRcPCcPvcOWcRocOWcOWcPUcOIcRIcRQcRRcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRScRTcRUcRVcRVcRVcRVcRVcRVcTpcRScRTcQlcQlcRXcRYcRZcPNcSacQDcSbcPNcRicQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSccSccSccSccSccSccRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOWcRocOWcOWcOWcOWcOWcOWcOWcOWcOWcRocOWcPUcOIcSdcOIcRJcSecRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcSwcSgcSgcSgcSgcSgcSgcSgcSgcSwcQlcQlcQlcShcShcShcPNcSicSjcSkcPNcRicQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSccSccSccSccSccScdcVdcVdcVdcWcSccRPcRPcRPcSncSncRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOWcRocRocRocRocSpcRocRocRocRocRocRocOWcPUcSdcSdcSdcPWcOWcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRScRTcSHcSrcSrcSrcSrcSrcSrcSrcRScRTcQlcQlcQlcQlcQlcPNcRNcSscRNcPNcStcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSccSucSvcSfcSxcSycSzcSAcSAcSAcSccRacRacRacRacSBcSncRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcRBcSCcSDcOWcOWcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcQlcQlcQlcQlcQlcQlcSEcSFcSGcSqcSIcSJcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaacSccSKcSLcSMcSNcSydcUcSAcSPcSQcSRcSScSTcSTcRacSBcSUcSncRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcOWcRIcRIcSdcOWcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcSEcSVcSGcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacSccSccSccSycSWcSXcSWcSycSYcSZcSycSycSccSccSccTacTbcTccSncSncRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcOWcTdcTecTdcOWcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOZaafaafaafaafaafcSccTgcThcSycTicSAcSzcTjdcTcSAdcScSycTmcTmcTmcSBcSTcSTcSncSncRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcOWcTncSCcTocOWcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccTrcTscTtcTucTvcTwcSAcTicSAcSAcTycTmcTmcSTcSTcSTcSTcSOcSncRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcTzcTAcTBcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcQlcQlcRbcRbcRjcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccTCcTDcTEcTFcTvcTGcSAcTidcRcSAcSydcQdcPdcPcSTcSTcSBcSBcSncSncRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcTLcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSycSycSycTMcSAcTNcTvcTOcUccTIcUPcRtcRtcRWcOCcSTcSBcSBcTScSncRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcTLcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRjcRjcRjcRjcRjcQlcQlcTTcTUcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcTKcTWcTVcTXcTRcSAcTicSAcSAcTPcOecSycUfcUecTYcSTcSTcSBcSBcUacSncRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcTLcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSccSccSccSAcSAcTicUccUdcSybEKcSycTmcTmcTmcSBcSBcSBcSBcRscSycRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqaaaaaacSccUbcSAcSAcTibPbbmdbPbbOjcSycTlcTkcSBcSBcSBcSBcSOcSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaafaafcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcUlcUlcUlcUlcUlcUmcVpcUqcUqcUqcSycUqcUqcUrcSBcSTcSBcSBcSOcSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcUscUtcUtcUtcUucUvcVgcUxcUwcUwcVfcUtcUzcTmcTmcSBcSBcSBcSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcUlcUqcUqcUAcUqcUBcUqcUqcUCcUDcUEcUqcUqcTmcTmcSBcSBcSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcUlcUFcUGcUHcUIcUJcUKcULcUMcUNcUOcSmcUocSlctUcUScSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcTTcUTcTUcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcUUcUVcUtcUWcUtcUXcUqcUYcUZcUZcVacVbcUqcSncSncSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaacOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafcVdcVecUpcUycVhcVicUqcVjcVkcVlcVmcVbcUqcSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacVncVocUncUlcUlcUlcUqcUqcUqcUqcUqcUqcUqcSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcVrcSIcSJcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSncSncSncSncSncSncSncSncSncSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaafaafcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcSEcSVcSGcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaacRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRkcRkcRjcRjcRjcQlcQlcTTcTUcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaafaafaafaafaafaafaafaafcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaagaagaagaagaagaagaagaagcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaafaafaafaafaafaafaafaafcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaacRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcVrcSIcSJcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaacRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcSEcSVcSGcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaacRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPaafaafaafaafaafaafaafaafaafcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRkcRkcRjcRjcRjcRjcQlcVvcVwcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPaagaagaagaagaagaagaagaagaagcOTcOTcOTcOTcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRjcRjcRjcRjcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPaafaafaafaafaafaafaafaafaafcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcQlcQlcVvcVwcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcVycRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcVzcVqcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaacRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaaaaaaaacRPcRPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaacRPcRPcRPcRPcRPaafaafaafaafaafaafaafaafaafaafaafcOTcOTcOTcOTcOTaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcTfcQlcVrcSJcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPaaacRPcRPcRPcRPcRPaagaagaagaagaagaagaagaagaagaagaagcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcTTcUTcVCcVDcUTcUTcUTcTUcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaafaafaafaafaafaafaafaafaafaafaafcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcTUcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaafaafaafaafaafaafaafaafaafaafaafcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTTcUTcUTcTUcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaagaagaagaagaagaagaagaagaagaagaagaagaagaagcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTTcUTcUTcTUcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaacOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaacRKcOEcOEcOEcOEcRKcRKaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcQlcTTcUTcTUcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaacRKcRKcOEcOEcOEcRKcRKcRKaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaacRKcRKcOEcOEcOEcRKcRKaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaacRKcRKcOEcOEcOEcRKcRKaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcVrcSIcSJcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaacOEcOEcOEcRKcRKaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcSEcSVcSGcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcVvcUTcUTcUTcUTcVwcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTaaaaaacOTcOTcOTcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcVvcVwcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcVrcSIcSJcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcSEcSVcSGcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaafaafaafaafaafaafaafaafaafaafcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaagaagaagaagaagaagaagaagaagcRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaafaafaafaafaafaafaafaafaafaafcRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcRjcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcVFcQlcVFcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRjcVGdaUcVGcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcRjcVHcVIdaPcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcVHcVIcVKcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcRScRTdaVcRVcRVcRVcRVcRVcRVcVMcVIcVKcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVNcVNcVNcVNcVNcVNcVNcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQldaUcVOcVOcVOcVOcVOcVOcVOcVPcVQcVKcRjcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVNcVRdaWcVTcVUcVRcVNcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcRScVVcSrcSrcSrcSrcSrcSrcVWcVIcVXcVYcSocRjcRjcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVNcVRcVZcWacWbcWccVNcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcRjcSocSocSocSocSocSocVHcVIcVKcSocSocSocQlcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWdcWecWfcOEcWgcVNcVNcVNcWhcVNcVNcVNcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcRjcSocSocSocSocSocSocSocVHcVIcVKcSocQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWicWfcWjcOEcWgcWkcWlcWgcWmcWgcRjcRjcOTcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcRjcSocSocSocSocSocSocSodaXcVIcVKcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWdcRacOEcWgcWocWpcWqcWmcWgcQlcRjcRjcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcRjcRjcRjcSocSocSocSocVFdaUcVFcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWrcOEcOEcWgcWgcWgcWgcWscWgcQlcQlcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcRjcSocQlcQlcVGcQlcVGcQlcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWtcOEcOEcWgcWkcWucWgcWmcWvcQlcQlcQlcQlcQlcQlcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcWxcWxcWxcQlcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWtcOEcOEcWgcWocWpcWycWmcWzcQlcQlcQlcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaadbecRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcWAcWBcWCcQlcQlcQlcRjcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWgcWDcWgcWgcWgcWgcWgcWgcWmcWEcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcVrcSIcSJcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcWFcWFcWFcWFcWFcWFcWGcWHcWHcWIcWFcWFcWFcWFdbjcQlcQlcRjcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcWgcWgcWgcWgcWJcWKcWLcWgcWkcWMcWgcWscWgcWgcWgcWNcWOcWPcWgcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcSEcSVcSGcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcWFcWQcWRcWScWTcWUcWVcWWcWXcWXcWYcWZcXacXbcSJcQlcQlcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOEcOEcWgcXccXdcXecXfcXgcXhcWgcWocWpcXicWmcWgcXjcXkcXlcXlcXlcWvcQlcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcXmcXncXocXpcXncXncQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcWFcXqcWZcXrcXscWZcWZcWZcWZcWZcXtcWZcXacXucXvcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOTcOTcOEcWgcXwcXgcXxcXycXzcXAcWgcWgcWgcWgcWmcWgcXjcXBcXBcXBcXCcWzcQlcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcXmcXDcXDcXDcXEcXncQlcXFcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTaaacOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOTcOTcRjcQlcQlcQlcWFcXGcWZcWZcXHcWZcWZcWZcWZcWZcWYcXIcXJcWYcSGcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOTcOTcOEcWgcXKcXgcXLcXgcXMcXgcXNcXCcXOcXPcXQcWgcVccXBcXRcXBcXScWEcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcXTcXTcXUcXVcXmcXWcXXcXXcXYcXncXncXncXncQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcWFcXZcWZcYacYbcYccYdcYecWZcYfcWFcWFcWFcWFcWFcVrcSJcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcVrcSJcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcWgcWgcWgcWgcWgcWgcWgcYgcYhcYicYgcYhcWgcWgcWgcWgcWgcYjcWgcWgcYkcYlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcYmcXVcYncYocYpcYqcYrcYscYscYtcYucYvcYwcYxcSJcQlcQlcQlcRbcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcWFcYycWZcYzcXscYAcYBcYCcWZcYDcTHcUgcTxcYHcYIcVCcVDcUTcUTcUTcUTcUTcTUcQlcQlcQlcQlcRjcRjcRjcOTcOTcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcQlcQlcVvcUTcUTcUTcUTcUTcUTcUTcUTcVCcVDcUTcUTcUTcUTcTUcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcWgcYJcYKcYLcXBcXScYMcXCcXScXNcVtcYOcXBcXCcXScXBcXBcYPcYQcWOcWPcYRcYScYScYScYScYScYScYScYTcYTcYTcYTcYTcYTcYTcXUcYUcYVcYWcYocYXcYYcYZcZacYscYscYscZbcZccZdcZecXvcQlcQlcQlcRbcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcRjcQlcQlcWFcWFcWFcWFcWFcZfcZgcZhcWFcWFcZicWFcWFcWFcWFcSEcSGcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOTcWgcWgcWgcWgcZjcXScZkcZlcZmcXPcZncZocZocZpcZpcZocZocZrcZscZocZscZtcZtcZtcZtcZtcZtcZtcZtcZucZucZucZucZucZucZucZvcZwcZvcZxcZwcZycZzcZAcZBcZCcZDcZEcYucZFcZGcYxcSGcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcWFcZHcZIcZJcZKcWFcVucVxcWxcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcUTcTUcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcVvcUTcVwcQlcQlcQlcQlcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcWgcXBcZMcZNcZOcZOcZNcZPcZQcZRcZOcZOcZNcZNcZTcZUcZVcZWcZXcZXcZXcZXcZXcZXcZXcZXcZYcZYcZYcZYcZYcZYcZZdaadabdacdaddaedafdagdahcXTcXTcXTcXTcXTcXTcXTcXTcVAcVEcVJcVEcVLcRbcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcRjcRjcQlcQlcQlcQlcWFdakdaldamdancWFcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcQlcVvcVwcQlcQlcQlcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcWgcWgdaodapdaocWgcWgdaqdardascWgcWgdaocVSdaocWgdaucQlcQlcQlaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaadavcXVcYodawdaxdaydazdaAdaAdaBcXTcURcTQdaEcWncWncWncWncVLcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcRjcRjcQlcQlcQlcWFcWFcWFcWFcWFcWFcQlcQlcRjcRjcRjcRjcRjcOTcOTcRjcRjcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcVrcSJcQlcQlcQlcQlcQlcQlcQlcRjcWgdaGdaHdaIdaHcWgdaJdaKdaLdaMdaNcWgdaOcYNdaQcZqcQlcQlcQlcQlcQlcQlaaaaaaaafaaaaaaaaaaafaafaafaafaafaafaafaafaafcXTdaRdaScZzcXTcXTcXTcXTdaTcXTdaTcXTcXTcWwcVLcVLcVLcVLcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcTTcUTcUTcUTcTUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcRjcRjcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcTTcUTcUTcUTcVCcVDcUTcUTcUTcTUcQlcQlcQlcQlcWgcZScZLdaYdaZcWgdbadaNdaNdbbdbccWgdbddaidbfcWgcQlcQlcQlcQlcQlcQlaafaafaafaafaafaafaafdbgdbgdbgdbgdbgaafaaaaaacXTdbhdbicZzcUhcUQdaAdaAdaAdbmdaAdaBcXTcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcTTcTUcQlcQlcVrcSJcQlcQlcVvcUTcUTcUTcUTcUTcVwcQlcRjcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTfcQlcQlcQlcQlcZqcWgcWgcWgcWgcWgdbndbodbpdbqdbccWgdaodajdaocWgcQlcQlcQlcQlcQlcQlaaaaaaaafaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaacYmcXVdbsdbtdbucXTcXTcXTcXTcXTcXTdbvcYEcXTcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcRjcRjcRjcRjcQlcQlcQlcQlcRjcRjcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcTTcUTcUTcVCcVDcUTcUTcVwcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcOTcOEcOEcOTcOTcOTcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcUTcTUcQlcQlcQlcQlcQlcQlcZqcWgcWgcWgcWgcWgcZqdbxdbxcXvdatcQlcQlcQlcQlcQlaaaaaaaaaaafaaaaaaaaaaafdbgdbgdbgdbgdbgdbAcYUdbBdbCcYodbDcZzdaDdaCdbGdbHdbIdbJdbKdbwcXTcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcRjcRjcQlcQlcQlcQlcSEcSGcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcSEcSFcSFcSFcSFcSFcSFcSGcQlcQlcQlcQlcQlcQlaafaafaafaafaafaafaafaafdbgdbgdbgdbgdbgdbOcYodbOcYocYodbDcZzcYocYodbPcYocYodbQdbRcUicXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcTfcQldaFcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaafdbgdbgdbgdbgdbgcXUcYUdbTdbUcYodbDdbVdaedaedbWdaedaedbXdbYcYFcXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcTTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcTUcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaadavcXVdcadbDcZzcYocYodcbdbFcYocYodbvdbwcXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcVrcSJcQlcQlcQlcTbcTbaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaaaaadcddcddcedcfdaedcgdchdcidcjdckdbRcYEcXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcVCcVDcUTcUTcUTdcldcmdcndcndcndcndcndcndcndcndcndcndcndcndcodcpdcqdbFdbFcYodcrdcsdctdctcTZcQGcXTcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTbcTbaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcddcdcXTcXUcXVcXTcXTcXTcXTcXTcXTcXTcXTcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaacOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTaaaaaaaaaaaacOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOFcOGcOFcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOHcOIcOHcOZcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOJcOKcOLcOMcOZcOUcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcONcOOcOPcOHcOZcOUcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcONcOQcORcOScOZcOZcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcOUcODcODcODcODcODcOUcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOVcOPcOWcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcPycPycPycPycPycPycPycPycPycPycRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcOUcODcODcODcODcODcOUcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOZcOXcOYcOIcOWcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOZcOZcOZcOZcOZcPacOZcOZcOZcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcODcODcODcODcODcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOZcTHcPbcPccPdcOWcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOZcPecPfcPgcOWcPhcPicOWcOWcOWcOWcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcUhcPkcONcPlcPmcPncOFcORcPocOWcPpcPqcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcPrcPscPkcORcPtcPucPvcPwcPocPhcPqcPxcPpcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcXWcPrcPzcPrcONcONcPAcPBcPtcOWcPCcPDcOWcPqcPEcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOZcPFcPGcONcPHcPIcPJcPKcPLcPucPMcPAcOPcOWcOWcOWcOWcOWcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcPNcPNcPOcPNcPNcPNcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOZcPPcPQcPRcONcPIcPqcORcPScPtcOIcOWcPLcPTcOWcPUcPVcPtcPWcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOZcOZcPNcPXcPYcPZcQacPNcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOZcOZcOEcOEcOWcPncPdcQbcPpcPRcQccQdcPucPUcOFcPucQecOWcPUcPCcPVcPWcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcRjcOTcOTcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOZcOZcOZcPNcQfcQgcQhcQicPNcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOWcOWcOWcOWcOWcOWcPmcPtcQjcPdcPtcPLcQkcPUcPUcPwcPVcPCcOWcPUcORcPCcPWcOWcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcRjcQlcQlcQlcQlcRjcRjcRjcOTcOTcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOZcPNcPNcPNcPNcPNcQmcQncPNcPNcPNcPNcPNcPNcPNcPNcPNcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOWcQocQpcQqcQrcOWcPPcQscPQcOWcPMcOWcQtcQucQvcOWcPtcOPcOIcPVcOIcPccPtcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOZcPNcQwcQxcQycQzcQAcQBcQCcQDcQDcQDcPjcQFcQEcQHcPNcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOWcQocQIcQJcQIcQKcOPcPCcQLcPCcOPcPtcORcQMcPVcPtcORcPKcOWcOIcQNcOIcOIcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOZcPNcQOcQDcQPcQQcQRcQScQTcPNcPNcQUcQVcQWcQWcQXcPNcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOWcQocQIcQYcQYcQKcPucPCcPhcORcQZcOPcPCcPVcQLcOIcPVcPCcOWcPCcPtcOPcOIcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRbcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOZcPNcRccRdcRecRfcRecRgcQDcRhcPNcRicUkcUjcTJcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOWcQocRmcQYcRncOWcRocOWcRpcRqcOWcPucOWcRpcRqcOWcOIcOPcOWcRrcPccOIcPLcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRbcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOZcPNcRucQDcRvcQzcQDcRwcQDcRhcPNcRicQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOWcOWcOWcOWcOWcOWcRocOWcOPcPVcOIcPCcPCcOIcRxcPtcOPcPtcOWcRycRzcRAcRBcOWcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRbcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOZcOZcPNcRCcQDcRDcQQcREcQDcQDcRhcPNcRicQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOWcRocOWcPVcPLcRFcPdcRGcPtcPVcOWcOIcPCcOWcRHcRIcRIcRJcOWcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOUcOUcOUcOUcOUcOUcOZcOZcOZcPNcPNcRLcRMcPNcPNcRNcROcRNcPNcRicQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOWcRocOWcPCcPtcOPcPVcPRcPCcPvcOWcRocOWcOWcPUcOIcRIcRQcRRcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRScRTcRUcRVcRVcRVcRVcRVcRVcTpcRScRTcQlcQlcRXcRYcRZcPNcSacQDcSbcPNcRicQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcSccSccSccSccSccSccSncSncSncSncSncSncRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOWcRocOWcOWcOWcOWcOWcOWcOWcOWcOWcRocOWcPUcOIcSdcOIcRJcSecRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcSwcSgcSgcSgcSgcSgcSgcSgcSgcSwcQlcQlcQlcShcShcShcPNcSicSjcSkcPNcRicQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcSccSccSccSccSccScdcVdcVdcVdcWcSccSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOWcRocRocRocRocSpcRocRocRocRocRocRocOWcPUcSdcSdcSdcPWcOWcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRScRTcSHcSrcSrcSrcSrcSrcSrcSrcRScRTcQlcQlcQlcQlcQlcPNcRNcSscRNcPNcStcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcSccSucSvcSfcSxcSycSzcSAcSAcSAcSccRacRacRacRacSBcSncSncSncSncSncSncRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcOWcRBcSCcSDcOWcOWcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcQlcQlcQlcQlcQlcQlcSEcSFcSGcSqcSIcSJcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOUcOUcOUcOUcOUcOUcOUcSccSKcSLcSMcSNcSydcUcSAcSPcSQcSRcSScSTcSTcRacSBcSUcSncSncSncSncSncSncSncRjcRjcRjcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcOWcRIcRIcSdcOWcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcSEcSVcSGcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOUcOUcOUcOUcOUcSccSccSccSycSWcSXcSWcSycSYcSZcSycSycSccSccSccTacTbcTccSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcOWcTdcTecTdcOWcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcPacOZcOZcOZcOZcOZcSccTgcThcSycTicSAcSzcTjdcTcSAdcScSycTmcTmcTmcSBcSTcSTcSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcRjcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcOWcTncSCcTocOWcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcSccTrcTscTtcTucTvcTwcSAcTicSAcSAcTycTmcTmcSTcSTcSTcSTcSOcSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcTzcTAcTBcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcQlcQlcRbcRbcRjcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcSccTCcTDcTEcTFcTvcTGcSAcTidcRcSAcSydcQdcPdcPcSTcSTcSBcSBcSncSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcTLcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcSccSycSycSycTMcSAcTNcTvcTOcUccTIcUPcRtcRtcRWcOCcSTcSBcSBcTScSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcTLcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRjcRjcRjcRjcRjcQlcQlcTTcTUcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcTKcTWcTVcTXcTRcSAcTicSAcSAcTPcOecSycUfcUecTYcSTcSTcSBcSBcUacSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcTLcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcSccSccSccSccSAcSAcTicUccUdcSybEKcSycTmcTmcTmcSBcSBcSBcSBcRscSycSncSncSncSncSncSncSncSncSncSncRjcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcOUcOUcSccUbcSAcSAcTibPbbmdbPbbOjcSycTlcTkcSBcSBcSBcSBcSOcSncSncSncSncSncSncSncSncSncSncSncSncRjcOZcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcUlcUlcUlcUlcUlcUmcVpcUqcUqcUqcSycUqcUqcUrcSBcSTcSBcSBcSOcSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcUscUtcUtcUtcUucUvcVgcUxcUwcUwcVfcUtcUzcTmcTmcSBcSBcSBcSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcUlcUqcUqcUAcUqcUBcUqcUqcUCcUDcUEcUqcUqcTmcTmcSBcSBcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcUlcUFcUGcUHcUIcUJcUKcULcUMcUNcUOcSmcUocSlctUcUScSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcTTcUTcTUcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcTqcTqcTqcTqcTqcUUcUVcUtcUWcUtcUXcUqcUYcUZcUZcVacVbcUqcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOZcOZcOZcOZcOZcOZcOZcOZcVdcVecUpcUycVhcVicUqcVjcVkcVlcVmcVbcUqcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOZcOUcOUcOUcOUcOUcVncVocUncUlcUlcUlcUqcUqcUqcUqcUqcUqcUqcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcQlcQlcVrcSIcSJcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOZcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcSEcSVcSGcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRkcRkcRjcRjcRjcQlcQlcTTcTUcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcPycPycPycPycPycPycPycPycRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcRjcSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcVrcSIcSJcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcRjcSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcSEcSVcSGcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcRjcSncSncSncSncSncRjcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcOUcRjcSncSncSncSncSncSncOZcOZcOZcOZcOZcOZcOZcOZcOZcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcVvcVwcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcOUcOUcOUcRjcRjcSncSncSncSncSncPycPycPycPycPycPycPycPycPycOTcOTcOTcOTcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRjcRjcRjcRjcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcOUcOUcOUcOUcRjcRjcRjcSncSncSncSncSncOZcOZcOZcOZcOZcOZcOZcOZcOZcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcOUcOUcOUcRjcRjcRjcRjcSncSncSncSncSncSncOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcRjcOUcRjcRjcRjcSncSncSncSncSncSncSncRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcQlcQlcVvcVwcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncSncSncSncSncVycSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncVzcVqcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcOUcRPcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcRPcRPcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRPcRPcRPcRPcRPcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcTfcQlcVrcSJcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncSncRjcRPcRPcRPcRPcRPcPycPycPycPycPycPycPycPycPycPycPycOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcTTcUTcVCcVDcUTcUTcUTcTUcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncSncRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncSncSncSncSncSncSncSncSncRjcRjcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcTUcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTTcUTcUTcTUcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcPycPycPycPycPycPycPycPycPycPycPycPycPycPycRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncSncOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcOZcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTTcUTcUTcTUcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcSncOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOEcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcSncSncOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcRKcOEcOEcOEcOEcRKcRKcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcQlcTTcUTcTUcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcSncSncOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcRKcRKcOEcOEcOEcRKcRKcRKcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncSncOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcRKcRKcOEcOEcOEcRKcRKcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncSncOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcRKcRKcOEcOEcOEcRKcRKcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcVrcSIcSJcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcSncSncOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOEcOEcOEcRKcRKcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcSEcSVcSGcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcVvcUTcUTcUTcUTcVwcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcVvcVwcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcVrcSIcSJcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcSEcSVcSGcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcOZcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcPycPycPycPycPycPycPycPycRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOZcOZcOZcOZcOZcOZcOZcOZcRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcRjcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQlcQlcRjcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcVFcQlcVFcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRjcVGdaUcVGcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcRjcVHcVIdaPcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcVHcVIcVKcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcRScRTdaVcRVcRVcRVcRVcRVcRVcVMcVIcVKcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVNcVNcVNcVNcVNcVNcVNcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRkcRkcRjcRjcRjcQlcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcQldaUcVOcVOcVOcVOcVOcVOcVOcVPcVQcVKcRjcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVNcVRdaWcVTcVUcVRcVNcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcQlcRScVVcSrcSrcSrcSrcSrcSrcVWcVIcVXcVYcSocRjcRjcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVNcVRcVZcWacWbcWccVNcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcRjcSocSocSocSocSocSocVHcVIcVKcSocSocSocQlcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWdcWecWfcOEcWgcVNcVNcVNcWhcVNcVNcVNcOEcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcQlcQlcQlcTfcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcQlcQlcRjcSocSocSocSocSocSocSocVHcVIcVKcSocQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWicWfcWjcOEcWgcWkcWlcWgcWmcWgcRjcRjcOTcOEcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcRjcSocSocSocSocSocSocSodaXcVIcVKcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWdcRacOEcWgcWocWpcWqcWmcWgcQlcRjcRjcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcRjcRjcRjcSocSocSocSocVFdaUcVFcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWrcOEcOEcWgcWgcWgcWgcWscWgcQlcQlcRjcRjcRjcRjcRjcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRkcRkcRjcRjcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcRjcSocQlcQlcVGcQlcVGcQlcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcVscOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWtcOEcOEcWgcWkcWucWgcWmcWvcQlcQlcQlcQlcQlcQlcRjcRjcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcTfcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcWxcWxcWxcQlcQlcQlcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWtcOEcOEcWgcWocWpcWycWmcWzcQlcQlcQlcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUdbecRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcWAcWBcWCcQlcQlcQlcRjcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcWgcWDcWgcWgcWgcWgcWgcWgcWmcWEcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcVrcSIcSJcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcRjcRjcQlcQlcWFcWFcWFcWFcWFcWFcWGcWHcWHcWIcWFcWFcWFcWFdbjcQlcQlcRjcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcWgcWgcWgcWgcWJcWKcWLcWgcWkcWMcWgcWscWgcWgcWgcWNcWOcWPcWgcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcSEcSVcSGcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcWFcWQcWRcWScWTcWUcWVcWWcWXcWXcWYcWZcXacXbcSJcQlcQlcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOEcOEcWgcXccXdcXecXfcXgcXhcWgcWocWpcXicWmcWgcXjcXkcXlcXlcXlcWvcQlcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcXmcXncXocXpcXncXncQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOTcOTcRjcQlcQlcQlcWFcXqcWZcXrcXscWZcWZcWZcWZcWZcXtcWZcXacXucXvcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOTcOTcOTcOEcWgcXwcXgcXxcXycXzcXAcWgcWgcWgcWgcWmcWgcXjcXBcXBcXBcXCcWzcQlcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcXmcXDcXDcXDcXEcXncQlcXFcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOTcOTcRjcQlcQlcQlcWFcXGcWZcWZcXHcWZcWZcWZcWZcWZcWYcXIcXJcWYcSGcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOTcOTcOEcWgcXKcXgcXLcXgcXMcXgcXNcXCcXOcXPcXQcWgcVccXBcXRcXBcXScWEcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcXTcXTcXUcXVcXmdbZcXXcXXcXYcXncXncXncXncQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcWFcXZcWZcYacYbcYccYdcYecWZcYfcWFcWFcWFcWFcWFcVrcSJcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcVrcSJcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcWgcWgcWgcWgcWgcWgcWgcYgcYhcYicYgcYhcWgcWgcWgcWgcWgcYjcWgcWgcYkcYlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcYmcXVcYncYocYpcYqcYrcYscYscYtcYucYvcYwcYxcSJcQlcQlcQlcRbcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcWFcYycWZcYzcXscYAcYBcYCcWZcYDdcccUgcTxcYHcYIcVCcVDcUTcUTcUTcUTcUTcTUcQlcQlcQlcQlcRjcRjcRjcOTcOTcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcQlcQlcVvcUTcUTcUTcUTcUTcUTcUTcUTcVCcVDcUTcUTcUTcUTcTUcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcWgcYJcYKcYLcXBcXScYMcXCcXScXNcVtcYOcXBcXCcXScXBcXBcYPcYQcWOcWPcYRcYScYScYScYScYScYScYScYTcYTcYTcYTcYTcYTcYTcXUcYUcYVcYWcYocYXcYYcYZcZacYscYscYscZbcZccZdcZecXvcQlcQlcQlcRbcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcWFcWFcWFcWFcWFcZfcZgcZhcWFcWFcZicWFcWFcWFcWFcSEcSGcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcOTcOTcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOTcWgcWgcWgcWgcZjcXScZkcZlcZmcXPcZncZocZocZpcZpcZocZocZrcZscZocZscZtcZtcZtcZtcZtcZtcZtcZtcZucZucZucZucZucZucZucZvcZwcZvcZxcZwcZycZzcZAcZBcZCcZDcZEcYucZFcZGcYxcSGcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOUcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcWFcZHcZIcZJcZKcWFcVucVxcWxcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcUTcTUcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcVvcUTcVwcQlcQlcQlcQlcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcWgcXBcZMcZNcZOcZOcZNcZPcZQcZRcZOcZOcZNcZNcZTcZUcZVcZWcZXcZXcZXcZXcZXcZXcZXcZXcZYcZYcZYcZYcZYcZYcZZdaadabdacdaddaedafdagdahcXTcXTcXTcXTcXTcXTcXTcXTcVAcVEcVJcVEcVLcRbcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOUcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcWFdakdaldamdancWFcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcQlcVvcVwcQlcQlcQlcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcWgcWgdaodapdaocWgcWgdaqdardascWgcWgdaocVSdaocWgdaucQlcQlcQlcOUcOUcOUcOUcOZcOUcOUcOUcOZcOUcOUcOUcOUcOUcOZcOUdavcXVcYodawdaxdaydazdaAdaAdaBcXTcURcTQdaEcWncWncWncWncVLcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcWFcWFcWFcWFcWFcWFcQlcQlcRjcRjcRjcRjcRjcOTcOTcRjcRjcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcRjcRjcRjcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcVrcSJcQlcQlcQlcQlcQlcQlcQlcRjcWgdaGdaHdaIdaHcWgdaJdaKdaLdaMdaNcWgdaOcYNdaQcZqcQlcQlcQlcQlcQlcQlcOUcOUcOZcOUcOUcOUcOZcOZcOZcOZcOZcOZcOZcOZcOZcXTdaRdaScZzcXTcXTcXTcXTdaTcXTdaTcXTcXTcWwcVLcVLcVLcVLcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcTTcUTcUTcUTcTUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcRjcRjcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcTTcUTcUTcUTcVCcVDcUTcUTcUTcTUcQlcQlcQlcQlcWgcZScZLdaYdaZcWgdbadaNdaNdbbdbccWgdbddaidbfcWgcQlcQlcQlcQlcQlcQlcOZcOZcOZcOZcOZcOZcOZdbgdbgdbgdbgdbgcOZcOUcOUcXTdbhdbicZzdcrdcncUQdaAdaAdbmdaAdaBcXTcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcTTcTUcQlcQlcVrcSJcQlcQlcVvcUTcUTcUTcUTcUTcVwcQlcRjcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTfcQlcQlcQlcQlcZqcWgcWgcWgcWgcWgdbndbodbpdbqdbccWgdaodajdaocWgcQlcQlcQlcQlcQlcQlcOUcOUcOZcOUcOUcOUcOZdbgdbgdbgdbgdbgcOZcOUcYmcXVdbsdbtdbucXTcXTcXTcXTcXTcXTdbvcYEcXTcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcRjcRjcRjcRjcQlcQlcQlcQlcRjcRjcRjcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcTTcUTcUTcVCcVDcUTcUTcVwcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcOTcOTcOEcOEcOTcOTcOTcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcUTcTUcQlcQlcQlcQlcQlcQlcZqcWgcWgcWgcWgcWgcZqdbxdbxcXvdatcQlcQlcQlcQlcQlcOUcOUcOUcOZcOUcOUcOUcOZdbgdbgdbgdbgdbgdbAcYUdbBdbCcYodbDcZzdaCdaCdbGdbHdbIdbJdbKdbwcXTcQlcQlcQlcQlcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcRjcRjcQlcQlcQlcQlcSEcSGcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcSEcSFcSFcSFcSFcSFcSFcSGcQlcQlcQlcQlcQlcQlcOZcOZcOZcOZcOZcOZcOZcOZdbgdbgdbgdbgdbgdbOcYodbOcYocYodbDcZzcYocYodbPcYocYodbQdbRcUicXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcTfcQldaFcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOZdbgdbgdbgdbgdbgcXUcYUdbTdbUcYodbDdbVdaedaedbWdaedaedbXdbYcYFcXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcTTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcTUcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOZdbgdbgdbgdbgdbgcOZcOUdavcXVdcadbDcZzcYocYodcbdbFcYocYodbvdbwcXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcVrcSJcQlcQlcQlcTbcTbcOUcOUcOUcOZdbgdbgdbgdbgdbgcOZcOUcOUdcddcddcedcfdaedcgdchdcidcjdckdbRcYEcXTcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcVCcVDcUTcUTcUTdcldcmdaDdaDdaDdaDdaDdaDdaDdaDdaDdaDdaDdaDdcodcpdcqdbFdbFcYodbSdcsdctdctcTZcQGcXTcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTbcTbcOZcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUdcddcdcXTcXUcXVcXTcXTcXTcXTcXTcXTcXTcXTcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOZcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcOTcOTcOTcOTcRjcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcQlcQlcQlcQlcQlcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcQlcQlcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRkcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRkcRkcRkcRkcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcRjcRjcRjcRjcRjcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRlcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU +cOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOUcOU "} (1,1,6) = {" diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 8af45a38ba4..6625e4479ea 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -322,14 +322,71 @@ return /* - Alt-click to ventcrawl - Monkeys, aliens, and slimes - This is a little buggy but somehow that just seems to plague ventcrawl. - I am sorry, I don't know why. + Alt-click to ventcrawl */ -/obj/machinery/atmospherics/unary/vent_pump/AltClick(var/mob/living/carbon/ML) - if(istype(ML)) - var/list/ventcrawl_verbs = list(/mob/living/carbon/monkey/verb/ventcrawl, /mob/living/carbon/alien/verb/ventcrawl, /mob/living/carbon/slime/verb/ventcrawl) - if(length(ML.verbs & ventcrawl_verbs)) // alien queens have this removed, an istype would be complicated - ML.handle_ventcrawl(src) - return - ..() +/obj/machinery/atmospherics/unary/vent_pump/AltClick(var/mob/living/L) + if(!L.ventcrawler || !isliving(L) || !Adjacent(L)) + return + if(L.stat) + L << "You must be conscious to do this!" + return + if(L.lying) + L << "You can't vent crawl while you're stunned!" + return + if(welded) + L << "That vent is welded shut." + return + + if(!network || !network.normal_members.len) + L << "This vent is not connected to anything." + return + + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in network.normal_members) + if(temp_vent.welded) + continue + if(temp_vent in loc) + continue + var/turf/T = get_turf(temp_vent) + + if(!T || T.z != loc.z) + continue + + var/i = 1 + var/index = "[T.loc.name]\[[i]\]" + while(index in vents) + i++ + index = "[T.loc.name]\[[i]\]" + vents[index] = temp_vent + if(!vents.len) + L << " There are no available vents to travel to, they could be welded. " + return + + var/obj/selection = input(L,"Select a destination.", "Duct System") as null|anything in sortAssoc(vents) + if(!selection) return + + if(!Adjacent(L)) + return + if(iscarbon(L) && L.ventcrawler < 2) // lesser ventcrawlers can't bring items + for(var/obj/item/carried_item in L.contents) + if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant + L << " You can't be carrying items or have items equipped when vent crawling!" + return + + var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection] + if(!target_vent) + return + + for(var/mob/O in viewers(L, null)) + O.show_message(text("[L] scrambles into the ventillation ducts!"), 1) + + for(var/mob/O in hearers(target_vent,null)) + O.show_message("You hear something squeezing through the ventilation ducts.",2) + + if(target_vent.welded) //the vent can be welded while they scrolled through the list. + target_vent = src + L << " The vent you were heading to appears to be welded." + L.loc = target_vent.loc + var/area/new_area = get_area(loc) + if(new_area) + new_area.Entered(L) diff --git a/code/FEA/DEBUG_REMOVE_BEFORE_RELEASE.dm b/code/FEA/DEBUG_REMOVE_BEFORE_RELEASE.dm deleted file mode 100644 index 4c173b7b7ea..00000000000 --- a/code/FEA/DEBUG_REMOVE_BEFORE_RELEASE.dm +++ /dev/null @@ -1,645 +0,0 @@ -#define DEBUG - -datum/air_group/var/marker -datum/air_group/var/debugging = 0 -datum/pipe_network/var/marker - -datum/gas_mixture - var/turf/parent - -/* -turf/simulated - New() - ..() - - if(air) - air.parent = src -*/ -obj/machinery/door - verb - toggle_door() - set src in world - if(density) - open() - else - close() - -turf/space - verb - create_floor() - set src in world - new /turf/simulated/floor(src) - - create_meteor(direction as num) - set src in world - - var/obj/effect/meteor/M = new( src ) - walk(M, direction,10) - - -turf/simulated/wall - verb - create_floor() - set src in world - new /turf/simulated/floor(src) - -obj/item/weapon/tank - verb - adjust_mixture(temperature as num, target_toxin_pressure as num, target_oxygen_pressure as num) - set src in world - if(!air_contents) - usr << "\red ERROR: no gas_mixture associated with this tank" - return null - - air_contents.temperature = temperature - air_contents.oxygen = target_oxygen_pressure*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - air_contents.toxins = target_toxin_pressure*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - -turf/simulated/floor - verb - parent_info() - set src in world - if(parent) - usr << "[x],[y] parent: Processing: [parent.group_processing]" - if(parent.members) - usr << "Members: [parent.members.len]" - else - usr << "Members: None?" - if(parent.borders) - usr << "Borders: [parent.borders.len]" - else - usr << "Borders: None" - if(parent.length_space_border) - usr << "Space Borders: [parent.space_borders.len], Space Length: [parent.length_space_border]" - else - usr << "Space Borders: None" - else - usr << "\blue [x],[y] has no parent air group." - - verb - create_wall() - set src in world - new /turf/simulated/wall(src) - verb - adjust_mixture(temp as num, tox as num, oxy as num) - set src in world - var/datum/gas_mixture/stuff = return_air() - stuff.temperature = temp - stuff.toxins = tox - stuff.oxygen = oxy - - verb - boom(inner_range as num, middle_range as num, outer_range as num) - set src in world - explosion(src,inner_range,middle_range,outer_range,outer_range) - - verb - flag_parent() - set src in world - if(parent) - parent.debugging = !parent.debugging - usr << "[parent.members.len] set to [parent.debugging]" - verb - small_explosion() - set src in world - explosion(src, 1, 2, 3, 3) - - verb - large_explosion() - set src in world - explosion(src, 3, 5, 7, 5) - -obj/machinery/portable_atmospherics/canister - verb/test_release() - set src in world - set category = "Minor" - - valve_open = 1 - release_pressure = 1000 -/* -obj/machinery/atmospherics - unary - heat_reservoir - verb - toggle_power() - set src in world - set category = "Minor" - - on = !on - - update_icon() - adjust_temp(temp as num) - set src in world - set category = "Minor" - - current_temperature = temp - cold_sink - verb - toggle_power() - set src in world - set category = "Minor" - - on = !on - - update_icon() - adjust_temp(temp as num) - set src in world - set category = "Minor" - - current_temperature = temp - vent_pump - verb - toggle_power() - set src in world - set category = "Minor" - - on = !on - - update_icon() - - toggle_direction() - set src in world - set category = "Minor" - - pump_direction = !pump_direction - - update_icon() - - change_pressure_parameters() - set src in world - set category = "Minor" - - usr << "current settings: PC=[pressure_checks], EB=[external_pressure_bound], IB=[internal_pressure_bound]" - - var/mode = input(usr, "Select an option:") in list("Bound External", "Bound Internal", "Bound Both") - - switch(mode) - if("Bound External") - pressure_checks = 1 - external_pressure_bound = input(usr, "External Pressure Bound?") as num - if("Bound Internal") - pressure_checks = 2 - internal_pressure_bound = input(usr, "Internal Pressure Bound?") as num - else - pressure_checks = 3 - external_pressure_bound = input(usr, "External Pressure Bound?") as num - internal_pressure_bound = input(usr, "Internal Pressure Bound?") as num - - outlet_injector - verb - toggle_power() - set src in world - set category = "Minor" - - on = !on - - update_icon() - verb - trigger_inject() - set src in world - set category = "Minor" - - inject() - - vent_scrubber - verb - toggle_power() - set src in world - set category = "Minor" - - on = !on - - update_icon() - - toggle_scrubbing() - set src in world - set category = "Minor" - - scrubbing = !scrubbing - - update_icon() - - change_rate(amount as num) - set src in world - set category = "Minor" - - volume_rate = amount - - mixer - verb - toggle() - set src in world - set category = "Minor" - - on = !on - - update_icon() - - change_pressure(amount as num) - set src in world - set category = "Minor" - - target_pressure = amount - - change_ratios() - set src in world - set category = "Minor" - - if(node_in1) - var/node_ratio = input(usr, "Node 1 Ratio? ([dir2text(get_dir(src, node_in1))])") as num - node_ratio = min(max(0,node_ratio),1) - - node1_concentration = node_ratio - node2_concentration = 1-node_ratio - else - node2_concentration = 1 - node1_concentration = 0 - - usr << "Node 1: [node1_concentration], Node 2: [node2_concentration]" - - - filter - verb - toggle() - set src in world - set category = "Minor" - - on = !on - - update_icon() - - change_pressure(amount as num) - set src in world - set category = "Minor" - - target_pressure = amount - - unary/oxygen_generator - verb - toggle() - set src in world - set category = "Minor" - - on = !on - - update_icon() - - change_rate(amount as num) - set src in world - set category = "Minor" - - oxygen_content = amount - binary/pump - verb - debug() - set src in world - set category = "Minor" - - world << "Debugging: [x],[y]" - - if(node1) - world << "Input node: [node1.x],[node1.y] [network1]" - if(node2) - world << "Output node: [node2.x],[node2.y] [network2]" - - toggle() - set src in world - set category = "Minor" - - on = !on - - update_icon() - change_pressure(amount as num) - set src in world - set category = "Minor" - - target_pressure = amount - - valve - verb - toggle() - set src in world - set category = "Minor" - - if(open) - close() - else - open() - network_data() - set src in world - set category = "Minor" - - world << "\blue [x],[y]" - world << "network 1: [network_node1.normal_members.len], [network_node1.line_members.len]" - for(var/obj/O in network_node1.normal_members) - world << "member: [O.x], [O.y]" - world << "network 2: [network_node2.normal_members.len], [network_node2.line_members.len]" - for(var/obj/O in network_node2.normal_members) - world << "member: [O.x], [O.y]" - pipe - verb - destroy() - set src in world - set category = "Minor" - - del(src) - - pipeline_data() - set src in world - set category = "Minor" - - if(parent) - usr << "[x],[y] is in a pipeline with [parent.members.len] members ([parent.edges.len] edges)! Volume: [parent.air.volume]" - usr << "Pressure: [parent.air.return_pressure()], Temperature: [parent.air.temperature]" - usr << "[parent.air.oxygen], [parent.air.toxins], [parent.air.nitrogen], [parent.air.carbon_dioxide] .. [parent.alert_pressure]" -*/ -mob - verb - flag_all_pipe_networks() - set category = "Debug" - - for(var/datum/pipe_network/network in pipe_networks) - network.update = 1 - - mark_pipe_networks() - set category = "Debug" - - for(var/datum/pipe_network/network in pipe_networks) - network.marker = rand(1,4) - - for(var/obj/machinery/atmospherics/pipe/P in world) - P.overlays.Cut() - - var/datum/pipe_network/master = P.return_network() - if(master) - P.overlays += icon('icons/Testing/atmos_testing.dmi',"marker[master.marker]") - else - world << "error" - P.overlays += icon('icons/Testing/atmos_testing.dmi',"marker0") - - for(var/obj/machinery/atmospherics/valve/V in world) - V.overlays.Cut() - - if(V.network_node1) - V.overlays += icon('icons/Testing/atmos_testing.dmi',"marker[V.network_node1.marker]") - else - V.overlays += icon('icons/Testing/atmos_testing.dmi',"marker0") - - if(V.network_node2) - V.overlays += icon('icons/Testing/atmos_testing.dmi',"marker[V.network_node2.marker]") - else - V.overlays += icon('icons/Testing/atmos_testing.dmi',"marker0") - -turf/simulated - var/fire_verbose = 0 - - verb - mark_direction() - set src in world - overlays.Cut() - for(var/direction in list(NORTH,SOUTH,EAST,WEST)) - if(group_border&direction) - overlays += icon('icons/Testing/turf_analysis.dmi',"red_arrow",direction) - else if(air_check_directions&direction) - overlays += icon('icons/Testing/turf_analysis.dmi',"arrow",direction) - air_status() - set src in world - set category = "Minor" - var/datum/gas_mixture/GM = return_air() - usr << "\blue @[x],[y] ([GM.group_multiplier]): O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(active_hotspot)?("\red BURNING"):(null)]" - for(var/datum/gas/trace_gas in GM.trace_gases) - usr << "[trace_gas.type]: [trace_gas.moles]" - - force_temperature(temp as num) - set src in world - set category = "Minor" - if(parent&&parent.group_processing) - parent.suspend_group_processing() - - air.temperature = temp - - spark_temperature(temp as num, volume as num) - set src in world - set category = "Minor" - - hotspot_expose(temp, volume) - - fire_verbose() - set src in world - set category = "Minor" - - fire_verbose = !fire_verbose - usr << "[x],[y] now [fire_verbose]" - - add_sleeping_agent(amount as num) - set src in world - set category = "Minor" - - if(amount>1) - var/datum/gas_mixture/adding = new - var/datum/gas/sleeping_agent/trace_gas = new - - trace_gas.moles = amount - adding.trace_gases += trace_gas - adding.temperature = T20C - - assume_air(adding) - -obj/indicator - icon = 'icons/Testing/air_meter.dmi' - var/measure = "temperature" - anchored = 1 - - process() - icon_state = measurement() - - proc/measurement() - var/turf/T = loc - if(!isturf(T)) return - var/datum/gas_mixture/GM = T.return_air() - switch(measure) - if("temperature") - if(GM.temperature < 0) - return "error" - return "[round(GM.temperature/100+0.5)]" - if("oxygen") - if(GM.oxygen < 0) - return "error" - return "[round(GM.oxygen/MOLES_CELLSTANDARD*10+0.5)]" - if("plasma") - if(GM.toxins < 0) - return "error" - return "[round(GM.toxins/MOLES_CELLSTANDARD*10+0.5)]" - if("nitrogen") - if(GM.nitrogen < 0) - return "error" - return "[round(GM.nitrogen/MOLES_CELLSTANDARD*10+0.5)]" - else - return "[round((GM.total_moles())/MOLES_CELLSTANDARD*10+0.5)]" - - - Click() - process() - - -obj/window - verb - destroy() - set category = "Minor" - set src in world - del(src) - -mob - sight = SEE_OBJS|SEE_TURFS - - verb - update_indicators() - set category = "Debug" - if(!air_master) - usr << "Cannot find air_system" - return - - for(var/obj/indicator/T in world) - T.process() - change_indicators() - set category = "Debug" - if(!air_master) - usr << "Cannot find air_system" - return - - var/str = input("Select") in list("oxygen", "nitrogen","plasma","all","temperature") - - for(var/obj/indicator/T in world) - T.measure = str - T.process() - - fire_report() - set category = "Debug" - usr << "\b \red Fire Report" - for(var/obj/effect/hotspot/flame in world) - usr << "[flame.x],[flame.y]: [flame.temperature]K, [flame.volume] L - [flame.loc:air:temperature]" - - process_cycle() - set category = "Debug" - if(!master_controller) - usr << "Cannot find master_controller" - return - - master_controller.process() - update_indicators() - - process_cycles(amount as num) - set category = "Debug" - if(!master_controller) - usr << "Cannot find master_controller" - return - - var/start_time = world.timeofday - - for(var/i=1; i<=amount; i++) - master_controller.process() - - world << "Ended [amount] cycles in [(world.timeofday-start_time)/10] seconds. [(world.timeofday-start_time)/10-amount] calculation lag" - - update_indicators() - - process_updates_early() - set category = "Debug" - if(!air_master) - usr << "Cannot find air_system" - return - - air_master.process_update_tiles() - air_master.process_rebuild_select_groups() - - mark_group_delay() - set category = "Debug" - if(!air_master) - usr << "Cannot find air_system" - return - - for(var/datum/air_group/group in air_master.air_groups) - group.marker = 0 - - for(var/turf/simulated/floor/S in world) - S.icon = 'icons/Testing/turf_analysis.dmi' - if(S.parent) - if(S.parent.group_processing) - if (S.parent.check_delay < 2) - S.parent.marker=1 - else if (S.parent.check_delay < 5) - S.parent.marker=2 - else if (S.parent.check_delay < 15) - S.parent.marker=3 - else if (S.parent.check_delay < 30) - S.parent.marker=4 - else - S.parent.marker=5 - if(S.parent.borders && S.parent.borders.Find(S)) - S.icon_state = "on[S.parent.marker]_border" - else - S.icon_state = "on[S.parent.marker]" - - else - if (S.check_delay < 2) - S.icon_state= "on1_border" - else if (S.check_delay < 5) - S.icon_state= "on2_border" - else if (S.check_delay < 15) - S.icon_state= "on3_border" - else if (S.check_delay < 30) - S.icon_state= "on4_border" - else - S.icon_state = "suspended" - else - if(S.processing) - S.icon_state = "individual_on" - else - S.icon_state = "individual_off" - - - mark_groups() - set category = "Debug" - if(!air_master) - usr << "Cannot find air_system" - return - - for(var/datum/air_group/group in air_master.air_groups) - group.marker = 0 - - for(var/turf/simulated/floor/S in world) - S.icon = 'icons/Testing/turf_analysis.dmi' - if(S.parent) - if(S.parent.group_processing) - if(S.parent.marker == 0) - S.parent.marker = rand(1,5) - if(S.parent.borders && S.parent.borders.Find(S)) - S.icon_state = "on[S.parent.marker]_border" - else - S.icon_state = "on[S.parent.marker]" - - else - S.icon_state = "suspended" - else - if(S.processing) - S.icon_state = "individual_on" - else - S.icon_state = "individual_off" - - get_broken_icons() - set category = "Debug" - getbrokeninhands() - - -/* jump_to_dead_group() Currently in the normal admin commands but fits here - set category = "Debug" - if(!air_master) - usr << "Cannot find air_system" - return - - var/datum/air_group/dead_groups = list() - for(var/datum/air_group/group in air_master.air_groups) - if (!group.group_processing) - dead_groups += group - var/datum/air_group/dest_group = pick(dead_groups) - usr.loc = pick(dest_group.members)*/ diff --git a/code/FEA/FEA_airgroup.dm b/code/FEA/FEA_airgroup.dm deleted file mode 100644 index 94c51102b27..00000000000 --- a/code/FEA/FEA_airgroup.dm +++ /dev/null @@ -1,286 +0,0 @@ -datum/air_group - var/group_processing = 1 //Processing all tiles as one large tile if 1 - - var/datum/gas_mixture/air = new - - var/current_cycle = 0 //cycle that oxygen value represents - var/archived_cycle = 0 //cycle that oxygen_archived value represents - //The use of archived cycle saves processing power by permitting the archiving step of FET - // to be rolled into the updating step - - //optimization vars - var/next_check = 0 //number of ticks before this group updates - var/check_delay = 10 //number of ticks between updates, starts fairly high to get boring groups out of the way - - proc/members() - //Returns the members of the group - proc/process_group() - - - var/list/borders //Tiles that connect this group to other groups/individual tiles - var/list/members //All tiles in this group - - var/list/space_borders - var/length_space_border = 0 - - - proc/suspend_group_processing() - group_processing = 0 - update_tiles_from_group() - check_delay=0 - next_check=0 - - - //Copy group air information to individual tile air - //Used right before turning on group processing - proc/update_group_from_tiles() - var/sample_member = pick(members) - var/datum/gas_mixture/sample_air = sample_member:air - - air.copy_from(sample_air) - air.group_multiplier = members.len - return 1 - - - //Copy group air information to individual tile air - //Used right before turning off group processing - proc/update_tiles_from_group() - for(var/member in members) - member:air.copy_from(air) - if (istype(member,/turf/simulated)) - var/turf/simulated/turfmem=member - turfmem.reset_delay() - - - proc/archive() - air.archive() - archived_cycle = air_master.current_cycle - - - //If individually processing tiles, checks all member tiles to see if they are close enough that the group may resume group processing - //Warning: Do not call, called by air_master.process() - proc/check_regroup() - //Purpose: Checks to see if group processing should be turned back on - //Returns: group_processing - if(prevent_airgroup_regroup) - return 0 - - if(group_processing) return 1 - - var/turf/simulated/sample = pick(members) - for(var/member in members) - if(member:active_hotspot) - return 0 - if(member:air.compare(sample.air)) continue - else - return 0 - - update_group_from_tiles() - group_processing = 1 - return 1 - - -//Look into this - turf/process_group() - current_cycle = air_master.current_cycle - if(!group_processing) //Revert to individual processing then end - for(var/T in members) - var/turf/simulated/member = T - member.process_cell() - return - - //check if we're skipping this tick - if (next_check > 0) - next_check-- - return 1 - var/player_count = max(player_list.len, 3) / 3 - next_check += check_delay + rand(player_count, player_count * 1.5) - check_delay++ - - var/turf/simulated/list/border_individual = list() - var/datum/air_group/list/border_group = list() - - var/turf/simulated/list/enemies = list() //used to send the appropriate border tile of a group to the group proc - var/turf/simulated/list/self_group_borders = list() - var/turf/simulated/list/self_tile_borders = list() - - if(archived_cycle < air_master.current_cycle) - archive() - //Archive air data for use in calculations - //But only if another group didn't store it for us - - for(var/turf/simulated/border_tile in src.borders) - for(var/direction in cardinal) //Go through all border tiles and get bordering groups and individuals - if(border_tile.group_border&direction) - var/turf/simulated/enemy_tile = get_step(border_tile, direction) //Add found tile to appropriate category - if(istype(enemy_tile) && enemy_tile.parent && enemy_tile.parent.group_processing) - border_group += enemy_tile.parent - enemies += enemy_tile - self_group_borders += border_tile - else - border_individual += enemy_tile - self_tile_borders += border_tile - - var/abort_group = 0 - - // Process connections to adjacent groups - var/border_index = 1 - for(var/datum/air_group/AG in border_group) - if(AG.archived_cycle < archived_cycle) //archive other groups information if it has not been archived yet this cycle - AG.archive() - if(AG.current_cycle < current_cycle) - //This if statement makes sure two groups only process their individual connections once! - //Without it, each connection would be processed a second time as the second group is evaluated - - var/connection_difference = 0 - var/turf/simulated/floor/self_border = self_group_borders[border_index] - var/turf/simulated/floor/enemy_border = enemies[border_index] - - var/result = air.check_gas_mixture(AG.air) - if(result == 1) - connection_difference = air.share(AG.air) - else if(result == -1) - AG.suspend_group_processing() - connection_difference = air.share(enemy_border.air) - else - abort_group = 1 - break - - if(connection_difference) - if(connection_difference > 0) - self_border.consider_pressure_difference(connection_difference, get_dir(self_border,enemy_border)) - else - var/turf/enemy_turf = enemy_border - if(!isturf(enemy_turf)) - enemy_turf = enemy_border.loc - enemy_turf.consider_pressure_difference(-connection_difference, get_dir(enemy_turf,self_border)) - - border_index++ - - // Process connections to adjacent tiles - border_index = 1 - if(!abort_group) - for(var/atom/enemy_tile in border_individual) - var/connection_difference = 0 - var/turf/simulated/floor/self_border = self_tile_borders[border_index] - - if(istype(enemy_tile, /turf/simulated)) - if(enemy_tile:archived_cycle < archived_cycle) //archive tile information if not already done - enemy_tile:archive() - if(enemy_tile:current_cycle < current_cycle) - if(air.check_gas_mixture(enemy_tile:air)) - connection_difference = air.share(enemy_tile:air) - else - abort_group = 1 - break - else if(isturf(enemy_tile)) - if(air.check_turf(enemy_tile)) - connection_difference = air.mimic(enemy_tile) - else - abort_group = 1 - break - - if(connection_difference) - if(connection_difference > 0) - self_border.consider_pressure_difference(connection_difference, get_dir(self_border,enemy_tile)) - else - var/turf/enemy_turf = enemy_tile - if(!isturf(enemy_turf)) - enemy_turf = enemy_tile.loc - enemy_turf.consider_pressure_difference(-connection_difference, get_dir(enemy_tile,enemy_turf)) - - // Process connections to space - border_index = 1 - if(!abort_group) - if(length_space_border > 0) - var/turf/space/sample = locate() - var/connection_difference = 0 - - if(air.check_turf(sample)) - connection_difference = air.mimic(sample, length_space_border) - else - abort_group = 1 - - if(connection_difference) - for(var/turf/simulated/self_border in space_borders) - self_border.consider_pressure_difference_space(connection_difference) - - if(abort_group) - suspend_group_processing() - else - if(air.check_tile_graphic()) - for(var/T in members) - var/turf/simulated/member = T - member.update_visuals(air) - - - if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - for(var/T in members) - var/turf/simulated/member = T - member.hotspot_expose(air.temperature, CELL_VOLUME) - member.consider_superconductivity(starting=1) - - air.react() - return - - - - object/process_group() - current_cycle = air_master.current_cycle - - if(!group_processing) return //See if processing this group as a group - - var/turf/simulated/list/border_individual = list() - var/datum/air_group/list/border_group = list() - - var/turf/simulated/list/enemies = list() //used to send the appropriate border tile of a group to the group proc - var/enemy_index = 1 - - if(archived_cycle < air_master.current_cycle) - archive() - //Archive air data for use in calculations - //But only if another group didn't store it for us - - enemy_index = 1 - var/abort_group = 0 - for(var/datum/air_group/AG in border_group) - if(AG.archived_cycle < archived_cycle) //archive other groups information if it has not been archived yet this cycle - AG.archive() - if(AG.current_cycle < current_cycle) - //This if statement makes sure two groups only process their individual connections once! - //Without it, each connection would be processed a second time as the second group is evaluated - - var/result = air.check_gas_mixture(AG.air) - if(result == 1) - air.share(AG.air) - else if(result == -1) - AG.suspend_group_processing() - var/turf/simulated/floor/enemy_border = enemies[enemy_index] - air.share(enemy_border.air) - else - abort_group = 0 - break - enemy_index++ - - if(!abort_group) - for(var/enemy_tile in border_individual) - if(istype(enemy_tile, /turf/simulated)) - if(enemy_tile:archived_cycle < archived_cycle) //archive tile information if not already done - enemy_tile:archive() - if(enemy_tile:current_cycle < current_cycle) - if(air.check_gas_mixture(enemy_tile:air)) - air.share(enemy_tile:air) - else - abort_group = 1 - break - else - if(air.check_turf(enemy_tile)) - air.mimic(enemy_tile) - else - abort_group = 1 - break - - if(abort_group) - suspend_group_processing() - - return \ No newline at end of file diff --git a/code/FEA/FEA_fire.dm b/code/FEA/FEA_fire.dm deleted file mode 100644 index 748371e7d26..00000000000 --- a/code/FEA/FEA_fire.dm +++ /dev/null @@ -1,181 +0,0 @@ - -/atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - return null - - - -/turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) - - - -/turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) - var/datum/gas_mixture/air_contents = return_air() - if(!air_contents) - return 0 - if(active_hotspot) - if(soh) - if(air_contents.toxins > 0.5 && air_contents.oxygen > 0.5) - if(active_hotspot.temperature < exposed_temperature) - active_hotspot.temperature = exposed_temperature - if(active_hotspot.volume < exposed_volume) - active_hotspot.volume = exposed_volume - return 1 - - var/igniting = 0 - - if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && air_contents.toxins > 0.5) - igniting = 1 - - if(igniting) - if(air_contents.oxygen < 0.5 || air_contents.toxins < 0.5) - return 0 - - if(parent&&parent.group_processing) - parent.suspend_group_processing() - - active_hotspot = new(src) - active_hotspot.temperature = exposed_temperature - active_hotspot.volume = exposed_volume - - active_hotspot.just_spawned = (current_cycle < air_master.current_cycle) - //remove just_spawned protection if no longer processing this cell - - //start processing quickly if we aren't already - reset_delay() - - return igniting - -//This is the icon for fire on turfs, also helps for nurturing small fires until they are full tile -/obj/effect/hotspot - anchored = 1 - mouse_opacity = 0 - unacidable = 1//So you can't melt fire with acid. - icon = 'icons/effects/fire.dmi' - icon_state = "1" - layer = TURF_LAYER - luminosity = 3 - - var/volume = 125 - var/temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - var/just_spawned = 1 - var/bypassing = 0 - - -/obj/effect/hotspot/proc/perform_exposure() - var/turf/simulated/floor/location = loc - if(!istype(location)) return 0 - - if(volume > CELL_VOLUME*0.95) bypassing = 1 - else bypassing = 0 - - if(bypassing) - if(!just_spawned) - volume = location.air.fuel_burnt*FIRE_GROWTH_RATE - temperature = location.air.temperature - else - var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume) - affected.temperature = temperature - affected.react() - temperature = affected.temperature - volume = affected.fuel_burnt*FIRE_GROWTH_RATE - location.assume_air(affected) - - for(var/atom/item in loc) - if(!bypassing) - item.temperature_expose(null, temperature, volume) - if(item) // It's possible that the item is deleted in temperature_expose - item.fire_act(null, temperature, volume) - - return 0 - - -/obj/effect/hotspot/process(turf/simulated/list/possible_spread) - if(just_spawned) - just_spawned = 0 - return 0 - - var/turf/simulated/floor/location = loc - if(!istype(location)) - Kill() - return - - if((temperature < FIRE_MINIMUM_TEMPERATURE_TO_EXIST) || (volume <= 1)) - Kill() - return - - if(location.air.toxins < 0.5 || location.air.oxygen < 0.5) - Kill() - return - - perform_exposure() - - if(location.wet) location.wet = 0 - - if(bypassing) - icon_state = "3" - location.burn_tile() - - //Possible spread due to radiated heat - if(location.air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD) - var/radiated_temperature = location.air.temperature*FIRE_SPREAD_RADIOSITY_SCALE - - for(var/turf/simulated/possible_target in possible_spread) - if(!possible_target.active_hotspot) - possible_target.hotspot_expose(radiated_temperature, CELL_VOLUME/4) - - else - if(volume > CELL_VOLUME*0.4) - icon_state = "2" - else - icon_state = "1" - - if(temperature > location.max_fire_temperature_sustained) - location.max_fire_temperature_sustained = temperature - - if(location.heat_capacity && temperature > location.heat_capacity) - location.to_be_destroyed = 1 - /*if(prob(25)) - location.ReplaceWithSpace() - return 0*/ - return 1 - -// Garbage collect itself by nulling reference to it - -/obj/effect/hotspot/proc/Kill() - DestroyTurf() - garbage_collect() - -/obj/effect/hotspot/proc/garbage_collect() - if(istype(loc, /turf/simulated)) - var/turf/simulated/T = loc - if(T.active_hotspot == src) - T.active_hotspot = null - loc = null - -/obj/effect/hotspot/proc/DestroyTurf() - - if(istype(loc, /turf/simulated)) - var/turf/simulated/T = loc - if(T.to_be_destroyed) - var/chance_of_deletion - if (T.heat_capacity) //beware of division by zero - chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0 - else - chance_of_deletion = 100 - if(prob(chance_of_deletion)) - T.ChangeTurf(/turf/space) - else - T.to_be_destroyed = 0 - T.max_fire_temperature_sustained = 0 - -/obj/effect/hotspot/New() - ..() - dir = pick(cardinal) - return - -/* -/obj/effect/hotspot/Del() - if (istype(loc, /turf/simulated)) - DestroyTurf() - ..() -*/ \ No newline at end of file diff --git a/code/FEA/FEA_group_helpers.dm b/code/FEA/FEA_group_helpers.dm deleted file mode 100644 index c803d6ef95e..00000000000 --- a/code/FEA/FEA_group_helpers.dm +++ /dev/null @@ -1,101 +0,0 @@ -/turf/simulated/proc/find_group() - //Basically, join any nearby valid groups - // If more than one, pick one with most members at my borders - // If can not find any but there was an ungrouped at border with me, call for group assembly - - var/turf/simulated/floor/north = get_step(src,NORTH) - var/turf/simulated/floor/south = get_step(src,SOUTH) - var/turf/simulated/floor/east = get_step(src,EAST) - var/turf/simulated/floor/west = get_step(src,WEST) - - //Clear those we do not have access to - if(!CanPass(null, north, null, 1) || !istype(north)) - north = null - if(!CanPass(null, south, null, 1) || !istype(south)) - south = null - if(!CanPass(null, east, null, 1) || !istype(east)) - east = null - if(!CanPass(null, west, null, 1) || !istype(west)) - west = null - - var/new_group_possible = 0 - - var/north_votes = 0 - var/south_votes = 0 - var/east_votes = 0 - - if(north) - if(north.parent) - north_votes = 1 - - if(south && (south.parent == north.parent)) - north_votes++ - south = null - - if(east && (east.parent == north.parent)) - north_votes++ - east = null - - if(west && (west.parent == north.parent)) - north_votes++ - west = null - else - new_group_possible = 1 - - if(south) - if(south.parent) - south_votes = 1 - - if(east && (east.parent == south.parent)) - south_votes++ - east = null - - if(west && (west.parent == south.parent)) - south_votes++ - west = null - else - new_group_possible = 1 - - if(east) - if(east.parent) - east_votes = 1 - - if(west && (west.parent == east.parent)) - east_votes++ - west = null - else - new_group_possible = 1 - -// world << "[north_votes], [south_votes], [east_votes]" - - var/datum/air_group/group_joined = null - - if(west) - if(west.parent) - group_joined = west.parent - else - new_group_possible = 1 - - if(north_votes && (north_votes >= south_votes) && (north_votes >= east_votes)) - group_joined = north.parent - else if(south_votes && (south_votes >= east_votes)) - group_joined = south.parent - else if(east_votes) - group_joined = east.parent - - if (istype(group_joined)) - if (group_joined.group_processing) - group_joined.suspend_group_processing() - group_joined.members += src - parent=group_joined - - air_master.tiles_to_update += group_joined.members - return 1 - - else if(new_group_possible) - air_master.assemble_group_turf(src) - return 1 - - else - air_master.active_singletons += src - return 1 \ No newline at end of file diff --git a/code/FEA/FEA_system.dm b/code/FEA/FEA_system.dm deleted file mode 100644 index 574fd1ba268..00000000000 --- a/code/FEA/FEA_system.dm +++ /dev/null @@ -1,335 +0,0 @@ -/* -Overview: - The air_master global variable is the workhorse for the system. - -Why are you archiving data before modifying it? - The general concept with archiving data and having each tile keep track of when they were last updated is to keep everything symmetric - and totally independent of the order they are read in an update cycle. - This prevents abnormalities like air/fire spreading rapidly in one direction and super slowly in the other. - -Why not just archive everything and then calculate? - Efficiency. While a for-loop that goes through all tiles and groups to archive their information before doing any calculations seems simple, it is - slightly less efficient than the archive-before-modify/read method. - -Why is there a cycle check for calculating data as well? - This ensures that every connection between group-tile, tile-tile, and group-group is only evaluated once per loop. - - - - -Important variables: - air_master.groups_to_rebuild (list) - A list of air groups that have had their geometry occluded and thus may need to be split in half. - A set of adjacent groups put in here will join together if validly connected. - This is done before air system calculations for a cycle. - air_master.tiles_to_update (list) - Turfs that are in this list have their border data updated before the next air calculations for a cycle. - Place turfs in this list rather than call the proc directly to prevent race conditions - - turf/simulated.archive() and datum/air_group.archive() - This stores all data for. - If you modify, make sure to update the archived_cycle to prevent race conditions and maintain symmetry - - atom/CanPass(atom/movable/mover, turf/target, height, air_group) - returns 1 for allow pass and 0 for deny pass - Turfs automatically call this for all objects/mobs in its turf. - This is called both as source.CanPass(target, height, air_group) - and target.CanPass(source, height, air_group) - - Cases for the parameters - 1. This is called with args (mover, location, height>0, air_group=0) for normal objects. - 2. This is called with args (null, location, height=0, air_group=0) for flowing air. - 3. This is called with args (null, location, height=?, air_group=1) for determining group boundaries. - - Cases 2 and 3 would be different for doors or other objects open and close fairly often. - (Case 3 would return 0 always while Case 2 would return 0 only when the door is open) - This prevents the necessity of re-evaluating group geometry every time a door opens/closes. - - -Important Procedures - air_master.process() - This first processes the air_master update/rebuild lists then processes all groups and tiles for air calculations - - -*/ - -var/kill_air = 0 - -atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) - return (!density || !height || air_group) - -turf - CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0) - if(!target) return 0 - - if(istype(mover)) // turf/Enter(...) will perform more advanced checks - return !density - - else // Now, doing more detailed checks for air movement and air group formation - if(target.blocks_air||blocks_air) - return 0 - - for(var/obj/obstacle in src) - if(!obstacle.CanPass(mover, target, height, air_group)) - return 0 - for(var/obj/obstacle in target) - if(!obstacle.CanPass(mover, src, height, air_group)) - return 0 - - return 1 - - -var/global/datum/controller/air_system/air_master - -datum - controller - air_system - //Geoemetry lists - var/list/datum/air_group/air_groups = list() - var/list/turf/simulated/active_singletons = list() - - //Special functions lists - var/list/turf/simulated/active_super_conductivity = list() - var/list/turf/simulated/high_pressure_delta = list() - - //Geometry updates lists - var/list/turf/simulated/tiles_to_update = list() - var/list/turf/simulated/groups_to_rebuild = list() - - var/current_cycle = 0 - - proc - setup() - //Call this at the start to setup air groups geometry - //Warning: Very processor intensive but only must be done once per round - - assemble_group_turf(turf/simulated/base) - //Call this to try to construct a group starting from base and merging with neighboring unparented tiles - //Expands the group until all valid borders explored - -// assemble_group_object(obj/movable/floor/base) - - process() - //Call this to process air movements for a cycle - - process_groups() - //Used by process() - //Warning: Do not call this - - process_singletons() - //Used by process() - //Warning: Do not call this - - process_high_pressure_delta() - //Used by process() - //Warning: Do not call this - - process_super_conductivity() - //Used by process() - //Warning: Do not call this - - process_update_tiles() - //Used by process() - //Warning: Do not call this - - process_rebuild_select_groups() - //Used by process() - //Warning: Do not call this - - rebuild_group(datum/air_group) - //Used by process_rebuild_select_groups() - //Warning: Do not call this, add the group to air_master.groups_to_rebuild instead - - add_singleton(turf/simulated/T) - if(!active_singletons.Find(T)) - active_singletons += T - - setup() - set background = 1 - world << "\red \b Processing Geometry..." - sleep(1) - - var/start_time = world.timeofday - - for(var/turf/simulated/S in world) - if(!S.blocks_air && !S.parent) - assemble_group_turf(S) - S.update_air_properties() - - world << "\red \b Geometry processed in [(world.timeofday-start_time)/10] seconds!" - - assemble_group_turf(turf/simulated/base) - - var/list/turf/simulated/members = list(base) //Confirmed group members - var/list/turf/simulated/possible_members = list(base) //Possible places for group expansion - var/list/turf/simulated/possible_borders = list() - var/list/turf/simulated/possible_space_borders = list() - var/possible_space_length = 0 - - while(possible_members.len>0) //Keep expanding, looking for new members - for(var/turf/simulated/test in possible_members) - test.length_space_border = 0 - for(var/direction in cardinal) - var/turf/T = get_step(test,direction) - if(T && !members.Find(T) && test.CanPass(null, T, null,1)) - if(istype(T,/turf/simulated) && !T:parent) - possible_members += T - members += T - else if(istype(T,/turf/space)) - possible_space_borders -= test - possible_space_borders += test - test.length_space_border++ - else - possible_borders -= test - possible_borders += test - if(test.length_space_border > 0) - possible_space_length += test.length_space_border - possible_members -= test - - if(members.len > 1) - var/datum/air_group/turf/group = new - if(possible_borders.len>0) - group.borders = possible_borders - if(possible_space_borders.len>0) - group.space_borders = possible_space_borders - group.length_space_border = possible_space_length - - for(var/turf/simulated/test in members) - test.parent = group - test.processing = 0 - active_singletons -= test - - group.members = members - air_groups += group - - group.update_group_from_tiles() //Initialize air group variables - return group - else - base.processing = 0 //singletons at startup are technically unconnected anyway - base.parent = null - - if(base.air.check_tile_graphic()) - base.update_visuals(base.air) - - return null -/* - assemble_group_object(obj/movable/floor/base) - - var/list/obj/movable/floor/members = list(base) //Confirmed group members - var/list/obj/movable/floor/possible_members = list(base) //Possible places for group expansion - var/list/obj/movable/floor/possible_borders = list() - - while(possible_members.len>0) //Keep expanding, looking for new members - for(var/obj/movable/floor/test in possible_members) - for(var/direction in list(NORTH, SOUTH, EAST, WEST)) - var/turf/T = get_step(test.loc,direction) - if(T && test.loc.CanPass(null, T, null, 1)) - var/obj/movable/floor/O = locate(/obj/movable/floor) in T - if(istype(O) && !O.parent) - if(!members.Find(O)) - possible_members += O - members += O - else - possible_borders -= test - possible_borders += test - possible_members -= test - - if(members.len > 1) - var/datum/air_group/object/group = new - if(possible_borders.len>0) - group.borders = possible_borders - - for(var/obj/movable/floor/test in members) - test.parent = group - test.processing = 0 - active_singletons -= test - - group.members = members - air_groups += group - - group.update_group_from_tiles() //Initialize air group variables - return group - else - base.processing = 0 //singletons at startup are technically unconnected anyway - base.parent = null - - return null -*/ - process() - if(kill_air) - return 1 - current_cycle++ - if(groups_to_rebuild.len > 0) process_rebuild_select_groups() - if(tiles_to_update.len > 0) process_update_tiles() - - process_groups() - process_singletons() - - process_super_conductivity() - process_high_pressure_delta() - - if(current_cycle%10==5) //Check for groups of tiles to resume group processing every 10 cycles - for(var/datum/air_group/AG in air_groups) - AG.check_regroup() - - return 1 - - process_update_tiles() - for(var/turf/simulated/T in tiles_to_update) - T.update_air_properties() -/* - for(var/obj/movable/floor/O in tiles_to_update) - O.update_air_properties() -*/ - tiles_to_update.len = 0 - - process_rebuild_select_groups() - var/turf/list/turfs = list() - - for(var/datum/air_group/turf/turf_AG in groups_to_rebuild) //Deconstruct groups, gathering their old members - for(var/turf in turf_AG.members) - var/turf/simulated/T = turf - T.parent = null - turfs += T - del(turf_AG) - - for(var/turf/simulated/S in turfs) //Have old members try to form new groups - if(!S.parent) - assemble_group_turf(S) - for(var/turf/simulated/S in turfs) - S.update_air_properties() - -// var/obj/movable/list/movable_objects = list() - -// for(var/datum/air_group/object/object_AG in groups_to_rebuild) //Deconstruct groups, gathering their old members -/* - for(var/obj/movable/floor/OM in object_AG.members) - OM.parent = null - movable_objects += OM - del(object_AG) - - for(var/obj/movable/floor/OM in movable_objects) //Have old members try to form new groups - if(!OM.parent) - assemble_group_object(OM) - for(var/obj/movable/floor/OM in movable_objects) - OM.update_air_properties() -*/ - groups_to_rebuild.len = 0 - - process_groups() - for(var/datum/air_group/AG in air_groups) - AG.process_group() - - process_singletons() - for(var/item in active_singletons) - item:process_cell() - - process_super_conductivity() - for(var/turf/simulated/hot_potato in active_super_conductivity) - hot_potato.super_conduct() - - process_high_pressure_delta() - for(var/turf/pressurized in high_pressure_delta) - pressurized.high_pressure_movements() - - high_pressure_delta.len = 0 diff --git a/code/FEA/FEA_turf_tile.dm b/code/FEA/FEA_turf_tile.dm deleted file mode 100644 index f57d93e59bf..00000000000 --- a/code/FEA/FEA_turf_tile.dm +++ /dev/null @@ -1,566 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -atom/movable/var/pressure_resistance = 5 -atom/movable/var/last_forced_movement = 0 - -atom/movable/proc/experience_pressure_difference(pressure_difference, direction) - if(last_forced_movement >= air_master.current_cycle) - return 0 - else if(!anchored) - if(pressure_difference > pressure_resistance) - last_forced_movement = air_master.current_cycle - spawn step(src, direction) - return 1 - -turf - assume_air(datum/gas_mixture/giver) //use this for machines to adjust air - del(giver) - return 0 - - return_air() - //Create gas mixture to hold data for passing - var/datum/gas_mixture/GM = new - - GM.oxygen = oxygen - GM.carbon_dioxide = carbon_dioxide - GM.nitrogen = nitrogen - GM.toxins = toxins - - GM.temperature = temperature - - return GM - - remove_air(amount as num) - var/datum/gas_mixture/GM = new - - var/sum = oxygen + carbon_dioxide + nitrogen + toxins - if(sum>0) - GM.oxygen = (oxygen/sum)*amount - GM.carbon_dioxide = (carbon_dioxide/sum)*amount - GM.nitrogen = (nitrogen/sum)*amount - GM.toxins = (toxins/sum)*amount - - GM.temperature = temperature - - return GM - -turf - var/pressure_difference = 0 - var/pressure_direction = 0 - var/reporting_pressure_difference - - //optimization vars - var/next_check = 0 //number of ticks before this tile updates - var/check_delay = 0 //number of ticks between updates - - proc/high_pressure_movements() - if(reporting_pressure_difference) - world << "pressure_difference = [pressure_difference]; pressure_direction = [pressure_direction]" - for(var/atom/movable/in_tile in src) - in_tile.experience_pressure_difference(pressure_difference, pressure_direction) - - pressure_difference = 0 - - proc/consider_pressure_difference(connection_difference, connection_direction) - if(connection_difference < 0) - connection_difference = -connection_difference - connection_direction = turn(connection_direction,180) - - if(connection_difference > pressure_difference) - if(!pressure_difference) - air_master.high_pressure_delta += src - pressure_difference = connection_difference - pressure_direction = connection_direction - -turf/simulated/proc/consider_pressure_difference_space(connection_difference) - for(var/direction in cardinal) - if(direction&group_border) - if(istype(get_step(src,direction),/turf/space)) - if(!pressure_difference) - air_master.high_pressure_delta += src - pressure_direction = direction - pressure_difference = connection_difference - - - return 1 - - -turf/simulated - - var/current_graphic = null - - var/tmp/datum/gas_mixture/air - - var/tmp/processing = 1 - var/tmp/datum/air_group/turf/parent - var/tmp/group_border = 0 - var/tmp/length_space_border = 0 - - var/tmp/air_check_directions = 0 //Do not modify this, just add turf to air_master.tiles_to_update - - var/tmp/archived_cycle = 0 - var/tmp/current_cycle = 0 - - var/tmp/obj/effect/hotspot/active_hotspot - - var/tmp/temperature_archived //USED ONLY FOR SOLIDS - var/tmp/being_superconductive = 0 - - proc/update_visuals(datum/gas_mixture/model) - overlays.Cut() - - var/siding_icon_state = return_siding_icon_state() - if(siding_icon_state) - overlays += image('icons/turf/floors.dmi',siding_icon_state) - - switch(model.graphic) - if("plasma") - overlays.Add(plmaster) - if("sleeping_agent") - overlays.Add(slmaster) - - - - New() - ..() - - if(!blocks_air) - air = new - - air.oxygen = oxygen - air.carbon_dioxide = carbon_dioxide - air.nitrogen = nitrogen - air.toxins = toxins - - air.temperature = temperature - - if(air_master) - air_master.tiles_to_update.Add(src) - - find_group() - -// air.parent = src //TODO DEBUG REMOVE - - else - if(air_master) - for(var/direction in cardinal) - var/turf/simulated/floor/target = get_step(src,direction) - if(istype(target)) - air_master.tiles_to_update.Add(target) - - Del() - if(air_master) - if(parent) - air_master.groups_to_rebuild.Add(parent) - parent.members.Remove(src) - else - air_master.active_singletons.Remove(src) - if(active_hotspot) - active_hotspot.garbage_collect() - if(air_master && blocks_air) - for(var/direction in list(NORTH, SOUTH, EAST, WEST)) - var/turf/simulated/tile = get_step(src,direction) - if(istype(tile) && !tile.blocks_air) - air_master.tiles_to_update.Add(tile) - ..() - - assume_air(datum/gas_mixture/giver) - if(!giver) return 0 - var/datum/gas_mixture/receiver = air - if(istype(receiver)) - if(parent&&parent.group_processing) - if(!parent.air.check_then_merge(giver)) - parent.suspend_group_processing() - air.merge(giver) - else - if (giver.total_moles() > MINIMUM_AIR_TO_SUSPEND) - reset_delay() - - air.merge(giver) - - if(!processing) - if(air.check_tile_graphic()) - update_visuals(air) - - return 1 - - else return ..() - - proc/archive() - if(air) //For open space like floors - air.archive() - - temperature_archived = temperature - archived_cycle = air_master.current_cycle - - proc/share_air_with_tile(turf/simulated/T) - return air.share(T.air) - - proc/mimic_air_with_tile(turf/T) - return air.mimic(T) - - proc/copy_air_with_tile(turf/simulated/T) - if(istype(T) && T.air && air) - air.copy_from(T.air) - - proc/copy_air(datum/gas_mixture/copy) - if(air && copy) - air.copy_from(copy) - - return_air() - if(air) - if(parent&&parent.group_processing) - return parent.air - else return air - - else - return ..() - - remove_air(amount as num) - if(air) - var/datum/gas_mixture/removed = null - - if(parent&&parent.group_processing) - removed = parent.air.check_then_remove(amount) - if(!removed) - parent.suspend_group_processing() - removed = air.remove(amount) - else - removed = air.remove(amount) - - if(!processing) - if(air.check_tile_graphic()) - update_visuals(air) - - return removed - - else - return ..() - - proc/update_air_properties()//OPTIMIZE - air_check_directions = 0 - - for(var/direction in cardinal) - if(CanPass(null, get_step(src,direction), 0, 0)) - air_check_directions |= direction - - if(parent) - if(parent.borders) - parent.borders -= src - if(length_space_border > 0) - parent.length_space_border -= length_space_border - length_space_border = 0 - - group_border = 0 - for(var/direction in cardinal) - if(air_check_directions&direction) - var/turf/simulated/T = get_step(src,direction) - - //See if actually a border - if(!istype(T) || (T.parent!=parent)) - - //See what kind of border it is - if(istype(T,/turf/space)) - if(parent.space_borders) - parent.space_borders |= src - else - parent.space_borders = list(src) - length_space_border++ - - else - if(parent.borders) - parent.borders |= src - else - parent.borders = list(src) - - group_border |= direction - - parent.length_space_border += length_space_border - - if(air_check_directions) - processing = 1 - if(!parent) - air_master.add_singleton(src) - else - processing = 0 - - proc/process_cell() - //this proc does all the heavy lifting for individual tile processing - //it shares with all of its neighbors, spreads fire, calls superconduction - //and doesn't afraid of anything - //Comment by errorage: In other words, this is the proc that lags the game. - - //check if we're skipping this tick - if (next_check > 0) - next_check-- - return 1 - var/player_count = max(player_list.len, 3) / 3 - next_check += check_delay + rand(player_count, player_count * 1.5) - check_delay++ - - var/turf/simulated/list/possible_fire_spreads = list() - if(processing) - if(archived_cycle < air_master.current_cycle) //archive self if not already done - archive() - current_cycle = air_master.current_cycle - - for(var/direction in cardinal) - if(air_check_directions&direction) //Grab all valid bordering tiles - var/turf/simulated/enemy_tile = get_step(src, direction) - var/connection_difference = 0 - - if(istype(enemy_tile)) //enemy_tile == neighbor, btw - if(enemy_tile.archived_cycle < archived_cycle) //archive bordering tile information if not already done - enemy_tile.archive() - - if (air && enemy_tile.air) - var/delay_trigger = air.compare(enemy_tile.air) - if (!delay_trigger) //if compare() didn't return 1, air is different enough to trigger processing - reset_delay() - enemy_tile.reset_delay() - - if(enemy_tile.parent && enemy_tile.parent.group_processing) //apply tile to group sharing - if(enemy_tile.parent.current_cycle < current_cycle) //if the group hasn't been archived, it could just be out of date - if(enemy_tile.parent.air.check_gas_mixture(air)) - connection_difference = air.share(enemy_tile.parent.air) - else - enemy_tile.parent.suspend_group_processing() - connection_difference = air.share(enemy_tile.air) - //group processing failed so interact with individual tile - - else - if(enemy_tile.current_cycle < current_cycle) - connection_difference = air.share(enemy_tile.air) - - if(active_hotspot) - possible_fire_spreads += enemy_tile - else -/* var/obj/movable/floor/movable_on_enemy = locate(/obj/movable/floor) in enemy_tile - - if(movable_on_enemy) - if(movable_on_enemy.parent && movable_on_enemy.parent.group_processing) //apply tile to group sharing - if(movable_on_enemy.parent.current_cycle < current_cycle) - if(movable_on_enemy.parent.air.check_gas_mixture(air)) - connection_difference = air.share(movable_on_enemy.parent.air) - - else - movable_on_enemy.parent.suspend_group_processing() - - if(movable_on_enemy.archived_cycle < archived_cycle) //archive bordering tile information if not already done - movable_on_enemy.archive() - connection_difference = air.share(movable_on_enemy.air) - //group processing failed so interact with individual tile - else - if(movable_on_enemy.archived_cycle < archived_cycle) //archive bordering tile information if not already done - movable_on_enemy.archive() - - if(movable_on_enemy.current_cycle < current_cycle) - connection_difference = share_air_with_tile(movable_on_enemy) - - else*/ - connection_difference = mimic_air_with_tile(enemy_tile) - //bordering a tile with fixed air properties - - if(connection_difference) - if(connection_difference > 0) - consider_pressure_difference(connection_difference, direction) - else - enemy_tile.consider_pressure_difference(connection_difference, direction) - else - air_master.active_singletons -= src //not active if not processing! - - air.react() - - if(active_hotspot) - if (!active_hotspot.process(possible_fire_spreads)) - return 0 - - if(air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION) - consider_superconductivity(starting = 1) - - if(air.check_tile_graphic()) - update_visuals(air) - - if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - reset_delay() //hotspots always process quickly - hotspot_expose(air.temperature, CELL_VOLUME) - for(var/atom/movable/item in src) - item.temperature_expose(air, air.temperature, CELL_VOLUME) - temperature_expose(air, air.temperature, CELL_VOLUME) - - return 1 - - proc/super_conduct() - var/conductivity_directions = 0 - if(blocks_air) - //Does not participate in air exchange, so will conduct heat across all four borders at this time - conductivity_directions = NORTH|SOUTH|EAST|WEST - - if(archived_cycle < air_master.current_cycle) - archive() - - else - //Does particate in air exchange so only consider directions not considered during process_cell() - conductivity_directions = ~air_check_directions & (NORTH|SOUTH|EAST|WEST) - - if(conductivity_directions>0) - //Conduct with tiles around me - for(var/direction in cardinal) - if(conductivity_directions&direction) - var/turf/neighbor = get_step(src,direction) - - if(istype(neighbor, /turf/simulated)) //anything under this subtype will share in the exchange - var/turf/simulated/modeled_neighbor = neighbor - - if(modeled_neighbor.archived_cycle < air_master.current_cycle) - modeled_neighbor.archive() - - if(modeled_neighbor.air) - if(air) //Both tiles are open - - if(modeled_neighbor.parent && modeled_neighbor.parent.group_processing) - if(parent && parent.group_processing) - //both are acting as a group - //modified using construct developed in datum/air_group/share_air_with_group(...) - - var/result = parent.air.check_both_then_temperature_share(modeled_neighbor.parent.air, WINDOW_HEAT_TRANSFER_COEFFICIENT) - if(result==0) - //have to deconstruct parent air group - - parent.suspend_group_processing() - if(!modeled_neighbor.parent.air.check_me_then_temperature_share(air, WINDOW_HEAT_TRANSFER_COEFFICIENT)) - //may have to deconstruct neighbors air group - - modeled_neighbor.parent.suspend_group_processing() - air.temperature_share(modeled_neighbor.air, WINDOW_HEAT_TRANSFER_COEFFICIENT) - else if(result==-1) - // have to deconstruct neightbors air group but not mine - - modeled_neighbor.parent.suspend_group_processing() - parent.air.temperature_share(modeled_neighbor.air, WINDOW_HEAT_TRANSFER_COEFFICIENT) - else - air.temperature_share(modeled_neighbor.air, WINDOW_HEAT_TRANSFER_COEFFICIENT) - else - if(parent && parent.group_processing) - if(!parent.air.check_me_then_temperature_share(air, WINDOW_HEAT_TRANSFER_COEFFICIENT)) - //may have to deconstruct neighbors air group - - parent.suspend_group_processing() - air.temperature_share(modeled_neighbor.air, WINDOW_HEAT_TRANSFER_COEFFICIENT) - - else - air.temperature_share(modeled_neighbor.air, WINDOW_HEAT_TRANSFER_COEFFICIENT) - // world << "OPEN, OPEN" - - else //Solid but neighbor is open - if(modeled_neighbor.parent && modeled_neighbor.parent.group_processing) - if(!modeled_neighbor.parent.air.check_me_then_temperature_turf_share(src, modeled_neighbor.thermal_conductivity)) - - modeled_neighbor.parent.suspend_group_processing() - modeled_neighbor.air.temperature_turf_share(src, modeled_neighbor.thermal_conductivity) - else - modeled_neighbor.air.temperature_turf_share(src, modeled_neighbor.thermal_conductivity) - // world << "SOLID, OPEN" - - else - if(air) //Open but neighbor is solid - if(parent && parent.group_processing) - if(!parent.air.check_me_then_temperature_turf_share(modeled_neighbor, modeled_neighbor.thermal_conductivity)) - parent.suspend_group_processing() - air.temperature_turf_share(modeled_neighbor, modeled_neighbor.thermal_conductivity) - else - air.temperature_turf_share(modeled_neighbor, modeled_neighbor.thermal_conductivity) - // world << "OPEN, SOLID" - - else //Both tiles are solid - share_temperature_mutual_solid(modeled_neighbor, modeled_neighbor.thermal_conductivity) - // world << "SOLID, SOLID" - - modeled_neighbor.consider_superconductivity() - - else - if(air) //Open - if(parent && parent.group_processing) - if(!parent.air.check_me_then_temperature_mimic(neighbor, neighbor.thermal_conductivity)) - parent.suspend_group_processing() - air.temperature_mimic(neighbor, neighbor.thermal_conductivity) - else - air.temperature_mimic(neighbor, neighbor.thermal_conductivity) - else - mimic_temperature_solid(neighbor, neighbor.thermal_conductivity) - - //Radiate excess tile heat to space - if(temperature > T0C) - // Is there a pre-defined Space Tile? - if(!Space_Tile) - Space_Tile = locate(/turf/space) // Define one - //Considering 0 degC as te break even point for radiation in and out - mimic_temperature_solid(Space_Tile, FLOOR_HEAT_TRANSFER_COEFFICIENT) - - //Conduct with air on my tile if I have it - if(air) - if(parent && parent.group_processing) - if(!parent.air.check_me_then_temperature_turf_share(src, thermal_conductivity)) - parent.suspend_group_processing() - air.temperature_turf_share(src, thermal_conductivity) - else - air.temperature_turf_share(src, thermal_conductivity) - - - //Make sure still hot enough to continue conducting heat - if(air) - if(air.temperature < MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION) - being_superconductive = 0 - air_master.active_super_conductivity -= src - return 0 - - else - if(temperature < MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION) - being_superconductive = 0 - air_master.active_super_conductivity -= src - return 0 - - proc/mimic_temperature_solid(turf/model, conduction_coefficient) - var/delta_temperature = (temperature_archived - model.temperature) - if((heat_capacity > 0) && (abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)) - - var/heat = conduction_coefficient*delta_temperature* \ - (heat_capacity*model.heat_capacity/(heat_capacity+model.heat_capacity)) - temperature -= heat/heat_capacity - - proc/share_temperature_mutual_solid(turf/simulated/sharer, conduction_coefficient) - var/delta_temperature = (temperature_archived - sharer.temperature_archived) - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER && heat_capacity && sharer.heat_capacity) - - var/heat = conduction_coefficient*delta_temperature* \ - (heat_capacity*sharer.heat_capacity/(heat_capacity+sharer.heat_capacity)) - - temperature -= heat/heat_capacity - sharer.temperature += heat/sharer.heat_capacity - - proc/consider_superconductivity(starting) - - if(being_superconductive || !thermal_conductivity) - return 0 - - if(air) - if(air.temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION)) - return 0 - if(air.heat_capacity() < M_CELL_WITH_RATIO) // Was: MOLES_CELLSTANDARD*0.1*0.05 Since there are no variables here we can make this a constant. - return 0 - else - if(temperature < (starting?MINIMUM_TEMPERATURE_START_SUPERCONDUCTION:MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION)) - return 0 - - being_superconductive = 1 - - air_master.active_super_conductivity += src - - proc/reset_delay() - //sets this turf to process quickly again - next_check=0 - check_delay= -5 //negative numbers mean a mandatory quick-update period - - //if this turf has a parent air group, suspend its processing - if (parent && parent.group_processing) - parent.suspend_group_processing() diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index 34498dc58cf..3a67701487f 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -110,19 +110,12 @@ datum/controller/air_system /datum/controller/air_system/proc/process_excited_groups() for(var/datum/excited_group/EG in excited_groups) - if(EG.breakdown) - EG.breakdown_cooldown ++ - else - EG.breakdown_cooldown = 0 - - if(EG.breakdown_cooldown > 10) - if(EG.self_compare()) - EG.dismantle() + EG.breakdown_cooldown ++ if(EG.breakdown_cooldown == 10) - if(!EG.self_compare()) - EG.reset_cooldowns() EG.self_breakdown() - EG.breakdown = 1 + return + if(EG.breakdown_cooldown > 20) + EG.dismantle() /turf/proc/CanAtmosPass(var/turf/T) if(!istype(T)) return 0 diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index c5a57c9e577..ac1956fe21c 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -261,7 +261,7 @@ turf/simulated/proc/share_temperature_mutual_solid(turf/simulated/sharer, conduc /turf/simulated/proc/last_share_check() if(air.last_share > MINIMUM_AIR_TO_SUSPEND) - excited_group.breakdown = 0 + excited_group.reset_cooldowns() /turf/proc/high_pressure_movements() for(var/atom/movable/M in src) @@ -317,36 +317,46 @@ atom/movable/proc/experience_pressure_difference(pressure_difference, direction) /datum/excited_group/proc/reset_cooldowns() breakdown_cooldown = 0 -/datum/excited_group/proc/self_compare() - var/restore = 1 - var/turf/simulated/sample = pick(turf_list) - for(var/turf/simulated/T in turf_list) - if(!T.air.compare(sample.air)) - restore = 0 - break - if(restore) - return 1 - /datum/excited_group/proc/self_breakdown() var/datum/gas_mixture/A = new + var/datum/gas/sleeping_agent/S = new + A.trace_gases += S for(var/turf/simulated/T in turf_list) A.oxygen += T.air.oxygen A.carbon_dioxide+= T.air.carbon_dioxide A.nitrogen += T.air.nitrogen A.toxins += T.air.toxins + + if(T.air.trace_gases.len) + for(var/datum/gas/N in T.air.trace_gases) + S.moles += N.moles + for(var/turf/simulated/T in turf_list) T.air.oxygen = A.oxygen/turf_list.len T.air.carbon_dioxide= A.carbon_dioxide/turf_list.len T.air.nitrogen = A.nitrogen/turf_list.len T.air.toxins = A.toxins/turf_list.len + if(S.moles > 0) + if(T.air.trace_gases.len) + for(var/datum/gas/G in T.air.trace_gases) + G.moles = S.moles/turf_list.len + else + var/datum/gas/sleeping_agent/G = new + G.moles = S.moles/turf_list.len + T.air.trace_gases += G + + if(T.air.check_tile_graphic()) + T.update_visuals(T.air) + /datum/excited_group/proc/dismantle() for(var/turf/simulated/T in turf_list) T.excited = 0 T.recently_active = 0 + T.excited_group = null air_master.active_turfs -= T - air_master.excited_groups -= src + garbage_collect() /datum/excited_group/proc/garbage_collect() for(var/turf/simulated/T in turf_list) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 83892897954..a11ae456196 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -134,38 +134,53 @@ //var/debug_mob = 0 -// Will recursively loop through an atom's contents and check for mobs, then it will loop through every atom in that atom's contents. -// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, -// being unable to hear people due to being in a box within a bag. +// Better recursive loop, technically sort of not actually recursive cause that shit is retarded, enjoy. +//No need for a recursive limit either -/proc/recursive_mob_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_radio = 1) - //debug_mob += O.contents.len - if(!recursion_limit) - return L - for(var/atom/A in O.contents) +proc/recursive_mob_check(var/atom/O, var/client_check=1, var/sight_check=1, var/include_radio=1) + + var/list/processing_list = list(O) + var/list/processed_list = list() + var/list/found_mobs = list() + + if(!O.contents.len) + return found_mobs + + while(processing_list.len) + + var/atom/A = processing_list[1] + + var/passed = 1 if(ismob(A)) - var/mob/M = A - if(client_check && !M.client) - L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) - continue - if(sight_check && !isInSight(A, O)) - continue - L |= M - //world.log << "[recursion_limit] = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])" + var/mob/A_tmp = A + + if(client_check && !A_tmp.client) + passed=0 + + if(A_tmp && sight_check && !isInSight(A_tmp, O)) + passed=0 else if(include_radio && istype(A, /obj/item/device/radio)) if(sight_check && !isInSight(A, O)) - continue - L |= A + passed=0 + + else passed = 0 + + if(passed) + if(!(A in found_mobs)) found_mobs += A + + for(var/atom/B in A) + if(!(B in processed_list) && (istype(A, /obj/item/device/radio)||ismob(B)) ) + processing_list += B + + processing_list-=A + processed_list += A + + return found_mobs - if(isobj(A) || ismob(A)) - L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) - return L -// The old system would loop through lists for a total of 5000 per function call, in an empty server. -// This new system will loop at around 1000 in an empty server. /proc/get_mobs_in_view(var/R, var/atom/source) // Returns a list of mobs in range of R from source. Used in radio and say code. @@ -179,20 +194,22 @@ var/list/range = hear(R, T) for(var/atom/A in range) - if(ismob(A)) + + /*if(ismob(A)) var/mob/M = A if(M.client) hear += M - //world.log << "Start = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])" + //world.log << "Start = [M] - [get_turf(M)] - ([M.x], [M.y], [M.z])" else if(istype(A, /obj/item/device/radio)) - hear += A + hear += A*/ if(isobj(A) || ismob(A)) - hear = recursive_mob_check(A, hear, 3, 1, 0, 1) + hear += recursive_mob_check(A, 1, 0, 1) return hear + /proc/get_mobs_in_radio_ranges(var/list/obj/item/device/radio/radios) set background = BACKGROUND_ENABLED diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 69422dd8297..d3b17b793f4 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -11,9 +11,36 @@ visible_message("[src] has been hit by [user] with [W].") /mob/living/attackby(obj/item/I, mob/user) - if(istype(I) && ismob(user)) - I.attack(src, user) + I.attack(src, user) + apply_damage(I.force, I.damtype) + if(I.damtype == "brute") + if(prob(33) && I.force) + var/turf/location = src.loc + if(istype(location, /turf/simulated)) + location.add_blood_floor(src) + var/showname = "." + if(user) + showname = " by [user]!" + if(!(user in viewers(I, null))) + showname = "." + + if(I.attack_verb && I.attack_verb.len) + src.visible_message("[src] has been [pick(I.attack_verb)] with [I][showname]", + "[src] has been [pick(I.attack_verb)] with [I][showname]") + else if(I.force == 0) + src.visible_message("[src] has been [pick("tapped","patted")] with [I][showname]", + "[src] has been [pick("tapped","patted")] with [I][showname]") + else + src.visible_message("[src] has been attacked with [I][showname]", + "[src] has been attacked with [I][showname]") + if(!showname && user) + if(user.client) + user << "\red You attack [src] with [I]. " + +/mob/living/carbon/human/attackby(obj/item/I, mob/user) + I.attack(src, user) + attacked_by(I, user) // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. @@ -32,7 +59,7 @@ obj/item/proc/get_clamped_volume() else if(!src.force && src.w_class) return Clamp(src.w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 -/obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) +/obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob) if (!istype(M)) // not sure if this is the right thing... return @@ -50,124 +77,5 @@ obj/item/proc/get_clamped_volume() //spawn(1800) // this wont work right // M.lastattacker = null ///////////////////////// - - var/power = force - if(HULK in user.mutations) - power *= 2 - - if(!istype(M, /mob/living/carbon/human)) - if(istype(M, /mob/living/carbon/slime)) - var/mob/living/carbon/slime/slime = M - if(prob(25)) - user << "\red [src] passes right through [M]!" - return - - if(power > 0) - slime.attacked += 10 - - if(slime.Discipline && prob(50)) // wow, buddy, why am I getting attacked?? - slime.Discipline = 0 - - if(power >= 3) - if(slime.is_adult) - if(prob(5 + round(power/2))) - - if(slime.Victim) - if(prob(80) && !slime.client) - slime.Discipline++ - slime.Victim = null - slime.anchored = 0 - - spawn() - if(slime) - slime.SStun = 1 - sleep(rand(5,20)) - if(slime) - slime.SStun = 0 - - spawn(0) - if(slime) - slime.canmove = 0 - step_away(slime, user) - if(prob(25 + power)) - sleep(2) - if(slime && user) - step_away(slime, user) - slime.canmove = 1 - - else - if(prob(10 + power*2)) - if(slime) - if(slime.Victim) - if(prob(80) && !slime.client) - slime.Discipline++ - - if(slime.Discipline == 1) - slime.attacked = 0 - - spawn() - if(slime) - slime.SStun = 1 - sleep(rand(5,20)) - if(slime) - slime.SStun = 0 - - slime.Victim = null - slime.anchored = 0 - - - spawn(0) - if(slime && user) - step_away(slime, user) - slime.canmove = 0 - if(prob(25 + power*4)) - sleep(2) - if(slime && user) - step_away(slime, user) - slime.canmove = 1 - - - var/showname = "." - if(user) - showname = " by [user]!" - if(!(user in viewers(M, null))) - showname = "." - - if(attack_verb && attack_verb.len) - M.visible_message("[M] has been [pick(attack_verb)] with [src][showname]", - "[M] has been [pick(attack_verb)] with [src][showname]!") - else if(force == 0) - M.visible_message("[M] has been [pick("tapped","patted")] with [src][showname]", - "[M] has been [pick("tapped","patted")] with [src][showname]") - else - M.visible_message("[M] has been attacked with [src][showname]", - "[M] has been attacked with [src][showname]") - - if(!showname && user) - if(user.client) - user << "\red You attack [M] with [src]. " - - - - if(istype(M, /mob/living/carbon/human)) - M:attacked_by(src, user, def_zone) - else - switch(damtype) - if("brute") - if(istype(src, /mob/living/carbon/slime)) - M.adjustBrainLoss(power) - - else - - M.take_organ_damage(power) - if (prob(33) && src.force) // Added blood for whacking non-humans too - var/turf/location = M.loc - if (istype(location, /turf/simulated)) - location.add_blood_floor(M) - if("fire") - if (!(COLD_RESISTANCE in M.mutations)) - M.take_organ_damage(0, power) - M << "Aargh it burns!" - M.updatehealth() add_fingerprint(user) return 1 \ No newline at end of file diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index c95349ea78a..fc444ac69b8 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -75,7 +75,7 @@ var/allow_ai = 0 // allow ai job var/traitor_scaling_coeff = 6 //how much does the amount of players get divided by to determine traitors - var/changeling_scaling_coeff = 10 //how much does the amount of players get divided by to determine changelings + var/changeling_scaling_coeff = 7 //how much does the amount of players get divided by to determine changelings var/protect_roles_from_antagonist = 0// If security and such can be traitor/cult/other var/allow_latejoin_antagonists = 0 // If late-joining players can be traitor/changeling diff --git a/code/controllers/supply_shuttle.dm b/code/controllers/supply_shuttle.dm index 0267666cbb3..2b401a431a3 100644 --- a/code/controllers/supply_shuttle.dm +++ b/code/controllers/supply_shuttle.dm @@ -121,7 +121,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle var/points_per_process = 1 var/points_per_slip = 2 var/points_per_crate = 5 - var/plasma_per_point = 5 // 2 plasma for 1 point + var/plasma_per_point = 0.2 //5 points per plasma sheet due to increased rarity var/centcom_message = "" // Remarks from Centcom on how well you checked the last order. // Unique typepaths for unusual things we've already sent CentComm, associated with their potencies var/list/discoveredPlants = list() @@ -231,7 +231,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle var/crate_count = 0 centcom_message = "" - + for(var/atom/movable/MA in shuttle) if(MA.anchored) continue @@ -286,7 +286,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle if(istype(A, /obj/item/stack/sheet/mineral/plasma)) var/obj/item/stack/sheet/mineral/plasma/P = A plasma_count += P.amount - + if(istype(A, /obj/item/seeds)) var/obj/item/seeds/S = A if(S.rarity == 0) // Mundane species @@ -304,7 +304,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle centcom_message += "+[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work.
" points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later del(MA) - + if(plasma_count) centcom_message += "+[round(plasma_count/plasma_per_point)]: Received [plasma_count] units of exotic material.
" points += round(plasma_count / plasma_per_point) diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/advance/symptoms/dizzy.dm index 0a10a7bd066..14a01866ff4 100644 --- a/code/datums/diseases/advance/symptoms/dizzy.dm +++ b/code/datums/diseases/advance/symptoms/dizzy.dm @@ -33,5 +33,5 @@ Bonus M << "[pick("You feel dizzy.", "Your head starts spinning.")]" else M << "You are unable to look straight!" - M.make_dizzy(5) + M.Dizzy(5) return \ No newline at end of file diff --git a/code/FEA/FEA_gas_mixture.dm b/code/datums/gas_mixture.dm similarity index 87% rename from code/FEA/FEA_gas_mixture.dm rename to code/datums/gas_mixture.dm index e3f0d62e8f6..31c7f575aee 100644 --- a/code/FEA/FEA_gas_mixture.dm +++ b/code/datums/gas_mixture.dm @@ -41,10 +41,6 @@ What are the archived variables for? var/last_share - var/group_multiplier = 1 - //Size of the group this gas_mixture is representing. - //=1 for singletons - var/graphic var/list/datum/gas/trace_gases = list() @@ -323,22 +319,16 @@ What are the archived variables for? return 0 if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/self_heat_capacity = heat_capacity()*group_multiplier - var/giver_heat_capacity = giver.heat_capacity()*giver.group_multiplier + var/self_heat_capacity = heat_capacity() + var/giver_heat_capacity = giver.heat_capacity() var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity if(combined_heat_capacity != 0) temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity - if((group_multiplier>1)||(giver.group_multiplier>1)) - oxygen += giver.oxygen*giver.group_multiplier/group_multiplier - carbon_dioxide += giver.carbon_dioxide*giver.group_multiplier/group_multiplier - nitrogen += giver.nitrogen*giver.group_multiplier/group_multiplier - toxins += giver.toxins*giver.group_multiplier/group_multiplier - else - oxygen += giver.oxygen - carbon_dioxide += giver.carbon_dioxide - nitrogen += giver.nitrogen - toxins += giver.toxins + oxygen += giver.oxygen + carbon_dioxide += giver.carbon_dioxide + nitrogen += giver.nitrogen + toxins += giver.toxins if(giver.trace_gases.len) for(var/datum/gas/trace_gas in giver.trace_gases) @@ -346,7 +336,7 @@ What are the archived variables for? if(!corresponding) corresponding = new trace_gas.type() trace_gases += corresponding - corresponding.moles += trace_gas.moles*giver.group_multiplier/group_multiplier + corresponding.moles += trace_gas.moles // del(giver) return 1 @@ -366,10 +356,10 @@ What are the archived variables for? removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount) removed.toxins = QUANTIZE((toxins/sum)*amount) - oxygen -= removed.oxygen/group_multiplier - nitrogen -= removed.nitrogen/group_multiplier - carbon_dioxide -= removed.carbon_dioxide/group_multiplier - toxins -= removed.toxins/group_multiplier + oxygen -= removed.oxygen + nitrogen -= removed.nitrogen + carbon_dioxide -= removed.carbon_dioxide + toxins -= removed.toxins if(trace_gases.len) for(var/datum/gas/trace_gas in trace_gases) @@ -377,7 +367,7 @@ What are the archived variables for? removed.trace_gases += corresponding corresponding.moles = (trace_gas.moles/sum)*amount - trace_gas.moles -= corresponding.moles/group_multiplier + trace_gas.moles -= corresponding.moles removed.temperature = temperature @@ -397,10 +387,10 @@ What are the archived variables for? removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio) removed.toxins = QUANTIZE(toxins*ratio) - oxygen -= removed.oxygen/group_multiplier - nitrogen -= removed.nitrogen/group_multiplier - carbon_dioxide -= removed.carbon_dioxide/group_multiplier - toxins -= removed.toxins/group_multiplier + oxygen -= removed.oxygen + nitrogen -= removed.nitrogen + carbon_dioxide -= removed.carbon_dioxide + toxins -= removed.toxins if(trace_gases.len) for(var/datum/gas/trace_gas in trace_gases) @@ -408,7 +398,7 @@ What are the archived variables for? removed.trace_gases += corresponding corresponding.moles = trace_gas.moles*ratio - trace_gas.moles -= corresponding.moles/group_multiplier + trace_gas.moles -= corresponding.moles removed.temperature = temperature @@ -574,20 +564,20 @@ What are the archived variables for? else heat_capacity_sharer_to_self -= toxins_heat_capacity - old_self_heat_capacity = heat_capacity()*group_multiplier - old_sharer_heat_capacity = sharer.heat_capacity()*sharer.group_multiplier + old_self_heat_capacity = heat_capacity() + old_sharer_heat_capacity = sharer.heat_capacity() - oxygen -= delta_oxygen/group_multiplier - sharer.oxygen += delta_oxygen/sharer.group_multiplier + oxygen -= delta_oxygen + sharer.oxygen += delta_oxygen - carbon_dioxide -= delta_carbon_dioxide/group_multiplier - sharer.carbon_dioxide += delta_carbon_dioxide/sharer.group_multiplier + carbon_dioxide -= delta_carbon_dioxide + sharer.carbon_dioxide += delta_carbon_dioxide - nitrogen -= delta_nitrogen/group_multiplier - sharer.nitrogen += delta_nitrogen/sharer.group_multiplier + nitrogen -= delta_nitrogen + sharer.nitrogen += delta_nitrogen - toxins -= delta_toxins/group_multiplier - sharer.toxins += delta_toxins/sharer.group_multiplier + toxins -= delta_toxins + sharer.toxins += delta_toxins var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) @@ -608,8 +598,8 @@ What are the archived variables for? delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) - trace_gas.moles -= delta/group_multiplier - corresponding.moles += delta/sharer.group_multiplier + trace_gas.moles -= delta + corresponding.moles += delta if(delta) var/individual_heat_capacity = trace_gas.specific_heat*delta @@ -636,8 +626,8 @@ What are the archived variables for? delta = trace_gas.moles_archived/5 - trace_gas.moles -= delta/sharer.group_multiplier - corresponding.moles += delta/group_multiplier + trace_gas.moles -= delta + corresponding.moles += delta //Guaranteed transfer from sharer to self var/individual_heat_capacity = trace_gas.specific_heat*delta @@ -694,18 +684,18 @@ What are the archived variables for? heat_transferred -= toxins_heat_capacity*model.temperature heat_capacity_transferred -= toxins_heat_capacity - old_self_heat_capacity = heat_capacity()*group_multiplier + old_self_heat_capacity = heat_capacity() if(border_multiplier) - oxygen -= delta_oxygen*border_multiplier/group_multiplier - carbon_dioxide -= delta_carbon_dioxide*border_multiplier/group_multiplier - nitrogen -= delta_nitrogen*border_multiplier/group_multiplier - toxins -= delta_toxins*border_multiplier/group_multiplier + oxygen -= delta_oxygen*border_multiplier + carbon_dioxide -= delta_carbon_dioxide*border_multiplier + nitrogen -= delta_nitrogen*border_multiplier + toxins -= delta_toxins*border_multiplier else - oxygen -= delta_oxygen/group_multiplier - carbon_dioxide -= delta_carbon_dioxide/group_multiplier - nitrogen -= delta_nitrogen/group_multiplier - toxins -= delta_toxins/group_multiplier + oxygen -= delta_oxygen + carbon_dioxide -= delta_carbon_dioxide + nitrogen -= delta_nitrogen + toxins -= delta_toxins var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) @@ -717,9 +707,9 @@ What are the archived variables for? delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) if(border_multiplier) - trace_gas.moles -= delta*border_multiplier/group_multiplier + trace_gas.moles -= delta*border_multiplier else - trace_gas.moles -= delta/group_multiplier + trace_gas.moles -= delta var/heat_cap_transferred = delta*trace_gas.specific_heat heat_transferred += heat_cap_transferred*temperature_archived @@ -756,8 +746,8 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) - self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) - sharer_temperature_delta = heat/(sharer_heat_capacity*sharer.group_multiplier) + self_temperature_delta = -heat/(self_heat_capacity) + sharer_temperature_delta = heat/(sharer_heat_capacity) else return 1 @@ -788,8 +778,8 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) - self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) - sharer_temperature_delta = heat/(sharer_heat_capacity*sharer.group_multiplier) + self_temperature_delta = -heat/self_heat_capacity + sharer_temperature_delta = heat/sharer_heat_capacity else return 1 @@ -816,7 +806,7 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) - self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) + self_temperature_delta = -heat/self_heat_capacity sharer_temperature_delta = heat/sharer.heat_capacity else return 1 @@ -842,7 +832,7 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) - self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) + self_temperature_delta = -heat/self_heat_capacity if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) @@ -864,8 +854,8 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) - temperature -= heat/(self_heat_capacity*group_multiplier) - sharer.temperature += heat/(sharer_heat_capacity*sharer.group_multiplier) + temperature -= heat/self_heat_capacity + sharer.temperature += heat/sharer_heat_capacity temperature_mimic(turf/model, conduction_coefficient, border_multiplier) var/delta_temperature = (temperature - model.temperature) @@ -877,9 +867,9 @@ What are the archived variables for? (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) if(border_multiplier) - temperature -= heat*border_multiplier/(self_heat_capacity*group_multiplier) + temperature -= heat*border_multiplier/self_heat_capacity else - temperature -= heat/(self_heat_capacity*group_multiplier) + temperature -= heat/self_heat_capacity temperature_turf_share(turf/simulated/sharer, conduction_coefficient) var/delta_temperature = (temperature_archived - sharer.temperature) @@ -890,7 +880,7 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) - temperature -= heat/(self_heat_capacity*group_multiplier) + temperature -= heat/self_heat_capacity sharer.temperature += heat/sharer.heat_capacity compare(datum/gas_mixture/sample) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 1224cb1391b..4a9576fa51d 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1047,3 +1047,34 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/vending_refill/autodrobe) cost = 15 containername = "autodrobe supply crate" + +/datum/supply_packs/misc/formalwear //This is a very classy crate. + name = "Formal-wear crate" + contains = list(/obj/item/clothing/under/blacktango, + /obj/item/clothing/under/assistantformal, + /obj/item/clothing/under/assistantformal, + /obj/item/clothing/under/lawyer/bluesuit, + /obj/item/clothing/suit/lawyer/bluejacket, + /obj/item/clothing/under/lawyer/purpsuit, + /obj/item/clothing/suit/lawyer/purpjacket, + /obj/item/clothing/under/lawyer/blacksuit, + /obj/item/clothing/suit/lawyer/blackjacket, + /obj/item/clothing/tie/waistcoat, + /obj/item/clothing/tie/blue, + /obj/item/clothing/tie/red, + /obj/item/clothing/tie/black, + /obj/item/clothing/head/bowler, + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/flatcap, + /obj/item/clothing/head/beret, + /obj/item/clothing/head/that, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/under/suit_jacket/charcoal, + /obj/item/clothing/under/suit_jacket/navy, + /obj/item/clothing/under/suit_jacket/burgundy, + /obj/item/clothing/under/suit_jacket/checkered, + /obj/item/clothing/under/suit_jacket/tan) + cost = 30 //Lots of very expensive items. You gotta pay up to look good! + containername = "formal-wear crate" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 5c799fc47d2..b02ddd2b409 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -51,6 +51,7 @@ var/list/uplink_items = list() /datum/uplink_item/proc/spawn_item(var/turf/loc, var/obj/item/device/uplink/U) if(item) U.uses -= max(cost, 0) + U.used_TC += cost feedback_add_details("traitor_uplink_items_bought", "[item]") return new item(loc) @@ -77,7 +78,12 @@ var/list/uplink_items = list() if(istype(I, /obj/item) && ishuman(user)) var/mob/living/carbon/human/A = user A.put_in_any_hand_if_possible(I) - U.purchase_log += "[user] ([user.ckey]) bought [name]." + + if(istype(I,/obj/item/weapon/storage/box/) && I.contents.len>0) + for(var/atom/o in I) + U.purchase_log += "\icon[o]" + else + U.purchase_log += "\icon[I]" U.interact(user) return 1 diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 8efc7a3a1c7..7aa3c4120c3 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -355,6 +355,10 @@ proc/process_ghost_teleport_locs() name = "\improper Asteroid - Artifact" icon_state = "cave" +/area/asteroid/artifactroom/New() + ..() + lighting_use_dynamic = 1 + InitializeLighting() diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index 50b742c4d88..b8fce942236 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -32,7 +32,6 @@ proc/spawn_room(var/atom/start_loc, var/x_size, var/y_size, var/list/walltypes, A.contents += T - return room_turfs ////////////// @@ -61,24 +60,27 @@ proc/make_mining_asteroid_secret() if("organharvest") walltypes = list(/turf/simulated/wall/r_wall=2,/turf/simulated/wall=2,/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor,/turf/simulated/floor/engine) - treasureitems = list(/obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1,/obj/machinery/bot/medbot/mysterious=1) + treasureitems = list(/obj/machinery/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/critter/cat=2) fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/appendix=2,/obj/structure/closet/crate/freezer=2, /obj/structure/optable=1,/obj/item/weapon/scalpel=1,/obj/item/weapon/storage/firstaid/regular=3, - /obj/item/weapon/tank/anesthetic=1, /obj/item/weapon/surgical_drapes=2) + /obj/item/weapon/tank/anesthetic=1, /obj/item/weapon/surgical_drapes=2, /obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1) if("cult") theme = "cult" walltypes = list(/turf/simulated/wall/cult=3,/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor/engine/cult) - treasureitems = list(/mob/living/simple_animal/hostile/creature=1,/obj/item/organ/heart=2,/obj/item/device/soulstone=1) + treasureitems = list(/obj/item/device/soulstone=1, /obj/item/clothing/suit/space/cult=1, /obj/item/weapon/bedsheet/cult=2, + /obj/item/clothing/suit/cultrobes=2, /mob/living/simple_animal/hostile/creature=3) fluffitems = list(/obj/effect/gateway=1,/obj/effect/gibspawner=1,/obj/structure/cult/talisman=1,/obj/item/toy/crayon/red=2, - /obj/effect/decal/cleanable/blood=4,/obj/structure/table/woodentable=2,/obj/item/weapon/ectoplasm=3) + /obj/item/organ/heart=2, /obj/effect/decal/cleanable/blood=4,/obj/structure/table/woodentable=2,/obj/item/weapon/ectoplasm=3, + /obj/item/clothing/head/helmet/space/cult=1, /obj/item/clothing/shoes/cult=1) if("wizden") theme = "wizden" walltypes = list(/turf/simulated/wall/mineral/plasma=3,/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor/wood) - treasureitems = list(/obj/item/weapon/veilrender/vealrender=1,/obj/item/clothing/glasses/monocle=1,/obj/item/key=1) + treasureitems = list(/obj/item/weapon/veilrender/vealrender=2, /obj/item/weapon/spellbook/oneuse/blind=1,/obj/item/clothing/head/wizard/red=2, + /obj/item/weapon/spellbook/oneuse/forcewall=1, /obj/item/weapon/spellbook/oneuse/smoke=1, /obj/structure/constructshell = 1, /obj/item/toy/katana=3) fluffitems = list(/obj/structure/safe/floor=1,/obj/structure/dresser=1,/obj/item/weapon/storage/belt/soulstone=1,/obj/item/trash/candle=3, /obj/item/weapon/dice=3,/obj/item/weapon/staff=2,/obj/effect/decal/cleanable/dirt=3,/obj/item/weapon/coin/mythril=3) @@ -86,7 +88,8 @@ proc/make_mining_asteroid_secret() theme = "cavein" walltypes = list(/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor/plating/asteroid/airless, /turf/simulated/floor/beach/sand) - treasureitems = list(/obj/mecha/working/ripley/mining=1,/obj/item/weapon/pickaxe/jackhammer=2,/obj/item/weapon/pickaxe/diamonddrill=2,) + treasureitems = list(/obj/mecha/working/ripley/mining=1, /obj/item/weapon/pickaxe/diamonddrill=2,/obj/item/weapon/gun/energy/kinetic_accelerator=1, + /obj/item/weapon/resonator=1, /obj/item/weapon/pickaxe/jackhammer=5) fluffitems = list(/obj/effect/decal/cleanable/blood=3,/obj/effect/decal/remains/human=1,/obj/item/clothing/under/overalls=1, /obj/item/weapon/reagent_containers/food/snacks/grown/chili=1,/obj/item/weapon/tank/oxygen/red=2) @@ -101,22 +104,25 @@ proc/make_mining_asteroid_secret() theme = "hitech" walltypes = list(/turf/simulated/wall/r_wall=5,/turf/simulated/mineral/random=1) floortypes = list(/turf/simulated/floor/greengrid,/turf/simulated/floor/bluegrid) - treasureitems = list(/obj/item/weapon/pickaxe/plasmacutter=1,/obj/machinery/shieldgen=1,/obj/item/weapon/cell/hyper=1) + treasureitems = list(/obj/item/weapon/cell/hyper=1, /obj/machinery/chem_dispenser/constructable=1,/obj/machinery/computer/telescience=1, /obj/machinery/r_n_d/protolathe=1, + /obj/machinery/biogenerator=1) fluffitems = list(/obj/structure/table/reinforced=2,/obj/item/weapon/stock_parts/scanning_module/phasic=3, /obj/item/weapon/stock_parts/matter_bin/super=3,/obj/item/weapon/stock_parts/manipulator/pico=3, - /obj/item/weapon/stock_parts/capacitor/super=3,/obj/item/device/pda/clear=1) + /obj/item/weapon/stock_parts/capacitor/super=3,/obj/item/device/pda/clear=1, /obj/structure/mecha_wreckage/phazon=1) if("speakeasy") theme = "speakeasy" floortypes = list(/turf/simulated/floor,/turf/simulated/floor/wood) - treasureitems = list(/obj/item/weapon/melee/energy/sword/pirate=1,/obj/structure/closet/syndicate/resources=2) + treasureitems = list(/obj/item/weapon/melee/energy/sword/pirate=1,/obj/item/weapon/gun/projectile/revolver/doublebarrel=1, /obj/machinery/reagentgrinder=2, + /obj/structure/reagent_dispensers/beerkeg=5, /obj/machinery/computer/security/wooden_tv=4, /obj/machinery/vending/coffee=3) fluffitems = list(/obj/structure/table/woodentable=2,/obj/structure/reagent_dispensers/beerkeg=1,/obj/item/weapon/spacecash/c500=4, /obj/item/weapon/reagent_containers/food/drinks/shaker=1,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine=3, /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey=3,/obj/item/clothing/shoes/laceup=2) if("plantlab") theme = "plantlab" - treasureitems = list(/obj/item/weapon/gun/energy/floragun=1,/obj/item/seeds/novaflowerseed=2,/obj/item/seeds/bluespacetomatoseed=2) + treasureitems = list(/obj/item/weapon/gun/energy/floragun=1,/obj/item/seeds/novaflowerseed=2,/obj/item/seeds/bluespacetomatoseed=2,/obj/item/seeds/bluetomatoseed=2, + /obj/item/seeds/coffee_robusta_seed=2, /obj/item/seeds/cashseed=2) fluffitems = list(/obj/structure/flora/kirbyplants=1,/obj/structure/table/reinforced=2,/obj/machinery/hydroponics=1, /obj/effect/glowshroom/single=2,/obj/item/weapon/reagent_containers/syringe/antitoxin=2, /obj/item/weapon/reagent_containers/glass/bottle/diethylamine=3,/obj/item/weapon/reagent_containers/glass/bottle/ammonia=3) @@ -167,7 +173,7 @@ proc/make_mining_asteroid_secret() valid = 0 continue - if(locate(/turf/simulated/floor/plating/asteroid/airless) in surroundings) + if(locate(/turf/simulated/floor/plating/asteroid/airless) in range(5,T))//A little less strict than the other checks due to tunnels valid = 0 continue @@ -182,10 +188,9 @@ proc/make_mining_asteroid_secret() if(istype(A)) spawn(2) A.fullUpdateMineralOverlays() - T = pick(emptyturfs) if(T) - + new /obj/effect/glowshroom/single(T) //Just to make it a little more visible var/surprise = null surprise = pickweight(treasureitems) new surprise(T)//here's the prize diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index 7cc8295f27a..3045b830f9e 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -79,7 +79,7 @@ /mob/living/simple_animal/hostile/blobspore/Life() if(!is_zombie && isturf(src.loc)) - for(var/mob/living/carbon/human/H in src.loc) //Only for people in the same tile + for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile if(H.stat == DEAD) Zombify(H) break diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index c7de9150fe8..96c93a625d4 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -343,7 +343,7 @@ if(!M.mind || !M.mind.changeling) M.ear_deaf += 30 M.confused += 20 - M.make_jittery(50) + M.Jitter(50) else M << sound('sound/effects/screech.ogg') @@ -535,6 +535,20 @@ var/list/datum/dna/hivemind_bank = list() if(src && src.mind && src.mind.changeling) src.mind.changeling.mimicing = "" +/mob/living/carbon/proc/changeling_emp_shriek() + set category = "Changeling" + set name = "Dissonant Shriek (20)" + + var/datum/changeling/changeling = changeling_power(20) + if(!changeling) return + + for(var/obj/machinery/light/L in range(5, usr)) + L.on = 1 + L.broken() + + empulse(get_turf(src), 2, 5, 1) + + changeling.chem_charges -= 20 /mob/living/carbon/proc/changeling_arm_blade() set category = "Changeling" @@ -542,10 +556,12 @@ var/list/datum/dna/hivemind_bank = list() if(istype(l_hand, /obj/item/weapon/melee/arm_blade)) //Not the nicest way to do it, but eh del l_hand //Arm blades can't be dropped, we have to delete them directly. + update_inv_l_hand() return if(istype(r_hand, /obj/item/weapon/melee/arm_blade)) del r_hand + update_inv_r_hand() return var/datum/changeling/changeling = changeling_power(20) @@ -567,7 +583,7 @@ var/list/datum/dna/hivemind_bank = list() ////////// /mob/living/carbon/proc/set_sting(A, icon, dna=null) //setting the sting and ui icon for it - src << "We prepare our sting, use alt+click on target to sting them." + src << "We prepare our sting, use alt+click or middle mouse button on target to sting them." src.mind.changeling.chosen_sting = A if(dna) src.mind.changeling.chosen_dna = dna diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index 6c23082de16..862b156501a 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -161,6 +161,13 @@ var/list/powerinstances allowduringlesserform = 1 verbpath = /mob/living/carbon/proc/changeling_mute_sting +/datum/power/changeling/emp_shriek + name = "Dissonant Shriek" + desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics." + genomecost = 1 + allowduringlesserform = 1 + verbpath = /mob/living/carbon/proc/changeling_emp_shriek + /datum/power/changeling/arm_blade name = "Arm Blade" desc = "We reform one of our arms into a deadly blade." diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 63690a30078..903732b6d17 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -26,7 +26,7 @@ /obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob) if(!iscultist(user)) user << "\red An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly." - user.make_dizzy(120) + user.Dizzy(120) /obj/item/clothing/head/culthood diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index f7faab0dd27..9a422e41904 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -305,6 +305,9 @@ if( syndicates.len || (ticker && istype(ticker.mode,/datum/game_mode/nuclear)) ) var/text = "
The syndicate operatives were:" + var/purchases = "" + var/TC_uses = 0 + for(var/datum/mind/syndicate in syndicates) text += "
[syndicate.key] was [syndicate.name] (" @@ -318,8 +321,16 @@ else text += "body destroyed" text += ")" + + for(var/obj/item/device/uplink/H in world_uplinks) + if(H && H.uplink_owner && H.uplink_owner==syndicate.name) + TC_uses += H.used_TC + purchases += H.purchase_log + text += "
" + text += "(Syndicates used [TC_uses] TC) [purchases]" + world << text return 1 diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 8eabd6a71e3..976ab5d719d 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -193,6 +193,19 @@ text += "body destroyed" text += ")" + + var/TC_uses = 0 + var/uplink_true = 0 + var/purchases = "" + for(var/obj/item/device/uplink/H in world_uplinks) + if(H && H.uplink_owner && H.uplink_owner==traitor.name) + TC_uses += H.used_TC + uplink_true=1 + purchases += H.purchase_log + + if(uplink_true) text += " (used [TC_uses] TC) [purchases]" + + if(traitor.objectives.len)//If the traitor had no objectives, don't need to process this. var/count = 1 for(var/datum/objective/objective in traitor.objectives) @@ -211,12 +224,14 @@ else special_role_text = "antagonist" + if(traitorwin) text += "
The [special_role_text] was successful!" feedback_add_details("traitor_success","SUCCESS") else text += "
The [special_role_text] has failed!" feedback_add_details("traitor_success","FAIL") + text += "
" world << text @@ -257,6 +272,7 @@ var/obj/item/device/uplink/hidden/T = new(R) target_radio.hidden_uplink = T + T.uplink_owner = "[traitor_mob]" target_radio.traitor_frequency = freq traitor_mob << "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [loc]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features." traitor_mob.mind.store_memory("Radio Freq: [format_frequency(freq)] ([R.name] [loc]).") @@ -266,6 +282,7 @@ var/obj/item/device/uplink/hidden/T = new(R) R.hidden_uplink = T + T.uplink_owner = "[traitor_mob]" var/obj/item/device/pda/P = R P.lock_code = pda_pass diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index f73cca4fb64..3584ea4cb8f 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -84,29 +84,6 @@ /obj/var/list/req_one_access = null /obj/var/req_one_access_txt = "0" -/obj/New() - ..() - //NOTE: If a room requires more than one access (IE: Morgue + medbay) set the req_acesss_txt to "5;6" if it requires 5 and 6 - if(src.req_access_txt) - var/list/req_access_str = text2list(req_access_txt,";") - if(!req_access) - req_access = list() - for(var/x in req_access_str) - var/n = text2num(x) - if(n) - req_access += n - - if(src.req_one_access_txt) - var/list/req_one_access_str = text2list(req_one_access_txt,";") - if(!req_one_access) - req_one_access = list() - for(var/x in req_one_access_str) - var/n = text2num(x) - if(n) - req_one_access += n - - - //returns 1 if this mob has sufficient access to use this object /obj/proc/allowed(mob/M) //check if it doesn't require any access at all @@ -134,9 +111,25 @@ return null /obj/proc/check_access(obj/item/I) + //These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system. + if(!src.req_access) + src.req_access = list() + if(src.req_access_txt) + var/list/req_access_str = text2list(req_access_txt,";") + for(var/x in req_access_str) + var/n = text2num(x) + if(n) + req_access += n + + if(!src.req_one_access) + src.req_one_access = list() + if(src.req_one_access_txt) + var/list/req_one_access_str = text2list(req_one_access_txt,";") + for(var/x in req_one_access_str) + var/n = text2num(x) + if(n) + req_one_access += n - if(!src.req_access && !src.req_one_access) //no requirements - return 1 if(!istype(src.req_access, /list)) //something's very wrong return 1 diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 644196c1c61..8f90db9ba41 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -327,7 +327,7 @@ var/global/lawyer = 0//Checks for another lawyer H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/purpsuit(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/lawyer/purpjacket(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_ears) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) @@ -336,6 +336,4 @@ var/global/lawyer = 0//Checks for another lawyer else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) - return 1 - - + return 1 diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 9c329e5a4f3..cfc9fabdba1 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -60,6 +60,7 @@ var/global/list/autolathe_recipes_hidden = list( \ new /obj/item/ammo_casing/shotgun(), \ new /obj/item/ammo_casing/shotgun/buckshot(), \ new /obj/item/ammo_casing/shotgun/dart(), \ + new /obj/item/ammo_casing/shotgun/incendiary(), \ /* new /obj/item/weapon/shield/riot(), */ \ ) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 285cf6228a5..1fac9a1592a 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -297,7 +297,7 @@ That prevents a few funky behaviors. C.name = "inteliCard" C.overlays.Cut() A.loc = T - T.occupant = A + T.occupier = A A.control_disabled = 1 if (A.stat == 2) T.overlays += image('icons/obj/computer.dmi', "ai-fixer-404") @@ -308,25 +308,25 @@ That prevents a few funky behaviors. A << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here." U << "\blue Transfer successful: \black [A.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed." else - if(!C.contents.len && T.occupant && !T.active) - C.name = "inteliCard - [T.occupant.name]" + if(!C.contents.len && T.occupier && !T.active) + C.name = "inteliCard - [T.occupier.name]" T.overlays += image('icons/obj/computer.dmi', "ai-fixer-empty") - if (T.occupant.stat == 2) + if (T.occupier.stat == 2) C.icon_state = "aicard-404" T.overlays -= image('icons/obj/computer.dmi', "ai-fixer-404") else C.icon_state = "aicard-full" T.overlays -= image('icons/obj/computer.dmi', "ai-fixer-full") - T.occupant << "You have been downloaded to a mobile storage device. Still no remote access." - U << "\blue Transfer successful: \black [T.occupant.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." - T.occupant.loc = C - T.occupant.cancel_camera() - T.occupant = null + T.occupier << "You have been downloaded to a mobile storage device. Still no remote access." + U << "\blue Transfer successful: \black [T.occupier.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." + T.occupier.loc = C + T.occupier.cancel_camera() + T.occupier = null else if (C.contents.len) U << "\red ERROR: \black Artificial intelligence detected on terminal." else if (T.active) U << "\red ERROR: \black Reconstruction in progress." - else if (!T.occupant) + else if (!T.occupier) U << "\red ERROR: \black Unable to locate artificial intelligence." if("NINJASUIT") var/obj/item/clothing/suit/space/space_ninja/C = src @@ -336,7 +336,7 @@ That prevents a few funky behaviors. else var/mob/living/silicon/ai/A = C.AI A.loc = T - T.occupant = A + T.occupier = A C.AI = null A.control_disabled = 1 T.overlays += image('icons/obj/computer.dmi', "ai-fixer-full") @@ -345,22 +345,22 @@ That prevents a few funky behaviors. A << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here." U << "\blue Transfer successful: \black [A.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed." else - if(!C.AI && T.occupant && !T.active) - if (T.occupant.stat) - U << "\red ERROR: \black [T.occupant.name] data core is corrupted. Unable to install." + if(!C.AI && T.occupier && !T.active) + if (T.occupier.stat) + U << "\red ERROR: \black [T.occupier.name] data core is corrupted. Unable to install." else T.overlays += image('icons/obj/computer.dmi', "ai-fixer-empty") T.overlays -= image('icons/obj/computer.dmi', "ai-fixer-full") - T.occupant << "You have been downloaded to a mobile storage device. Still no remote access." - U << "\blue Transfer successful: \black [T.occupant.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." - T.occupant.loc = C - T.occupant.cancel_camera() - T.occupant = null + T.occupier << "You have been downloaded to a mobile storage device. Still no remote access." + U << "\blue Transfer successful: \black [T.occupier.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." + T.occupier.loc = C + T.occupier.cancel_camera() + T.occupier = null else if (C.AI) U << "\red ERROR: \black Artificial intelligence detected on terminal." else if (T.active) U << "\red ERROR: \black Reconstruction in progress." - else if (!T.occupant) + else if (!T.occupier) U << "\red ERROR: \black Unable to locate artificial intelligence." if("NINJASUIT")//Ninjasuit var/obj/item/clothing/suit/space/space_ninja/T = target diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 7f4410897de..6dfa1f4dd5f 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -37,8 +37,10 @@ /obj/machinery/computer/aifixer/attack_hand(var/mob/user as mob) if(..()) return + interact(user) + +/obj/machinery/computer/aifixer/interact(mob/user) - user.set_machine(src) var/dat = "" if (src.occupier) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 65552c19747..3cc81b68c26 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -31,7 +31,7 @@ /obj/item/weapon/circuitboard/turbine_computer name = "circuit board (Turbine Computer)" build_path = /obj/machinery/computer/turbine_computer - origin_tech = "programming=4;engineering=4;power=4" + origin_tech = "programming=4;engineering=4;powerstorage=4" /obj/item/weapon/circuitboard/telesci_console name = "circuit board (Telescience Console)" build_path = /obj/machinery/computer/telescience diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 94430c382ce..b3672caa522 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -116,6 +116,7 @@ item_quants[n]++ else item_quants[n] = 1 + item_quants = sortAssoc(item_quants) /obj/machinery/smartfridge/attack_paw(mob/user as mob) return src.attack_hand(user) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index a4e0e3ce357..6bca4378e95 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -767,12 +767,12 @@ /obj/item/clothing/suit/wizrobe/marisa/fake = 1,/obj/item/clothing/under/sundress = 1,/obj/item/clothing/head/witchwig = 1,/obj/item/weapon/staff/broom = 1, /obj/item/clothing/suit/wizrobe/fake = 1,/obj/item/clothing/head/wizard/fake = 1,/obj/item/weapon/staff = 3,/obj/item/clothing/mask/gas/sexyclown = 1, /obj/item/clothing/under/sexyclown = 1,/obj/item/clothing/mask/gas/sexymime = 1,/obj/item/clothing/under/sexymime = 1,/obj/item/clothing/suit/apron/overalls = 1, - /obj/item/clothing/head/rabbitears =1) //Pretty much everything that had a chance to spawn. - contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1,/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 1) + /obj/item/clothing/head/rabbitears =1, /obj/item/clothing/head/sombrero = 1, /obj/item/clothing/head/sombrero/green = 1, /obj/item/clothing/suit/poncho = 1, + /obj/item/clothing/suit/poncho/green = 1, /obj/item/clothing/suit/poncho/red = 1) //Pretty much everything that had a chance to spawn. + contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1, /obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 1) premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1) refill_canister = /obj/item/weapon/vending_refill/autodrobe - /obj/machinery/vending/autodrobe/New() ..() component_parts = list() diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 8bc32a61042..97e7ed3f775 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -114,7 +114,7 @@ if(!istype(target, /obj) && !istype(target, /mob)) return if(istype(target, /mob)) var/mob/M = target - M.make_dizzy(3) + M.Dizzy(3) M.adjustBruteLoss(1) M.updatehealth() for (var/mob/V in viewers(src)) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 4281b270fb3..257d4d133c2 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -134,7 +134,7 @@ M.Stun(10) M.Paralyse(4) else - M.make_jittery(500) + M.Jitter(500) /* //else the mousetraps are useless if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M @@ -201,7 +201,7 @@ name = "\improper FNX-99 \"Hades\" Carbine" icon_state = "mecha_carbine" equip_cooldown = 5 - projectile = /obj/item/projectile/bullet/mechincendiary + projectile = /obj/item/projectile/bullet/incendiary/mech projectiles = 24 projectile_energy_cost = 15 diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 5700563ee2a..dc36b11e383 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -27,6 +27,8 @@ src.loc = loc src.target = target src.creator = creator + for(var/mob/M in src.loc) + src.teleport(M) if(lifespan > 0) spawn(lifespan) del(src) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e89edd7d166..8305f4c0a96 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -344,6 +344,8 @@ return 0 return 1 if(slot_l_store) + if(flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them. + return 0 if(H.l_store) return 0 if(!H.w_uniform) @@ -355,6 +357,8 @@ if( w_class <= 2 || (slot_flags & SLOT_POCKET) ) return 1 if(slot_r_store) + if(flags & NODROP) + return 0 if(H.r_store) return 0 if(!H.w_uniform) @@ -367,6 +371,8 @@ return 1 return 0 if(slot_s_store) + if(flags & NODROP) //Suit storage NODROP items drop if you take a suit off, this is to prevent people exploiting this. + return 0 if(H.s_store) return 0 if(!H.wear_suit) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 1dd8b09b71a..a0d807b634c 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -13,6 +13,8 @@ var/times_used = 0 //Number of times it's been used. var/broken = 0 //Is the flash burnt out? var/last_used = 0 //last world.time it was used. + var/burnt = "flashburnt" + var/flashanim = "flash2" /obj/item/device/flash/proc/clown_check(mob/user) if(user && (CLUMSY in user.mutations) && prob(50)) @@ -33,7 +35,7 @@ /obj/item/device/flash/proc/burn_out(mob/user = null) //Made so you can override it if you want to have an invincible flash from R&D or something. broken = 1 - icon_state = "flashburnt" + icon_state = burnt if(user) user << "The bulb has burnt out!" @@ -112,7 +114,7 @@ del(animation) if(!flashfail) - flick("flash2", src) + flick(flashanim, src) if(!issilicon(M)) user.visible_message("[user] blinds [M] with the flash!") @@ -201,4 +203,12 @@ /obj/item/device/flash/synthetic/attack_self(mob/living/carbon/user, flag = 0, emp = 0) ..() if(!broken) - burn_out(user) \ No newline at end of file + burn_out(user) + +/obj/item/device/flash/memorizer + name = "memorizer" + desc = "If you see this, you're not likely to remember it any time soon." + icon_state = "memorizer" + item_state = "nullrod" + burnt = "memorizerburnt" + flashanim = "memorizer2" diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index c929a933a70..55dce9f1dac 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -6,19 +6,29 @@ A list of items and costs is stored under the datum of every game mode, alongsid */ +var/list/world_uplinks = list() + /obj/item/device/uplink var/welcome // Welcoming menu message var/uses // Numbers of crystals // List of items not to shove in their hands. - var/list/purchase_log = list() + var/purchase_log = "" var/show_description = null var/active = 0 + var/uplink_owner = null//text-only + var/used_TC = 0 + /obj/item/device/uplink/New() ..() + world_uplinks+=src welcome = ticker.mode.uplink_welcome uses = ticker.mode.uplink_uses +/obj/item/device/uplink/Del() + world_uplinks-=src + ..() + //Let's build a menu! /obj/item/device/uplink/proc/generate_menu() diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index d0452e9d244..52e2ee146e8 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -7,95 +7,73 @@ /obj/item/weapon/grenade/flashbang/prime() update_mob() - for(var/obj/structure/closet/L in view(get_turf(src), null)) - if(locate(/mob/living/carbon/, L)) - for(var/mob/living/carbon/M in L) - bang(get_turf(src), M) + var/flashbang_turf = get_turf(src) + for(var/obj/structure/closet/L in view(7, flashbang_turf)) + for(var/mob/living/M in L) + bang(get_turf(M), M) + for(var/mob/living/M in view(7, flashbang_turf)) + bang(get_turf(M), M) - for(var/mob/living/carbon/M in viewers(get_turf(src), null)) - bang(get_turf(src), M) - - for(var/obj/effect/blob/B in view(8,get_turf(src))) //Blob damage here + for(var/obj/effect/blob/B in view(8,flashbang_turf)) //Blob damage here var/damage = round(30/(get_dist(B,get_turf(src))+1)) B.health -= damage B.update_icon() del(src) -/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) - // Added a new proc called 'bang' that takes a location and a person to be banged. - // Called during the loop that bangs people in lockers/containers and when banging - // people in normal view. Could theroetically be called during other explosions. - // -- Polymorph - M << "\red BANG" +/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/M) + M << "BANG" playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) //Checking for protections var/eye_safety = 0 - var/ear_safety = 0 + var/ear_safety = 2 + var/distance = max(1, get_dist(src, T)) + var/takes_eye_damage = 0 if(iscarbon(M)) - eye_safety = M.eyecheck() - if(ishuman(M)) - if(istype(M:ears, /obj/item/clothing/ears/earmuffs)) - ear_safety += 2 - if(HULK in M.mutations) - ear_safety += 1 - if(istype(M:head, /obj/item/clothing/head/helmet)) - ear_safety += 1 + var/mob/living/carbon/C = M + eye_safety = C.eyecheck() + if(ishuman(C)) + takes_eye_damage = 1 + var/mob/living/carbon/human/H = C + ear_safety = 0 + if(istype(H.ears, /obj/item/clothing/ears/earmuffs) || istype(H.head, /obj/item/clothing/head/helmet)) + ear_safety++ + if(ismonkey(C)) + ear_safety = 0 + takes_eye_damage = 1 -//Flashing everyone +//Flash if(eye_safety < 1) flick("e_flash", M.flash) M.eye_stat += rand(1, 3) - M.Stun(2) - M.Weaken(5) - - - -//Now applying sound - if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M)) - if(ear_safety > 0) - M.Stun(2) - M.Weaken(1) + M.Stun(max(10/distance, 3)) + M.Weaken(max(10/distance, 3)) + if (M.eye_stat >= 20 && takes_eye_damage) + M << "Your eyes start to burn badly!" + M.disabilities |= NEARSIGHTED + if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) + if (prob(M.eye_stat - 20 + 1)) + M << "You can't see anything!" + M.sdisabilities |= BLIND +//Bang + if((src.loc == M) || src.loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection + M.Stun(10) + M.Weaken(10) + if(!ear_safety) + M.Stun(max(10/distance, 3)) + M.Weaken(max(10/distance, 3)) + M.ear_damage += rand(0, 5) + M.ear_deaf = max(M.ear_deaf,15) + if (M.ear_damage >= 15) + M << "Your ears start to ring badly!" + if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) + if (prob(M.ear_damage - 10 + 5)) + M << "You can't hear anything!" + M.sdisabilities |= DEAF else - M.Stun(5) - M.Weaken(3) - if ((prob(14) || (M == src.loc && prob(70)))) - M.ear_damage += rand(1, 10) - else - M.ear_damage += rand(0, 5) - M.ear_deaf = max(M.ear_deaf,15) - - else if(get_dist(M, T) <= 5) - if(!ear_safety) - M.Stun(8) - M.ear_damage += rand(0, 3) - M.ear_deaf = max(M.ear_deaf,10) - - else if(!ear_safety) - M.Stun(4) - M.ear_damage += rand(0, 1) - M.ear_deaf = max(M.ear_deaf,5) - -//This really should be in mob not every check - if (M.eye_stat >= 20) - M << "\red Your eyes start to burn badly!" - M.disabilities |= NEARSIGHTED - if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) - if (prob(M.eye_stat - 20 + 1)) - M << "\red You can't see anything!" - M.sdisabilities |= BLIND - if (M.ear_damage >= 15) - M << "\red Your ears start to ring badly!" - if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang))) - if (prob(M.ear_damage - 10 + 5)) - M << "\red You can't hear anything!" - M.sdisabilities |= DEAF - else - if (M.ear_damage >= 5) - M << "\red Your ears start to ring!" - M.update_icons() - + if (M.ear_damage >= 5) + M << "Your ears start to ring!" /obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve desc = "Use of this weapon may constiute a war crime in your area, consult your local captain." diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index bc317891e04..d7cab0a8be1 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -40,7 +40,7 @@ var/turf/user_loc = user.loc var/turf/C_loc = C.loc - if(do_after(user, 40)) + if(do_after(user, 30)) if(!C || C.handcuffed) return if(user_loc == user.loc && C_loc == C.loc) diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index a7fa3c643f0..325e53cce16 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -14,6 +14,7 @@ activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") source.mind.store_memory("Uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) source << "The implanted uplink implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." + hidden_uplink.uplink_owner="[source]" return 1 diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 3fe8b18190a..62ad8fff215 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -52,7 +52,7 @@ A = input(user, "Area to jump to", "BOOYEA", A) in teleportlocs var/area/thearea = teleportlocs[A] - if (!user || user.stat || user.restrained()) + if (!user || user.stat || user.restrained() || uses <= 0) return if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf))))) return diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 2224652f68b..14b152cdca5 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -99,5 +99,7 @@ new /obj/item/clothing/suit/lawyer/bluejacket(src) new /obj/item/clothing/under/lawyer/purpsuit(src) new /obj/item/clothing/suit/lawyer/purpjacket(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/black(src) \ No newline at end of file + new /obj/item/clothing/under/lawyer/blacksuit(src) + new /obj/item/clothing/suit/lawyer/blackjacket(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/shoes/laceup(src) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index ba8d90e318c..b4823cc5181 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -25,6 +25,8 @@ new /obj/item/device/radio/headset/heads/captain(src) new /obj/item/clothing/gloves/captain(src) new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/clothing/under/captainformal(src) + new /obj/item/clothing/head/helmet/HoS/dermal(src) return @@ -91,6 +93,8 @@ new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/weapon/storage/belt/security(src) + new /obj/item/clothing/under/hosformalfem(src) + new /obj/item/clothing/under/hosformalmale(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 8b26ac4ced2..b355ad88802 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -301,6 +301,10 @@ new /obj/item/clothing/head/soft/grey(src) new /obj/item/clothing/head/soft/grey(src) new /obj/item/clothing/head/soft/grey(src) + if(prob(40)) + new /obj/item/clothing/under/assistantformal(src) + if(prob(40)) + new /obj/item/clothing/under/assistantformal(src) return diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 178f9788582..274b3e2a56f 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -10,7 +10,6 @@ * Morgue */ - /obj/structure/morgue name = "morgue" desc = "Used to keep bodies in untill someone fetches them." @@ -33,7 +32,7 @@ src.icon_state = "morgue2"//default dead no-client mob - var/list/compiled = recursive_mob_check(src)//run through contents + var/list/compiled = recursive_mob_check(src,0,0)//run through contents if(!length(compiled))//no mobs at all, but objects inside src.icon_state = "morgue3" @@ -45,9 +44,6 @@ break - - return - /obj/structure/morgue/ex_act(severity) switch(severity) if(1.0) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 398539f6b4a..33eff71e825 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -19,7 +19,7 @@ /* 21st Sept 2010 Updated by Skie -- Still not perfect but better! Stuff you can't do: -Call proc /mob/proc/make_dizzy() for some player +Call proc /mob/proc/Dizzy() for some player Because if you select a player mob as owner it tries to do the proc for /mob/living/carbon/human/ instead. And that gives a run-time error. But you can call procs that are of type /mob/living/carbon/human/proc/ for that player. diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index b05dbe49fba..e9ea3e3bce0 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -12,7 +12,7 @@ if(T.active_hotspot) burning = 1 - usr << "\blue @[target.x],[target.y] ([GM.group_multiplier]): O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" + usr << "\blue @[target.x],[target.y]: O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" for(var/datum/gas/trace_gas in GM.trace_gases) usr << "[trace_gas.type]: [trace_gas.moles]" feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 3f2c89d0020..de1f23b181d 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -175,3 +175,22 @@ icon_state = "fedora" item_state = "fedora" desc = "A really cool hat if you're a mobster. A really lame hat if you're not." + +/obj/item/clothing/head/sombrero + name = "sombrero" + icon_state = "sombrero" + item_state = "sombrero" + desc = "You feel mexican just wearing this." + +/obj/item/clothing/head/sombrero/green + name = "green sombrero" + icon_state = "greensombrero" + item_state = "greensombrero" + desc = "As elegant as a dancing cactus." + +/obj/item/clothing/head/sombrero/shamebrero + name = "shamebrero" + icon_state = "shamebrero" + item_state = "shamebrero" + desc = "Once it's on, it never comes off." + flags = NODROP diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index ae36e72a041..7c14bd2ffc1 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -96,4 +96,12 @@ src.chained = 1 src.slowdown = 15 src.icon_state = "orange1" - return \ No newline at end of file + return + +/obj/item/clothing/shoes/orange/attack_hand(mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/C = user + if(C.shoes == src && src.chained == 1) + user << "You need help taking these off!" + return + ..() \ No newline at end of file diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 924c0e21997..bb12a94f227 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -100,6 +100,14 @@ blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS +/obj/item/clothing/suit/lawyer/blackjacket + name = "black suit jacket" + desc = "A professional suit jacket." + icon_state = "suitjacket_black" + item_state = "ro_suit" + blood_overlay_type = "coat" + body_parts_covered = CHEST|ARMS + //Mime /obj/item/clothing/suit/suspenders name = "suspenders" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index ff0f688014c..780fb24b61d 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -160,6 +160,31 @@ body_parts_covered = CHEST|GROIN flags_inv = HIDEJUMPSUIT +/obj/item/clothing/suit/poncho + name = "poncho" + desc = "Your classic, non-racist poncho." + icon_state = "classicponcho" + item_state = "classicponcho" + +/obj/item/clothing/suit/poncho/green + name = "green poncho" + desc = "Your classic, non-racist poncho. This one is green." + icon_state = "greenponcho" + item_state = "greenponcho" + +/obj/item/clothing/suit/poncho/red + name = "red poncho" + desc = "Your classic, non-racist poncho. This one is red." + icon_state = "redponcho" + item_state = "redponcho" + +/obj/item/clothing/suit/poncho/ponchoshame + name = "poncho of shame" + desc = "Forced to live on your shameful acting as a fake mexican, you and your poncho have grown inseperable. Literally." + icon_state = "ponchoshame" + item_state = "ponchoshame" + flags = NODROP + /* * Misc */ diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 6eef367f8cb..e7c7aeb259a 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -2,7 +2,9 @@ name = "wizard hat" desc = "Strange-looking hat-wear that most certainly belongs to a real magic user." icon_state = "wizard" - //Not given any special protective value since the magic robes are full-body protection --NEO + gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE + permeability_coefficient = 0.01 + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20) /obj/item/clothing/head/wizard/red name = "red wizard hat" @@ -13,6 +15,9 @@ name = "wizard hat" desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." icon_state = "wizard-fake" + gas_transfer_coefficient = 1 + permeability_coefficient = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/head/wizard/marisa name = "witch hat" @@ -31,10 +36,10 @@ desc = "A magnificant, gem-lined robe that seems to radiate power." icon_state = "wizard" item_state = "wizrobe" - gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE + gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - body_parts_covered = CHEST|GROIN|ARMS|LEGS //It's magic, I ain't gotta explain shit. --NEO //fuck you neo, no way it covers his head -Pete - armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20) + body_parts_covered = CHEST|GROIN|ARMS|LEGS + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20) allowed = list(/obj/item/weapon/teleportation_scroll) flags_inv = HIDEJUMPSUIT @@ -70,18 +75,23 @@ desc = "A rather dull, blue robe meant to mimick real wizard robes." icon_state = "wizard-fake" item_state = "wizrobe" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + gas_transfer_coefficient = 1 + permeability_coefficient = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/head/wizard/marisa/fake name = "witch hat" desc = "Strange-looking hat-wear, makes you want to cast fireballs." icon_state = "marisa" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + gas_transfer_coefficient = 1 + permeability_coefficient = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/wizrobe/marisa/fake name = "witch robe" desc = "Magic is all about the spell power, ZE!" icon_state = "marisa" item_state = "marisarobe" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - + gas_transfer_coefficient = 1 + permeability_coefficient = 1 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 1b150e281ff..897fa1f2604 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -111,7 +111,7 @@ /obj/item/clothing/under/lawyer/bluesuit - name = "Blue Suit" + name = "blue suit" desc = "A classy suit and tie" icon_state = "bluesuit" item_state = "bluesuit" @@ -119,12 +119,19 @@ /obj/item/clothing/under/lawyer/purpsuit - name = "Purple Suit" + name = "purple suit" icon_state = "lawyer_purp" item_state = "lawyer_purp" item_color = "lawyer_purp" fitted = 0 +/obj/item/clothing/under/lawyer/blacksuit + name = "black suit" + desc = "A professional black suit. Nanotrasen Investigation Bureau approved!" + icon_state = "blacksuit" + item_state = "ba_suit" + item_color = "blacksuit" + /obj/item/clothing/under/librarian name = "sensible suit" desc = "It's very... sensible." diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 642d7585a75..badfb26b91b 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -174,6 +174,41 @@ item_state = "r_suit" item_color = "red_suit" +/obj/item/clothing/under/suit_jacket/charcoal + name = "charcoal suit" + desc = "A charcoal suit and red tie. Very professional." + icon_state = "charcoal_suit" + item_state = "charcoal_suit" + item_color = "charcoal_suit" + +/obj/item/clothing/under/suit_jacket/navy + name = "navy suit" + desc = "A navy suit and red tie, intended for the station's finest." + icon_state = "navy_suit" + item_state = "navy_suit" + item_color = "navy_suit" + +/obj/item/clothing/under/suit_jacket/burgundy + name = "burgundy suit" + desc = "A burgundy suit and black tie. Somewhat formal." + icon_state = "burgundy_suit" + item_state = "burgundy_suit" + item_color = "burgundy_suit" + +/obj/item/clothing/under/suit_jacket/checkered + name = "checkered suit" + desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?" + icon_state = "checkered_suit" + item_state = "checkered_suit" + item_color = "checkered_suit" + +/obj/item/clothing/under/suit_jacket/tan + name = "tan suit" + desc = "A tan suit with a yellow tie. Smart, but casual." + icon_state = "tan_suit" + item_state = "tan_suit" + item_color = "tan_suit" + /obj/item/clothing/under/blackskirt name = "black skirt" desc = "A black skirt, very fancy!" @@ -253,4 +288,41 @@ item_state = "sundress" item_color = "sundress" body_parts_covered = CHEST|GROIN + fitted = 0 + +/obj/item/clothing/under/captainformal + name = "captain's formal uniform" + desc = "A captain's formal-wear, for special occasions." + icon_state = "captain_formal" + item_state = "by_suit" + item_color = "captain_formal" + +/obj/item/clothing/under/hosformalmale + name = "head of security's formal uniform" + desc = "A male head of security's formal-wear, for special occasions." + icon_state = "hos_formal_male" + item_state = "r_suit" + item_color = "hos_formal_male" + +/obj/item/clothing/under/hosformalfem + name = "head of security's formal uniform" + desc = "A female head of security's formal-wear, for special occasions." + icon_state = "hos_formal_fem" + item_state = "r_suit" + item_color = "hos_formal_fem" + fitted = 0 + +/obj/item/clothing/under/assistantformal + name = "assistant's formal uniform" + desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown." + icon_state = "assistant_formal" + item_state = "gy_suit" + item_color = "assistant_formal" + +/obj/item/clothing/under/blacktango + name = "black tango dress" + desc = "Filled with latin fire." + icon_state = "black_tango" + item_state = "wcoat" + item_color = "black_tango" fitted = 0 \ No newline at end of file diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 326f09c0c47..b1f1c924178 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -18,6 +18,11 @@ icon_state = "redtie" item_color = "redtie" +/obj/item/clothing/tie/black + name = "black tie" + icon_state = "blacktie" + item_color = "blacktie" + /obj/item/clothing/tie/horrible name = "horrible tie" desc = "A neosilk clip-on tie. This one is disgusting." diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index d583e8db2e1..c67f22314d4 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -50,14 +50,136 @@ icon_state = "sextractor" density = 1 anchored = 1 + var/piles = list() obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob) if(isrobot(user)) return + + if (istype(O,/obj/item/weapon/storage/bag/plants)) + var/obj/item/weapon/storage/P = O + var/loaded = 0 + for(var/obj/item/seeds/G in P.contents) + if(contents.len >= 999) + break + ++loaded + add(G) + if (loaded) + user << "You put the seeds from \the [O.name] into [src]." + else + user << "There are no seeds in \the [O.name]." + return + user.drop_item() if(O && O.loc) O.loc = src.loc + if(seedify(O,-1)) user << "You extract some seeds." + return + else if (istype(O,/obj/item/seeds)) + add(O) + user << "You add [O] to [src.name]." + updateUsrDialog() + return else - user << "You can't extract any seeds from \the [O.name]." \ No newline at end of file + user << "You can't extract any seeds from \the [O.name]." + +datum/seed_pile + var/name = "" + var/lifespan = 0 //Saved stats + var/endurance = 0 + var/maturation = 0 + var/production = 0 + var/yield = 0 + var/potency = 0 + var/amount = 0 + +datum/seed_pile/New(var/name, var/life, var/endur, var/matur, var/prod, var/yie, var/poten, var/am = 1) + src.name = name + src.lifespan = life + src.endurance = endur + src.maturation = matur + src.production = prod + src.yield = yie + src.potency = poten + src.amount = am + +/obj/machinery/seed_extractor/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +obj/machinery/seed_extractor/interact(mob/user as mob) + if (stat) + return 0 + + var/dat = "Stored seeds:
" + + if (contents.len == 0) + dat += "No seeds" + else + dat += "" + for (var/datum/seed_pile/O in piles) + dat += "" + dat += "" + dat += "
NameLifespanEnduranceMaturationProductionYieldPotencyStock
[O.name][O.lifespan][O.endurance][O.maturation][O.production][O.yield][O.potency]" + dat += "Vend ([O.amount] left)
" + var/datum/browser/popup = new(user, "seed_ext", name, 700, 400) + popup.set_content(dat) + popup.open() + return + +obj/machinery/seed_extractor/Topic(var/href, var/list/href_list) + if(..()) + return + usr.set_machine(src) + + href_list["li"] = text2num(href_list["li"]) + href_list["en"] = text2num(href_list["en"]) + href_list["ma"] = text2num(href_list["ma"]) + href_list["pr"] = text2num(href_list["pr"]) + href_list["yi"] = text2num(href_list["yi"]) + href_list["pot"] = text2num(href_list["pot"]) + + for (var/datum/seed_pile/N in piles)//Find the pile we need to reduce... + if (href_list["name"] == N.name && href_list["li"] == N.lifespan && href_list["en"] == N.endurance && href_list["ma"] == N.maturation && href_list["pr"] == N.production && href_list["yi"] == N.yield && href_list["pot"] == N.potency) + if(N.amount <= 0) + return + N.amount = max(N.amount - 1, 0) + if (N.amount <= 0) + piles -= N + del(N) + break + + for (var/obj/T in contents)//Now we find the seed we need to vend + var/obj/item/seeds/O = T + if (O.plantname == href_list["name"] && O.lifespan == href_list["li"] && O.endurance == href_list["en"] && O.maturation == href_list["ma"] && O.production == href_list["pr"] && O.yield == href_list["yi"] && O.potency == href_list["pot"]) + O.loc = src.loc + break + + src.updateUsrDialog() + return + +obj/machinery/seed_extractor/proc/add(var/obj/item/seeds/O as obj) + if(contents.len >= 999) + usr << "\The [src] is full." + return 0 + + if(istype(O.loc,/mob)) + var/mob/M = O.loc + if(!M.unEquip(O)) + usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]" + return + else if(istype(O.loc,/obj/item/weapon/storage)) + var/obj/item/weapon/storage/S = O.loc + S.remove_from_storage(O,src) + + O.loc = src + + for (var/datum/seed_pile/N in piles) + if (O.plantname == N.name && O.lifespan == N.lifespan && O.endurance == N.endurance && O.maturation == N.maturation && O.production == N.production && O.yield == N.yield && O.potency == N.potency) + ++N.amount + return + + piles += new /datum/seed_pile(O.plantname, O.lifespan, O.endurance, O.maturation, O.production, O.yield, O.potency) + return \ No newline at end of file diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 586ebf3527a..193ce2969ca 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -14,7 +14,6 @@ var/stk_types = list() var/stk_amt = list() var/stack_list[0] //Key: Type. Value: Instance of type. - var/stack_amt = 50; //amount to stack before releasing var/obj/item/weapon/card/id/inserted_id var/points = 0 var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("gold" = 20), ("silver" = 20), ("uranium" = 20), ("bananium" = 30), ("diamond" = 40), ("plasma" = 40)) @@ -22,32 +21,47 @@ /obj/machinery/mineral/ore_redemption/proc/process_sheet(obj/item/weapon/ore/O) var/obj/item/stack/sheet/processed_sheet = SmeltMineral(O) if(processed_sheet) - if(!(processed_sheet.type in stack_list)) //It's the first of this sheet added - var/obj/item/stack/sheet/s = new processed_sheet.type(src,0) + if(!(processed_sheet in stack_list)) //It's the first of this sheet added + var/obj/item/stack/sheet/s = new processed_sheet(src,0) s.amount = 0 - stack_list[processed_sheet.type] = s - var/obj/item/stack/sheet/storage = stack_list[processed_sheet.type] - storage.amount += processed_sheet.amount //Stack the sheets + stack_list[processed_sheet] = s + var/obj/item/stack/sheet/storage = stack_list[processed_sheet] + storage.amount += 1 //Stack the sheets O.loc = null //Let the old sheet garbage collect - while(storage.amount > stack_amt) //Get rid of excessive stackage - var/obj/item/stack/sheet/out = new processed_sheet.type() - out.amount = stack_amt - unload_mineral(out) - storage.amount -= stack_amt /obj/machinery/mineral/ore_redemption/process() - var/turf/T = get_step(src, input_dir) + var/turf/T = get_turf(get_step(src, input_dir)) + var/i if(T) - var/obj/item/weapon/ore/O - for(O in T) - process_sheet(O) - for(var/obj/structure/ore_box/B in T) - for(O in B.contents) - process_sheet(O) + if(locate(/obj/item/weapon/ore) in T) + for (i = 0; i < 10; i++) + var/obj/item/weapon/ore/O = locate() in T + if(O) + process_sheet(O) + else + break + else + var/obj/structure/ore_box/B = locate() in T + if(B) + for (i = 0; i < 10; i++) + var/obj/item/weapon/ore/O = locate() in B.contents + if(O) + process_sheet(O) + else + break + +/obj/machinery/mineral/ore_redemption/attackby(var/obj/item/weapon/W, var/mob/user) + if(istype(W,/obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/I = usr.get_active_hand() + if(istype(I) && !istype(inserted_id)) + usr.drop_item() + I.loc = src + inserted_id = I + interact(user) /obj/machinery/mineral/ore_redemption/proc/SmeltMineral(var/obj/item/weapon/ore/O) if(O.refined_type) - var/obj/item/stack/sheet/M = new O.refined_type(src) + var/obj/item/stack/sheet/M = O.refined_type points += O.points return M del(O)//No refined type? Purge it. @@ -77,8 +91,6 @@ if(s.amount > 0) dat += text("[capitalize(s.name)]: [s.amount] Release
") - dat += text("
This unit can hold stacks of [stack_amt] sheets of each mineral type.

") - dat += text("
Mineral Value List:
[get_ore_values()]") user << browse("[dat]", "window=console_stacking_machine") @@ -103,24 +115,30 @@ inserted_id.verb_pickup() inserted_id = null if(href_list["choice"] == "claim") - inserted_id.mining_points += points - points = 0 - src << "Points transferred." + if(access_mining_station in inserted_id.access) + inserted_id.mining_points += points + points = 0 + else + usr << "Required access not found." else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I)) usr.drop_item() I.loc = src inserted_id = I - else usr << "\red No valid ID." + else usr << "No valid ID." if(href_list["release"] && istype(inserted_id)) if(check_access(inserted_id)) if(!(text2path(href_list["release"]) in stack_list)) return var/obj/item/stack/sheet/inp = stack_list[text2path(href_list["release"])] var/obj/item/stack/sheet/out = new inp.type() - out.amount = inp.amount - inp.amount = 0 - unload_mineral(out) + var/desired = input("How much?", "How much to eject?", 1) as num + out.amount = min(desired,50,inp.amount) + if(out.amount >= 1) + inp.amount -= out.amount + unload_mineral(out) + else + usr << "Required access not found." updateUsrDialog() return @@ -144,16 +162,16 @@ new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 150), new /datum/data/mining_equipment("Stimulant pills", /obj/item/weapon/storage/pill_bottle/stimulant, 350), new /datum/data/mining_equipment("Alien toy", /obj/item/clothing/mask/facehugger/toy, 250), - new /datum/data/mining_equipment("Laser pointer", /obj/item/device/laser_pointer, 250), + new /datum/data/mining_equipment("Laser pointer", /obj/item/device/laser_pointer, 500), new /datum/data/mining_equipment("Point card", /obj/item/weapon/card/mining_point_card, 500), new /datum/data/mining_equipment("Lazarus injector", /obj/item/weapon/lazarus_injector, 1000), new /datum/data/mining_equipment("Space cash", /obj/item/weapon/spacecash/c1000, 5000), new /datum/data/mining_equipment("Sonic jackhammer", /obj/item/weapon/pickaxe/jackhammer, 500), new /datum/data/mining_equipment("Mining drone", /mob/living/simple_animal/hostile/mining_drone/, 500), - new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 250), + new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 200), new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 750), new /datum/data/mining_equipment("Kinetic accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 1000), - new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack/carbondioxide, 2000), + new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack/carbondioxide/mining, 2000), ) /datum/data/mining_equipment/ @@ -220,20 +238,28 @@ if(istype(I, /obj/item/weapon/mining_voucher)) RedeemVoucher(I, user) return + if(istype(I,/obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/C = usr.get_active_hand() + if(istype(C) && !istype(inserted_id)) + usr.drop_item() + C.loc = src + inserted_id = C + interact(user) + return ..() /obj/machinery/mineral/equipment_locker/proc/RedeemVoucher(voucher, redeemer) - var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") in list("Resonator kit", "Kinetic Accelerator", "Mining Drone", "Cancel") - if(!selection || !Adjacent(redeemer)) + var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") in list("Resonator", "Kinetic Accelerator", "Mining Drone", "Cancel") + if(!selection || !Adjacent(redeemer) || !voucher) return switch(selection) - if("Resonator kit") + if("Resonator") new /obj/item/weapon/resonator(src.loc) - new /obj/item/weapon/storage/pill_bottle/stimulant(src.loc) if("Kinetic Accelerator") new /obj/item/weapon/gun/energy/kinetic_accelerator(src.loc) if("Mining Drone") new /mob/living/simple_animal/hostile/mining_drone(src.loc) + new /obj/item/weapon/weldingtool/hugetank(src.loc) if("Cancel") return del(voucher) @@ -375,7 +401,7 @@ icon_state = "shield1" layer = 4.1 mouse_opacity = 0 - var/resonance_damage = 30 + var/resonance_damage = 20 var/creator = null /obj/effect/resonance/New() @@ -393,7 +419,7 @@ var/pressure = environment.return_pressure() if(pressure < 50) name = "strong resonance field" - resonance_damage = 60 + resonance_damage = 45 spawn(50) playsound(src,'sound/effects/sparks4.ogg',50,1) if(creator) @@ -426,11 +452,12 @@ /mob/living/simple_animal/hostile/mining_drone/ name = "nanotrasen minebot" - desc = "A small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife." + desc = "The instructions printed on the side read: This is a small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife. A mining scanner can instruct it to drop loose ore. Field repairs can be done with a welder." icon = 'icons/obj/aibots.dmi' icon_state = "mining_drone" icon_living = "mining_drone" status_flags = CANSTUN|CANWEAKEN|CANPUSH + stop_automated_movement_when_pulled = 1 mouse_opacity = 1 faction = "neutral" a_intent = "harm" @@ -448,8 +475,8 @@ move_to_delay = 10 retreat_distance = 1 minimum_distance = 2 - health = 100 - maxHealth = 100 + health = 125 + maxHealth = 125 melee_damage_lower = 15 melee_damage_upper = 15 environment_smash = 0 @@ -508,7 +535,6 @@ ..() /mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior() - stop_automated_movement_when_pulled = 1 idle_vision_range = 9 search_objects = 2 wander = 1 @@ -518,8 +544,7 @@ icon_state = "mining_drone" /mob/living/simple_animal/hostile/mining_drone/proc/SetOffenseBehavior() - stop_automated_movement_when_pulled = 0 - idle_vision_range = 5 + idle_vision_range = 7 search_objects = 0 wander = 0 ranged = 1 @@ -582,6 +607,7 @@ if(istype(target, /mob/living/simple_animal/hostile)) var/mob/living/simple_animal/hostile/H = M H.friends += user + H.attack_same = 1 //No invincible army of completely loyal mobs log_game("[user] has revived hostile mob [target] with a lazarus injector") loaded = 0 user.visible_message("[user] injects [M] with [src], reviving it.") @@ -641,4 +667,11 @@ name = "DANGEROUS ALIEN LIFE" desc = "A sign that warns would be travellers of hostile alien life in the vicinity." icon = 'icons/obj/mining.dmi' - icon_state = "xeno_warning" \ No newline at end of file + icon_state = "xeno_warning" + +/**********************Mining Jetpack**********************/ +/obj/item/weapon/tank/jetpack/carbondioxide/mining + name = "mining jetpack" + icon_state = "jetpack-mining" + item_state = "jetpack-mining" + desc = "A tank of compressed carbon dioxide for miners to use as propulsion in local space. Should not be used for internals." \ No newline at end of file diff --git a/code/modules/mining/laborcamp/laborminerals.dm b/code/modules/mining/laborcamp/laborminerals.dm index 8e9f59a849b..8c5d70b08ea 100644 --- a/code/modules/mining/laborcamp/laborminerals.dm +++ b/code/modules/mining/laborcamp/laborminerals.dm @@ -1,5 +1,5 @@ /turf/simulated/mineral/random/labormineral - mineralSpawnChanceList = list("Uranium" = 5, "Iron" = 100, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Plasma" = 25/*, "Adamantine" =5, "Cave" = 1 */) //Don't suffocate the prisoners with caves + mineralSpawnChanceList = list("Uranium" = 1, "Iron" = 100, "Diamond" = 1, "Gold" = 1, "Silver" = 1, "Plasma" = 1/*, "Adamantine" =5, "Cave" = 1 */) //Don't suffocate the prisoners with caves icon_state = "rock_labor" /turf/simulated/mineral/random/labormineral/New() diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 8a736e5bc76..b7e86d5c48b 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -120,7 +120,7 @@ /obj/machinery/mineral/stacking_machine/laborstacker var/points = 0 //The unclaimed value of ore stacked. Value for each ore loosely relative to its rarity. - var/list/ore_values = list(("glass" = 1), ("metal" = 2), ("solid plasma" = 2), ("plasteel" = 4), ("reinforced glass" = 4), ("gold" = 5), ("silver" = 5), ("uranium" = 5), ("diamond" = 15), ("bananium" = 50)) + var/list/ore_values = list(("glass" = 1), ("metal" = 2), ("solid plasma" = 20), ("plasteel" = 23), ("reinforced glass" = 4), ("gold" = 20), ("silver" = 20), ("uranium" = 20), ("diamond" = 25), ("bananium" = 50)) /obj/machinery/mineral/stacking_machine/laborstacker/proc/get_ore_values() var/dat = "" diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index e0f8c8d9347..f34344dabb0 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -226,7 +226,8 @@ var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) var/log_str = "[src.activated_ckey]? [src.activated_name] has triggered a gibtonite deposit reaction [A.name] (JMP)." - message_admins(log_str) + if(z != 5) + message_admins(log_str) log_game("[src.activated_ckey] ([src.activated_name]) has triggered a gibtonite deposit reaction at [A.name] ([A.x], [A.y], [A.z]).") countdown() @@ -279,7 +280,7 @@ /turf/simulated/floor/plating/asteroid/airless/cave var/length = 100 - var/mob_spawn_list = list("Goldgrub" = 1, "Goliath" = 5, "Basilisk" = 3, "Hivelord" = 5) + var/mob_spawn_list = list("Goldgrub" = 1, "Goliath" = 5, "Basilisk" = 4, "Hivelord" = 3) var/sanity = 1 /turf/simulated/floor/plating/asteroid/airless/cave/New(loc, var/length, var/go_backwards = 1, var/exclude_dir = -1) @@ -355,10 +356,10 @@ t.fullUpdateMineralOverlays() /turf/simulated/floor/plating/asteroid/airless/cave/proc/SpawnMonster(var/turf/T) - if(prob(2)) + if(prob(30)) if(istype(loc, /area/mine/explored)) return - for(var/atom/A in range(7,T))//Lowers chance of mob clumps + for(var/atom/A in range(15,T))//Lowers chance of mob clumps if(istype(A, /mob/living/simple_animal/hostile/asteroid)) return var/randumb = pickweight(mob_spawn_list) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 2de3f3ef8d4..ddbaeafd8b7 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -11,6 +11,7 @@ gender = NEUTER dna = null faction = "alien" + ventcrawler = 2 var/storedPlasma = 250 var/max_plasma = 500 diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 524405ec1d5..bdbb5bbcad5 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -7,6 +7,7 @@ status_flags = CANPARALYSE heal_rate = 5 plasma_rate = 20 + ventcrawler = 0 //pull over that ass too fat /mob/living/carbon/alien/humanoid/queen/New() @@ -22,7 +23,6 @@ real_name = src.name verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin,/mob/living/carbon/alien/humanoid/proc/resin) - verbs -= /mob/living/carbon/alien/verb/ventcrawl ..() /mob/living/carbon/alien/humanoid/queen/handle_regular_hud_updates() @@ -85,4 +85,4 @@ else icon_state = "queen_s" for(var/image/I in overlays_standing) - overlays += I + overlays += I diff --git a/code/modules/mob/living/carbon/alien/powers.dm b/code/modules/mob/living/carbon/alien/powers.dm deleted file mode 100644 index d9452a8d799..00000000000 --- a/code/modules/mob/living/carbon/alien/powers.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/living/carbon/alien/verb/ventcrawl() // -- TLE - set name = "Crawl through vent" - set desc = "Enter an air vent and crawl through the pipe system." - set category = "Alien" - handle_ventcrawl() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 1b4fa6b9e84..d337e56d4dd 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -54,12 +54,14 @@ var/const/MAX_ACTIVE_TIME = 400 usr << "\red \b It looks like the proboscis has been removed." return -/obj/item/clothing/mask/facehugger/attackby() - Die() +/obj/item/clothing/mask/facehugger/attackby(var/obj/item/O,var/mob/m) + if(O.force) + Die() return -/obj/item/clothing/mask/facehugger/bullet_act() - Die() +/obj/item/clothing/mask/facehugger/bullet_act(var/obj/item/projectile/P) + if(P.damage) + Die() return /obj/item/clothing/mask/facehugger/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0e1e19efc97..18b1c266ff6 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -51,8 +51,15 @@ visible_message("[M] bursts out of [src]!") . = ..() +/mob/living/carbon/MiddleClickOn(var/atom/A) + if(!src.stat && src.mind && src.mind.changeling && src.mind.changeling.chosen_sting && (istype(A, /mob/living/carbon)) && (A != src)) + next_click = world.time + 5 + call(src, src.mind.changeling.chosen_sting)(A) + else + ..() + /mob/living/carbon/AltClickOn(var/atom/A) - if(!src.stat && src.mind.changeling && src.mind.changeling.chosen_sting && (istype(A, /mob/living/carbon)) && (A != src)) + if(!src.stat && src.mind && src.mind.changeling && src.mind.changeling.chosen_sting && (istype(A, /mob/living/carbon)) && (A != src)) next_click = world.time + 5 call(src, src.mind.changeling.chosen_sting)(A) else @@ -226,99 +233,6 @@ // ++++ROCKDTBEN++++ MOB PROCS //END -/mob/living/carbon/proc/handle_ventcrawl(var/obj/machinery/atmospherics/unary/vent_pump/vent_found = null) // -- TLE -- Merged by Carn - if(stat) - src << "You must be conscious to do this!" - return - if(lying) - src << "You can't vent crawl while you're stunned!" - return - - if(vent_found) // one was passed in, probably from vent/AltClick() - if(vent_found.welded) - src << "That vent is welded shut." - return - if(!vent_found.Adjacent(src)) - return // don't even acknowledge that - else - for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src)) - if(!v.welded) - if(v.Adjacent(src)) - vent_found = v - if(!vent_found) - src << "You'll need a non-welded vent to crawl into!" - return - - if(!vent_found.network || !vent_found.network.normal_members.len) - src << "This vent is not connected to anything." - return - - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members) - if(temp_vent.welded) - continue - if(temp_vent in loc) - continue - var/turf/T = get_turf(temp_vent) - - if(!T || T.z != loc.z) - continue - - var/i = 1 - var/index = "[T.loc.name]\[[i]\]" - while(index in vents) - i++ - index = "[T.loc.name]\[[i]\]" - vents[index] = temp_vent - if(!vents.len) - src << "\red There are no available vents to travel to, they could be welded." - return - - var/obj/selection = input("Select a destination.", "Duct System") as null|anything in sortAssoc(vents) - if(!selection) return - - if(!vent_found.Adjacent(src)) - src << "Never mind, you left." - return - - for(var/obj/item/carried_item in contents)//If the monkey got on objects. - if( !istype(carried_item, /obj/item/weapon/implant) && !istype(carried_item, /obj/item/clothing/mask/facehugger) )//If it's not an implant or a facehugger - src << "\red You can't be carrying items or have items equipped when vent crawling!" - return - if(isslime(src)) - var/mob/living/carbon/slime/S = src - if(S.Victim) - src << "\red You'll have to let [S.Victim] go or finish eating \him first." - return - - var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection] - if(!target_vent) - return - - for(var/mob/O in viewers(src, null)) - O.show_message(text("[src] scrambles into the ventillation ducts!"), 1) - loc = target_vent - - var/travel_time = round(get_dist(loc, target_vent.loc) / 2) - - spawn(travel_time) - - if(!target_vent) return - for(var/mob/O in hearers(target_vent,null)) - O.show_message("You hear something squeezing through the ventilation ducts.",2) - - sleep(travel_time) - - if(!target_vent) return - if(target_vent.welded) //the vent can be welded while alien scrolled through the list or travelled. - target_vent = vent_found //travel back. No additional time required. - src << "\red The vent you were heading to appears to be welded." - loc = target_vent.loc - var/area/new_area = get_area(loc) - if(new_area) - new_area.Entered(src) - - /mob/living/carbon/clean_blood() if(ishuman(src)) var/mob/living/carbon/human/H = src diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 430ba3f23a5..0f7690a1a4d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -182,12 +182,12 @@ msg += "[t_He] [t_is] wearing \icon[wear_id] \a [wear_id].\n" //Jitters - if(is_jittery) - if(jitteriness >= 300) + switch(jitteriness) + if(300 to INFINITY) msg += "[t_He] [t_is] convulsing violently!\n" - else if(jitteriness >= 200) + if(200 to 300) msg += "[t_He] [t_is] extremely jittery.\n" - else if(jitteriness >= 100) + if(100 to 200) msg += "[t_He] [t_is] twitching ever so slightly.\n" if(suiciding) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 636f6a8581a..75e11618c42 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -2,8 +2,6 @@ Contains most of the procs that are called when a mob is attacked by something bullet_act -ex_act -meteor_act emp_act */ @@ -210,17 +208,17 @@ emp_act /mob/living/carbon/human/emp_act(severity) - + var/informed = 0 for(var/obj/item/organ/limb/L in src.organs) if(L.status == ORGAN_ROBOTIC) + if(!informed) + src << "You feel a sharp pain as your robotic limbs overload." + informed = 1 switch(severity) if(1) - L.take_damage(20) - src.Stun(rand(1,10)) + L.take_damage(0,10) + src.Stun(10) if(2) - L.take_damage(10) - src.Stun(rand(1,5)) - - - src << "Error, electormagnetic pulse detected in cyber limb!" + L.take_damage(0,5) + src.Stun(5) ..() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 6abba440448..8bd834c4d8d 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -89,14 +89,14 @@ if(I == wear_suit) if(s_store) - unEquip(s_store) + unEquip(s_store, 1) //It makes no sense for your suit storage to stay on you if you drop your suit. wear_suit = null update_inv_wear_suit(0) else if(I == w_uniform) if(r_store) - unEquip(r_store) + unEquip(r_store, 1) //Again, makes sense for pockets to drop. if(l_store) - unEquip(l_store) + unEquip(l_store, 1) if(wear_id) unEquip(wear_id) if(belt) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8f1f936d4b2..a72de69a1a0 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -119,6 +119,7 @@ else return ONE_ATMOSPHERE - pressure_difference + /mob/living/carbon/human proc/handle_disabilities() @@ -130,30 +131,23 @@ continue O.show_message(text("\red [src] starts having a seizure!"), 1) Paralyse(10) - make_jittery(1000) + Jitter(1000) if (disabilities & COUGHING) if ((prob(5) && paralysis <= 1)) drop_item() - spawn( 0 ) - emote("cough") - return + emote("cough") if (disabilities & TOURETTES) if ((prob(10) && paralysis <= 1)) Stun(10) - spawn( 0 ) - switch(rand(1, 3)) - if(1) - emote("twitch") - if(2 to 3) - say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") - var/old_x = pixel_x - var/old_y = pixel_y - pixel_x += rand(-2,2) - pixel_y += rand(-1,1) - sleep(2) - pixel_x = old_x - pixel_y = old_y - return + switch(rand(1, 3)) + if(1) + emote("twitch") + if(2 to 3) + say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") + var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point. + var/y_offset = pixel_y + rand(-1,1) + animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1) + animate(pixel_x = pixel_x - x_offset, pixel_y = pixel_y - y_offset, time = 1) if (disabilities & NERVOUS) if (prob(10)) stuttering = max(10, stuttering) @@ -904,6 +898,50 @@ else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs ear_damage = max(ear_damage-0.05, 0) + //Dizziness + if(dizziness) + var/client/C = client + var/pixel_x_diff = 0 + var/pixel_y_diff = 0 + var/temp + var/saved_dizz = dizziness + dizziness = max(dizziness-1, 0) + if(C) + var/oldsrc = src + var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 // This shit is annoying at high strength + src = null + spawn(0) + if(C) + temp = amplitude * sin(0.008 * saved_dizz * world.time) + pixel_x_diff += temp + C.pixel_x += temp + temp = amplitude * cos(0.008 * saved_dizz * world.time) + pixel_y_diff += temp + C.pixel_y += temp + sleep(3) + if(C) + temp = amplitude * sin(0.008 * saved_dizz * world.time) + pixel_x_diff += temp + C.pixel_x += temp + temp = amplitude * cos(0.008 * saved_dizz * world.time) + pixel_y_diff += temp + C.pixel_y += temp + sleep(3) + if(C) + C.pixel_x -= pixel_x_diff + C.pixel_y -= pixel_y_diff + src = oldsrc + + //Jitteryness + if(jitteriness) + var/amplitude = min(4, (jitteriness/100) + 1) + var/pixel_x_diff = rand(-amplitude, amplitude) + var/pixel_y_diff = rand(-amplitude/3, amplitude/3) + + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = -1) + animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2) + jitteriness = max(jitteriness-1, 0) + //Other if(stunned) AdjustStunned(-1) @@ -920,14 +958,7 @@ if(druggy) druggy = max(druggy-1, 0) - if(staminaloss) - var/total_health = ((health - staminaloss)) - if(total_health <= config.health_threshold_crit && !stat) - src << "You're too exhausted to keep going..." - Weaken(5) - setStaminaLoss(health - 1) - else - staminaloss = max((staminaloss - 2), 0) + CheckStamina() return 1 diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index fd6f3c0c9f9..553c5861b79 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -5,6 +5,7 @@ pass_flags = PASSTABLE voice_message = "skree!" say_message = "hums" + ventcrawler = 2 var/is_adult = 0 layer = 5 @@ -552,6 +553,64 @@ updatehealth() return +/mob/living/carbon/slime/attackby(obj/item/W, mob/user) + if(W.force > 0) + attacked += 10 + if(prob(25)) + user << "\red [W] passes right through [src]!" + return + if(Discipline && prob(50)) // wow, buddy, why am I getting attacked?? + Discipline = 0 + if(W.force >= 3) + if(is_adult) + if(prob(5 + round(W.force/2))) + if(Victim) + if(prob(80) && !client) + Discipline++ + + Victim = null + anchored = 0 + + spawn() + SStun = 1 + sleep(rand(5,20)) + SStun = 0 + + spawn(0) + if(user) + canmove = 0 + step_away(src, user) + if(prob(25 + W.force)) + sleep(2) + if(user) + step_away(src, user) + canmove = 1 + + else + if(prob(10 + W.force*2)) + if(Victim) + if(prob(80) && !client) + Discipline++ + if(Discipline == 1) + attacked = 0 + spawn() + SStun = 1 + sleep(rand(5,20)) + SStun = 0 + + Victim = null + anchored = 0 + + spawn(0) + if(user) + canmove = 0 + step_away(src, user) + if(prob(25 + W.force*4)) + sleep(2) + if(user) + step_away(src, user) + canmove = 1 + ..() /mob/living/carbon/slime/restrained() return 0 @@ -844,16 +903,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 item_state = "golem" siemens_coefficient = 0 unacidable = 1 - flags = ABSTRACT | NODROP - -/obj/item/clothing/mask/breath/golem - name = "golem's face" - desc = "the imposing face of an adamantine golem" - icon_state = "golem" - item_state = "golem" - siemens_coefficient = 0 - unacidable = 1 - flags = ABSTRACT | NODROP + flags = ABSTRACT | NODROP | MASKINTERNALS | MASKCOVERSMOUTH /obj/item/clothing/gloves/golem diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index 6f186f0087c..ed7149cdd83 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -225,13 +225,4 @@ else src << "I am not ready to reproduce yet..." else - src << "I am not old enough to reproduce yet..." - - - -/mob/living/carbon/slime/verb/ventcrawl() - set name = "Crawl through Vent" - set desc = "Enter an air vent and crawl through the pipe system." - set category = "Slime" - if(Victim) return - handle_ventcrawl() \ No newline at end of file + src << "I am not old enough to reproduce yet..." \ No newline at end of file diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index eba2999c738..f7817caf4c4 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -465,6 +465,8 @@ if(druggy) druggy = max(druggy-1, 0) + + CheckStamina() return 1 diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 3a84a20eeb4..bdb2c232142 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -8,6 +8,7 @@ gender = NEUTER pass_flags = PASSTABLE update_icon = 0 ///no need to call regenerate_icon + ventcrawler = 1 /mob/living/carbon/monkey/New() create_reagents(1000) diff --git a/code/modules/mob/living/carbon/monkey/powers.dm b/code/modules/mob/living/carbon/monkey/powers.dm deleted file mode 100644 index e7c6937cda2..00000000000 --- a/code/modules/mob/living/carbon/monkey/powers.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/living/carbon/monkey/verb/ventcrawl() - set name = "Crawl through Vent" - set desc = "Enter an air vent and crawl through the pipe system." - set category = "Monkey" - handle_ventcrawl() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4404825a4c8..7e08abafbbe 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -566,3 +566,16 @@ /mob/living/proc/get_visible_name() return name + +/mob/living/proc/CheckStamina() + if(staminaloss) + var/total_health = (health - staminaloss) + if(total_health <= config.health_threshold_crit && !stat) + Exhaust() + setStaminaLoss(health - 2) + return + setStaminaLoss(max((staminaloss - 2), 0)) + +/mob/living/proc/Exhaust() + src << "You're too exhausted to keep going..." + Weaken(5) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 992f0e12335..6169a45d459 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -35,3 +35,5 @@ var/on_fire = 0 //The "Are we on fire?" var var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20 + + var/ventcrawler = 0 //0 No vent crawling, 1 vent crawling in the nude, 2 vent crawling always diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 16c6332f0f6..4568c2335b2 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -97,15 +97,28 @@ switch(severity) if(1) src.take_organ_damage(20) - Stun(rand(5,10)) + Stun(8) if(2) src.take_organ_damage(10) - Stun(rand(1,5)) + Stun(3) flick("noise", src:flash) src << "\red *BZZZT*" src << "\red Warning: Electromagnetic pulse detected." ..() +/mob/living/silicon/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0) + blocked = (100-blocked)/100 + if(!damage || (blocked <= 0)) return 0 + switch(damagetype) + if(BRUTE) + adjustBruteLoss(damage * blocked) + if(BURN) + adjustFireLoss(damage * blocked) + else + return 1 + updatehealth() + return 1 + /mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0) return diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index ae564501820..42780c0ef38 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -106,9 +106,8 @@ /mob/living/simple_animal/construct/attackby(var/obj/item/O as obj, var/mob/user as mob) if(O.force) var/damage = O.force - if (O.damtype == STAMINA) - damage = 0 - adjustBruteLoss(damage) + if(O.damtype == BURN || O.damtype == BRUTE) + adjustBruteLoss(damage) for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) M.show_message("[src] has been attacked with [O] by [user]!") @@ -118,6 +117,14 @@ if ((M.client && !( M.blinded ))) M.show_message("\red [user] gently taps [src] with [O]. ") +/mob/living/simple_animal/construct/bullet_act(var/obj/item/projectile/Proj) + if(!Proj) + return + if(Proj.damage_type == BURN || Proj.damage_type == BRUTE) + adjustBruteLoss(Proj.damage) + Proj.on_hit(src, 0) + return 0 + /////////////////Juggernaut/////////////// @@ -147,10 +154,8 @@ /mob/living/simple_animal/construct/armoured/attackby(var/obj/item/O as obj, var/mob/user as mob) if(O.force) if(O.force >= 11) - var/damage = O.force - if (O.damtype == STAMINA) - damage = 0 - adjustBruteLoss(damage) + if(O.damtype == BURN || O.damtype == BRUTE) + adjustBruteLoss(O.force) for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) M.show_message("[src] has been attacked with [O] by [user]!") @@ -169,7 +174,7 @@ if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) var/reflectchance = 80 - round(P.damage/3) if(prob(reflectchance)) - if((P.damage_type == BRUTE || P.damage_type == BURN)) + if(P.damage_type == BURN || P.damage_type == BRUTE) adjustBruteLoss(P.damage * 0.5) visible_message("The [P.name] gets reflected by [src]'s shell!", \ "The [P.name] gets reflected by [src]'s shell!") diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index a54dd8b7546..c2d5e569d5b 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -287,6 +287,10 @@ SetLuminosity(1) valid = 1 + if(/obj/item/clothing/head/sombrero) + name = "Segnor [real_name]" + desc = "You must respect elder [real_name]" + valid = 1 if(valid) if(usr) diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index a033f81ac63..0df85076f4f 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -16,6 +16,7 @@ response_harm = "stomps" stop_automated_movement = 1 friendly = "pinches" + ventcrawler = 2 var/obj/item/inventory_head var/obj/item/inventory_mask diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index e997036477f..e56df2e9648 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -166,6 +166,7 @@ response_harm = "kicks" attacktext = "kicks" health = 1 + ventcrawler = 2 var/amount_grown = 0 pass_flags = PASSTABLE | PASSGRILLE @@ -206,6 +207,7 @@ var/global/chicken_count = 0 response_harm = "kicks" attacktext = "kicks" health = 10 + ventcrawler = 2 var/eggsleft = 0 var/body_color pass_flags = PASSTABLE diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 48b5685e6dc..5cfb67fa0e3 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -13,4 +13,5 @@ melee_damage_upper = 2 response_help = "pets" response_disarm = "shoos" - response_harm = "stomps on" \ No newline at end of file + response_harm = "stomps on" + ventcrawler = 2 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index e1b266d7edf..6fd06c6a3cb 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -18,6 +18,7 @@ response_disarm = "gently pushes aside" response_harm = "splats" density = 0 + ventcrawler = 2 var/body_color //brown, gray and white, leave blank for random /mob/living/simple_animal/mouse/New() diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index b49c3e9eabc..de3b5e5a313 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -12,6 +12,7 @@ response_disarm = "shoos" response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") + ventcrawler = 2 var/colour = "grey" /mob/living/simple_animal/slime/Bump(atom/movable/AM as mob|obj, yes) diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm index 57c0f4c939b..30e675e5a8e 100644 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm @@ -12,4 +12,5 @@ response_help = "prods" response_disarm = "pushes aside" response_harm = "smacks" - harm_intent_damage = 5 \ No newline at end of file + harm_intent_damage = 5 + ventcrawler = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index c4e1c38c32d..e0a39a8aa8d 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -34,6 +34,7 @@ var/busy = 0 pass_flags = PASSTABLE move_to_delay = 6 + ventcrawler = 2 //nursemaids - these create webs and eggs /mob/living/simple_animal/hostile/giant_spider/nurse diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index b299b361e09..70284d8fa03 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -123,13 +123,13 @@ icon_aggro = "Goldgrub_alert" icon_dead = "Goldgrub_dead" icon_gib = "syndicate_gib" - vision_range = 3 + vision_range = 2 aggro_vision_range = 9 - idle_vision_range = 3 - move_to_delay = 3 + idle_vision_range = 2 + move_to_delay = 5 friendly = "harmlessly rolls into" - maxHealth = 60 - health = 60 + maxHealth = 45 + health = 45 harm_intent_damage = 5 melee_damage_lower = 0 melee_damage_upper = 0 @@ -208,6 +208,10 @@ Reward() ..() +/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustBruteLoss(var/damage) + idle_vision_range = 9 + ..() + /mob/living/simple_animal/hostile/asteroid/hivelord name = "hivelord" desc = "A truly alien creature, it is a mass of unknown organic material, constantly fluctuating. When attacking, pieces of it split off and attack in tandem with the original." @@ -250,6 +254,7 @@ /mob/living/simple_animal/hostile/asteroid/hivelord/Die() new /obj/item/asteroid/hivelord_core(src.loc) + mouse_opacity = 1 ..() /obj/item/asteroid/hivelord_core @@ -330,7 +335,7 @@ ranged = 1 ranged_cooldown_cap = 8 friendly = "wails at" - vision_range = 5 + vision_range = 4 speed = 3 maxHealth = 300 health = 300 diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 88770679633..42ee3d600f4 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -22,6 +22,7 @@ stat_attack = 2 mouse_opacity = 1 speed = 1 + ventcrawler = 2 var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index 5c575649e83..8e32e320b36 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -23,6 +23,7 @@ faction = "carp" attack_sound = 'sound/weapons/bite.ogg' environment_smash = 0 + ventcrawler = 2 //Space bats need no air to fly in. diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5c0584eeefc..590305bc8af 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -569,79 +569,6 @@ var/list/slot_equipment_priority = list( \ for(var/mob/M in viewers()) M.see(message) -/* -adds a dizziness amount to a mob -use this rather than directly changing var/dizziness -since this ensures that the dizzy_process proc is started -currently only humans get dizzy - -value of dizziness ranges from 0 to 1000 -below 100 is not dizzy -*/ -/mob/proc/make_dizzy(var/amount) - if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy - return - - dizziness = min(1000, dizziness + amount) // store what will be new value - // clamped to max 1000 - if(dizziness > 100 && !is_dizzy) - spawn(0) - dizzy_process() - - -/* -dizzy process - wiggles the client's pixel offset over time -spawned from make_dizzy(), will terminate automatically when dizziness gets <100 -note dizziness decrements automatically in the mob's Life() proc. -*/ -/mob/proc/dizzy_process() - is_dizzy = 1 - while(dizziness > 100) - if(client) - var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70 - client.pixel_x = amplitude * sin(0.008 * dizziness * world.time) - client.pixel_y = amplitude * cos(0.008 * dizziness * world.time) - - sleep(1) - //endwhile - reset the pixel offsets to zero - is_dizzy = 0 - if(client) - client.pixel_x = 0 - client.pixel_y = 0 - -// jitteriness - copy+paste of dizziness - -/mob/proc/make_jittery(var/amount) - if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy - return - - jitteriness = min(1000, jitteriness + amount) // store what will be new value - // clamped to max 1000 - if(jitteriness > 100 && !is_jittery) - spawn(0) - jittery_process() - - -// Typo from the oriignal coder here, below lies the jitteriness process. So make of his code what you will, the previous comment here was just a copypaste of the above. -/mob/proc/jittery_process() - var/old_x = pixel_x - var/old_y = pixel_y - is_jittery = 1 - while(jitteriness > 100) -// var/amplitude = jitteriness*(sin(jitteriness * 0.044 * world.time) + 1) / 70 -// pixel_x = amplitude * sin(0.008 * jitteriness * world.time) -// pixel_y = amplitude * cos(0.008 * jitteriness * world.time) - - var/amplitude = min(4, jitteriness / 100) - pixel_x = rand(-amplitude, amplitude) - pixel_y = rand(-amplitude/3, amplitude/3) - - sleep(1) - //endwhile - reset the pixel offsets to zero - is_jittery = 0 - pixel_x = old_x - pixel_y = old_y - /mob/Stat() ..() @@ -768,6 +695,11 @@ note dizziness decrements automatically in the mob's Life() proc. /mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check return 0 +/mob/proc/Jitter(amount) + jitteriness = max(jitteriness,amount,0) + +/mob/proc/Dizzy(amount) + dizziness = max(dizziness,amount,0) /mob/proc/Stun(amount) if(status_flags & CANSTUN) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index eb2c904c047..1a6896915c9 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -74,8 +74,6 @@ var/bodytemperature = 310.055 //98.7 F var/drowsyness = 0//Carbon var/dizziness = 0//Carbon - var/is_dizzy = 0 - var/is_jittery = 0 var/jitteriness = 0//Carbon var/nutrition = 400//Carbon @@ -167,4 +165,4 @@ var/robot_talk_understand = 0 var/alien_talk_understand = 0 - var/turf/listed_turf = null //the current turf being examined in the stat panel + var/turf/listed_turf = null //the current turf being examined in the stat panel diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 9ef4629d0b2..c7bea4b402e 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -102,7 +102,7 @@ display round(lastgen) and plasmatank amount var/sheet_path = /obj/item/stack/sheet/mineral/plasma var/board_path = "/obj/item/weapon/circuitboard/pacman" var/sheet_left = 0 // How much is left of the sheet - var/time_per_sheet = 40 + var/time_per_sheet = 260 var/heat = 0 /obj/machinery/power/port_gen/pacman/initialize() @@ -318,7 +318,7 @@ display round(lastgen) and plasmatank amount icon_state = "portgen1" sheet_path = /obj/item/stack/sheet/mineral/uranium power_gen = 15000 - time_per_sheet = 65 + time_per_sheet = 85 board_path = "/obj/item/weapon/circuitboard/pacman/super" overheat() explosion(src.loc, 3, 3, 3, -1) diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 71f5319eb1a..dfd1e60856d 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -84,10 +84,18 @@ m_amt = 2500 +/obj/item/ammo_casing/shotgun/incendiary + name = "incendiary shell" + desc = "An incendiary shell" + icon_state = "ishell" + projectile_type = /obj/item/projectile/bullet/incendiary/shell + m_amt = 12500 + + /obj/item/ammo_casing/shotgun/dart name = "shotgun dart" desc = "A dart for use in shotguns. Can be injected with up to 30 units of any chemical." - icon_state = "blshell" //someone, draw the icon, please. + icon_state = "cshell" projectile_type = /obj/item/projectile/bullet/dart m_amt = 12500 @@ -121,4 +129,4 @@ /obj/item/ammo_casing/caseless/a75 desc = "A .75 bullet casing." caliber = "75" - projectile_type = /obj/item/projectile/bullet/gyro + projectile_type = /obj/item/projectile/bullet/gyro diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index d90e77a8fe7..64bcf1790cf 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -8,13 +8,6 @@ slot_flags = SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/ion) -/obj/item/weapon/gun/energy/ionrifle/emp_act(severity) - if(severity <= 2) - power_supply.use(round(power_supply.maxcharge / severity)) - update_icon() - else - return - /obj/item/weapon/gun/energy/decloner name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." @@ -136,4 +129,4 @@ icon_state = "disabler" item_state = null ammo_type = list(/obj/item/ammo_casing/energy/disabler) - cell_type = "/obj/item/weapon/cell" \ No newline at end of file + cell_type = "/obj/item/weapon/cell" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 3de94d1d7f1..7898681d4bd 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -67,15 +67,20 @@ damage = 25 -/obj/item/projectile/bullet/mechincendiary - damage = 5 +/obj/item/projectile/bullet/incendiary -/obj/item/projectile/bullet/mechincendiary/on_hit(var/atom/target, var/blocked = 0) +/obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0) if(istype(target, /mob/living/carbon)) var/mob/living/carbon/M = target M.adjust_fire_stacks(1) M.IgniteMob() +/obj/item/projectile/bullet/incendiary/shell + damage = 20 + +/obj/item/projectile/bullet/incendiary/mech + damage = 5 + /obj/item/projectile/bullet/dart name = "dart" diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 7899a152a8c..584e89af628 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -222,7 +222,7 @@ recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) for(i=1, i<=M.rating, i++) - dispensable_reagents |= sortList(special_reagents[i]) + dispensable_reagents = sortList(dispensable_reagents | special_reagents[i]) /obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user) ..() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index d79d74ce131..154474e3c85 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -266,7 +266,7 @@ datum if(data >= 30) if (!M.stuttering) M.stuttering = 1 M.stuttering += 4 - M.make_dizzy(5) + M.Dizzy(5) if(data >= 30*2.5 && prob(33)) if (!M.confused) M.confused = 1 M.confused += 3 @@ -825,7 +825,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.make_dizzy(1) + M.Dizzy(1) if(!M.confused) M.confused = 1 M.confused = max(M.confused, 20) holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM) @@ -1151,8 +1151,8 @@ datum M.status_flags &= ~DISFIGURED if(35 to INFINITY) M.adjustToxLoss(1) - M.make_dizzy(5) - M.make_jittery(5) + M.Dizzy(5) + M.Jitter(5) ..() return @@ -1285,7 +1285,7 @@ datum on_mob_life(var/mob/living/carbon/M) if(!istype(M)) return if(!M) M = holder.my_atom - M.apply_effect(10,IRRADIATE,0) + M.apply_effect(5,IRRADIATE,0) ..() return @@ -1995,18 +1995,18 @@ datum switch(data) if(1 to 5) if (!M.stuttering) M.stuttering = 1 - M.make_dizzy(5) + M.Dizzy(5) if(prob(10)) M.emote(pick("twitch","giggle")) if(5 to 10) if (!M.stuttering) M.stuttering = 1 - M.make_jittery(10) - M.make_dizzy(10) + M.Jitter(10) + M.Dizzy(10) M.druggy = max(M.druggy, 35) if(prob(20)) M.emote(pick("twitch","giggle")) if (10 to INFINITY) if (!M.stuttering) M.stuttering = 1 - M.make_jittery(20) - M.make_dizzy(20) + M.Jitter(20) + M.Dizzy(20) M.druggy = max(M.druggy, 40) if(prob(30)) M.emote(pick("twitch","giggle")) holder.remove_reagent(src.id, 0.2) @@ -2394,7 +2394,7 @@ datum M.sleeping = max(0,M.sleeping - 2) if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) + M.Jitter(5) if(holder.has_reagent("frostoil")) holder.remove_reagent("frostoil", 5) ..() @@ -2434,7 +2434,7 @@ datum M.sleeping = max(0,M.sleeping-2) if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) + M.Jitter(5) ..() return @@ -2479,7 +2479,7 @@ datum color = "#100800" // rgb: 16, 8, 0 on_mob_life(var/mob/living/M as mob) - M.make_jittery(20) + M.Jitter(20) M.druggy = max(M.druggy, 30) M.dizziness +=5 M.drowsyness = 0 @@ -2502,7 +2502,7 @@ datum M.sleeping = max(0,M.sleeping-1) if (M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) + M.Jitter(5) M.nutrition += 1 ..() return @@ -2608,7 +2608,7 @@ datum M.sleeping = 0 if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) + M.Jitter(5) if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) M.nutrition++ ..() @@ -2628,7 +2628,7 @@ datum M.sleeping = 0 if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) + M.Jitter(5) if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) M.nutrition++ ..() @@ -2664,7 +2664,7 @@ datum on_mob_life(var/mob/living/M as mob) M.druggy = max(M.druggy, 50) M.confused = max(M.confused+2,0) - M.make_dizzy(10) + M.Dizzy(10) if (!M.stuttering) M.stuttering = 1 M.stuttering += 3 if(!data) data = 1 @@ -2741,24 +2741,24 @@ datum switch(data) if(1 to 5) if (!M.stuttering) M.stuttering = 1 - M.make_dizzy(10) + M.Dizzy(10) if(prob(10)) M.emote(pick("twitch","giggle")) if(5 to 10) if (!M.stuttering) M.stuttering = 1 - M.make_jittery(20) - M.make_dizzy(20) + M.Jitter(20) + M.Dizzy(20) M.druggy = max(M.druggy, 45) if(prob(20)) M.emote(pick("twitch","giggle")) if (10 to 200) if (!M.stuttering) M.stuttering = 1 - M.make_jittery(40) - M.make_dizzy(40) + M.Jitter(40) + M.Dizzy(40) M.druggy = max(M.druggy, 60) if(prob(30)) M.emote(pick("twitch","giggle")) if(200 to INFINITY) if (!M.stuttering) M.stuttering = 1 - M.make_jittery(60) - M.make_dizzy(60) + M.Jitter(60) + M.Dizzy(60) M.druggy = max(M.druggy, 75) if(prob(40)) M.emote(pick("twitch","giggle")) if(prob(30)) M.adjustToxLoss(2) @@ -2789,7 +2789,7 @@ datum if(data >= boozepwr) if (!M.stuttering) M.stuttering = 1 M.stuttering += 4 - M.make_dizzy(5) + M.Dizzy(5) if(data >= boozepwr*2.5 && prob(33)) if (!M.confused) M.confused = 1 M.confused += 3 @@ -2841,7 +2841,7 @@ datum M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.sleeping = max(0,M.sleeping-2) - M.make_jittery(5) + M.Jitter(5) ..() return @@ -2864,7 +2864,7 @@ datum M.sleeping = max(0,M.sleeping-2) if (M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) + M.Jitter(5) M.nutrition += 1 ..() return diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index e3f9d2304f6..dd717981046 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -datum/chemical_reaction/ +/datum/chemical_reaction var/name = null var/id = null var/result = null @@ -13,161 +13,160 @@ datum/chemical_reaction/ var/result_amount = 0 var/secondary = 0 // set to nonzero if secondary reaction - proc - on_reaction(var/datum/reagents/holder, var/created_volume) - return +/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume) + return -//I recommend you set the result amount to the total volume of all components. + //I recommend you set the result amount to the total volume of all components. -datum/chemical_reaction/explosion_potassium +/datum/chemical_reaction/explosion_potassium name = "Explosion" id = "explosion_potassium" result = null required_reagents = list("water" = 1, "potassium" = 1) result_amount = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), location, 0, 0) - e.start() - holder.clear_reagents() - return +/datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round (created_volume/10, 1), location, 0, 0) + e.start() + holder.clear_reagents() + return -datum/chemical_reaction/emp_pulse +/datum/chemical_reaction/emp_pulse name = "EMP Pulse" id = "emp_pulse" result = null required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense result_amount = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. - // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. - empulse(location, round(created_volume / 24), round(created_volume / 14), 1) - holder.clear_reagents() - return +/datum/chemical_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. + // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. + empulse(location, round(created_volume / 24), round(created_volume / 14), 1) + holder.clear_reagents() + return /* -datum/chemical_reaction/silicate +silicate name = "Silicate" id = "silicate" result = "silicate" required_reagents = list("aluminium" = 1, "silicon" = 1, "oxygen" = 1) result_amount = 3 */ -datum/chemical_reaction/stoxin +/datum/chemical_reaction/stoxin name = "Sleep Toxin" id = "stoxin" result = "stoxin" required_reagents = list("chloralhydrate" = 1, "sugar" = 4) result_amount = 5 -datum/chemical_reaction/sterilizine +/datum/chemical_reaction/sterilizine name = "Sterilizine" id = "sterilizine" result = "sterilizine" required_reagents = list("ethanol" = 1, "anti_toxin" = 1, "chlorine" = 1) result_amount = 3 -datum/chemical_reaction/inaprovaline +/datum/chemical_reaction/inaprovaline name = "Inaprovaline" id = "inaprovaline" result = "inaprovaline" required_reagents = list("oxygen" = 1, "carbon" = 1, "sugar" = 1) result_amount = 3 -datum/chemical_reaction/anti_toxin +/datum/chemical_reaction/anti_toxin name = "Anti-Toxin (Dylovene)" id = "anti_toxin" result = "anti_toxin" required_reagents = list("silicon" = 1, "potassium" = 1, "nitrogen" = 1) result_amount = 3 -datum/chemical_reaction/mutagen +/datum/chemical_reaction/mutagen name = "Unstable mutagen" id = "mutagen" result = "mutagen" required_reagents = list("radium" = 1, "phosphorus" = 1, "chlorine" = 1) result_amount = 3 -//datum/chemical_reaction/cyanide +//cyanide // name = "Cyanide" // id = "cyanide" // result = "cyanide" // required_reagents = list("hydrogen" = 1, "carbon" = 1, "nitrogen" = 1) // result_amount = 1 -datum/chemical_reaction/thermite +/datum/chemical_reaction/thermite name = "Thermite" id = "thermite" result = "thermite" required_reagents = list("aluminium" = 1, "iron" = 1, "oxygen" = 1) result_amount = 3 -datum/chemical_reaction/lexorin +/datum/chemical_reaction/lexorin name = "Lexorin" id = "lexorin" result = "lexorin" required_reagents = list("plasma" = 1, "hydrogen" = 1, "nitrogen" = 1) result_amount = 3 -datum/chemical_reaction/space_drugs +/datum/chemical_reaction/space_drugs name = "Space Drugs" id = "space_drugs" result = "space_drugs" required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1) result_amount = 3 -datum/chemical_reaction/lube +/datum/chemical_reaction/lube name = "Space Lube" id = "lube" result = "lube" required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) result_amount = 4 -datum/chemical_reaction/pacid +/datum/chemical_reaction/pacid name = "Polytrinic acid" id = "pacid" result = "pacid" required_reagents = list("sacid" = 1, "chlorine" = 1, "potassium" = 1) result_amount = 3 -datum/chemical_reaction/synaptizine +/datum/chemical_reaction/synaptizine name = "Synaptizine" id = "synaptizine" result = "synaptizine" required_reagents = list("sugar" = 1, "lithium" = 1, "water" = 1) result_amount = 3 -datum/chemical_reaction/hyronalin +/datum/chemical_reaction/hyronalin name = "Hyronalin" id = "hyronalin" result = "hyronalin" required_reagents = list("radium" = 1, "anti_toxin" = 1) result_amount = 2 -datum/chemical_reaction/arithrazine +/datum/chemical_reaction/arithrazine name = "Arithrazine" id = "arithrazine" result = "arithrazine" required_reagents = list("hyronalin" = 1, "hydrogen" = 1) result_amount = 2 -datum/chemical_reaction/impedrezene +/datum/chemical_reaction/impedrezene name = "Impedrezene" id = "impedrezene" result = "impedrezene" required_reagents = list("mercury" = 1, "oxygen" = 1, "sugar" = 1) result_amount = 2 -datum/chemical_reaction/kelotane +/datum/chemical_reaction/kelotane name = "Kelotane" id = "kelotane" result = "kelotane" required_reagents = list("silicon" = 1, "carbon" = 1) result_amount = 2 -datum/chemical_reaction/leporazine +/datum/chemical_reaction/leporazine name = "Leporazine" id = "leporazine" result = "leporazine" @@ -175,28 +174,28 @@ datum/chemical_reaction/leporazine required_catalysts = list("plasma" = 5) result_amount = 2 -datum/chemical_reaction/cryptobiolin +/datum/chemical_reaction/cryptobiolin name = "Cryptobiolin" id = "cryptobiolin" result = "cryptobiolin" required_reagents = list("potassium" = 1, "oxygen" = 1, "sugar" = 1) result_amount = 3 -datum/chemical_reaction/tricordrazine +/datum/chemical_reaction/tricordrazine name = "Tricordrazine" id = "tricordrazine" result = "tricordrazine" required_reagents = list("inaprovaline" = 1, "anti_toxin" = 1) result_amount = 2 -datum/chemical_reaction/alkysine +/datum/chemical_reaction/alkysine name = "Alkysine" id = "alkysine" result = "alkysine" required_reagents = list("chlorine" = 1, "nitrogen" = 1, "anti_toxin" = 1) result_amount = 2 -datum/chemical_reaction/dexalin +/datum/chemical_reaction/dexalin name = "Dexalin" id = "dexalin" result = "dexalin" @@ -204,49 +203,49 @@ datum/chemical_reaction/dexalin required_catalysts = list("plasma" = 5) result_amount = 1 -datum/chemical_reaction/dermaline +/datum/chemical_reaction/dermaline name = "Dermaline" id = "dermaline" result = "dermaline" required_reagents = list("oxygen" = 1, "phosphorus" = 1, "kelotane" = 1) result_amount = 3 -datum/chemical_reaction/dexalinp +/datum/chemical_reaction/dexalinp name = "Dexalin Plus" id = "dexalinp" result = "dexalinp" required_reagents = list("dexalin" = 1, "carbon" = 1, "iron" = 1) result_amount = 3 -datum/chemical_reaction/bicaridine +/datum/chemical_reaction/bicaridine name = "Bicaridine" id = "bicaridine" result = "bicaridine" required_reagents = list("inaprovaline" = 1, "carbon" = 1) result_amount = 2 -datum/chemical_reaction/hyperzine +/datum/chemical_reaction/hyperzine name = "Hyperzine" id = "hyperzine" result = "hyperzine" required_reagents = list("sugar" = 1, "phosphorus" = 1, "sulfur" = 1,) result_amount = 3 -datum/chemical_reaction/ryetalyn +/datum/chemical_reaction/ryetalyn name = "Ryetalyn" id = "ryetalyn" result = "ryetalyn" required_reagents = list("arithrazine" = 1, "carbon" = 1) result_amount = 2 -datum/chemical_reaction/cryoxadone +/datum/chemical_reaction/cryoxadone name = "Cryoxadone" id = "cryoxadone" result = "cryoxadone" required_reagents = list("dexalin" = 1, "water" = 1, "oxygen" = 1) result_amount = 3 -datum/chemical_reaction/clonexadone +/datum/chemical_reaction/clonexadone name = "Clonexadone" id = "clonexadone" result = "clonexadone" @@ -254,107 +253,107 @@ datum/chemical_reaction/clonexadone required_catalysts = list("plasma" = 5) result_amount = 2 -datum/chemical_reaction/spaceacillin +/datum/chemical_reaction/spaceacillin name = "Spaceacillin" id = "spaceacillin" result = "spaceacillin" required_reagents = list("cryptobiolin" = 1, "inaprovaline" = 1) result_amount = 2 -datum/chemical_reaction/imidazoline +/datum/chemical_reaction/imidazoline name = "imidazoline" id = "imidazoline" result = "imidazoline" required_reagents = list("carbon" = 1, "hydrogen" = 1, "anti_toxin" = 1) result_amount = 2 -datum/chemical_reaction/ethylredoxrazine +/datum/chemical_reaction/ethylredoxrazine name = "Ethylredoxrazine" id = "ethylredoxrazine" result = "ethylredoxrazine" required_reagents = list("oxygen" = 1, "anti_toxin" = 1, "carbon" = 1) result_amount = 3 -datum/chemical_reaction/ethanoloxidation +/datum/chemical_reaction/ethanoloxidation name = "ethanoloxidation" //Kind of a placeholder in case someone ever changes it so that chemicals id = "ethanoloxidation" // react in the body. Also it would be silly if it didn't exist. result = "water" required_reagents = list("ethylredoxrazine" = 1, "ethanol" = 1) result_amount = 2 -datum/chemical_reaction/glycerol +/datum/chemical_reaction/glycerol name = "Glycerol" id = "glycerol" result = "glycerol" required_reagents = list("cornoil" = 3, "sacid" = 1) result_amount = 1 -datum/chemical_reaction/nitroglycerin +/datum/chemical_reaction/nitroglycerin name = "Nitroglycerin" id = "nitroglycerin" result = "nitroglycerin" required_reagents = list("glycerol" = 1, "pacid" = 1, "sacid" = 1) result_amount = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/2, 1), location, 0, 0) - e.start() +/datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round (created_volume/2, 1), location, 0, 0) + e.start() - holder.clear_reagents() - return + holder.clear_reagents() + return -datum/chemical_reaction/sodiumchloride +/datum/chemical_reaction/sodiumchloride name = "Sodium Chloride" id = "sodiumchloride" result = "sodiumchloride" required_reagents = list("sodium" = 1, "chlorine" = 1) result_amount = 2 -datum/chemical_reaction/flash_powder +/datum/chemical_reaction/flash_powder name = "Flash powder" id = "flash_powder" result = null required_reagents = list("aluminium" = 1, "potassium" = 1, "sulfur" = 1 ) result_amount = null - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, location) - s.start() - for(var/mob/living/carbon/M in viewers(world.view, location)) - switch(get_dist(M, location)) - if(0 to 3) - if(hasvar(M, "glasses")) - if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses)) - continue +/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, location) + s.start() + for(var/mob/living/carbon/M in viewers(world.view, location)) + switch(get_dist(M, location)) + if(0 to 3) + if(hasvar(M, "glasses")) + if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses)) + continue - flick("e_flash", M.flash) - M.Weaken(5) + flick("e_flash", M.flash) + M.Weaken(5) - if(4 to 5) - if(hasvar(M, "glasses")) - if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses)) - continue + if(4 to 5) + if(hasvar(M, "glasses")) + if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses)) + continue - flick("e_flash", M.flash) - M.Stun(5) + flick("e_flash", M.flash) + M.Stun(5) -datum/chemical_reaction/napalm +/datum/chemical_reaction/napalm name = "Napalm" id = "napalm" result = null required_reagents = list("aluminium" = 1, "plasma" = 1, "sacid" = 1 ) result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/turf/simulated/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, created_volume) - holder.del_reagent(id) - return +/datum/chemical_reaction/napalm/on_reaction(var/datum/reagents/holder, var/created_volume) + var/turf/simulated/T = get_turf(holder.my_atom) + if(istype(T)) + T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, created_volume) + holder.del_reagent(id) + return /* -datum/chemical_reaction/smoke +/datum/chemical_reaction/smoke name = "Smoke" id = "smoke" result = null @@ -380,89 +379,89 @@ datum/chemical_reaction/smoke holder.clear_reagents() return */ -datum/chemical_reaction/chemsmoke +/datum/chemical_reaction/chemsmoke name = "Chemsmoke" id = "chemsmoke" result = null required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1) result_amount = null secondary = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread - S.attach(location) - playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) - spawn(0) - if(S) - S.set_up(holder, 10, 0, location) - S.start() - sleep(10) - S.start() - if(holder && holder.my_atom) - holder.clear_reagents() - return +/datum/chemical_reaction/chemsmoke/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread + S.attach(location) + playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) + spawn(0) + if(S) + S.set_up(holder, 10, 0, location) + S.start() + sleep(10) + S.start() + if(holder && holder.my_atom) + holder.clear_reagents() + return -datum/chemical_reaction/chloralhydrate +/datum/chemical_reaction/chloralhydrate name = "Chloral Hydrate" id = "chloralhydrate" result = "chloralhydrate" required_reagents = list("ethanol" = 1, "chlorine" = 3, "water" = 1) result_amount = 1 -datum/chemical_reaction/zombiepowder +/datum/chemical_reaction/zombiepowder name = "Zombie Powder" id = "zombiepowder" result = "zombiepowder" required_reagents = list("carpotoxin" = 5, "stoxin" = 5, "copper" = 5) result_amount = 2 -datum/chemical_reaction/rezadone +/datum/chemical_reaction/rezadone name = "Rezadone" id = "rezadone" result = "rezadone" required_reagents = list("carpotoxin" = 1, "cryptobiolin" = 1, "copper" = 1) result_amount = 3 -datum/chemical_reaction/mindbreaker +/datum/chemical_reaction/mindbreaker name = "Mindbreaker Toxin" id = "mindbreaker" result = "mindbreaker" required_reagents = list("silicon" = 1, "hydrogen" = 1, "anti_toxin" = 1) result_amount = 5 -datum/chemical_reaction/lipozine +/datum/chemical_reaction/lipozine name = "Lipozine" id = "Lipozine" result = "lipozine" required_reagents = list("sodiumchloride" = 1, "ethanol" = 1, "radium" = 1) result_amount = 3 -datum/chemical_reaction/plasmasolidification +/datum/chemical_reaction/plasmasolidification name = "Solid Plasma" id = "solidplasma" result = null required_reagents = list("iron" = 5, "frostoil" = 5, "plasma" = 20) result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/stack/sheet/mineral/plasma(location) - return +/datum/chemical_reaction/plasmasolidification/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/stack/sheet/mineral/plasma(location) + return -datum/chemical_reaction/capsaicincondensation +/datum/chemical_reaction/capsaicincondensation name = "Capsaicincondensation" id = "capsaicincondensation" result = "condensedcapsaicin" required_reagents = list("capsaicin" = 1, "ethanol" = 5) result_amount = 5 -datum/chemical_reaction/virus_food +/datum/chemical_reaction/virus_food name = "Virus Food" id = "virusfood" result = "virusfood" required_reagents = list("water" = 5, "milk" = 5) result_amount = 15 -datum/chemical_reaction/mix_virus +/datum/chemical_reaction/mix_virus name = "Mix Virus" id = "mixvirus" result = "blood" @@ -471,42 +470,45 @@ datum/chemical_reaction/mix_virus var/level_min = 0 var/level_max = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/mix_virus/on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Evolve(level_min, level_max) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list + if(B && B.data) + var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] + if(D) + D.Evolve(level_min, level_max) -datum/chemical_reaction/mix_virus/mix_virus_2 +/datum/chemical_reaction/mix_virus/mix_virus_2 + name = "Mix Virus 2" id = "mixvirus2" required_reagents = list("mutagen" = 5) level_min = 2 level_max = 4 -datum/chemical_reaction/mix_virus/mix_virus_3 +/datum/chemical_reaction/mix_virus/mix_virus_3 + name = "Mix Virus 3" id = "mixvirus3" required_reagents = list("plasma" = 5) level_min = 4 level_max = 6 -datum/chemical_reaction/mix_virus/rem_virus +/datum/chemical_reaction/mix_virus/rem_virus + name = "Devolve Virus" id = "remvirus" required_reagents = list("synaptizine" = 1) required_catalysts = list("blood" = 1) - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Devolve() + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list + if(B && B.data) + var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] + if(D) + D.Devolve() @@ -514,7 +516,7 @@ datum/chemical_reaction/mix_virus/rem_virus // foam and foam precursor -datum/chemical_reaction/surfactant +/datum/chemical_reaction/surfactant name = "Foam surfactant" id = "foam surfactant" result = "fluorosurfactant" @@ -522,78 +524,78 @@ datum/chemical_reaction/surfactant result_amount = 5 -datum/chemical_reaction/foam +/datum/chemical_reaction/foam name = "Foam" id = "foam" result = null required_reagents = list("fluorosurfactant" = 1, "water" = 1) result_amount = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution violently bubbles!" + var/location = get_turf(holder.my_atom) + for(var/mob/M in viewers(5, location)) + M << "\red The solution violently bubbles!" - location = get_turf(holder.my_atom) + location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out foam!" + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out foam!" - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" + //world << "Holder volume is [holder.total_volume]" + //for(var/datum/reagent/R in holder.reagent_list) + // world << "[R.name] = [R.volume]" - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - return + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 0) + s.start() + holder.clear_reagents() + return -datum/chemical_reaction/metalfoam +/datum/chemical_reaction/metalfoam name = "Metal Foam" id = "metalfoam" result = null required_reagents = list("aluminium" = 3, "foaming_agent" = 1, "pacid" = 1) result_amount = 5 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) + var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out a metalic foam!" + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out a metalic foam!" - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 1) - s.start() - return + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 1) + s.start() + return -datum/chemical_reaction/ironfoam +/datum/chemical_reaction/ironfoam name = "Iron Foam" id = "ironlfoam" result = null required_reagents = list("iron" = 3, "foaming_agent" = 1, "pacid" = 1) result_amount = 5 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) + var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out a metalic foam!" + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out a metalic foam!" - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 2) - s.start() - return + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 2) + s.start() + return -datum/chemical_reaction/foaming_agent +/datum/chemical_reaction/foaming_agent name = "Foaming Agent" id = "foaming_agent" result = "foaming_agent" @@ -601,28 +603,28 @@ datum/chemical_reaction/foaming_agent result_amount = 1 // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game! -datum/chemical_reaction/ammonia +/datum/chemical_reaction/ammonia name = "Ammonia" id = "ammonia" result = "ammonia" required_reagents = list("hydrogen" = 3, "nitrogen" = 1) result_amount = 3 -datum/chemical_reaction/diethylamine +/datum/chemical_reaction/diethylamine name = "Diethylamine" id = "diethylamine" result = "diethylamine" required_reagents = list ("ammonia" = 1, "ethanol" = 1) result_amount = 2 -datum/chemical_reaction/space_cleaner +/datum/chemical_reaction/space_cleaner name = "Space cleaner" id = "cleaner" result = "cleaner" required_reagents = list("ammonia" = 1, "water" = 1) result_amount = 2 -datum/chemical_reaction/plantbgone +/datum/chemical_reaction/plantbgone name = "Plant-B-Gone" id = "plantbgone" result = "plantbgone" @@ -642,9 +644,10 @@ datum/chemical_reaction/pestkiller result = "pestkiller" required_reagents = list("toxin" = 1, "ethanol" = 4) result_amount = 5 + /////////////////////////////////////OLD SLIME CORE REACTIONS /////////////////////////////// /* -datum/chemical_reaction/slimepepper +/datum/chemical_reaction/slimepepper name = "Slime Condensedcapaicin" id = "m_condensedcapaicin" result = "condensedcapsaicin" @@ -652,7 +655,7 @@ datum/chemical_reaction/slimepepper result_amount = 1 required_container = /obj/item/slime_core required_other = 1 -datum/chemical_reaction/slimefrost +/datum/chemical_reaction/slimefrost name = "Slime Frost Oil" id = "m_frostoil" result = "frostoil" @@ -660,7 +663,7 @@ datum/chemical_reaction/slimefrost result_amount = 1 required_container = /obj/item/slime_core required_other = 1 -datum/chemical_reaction/slimeglycerol +/datum/chemical_reaction/slimeglycerol name = "Slime Glycerol" id = "m_glycerol" result = "glycerol" @@ -669,7 +672,7 @@ datum/chemical_reaction/slimeglycerol required_container = /obj/item/slime_core required_other = 1 -datum/chemical_reaction/slime_explosion +/datum/chemical_reaction/slime_explosion name = "Slime Explosion" id = "m_explosion" result = null @@ -677,15 +680,15 @@ datum/chemical_reaction/slime_explosion result_amount = 2 required_container = /obj/item/slime_core required_other = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), location, 0, 0) - e.start() +/datum/chemical_reaction/slime_explosion/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round (created_volume/10, 1), location, 0, 0) + e.start() - holder.clear_reagents() - return -datum/chemical_reaction/slimejam + holder.clear_reagents() + return +/datum/chemical_reaction/slimejam name = "Slime Jam" id = "m_jam" result = "slimejelly" @@ -693,7 +696,7 @@ datum/chemical_reaction/slimejam result_amount = 1 required_container = /obj/item/slime_core required_other = 2 -datum/chemical_reaction/slimesynthi +/datum/chemical_reaction/slimesynthi name = "Slime Synthetic Flesh" id = "m_flesh" result = null @@ -701,12 +704,12 @@ datum/chemical_reaction/slimesynthi result_amount = 1 required_container = /obj/item/slime_core required_other = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) - return +/datum/chemical_reaction/slimesynthi/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) + return -datum/chemical_reaction/slimeenzyme +/datum/chemical_reaction/slimeenzyme name = "Slime Enzyme" id = "m_enzyme" result = "enzyme" @@ -714,7 +717,7 @@ datum/chemical_reaction/slimeenzyme result_amount = 2 required_container = /obj/item/slime_core required_other = 3 -datum/chemical_reaction/slimeplasma +/datum/chemical_reaction/slimeplasma name = "Slime Plasma" id = "m_plasma" result = "plasma" @@ -722,7 +725,7 @@ datum/chemical_reaction/slimeplasma result_amount = 2 required_container = /obj/item/slime_core required_other = 3 -datum/chemical_reaction/slimevirus +/datum/chemical_reaction/slimevirus name = "Slime Virus" id = "m_virus" result = null @@ -730,23 +733,23 @@ datum/chemical_reaction/slimevirus result_amount = 2 required_container = /obj/item/slime_core required_other = 3 - on_reaction(var/datum/reagents/holder, var/created_volume) - holder.clear_reagents() +/datum/chemical_reaction/slimevirus/on_reaction(var/datum/reagents/holder, var/created_volume) + holder.clear_reagents() - var/virus = pick(/datum/disease/advance/flu, /datum/disease/advance/cold, \ - /datum/disease/pierrot_throat, /datum/disease/fake_gbs, \ - /datum/disease/brainrot, /datum/disease/magnitis) + var/virus = pick(/datum/disease/advance/flu, /datum/disease/advance/cold, \ + /datum/disease/pierrot_throat, /datum/disease/fake_gbs, \ + /datum/disease/brainrot, /datum/disease/magnitis) - var/datum/disease/F = new virus(0) - var/list/data = list("viruses"= list(F)) - holder.add_reagent("blood", 20, data) + var/datum/disease/F = new virus(0) + var/list/data = list("viruses"= list(F)) + holder.add_reagent("blood", 20, data) - holder.add_reagent("cyanide", rand(1,10)) + holder.add_reagent("cyanide", rand(1,10)) - return + return -datum/chemical_reaction/slimeteleport +/datum/chemical_reaction/slimeteleport name = "Slime Teleport" id = "m_tele" result = null @@ -755,57 +758,57 @@ datum/chemical_reaction/slimeteleport result_amount = 1 required_container = /obj/item/slime_core required_other = 4 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/slimeteleport/on_reaction(var/datum/reagents/holder, var/created_volume) - // Calculate new position (searches through beacons in world) - var/obj/item/device/radio/beacon/chosen - var/list/possible = list() - for(var/obj/item/device/radio/beacon/W in world) - possible += W + // Calculate new position (searches through beacons in world) + var/obj/item/device/radio/beacon/chosen + var/list/possible = list() + for(var/obj/item/device/radio/beacon/W in world) + possible += W - if(possible.len > 0) - chosen = pick(possible) + if(possible.len > 0) + chosen = pick(possible) - if(chosen) - // Calculate previous position for transition + if(chosen) + // Calculate previous position for transition - var/turf/FROM = get_turf(holder.my_atom) // the turf of origin we're travelling FROM - var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO + var/turf/FROM = get_turf(holder.my_atom) // the turf of origin we're travelling FROM + var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO - playsound(TO, 'sound/effects/phasein.ogg', 100, 1) + playsound(TO, 'sound/effects/phasein.ogg', 100, 1) - var/list/flashers = list() - for(var/mob/living/carbon/human/M in viewers(TO, null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) // flash dose faggots - flashers += M + var/list/flashers = list() + for(var/mob/living/carbon/human/M in viewers(TO, null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) // flash dose faggots + flashers += M - var/y_distance = TO.y - FROM.y - var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in range(2, FROM )) // iterate thru list of mobs in the area - if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid - if( A.anchored && !istype(A, /mob/dead/observer) ) continue // don't teleport anchored things (computers, tables, windows, grilles, etc) because this causes problems! - // do teleport ghosts however because hell why not + var/y_distance = TO.y - FROM.y + var/x_distance = TO.x - FROM.x + for (var/atom/movable/A in range(2, FROM )) // iterate thru list of mobs in the area + if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid + if( A.anchored && !istype(A, /mob/dead/observer) ) continue // don't teleport anchored things (computers, tables, windows, grilles, etc) because this causes problems! + // do teleport ghosts however because hell why not - var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place - if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving - A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z) + var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place + if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving + A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z) - spawn() - if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect - var/mob/M = A - if(M.client) - var/obj/blueeffect = new /obj(src) - blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" - blueeffect.icon = 'icons/effects/effects.dmi' - blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = 17 - blueeffect.mouse_opacity = 0 - M.client.screen += blueeffect - sleep(20) - M.client.screen -= blueeffect - del(blueeffect) -datum/chemical_reaction/slimecrit + spawn() + if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect + var/mob/M = A + if(M.client) + var/obj/blueeffect = new /obj(src) + blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" + blueeffect.icon = 'icons/effects/effects.dmi' + blueeffect.icon_state = "shieldsparkles" + blueeffect.layer = 17 + blueeffect.mouse_opacity = 0 + M.client.screen += blueeffect + sleep(20) + M.client.screen -= blueeffect + del(blueeffect) +/datum/chemical_reaction/slimecrit name = "Slime Crit" id = "m_tele" result = null @@ -814,37 +817,37 @@ datum/chemical_reaction/slimecrit result_amount = 1 required_container = /obj/item/slime_core required_other = 4 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/slimecrit/on_reaction(var/datum/reagents/holder, var/created_volume) - var/blocked = list(/mob/living/simple_animal/hostile, - /mob/living/simple_animal/hostile/pirate, - /mob/living/simple_animal/hostile/pirate/ranged, - /mob/living/simple_animal/hostile/russian, - /mob/living/simple_animal/hostile/russian/ranged, - /mob/living/simple_animal/hostile/syndicate, - /mob/living/simple_animal/hostile/syndicate/melee, - /mob/living/simple_animal/hostile/syndicate/melee/space, - /mob/living/simple_animal/hostile/syndicate/ranged, - /mob/living/simple_animal/hostile/syndicate/ranged/space, - /mob/living/simple_animal/hostile/alien/queen/large, - /mob/living/simple_animal/clown - )//exclusion list for things you don't want the reaction to create. - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + var/blocked = list(/mob/living/simple_animal/hostile, + /mob/living/simple_animal/hostile/pirate, + /mob/living/simple_animal/hostile/pirate/ranged, + /mob/living/simple_animal/hostile/russian, + /mob/living/simple_animal/hostile/russian/ranged, + /mob/living/simple_animal/hostile/syndicate, + /mob/living/simple_animal/hostile/syndicate/melee, + /mob/living/simple_animal/hostile/syndicate/melee/space, + /mob/living/simple_animal/hostile/syndicate/ranged, + /mob/living/simple_animal/hostile/syndicate/ranged/space, + /mob/living/simple_animal/hostile/alien/queen/large, + /mob/living/simple_animal/clown + )//exclusion list for things you don't want the reaction to create. + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) - for(var/i = 1, i <= created_volume, i++) - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) -datum/chemical_reaction/slimebork + for(var/i = 1, i <= created_volume, i++) + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(C, pick(NORTH,SOUTH,EAST,WEST)) +/datum/chemical_reaction/slimebork name = "Slime Bork" id = "m_tele" result = null @@ -852,29 +855,29 @@ datum/chemical_reaction/slimebork result_amount = 2 required_container = /obj/item/slime_core required_other = 4 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/slimebork/on_reaction(var/datum/reagents/holder, var/created_volume) - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks - // BORK BORK BORK + var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks + // BORK BORK BORK - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) - for(var/i = 1, i <= created_volume + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) + for(var/i = 1, i <= created_volume + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) -datum/chemical_reaction/slimechloral +/datum/chemical_reaction/slimechloral name = "Slime Chloral" id = "m_bunch" result = "chloralhydrate" @@ -882,7 +885,7 @@ datum/chemical_reaction/slimechloral result_amount = 2 required_container = /obj/item/slime_core required_other = 5 -datum/chemical_reaction/slimeretro +/datum/chemical_reaction/slimeretro name = "Slime Retro" id = "m_xeno" result = null @@ -890,11 +893,11 @@ datum/chemical_reaction/slimeretro result_amount = 1 required_container = /obj/item/slime_core required_other = 5 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/disease/F = new /datum/disease/dna_retrovirus(0) - var/list/data = list("viruses"= list(F)) - holder.add_reagent("blood", 20, data) -datum/chemical_reaction/slimefoam +/datum/chemical_reaction/slimeretro/on_reaction(var/datum/reagents/holder, var/created_volume) + var/datum/disease/F = new /datum/disease/dna_retrovirus(0) + var/list/data = list("viruses"= list(F)) + holder.add_reagent("blood", 20, data) +/datum/chemical_reaction/slimefoam name = "Slime Foam" id = "m_foam" result = null @@ -903,32 +906,32 @@ datum/chemical_reaction/slimefoam required_container = /obj/item/slime_core required_other = 5 - on_reaction(var/datum/reagents/holder, var/created_volume) +/datum/chemical_reaction/slimefoam/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution violently bubbles!" + var/location = get_turf(holder.my_atom) + for(var/mob/M in viewers(5, location)) + M << "\red The solution violently bubbles!" - location = get_turf(holder.my_atom) + location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out foam!" + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out foam!" - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" + //world << "Holder volume is [holder.total_volume]" + //for(var/datum/reagent/R in holder.reagent_list) + // world << "[R.name] = [R.volume]" - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - return + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 0) + s.start() + holder.clear_reagents() + return */ /////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// //Grey -datum/chemical_reaction/slimespawn +/datum/chemical_reaction/slimespawn name = "Slime Spawn" id = "m_spawn" result = null @@ -936,15 +939,15 @@ datum/chemical_reaction/slimespawn result_amount = 1 required_container = /obj/item/slime_extract/grey required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) - var/mob/living/carbon/slime/S = new /mob/living/carbon/slime - S.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimespawn/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) + var/mob/living/carbon/slime/S = new /mob/living/carbon/slime + S.loc = get_turf(holder.my_atom) -datum/chemical_reaction/slimemonkey +/datum/chemical_reaction/slimemonkey name = "Slime Monkey" id = "m_monkey" result = null @@ -952,14 +955,14 @@ datum/chemical_reaction/slimemonkey result_amount = 1 required_container = /obj/item/slime_extract/grey required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/i = 1, i <= 3, i++) - var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube - M.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimemonkey/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/i = 1, i <= 3, i++) + var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube + M.loc = get_turf(holder.my_atom) //Green -datum/chemical_reaction/slimemutate +/datum/chemical_reaction/slimemutate name = "Mutation Toxin" id = "mutationtoxin" result = "mutationtoxin" @@ -967,11 +970,11 @@ datum/chemical_reaction/slimemutate result_amount = 1 required_other = 1 required_container = /obj/item/slime_extract/green - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") +/datum/chemical_reaction/slimemutate/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") //Metal -datum/chemical_reaction/slimemetal +/datum/chemical_reaction/slimemetal name = "Slime Metal" id = "m_metal" result = null @@ -979,17 +982,17 @@ datum/chemical_reaction/slimemetal result_amount = 1 required_container = /obj/item/slime_extract/metal required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal - M.amount = 15 - M.loc = get_turf(holder.my_atom) - var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel - P.amount = 5 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimemetal/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal + M.amount = 15 + M.loc = get_turf(holder.my_atom) + var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel + P.amount = 5 + P.loc = get_turf(holder.my_atom) //Gold -datum/chemical_reaction/slimecrit +/datum/chemical_reaction/slimecrit name = "Slime Crit" id = "m_tele" result = null @@ -997,43 +1000,42 @@ datum/chemical_reaction/slimecrit result_amount = 1 required_container = /obj/item/slime_extract/gold required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) +/datum/chemical_reaction/slimecrit/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + spawn(50) - var/blocked = list(/mob/living/simple_animal/hostile, - /mob/living/simple_animal/hostile/pirate, - /mob/living/simple_animal/hostile/pirate/ranged, - /mob/living/simple_animal/hostile/russian, - /mob/living/simple_animal/hostile/russian/ranged, - /mob/living/simple_animal/hostile/syndicate, - /mob/living/simple_animal/hostile/syndicate/melee, - /mob/living/simple_animal/hostile/syndicate/melee/space, - /mob/living/simple_animal/hostile/syndicate/ranged, - /mob/living/simple_animal/hostile/syndicate/ranged/space, - /mob/living/simple_animal/hostile/alien/queen/large, - /mob/living/simple_animal/hostile/retaliate, - /mob/living/simple_animal/hostile/retaliate/clown, - /mob/living/simple_animal/hostile/mushroom, - /mob/living/simple_animal/hostile/asteroid, - /mob/living/simple_animal/hostile/asteroid/basilisk, - /mob/living/simple_animal/hostile/asteroid/goldgrub, - /mob/living/simple_animal/hostile/asteroid/goliath, - /mob/living/simple_animal/hostile/asteroid/hivelord, - /mob/living/simple_animal/hostile/asteroid/hivelordbrood, - /mob/living/simple_animal/hostile/carp/holocarp - )//exclusion list for things you don't want the reaction to create. - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + if(holder && holder.my_atom) - var/message = "A gold slime reaction has occured" + var/blocked = list(/mob/living/simple_animal/hostile, + /mob/living/simple_animal/hostile/pirate, + /mob/living/simple_animal/hostile/pirate/ranged, + /mob/living/simple_animal/hostile/russian, + /mob/living/simple_animal/hostile/russian/ranged, + /mob/living/simple_animal/hostile/syndicate, + /mob/living/simple_animal/hostile/syndicate/melee, + /mob/living/simple_animal/hostile/syndicate/melee/space, + /mob/living/simple_animal/hostile/syndicate/ranged, + /mob/living/simple_animal/hostile/syndicate/ranged/space, + /mob/living/simple_animal/hostile/alien/queen/large, + /mob/living/simple_animal/hostile/retaliate, + /mob/living/simple_animal/hostile/retaliate/clown, + /mob/living/simple_animal/hostile/mushroom, + /mob/living/simple_animal/hostile/asteroid, + /mob/living/simple_animal/hostile/asteroid/basilisk, + /mob/living/simple_animal/hostile/asteroid/goldgrub, + /mob/living/simple_animal/hostile/asteroid/goliath, + /mob/living/simple_animal/hostile/asteroid/hivelord, + /mob/living/simple_animal/hostile/asteroid/hivelordbrood, + /mob/living/simple_animal/hostile/carp/holocarp + )//exclusion list for things you don't want the reaction to create. + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - var/atom/A = holder.my_atom - if(A) + var/atom/A = holder.my_atom var/turf/T = get_turf(A) var/area/my_area = get_area(T) - message += " in [my_area.name]. (JMP)" + var/message = "A gold slime reaction has occured in [my_area.name]. (JMP)" message += " (VV)" var/mob/M = get(A, /mob) @@ -1041,27 +1043,25 @@ datum/chemical_reaction/slimecrit message += " - Carried By: [M.real_name] ([M.key]) (PP) (?)" else message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]" - else - message += "." - message_admins(message, 0, 1) + message_admins(message, 0, 1) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) + for(var/mob/living/carbon/human/H in viewers(get_turf(holder.my_atom), null)) + if(H:eyecheck() <= 0) + flick("e_flash", H.flash) - for(var/i = 1, i <= 5, i++) - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.faction = "slimesummon" - C.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) + for(var/i = 1, i <= 5, i++) + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.faction = "slimesummon" + C.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(C, pick(NORTH,SOUTH,EAST,WEST)) -datum/chemical_reaction/slimecritlesser +/datum/chemical_reaction/slimecritlesser name = "Slime Crit Lesser" id = "m_tele3" result = null @@ -1069,49 +1069,51 @@ datum/chemical_reaction/slimecritlesser result_amount = 1 required_container = /obj/item/slime_extract/gold required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) +/datum/chemical_reaction/slimecritlesser/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + spawn(50) - var/blocked = list(/mob/living/simple_animal/hostile, - /mob/living/simple_animal/hostile/pirate, - /mob/living/simple_animal/hostile/pirate/ranged, - /mob/living/simple_animal/hostile/russian, - /mob/living/simple_animal/hostile/russian/ranged, - /mob/living/simple_animal/hostile/syndicate, - /mob/living/simple_animal/hostile/syndicate/melee, - /mob/living/simple_animal/hostile/syndicate/melee/space, - /mob/living/simple_animal/hostile/syndicate/ranged, - /mob/living/simple_animal/hostile/syndicate/ranged/space, - /mob/living/simple_animal/hostile/alien/queen/large, - /mob/living/simple_animal/hostile/retaliate, - /mob/living/simple_animal/hostile/retaliate/clown, - /mob/living/simple_animal/hostile/mushroom, - /mob/living/simple_animal/hostile/asteroid, - /mob/living/simple_animal/hostile/asteroid/basilisk, - /mob/living/simple_animal/hostile/asteroid/goldgrub, - /mob/living/simple_animal/hostile/asteroid/goliath, - /mob/living/simple_animal/hostile/asteroid/hivelord, - /mob/living/simple_animal/hostile/asteroid/hivelordbrood, - /mob/living/simple_animal/hostile/carp/holocarp - )//exclusion list for things you don't want the reaction to create. - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + if(holder && holder.my_atom) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + var/blocked = list(/mob/living/simple_animal/hostile, + /mob/living/simple_animal/hostile/pirate, + /mob/living/simple_animal/hostile/pirate/ranged, + /mob/living/simple_animal/hostile/russian, + /mob/living/simple_animal/hostile/russian/ranged, + /mob/living/simple_animal/hostile/syndicate, + /mob/living/simple_animal/hostile/syndicate/melee, + /mob/living/simple_animal/hostile/syndicate/melee/space, + /mob/living/simple_animal/hostile/syndicate/ranged, + /mob/living/simple_animal/hostile/syndicate/ranged/space, + /mob/living/simple_animal/hostile/alien/queen/large, + /mob/living/simple_animal/hostile/retaliate, + /mob/living/simple_animal/hostile/retaliate/clown, + /mob/living/simple_animal/hostile/mushroom, + /mob/living/simple_animal/hostile/asteroid, + /mob/living/simple_animal/hostile/asteroid/basilisk, + /mob/living/simple_animal/hostile/asteroid/goldgrub, + /mob/living/simple_animal/hostile/asteroid/goliath, + /mob/living/simple_animal/hostile/asteroid/hivelord, + /mob/living/simple_animal/hostile/asteroid/hivelordbrood, + /mob/living/simple_animal/hostile/carp/holocarp + )//exclusion list for things you don't want the reaction to create. + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.faction = "neutral" - C.loc = get_turf(holder.my_atom) + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.faction = "neutral" + C.loc = get_turf(holder.my_atom) //Silver -datum/chemical_reaction/slimebork +/datum/chemical_reaction/slimebork name = "Slime Bork" id = "m_tele2" result = null @@ -1119,30 +1121,30 @@ datum/chemical_reaction/slimebork result_amount = 1 required_container = /obj/item/slime_extract/silver required_other = 1 - on_reaction(var/datum/reagents/holder) +/datum/chemical_reaction/slimebork/on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks - // BORK BORK BORK + var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks + // BORK BORK BORK - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) -datum/chemical_reaction/slimebork2 +/datum/chemical_reaction/slimebork2 name = "Slime Bork 2" id = "m_tele4" result = null @@ -1150,31 +1152,31 @@ datum/chemical_reaction/slimebork2 result_amount = 1 required_container = /obj/item/slime_extract/silver required_other = 1 - on_reaction(var/datum/reagents/holder) +/datum/chemical_reaction/slimebork2/on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/drinks) - /obj/item/weapon/reagent_containers/food/drinks - // BORK BORK BORK + var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/drinks) - /obj/item/weapon/reagent_containers/food/drinks + // BORK BORK BORK - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) //Blue -datum/chemical_reaction/slimefrost +/datum/chemical_reaction/slimefrost name = "Slime Frost Oil" id = "m_frostoil" result = "frostoil" @@ -1182,11 +1184,11 @@ datum/chemical_reaction/slimefrost result_amount = 10 required_container = /obj/item/slime_extract/blue required_other = 1 - on_reaction(var/datum/reagents/holder) +/datum/chemical_reaction/slimefrost/on_reaction(var/datum/reagents/holder) feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") //Dark Blue -datum/chemical_reaction/slimefreeze +/datum/chemical_reaction/slimefreeze name = "Slime Freeze" id = "m_freeze" result = null @@ -1194,18 +1196,19 @@ datum/chemical_reaction/slimefreeze result_amount = 1 required_container = /obj/item/slime_extract/darkblue required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) - M.bodytemperature -= 240 - M << "\blue You feel a chill!" +/datum/chemical_reaction/slimefreeze/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + spawn(50) + if(holder && holder.my_atom) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) + M.bodytemperature -= 240 + M << "\blue You feel a chill!" //Orange -datum/chemical_reaction/slimecasp +/datum/chemical_reaction/slimecasp name = "Slime Capsaicin Oil" id = "m_capsaicinoil" result = "capsaicin" @@ -1213,10 +1216,10 @@ datum/chemical_reaction/slimecasp result_amount = 10 required_container = /obj/item/slime_extract/orange required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") +/datum/chemical_reaction/slimecasp/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") -datum/chemical_reaction/slimefire +/datum/chemical_reaction/slimefire name = "Slime fire" id = "m_fire" result = null @@ -1224,17 +1227,18 @@ datum/chemical_reaction/slimefire result_amount = 1 required_container = /obj/item/slime_extract/orange required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - var/turf/simulated/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) +/datum/chemical_reaction/slimefire/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + spawn(50) + if(holder && holder.my_atom) + var/turf/simulated/T = get_turf(holder.my_atom) + if(istype(T)) + T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) //Yellow -datum/chemical_reaction/slimeoverload +/datum/chemical_reaction/slimeoverload name = "Slime EMP" id = "m_emp" result = null @@ -1242,12 +1246,12 @@ datum/chemical_reaction/slimeoverload result_amount = 1 required_container = /obj/item/slime_extract/yellow required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - empulse(get_turf(holder.my_atom), 3, 7) +/datum/chemical_reaction/slimeoverload/on_reaction(var/datum/reagents/holder, var/created_volume) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + empulse(get_turf(holder.my_atom), 3, 7) -datum/chemical_reaction/slimecell +/datum/chemical_reaction/slimecell name = "Slime Powercell" id = "m_cell" result = null @@ -1255,12 +1259,12 @@ datum/chemical_reaction/slimecell result_amount = 1 required_container = /obj/item/slime_extract/yellow required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/cell/slime/P = new /obj/item/weapon/cell/slime - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimecell/on_reaction(var/datum/reagents/holder, var/created_volume) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/weapon/cell/slime/P = new /obj/item/weapon/cell/slime + P.loc = get_turf(holder.my_atom) -datum/chemical_reaction/slimeglow +/datum/chemical_reaction/slimeglow name = "Slime Glow" id = "m_glow" result = null @@ -1268,16 +1272,16 @@ datum/chemical_reaction/slimeglow result_amount = 1 required_container = /obj/item/slime_extract/yellow required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime begins to emit a soft light. Squeezing it will cause it to grow brightly."), 1) - var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime - F.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimeglow/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime begins to emit a soft light. Squeezing it will cause it to grow brightly."), 1) + var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime + F.loc = get_turf(holder.my_atom) //Purple -datum/chemical_reaction/slimepsteroid +/datum/chemical_reaction/slimepsteroid name = "Slime Steroid" id = "m_steroid" result = null @@ -1285,12 +1289,12 @@ datum/chemical_reaction/slimepsteroid result_amount = 1 required_container = /obj/item/slime_extract/purple required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimepsteroid/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid + P.loc = get_turf(holder.my_atom) -datum/chemical_reaction/slimejam +/datum/chemical_reaction/slimejam name = "Slime Jam" id = "m_jam" result = "slimejelly" @@ -1298,12 +1302,12 @@ datum/chemical_reaction/slimejam result_amount = 10 required_container = /obj/item/slime_extract/purple required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") +/datum/chemical_reaction/slimejam/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") //Dark Purple -datum/chemical_reaction/slimeplasma +/datum/chemical_reaction/slimeplasma name = "Slime Plasma" id = "m_plasma" result = null @@ -1311,14 +1315,14 @@ datum/chemical_reaction/slimeplasma result_amount = 1 required_container = /obj/item/slime_extract/darkpurple required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma - P.amount = 10 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimeplasma/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma + P.amount = 10 + P.loc = get_turf(holder.my_atom) //Red -datum/chemical_reaction/slimeglycerol +/datum/chemical_reaction/slimeglycerol name = "Slime Glycerol" id = "m_glycerol" result = "glycerol" @@ -1326,11 +1330,11 @@ datum/chemical_reaction/slimeglycerol result_amount = 8 required_container = /obj/item/slime_extract/red required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") +/datum/chemical_reaction/slimeglycerol/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") -datum/chemical_reaction/slimebloodlust +/datum/chemical_reaction/slimebloodlust name = "Bloodlust" id = "m_bloodlust" result = null @@ -1338,16 +1342,16 @@ datum/chemical_reaction/slimebloodlust result_amount = 1 required_container = /obj/item/slime_extract/red required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) - slime.tame = 0 - slime.rabid = 1 - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) +/datum/chemical_reaction/slimebloodlust/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) + slime.tame = 0 + slime.rabid = 1 + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) //Pink -datum/chemical_reaction/slimeppotion +/datum/chemical_reaction/slimeppotion name = "Slime Potion" id = "m_potion" result = null @@ -1355,14 +1359,14 @@ datum/chemical_reaction/slimeppotion result_amount = 1 required_container = /obj/item/slime_extract/pink required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimeppotion/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion + P.loc = get_turf(holder.my_atom) //Black -datum/chemical_reaction/slimemutate2 +/datum/chemical_reaction/slimemutate2 name = "Advanced Mutation Toxin" id = "mutationtoxin2" result = "amutationtoxin" @@ -1370,11 +1374,11 @@ datum/chemical_reaction/slimemutate2 result_amount = 1 required_other = 1 required_container = /obj/item/slime_extract/black - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") +/datum/chemical_reaction/slimemutate2/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") //Oil -datum/chemical_reaction/slimeexplosion +/datum/chemical_reaction/slimeexplosion name = "Slime Explosion" id = "m_explosion" result = null @@ -1382,14 +1386,15 @@ datum/chemical_reaction/slimeexplosion result_amount = 1 required_container = /obj/item/slime_extract/oil required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - explosion(get_turf(holder.my_atom), 1 ,3, 6) +/datum/chemical_reaction/slimeexplosion/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + spawn(50) + if(holder && holder.my_atom) + explosion(get_turf(holder.my_atom), 1 ,3, 6) //Light Pink -datum/chemical_reaction/slimepotion2 +/datum/chemical_reaction/slimepotion2 name = "Slime Potion 2" id = "m_potion2" result = null @@ -1397,12 +1402,12 @@ datum/chemical_reaction/slimepotion2 required_container = /obj/item/slime_extract/lightpink required_reagents = list("plasma" = 5) required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimepotion2/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2 + P.loc = get_turf(holder.my_atom) //Adamantine -datum/chemical_reaction/slimegolem +/datum/chemical_reaction/slimegolem name = "Slime Golem" id = "m_golem" result = null @@ -1410,74 +1415,15 @@ datum/chemical_reaction/slimegolem result_amount = 1 required_container = /obj/item/slime_extract/adamantine required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/effect/golemrune/Z = new /obj/effect/golemrune - Z.loc = get_turf(holder.my_atom) - Z.announce_to_ghosts() - +/datum/chemical_reaction/slimegolem/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/effect/golemrune/Z = new /obj/effect/golemrune + Z.loc = get_turf(holder.my_atom) + Z.announce_to_ghosts() //Bluespace -datum/chemical_reaction/slimeteleport - name = "Slime Teleport" - id = "m_tele" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/bluespace - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - // Calculate new position (searches through beacons in world) - var/obj/item/device/radio/beacon/chosen - var/list/possible = list() - for(var/obj/item/device/radio/beacon/W in world) - possible += W - - if(possible.len > 0) - chosen = pick(possible) - - if(chosen) - // Calculate previous position for transition - - var/turf/FROM = get_turf(holder.my_atom) // the turf of origin we're travelling FROM - var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO - - playsound(TO, 'sound/effects/phasein.ogg', 100, 1) - - var/list/flashers = list() - for(var/mob/living/carbon/human/M in viewers(TO, null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) // flash dose faggots - flashers += M - - var/y_distance = TO.y - FROM.y - var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in range(4, FROM )) // iterate thru list of mobs in the area - if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid - if(A.anchored) continue - if(istype(A, /obj/structure/cable )) continue - - var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place - if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving - A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z) - - spawn() - if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect - var/mob/M = A - if(M.client) - var/obj/blueeffect = new /obj(src) - blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" - blueeffect.icon = 'icons/effects/effects.dmi' - blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = 17 - blueeffect.mouse_opacity = 0 - M.client.screen += blueeffect - sleep(20) - M.client.screen -= blueeffect - del(blueeffect) -datum/chemical_reaction/slimecrystal +/datum/chemical_reaction/slimecrystal name = "Slime Crystal" id = "m_crystal" result = null @@ -1485,15 +1431,15 @@ datum/chemical_reaction/slimecrystal result_amount = 1 required_container = /obj/item/slime_extract/bluespace required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - if(holder.my_atom) - var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom)) - BC.visible_message("The [BC.name] appears out of thin air!") +/datum/chemical_reaction/slimecrystal/on_reaction(var/datum/reagents/holder, var/created_volume) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + if(holder.my_atom) + var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom)) + BC.visible_message("The [BC.name] appears out of thin air!") //Cerulean -datum/chemical_reaction/slimepsteroid2 +/datum/chemical_reaction/slimepsteroid2 name = "Slime Steroid 2" id = "m_steroid2" result = null @@ -1501,13 +1447,13 @@ datum/chemical_reaction/slimepsteroid2 result_amount = 1 required_container = /obj/item/slime_extract/cerulean required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimepsteroid2/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2 + P.loc = get_turf(holder.my_atom) //Sepia -datum/chemical_reaction/slimecamera +/datum/chemical_reaction/slimecamera name = "Slime Camera" id = "m_camera" result = null @@ -1515,12 +1461,12 @@ datum/chemical_reaction/slimecamera result_amount = 1 required_container = /obj/item/slime_extract/sepia required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera/P = new /obj/item/device/camera - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimecamera/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/device/camera/P = new /obj/item/device/camera + P.loc = get_turf(holder.my_atom) -datum/chemical_reaction/slimefilm +/datum/chemical_reaction/slimefilm name = "Slime Film" id = "m_film" result = null @@ -1528,15 +1474,15 @@ datum/chemical_reaction/slimefilm result_amount = 1 required_container = /obj/item/slime_extract/sepia required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera_film/P = new /obj/item/device/camera_film - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimefilm/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/device/camera_film/P = new /obj/item/device/camera_film + P.loc = get_turf(holder.my_atom) //Pyrite -datum/chemical_reaction/slimepaint +/datum/chemical_reaction/slimepaint name = "Slime Paint" id = "s_paint" result = null @@ -1544,113 +1490,113 @@ datum/chemical_reaction/slimepaint result_amount = 1 required_container = /obj/item/slime_extract/pyrite required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/list/paints = typesof(/obj/item/weapon/paint) - /obj/item/weapon/paint - var/chosen = pick(paints) - var/obj/P = new chosen - if(P) - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimepaint/on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/list/paints = typesof(/obj/item/weapon/paint) - /obj/item/weapon/paint + var/chosen = pick(paints) + var/obj/P = new chosen + if(P) + P.loc = get_turf(holder.my_atom) //////////////////////////////////////////FOOD MIXTURES//////////////////////////////////// -datum/chemical_reaction/tofu +/datum/chemical_reaction/tofu name = "Tofu" id = "tofu" result = null required_reagents = list("soymilk" = 10) required_catalysts = list("enzyme" = 5) result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/tofu(location) - return +/datum/chemical_reaction/tofu/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/tofu(location) + return -datum/chemical_reaction/chocolate_bar +/datum/chemical_reaction/chocolate_bar name = "Chocolate Bar" id = "chocolate_bar" result = null required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2) result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) - return +/datum/chemical_reaction/chocolate_bar/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) + return -datum/chemical_reaction/chocolate_bar2 +/datum/chemical_reaction/chocolate_bar2 name = "Chocolate Bar" id = "chocolate_bar" result = null required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2) result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) - return +/datum/chemical_reaction/chocolate_bar2/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) + return -datum/chemical_reaction/hot_coco +/datum/chemical_reaction/hot_coco name = "Hot Coco" id = "hot_coco" result = "hot_coco" required_reagents = list("water" = 5, "coco" = 1) result_amount = 5 -datum/chemical_reaction/coffee +/datum/chemical_reaction/coffee name = "Coffee" id = "coffee" result = "coffee" required_reagents = list("coffeepowder" = 1, "water" = 5) result_amount = 5 -datum/chemical_reaction/tea +/datum/chemical_reaction/tea name = "Tea" id = "tea" result = "tea" required_reagents = list("teapowder" = 1, "water" = 5) result_amount = 5 -datum/chemical_reaction/soysauce +/datum/chemical_reaction/soysauce name = "Soy Sauce" id = "soysauce" result = "soysauce" required_reagents = list("soymilk" = 4, "sacid" = 1) result_amount = 5 -datum/chemical_reaction/cheesewheel +/datum/chemical_reaction/cheesewheel name = "Cheesewheel" id = "cheesewheel" result = null required_reagents = list("milk" = 40) required_catalysts = list("enzyme" = 5) result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) - return +/datum/chemical_reaction/cheesewheel/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) + return -datum/chemical_reaction/syntiflesh +/datum/chemical_reaction/syntiflesh name = "Syntiflesh" id = "syntiflesh" result = null required_reagents = list("blood" = 5, "clonexadone" = 1) result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) - return +/datum/chemical_reaction/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) + return -datum/chemical_reaction/hot_ramen +/datum/chemical_reaction/hot_ramen name = "Hot Ramen" id = "hot_ramen" result = "hot_ramen" required_reagents = list("water" = 1, "dry_ramen" = 3) result_amount = 3 -datum/chemical_reaction/hell_ramen +/datum/chemical_reaction/hell_ramen name = "Hell Ramen" id = "hell_ramen" result = "hell_ramen" @@ -1661,49 +1607,49 @@ datum/chemical_reaction/hell_ramen ////////////////////////////////////////// COCKTAILS ////////////////////////////////////// -datum/chemical_reaction/goldschlager +/datum/chemical_reaction/goldschlager name = "Goldschlager" id = "goldschlager" result = "goldschlager" required_reagents = list("vodka" = 10, "gold" = 1) result_amount = 10 -datum/chemical_reaction/patron +/datum/chemical_reaction/patron name = "Patron" id = "patron" result = "patron" required_reagents = list("tequilla" = 10, "silver" = 1) result_amount = 10 -datum/chemical_reaction/bilk +/datum/chemical_reaction/bilk name = "Bilk" id = "bilk" result = "bilk" required_reagents = list("milk" = 1, "beer" = 1) result_amount = 2 -datum/chemical_reaction/icetea +/datum/chemical_reaction/icetea name = "Iced Tea" id = "icetea" result = "icetea" required_reagents = list("ice" = 1, "tea" = 3) result_amount = 4 -datum/chemical_reaction/icecoffee +/datum/chemical_reaction/icecoffee name = "Iced Coffee" id = "icecoffee" result = "icecoffee" required_reagents = list("ice" = 1, "coffee" = 3) result_amount = 4 -datum/chemical_reaction/nuka_cola +/datum/chemical_reaction/nuka_cola name = "Nuka Cola" id = "nuka_cola" result = "nuka_cola" required_reagents = list("uranium" = 1, "cola" = 6) result_amount = 6 -datum/chemical_reaction/moonshine +/datum/chemical_reaction/moonshine name = "Moonshine" id = "moonshine" result = "moonshine" @@ -1711,7 +1657,7 @@ datum/chemical_reaction/moonshine required_catalysts = list("enzyme" = 5) result_amount = 10 -datum/chemical_reaction/wine +/datum/chemical_reaction/wine name = "Wine" id = "wine" result = "wine" @@ -1719,7 +1665,7 @@ datum/chemical_reaction/wine required_catalysts = list("enzyme" = 5) result_amount = 10 -datum/chemical_reaction/spacebeer +/datum/chemical_reaction/spacebeer name = "Space Beer" id = "spacebeer" result = "beer" @@ -1727,7 +1673,7 @@ datum/chemical_reaction/spacebeer required_catalysts = list("enzyme" = 5) result_amount = 10 -datum/chemical_reaction/vodka +/datum/chemical_reaction/vodka name = "Vodka" id = "vodka" result = "vodka" @@ -1735,7 +1681,7 @@ datum/chemical_reaction/vodka required_catalysts = list("enzyme" = 5) result_amount = 10 -datum/chemical_reaction/kahlua +/datum/chemical_reaction/kahlua name = "Kahlua" id = "kahlua" result = "kahlua" @@ -1743,252 +1689,252 @@ datum/chemical_reaction/kahlua required_catalysts = list("enzyme" = 5) result_amount = 5 -datum/chemical_reaction/gin_tonic +/datum/chemical_reaction/gin_tonic name = "Gin and Tonic" id = "gintonic" result = "gintonic" required_reagents = list("gin" = 2, "tonic" = 1) result_amount = 3 -datum/chemical_reaction/cuba_libre +/datum/chemical_reaction/cuba_libre name = "Cuba Libre" id = "cubalibre" result = "cubalibre" required_reagents = list("rum" = 2, "cola" = 1) result_amount = 3 -datum/chemical_reaction/martini +/datum/chemical_reaction/martini name = "Classic Martini" id = "martini" result = "martini" required_reagents = list("gin" = 2, "vermouth" = 1) result_amount = 3 -datum/chemical_reaction/vodkamartini +/datum/chemical_reaction/vodkamartini name = "Vodka Martini" id = "vodkamartini" result = "vodkamartini" required_reagents = list("vodka" = 2, "vermouth" = 1) result_amount = 3 -datum/chemical_reaction/white_russian +/datum/chemical_reaction/white_russian name = "White Russian" id = "whiterussian" result = "whiterussian" required_reagents = list("blackrussian" = 3, "cream" = 2) result_amount = 5 -datum/chemical_reaction/whiskey_cola +/datum/chemical_reaction/whiskey_cola name = "Whiskey Cola" id = "whiskeycola" result = "whiskeycola" required_reagents = list("whiskey" = 2, "cola" = 1) result_amount = 3 -datum/chemical_reaction/screwdriver +/datum/chemical_reaction/screwdriver name = "Screwdriver" id = "screwdrivercocktail" result = "screwdrivercocktail" required_reagents = list("vodka" = 2, "orangejuice" = 1) result_amount = 3 -datum/chemical_reaction/bloody_mary +/datum/chemical_reaction/bloody_mary name = "Bloody Mary" id = "bloodymary" result = "bloodymary" required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1) result_amount = 4 -datum/chemical_reaction/gargle_blaster +/datum/chemical_reaction/gargle_blaster name = "Pan-Galactic Gargle Blaster" id = "gargleblaster" result = "gargleblaster" required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1) result_amount = 5 -datum/chemical_reaction/brave_bull +/datum/chemical_reaction/brave_bull name = "Brave Bull" id = "bravebull" result = "bravebull" required_reagents = list("tequilla" = 2, "kahlua" = 1) result_amount = 3 -datum/chemical_reaction/tequilla_sunrise +/datum/chemical_reaction/tequilla_sunrise name = "Tequilla Sunrise" id = "tequillasunrise" result = "tequillasunrise" required_reagents = list("tequilla" = 2, "orangejuice" = 1) result_amount = 3 -datum/chemical_reaction/toxins_special +/datum/chemical_reaction/toxins_special name = "Toxins Special" id = "toxinsspecial" result = "toxinsspecial" required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2) result_amount = 5 -datum/chemical_reaction/beepsky_smash +/datum/chemical_reaction/beepsky_smash name = "Beepksy Smash" id = "beepksysmash" result = "beepskysmash" required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1) result_amount = 4 -datum/chemical_reaction/doctor_delight +/datum/chemical_reaction/doctor_delight name = "The Doctor's Delight" id = "doctordelight" result = "doctorsdelight" required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1, "tricordrazine" = 1) result_amount = 5 -datum/chemical_reaction/irish_cream +/datum/chemical_reaction/irish_cream name = "Irish Cream" id = "irishcream" result = "irishcream" required_reagents = list("whiskey" = 2, "cream" = 1) result_amount = 3 -datum/chemical_reaction/manly_dorf +/datum/chemical_reaction/manly_dorf name = "The Manly Dorf" id = "manlydorf" result = "manlydorf" required_reagents = list ("beer" = 1, "ale" = 2) result_amount = 3 -datum/chemical_reaction/hooch +/datum/chemical_reaction/hooch name = "Hooch" id = "hooch" result = "hooch" required_reagents = list ("sugar" = 1, "ethanol" = 2, "fuel" = 1) result_amount = 3 -datum/chemical_reaction/irish_coffee +/datum/chemical_reaction/irish_coffee name = "Irish Coffee" id = "irishcoffee" result = "irishcoffee" required_reagents = list("irishcream" = 1, "coffee" = 1) result_amount = 2 -datum/chemical_reaction/b52 +/datum/chemical_reaction/b52 name = "B-52" id = "b52" result = "b52" required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1) result_amount = 3 -datum/chemical_reaction/atomicbomb +/datum/chemical_reaction/atomicbomb name = "Atomic Bomb" id = "atomicbomb" result = "atomicbomb" required_reagents = list("b52" = 10, "uranium" = 1) result_amount = 10 -datum/chemical_reaction/margarita +/datum/chemical_reaction/margarita name = "Margarita" id = "margarita" result = "margarita" required_reagents = list("tequilla" = 2, "limejuice" = 1) result_amount = 3 -datum/chemical_reaction/longislandicedtea +/datum/chemical_reaction/longislandicedtea name = "Long Island Iced Tea" id = "longislandicedtea" result = "longislandicedtea" required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1) result_amount = 4 -datum/chemical_reaction/threemileisland +/datum/chemical_reaction/threemileisland name = "Three Mile Island Iced Tea" id = "threemileisland" result = "threemileisland" required_reagents = list("longislandicedtea" = 10, "uranium" = 1) result_amount = 10 -datum/chemical_reaction/whiskeysoda +/datum/chemical_reaction/whiskeysoda name = "Whiskey Soda" id = "whiskeysoda" result = "whiskeysoda" required_reagents = list("whiskey" = 2, "sodawater" = 1) result_amount = 3 -datum/chemical_reaction/black_russian +/datum/chemical_reaction/black_russian name = "Black Russian" id = "blackrussian" result = "blackrussian" required_reagents = list("vodka" = 3, "kahlua" = 2) result_amount = 5 -datum/chemical_reaction/manhattan +/datum/chemical_reaction/manhattan name = "Manhattan" id = "manhattan" result = "manhattan" required_reagents = list("whiskey" = 2, "vermouth" = 1) result_amount = 3 -datum/chemical_reaction/manhattan_proj +/datum/chemical_reaction/manhattan_proj name = "Manhattan Project" id = "manhattan_proj" result = "manhattan_proj" required_reagents = list("manhattan" = 10, "uranium" = 1) result_amount = 10 -datum/chemical_reaction/vodka_tonic +/datum/chemical_reaction/vodka_tonic name = "Vodka and Tonic" id = "vodkatonic" result = "vodkatonic" required_reagents = list("vodka" = 2, "tonic" = 1) result_amount = 3 -datum/chemical_reaction/gin_fizz +/datum/chemical_reaction/gin_fizz name = "Gin Fizz" id = "ginfizz" result = "ginfizz" required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1) result_amount = 4 -datum/chemical_reaction/bahama_mama +/datum/chemical_reaction/bahama_mama name = "Bahama mama" id = "bahama_mama" result = "bahama_mama" required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1) result_amount = 6 -datum/chemical_reaction/singulo +/datum/chemical_reaction/singulo name = "Singulo" id = "singulo" result = "singulo" required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5) result_amount = 10 -datum/chemical_reaction/alliescocktail +/datum/chemical_reaction/alliescocktail name = "Allies Cocktail" id = "alliescocktail" result = "alliescocktail" required_reagents = list("martini" = 1, "vodka" = 1) result_amount = 2 -datum/chemical_reaction/demonsblood +/datum/chemical_reaction/demonsblood name = "Demons Blood" id = "demonsblood" result = "demonsblood" required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1) result_amount = 4 -datum/chemical_reaction/booger +/datum/chemical_reaction/booger name = "Booger" id = "booger" result = "booger" required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1) result_amount = 4 -datum/chemical_reaction/antifreeze +/datum/chemical_reaction/antifreeze name = "Anti-freeze" id = "antifreeze" result = "antifreeze" required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1) result_amount = 4 -datum/chemical_reaction/barefoot +/datum/chemical_reaction/barefoot name = "Barefoot" id = "barefoot" result = "barefoot" @@ -1998,21 +1944,21 @@ datum/chemical_reaction/barefoot ////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri///// -datum/chemical_reaction/sbiten +/datum/chemical_reaction/sbiten name = "Sbiten" id = "sbiten" result = "sbiten" required_reagents = list("vodka" = 10, "capsaicin" = 1) result_amount = 10 -datum/chemical_reaction/red_mead +/datum/chemical_reaction/red_mead name = "Red Mead" id = "red_mead" result = "red_mead" required_reagents = list("blood" = 1, "mead" = 1) result_amount = 2 -datum/chemical_reaction/mead +/datum/chemical_reaction/mead name = "Mead" id = "mead" result = "mead" @@ -2020,147 +1966,147 @@ datum/chemical_reaction/mead required_catalysts = list("enzyme" = 5) result_amount = 2 -datum/chemical_reaction/iced_beer +/datum/chemical_reaction/iced_beer name = "Iced Beer" id = "iced_beer" result = "iced_beer" required_reagents = list("beer" = 10, "frostoil" = 1) result_amount = 10 -datum/chemical_reaction/iced_beer2 +/datum/chemical_reaction/iced_beer2 name = "Iced Beer" id = "iced_beer" result = "iced_beer" required_reagents = list("beer" = 5, "ice" = 1) result_amount = 6 -datum/chemical_reaction/grog +/datum/chemical_reaction/grog name = "Grog" id = "grog" result = "grog" required_reagents = list("rum" = 1, "water" = 1) result_amount = 2 -datum/chemical_reaction/soy_latte +/datum/chemical_reaction/soy_latte name = "Soy Latte" id = "soy_latte" result = "soy_latte" required_reagents = list("coffee" = 1, "soymilk" = 1) result_amount = 2 -datum/chemical_reaction/cafe_latte +/datum/chemical_reaction/cafe_latte name = "Cafe Latte" id = "cafe_latte" result = "cafe_latte" required_reagents = list("coffee" = 1, "milk" = 1) result_amount = 2 -datum/chemical_reaction/acidspit +/datum/chemical_reaction/acidspit name = "Acid Spit" id = "acidspit" result = "acidspit" required_reagents = list("sacid" = 1, "wine" = 5) result_amount = 6 -datum/chemical_reaction/amasec +/datum/chemical_reaction/amasec name = "Amasec" id = "amasec" result = "amasec" required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5) result_amount = 10 -datum/chemical_reaction/changelingsting +/datum/chemical_reaction/changelingsting name = "Changeling Sting" id = "changelingsting" result = "changelingsting" required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1) result_amount = 5 -datum/chemical_reaction/aloe +/datum/chemical_reaction/aloe name = "Aloe" id = "aloe" result = "aloe" required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1) result_amount = 2 -datum/chemical_reaction/andalusia +/datum/chemical_reaction/andalusia name = "Andalusia" id = "andalusia" result = "andalusia" required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1) result_amount = 3 -datum/chemical_reaction/neurotoxin +/datum/chemical_reaction/neurotoxin name = "Neurotoxin" id = "neurotoxin" result = "neurotoxin" required_reagents = list("gargleblaster" = 1, "stoxin" = 1) result_amount = 2 -datum/chemical_reaction/snowwhite +/datum/chemical_reaction/snowwhite name = "Snow White" id = "snowwhite" result = "snowwhite" required_reagents = list("beer" = 1, "lemon_lime" = 1) result_amount = 2 -datum/chemical_reaction/irishcarbomb +/datum/chemical_reaction/irishcarbomb name = "Irish Car Bomb" id = "irishcarbomb" result = "irishcarbomb" required_reagents = list("ale" = 1, "irishcream" = 1) result_amount = 2 -datum/chemical_reaction/syndicatebomb +/datum/chemical_reaction/syndicatebomb name = "Syndicate Bomb" id = "syndicatebomb" result = "syndicatebomb" required_reagents = list("beer" = 1, "whiskeycola" = 1) result_amount = 2 -datum/chemical_reaction/erikasurprise +/datum/chemical_reaction/erikasurprise name = "Erika Surprise" id = "erikasurprise" result = "erikasurprise" required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) result_amount = 5 -datum/chemical_reaction/devilskiss +/datum/chemical_reaction/devilskiss name = "Devils Kiss" id = "devilskiss" result = "devilskiss" required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1) result_amount = 3 -datum/chemical_reaction/hippiesdelight +/datum/chemical_reaction/hippiesdelight name = "Hippies Delight" id = "hippiesdelight" result = "hippiesdelight" required_reagents = list("mushroomhallucinogen" = 1, "gargleblaster" = 1) result_amount = 2 -datum/chemical_reaction/bananahonk +/datum/chemical_reaction/bananahonk name = "Banana Honk" id = "bananahonk" result = "bananahonk" required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1) result_amount = 3 -datum/chemical_reaction/silencer +/datum/chemical_reaction/silencer name = "Silencer" id = "silencer" result = "silencer" required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1) result_amount = 3 -datum/chemical_reaction/driestmartini +/datum/chemical_reaction/driestmartini name = "Driest Martini" id = "driestmartini" result = "driestmartini" required_reagents = list("nothing" = 1, "gin" = 1) result_amount = 2 -datum/chemical_reaction/thirteenloko +/datum/chemical_reaction/thirteenloko name = "Thirteen Loko" id = "thirteenloko" result = "thirteenloko" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 473e77e778a..d5f664d8178 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -109,21 +109,22 @@ message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") explosion(src.loc,-1,0,2, flame_range = 2) - if(src) - del(src) - /obj/structure/reagent_dispensers/fueltank/blob_act() explosion(src.loc,0,1,5,7,10, flame_range = 5) - if(src) - del(src) + /obj/structure/reagent_dispensers/fueltank/ex_act() explosion(src.loc,-1,0,2, flame_range = 2) if(src) del(src) + +/obj/structure/reagent_dispensers/fueltank/fire_act() + blob_act() //saving a few lines of copypasta + + /obj/structure/reagent_dispensers/peppertank name = "Pepper Spray Refiller" desc = "Refill pepper spray canisters." @@ -180,7 +181,7 @@ /obj/structure/reagent_dispensers/beerkeg/blob_act() explosion(src.loc,0,3,5,7,10) - del(src) + /obj/structure/reagent_dispensers/virusfood name = "Virus Food Dispenser" diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index ab3ce7abfc3..9fde6c0c99e 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -71,4 +71,9 @@ var/list/GPS_list = list() /obj/item/device/gps/engineering icon_state = "gps-e" - gpstag = "ENG0" \ No newline at end of file + gpstag = "ENG0" + +/obj/item/device/gps/mining + icon_state = "gps-m" + gpstag = "MINE0" + desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." \ No newline at end of file diff --git a/config/game_options.txt b/config/game_options.txt index 4880ee16762..a01b8ef2450 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -102,7 +102,7 @@ PROBABILITY SANDBOX 0 ## Used as (Antagonists = Population / Coeff) ## Set to 0 to disable scaling and use default numbers instead. TRAITOR_SCALING_COEFF 6 -CHANGELING_SCALING_COEFF 10 +CHANGELING_SCALING_COEFF 7 ## Uncomment to prohibit jobs that start with loyalty ## implants from being most antagonists. diff --git a/html/changelog.html b/html/changelog.html index 094a498c348..2bbfb2731c2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,25 +52,115 @@ should be listed in the changelog upon commit tho. Thanks. --> - - -
-

17 February 2014

-

Ergovisavi updated:

- -
- + + +
+

3 maart 2014

+

Miauw updated:

+ +
+ +
+

3 March 2014

+

Incoming5643 updated:

+ +

Miauw updated:

+ +

Drovidi Corv updated:

+ +

TZK13 updated:

+ +

ChuckTheSheep updated:

+ +
+ +
+

26 February 2014

+

Incoming5643 updated:

+ +
+ +
+

25 February 2014

+

Incoming5643 updated:

+ +
+ +
+

24 February 2014

+

Miauw updated:

+ +

Incoming5643 updated:

+ +

Ergovisavi updated:

+ +

HornyGranny updated:

+ +

Giacom updated:

+ +

Razharas updated:

+ +
+ +
+

19 February 2014

+

Perakp updated:

+ +

Aranclanos updated:

+ +
+

17 February 2014

+

Ergovisavi updated:

+

Fleure updated:

-
-

9 February 2014

-

Demas updated:

- -
+
+

9 February 2014

+

Demas updated:

+ +
- -
-

8 February 2014

-

Razharas updated:

- -
- -
-

8 February 2014

-

MrPerson updated:

- -
+ +
+

8 February 2014

+

Razharas updated:

+ +
+ +
+

8 February 2014

+

MrPerson updated:

+ +
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index a8341cbe106..3e2ee98f31a 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f3c3edbf5f5..edb97243990 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index 53deaecc705..720e036998b 100644 Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index fd6e7acdc25..ff860e9698c 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index f6c5126b902..c1e68ca3ec0 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index acfb656c318..c0d073039bb 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 63241a21829..bb4c740aef6 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 80623d3166d..c0ab56cdb49 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index fabc83f765b..85d6c7b58b5 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 0899e659901..224ad0f413c 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index c857e0d39d4..a424ea49f5e 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index e8aba5cf9e3..77eb778af60 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 50e8e5b0a6c..1e3090a1c63 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/tank.dmi b/icons/obj/tank.dmi index ab7230f1d21..91d42d5ec4e 100644 Binary files a/icons/obj/tank.dmi and b/icons/obj/tank.dmi differ diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi index 16ac0fef27a..a0491827924 100644 Binary files a/icons/obj/telescience.dmi and b/icons/obj/telescience.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 38020dc5bfc..2de7e0296e0 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -60,4 +60,7 @@ h1.alert, h2.alert {color: #000000;} .interface {color: #330033;} -"} +BIG IMG.icon {width: 32px; height: 32px;} + + +"} \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index f513f821862..3164de11ba5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -116,6 +116,7 @@ #include "code\datums\datacore.dm" #include "code\datums\datumvars.dm" #include "code\datums\disease.dm" +#include "code\datums\gas_mixture.dm" #include "code\datums\mind.dm" #include "code\datums\mixed.dm" #include "code\datums\modules.dm" @@ -214,7 +215,6 @@ #include "code\defines\procs\command_alert.dm" #include "code\defines\procs\dbcore.dm" #include "code\defines\procs\statistics.dm" -#include "code\FEA\FEA_gas_mixture.dm" #include "code\game\asteroid.dm" #include "code\game\atoms.dm" #include "code\game\atoms_movable.dm" @@ -893,7 +893,6 @@ #include "code\modules\mob\living\carbon\alien\death.dm" #include "code\modules\mob\living\carbon\alien\login.dm" #include "code\modules\mob\living\carbon\alien\logout.dm" -#include "code\modules\mob\living\carbon\alien\powers.dm" #include "code\modules\mob\living\carbon\alien\say.dm" #include "code\modules\mob\living\carbon\alien\screen.dm" #include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm" @@ -960,7 +959,6 @@ #include "code\modules\mob\living\carbon\monkey\life.dm" #include "code\modules\mob\living\carbon\monkey\login.dm" #include "code\modules\mob\living\carbon\monkey\monkey.dm" -#include "code\modules\mob\living\carbon\monkey\powers.dm" #include "code\modules\mob\living\carbon\monkey\say.dm" #include "code\modules\mob\living\carbon\monkey\update_icons.dm" #include "code\modules\mob\living\silicon\death.dm"