mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
* WIP on event condition format
* Hero portrait serialization * Fix town spells serialization * Added support for float exponential part in Json * Added support for int64 in Json * Added basic Hero definitions serialization * Added rumors serialization * Advanced player info serialization. * Added Disposed heroes serialization, (!) not covered with tests yet * Added Local event serialization * Added Pandoras box serialization * Added Seer hut reward serialization * Added CQuest serialization * Added API for map object instance names serialization. * Added random dwelling options serialization * Advanced town options serialization * Advanced hero options serialization * More map format tests * A lot of fixes, cleanup and refactoring
This commit is contained in:
parent
5127061e28
commit
a85b4cf2a5
@ -327,6 +327,12 @@ TSubgoal Win::whatToDoToAchieve()
|
||||
break; // Should be only used in calculation of candidates (see toBool lambda)
|
||||
case EventCondition::CONST_VALUE:
|
||||
break;
|
||||
|
||||
case EventCondition::HAVE_0:
|
||||
case EventCondition::HAVE_BUILDING_0:
|
||||
case EventCondition::DESTROY_0:
|
||||
//TODO: support new condition format
|
||||
return sptr (Goals::Conquer());
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
@ -2512,9 +2512,9 @@ void OptionsTab::recreate()
|
||||
entries.insert(std::make_pair(it->first, new PlayerOptionsEntry(this, it->second)));
|
||||
const std::vector<SHeroName> &heroes = SEL->current->mapHeader->players[it->first.getNum()].heroesNames;
|
||||
for(auto & heroe : heroes)
|
||||
usedHeroes.insert(heroe.heroId);
|
||||
if(heroe.heroId >= 0)//in VCMI map format heroId = -1 means random hero
|
||||
usedHeroes.insert(heroe.heroId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OptionsTab::setTurnLength( int npos )
|
||||
|
69
config/factions/random.json
Normal file
69
config/factions/random.json
Normal file
@ -0,0 +1,69 @@
|
||||
{
|
||||
"random":
|
||||
{
|
||||
"index": -1,
|
||||
"town":
|
||||
{
|
||||
"mapObject" :
|
||||
{
|
||||
"templates" :
|
||||
{
|
||||
"castle" : { "editorAnimation" : "AVCRANX0.def" },
|
||||
"village" : { "editorAnimation" : "AVCRAND0.def" },
|
||||
"capitol" : { "editorAnimation" : "AVCRANZ0.def" }
|
||||
}
|
||||
},
|
||||
"buildings" :
|
||||
{
|
||||
"mageGuild1": { "id" : 0 },
|
||||
"mageGuild2": { "id" : 1, "upgrades" : "mageGuild1" },
|
||||
"mageGuild3": { "id" : 2, "upgrades" : "mageGuild2" },
|
||||
"mageGuild4": { "id" : 3, "upgrades" : "mageGuild3" },
|
||||
"mageGuild5": { "id" : 4, "upgrades" : "mageGuild4" },
|
||||
|
||||
"tavern": { "id" : 5 },
|
||||
"shipyard": { "id" : 6 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
|
||||
|
||||
"villageHall": { "id" : 10, "mode" : "auto", "produce" : { "gold": 500 } },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ], "produce" : { "gold": 1000 } },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ], "produce": { "gold": 2000 } },
|
||||
"capitol": { "id" : 13, "upgrades" : "cityHall", "requires" : [ "castle" ], "produce" : { "gold": 4000 } },
|
||||
|
||||
|
||||
"marketplace": { "id" : 14 },
|
||||
"resourceSilo": { "id" : 15, "upgrades" : "marketplace" },
|
||||
"blacksmith": { "id" : 16 },
|
||||
|
||||
"horde1": { "id" : -30, "upgrades" : "dwellingLvl1" },
|
||||
"horde2": { "id" : -31, "upgrades" : "dwellingLvl2" },
|
||||
"horde3": { "id" : -32, "upgrades" : "dwellingLvl3" },
|
||||
"horde4": { "id" : -33, "upgrades" : "dwellingLvl4" },
|
||||
"horde5": { "id" : -34, "upgrades" : "dwellingLvl5" },
|
||||
"horde6": { "id" : -35, "upgrades" : "dwellingLvl6" },
|
||||
"horde7": { "id" : -36, "upgrades" : "dwellingLvl7" },
|
||||
|
||||
"grail": { "id" : 26, "mode" : "grail", "produce" : { "gold": 5000 } },
|
||||
|
||||
"dwellingLvl1": { "id" : 30 },
|
||||
"dwellingLvl2": { "id" : 31 },
|
||||
"dwellingLvl3": { "id" : 32 },
|
||||
"dwellingLvl4": { "id" : 33 },
|
||||
"dwellingLvl5": { "id" : 34 },
|
||||
"dwellingLvl6": { "id" : 35 },
|
||||
"dwellingLvl7": { "id" : 36 },
|
||||
|
||||
"dwellingUpLvl1": { "id" : 37, "upgrades" : "dwellingLvl1" },
|
||||
"dwellingUpLvl2": { "id" : 38, "upgrades" : "dwellingLvl2" },
|
||||
"dwellingUpLvl3": { "id" : 39, "upgrades" : "dwellingLvl3" },
|
||||
"dwellingUpLvl4": { "id" : 40, "upgrades" : "dwellingLvl4" },
|
||||
"dwellingUpLvl5": { "id" : 41, "upgrades" : "dwellingLvl5" },
|
||||
"dwellingUpLvl6": { "id" : 42, "upgrades" : "dwellingLvl6" },
|
||||
"dwellingUpLvl7": { "id" : 43, "upgrades" : "dwellingLvl7" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -23,6 +23,7 @@
|
||||
|
||||
#include "mapObjects/CObjectClassesHandler.h"
|
||||
#include "mapping/CMap.h"
|
||||
#include "serializer/JsonSerializeFormat.h"
|
||||
|
||||
// Note: list must match entries in ArtTraits.txt
|
||||
#define ART_POS_LIST \
|
||||
@ -1220,6 +1221,8 @@ bool CCombinedArtifactInstance::ConstituentInfo::operator==(const ConstituentInf
|
||||
return art == rhs.art && slot == rhs.slot;
|
||||
}
|
||||
|
||||
CArtifactSet::~CArtifactSet() = default;
|
||||
|
||||
const CArtifactInstance* CArtifactSet::getArt(ArtifactPosition pos, bool excludeLocked /*= true*/) const
|
||||
{
|
||||
if(const ArtSlotInfo *si = getSlot(pos))
|
||||
@ -1377,12 +1380,106 @@ void CArtifactSet::artDeserializationFix(CBonusSystemNode *node)
|
||||
node->attachTo(elem.second.artifact);
|
||||
}
|
||||
|
||||
void CArtifactSet::writeJson(JsonNode& json) const
|
||||
void CArtifactSet::serializeJsonArtifacts(JsonSerializeFormat & handler, const std::string & fieldName, CMap * map)
|
||||
{
|
||||
//todo: creature and commander artifacts
|
||||
if(handler.saving && artifactsInBackpack.empty() && artifactsWorn.empty())
|
||||
return;
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
assert(map);
|
||||
artifactsInBackpack.clear();
|
||||
artifactsWorn.clear();
|
||||
}
|
||||
|
||||
auto s = handler.enterStruct(fieldName);
|
||||
|
||||
switch(bearerType())
|
||||
{
|
||||
case ArtBearer::HERO:
|
||||
serializeJsonHero(handler, map);
|
||||
break;
|
||||
case ArtBearer::CREATURE:
|
||||
serializeJsonCreature(handler, map);
|
||||
break;
|
||||
case ArtBearer::COMMANDER:
|
||||
serializeJsonCommander(handler, map);
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CArtifactSet::readJson(const JsonNode& json)
|
||||
void CArtifactSet::serializeJsonHero(JsonSerializeFormat & handler, CMap * map)
|
||||
{
|
||||
for(ArtifactPosition ap = ArtifactPosition::HEAD; ap < ArtifactPosition::AFTER_LAST; ap.advance(1))
|
||||
{
|
||||
serializeJsonSlot(handler, ap, map);
|
||||
}
|
||||
|
||||
std::vector<ArtifactID> backpackTemp;
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
backpackTemp.reserve(artifactsInBackpack.size());
|
||||
for(const ArtSlotInfo & info : artifactsInBackpack)
|
||||
backpackTemp.push_back(info.artifact->artType->id);
|
||||
}
|
||||
handler.serializeIdArray(NArtifactPosition::backpack, backpackTemp, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
|
||||
if(!handler.saving)
|
||||
{
|
||||
for(const ArtifactID & artifactID : backpackTemp)
|
||||
{
|
||||
auto artifact = CArtifactInstance::createArtifact(map, artifactID.toEnum());
|
||||
auto slot = ArtifactPosition(GameConstants::BACKPACK_START + artifactsInBackpack.size());
|
||||
if(artifact->canBePutAt(this, slot))
|
||||
putArtifact(slot, artifact);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CArtifactSet::serializeJsonCreature(JsonSerializeFormat & handler, CMap * map)
|
||||
{
|
||||
logGlobal->error("CArtifactSet::serializeJsonCreature not implemented");
|
||||
}
|
||||
|
||||
void CArtifactSet::serializeJsonCommander(JsonSerializeFormat & handler, CMap * map)
|
||||
{
|
||||
logGlobal->error("CArtifactSet::serializeJsonCommander not implemented");
|
||||
}
|
||||
|
||||
void CArtifactSet::serializeJsonSlot(JsonSerializeFormat & handler, const ArtifactPosition & slot, CMap * map)
|
||||
{
|
||||
ArtifactID artifactID;
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
const ArtSlotInfo * info = getSlot(slot);
|
||||
|
||||
if(info != nullptr && !info->locked)
|
||||
{
|
||||
artifactID = info->artifact->artType->id;
|
||||
handler.serializeId(NArtifactPosition::namesHero[slot.num], artifactID, ArtifactID::NONE, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
handler.serializeId(NArtifactPosition::namesHero[slot.num], artifactID, ArtifactID::NONE, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
|
||||
|
||||
if(artifactID != ArtifactID::NONE)
|
||||
{
|
||||
auto artifact = CArtifactInstance::createArtifact(map, artifactID.toEnum());
|
||||
|
||||
if(artifact->canBePutAt(this, slot))
|
||||
{
|
||||
putArtifact(slot, artifact);
|
||||
}
|
||||
else
|
||||
{
|
||||
logGlobal->debugStream() << "Artifact can't be put at the specified location."; //TODO add more debugging information
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ class CArtifactSet;
|
||||
class CArtifactInstance;
|
||||
class CRandomGenerator;
|
||||
class CMap;
|
||||
class JsonSerializeFormat;
|
||||
|
||||
#define ART_BEARER_LIST \
|
||||
ART_BEARER(HERO)\
|
||||
@ -322,7 +323,8 @@ public:
|
||||
bool isPositionFree(ArtifactPosition pos, bool onlyLockCheck = false) const;
|
||||
|
||||
virtual ArtBearer::ArtBearer bearerType() const = 0;
|
||||
virtual ~CArtifactSet() = default;
|
||||
virtual void putArtifact(ArtifactPosition pos, CArtifactInstance * art) = 0;
|
||||
virtual ~CArtifactSet();
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
@ -331,10 +333,15 @@ public:
|
||||
|
||||
void artDeserializationFix(CBonusSystemNode *node);
|
||||
|
||||
void serializeJsonArtifacts(JsonSerializeFormat & handler, const std::string & fieldName, CMap * map);
|
||||
protected:
|
||||
void writeJson(JsonNode & json) const;
|
||||
void readJson(const JsonNode & json);
|
||||
|
||||
protected:
|
||||
|
||||
std::pair<const CCombinedArtifactInstance *, const CArtifactInstance *> searchForConstituent(int aid) const;
|
||||
private:
|
||||
void serializeJsonHero(JsonSerializeFormat & handler, CMap * map);
|
||||
void serializeJsonCreature(JsonSerializeFormat & handler, CMap * map);
|
||||
void serializeJsonCommander(JsonSerializeFormat & handler, CMap * map);
|
||||
|
||||
void serializeJsonSlot(JsonSerializeFormat & handler, const ArtifactPosition & slot, CMap * map);//normal slots
|
||||
};
|
||||
|
@ -460,6 +460,20 @@ std::vector<bool> CCreatureHandler::getDefaultAllowed() const
|
||||
return ret;
|
||||
}
|
||||
|
||||
si32 CCreatureHandler::decodeCreature(const std::string& identifier)
|
||||
{
|
||||
auto rawId = VLC->modh->identifiers.getIdentifier("core", "creature", identifier);
|
||||
if(rawId)
|
||||
return rawId.get();
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::string CCreatureHandler::encodeCreature(const si32 index)
|
||||
{
|
||||
return VLC->creh->creatures[index]->identifier;
|
||||
}
|
||||
|
||||
void CCreatureHandler::loadCrExpBon()
|
||||
{
|
||||
if (VLC->modh->modules.STACK_EXP) //reading default stack experience bonuses
|
||||
|
@ -216,6 +216,12 @@ public:
|
||||
|
||||
std::vector<bool> getDefaultAllowed() const override;
|
||||
|
||||
///json serialization helper
|
||||
static si32 decodeCreature(const std::string & identifier);
|
||||
|
||||
///json serialization helper
|
||||
static std::string encodeCreature(const si32 index);
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
//TODO: should be optimized, not all these informations needs to be serialized (same for ccreature)
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "CHeroHandler.h"
|
||||
#include "IBonusTypeHandler.h"
|
||||
#include "serializer/JsonSerializeFormat.h"
|
||||
#include "NetPacksBase.h"
|
||||
|
||||
/*
|
||||
* CCreatureSet.cpp, part of VCMI engine
|
||||
@ -483,31 +484,46 @@ void CCreatureSet::armyChanged()
|
||||
|
||||
}
|
||||
|
||||
void CCreatureSet::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName)
|
||||
void CCreatureSet::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName, const boost::optional<int> fixedSize)
|
||||
{
|
||||
if(handler.saving && stacks.empty())
|
||||
return;
|
||||
JsonNode & json = handler.getCurrent()[fieldName];
|
||||
|
||||
auto a = handler.enterArray(fieldName);
|
||||
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
size_t sz = 0;
|
||||
|
||||
for(const auto & p : stacks)
|
||||
vstd::amax(sz, p.first.getNum()+1);
|
||||
|
||||
if(fixedSize)
|
||||
vstd::amax(sz, fixedSize.get());
|
||||
|
||||
a.resize(sz, JsonNode::DATA_STRUCT);
|
||||
|
||||
for(const auto & p : stacks)
|
||||
{
|
||||
JsonNode stack_node;
|
||||
p.second->writeJson(stack_node);
|
||||
json.Vector()[p.first.getNum()] = stack_node;
|
||||
auto s = a.enterStruct(p.first.getNum());
|
||||
p.second->serializeJson(handler);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(size_t idx = 0; idx < json.Vector().size(); idx++)
|
||||
for(size_t idx = 0; idx < a.size(); idx++)
|
||||
{
|
||||
if(json.Vector()[idx]["amount"].Float() > 0)
|
||||
auto s = a.enterStruct(idx);
|
||||
|
||||
TQuantity amount = 0;
|
||||
|
||||
handler.serializeInt("amount", amount);
|
||||
|
||||
if(amount > 0)
|
||||
{
|
||||
CStackInstance * new_stack = new CStackInstance();
|
||||
|
||||
new_stack->readJson(json.Vector()[idx]);
|
||||
|
||||
new_stack->serializeJson(handler);
|
||||
putStack(SlotID(idx), new_stack);
|
||||
}
|
||||
}
|
||||
@ -624,7 +640,8 @@ void CStackInstance::setType(const CCreature *c)
|
||||
experience *= VLC->creh->expAfterUpgrade / 100.0;
|
||||
}
|
||||
|
||||
type = c;
|
||||
CStackBasicDescriptor::setType(c);
|
||||
|
||||
if(type)
|
||||
attachTo(const_cast<CCreature*>(type));
|
||||
}
|
||||
@ -733,23 +750,43 @@ ArtBearer::ArtBearer CStackInstance::bearerType() const
|
||||
return ArtBearer::CREATURE;
|
||||
}
|
||||
|
||||
void CStackInstance::writeJson(JsonNode& json) const
|
||||
void CStackInstance::putArtifact(ArtifactPosition pos, CArtifactInstance * art)
|
||||
{
|
||||
if(idRand > -1)
|
||||
{
|
||||
json["level"].Float() = (int)idRand / 2;
|
||||
json["upgraded"].Bool() = (idRand % 2) > 0;
|
||||
}
|
||||
CStackBasicDescriptor::writeJson(json);
|
||||
assert(!getArt(pos));
|
||||
art->putAt(ArtifactLocation(this, pos));
|
||||
}
|
||||
|
||||
void CStackInstance::readJson(const JsonNode& json)
|
||||
void CStackInstance::serializeJson(JsonSerializeFormat & handler)
|
||||
{
|
||||
if(json["type"].String() == "")
|
||||
//todo: artifacts
|
||||
CStackBasicDescriptor::serializeJson(handler);//must be first
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
idRand = json["level"].Float() * 2 + (int)json["upgraded"].Bool();
|
||||
if(idRand > -1)
|
||||
{
|
||||
int level = (int)idRand / 2;
|
||||
|
||||
boost::logic::tribool upgraded = (idRand % 2) > 0;
|
||||
|
||||
handler.serializeInt("level", level, 0);
|
||||
handler.serializeBool("upgraded", upgraded);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//type set by CStackBasicDescriptor::serializeJson
|
||||
if(type == nullptr)
|
||||
{
|
||||
int level = 0;
|
||||
bool upgraded = false;
|
||||
|
||||
handler.serializeInt("level", level, 0);
|
||||
handler.serializeBool("upgraded", upgraded);
|
||||
|
||||
idRand = level * 2 + (int)(bool)upgraded;
|
||||
}
|
||||
}
|
||||
CStackBasicDescriptor::readJson(json);
|
||||
}
|
||||
|
||||
CCommanderInstance::CCommanderInstance()
|
||||
@ -844,20 +881,30 @@ CStackBasicDescriptor::CStackBasicDescriptor(const CCreature *c, TQuantity Count
|
||||
{
|
||||
}
|
||||
|
||||
void CStackBasicDescriptor::writeJson(JsonNode& json) const
|
||||
void CStackBasicDescriptor::setType(const CCreature * c)
|
||||
{
|
||||
json.setType(JsonNode::DATA_STRUCT);
|
||||
if(type)
|
||||
json["type"].String() = type->identifier;
|
||||
json["amount"].Float() = count;
|
||||
type = c;
|
||||
}
|
||||
|
||||
void CStackBasicDescriptor::readJson(const JsonNode& json)
|
||||
void CStackBasicDescriptor::serializeJson(JsonSerializeFormat & handler)
|
||||
{
|
||||
auto typeName = json["type"].String();
|
||||
if(typeName != "")
|
||||
type = VLC->creh->getCreature("core", json["type"].String());
|
||||
count = json["amount"].Float();
|
||||
handler.serializeInt("amount", count);
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
if(type)
|
||||
{
|
||||
std::string typeName = type->identifier;
|
||||
handler.serializeString("type", typeName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string typeName("");
|
||||
handler.serializeString("type", typeName);
|
||||
if(typeName != "")
|
||||
setType(VLC->creh->getCreature("core", typeName));
|
||||
}
|
||||
}
|
||||
|
||||
DLL_LINKAGE std::ostream & operator<<(std::ostream & str, const CStackInstance & sth)
|
||||
|
@ -32,14 +32,14 @@ public:
|
||||
CStackBasicDescriptor(const CCreature *c, TQuantity Count);
|
||||
virtual ~CStackBasicDescriptor() = default;
|
||||
|
||||
virtual void setType(const CCreature * c);
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
h & type & count;
|
||||
}
|
||||
|
||||
void writeJson(JsonNode & json) const;
|
||||
|
||||
void readJson(const JsonNode & json);
|
||||
void serializeJson(JsonSerializeFormat & handler);
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CStackInstance : public CBonusSystemNode, public CStackBasicDescriptor, public CArtifactSet
|
||||
@ -65,9 +65,7 @@ public:
|
||||
BONUS_TREE_DESERIALIZATION_FIX
|
||||
}
|
||||
|
||||
void writeJson(JsonNode & json) const;
|
||||
|
||||
void readJson(const JsonNode & json);
|
||||
void serializeJson(JsonSerializeFormat & handler);
|
||||
|
||||
//overrides CBonusSystemNode
|
||||
std::string bonusToString(const std::shared_ptr<Bonus>& bonus, bool description) const override; // how would bonus description look for this particular type of node
|
||||
@ -88,10 +86,11 @@ public:
|
||||
virtual ~CStackInstance();
|
||||
|
||||
void setType(CreatureID creID);
|
||||
void setType(const CCreature *c);
|
||||
void setType(const CCreature * c) override;
|
||||
void setArmyObj(const CArmedInstance *ArmyObj);
|
||||
virtual void giveStackExp(TExpType exp);
|
||||
bool valid(bool allowUnrandomized) const;
|
||||
void putArtifact(ArtifactPosition pos, CArtifactInstance * art) override;//from CArtifactSet
|
||||
ArtBearer::ArtBearer bearerType() const override; //from CArtifactSet
|
||||
virtual std::string nodeName() const override; //from CBonusSystemnode
|
||||
void deserializationFix();
|
||||
@ -222,7 +221,7 @@ public:
|
||||
h & stacks & formation;
|
||||
}
|
||||
|
||||
void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName);
|
||||
void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName, const boost::optional<int> fixedSize = boost::none);
|
||||
|
||||
operator bool() const
|
||||
{
|
||||
|
@ -99,8 +99,16 @@ const CTown * CGameInfoCallback::getNativeTown(PlayerColor color) const
|
||||
|
||||
const CGObjectInstance * CGameInfoCallback::getObjByQuestIdentifier(int identifier) const
|
||||
{
|
||||
ERROR_RET_VAL_IF(!vstd::contains(gs->map->questIdentifierToId, identifier), "There is no object with such quest identifier!", nullptr);
|
||||
return getObj(gs->map->questIdentifierToId[identifier]);
|
||||
if(gs->map->questIdentifierToId.empty())
|
||||
{
|
||||
//assume that it is VCMI map and quest identifier equals instance identifier
|
||||
return getObj(ObjectInstanceID(identifier), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ERROR_RET_VAL_IF(!vstd::contains(gs->map->questIdentifierToId, identifier), "There is no object with such quest identifier!", nullptr);
|
||||
return getObj(gs->map->questIdentifierToId[identifier]);
|
||||
}
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
@ -510,8 +510,29 @@ std::pair<Obj,int> CGameState::pickObject (CGObjectInstance *obj)
|
||||
if (auto info = dynamic_cast<CCreGenAsCastleInfo*>(dwl->info))
|
||||
{
|
||||
faction = getRandomGenerator().nextInt(VLC->townh->factions.size() - 1);
|
||||
if (info->asCastle)
|
||||
if(info->asCastle && info->instanceId != "")
|
||||
{
|
||||
auto iter = map->instanceNames.find(info->instanceId);
|
||||
|
||||
if(iter == map->instanceNames.end())
|
||||
logGlobal->errorStream() << "Map object not found: " << info->instanceId;
|
||||
else
|
||||
{
|
||||
auto elem = iter->second;
|
||||
if(elem->ID==Obj::RANDOM_TOWN)
|
||||
{
|
||||
randomizeObject(elem.get()); //we have to randomize the castle first
|
||||
faction = elem->subID;
|
||||
}
|
||||
else if(elem->ID==Obj::TOWN)
|
||||
faction = elem->subID;
|
||||
else
|
||||
logGlobal->errorStream() << "Map object must be town: " << info->instanceId;
|
||||
}
|
||||
}
|
||||
else if(info->asCastle)
|
||||
{
|
||||
|
||||
for(auto & elem : map->objects)
|
||||
{
|
||||
if(!elem)
|
||||
@ -534,12 +555,16 @@ std::pair<Obj,int> CGameState::pickObject (CGObjectInstance *obj)
|
||||
}
|
||||
else
|
||||
{
|
||||
while(!(info->castles[0]&(1<<faction)))
|
||||
{
|
||||
if((faction>7) && (info->castles[1]&(1<<(faction-8))))
|
||||
break;
|
||||
faction = getRandomGenerator().nextInt(GameConstants::F_NUMBER - 1);
|
||||
}
|
||||
std::set<int> temp;
|
||||
|
||||
for(int i = 0; i < info->allowedFactions.size(); i++)
|
||||
if(info->allowedFactions[i])
|
||||
temp.insert(i);
|
||||
|
||||
if(temp.empty())
|
||||
logGlobal->error("Random faction selection failed. Nothing is allowed. Fall back to random.");
|
||||
else
|
||||
faction = *RandomGeneratorUtil::nextItem(temp, getRandomGenerator());
|
||||
}
|
||||
}
|
||||
else // castle alignment fixed
|
||||
@ -1119,7 +1144,7 @@ void CGameState::placeCampaignHeroes()
|
||||
|
||||
hero->subID = heroTypeId;
|
||||
hero->portrait = hero->subID;
|
||||
map->getEditManager()->insertObject(hero, hero->pos);
|
||||
map->getEditManager()->insertObject(hero);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1127,10 +1152,11 @@ void CGameState::placeCampaignHeroes()
|
||||
|
||||
void CGameState::placeStartingHero(PlayerColor playerColor, HeroTypeID heroTypeId, int3 townPos)
|
||||
{
|
||||
townPos.x += 1;
|
||||
townPos.x -= 2; //FIXME: use actual visitable offset of town
|
||||
|
||||
CGHeroInstance * hero = static_cast<CGHeroInstance*>(createObject(Obj::HERO, heroTypeId.getNum(), townPos, playerColor));
|
||||
map->getEditManager()->insertObject(hero, townPos);
|
||||
CGObjectInstance * hero = createObject(Obj::HERO, heroTypeId.getNum(), townPos, playerColor);
|
||||
hero->pos += hero->getVisitableOffset();
|
||||
map->getEditManager()->insertObject(hero);
|
||||
}
|
||||
|
||||
CGameState::CrossoverHeroesList CGameState::getCrossoverHeroesFromPreviousScenarios() const
|
||||
@ -1651,7 +1677,7 @@ void CGameState::initTowns()
|
||||
PlayerInfo & pi = map->players[owner->color.getNum()];
|
||||
|
||||
if (owner->human && //human-owned
|
||||
map->towns[g]->pos == pi.posOfMainTown + int3(2, 0, 0))
|
||||
map->towns[g]->pos == pi.posOfMainTown)
|
||||
{
|
||||
map->towns[g]->builtBuildings.insert(
|
||||
CBuildingHandler::campToERMU(chosenBonus->info1, map->towns[g]->subID, map->towns[g]->builtBuildings));
|
||||
@ -2351,9 +2377,28 @@ bool CGameState::checkForVictory(PlayerColor player, const EventCondition & cond
|
||||
{
|
||||
return condition.value; // just convert to bool
|
||||
}
|
||||
case EventCondition::HAVE_0:
|
||||
{
|
||||
logGlobal->debug("Not implemented event condition type: %d", (int)condition.condition);
|
||||
//TODO: support new condition format
|
||||
return false;
|
||||
}
|
||||
case EventCondition::HAVE_BUILDING_0:
|
||||
{
|
||||
logGlobal->debug("Not implemented event condition type: %d", (int)condition.condition);
|
||||
//TODO: support new condition format
|
||||
return false;
|
||||
}
|
||||
case EventCondition::DESTROY_0:
|
||||
{
|
||||
logGlobal->debug("Not implemented event condition type: %d", (int)condition.condition);
|
||||
//TODO: support new condition format
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
logGlobal->error("Invalid event condition type: %d", (int)condition.condition);
|
||||
return false;
|
||||
}
|
||||
assert(0);
|
||||
return false;
|
||||
}
|
||||
|
||||
PlayerColor CGameState::checkForStandardWin() const
|
||||
@ -3126,7 +3171,7 @@ DuelParameters DuelParameters::fromJSON(const std::string &fname)
|
||||
i++;
|
||||
}
|
||||
|
||||
if(n["heroid"].getType() == JsonNode::DATA_FLOAT)
|
||||
if(n["heroid"].isNumber())
|
||||
ss.heroId = n["heroid"].Float();
|
||||
else
|
||||
ss.heroId = -1;
|
||||
@ -3169,7 +3214,7 @@ DuelParameters DuelParameters::fromJSON(const std::string &fname)
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(n.getType() == JsonNode::DATA_FLOAT);
|
||||
assert(n.isNumber());
|
||||
oi->ID = 21;
|
||||
oi->pos = n.Float();
|
||||
}
|
||||
@ -3183,7 +3228,7 @@ DuelParameters DuelParameters::fromJSON(const std::string &fname)
|
||||
cc.id = n["id"].Float();
|
||||
|
||||
#define retrieve(name) \
|
||||
if(n[ #name ].getType() == JsonNode::DATA_FLOAT)\
|
||||
if(n[ #name ].isNumber())\
|
||||
cc.name = n[ #name ].Float(); \
|
||||
else \
|
||||
cc.name = -1;
|
||||
|
@ -281,6 +281,7 @@ CHeroHandler::CHeroHandler()
|
||||
for (int i = 0; i < GameConstants::SKILL_QUANTITY; ++i)
|
||||
{
|
||||
VLC->modh->identifiers.registerObject("core", "skill", NSecondarySkill::names[i], i);
|
||||
VLC->modh->identifiers.registerObject("core", "secondarySkill", NSecondarySkill::names[i], i);
|
||||
}
|
||||
loadObstacles();
|
||||
loadTerrains();
|
||||
@ -542,7 +543,7 @@ void CHeroHandler::loadObject(std::string scope, std::string name, const JsonNod
|
||||
{
|
||||
auto object = loadFromJson(data, normalizeIdentifier(scope, "core", name));
|
||||
object->ID = HeroTypeID(heroes.size());
|
||||
object->imageIndex = heroes.size() + 30; // 2 special frames + some extra portraits
|
||||
object->imageIndex = heroes.size() + GameConstants::HERO_PORTRAIT_SHIFT; // 2 special frames + some extra portraits
|
||||
|
||||
heroes.push_back(object);
|
||||
|
||||
|
@ -181,6 +181,20 @@ boost::optional<si32> CIdentifierStorage::getIdentifier(const JsonNode & name, b
|
||||
return boost::optional<si32>();
|
||||
}
|
||||
|
||||
boost::optional<si32> CIdentifierStorage::getIdentifier(std::string scope, std::string fullName, bool silent)
|
||||
{
|
||||
auto pair = splitString(fullName, ':'); // remoteScope:<type.name>
|
||||
auto pair2 = splitString(pair.second, '.'); // type.name
|
||||
auto idList = getPossibleIdentifiers(ObjectCallback(scope, pair.first, pair2.first, pair2.second, std::function<void(si32)>(), silent));
|
||||
|
||||
if (idList.size() == 1)
|
||||
return idList.front().id;
|
||||
if (!silent)
|
||||
logGlobal->errorStream() << "Failed to resolve identifier " << fullName << " of type " << pair2.first << " from mod " << scope;
|
||||
|
||||
return boost::optional<si32>();
|
||||
}
|
||||
|
||||
void CIdentifierStorage::registerObject(std::string scope, std::string type, std::string name, si32 identifier)
|
||||
{
|
||||
ObjectData data;
|
||||
@ -387,6 +401,12 @@ bool CContentHandler::ContentTypeHandler::loadMod(std::string modName, bool vali
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
void CContentHandler::ContentTypeHandler::loadCustom()
|
||||
{
|
||||
handler->loadCustom();
|
||||
}
|
||||
|
||||
void CContentHandler::ContentTypeHandler::afterLoadFinalization()
|
||||
{
|
||||
handler->afterLoadFinalization();
|
||||
@ -426,6 +446,14 @@ bool CContentHandler::loadMod(std::string modName, bool validate)
|
||||
return result;
|
||||
}
|
||||
|
||||
void CContentHandler::loadCustom()
|
||||
{
|
||||
for(auto & handler : handlers)
|
||||
{
|
||||
handler.second.loadCustom();
|
||||
}
|
||||
}
|
||||
|
||||
void CContentHandler::afterLoadFinalization()
|
||||
{
|
||||
for(auto & handler : handlers)
|
||||
@ -574,8 +602,10 @@ CModHandler::CModHandler()
|
||||
}
|
||||
|
||||
for(int i=0; i<GameConstants::PRIMARY_SKILLS; ++i)
|
||||
{
|
||||
identifiers.registerObject("core", "primSkill", PrimarySkill::names[i], i);
|
||||
|
||||
identifiers.registerObject("core", "primarySkill", PrimarySkill::names[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
CModHandler::~CModHandler()
|
||||
@ -918,6 +948,8 @@ void CModHandler::load()
|
||||
for(const TModID & modName : activeMods)
|
||||
content.load(allMods[modName]);
|
||||
|
||||
content.loadCustom();
|
||||
|
||||
logGlobal->infoStream() << "\tLoading mod data: " << timer.getDiff() << "ms";
|
||||
|
||||
VLC->creh->loadCrExpBon();
|
||||
@ -946,7 +978,7 @@ void CModHandler::afterLoad()
|
||||
file << modSettings;
|
||||
}
|
||||
|
||||
std::string CModHandler::normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier) const
|
||||
std::string CModHandler::normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier)
|
||||
{
|
||||
auto p = splitString(identifier, ':');
|
||||
|
||||
@ -956,5 +988,35 @@ std::string CModHandler::normalizeIdentifier(const std::string & scope, const st
|
||||
if(p.first == remoteScope)
|
||||
p.first.clear();
|
||||
|
||||
return p.first.empty() ? p.second : p.first +":"+p.second;
|
||||
return p.first.empty() ? p.second : p.first + ":" + p.second;
|
||||
}
|
||||
|
||||
void CModHandler::parseIdentifier(const std::string & fullIdentifier, std::string & scope, std::string & type, std::string & identifier)
|
||||
{
|
||||
auto p = splitString(fullIdentifier, ':');
|
||||
|
||||
scope = p.first;
|
||||
|
||||
auto p2 = splitString(p.second, '.');
|
||||
|
||||
if(p2.first != "")
|
||||
{
|
||||
type = p2.first;
|
||||
identifier = p2.second;
|
||||
}
|
||||
else
|
||||
{
|
||||
type = p.second;
|
||||
identifier = "";
|
||||
}
|
||||
}
|
||||
|
||||
std::string CModHandler::makeFullIdentifier(const std::string & scope, const std::string & type, const std::string & identifier)
|
||||
{
|
||||
auto p = splitString(identifier, ':');
|
||||
|
||||
if(p.first != "")
|
||||
return p.first + ":" + type + "." + p.second;//ignore type if identifier is scoped
|
||||
else
|
||||
return scope == "" ? (identifier == "" ? type : type + "." + identifier) : scope + ":" + type + "." + identifier;
|
||||
}
|
||||
|
@ -89,6 +89,7 @@ public:
|
||||
boost::optional<si32> getIdentifier(std::string scope, std::string type, std::string name, bool silent = false);
|
||||
boost::optional<si32> getIdentifier(std::string type, const JsonNode & name, bool silent = false);
|
||||
boost::optional<si32> getIdentifier(const JsonNode & name, bool silent = false);
|
||||
boost::optional<si32> getIdentifier(std::string scope, std::string fullName, bool silent = false);
|
||||
|
||||
/// registers new object
|
||||
void registerObject(std::string scope, std::string type, std::string name, si32 identifier);
|
||||
@ -132,6 +133,7 @@ class CContentHandler
|
||||
/// returns true if loading was successful
|
||||
bool preloadModData(std::string modName, std::vector<std::string> fileList, bool validate);
|
||||
bool loadMod(std::string modName, bool validate);
|
||||
void loadCustom();
|
||||
void afterLoadFinalization();
|
||||
};
|
||||
|
||||
@ -152,6 +154,8 @@ public:
|
||||
/// actually loads data in mod
|
||||
void load(CModInfo & mod);
|
||||
|
||||
void loadCustom();
|
||||
|
||||
/// all data was loaded, time for final validation / integration
|
||||
void afterLoadFinalization();
|
||||
};
|
||||
@ -297,7 +301,11 @@ public:
|
||||
CModHandler();
|
||||
virtual ~CModHandler();
|
||||
|
||||
std::string normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier) const;
|
||||
static std::string normalizeIdentifier(const std::string & scope, const std::string & remoteScope, const std::string & identifier);
|
||||
|
||||
static void parseIdentifier(const std::string & fullIdentifier, std::string & scope, std::string & type, std::string & identifier);
|
||||
|
||||
static std::string makeFullIdentifier(const std::string & scope, const std::string & type, const std::string & identifier);
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
|
@ -82,7 +82,7 @@ CFaction::~CFaction()
|
||||
CTown::CTown()
|
||||
: faction(nullptr), mageLevel(0), primaryRes(0), moatDamage(0), defaultTavernChance(0)
|
||||
{
|
||||
|
||||
faction = nullptr;
|
||||
}
|
||||
|
||||
CTown::~CTown()
|
||||
@ -100,13 +100,47 @@ std::vector<BattleHex> CTown::defaultMoatHexes()
|
||||
return moatHexes;
|
||||
}
|
||||
|
||||
std::string CTown::getFactionName() const
|
||||
{
|
||||
if(faction == nullptr)
|
||||
return "Random";
|
||||
else
|
||||
return faction->name;
|
||||
}
|
||||
|
||||
std::string CTown::getBuildingScope() const
|
||||
{
|
||||
if(faction == nullptr)
|
||||
//no faction == random faction
|
||||
return "building";
|
||||
else
|
||||
return "building." + faction->identifier;
|
||||
}
|
||||
|
||||
std::set<si32> CTown::getAllBuildings() const
|
||||
{
|
||||
std::set<si32> res;
|
||||
|
||||
for(const auto & b : buildings)
|
||||
{
|
||||
res.insert(b.first.num);
|
||||
}
|
||||
|
||||
return std::move(res);
|
||||
}
|
||||
|
||||
|
||||
CTownHandler::CTownHandler()
|
||||
{
|
||||
VLC->townh = this;
|
||||
|
||||
randomTown = new CTown();
|
||||
}
|
||||
|
||||
CTownHandler::~CTownHandler()
|
||||
{
|
||||
delete randomTown;
|
||||
|
||||
for(auto faction : factions)
|
||||
faction.dellNull();
|
||||
}
|
||||
@ -120,8 +154,6 @@ JsonNode readBuilding(CLegacyConfigParser & parser)
|
||||
for(const std::string & resID : GameConstants::RESOURCE_NAMES)
|
||||
cost[resID].Float() = parser.readNumber();
|
||||
|
||||
|
||||
|
||||
cost.Struct().erase("mithril"); // erase mithril to avoid confusing validator
|
||||
|
||||
parser.endLine();
|
||||
@ -283,28 +315,28 @@ std::vector<JsonNode> CTownHandler::loadLegacyData(size_t dataSize)
|
||||
return dest;
|
||||
}
|
||||
|
||||
void CTownHandler::loadBuildingRequirements(CTown &town, CBuilding & building, const JsonNode & source)
|
||||
void CTownHandler::loadBuildingRequirements(CBuilding * building, const JsonNode & source)
|
||||
{
|
||||
if (source.isNull())
|
||||
return;
|
||||
|
||||
BuildingRequirementsHelper hlp;
|
||||
hlp.building = &building;
|
||||
hlp.faction = town.faction;
|
||||
hlp.building = building;
|
||||
hlp.town = building->town;
|
||||
hlp.json = source;
|
||||
requirementsToLoad.push_back(hlp);
|
||||
}
|
||||
|
||||
void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const JsonNode & source)
|
||||
void CTownHandler::loadBuilding(CTown * town, const std::string & stringID, const JsonNode & source)
|
||||
{
|
||||
auto ret = new CBuilding;
|
||||
auto ret = new CBuilding;
|
||||
|
||||
static const std::string modes [] = {"normal", "auto", "special", "grail"};
|
||||
|
||||
ret->mode = static_cast<CBuilding::EBuildMode>(boost::find(modes, source["mode"].String()) - modes);
|
||||
|
||||
ret->identifier = stringID;
|
||||
ret->town = &town;
|
||||
ret->town = town;
|
||||
ret->bid = BuildingID(source["id"].Float());
|
||||
ret->name = source["name"].String();
|
||||
ret->description = source["description"].String();
|
||||
@ -339,7 +371,7 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
|
||||
}
|
||||
}
|
||||
|
||||
loadBuildingRequirements(town, *ret, source["requires"]);
|
||||
loadBuildingRequirements(ret, source["requires"]);
|
||||
|
||||
if (!source["upgrades"].isNull())
|
||||
{
|
||||
@ -347,10 +379,10 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
|
||||
if(stringID == source["upgrades"].String())
|
||||
{
|
||||
throw std::runtime_error(boost::str(boost::format("Building with ID '%s' of town '%s' can't be an upgrade of the same building.") %
|
||||
stringID % town.faction->name));
|
||||
stringID % ret->town->getFactionName()));
|
||||
}
|
||||
|
||||
VLC->modh->identifiers.requestIdentifier("building." + town.faction->identifier, source["upgrades"], [=](si32 identifier)
|
||||
VLC->modh->identifiers.requestIdentifier(ret->town->getBuildingScope(), source["upgrades"], [=](si32 identifier)
|
||||
{
|
||||
ret->upgrade = BuildingID(identifier);
|
||||
});
|
||||
@ -358,13 +390,14 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
|
||||
else
|
||||
ret->upgrade = BuildingID::NONE;
|
||||
|
||||
town.buildings[ret->bid] = ret;
|
||||
VLC->modh->identifiers.registerObject(source.meta, "building." + town.faction->identifier, ret->identifier, ret->bid);
|
||||
ret->town->buildings[ret->bid] = ret;
|
||||
|
||||
VLC->modh->identifiers.registerObject(source.meta, ret->town->getBuildingScope(), ret->identifier, ret->bid);
|
||||
}
|
||||
|
||||
void CTownHandler::loadBuildings(CTown &town, const JsonNode & source)
|
||||
void CTownHandler::loadBuildings(CTown * town, const JsonNode & source)
|
||||
{
|
||||
for(auto &node : source.Struct())
|
||||
for(auto & node : source.Struct())
|
||||
{
|
||||
if (!node.second.isNull())
|
||||
{
|
||||
@ -624,7 +657,7 @@ void CTownHandler::loadTown(CTown &town, const JsonNode & source)
|
||||
town.dwellingNames.push_back (d["name"].String());
|
||||
}
|
||||
|
||||
loadBuildings(town, source["buildings"]);
|
||||
loadBuildings(&town, source["buildings"]);
|
||||
loadClientData(town,source);
|
||||
}
|
||||
|
||||
@ -756,6 +789,20 @@ void CTownHandler::loadObject(std::string scope, std::string name, const JsonNod
|
||||
VLC->modh->identifiers.registerObject(scope, "faction", name, object->index);
|
||||
}
|
||||
|
||||
void CTownHandler::loadRandomFaction()
|
||||
{
|
||||
static const ResourceID randomFactionPath("config/factions/random.json");
|
||||
|
||||
JsonNode randomFactionJson(randomFactionPath);
|
||||
randomFactionJson.setMeta("core", true);
|
||||
loadBuildings(randomTown, randomFactionJson["random"]["town"]["buildings"]);
|
||||
}
|
||||
|
||||
void CTownHandler::loadCustom()
|
||||
{
|
||||
loadRandomFaction();
|
||||
}
|
||||
|
||||
void CTownHandler::afterLoadFinalization()
|
||||
{
|
||||
initializeRequirements();
|
||||
@ -773,7 +820,7 @@ void CTownHandler::initializeRequirements()
|
||||
logGlobal->warnStream() << "Unexpected length of town buildings requirements: " << node.Vector().size();
|
||||
logGlobal->warnStream() << "Entry contains " << node;
|
||||
}
|
||||
return BuildingID(VLC->modh->identifiers.getIdentifier("building." + requirement.faction->identifier, node.Vector()[0]).get());
|
||||
return BuildingID(VLC->modh->identifiers.getIdentifier(requirement.town->getBuildingScope(), node.Vector()[0]).get());
|
||||
});
|
||||
}
|
||||
requirementsToLoad.clear();
|
||||
@ -788,6 +835,7 @@ std::vector<bool> CTownHandler::getDefaultAllowed() const
|
||||
}
|
||||
return allowedFactions;
|
||||
}
|
||||
|
||||
std::set<TFaction> CTownHandler::getAllowedFactions(bool withTown /*=true*/) const
|
||||
{
|
||||
std::set<TFaction> allowedFactions;
|
||||
|
@ -143,6 +143,10 @@ public:
|
||||
// TODO: remove once save and mod compatability not needed
|
||||
static std::vector<BattleHex> defaultMoatHexes();
|
||||
|
||||
std::string getFactionName() const;
|
||||
std::string getBuildingScope() const;
|
||||
std::set<si32> getAllBuildings() const;
|
||||
|
||||
CFaction * faction;
|
||||
|
||||
std::vector<std::string> names; //names of the town instances
|
||||
@ -222,16 +226,6 @@ public:
|
||||
moatHexes = defaultMoatHexes();
|
||||
}
|
||||
h & defaultTavernChance;
|
||||
|
||||
auto findNull = [](const std::pair<BuildingID, ConstTransitivePtr<CBuilding>> &building)
|
||||
{ return building.second == nullptr; };
|
||||
|
||||
//Fix #1444 corrupted save
|
||||
while(auto badElem = vstd::tryFindIf(buildings, findNull))
|
||||
{
|
||||
logGlobal->errorStream() << "#1444-like bug encountered in CTown::serialize, fixing buildings list by removing bogus entry " << badElem->first << " from " << faction->name;
|
||||
buildings.erase(badElem->first);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -241,16 +235,16 @@ class DLL_LINKAGE CTownHandler : public IHandlerBase
|
||||
{
|
||||
JsonNode json;
|
||||
CBuilding * building;
|
||||
CFaction * faction;
|
||||
CTown * town;
|
||||
};
|
||||
|
||||
std::vector<BuildingRequirementsHelper> requirementsToLoad;
|
||||
void initializeRequirements();
|
||||
|
||||
/// loads CBuilding's into town
|
||||
void loadBuildingRequirements(CTown &town, CBuilding & building, const JsonNode & source);
|
||||
void loadBuilding(CTown &town, const std::string & stringID, const JsonNode & source);
|
||||
void loadBuildings(CTown &town, const JsonNode & source);
|
||||
void loadBuildingRequirements(CBuilding * building, const JsonNode & source);
|
||||
void loadBuilding(CTown * town, const std::string & stringID, const JsonNode & source);
|
||||
void loadBuildings(CTown * town, const JsonNode & source);
|
||||
|
||||
/// loads CStructure's into town
|
||||
void loadStructure(CTown &town, const std::string & stringID, const JsonNode & source);
|
||||
@ -268,9 +262,12 @@ class DLL_LINKAGE CTownHandler : public IHandlerBase
|
||||
|
||||
CFaction * loadFromJson(const JsonNode & data, const std::string & identifier);
|
||||
|
||||
void loadRandomFaction();
|
||||
public:
|
||||
std::vector<ConstTransitivePtr<CFaction> > factions;
|
||||
|
||||
CTown * randomTown;
|
||||
|
||||
CTownHandler(); //c-tor, set pointer in VLC to this
|
||||
~CTownHandler();
|
||||
|
||||
@ -279,6 +276,7 @@ public:
|
||||
void loadObject(std::string scope, std::string name, const JsonNode & data) override;
|
||||
void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override;
|
||||
|
||||
void loadCustom() override;
|
||||
void afterLoadFinalization() override;
|
||||
|
||||
std::vector<bool> getDefaultAllowed() const override;
|
||||
@ -293,5 +291,14 @@ public:
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
h & factions;
|
||||
|
||||
if(version >= 770)
|
||||
{
|
||||
h & randomTown;
|
||||
}
|
||||
else if(!h.saving)
|
||||
{
|
||||
loadRandomFaction();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -54,11 +54,14 @@ namespace GameConstants
|
||||
const int CREATURES_COUNT = 197;
|
||||
|
||||
const ui32 BASE_MOVEMENT_COST = 100; //default cost for non-diagonal movement
|
||||
|
||||
const int HERO_PORTRAIT_SHIFT = 30;// 2 special frames + some extra portraits
|
||||
}
|
||||
|
||||
class CArtifact;
|
||||
class CArtifactInstance;
|
||||
class CCreature;
|
||||
class CHero;
|
||||
class CSpell;
|
||||
class CGameInfoCallback;
|
||||
class CNonConstInfoCallback;
|
||||
@ -203,7 +206,6 @@ class ArtifactInstanceID : public BaseForID<ArtifactInstanceID, si32>
|
||||
friend class CNonConstInfoCallback;
|
||||
};
|
||||
|
||||
|
||||
class QueryID : public BaseForID<QueryID, si32>
|
||||
{
|
||||
INSTID_LIKE_CLASS_COMMON(QueryID, si32)
|
||||
@ -223,7 +225,6 @@ class ObjectInstanceID : public BaseForID<ObjectInstanceID, si32>
|
||||
friend class CNonConstInfoCallback;
|
||||
};
|
||||
|
||||
|
||||
class HeroTypeID : public BaseForID<HeroTypeID, si32>
|
||||
{
|
||||
INSTID_LIKE_CLASS_COMMON(HeroTypeID, si32)
|
||||
@ -1067,6 +1068,26 @@ enum class ESpellSchool: ui8
|
||||
EARTH = 3
|
||||
};
|
||||
|
||||
enum class EMetaclass: ui8
|
||||
{
|
||||
INVALID = 0,
|
||||
ARTIFACT,
|
||||
CREATURE,
|
||||
FACTION,
|
||||
EXPERIENCE,
|
||||
HERO,
|
||||
HEROCLASS,
|
||||
LUCK,
|
||||
MANA,
|
||||
MORALE,
|
||||
MOVEMENT,
|
||||
OBJECT,
|
||||
PRIMARY_SKILL,
|
||||
SECONDARY_SKILL,
|
||||
SPELL,
|
||||
RESOURCE
|
||||
};
|
||||
|
||||
// Typedef declarations
|
||||
typedef ui8 TFaction;
|
||||
typedef si64 TExpType;
|
||||
|
@ -51,7 +51,7 @@ public:
|
||||
virtual void setBlockVis(ObjectInstanceID objid, bool bv)=0;
|
||||
virtual void setOwner(const CGObjectInstance * objid, PlayerColor owner)=0;
|
||||
virtual void changePrimSkill(const CGHeroInstance * hero, PrimarySkill::PrimarySkill which, si64 val, bool abs=false)=0;
|
||||
virtual void changeSecSkill(const CGHeroInstance * hero, SecondarySkill which, int val, bool abs=false)=0;
|
||||
virtual void changeSecSkill(const CGHeroInstance * hero, SecondarySkill which, int val, bool abs=false)=0;
|
||||
virtual void showBlockingDialog(BlockingDialog *iw) =0;
|
||||
virtual void showGarrisonDialog(ObjectInstanceID upobj, ObjectInstanceID hid, bool removableUnits) =0; //cb will be called when player closes garrison window
|
||||
virtual void showTeleportDialog(TeleportDialog *iw) =0;
|
||||
@ -94,7 +94,6 @@ public:
|
||||
virtual void changeObjPos(ObjectInstanceID objid, int3 newPos, ui8 flags)=0;
|
||||
virtual void sendAndApply(CPackForClient * info)=0;
|
||||
virtual void heroExchange(ObjectInstanceID hero1, ObjectInstanceID hero2)=0; //when two heroes meet on adventure map
|
||||
virtual void addQuest(int player, QuestInfo & quest){};
|
||||
virtual void changeFogOfWar(int3 center, ui32 radius, PlayerColor player, bool hide) = 0;
|
||||
virtual void changeFogOfWar(std::unordered_set<int3, ShashInt3> &tiles, PlayerColor player, bool hide) = 0;
|
||||
};
|
||||
|
@ -39,6 +39,9 @@ public:
|
||||
/// allows handlers to alter object configuration before validation and actual load
|
||||
virtual void beforeValidate(JsonNode & object){};
|
||||
|
||||
/// allows handler to load some custom internal data before identifier finalization
|
||||
virtual void loadCustom(){};
|
||||
|
||||
/// allows handler to do post-loading step for validation or integration of loaded data
|
||||
virtual void afterLoadFinalization(){};
|
||||
|
||||
|
@ -60,17 +60,17 @@ void JsonWriter::writeEntry(JsonVector::const_iterator entry)
|
||||
|
||||
void JsonWriter::writeString(const std::string &string)
|
||||
{
|
||||
static const std::string escaped = "\"\\\b\f\n\r\t";
|
||||
|
||||
static const std::array<char, 7> escaped_code = {'\"', '\\', 'b', 'f', 'n', 'r', 't'};
|
||||
|
||||
static const std::string escaped = "\"\\\b\f\n\r\t/";
|
||||
|
||||
static const std::array<char, 8> escaped_code = {'\"', '\\', 'b', 'f', 'n', 'r', 't', '/'};
|
||||
|
||||
out <<'\"';
|
||||
size_t pos=0, start=0;
|
||||
for (; pos<string.size(); pos++)
|
||||
{
|
||||
//we need to check if special character was been already escaped
|
||||
if((string[pos] == '\\')
|
||||
&& (pos+1 < string.size())
|
||||
//we need to check if special character was been already escaped
|
||||
if((string[pos] == '\\')
|
||||
&& (pos+1 < string.size())
|
||||
&& (std::find(escaped_code.begin(), escaped_code.end(), string[pos+1]) != escaped_code.end()) )
|
||||
{
|
||||
pos++; //write unchanged, next simbol also checked
|
||||
@ -84,7 +84,7 @@ void JsonWriter::writeString(const std::string &string)
|
||||
out.write(string.data()+start, pos - start);
|
||||
out << '\\' << escaped_code[escapedPos];
|
||||
start = pos+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -120,6 +120,8 @@ void JsonWriter::writeNode(const JsonNode &node)
|
||||
out << "{" << "\n";
|
||||
writeContainer(node.Struct().begin(), node.Struct().end());
|
||||
out << prefix << "}";
|
||||
break; case JsonNode::DATA_INTEGER:
|
||||
out << node.Integer();
|
||||
}
|
||||
}
|
||||
|
||||
@ -252,6 +254,7 @@ bool JsonParser::extractEscaping(std::string &str)
|
||||
break; case 'n': str += '\n';
|
||||
break; case 'r': str += '\r';
|
||||
break; case 't': str += '\t';
|
||||
break; case '/': str += '/';
|
||||
break; default: return error("Unknown escape sequence!", true);
|
||||
};
|
||||
return true;
|
||||
@ -458,6 +461,8 @@ bool JsonParser::extractFloat(JsonNode &node)
|
||||
assert(input[pos] == '-' || (input[pos] >= '0' && input[pos] <= '9'));
|
||||
bool negative=false;
|
||||
double result=0;
|
||||
si64 integerPart = 0;
|
||||
bool isFloat = false;
|
||||
|
||||
if (input[pos] == '-')
|
||||
{
|
||||
@ -471,13 +476,16 @@ bool JsonParser::extractFloat(JsonNode &node)
|
||||
//Extract integer part
|
||||
while (input[pos] >= '0' && input[pos] <= '9')
|
||||
{
|
||||
result = result*10+(input[pos]-'0');
|
||||
integerPart = integerPart*10+(input[pos]-'0');
|
||||
pos++;
|
||||
}
|
||||
|
||||
result = integerPart;
|
||||
|
||||
if (input[pos] == '.')
|
||||
{
|
||||
//extract fractional part
|
||||
isFloat = true;
|
||||
pos++;
|
||||
double fractMult = 0.1;
|
||||
if (input[pos] < '0' || input[pos] > '9')
|
||||
@ -490,12 +498,57 @@ bool JsonParser::extractFloat(JsonNode &node)
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
//TODO: exponential part
|
||||
if (negative)
|
||||
result = -result;
|
||||
|
||||
node.setType(JsonNode::DATA_FLOAT);
|
||||
node.Float() = result;
|
||||
if(input[pos] == 'e')
|
||||
{
|
||||
//extract exponential part
|
||||
pos++;
|
||||
isFloat = true;
|
||||
bool powerNegative = false;
|
||||
double power = 0;
|
||||
|
||||
if(input[pos] == '-')
|
||||
{
|
||||
pos++;
|
||||
powerNegative = true;
|
||||
}
|
||||
else if(input[pos] == '+')
|
||||
{
|
||||
pos++;
|
||||
}
|
||||
|
||||
if (input[pos] < '0' || input[pos] > '9')
|
||||
return error("Exponential part expected!");
|
||||
|
||||
while (input[pos] >= '0' && input[pos] <= '9')
|
||||
{
|
||||
power = power*10 + (input[pos]-'0');
|
||||
pos++;
|
||||
}
|
||||
|
||||
if(powerNegative)
|
||||
power = -power;
|
||||
|
||||
result *= std::pow(10, power);
|
||||
}
|
||||
|
||||
if(isFloat)
|
||||
{
|
||||
if(negative)
|
||||
result = -result;
|
||||
|
||||
node.setType(JsonNode::DATA_FLOAT);
|
||||
node.Float() = result;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(negative)
|
||||
integerPart = -integerPart;
|
||||
|
||||
node.setType(JsonNode::DATA_INTEGER);
|
||||
node.Integer() = integerPart;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -513,13 +566,15 @@ bool JsonParser::error(const std::string &message, bool warning)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//TODO: integer support
|
||||
|
||||
static const std::unordered_map<std::string, JsonNode::JsonType> stringToType =
|
||||
{
|
||||
{"null", JsonNode::DATA_NULL},
|
||||
{"null", JsonNode::DATA_NULL},
|
||||
{"boolean", JsonNode::DATA_BOOL},
|
||||
{"number", JsonNode::DATA_FLOAT},
|
||||
{"number", JsonNode::DATA_FLOAT},
|
||||
{"string", JsonNode::DATA_STRING},
|
||||
{"array", JsonNode::DATA_VECTOR},
|
||||
{"array", JsonNode::DATA_VECTOR},
|
||||
{"object", JsonNode::DATA_STRUCT}
|
||||
};
|
||||
|
||||
@ -612,8 +667,13 @@ namespace
|
||||
{
|
||||
return validator.makeErrorMessage("Unknown type in schema:" + typeName);
|
||||
}
|
||||
|
||||
|
||||
JsonNode::JsonType type = it->second;
|
||||
|
||||
//FIXME: hack for integer values
|
||||
if(data.isNumber() && type == JsonNode::DATA_FLOAT)
|
||||
return "";
|
||||
|
||||
if(type != data.getType() && data.getType() != JsonNode::DATA_NULL)
|
||||
return validator.makeErrorMessage("Type mismatch! Expected " + schema.String());
|
||||
return "";
|
||||
@ -969,7 +1029,7 @@ namespace
|
||||
return testAnimation(node.String().substr(0, node.String().find(':')), node.meta);
|
||||
return "Image file \"" + node.String() + "\" was not found";
|
||||
}
|
||||
|
||||
|
||||
std::string videoFile(const JsonNode & node)
|
||||
{
|
||||
TEST_FILE(node.meta, "Video/", node.String(), EResType::VIDEO);
|
||||
@ -1128,7 +1188,9 @@ namespace Validation
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case JsonNode::DATA_FLOAT: return numberFields;
|
||||
case JsonNode::DATA_FLOAT:
|
||||
case JsonNode::DATA_INTEGER:
|
||||
return numberFields;
|
||||
case JsonNode::DATA_STRING: return stringFields;
|
||||
case JsonNode::DATA_VECTOR: return vectorFields;
|
||||
case JsonNode::DATA_STRUCT: return structFields;
|
||||
|
@ -83,11 +83,12 @@ JsonNode::JsonNode(const JsonNode ©):
|
||||
switch(type)
|
||||
{
|
||||
break; case DATA_NULL:
|
||||
break; case DATA_BOOL: Bool() = copy.Bool();
|
||||
break; case DATA_FLOAT: Float() = copy.Float();
|
||||
break; case DATA_STRING: String() = copy.String();
|
||||
break; case DATA_VECTOR: Vector() = copy.Vector();
|
||||
break; case DATA_STRUCT: Struct() = copy.Struct();
|
||||
break; case DATA_BOOL: Bool() = copy.Bool();
|
||||
break; case DATA_FLOAT: Float() = copy.Float();
|
||||
break; case DATA_STRING: String() = copy.String();
|
||||
break; case DATA_VECTOR: Vector() = copy.Vector();
|
||||
break; case DATA_STRUCT: Struct() = copy.Struct();
|
||||
break; case DATA_INTEGER:Integer() = copy.Integer();
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,6 +123,7 @@ bool JsonNode::operator == (const JsonNode &other) const
|
||||
case DATA_STRING: return String() == other.String();
|
||||
case DATA_VECTOR: return Vector() == other.Vector();
|
||||
case DATA_STRUCT: return Struct() == other.Struct();
|
||||
case DATA_INTEGER:return Integer()== other.Integer();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@ -167,6 +169,22 @@ void JsonNode::setType(JsonType Type)
|
||||
if (type == Type)
|
||||
return;
|
||||
|
||||
//float<->int conversion
|
||||
if(type == DATA_FLOAT && Type == DATA_INTEGER)
|
||||
{
|
||||
si64 converted = data.Float;
|
||||
type = Type;
|
||||
data.Integer = converted;
|
||||
return;
|
||||
}
|
||||
else if(type == DATA_INTEGER && Type == DATA_FLOAT)
|
||||
{
|
||||
double converted = data.Integer;
|
||||
type = Type;
|
||||
data.Float = converted;
|
||||
return;
|
||||
}
|
||||
|
||||
//Reset node to nullptr
|
||||
if (Type != DATA_NULL)
|
||||
setType(DATA_NULL);
|
||||
@ -189,6 +207,7 @@ void JsonNode::setType(JsonType Type)
|
||||
break; case DATA_STRING: data.String = new std::string();
|
||||
break; case DATA_VECTOR: data.Vector = new JsonVector();
|
||||
break; case DATA_STRUCT: data.Struct = new JsonMap();
|
||||
break; case DATA_INTEGER: data.Integer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -197,6 +216,11 @@ bool JsonNode::isNull() const
|
||||
return type == DATA_NULL;
|
||||
}
|
||||
|
||||
bool JsonNode::isNumber() const
|
||||
{
|
||||
return type == DATA_INTEGER || type == DATA_FLOAT;
|
||||
}
|
||||
|
||||
void JsonNode::clear()
|
||||
{
|
||||
setType(DATA_NULL);
|
||||
@ -214,6 +238,12 @@ double & JsonNode::Float()
|
||||
return data.Float;
|
||||
}
|
||||
|
||||
si64 & JsonNode::Integer()
|
||||
{
|
||||
setType(DATA_INTEGER);
|
||||
return data.Integer;
|
||||
}
|
||||
|
||||
std::string & JsonNode::String()
|
||||
{
|
||||
setType(DATA_STRING);
|
||||
@ -233,7 +263,7 @@ JsonMap & JsonNode::Struct()
|
||||
}
|
||||
|
||||
const bool boolDefault = false;
|
||||
const bool & JsonNode::Bool() const
|
||||
bool JsonNode::Bool() const
|
||||
{
|
||||
if (type == DATA_NULL)
|
||||
return boolDefault;
|
||||
@ -242,14 +272,29 @@ const bool & JsonNode::Bool() const
|
||||
}
|
||||
|
||||
const double floatDefault = 0;
|
||||
const double & JsonNode::Float() const
|
||||
double JsonNode::Float() const
|
||||
{
|
||||
if (type == DATA_NULL)
|
||||
if(type == DATA_NULL)
|
||||
return floatDefault;
|
||||
else if(type == DATA_INTEGER)
|
||||
return data.Integer;
|
||||
|
||||
assert(type == DATA_FLOAT);
|
||||
return data.Float;
|
||||
}
|
||||
|
||||
const si64 integetDefault = 0;
|
||||
si64 JsonNode::Integer() const
|
||||
{
|
||||
if(type == DATA_NULL)
|
||||
return integetDefault;
|
||||
else if(type == DATA_FLOAT)
|
||||
return data.Float;
|
||||
|
||||
assert(type == DATA_INTEGER);
|
||||
return data.Integer;
|
||||
}
|
||||
|
||||
const std::string stringDefault = std::string();
|
||||
const std::string & JsonNode::String() const
|
||||
{
|
||||
@ -385,6 +430,9 @@ void JsonUtils::resolveIdentifier(si32 &var, const JsonNode &node, std::string n
|
||||
{
|
||||
switch (value.getType())
|
||||
{
|
||||
case JsonNode::DATA_INTEGER:
|
||||
var = value.Integer();
|
||||
break;
|
||||
case JsonNode::DATA_FLOAT:
|
||||
var = value.Float();
|
||||
break;
|
||||
@ -404,6 +452,9 @@ void JsonUtils::resolveIdentifier(const JsonNode &node, si32 &var)
|
||||
{
|
||||
switch (node.getType())
|
||||
{
|
||||
case JsonNode::DATA_INTEGER:
|
||||
var = node.Integer();
|
||||
break;
|
||||
case JsonNode::DATA_FLOAT:
|
||||
var = node.Float();
|
||||
break;
|
||||
@ -738,6 +789,7 @@ void JsonUtils::merge(JsonNode & dest, JsonNode & source)
|
||||
}
|
||||
case JsonNode::DATA_BOOL:
|
||||
case JsonNode::DATA_FLOAT:
|
||||
case JsonNode::DATA_INTEGER:
|
||||
case JsonNode::DATA_STRING:
|
||||
case JsonNode::DATA_VECTOR:
|
||||
{
|
||||
|
@ -29,7 +29,8 @@ public:
|
||||
DATA_FLOAT,
|
||||
DATA_STRING,
|
||||
DATA_VECTOR,
|
||||
DATA_STRUCT
|
||||
DATA_STRUCT,
|
||||
DATA_INTEGER
|
||||
};
|
||||
|
||||
private:
|
||||
@ -40,6 +41,7 @@ private:
|
||||
std::string* String;
|
||||
JsonVector* Vector;
|
||||
JsonMap* Struct;
|
||||
si64 Integer;
|
||||
};
|
||||
|
||||
JsonType type;
|
||||
@ -75,19 +77,24 @@ public:
|
||||
JsonType getType() const;
|
||||
|
||||
bool isNull() const;
|
||||
bool isNumber() const;
|
||||
/// removes all data from node and sets type to null
|
||||
void clear();
|
||||
|
||||
/// non-const accessors, node will change type on type mismatch
|
||||
bool & Bool();
|
||||
double & Float();
|
||||
si64 & Integer();
|
||||
std::string & String();
|
||||
JsonVector & Vector();
|
||||
JsonMap & Struct();
|
||||
|
||||
/// const accessors, will cause assertion failure on type mismatch
|
||||
const bool & Bool() const;
|
||||
const double & Float() const;
|
||||
bool Bool() const;
|
||||
///float and integer allowed
|
||||
double Float() const;
|
||||
///only integer allowed
|
||||
si64 Integer() const;
|
||||
const std::string & String() const;
|
||||
const JsonVector & Vector() const;
|
||||
const JsonMap & Struct() const;
|
||||
@ -118,6 +125,11 @@ public:
|
||||
break; case DATA_VECTOR: h & data.Vector;
|
||||
break; case DATA_STRUCT: h & data.Struct;
|
||||
}
|
||||
if(version >= 770)
|
||||
{
|
||||
if(type == DATA_INTEGER)
|
||||
h & data.Integer;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -451,12 +451,12 @@ DLL_LINKAGE void RemoveObject::applyGs(CGameState *gs)
|
||||
{
|
||||
if (cond.object == obj)
|
||||
{
|
||||
if (cond.condition == EventCondition::DESTROY)
|
||||
if (cond.condition == EventCondition::DESTROY || cond.condition == EventCondition::DESTROY_0)
|
||||
{
|
||||
cond.condition = EventCondition::CONST_VALUE;
|
||||
cond.value = 1; // destroyed object, from now on always fulfilled
|
||||
}
|
||||
if (cond.condition == EventCondition::CONTROL)
|
||||
else if (cond.condition == EventCondition::CONTROL || cond.condition == EventCondition::HAVE_0)
|
||||
{
|
||||
cond.condition = EventCondition::CONST_VALUE;
|
||||
cond.value = 0; // destroyed object, from now on can not be fulfilled
|
||||
@ -1629,7 +1629,7 @@ DLL_LINKAGE void StacksHealedOrResurrected::applyGs(CGameState *gs)
|
||||
if(canOverheal) //for example WoG ghost soul steal ability allows getting more units than before battle
|
||||
res = elem.healedHP / changedStack->MaxHealth();
|
||||
else
|
||||
res = std::min(elem.healedHP / changedStack->MaxHealth() , changedStack->baseAmount - changedStack->count);
|
||||
res = std::min(elem.healedHP / changedStack->MaxHealth() , changedStack->baseAmount - changedStack->count);
|
||||
changedStack->count += res;
|
||||
if(elem.lowLevelResurrection)
|
||||
changedStack->resurrected += res;
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "ResourceSet.h"
|
||||
#include "StringConstants.h"
|
||||
#include "JsonNode.h"
|
||||
#include "serializer/JsonSerializeFormat.h"
|
||||
|
||||
Res::ResourceSet::ResourceSet()
|
||||
{
|
||||
@ -25,6 +26,19 @@ Res::ResourceSet::ResourceSet(const JsonNode & node)
|
||||
push_back(node[name].Float());
|
||||
}
|
||||
|
||||
void Res::ResourceSet::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName)
|
||||
{
|
||||
if(!handler.saving)
|
||||
resize(GameConstants::RESOURCE_QUANTITY, 0);
|
||||
if(handler.saving && !nonZero())
|
||||
return;
|
||||
auto s = handler.enterStruct(fieldName);
|
||||
|
||||
//TODO: add proper support for mithril to map format
|
||||
for(int idx = 0; idx < GameConstants::RESOURCE_QUANTITY - 1; idx ++)
|
||||
handler.serializeInt(GameConstants::RESOURCE_NAMES[idx], this->operator[](idx), 0);
|
||||
}
|
||||
|
||||
bool Res::ResourceSet::nonZero() const
|
||||
{
|
||||
for(auto & elem : *this)
|
||||
|
@ -14,6 +14,7 @@ typedef si32 TResource;
|
||||
typedef si64 TResourceCap; //to avoid overflow when adding integers. Signed values are easier to control.
|
||||
|
||||
class JsonNode;
|
||||
class JsonSerializeFormat;
|
||||
|
||||
namespace Res
|
||||
{
|
||||
@ -124,6 +125,8 @@ namespace Res
|
||||
h & static_cast<std::vector<int>&>(*this);
|
||||
}
|
||||
|
||||
DLL_LINKAGE void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName);
|
||||
|
||||
DLL_LINKAGE void amax(const TResourceCap &val); //performs vstd::amax on each element
|
||||
DLL_LINKAGE void amin(const TResourceCap &val); //performs vstd::amin on each element
|
||||
DLL_LINKAGE void positive(); //values below 0 are set to 0 - upgrade cost can't be negative, for example
|
||||
|
@ -53,7 +53,7 @@ namespace NSecondarySkill
|
||||
"sorcery", "resistance", "firstAid"
|
||||
};
|
||||
|
||||
const std::string levels [4] =
|
||||
const std::vector<std::string> levels =
|
||||
{
|
||||
"none", "basic", "advanced", "expert"
|
||||
};
|
||||
@ -87,7 +87,7 @@ namespace ETownType
|
||||
|
||||
namespace NArtifactPosition
|
||||
{
|
||||
const std::string names [19] =
|
||||
const std::string namesHero [19] =
|
||||
{
|
||||
"head", "shoulders", "neck", "rightHand", "leftHand", "torso", //5
|
||||
"rightRing", "leftRing", "feet", //8
|
||||
@ -96,5 +96,27 @@ namespace NArtifactPosition
|
||||
"spellbook", "misc5" //18
|
||||
};
|
||||
|
||||
const std::string namesCreature[1] =
|
||||
{
|
||||
"creature1"
|
||||
};
|
||||
|
||||
const std::string namesCommander[6] =
|
||||
{
|
||||
"commander1", "commander2", "commander3", "commander4", "commander5", "commander6",
|
||||
};
|
||||
|
||||
|
||||
const std::string backpack = "backpack";
|
||||
}
|
||||
|
||||
namespace NMetaclass
|
||||
{
|
||||
const std::string names [16] =
|
||||
{
|
||||
"",
|
||||
"artifact", "creature", "faction", "experience", "hero",
|
||||
"heroClass", "luck", "mana", "morale", "movement",
|
||||
"object", "primarySkill", "secondarySkill", "spell", "resource"
|
||||
};
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "../mapping/CMap.h"
|
||||
#include "CGTownInstance.h"
|
||||
#include "../serializer/JsonSerializeFormat.h"
|
||||
#include "../StringConstants.h"
|
||||
|
||||
///helpers
|
||||
static void showInfoDialog(const PlayerColor playerID, const ui32 txtID, const ui16 soundID)
|
||||
@ -1542,47 +1543,225 @@ bool CGHeroInstance::hasVisions(const CGObjectInstance * target, const int subty
|
||||
return (distance < visionsRange) && (target->pos.z == pos.z);
|
||||
}
|
||||
|
||||
void CGHeroInstance::serializeJsonOptions(JsonSerializeFormat& handler)
|
||||
std::string CGHeroInstance::getHeroTypeName() const
|
||||
{
|
||||
serializeJsonOwner(handler);
|
||||
|
||||
if(handler.saving)
|
||||
if(ID == Obj::HERO || ID == Obj::PRISON)
|
||||
{
|
||||
if(type)
|
||||
{
|
||||
handler.serializeString("type", type->identifier);
|
||||
return type->identifier;
|
||||
}
|
||||
else
|
||||
{
|
||||
auto temp = VLC->heroh->heroes[subID]->identifier;
|
||||
handler.serializeString("type", temp);
|
||||
return VLC->heroh->heroes[subID]->identifier;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void CGHeroInstance::setHeroTypeName(const std::string & identifier)
|
||||
{
|
||||
if(ID == Obj::HERO || ID == Obj::PRISON)
|
||||
{
|
||||
auto rawId = VLC->modh->identifiers.getIdentifier("core", "hero", identifier);
|
||||
|
||||
if(rawId)
|
||||
subID = rawId.get();
|
||||
else
|
||||
subID = 0; //fallback to Orrin, throw error instead?
|
||||
}
|
||||
}
|
||||
|
||||
void CGHeroInstance::serializeCommonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
handler.serializeString("biography", biography);
|
||||
handler.serializeInt("experience", exp, 0);
|
||||
handler.serializeString("name", name);
|
||||
handler.serializeBool<ui8>("female", sex, 1, 0, 0xFF);
|
||||
|
||||
{
|
||||
const int legacyHeroes = VLC->modh->settings.data["textData"]["hero"].Integer();
|
||||
const int moddedStart = legacyHeroes + GameConstants::HERO_PORTRAIT_SHIFT;
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
if(portrait >= 0)
|
||||
{
|
||||
if(portrait < legacyHeroes || portrait >= moddedStart)
|
||||
handler.serializeId("portrait", portrait, -1, &VLC->heroh->decodeHero, &VLC->heroh->encodeHero);
|
||||
else
|
||||
handler.serializeInt("portrait", portrait, -1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const JsonNode & portraitNode = handler.getCurrent()["portrait"];
|
||||
|
||||
if(portraitNode.getType() == JsonNode::DATA_STRING)
|
||||
handler.serializeId("portrait", portrait, -1, &VLC->heroh->decodeHero, &VLC->heroh->encodeHero);
|
||||
else
|
||||
handler.serializeInt("portrait", portrait, -1);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
if(handler.saving)
|
||||
{
|
||||
bool haveSkills = false;
|
||||
|
||||
for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
|
||||
{
|
||||
if(valOfBonuses(Selector::typeSubtype(Bonus::PRIMARY_SKILL, i).And(Selector::sourceType(Bonus::HERO_BASE_SKILL))) != 0)
|
||||
{
|
||||
haveSkills = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(haveSkills)
|
||||
{
|
||||
auto primarySkills = handler.enterStruct("primarySkills");
|
||||
|
||||
for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
|
||||
{
|
||||
int value = valOfBonuses(Selector::typeSubtype(Bonus::PRIMARY_SKILL, i).And(Selector::sourceType(Bonus::HERO_BASE_SKILL)));
|
||||
|
||||
handler.serializeInt(PrimarySkill::names[i], value, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto primarySkills = handler.enterStruct("primarySkills");
|
||||
|
||||
for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
|
||||
{
|
||||
int value = 0;
|
||||
handler.serializeInt(PrimarySkill::names[i], value, 0);
|
||||
if(value != 0)
|
||||
pushPrimSkill(static_cast<PrimarySkill::PrimarySkill>(i), value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//secondary skills
|
||||
if(handler.saving)
|
||||
{
|
||||
//does hero have default skills?
|
||||
bool defaultSkills = false;
|
||||
bool normalSkills = false;
|
||||
for(const auto & p : secSkills)
|
||||
{
|
||||
if(p.first == SecondarySkill(SecondarySkill::DEFAULT))
|
||||
defaultSkills = true;
|
||||
else
|
||||
normalSkills = true;
|
||||
}
|
||||
|
||||
if(defaultSkills && normalSkills)
|
||||
logGlobal->error("Mixed default and normal secondary skills");
|
||||
|
||||
//in json default skills means no field/null
|
||||
if(!defaultSkills)
|
||||
{
|
||||
//enter structure here as handler initialize it
|
||||
auto secondarySkills = handler.enterStruct("secondarySkills");
|
||||
|
||||
for(auto & p : secSkills)
|
||||
{
|
||||
const si32 rawId = p.first.num;
|
||||
|
||||
if(rawId < 0 || rawId >= GameConstants::SKILL_QUANTITY)
|
||||
logGlobal->errorStream() << "Invalid secondary skill " << rawId;
|
||||
|
||||
handler.serializeEnum(NSecondarySkill::names[rawId], p.second, 0, NSecondarySkill::levels);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ID == Obj::HERO || ID == Obj::PRISON)
|
||||
auto secondarySkills = handler.enterStruct("secondarySkills");
|
||||
const JsonNode & skillMap = handler.getCurrent();
|
||||
|
||||
secSkills.clear();
|
||||
if(skillMap.getType() == JsonNode::DATA_NULL)
|
||||
{
|
||||
std::string typeName;
|
||||
handler.serializeString("type", typeName);
|
||||
secSkills.push_back(std::pair<SecondarySkill,ui8>(SecondarySkill::DEFAULT, -1));
|
||||
}
|
||||
else
|
||||
{
|
||||
for(const auto & p : skillMap.Struct())
|
||||
{
|
||||
const std::string id = p.first;
|
||||
const std::string levelId = p.second.String();
|
||||
|
||||
auto rawId = VLC->modh->identifiers.getIdentifier("core", "hero", typeName);
|
||||
const int rawId = vstd::find_pos(NSecondarySkill::names, id);
|
||||
if(rawId < 0)
|
||||
{
|
||||
logGlobal->errorStream() << "Invalid secondary skill " << id;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(rawId)
|
||||
subID = rawId.get();
|
||||
else
|
||||
subID = 0; //fallback to Orrin, throw error instead?
|
||||
const int level = vstd::find_pos(NSecondarySkill::levels, levelId);
|
||||
if(level < 0)
|
||||
{
|
||||
logGlobal->errorStream() << "Invalid secondary skill level" << levelId;
|
||||
continue;
|
||||
}
|
||||
|
||||
secSkills.push_back(std::pair<SecondarySkill,ui8>(SecondarySkill(rawId), level));
|
||||
}
|
||||
}
|
||||
}
|
||||
CCreatureSet::serializeJson(handler, "army");
|
||||
|
||||
handler.serializeIdArray("spellBook", spells, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
|
||||
|
||||
if(handler.saving)
|
||||
CArtifactSet::serializeJsonArtifacts(handler, "artifacts", nullptr);
|
||||
}
|
||||
|
||||
void CGHeroInstance::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
serializeCommonOptions(handler);
|
||||
|
||||
serializeJsonOwner(handler);
|
||||
|
||||
if(ID == Obj::HERO || ID == Obj::PRISON)
|
||||
{
|
||||
auto artifacts = handler.enterStruct("artifacts");
|
||||
std::string typeName;
|
||||
if(handler.saving)
|
||||
CArtifactSet::writeJson(handler.getCurrent());
|
||||
else
|
||||
CArtifactSet::readJson(handler.getCurrent());
|
||||
typeName = getHeroTypeName();
|
||||
handler.serializeString("type", typeName);
|
||||
if(!handler.saving)
|
||||
setHeroTypeName(typeName);
|
||||
}
|
||||
|
||||
CCreatureSet::serializeJson(handler, "army", 7);
|
||||
handler.serializeBool<ui8>("tightFormation", formation, 1, 0, 0);
|
||||
|
||||
{
|
||||
static const int NO_PATROLING = -1;
|
||||
int rawPatrolRadius = NO_PATROLING;
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
rawPatrolRadius = patrol.patrolling ? patrol.patrolRadius : NO_PATROLING;
|
||||
}
|
||||
|
||||
handler.serializeInt("patrolRadius", rawPatrolRadius, NO_PATROLING);
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
patrol.patrolling = (rawPatrolRadius > NO_PATROLING);
|
||||
patrol.initialPos = convertPosition(pos, false);
|
||||
patrol.patrolRadius = (rawPatrolRadius > NO_PATROLING) ? rawPatrolRadius : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CGHeroInstance::serializeJsonDefinition(JsonSerializeFormat & handler)
|
||||
{
|
||||
serializeCommonOptions(handler);
|
||||
}
|
||||
|
||||
bool CGHeroInstance::isMissionCritical() const
|
||||
@ -1591,7 +1770,7 @@ bool CGHeroInstance::isMissionCritical() const
|
||||
{
|
||||
if(event.trigger.test([&](const EventCondition & condition)
|
||||
{
|
||||
if (condition.condition == EventCondition::CONTROL && condition.object)
|
||||
if ((condition.condition == EventCondition::CONTROL || condition.condition == EventCondition::HAVE_0) && condition.object)
|
||||
{
|
||||
auto hero = dynamic_cast<const CGHeroInstance*>(condition.object);
|
||||
return (hero != this);
|
||||
|
@ -65,8 +65,8 @@ public:
|
||||
ConstTransitivePtr<CCommanderInstance> commander;
|
||||
const CGBoat *boat; //set to CGBoat when sailing
|
||||
|
||||
static const ui32 UNINITIALIZED_PORTRAIT = -1;
|
||||
static const ui32 UNINITIALIZED_MANA = -1;
|
||||
static const si32 UNINITIALIZED_PORTRAIT = -1;
|
||||
static const si32 UNINITIALIZED_MANA = -1;
|
||||
static const ui32 UNINITIALIZED_MOVEMENT = -1;
|
||||
|
||||
//std::vector<const CArtifact*> artifacts; //hero's artifacts from bag
|
||||
@ -204,7 +204,7 @@ public:
|
||||
void initHero(CRandomGenerator & rand);
|
||||
void initHero(CRandomGenerator & rand, HeroTypeID SUBID);
|
||||
|
||||
void putArtifact(ArtifactPosition pos, CArtifactInstance *art);
|
||||
void putArtifact(ArtifactPosition pos, CArtifactInstance * art) override;
|
||||
void putInBackpack(CArtifactInstance *art);
|
||||
void initExp(CRandomGenerator & rand);
|
||||
void initArmy(CRandomGenerator & rand, IArmyDescriptor *dst = nullptr);
|
||||
@ -258,12 +258,20 @@ public:
|
||||
std::string getObjectName() const override;
|
||||
protected:
|
||||
void setPropertyDer(ui8 what, ui32 val) override;//synchr
|
||||
///common part of hero instance and hero definition
|
||||
void serializeCommonOptions(JsonSerializeFormat & handler);
|
||||
|
||||
void serializeJsonOptions(JsonSerializeFormat & handler) override;
|
||||
|
||||
private:
|
||||
void levelUpAutomatically(CRandomGenerator & rand);
|
||||
|
||||
public:
|
||||
std::string getHeroTypeName() const;
|
||||
void setHeroTypeName(const std::string & identifier);
|
||||
|
||||
void serializeJsonDefinition(JsonSerializeFormat & handler);
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
h & static_cast<CArmedInstance&>(*this);
|
||||
|
@ -17,6 +17,8 @@
|
||||
#include "../spells/CSpellHandler.h"
|
||||
#include "../StartInfo.h"
|
||||
#include "../IGameCallback.h"
|
||||
#include "../StringConstants.h"
|
||||
#include "../serializer/JsonSerializeFormat.h"
|
||||
|
||||
///helpers
|
||||
static void showInfoDialog(const PlayerColor playerID, const ui32 txtID, const ui16 soundID)
|
||||
@ -375,6 +377,85 @@ CGEvent::CGEvent()
|
||||
|
||||
}
|
||||
|
||||
void CGPandoraBox::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
CCreatureSet::serializeJson(handler, "guards", 7);
|
||||
handler.serializeString("guardMessage", message);
|
||||
|
||||
handler.serializeInt("experience", gainedExp, 0);
|
||||
handler.serializeInt("mana", manaDiff, 0);
|
||||
handler.serializeInt("morale", moraleDiff, 0);
|
||||
handler.serializeInt("luck", luckDiff, 0);
|
||||
|
||||
resources.serializeJson(handler, "resources");
|
||||
|
||||
{
|
||||
if(!handler.saving)
|
||||
primskills.resize(GameConstants::PRIMARY_SKILLS,0);
|
||||
|
||||
auto s = handler.enterStruct("primarySkills");
|
||||
for(int idx = 0; idx < primskills.size(); idx ++)
|
||||
handler.serializeInt(PrimarySkill::names[idx], primskills[idx], 0);
|
||||
|
||||
}
|
||||
if(handler.saving)
|
||||
{
|
||||
if(handler.getCurrent()["primarySkills"].Struct().empty())
|
||||
handler.getCurrent().Struct().erase("primarySkills");
|
||||
}
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
if(!abilities.empty())
|
||||
{
|
||||
auto s = handler.enterStruct("secondarySkills");
|
||||
|
||||
for(size_t idx = 0; idx < abilities.size(); idx++)
|
||||
{
|
||||
handler.serializeEnum(NSecondarySkill::names[abilities[idx]], abilityLevels[idx], NSecondarySkill::levels);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto s = handler.enterStruct("secondarySkills");
|
||||
|
||||
const JsonNode & skillMap = handler.getCurrent();
|
||||
|
||||
abilities.clear();
|
||||
abilityLevels.clear();
|
||||
|
||||
for(const auto & p : skillMap.Struct())
|
||||
{
|
||||
const std::string id = p.first;
|
||||
const std::string levelId = p.second.String();
|
||||
|
||||
const int rawId = vstd::find_pos(NSecondarySkill::names, id);
|
||||
if(rawId < 0)
|
||||
{
|
||||
logGlobal->errorStream() << "Invalid secondary skill " << id;
|
||||
continue;
|
||||
}
|
||||
|
||||
const int level = vstd::find_pos(NSecondarySkill::levels, levelId);
|
||||
if(level < 0)
|
||||
{
|
||||
logGlobal->errorStream() << "Invalid secondary skill level" << levelId;
|
||||
continue;
|
||||
}
|
||||
|
||||
abilities.push_back(SecondarySkill(rawId));
|
||||
abilityLevels.push_back(level);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
handler.serializeIdArray("artifacts", artifacts, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
|
||||
handler.serializeIdArray("spells", spells, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
|
||||
|
||||
creatures.serializeJson(handler, "creatures");
|
||||
}
|
||||
|
||||
void CGEvent::onHeroVisit( const CGHeroInstance * h ) const
|
||||
{
|
||||
if(!(availableFor & (1 << h->tempOwner.getNum())))
|
||||
@ -416,3 +497,26 @@ void CGEvent::afterSuccessfulVisit() const
|
||||
else if(hasGuardians)
|
||||
hasGuardians = false;
|
||||
}
|
||||
|
||||
void CGEvent::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
CGPandoraBox::serializeJsonOptions(handler);
|
||||
|
||||
handler.serializeBool<bool>("aIActivable", computerActivate, true, false, false);
|
||||
handler.serializeBool<bool>("humanActivable", humanActivate, true, false, true);
|
||||
handler.serializeBool<bool>("removeAfterVisit", removeAfterVisit, true, false, false);
|
||||
|
||||
{
|
||||
auto decodePlayer = [](const std::string & id)->si32
|
||||
{
|
||||
return vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, id);
|
||||
};
|
||||
|
||||
auto encodePlayer = [](si32 idx)->std::string
|
||||
{
|
||||
return GameConstants::PLAYER_COLOR_NAMES[idx];
|
||||
};
|
||||
|
||||
handler.serializeIdArray<ui8, PlayerColor::PLAYER_LIMIT_I>("availableFor", availableFor, GameConstants::ALL_PLAYERS, decodePlayer, encodePlayer);
|
||||
}
|
||||
}
|
||||
|
@ -51,6 +51,7 @@ public:
|
||||
protected:
|
||||
void giveContentsUpToExp(const CGHeroInstance *h) const;
|
||||
void giveContentsAfterExp(const CGHeroInstance *h) const;
|
||||
void serializeJsonOptions(JsonSerializeFormat & handler) override;
|
||||
private:
|
||||
void getText( InfoWindow &iw, bool &afterBattle, int val, int negative, int positive, const CGHeroInstance * h ) const;
|
||||
void getText( InfoWindow &iw, bool &afterBattle, int text, const CGHeroInstance * h ) const;
|
||||
@ -73,6 +74,8 @@ public:
|
||||
|
||||
CGEvent();
|
||||
void onHeroVisit(const CGHeroInstance * h) const override;
|
||||
protected:
|
||||
void serializeJsonOptions(JsonSerializeFormat & handler) override;
|
||||
private:
|
||||
void activated(const CGHeroInstance * h) const;
|
||||
void afterSuccessfulVisit() const override;
|
||||
|
@ -25,6 +25,64 @@
|
||||
std::vector<const CArtifact *> CGTownInstance::merchantArtifacts;
|
||||
std::vector<int> CGTownInstance::universitySkills;
|
||||
|
||||
void CCreGenAsCastleInfo::serializeJson(JsonSerializeFormat & handler)
|
||||
{
|
||||
handler.serializeString("sameAsTown", instanceId);
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
asCastle = (instanceId != "");
|
||||
allowedFactions.clear();
|
||||
}
|
||||
|
||||
if(!asCastle)
|
||||
{
|
||||
std::vector<bool> standard;
|
||||
standard.resize(VLC->townh->factions.size(), true);
|
||||
|
||||
JsonSerializeFormat::LIC allowedLIC(standard, &CTownHandler::decodeFaction, &CTownHandler::encodeFaction);
|
||||
allowedLIC.any = allowedFactions;
|
||||
|
||||
handler.serializeLIC("allowedFactions", allowedLIC);
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
allowedFactions = allowedLIC.any;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCreGenLeveledInfo::serializeJson(JsonSerializeFormat & handler)
|
||||
{
|
||||
handler.serializeInt("minLevel", minLevel, ui8(1));
|
||||
handler.serializeInt("maxLevel", maxLevel, ui8(7));
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
//todo: safely allow any level > 7
|
||||
vstd::amax(minLevel, 1);
|
||||
vstd::amin(minLevel, 7);
|
||||
vstd::abetween(maxLevel, minLevel, 7);
|
||||
}
|
||||
}
|
||||
|
||||
void CCreGenLeveledCastleInfo::serializeJson(JsonSerializeFormat & handler)
|
||||
{
|
||||
CCreGenAsCastleInfo::serializeJson(handler);
|
||||
CCreGenLeveledInfo::serializeJson(handler);
|
||||
}
|
||||
|
||||
CGDwelling::CGDwelling():
|
||||
CArmedInstance()
|
||||
{
|
||||
info = nullptr;
|
||||
}
|
||||
|
||||
CGDwelling::~CGDwelling()
|
||||
{
|
||||
vstd::clear_pointer(info);
|
||||
}
|
||||
|
||||
void CGDwelling::initObj(CRandomGenerator & rand)
|
||||
{
|
||||
switch(ID)
|
||||
@ -58,6 +116,23 @@ void CGDwelling::initObj(CRandomGenerator & rand)
|
||||
}
|
||||
}
|
||||
|
||||
void CGDwelling::initRandomObjectInfo()
|
||||
{
|
||||
vstd::clear_pointer(info);
|
||||
switch(ID)
|
||||
{
|
||||
case Obj::RANDOM_DWELLING: info = new CCreGenLeveledCastleInfo();
|
||||
break;
|
||||
case Obj::RANDOM_DWELLING_LVL: info = new CCreGenAsCastleInfo();
|
||||
break;
|
||||
case Obj::RANDOM_DWELLING_FACTION: info = new CCreGenLeveledInfo();
|
||||
break;
|
||||
}
|
||||
|
||||
if(info)
|
||||
info->owner = this;
|
||||
}
|
||||
|
||||
void CGDwelling::setPropertyDer(ui8 what, ui32 val)
|
||||
{
|
||||
switch (what)
|
||||
@ -318,9 +393,24 @@ void CGDwelling::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
|
||||
|
||||
void CGDwelling::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
//todo: CGDwelling::serializeJsonOptions
|
||||
if(ID != Obj::WAR_MACHINE_FACTORY && ID != Obj::REFUGEE_CAMP)
|
||||
if(!handler.saving)
|
||||
initRandomObjectInfo();
|
||||
|
||||
switch (ID)
|
||||
{
|
||||
case Obj::WAR_MACHINE_FACTORY:
|
||||
case Obj::REFUGEE_CAMP:
|
||||
//do nothing
|
||||
break;
|
||||
case Obj::RANDOM_DWELLING:
|
||||
case Obj::RANDOM_DWELLING_LVL:
|
||||
case Obj::RANDOM_DWELLING_FACTION:
|
||||
info->serializeJson(handler);
|
||||
//fall through
|
||||
default:
|
||||
serializeJsonOwner(handler);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int CGTownInstance::getSightRadius() const //returns sight distance
|
||||
@ -495,7 +585,7 @@ bool CGTownInstance::hasCapitol() const
|
||||
return hasBuilt(BuildingID::CAPITOL);
|
||||
}
|
||||
CGTownInstance::CGTownInstance()
|
||||
:IShipyard(this), IMarket(this), town(nullptr), builded(0), destroyed(0), identifier(0), alignment(0xff)
|
||||
:CGDwelling(), IShipyard(this), IMarket(this), town(nullptr), builded(0), destroyed(0), identifier(0), alignment(0xff)
|
||||
{
|
||||
|
||||
}
|
||||
@ -1101,6 +1191,21 @@ bool CGTownInstance::armedGarrison() const
|
||||
return stacksCount() || garrisonHero;
|
||||
}
|
||||
|
||||
const CTown * CGTownInstance::getTown() const
|
||||
{
|
||||
if(ID == Obj::RANDOM_TOWN)
|
||||
return VLC->townh->randomTown;
|
||||
else
|
||||
{
|
||||
if(nullptr == town)
|
||||
{
|
||||
return VLC->townh->factions[subID]->town;
|
||||
}
|
||||
else
|
||||
return town;
|
||||
}
|
||||
}
|
||||
|
||||
int CGTownInstance::getTownLevel() const
|
||||
{
|
||||
// count all buildings that are not upgrades
|
||||
@ -1214,34 +1319,100 @@ void CGTownInstance::battleFinished(const CGHeroInstance *hero, const BattleResu
|
||||
void CGTownInstance::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
CGObjectInstance::serializeJsonOwner(handler);
|
||||
CCreatureSet::serializeJson(handler, "army");
|
||||
handler.serializeBool<ui8>("tightFormation", 1, 0, formation);
|
||||
CCreatureSet::serializeJson(handler, "army", 7);
|
||||
handler.serializeBool<ui8>("tightFormation", formation, 1, 0, 0);
|
||||
handler.serializeString("name", name);
|
||||
|
||||
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
builtBuildings.insert(BuildingID::DEFAULT);//just in case
|
||||
auto decodeBuilding = [this](const std::string & identifier) -> si32
|
||||
{
|
||||
auto rawId = VLC->modh->identifiers.getIdentifier("core", getTown()->getBuildingScope(), identifier);
|
||||
|
||||
if(rawId)
|
||||
return rawId.get();
|
||||
else
|
||||
return -1;
|
||||
};
|
||||
|
||||
auto encodeBuilding = [this](si32 index) -> std::string
|
||||
{
|
||||
return getTown()->buildings.at(BuildingID(index))->identifier;
|
||||
};
|
||||
|
||||
const std::set<si32> standard = getTown()->getAllBuildings();//by default all buildings are allowed
|
||||
JsonSerializeFormat::LICSet buildingsLIC(standard, decodeBuilding, encodeBuilding);
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
bool customBuildings = false;
|
||||
|
||||
boost::logic::tribool hasFort(false);
|
||||
|
||||
for(const BuildingID id : forbiddenBuildings)
|
||||
{
|
||||
buildingsLIC.none.insert(id);
|
||||
customBuildings = true;
|
||||
}
|
||||
|
||||
for(const BuildingID id : builtBuildings)
|
||||
{
|
||||
if(id == BuildingID::DEFAULT)
|
||||
continue;
|
||||
|
||||
const CBuilding * building = getTown()->buildings.at(id);
|
||||
|
||||
if(building->mode == CBuilding::BUILD_AUTO)
|
||||
continue;
|
||||
|
||||
if(id == BuildingID::FORT)
|
||||
hasFort = true;
|
||||
|
||||
buildingsLIC.all.insert(id);
|
||||
customBuildings = true;
|
||||
}
|
||||
|
||||
if(customBuildings)
|
||||
handler.serializeLIC("buildings", buildingsLIC);
|
||||
else
|
||||
handler.serializeBool("hasFort",hasFort);
|
||||
}
|
||||
else
|
||||
{
|
||||
handler.serializeLIC("buildings", buildingsLIC);
|
||||
|
||||
builtBuildings.insert(BuildingID::VILLAGE_HALL);
|
||||
|
||||
if(buildingsLIC.none.empty() && buildingsLIC.all.empty())
|
||||
{
|
||||
builtBuildings.insert(BuildingID::DEFAULT);
|
||||
|
||||
bool hasFort = false;
|
||||
handler.serializeBool("hasFort",hasFort);
|
||||
if(hasFort)
|
||||
builtBuildings.insert(BuildingID::FORT);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(const si32 item : buildingsLIC.none)
|
||||
forbiddenBuildings.insert(BuildingID(item));
|
||||
for(const si32 item : buildingsLIC.all)
|
||||
builtBuildings.insert(BuildingID(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//todo: serialize buildings
|
||||
// {
|
||||
// std::vector<bool> standard;
|
||||
// standard.resize(44, true);
|
||||
//
|
||||
//
|
||||
// JsonSerializeFormat::LIC buildingsLIC(, CTownHandler::decodeBuilding, CTownHandler::encodeBuilding);
|
||||
// }
|
||||
|
||||
{
|
||||
JsonSerializeFormat::LIC spellsLIC(VLC->spellh->getDefaultAllowed(), CSpellHandler::decodeSpell, CSpellHandler::encodeSpell);
|
||||
std::vector<bool> standard = VLC->spellh->getDefaultAllowed();
|
||||
JsonSerializeFormat::LIC spellsLIC(standard, CSpellHandler::decodeSpell, CSpellHandler::encodeSpell);
|
||||
|
||||
for(SpellID id : possibleSpells)
|
||||
spellsLIC.any[id.num] = true;
|
||||
if(handler.saving)
|
||||
{
|
||||
for(SpellID id : possibleSpells)
|
||||
spellsLIC.any[id.num] = true;
|
||||
|
||||
for(SpellID id : obligatorySpells)
|
||||
spellsLIC.all[id.num] = true;
|
||||
for(SpellID id : obligatorySpells)
|
||||
spellsLIC.all[id.num] = true;
|
||||
}
|
||||
|
||||
handler.serializeLIC("spells", spellsLIC);
|
||||
|
||||
@ -1251,18 +1422,14 @@ void CGTownInstance::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
for(si32 idx = 0; idx < spellsLIC.any.size(); idx++)
|
||||
{
|
||||
if(spellsLIC.any[idx])
|
||||
{
|
||||
possibleSpells.push_back(SpellID(idx));
|
||||
}
|
||||
}
|
||||
|
||||
obligatorySpells.clear();
|
||||
for(si32 idx = 0; idx < spellsLIC.all.size(); idx++)
|
||||
{
|
||||
if(spellsLIC.all[idx])
|
||||
{
|
||||
obligatorySpells.push_back(SpellID(idx));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,30 +18,46 @@
|
||||
|
||||
class CCastleEvent;
|
||||
class CGTownInstance;
|
||||
class CGDwelling;
|
||||
|
||||
class DLL_LINKAGE CSpecObjInfo
|
||||
{
|
||||
public:
|
||||
virtual ~CSpecObjInfo(){};
|
||||
PlayerColor player; //owner
|
||||
CSpecObjInfo() = default;
|
||||
virtual ~CSpecObjInfo() = default;
|
||||
|
||||
virtual void serializeJson(JsonSerializeFormat & handler) = 0;
|
||||
|
||||
const CGDwelling * owner;
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CCreGenAsCastleInfo : public virtual CSpecObjInfo
|
||||
{
|
||||
public:
|
||||
CCreGenAsCastleInfo() = default;
|
||||
bool asCastle;
|
||||
ui32 identifier;
|
||||
ui8 castles[2]; //allowed castles
|
||||
ui32 identifier;//h3m internal identifier
|
||||
|
||||
std::vector<bool> allowedFactions;
|
||||
|
||||
std::string instanceId;//vcmi map instance identifier
|
||||
void serializeJson(JsonSerializeFormat & handler) override;
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CCreGenLeveledInfo : public virtual CSpecObjInfo
|
||||
{
|
||||
public:
|
||||
ui8 minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <0, 6>
|
||||
CCreGenLeveledInfo() = default;
|
||||
ui8 minLevel, maxLevel; //minimal and maximal level of creature in dwelling: <1, 7>
|
||||
|
||||
void serializeJson(JsonSerializeFormat & handler) override;
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CCreGenLeveledCastleInfo : public CCreGenAsCastleInfo, public CCreGenLeveledInfo
|
||||
{
|
||||
public:
|
||||
CCreGenLeveledCastleInfo() = default;
|
||||
void serializeJson(JsonSerializeFormat & handler) override;
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CGDwelling : public CArmedInstance
|
||||
@ -49,9 +65,13 @@ class DLL_LINKAGE CGDwelling : public CArmedInstance
|
||||
public:
|
||||
typedef std::vector<std::pair<ui32, std::vector<CreatureID> > > TCreaturesSet;
|
||||
|
||||
CSpecObjInfo * info; //h3m info about dewlling
|
||||
CSpecObjInfo * info; //random dwelling options; not serialized
|
||||
TCreaturesSet creatures; //creatures[level] -> <vector of alternative ids (base creature and upgrades, creatures amount>
|
||||
|
||||
CGDwelling();
|
||||
virtual ~CGDwelling();
|
||||
|
||||
void initRandomObjectInfo();
|
||||
protected:
|
||||
void serializeJsonOptions(JsonSerializeFormat & handler) override;
|
||||
|
||||
@ -245,6 +265,8 @@ public:
|
||||
void clearArmy() const;
|
||||
void addHeroToStructureVisitors(const CGHeroInstance *h, si32 structureInstanceID) const; //hero must be visiting or garrisoned in town
|
||||
|
||||
const CTown * getTown() const ;
|
||||
|
||||
CGTownInstance();
|
||||
virtual ~CGTownInstance();
|
||||
|
||||
|
@ -242,6 +242,8 @@ public:
|
||||
/// Returns handler string describing the handler (for use in client)
|
||||
std::string getObjectHandlerName(si32 type) const;
|
||||
|
||||
|
||||
|
||||
template <typename Handler> void serialize(Handler &h, const int version)
|
||||
{
|
||||
h & objects;
|
||||
|
@ -328,9 +328,9 @@ void CGObjectInstance::serializeJson(JsonSerializeFormat & handler)
|
||||
handler.serializeString("type", typeName);
|
||||
handler.serializeString("subtype", subTypeName);
|
||||
|
||||
handler.serializeNumeric("x", pos.x);
|
||||
handler.serializeNumeric("y", pos.y);
|
||||
handler.serializeNumeric("l", pos.z);
|
||||
handler.serializeInt("x", pos.x);
|
||||
handler.serializeInt("y", pos.y);
|
||||
handler.serializeInt("l", pos.z);
|
||||
appearance.writeJson(handler.getCurrent()["template"], false);
|
||||
}
|
||||
|
||||
@ -352,32 +352,12 @@ void CGObjectInstance::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
|
||||
void CGObjectInstance::serializeJsonOwner(JsonSerializeFormat & handler)
|
||||
{
|
||||
std::string temp;
|
||||
ui8 temp = tempOwner.getNum();
|
||||
|
||||
//todo: use enum serialize
|
||||
if(handler.saving)
|
||||
{
|
||||
if(tempOwner.isValidPlayer())
|
||||
{
|
||||
temp = GameConstants::PLAYER_COLOR_NAMES[tempOwner.getNum()];
|
||||
handler.serializeString("owner", temp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tempOwner = PlayerColor::NEUTRAL;//this method assumes that object is ownable
|
||||
handler.serializeEnum("owner", temp, PlayerColor::NEUTRAL.getNum(), GameConstants::PLAYER_COLOR_NAMES);
|
||||
|
||||
handler.serializeString("owner", temp);
|
||||
|
||||
if(temp != "")
|
||||
{
|
||||
auto rawOwner = vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, temp);
|
||||
if(rawOwner >=0)
|
||||
tempOwner = PlayerColor(rawOwner);
|
||||
else
|
||||
logGlobal->errorStream() << "Invalid owner :" << temp;
|
||||
}
|
||||
}
|
||||
if(!handler.saving)
|
||||
tempOwner = PlayerColor(temp);
|
||||
}
|
||||
|
||||
CGObjectInstanceBySubIdFinder::CGObjectInstanceBySubIdFinder(CGObjectInstance * obj) : obj(obj)
|
||||
|
@ -20,6 +20,12 @@
|
||||
#include "MiscObjects.h"
|
||||
#include "../IGameCallback.h"
|
||||
#include "../CGameState.h"
|
||||
#include "../serializer/JsonSerializeFormat.h"
|
||||
#include "../CModHandler.h"
|
||||
#include "../GameConstants.h"
|
||||
#include "../StringConstants.h"
|
||||
#include "../spells/CSpellHandler.h"
|
||||
|
||||
|
||||
std::map <PlayerColor, std::set <ui8> > CGKeys::playerKeyMap;
|
||||
|
||||
@ -395,6 +401,86 @@ void CQuest::getCompletionText(MetaString &iwText, std::vector<Component> &compo
|
||||
}
|
||||
}
|
||||
|
||||
void CQuest::serializeJson(JsonSerializeFormat & handler, const std::string & fieldName)
|
||||
{
|
||||
auto q = handler.enterStruct(fieldName);
|
||||
|
||||
handler.serializeString("firstVisitText", firstVisitText);
|
||||
handler.serializeString("nextVisitText", nextVisitText);
|
||||
handler.serializeString("completedText", completedText);
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
isCustomFirst = firstVisitText.size() > 0;
|
||||
isCustomNext = nextVisitText.size() > 0;
|
||||
isCustomComplete = completedText.size() > 0;
|
||||
}
|
||||
|
||||
static const std::vector<std::string> MISSION_TYPE_JSON =
|
||||
{
|
||||
"None", "Level", "PrimaryStat", "KillHero", "KillCreature", "Artifact", "Army", "Resources", "Hero", "Player"
|
||||
};
|
||||
|
||||
handler.serializeEnum("missionType", missionType, Emission::MISSION_NONE, MISSION_TYPE_JSON);
|
||||
handler.serializeInt("timeLimit", lastDay, -1);
|
||||
|
||||
switch (missionType)
|
||||
{
|
||||
case MISSION_NONE:
|
||||
break;
|
||||
case MISSION_LEVEL:
|
||||
handler.serializeInt("heroLevel", m13489val, -1);
|
||||
break;
|
||||
case MISSION_PRIMARY_STAT:
|
||||
{
|
||||
auto primarySkills = handler.enterStruct("primarySkills");
|
||||
if(!handler.saving)
|
||||
m2stats.resize(GameConstants::PRIMARY_SKILLS);
|
||||
|
||||
for(int i = 0; i < GameConstants::PRIMARY_SKILLS; ++i)
|
||||
handler.serializeInt(PrimarySkill::names[i], m2stats[i], 0);
|
||||
}
|
||||
break;
|
||||
case MISSION_KILL_HERO:
|
||||
case MISSION_KILL_CREATURE:
|
||||
handler.serializeInstance<ui32>("killTarget", m13489val, ui32(-1));
|
||||
break;
|
||||
case MISSION_ART:
|
||||
//todo: ban artifacts
|
||||
handler.serializeIdArray("artifacts", m5arts, &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
|
||||
break;
|
||||
case MISSION_ARMY:
|
||||
{
|
||||
auto a = handler.enterArray("creatures");
|
||||
a.serializeStruct(m6creatures);
|
||||
}
|
||||
break;
|
||||
case MISSION_RESOURCES:
|
||||
{
|
||||
auto r = handler.enterStruct("resources");
|
||||
|
||||
if(!handler.saving)
|
||||
m7resources.resize(GameConstants::RESOURCE_QUANTITY-1);
|
||||
|
||||
for(size_t idx = 0; idx < (GameConstants::RESOURCE_QUANTITY - 1); idx++)
|
||||
{
|
||||
handler.serializeInt(GameConstants::RESOURCE_NAMES[idx], m7resources[idx], 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MISSION_HERO:
|
||||
handler.serializeId<ui32>("hero", m13489val, 0, &CHeroHandler::decodeHero, &CHeroHandler::encodeHero);
|
||||
break;
|
||||
case MISSION_PLAYER:
|
||||
handler.serializeEnum("player", m13489val, PlayerColor::CANNOT_DETERMINE.getNum(), GameConstants::PLAYER_COLOR_NAMES);
|
||||
break;
|
||||
default:
|
||||
logGlobal->error("Invalid quest mission type");
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
CGSeerHut::CGSeerHut() : IQuestObject(),
|
||||
rewardType(NOTHING), rID(-1), rVal(-1)
|
||||
{
|
||||
@ -763,6 +849,165 @@ void CGSeerHut::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
|
||||
finishQuest(hero, answer);
|
||||
}
|
||||
|
||||
void CGSeerHut::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
static const std::map<ERewardType, std::string> REWARD_MAP =
|
||||
{
|
||||
{NOTHING, ""},
|
||||
{EXPERIENCE, "experience"},
|
||||
{MANA_POINTS, "mana"},
|
||||
{MORALE_BONUS, "morale"},
|
||||
{LUCK_BONUS, "luck"},
|
||||
{RESOURCES, "resource"},
|
||||
{PRIMARY_SKILL, "primarySkill"},
|
||||
{SECONDARY_SKILL,"secondarySkill"},
|
||||
{ARTIFACT, "artifact"},
|
||||
{SPELL, "spell"},
|
||||
{CREATURE, "creature"}
|
||||
};
|
||||
|
||||
static const std::map<std::string, ERewardType> REWARD_RMAP =
|
||||
{
|
||||
{"experience", EXPERIENCE},
|
||||
{"mana", MANA_POINTS},
|
||||
{"morale", MORALE_BONUS},
|
||||
{"luck", LUCK_BONUS},
|
||||
{"resource", RESOURCES},
|
||||
{"primarySkill", PRIMARY_SKILL},
|
||||
{"secondarySkill",SECONDARY_SKILL},
|
||||
{"artifact", ARTIFACT},
|
||||
{"spell", SPELL},
|
||||
{"creature", CREATURE}
|
||||
};
|
||||
|
||||
//quest and reward
|
||||
quest->serializeJson(handler, "quest");
|
||||
|
||||
//only one reward is supported
|
||||
//todo: full reward format support after CRewardInfo integration
|
||||
|
||||
auto s = handler.enterStruct("reward");
|
||||
std::string fullIdentifier, metaTypeName, scope, identifier;
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
si32 amount = rVal;
|
||||
|
||||
metaTypeName = REWARD_MAP.at(rewardType);
|
||||
switch (rewardType)
|
||||
{
|
||||
case NOTHING:
|
||||
break;
|
||||
case EXPERIENCE:
|
||||
case MANA_POINTS:
|
||||
case MORALE_BONUS:
|
||||
case LUCK_BONUS:
|
||||
identifier = "";
|
||||
break;
|
||||
case RESOURCES:
|
||||
identifier = GameConstants::RESOURCE_NAMES[rID];
|
||||
break;
|
||||
case PRIMARY_SKILL:
|
||||
identifier = PrimarySkill::names[rID];
|
||||
break;
|
||||
case SECONDARY_SKILL:
|
||||
identifier = NSecondarySkill::names[rID];
|
||||
break;
|
||||
case ARTIFACT:
|
||||
identifier = ArtifactID(rID).toArtifact()->identifier;
|
||||
amount = 1;
|
||||
break;
|
||||
case SPELL:
|
||||
identifier = SpellID(rID).toSpell()->identifier;
|
||||
amount = 1;
|
||||
break;
|
||||
case CREATURE:
|
||||
identifier = CreatureID(rID).toCreature()->identifier;
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
break;
|
||||
}
|
||||
if(rewardType != NOTHING)
|
||||
{
|
||||
fullIdentifier = CModHandler::makeFullIdentifier(scope, metaTypeName, identifier);
|
||||
handler.serializeInt(fullIdentifier, amount);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rewardType = NOTHING;
|
||||
|
||||
const JsonNode & rewardsJson = handler.getCurrent();
|
||||
|
||||
fullIdentifier = "";
|
||||
|
||||
if(rewardsJson.Struct().empty())
|
||||
return;
|
||||
else
|
||||
{
|
||||
auto iter = rewardsJson.Struct().begin();
|
||||
fullIdentifier = iter->first;
|
||||
}
|
||||
|
||||
CModHandler::parseIdentifier(fullIdentifier, scope, metaTypeName, identifier);
|
||||
|
||||
auto it = REWARD_RMAP.find(metaTypeName);
|
||||
|
||||
if(it == REWARD_RMAP.end())
|
||||
{
|
||||
logGlobal->errorStream() << instanceName << ": invalid metatype in reward item " << fullIdentifier;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
rewardType = it->second;
|
||||
}
|
||||
|
||||
bool doRequest = false;
|
||||
|
||||
switch (rewardType)
|
||||
{
|
||||
case NOTHING:
|
||||
return;
|
||||
case EXPERIENCE:
|
||||
case MANA_POINTS:
|
||||
case MORALE_BONUS:
|
||||
case LUCK_BONUS:
|
||||
break;
|
||||
case PRIMARY_SKILL:
|
||||
doRequest = true;
|
||||
break;
|
||||
case RESOURCES:
|
||||
case SECONDARY_SKILL:
|
||||
case ARTIFACT:
|
||||
case SPELL:
|
||||
case CREATURE:
|
||||
doRequest = true;
|
||||
break;
|
||||
default:
|
||||
assert(false);
|
||||
break;
|
||||
}
|
||||
|
||||
if(doRequest)
|
||||
{
|
||||
auto rawId = VLC->modh->identifiers.getIdentifier("core", fullIdentifier, false);
|
||||
|
||||
if(rawId)
|
||||
{
|
||||
rID = rawId.get();
|
||||
}
|
||||
else
|
||||
{
|
||||
rewardType = NOTHING;//fallback in case of error
|
||||
return;
|
||||
}
|
||||
}
|
||||
handler.serializeInt(fullIdentifier, rVal);
|
||||
}
|
||||
}
|
||||
|
||||
void CGQuestGuard::init(CRandomGenerator & rand)
|
||||
{
|
||||
blockVisit = true;
|
||||
@ -775,6 +1020,12 @@ void CGQuestGuard::completeQuest(const CGHeroInstance *h) const
|
||||
cb->removeObject(this);
|
||||
}
|
||||
|
||||
void CGQuestGuard::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
//quest only, do not call base class
|
||||
quest->serializeJson(handler, "quest");
|
||||
}
|
||||
|
||||
void CGKeys::reset()
|
||||
{
|
||||
playerKeyMap.clear();
|
||||
|
@ -80,6 +80,8 @@ public:
|
||||
completedOption = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void serializeJson(JsonSerializeFormat & handler, const std::string & fieldName);
|
||||
};
|
||||
|
||||
class DLL_LINKAGE IQuestObject
|
||||
@ -133,6 +135,8 @@ protected:
|
||||
static const int OBJPROP_VISITED = 10;
|
||||
|
||||
void setPropertyDer(ui8 what, ui32 val) override;
|
||||
|
||||
void serializeJsonOptions(JsonSerializeFormat & handler) override;
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CGQuestGuard : public CGSeerHut
|
||||
@ -146,6 +150,8 @@ public:
|
||||
{
|
||||
h & static_cast<CGSeerHut&>(*this);
|
||||
}
|
||||
protected:
|
||||
void serializeJsonOptions(JsonSerializeFormat & handler) override;
|
||||
};
|
||||
|
||||
class DLL_LINKAGE CGKeys : public CGObjectInstance //Base class for Keymaster and guards
|
||||
|
@ -21,7 +21,7 @@ namespace {
|
||||
MetaString loadMessage(const JsonNode & value)
|
||||
{
|
||||
MetaString ret;
|
||||
if (value.getType() == JsonNode::DATA_FLOAT)
|
||||
if (value.isNumber())
|
||||
ret.addTxt(MetaString::ADVOB_TXT, value.Float());
|
||||
else
|
||||
ret << value.String();
|
||||
|
@ -28,7 +28,7 @@ namespace JsonRandom
|
||||
{
|
||||
if (value.isNull())
|
||||
return defaultValue;
|
||||
if (value.getType() == JsonNode::DATA_FLOAT)
|
||||
if (value.isNumber())
|
||||
return value.Float();
|
||||
if (!value["amount"].isNull())
|
||||
return value["amount"].Float();
|
||||
|
@ -600,50 +600,30 @@ static const std::vector<std::string> CHARACTER_JSON =
|
||||
|
||||
void CGCreature::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
handler.serializeNumericEnum("character", CHARACTER_JSON, (si8)0, character);
|
||||
handler.serializeEnum("character", character, CHARACTER_JSON);
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
if(hasStackAtSlot(SlotID(0)))
|
||||
{
|
||||
si32 amount = getStack(SlotID(0)).count;
|
||||
handler.serializeNumeric("amount", amount);
|
||||
handler.serializeInt("amount", amount, 0);
|
||||
}
|
||||
|
||||
if(resources.nonZero())
|
||||
{
|
||||
for(size_t idx = 0; idx < resources.size(); idx++)
|
||||
handler.getCurrent()["rewardResources"][GameConstants::RESOURCE_NAMES[idx]].Float() = resources[idx];
|
||||
}
|
||||
|
||||
auto tmp = (gainedArtifact == ArtifactID(ArtifactID::NONE) ? "" : gainedArtifact.toArtifact()->identifier);
|
||||
handler.serializeString("rewardArtifact", tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
si32 amount = 0;
|
||||
handler.serializeNumeric("amount", amount);
|
||||
handler.serializeInt("amount", amount);
|
||||
auto hlp = new CStackInstance();
|
||||
hlp->count = amount;
|
||||
//type will be set during initialization
|
||||
putStack(SlotID(0), hlp);
|
||||
{
|
||||
TResources tmp(handler.getCurrent()["rewardResources"]);
|
||||
std::swap(tmp,resources);
|
||||
}
|
||||
{
|
||||
gainedArtifact = ArtifactID(ArtifactID::NONE);
|
||||
std::string tmp;
|
||||
handler.serializeString("rewardArtifact", tmp);
|
||||
|
||||
if(tmp != "")
|
||||
{
|
||||
auto artid = VLC->modh->identifiers.getIdentifier("core", "artifact", tmp);
|
||||
if(artid)
|
||||
gainedArtifact = ArtifactID(artid.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resources.serializeJson(handler, "rewardResources");
|
||||
|
||||
handler.serializeId("rewardArtifact", gainedArtifact, ArtifactID(ArtifactID::NONE), &CArtHandler::decodeArfifact, &CArtHandler::encodeArtifact);
|
||||
|
||||
handler.serializeBool("noGrowing", notGrowingTeam);
|
||||
handler.serializeBool("neverFlees", neverFlees);
|
||||
handler.serializeString("rewardMessage", message);
|
||||
@ -793,7 +773,7 @@ void CGMine::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) con
|
||||
|
||||
void CGMine::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
CCreatureSet::serializeJson(handler, "army");
|
||||
CCreatureSet::serializeJson(handler, "army", 7);
|
||||
|
||||
if(isAbandoned())
|
||||
{
|
||||
@ -934,8 +914,8 @@ void CGResource::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
|
||||
|
||||
void CGResource::serializeJsonOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
CCreatureSet::serializeJson(handler, "guards");
|
||||
handler.serializeNumeric("amount", amount);
|
||||
CCreatureSet::serializeJson(handler, "guards", 7);
|
||||
handler.serializeInt("amount", amount, 0);
|
||||
handler.serializeString("guardMessage", message);
|
||||
}
|
||||
|
||||
@ -1428,15 +1408,14 @@ void CGArtifact::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer)
|
||||
void CGArtifact::serializeJsonOptions(JsonSerializeFormat& handler)
|
||||
{
|
||||
handler.serializeString("guardMessage", message);
|
||||
CCreatureSet::serializeJson(handler, "guards");
|
||||
CCreatureSet::serializeJson(handler, "guards" ,7);
|
||||
|
||||
if(handler.saving && ID == Obj::SPELL_SCROLL)
|
||||
{
|
||||
const std::shared_ptr<Bonus> b = storedArtifact->getBonusLocalFirst(Selector::type(Bonus::SPELL));
|
||||
SpellID spellId(b->subtype);
|
||||
|
||||
std::string spell = SpellID(b->subtype).toSpell()->identifier;
|
||||
handler.serializeString("spell", spell);
|
||||
handler.serializeId("spell", spellId, SpellID::NONE, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1665,7 +1644,7 @@ std::string CGShrine::getHoverText(const CGHeroInstance * hero) const
|
||||
|
||||
void CGShrine::serializeJsonOptions(JsonSerializeFormat& handler)
|
||||
{
|
||||
handler.serializeId("spell", &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell, SpellID(SpellID::NONE), spell);
|
||||
handler.serializeId("spell", spell, SpellID::NONE, &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell);
|
||||
}
|
||||
|
||||
void CGSignBottle::initObj(CRandomGenerator & rand)
|
||||
@ -1861,7 +1840,7 @@ void CGGarrison::serializeJsonOptions(JsonSerializeFormat& handler)
|
||||
{
|
||||
handler.serializeBool("removableUnits", removableUnits);
|
||||
serializeJsonOwner(handler);
|
||||
CCreatureSet::serializeJson(handler, "army");
|
||||
CCreatureSet::serializeJson(handler, "army", 7);
|
||||
}
|
||||
|
||||
void CGMagi::reset()
|
||||
|
@ -64,7 +64,8 @@ ObjectTemplate::ObjectTemplate(const ObjectTemplate& other):
|
||||
id(other.id),
|
||||
subid(other.subid),
|
||||
printPriority(other.printPriority),
|
||||
animationFile(other.animationFile)
|
||||
animationFile(other.animationFile),
|
||||
editorAnimationFile(other.editorAnimationFile)
|
||||
{
|
||||
//default copy constructor is failing with usedTiles this for unknown reason
|
||||
|
||||
@ -81,6 +82,7 @@ ObjectTemplate & ObjectTemplate::operator=(const ObjectTemplate & rhs)
|
||||
subid = rhs.subid;
|
||||
printPriority = rhs.printPriority;
|
||||
animationFile = rhs.animationFile;
|
||||
editorAnimationFile = rhs.editorAnimationFile;
|
||||
|
||||
usedTiles.clear();
|
||||
usedTiles.resize(rhs.usedTiles.size());
|
||||
@ -89,6 +91,16 @@ ObjectTemplate & ObjectTemplate::operator=(const ObjectTemplate & rhs)
|
||||
return *this;
|
||||
}
|
||||
|
||||
void ObjectTemplate::afterLoadFixup()
|
||||
{
|
||||
if(id == Obj::EVENT)
|
||||
{
|
||||
setSize(1,1);
|
||||
usedTiles[0][0] = VISITABLE;
|
||||
visitDir = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectTemplate::readTxt(CLegacyConfigParser & parser)
|
||||
{
|
||||
std::string data = parser.readString();
|
||||
@ -207,16 +219,13 @@ void ObjectTemplate::readMap(CBinaryReader & reader)
|
||||
reader.skip(16);
|
||||
readMsk();
|
||||
|
||||
if (id == Obj::EVENT)
|
||||
{
|
||||
setSize(1,1);
|
||||
usedTiles[0][0] = VISITABLE;
|
||||
}
|
||||
afterLoadFixup();
|
||||
}
|
||||
|
||||
void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
|
||||
{
|
||||
animationFile = node["animation"].String();
|
||||
editorAnimationFile = node["editorAnimation"].String();
|
||||
|
||||
const JsonVector & visitDirs = node["visitableFrom"].Vector();
|
||||
if (!visitDirs.empty())
|
||||
@ -284,11 +293,14 @@ void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
|
||||
}
|
||||
|
||||
printPriority = node["zIndex"].Float();
|
||||
|
||||
afterLoadFixup();
|
||||
}
|
||||
|
||||
void ObjectTemplate::writeJson(JsonNode & node, const bool withTerrain) const
|
||||
{
|
||||
node["animation"].String() = animationFile;
|
||||
node["editorAnimation"].String() = editorAnimationFile;
|
||||
|
||||
if(visitDir != 0x0 && isVisitable())
|
||||
{
|
||||
|
@ -33,6 +33,8 @@ class DLL_LINKAGE ObjectTemplate
|
||||
/// list of terrains on which this object can be placed
|
||||
std::set<ETerrainType> allowedTerrains;
|
||||
|
||||
void afterLoadFixup();
|
||||
|
||||
public:
|
||||
/// H3 ID/subID of this object
|
||||
Obj id;
|
||||
@ -42,6 +44,9 @@ public:
|
||||
/// animation file that should be used to display object
|
||||
std::string animationFile;
|
||||
|
||||
/// map editor only animation file
|
||||
std::string editorAnimationFile;
|
||||
|
||||
/// string ID, equals to def base name for h3m files (lower case, no extension) or specified in mod data
|
||||
std::string stringID;
|
||||
|
||||
@ -86,6 +91,10 @@ public:
|
||||
{
|
||||
h & usedTiles & allowedTerrains & animationFile & stringID;
|
||||
h & id & subid & printPriority & visitDir;
|
||||
if(version >= 770)
|
||||
{
|
||||
h & editorAnimationFile;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "../CGeneralTextHandler.h"
|
||||
#include "../spells/CSpellHandler.h"
|
||||
#include "CMapEditManager.h"
|
||||
#include "../serializer/JsonSerializeFormat.h"
|
||||
|
||||
SHeroName::SHeroName() : heroId(-1)
|
||||
{
|
||||
@ -18,8 +19,8 @@ SHeroName::SHeroName() : heroId(-1)
|
||||
}
|
||||
|
||||
PlayerInfo::PlayerInfo(): canHumanPlay(false), canComputerPlay(false),
|
||||
aiTactic(EAiTactic::RANDOM), isFactionRandom(false), mainCustomHeroPortrait(-1), mainCustomHeroId(-1), hasMainTown(false),
|
||||
generateHeroAtMainTown(false), team(TeamID::NO_TEAM), hasRandomHero(false), /* following are unused */ generateHero(false), p7(0), powerPlaceholders(-1)
|
||||
aiTactic(EAiTactic::RANDOM), isFactionRandom(false), hasRandomHero(false), mainCustomHeroPortrait(-1), mainCustomHeroId(-1), hasMainTown(false),
|
||||
generateHeroAtMainTown(false), team(TeamID::NO_TEAM), /* following are unused */ generateHero(false), p7(0), powerPlaceholders(-1)
|
||||
{
|
||||
allowedFactions = VLC->townh->getAllowedFactions();
|
||||
}
|
||||
@ -61,6 +62,7 @@ bool PlayerInfo::hasCustomMainHero() const
|
||||
|
||||
EventCondition::EventCondition(EWinLoseType condition):
|
||||
object(nullptr),
|
||||
metaType(EMetaclass::INVALID),
|
||||
value(-1),
|
||||
objectType(-1),
|
||||
objectSubtype(-1),
|
||||
@ -71,6 +73,7 @@ EventCondition::EventCondition(EWinLoseType condition):
|
||||
|
||||
EventCondition::EventCondition(EWinLoseType condition, si32 value, si32 objectType, int3 position):
|
||||
object(nullptr),
|
||||
metaType(EMetaclass::INVALID),
|
||||
value(value),
|
||||
objectType(objectType),
|
||||
objectSubtype(-1),
|
||||
@ -78,6 +81,12 @@ EventCondition::EventCondition(EWinLoseType condition, si32 value, si32 objectTy
|
||||
condition(condition)
|
||||
{}
|
||||
|
||||
void Rumor::serializeJson(JsonSerializeFormat & handler)
|
||||
{
|
||||
handler.serializeString("name", name);
|
||||
handler.serializeString("text", text);
|
||||
}
|
||||
|
||||
DisposedHero::DisposedHero() : heroId(0), portrait(255), players(0)
|
||||
{
|
||||
|
||||
@ -503,22 +512,26 @@ void CMap::checkForObjectives()
|
||||
{
|
||||
switch (cond.condition)
|
||||
{
|
||||
break; case EventCondition::HAVE_ARTIFACT:
|
||||
case EventCondition::HAVE_ARTIFACT:
|
||||
boost::algorithm::replace_first(event.onFulfill, "%s", VLC->arth->artifacts[cond.objectType]->Name());
|
||||
break;
|
||||
|
||||
break; case EventCondition::HAVE_CREATURES:
|
||||
case EventCondition::HAVE_CREATURES:
|
||||
boost::algorithm::replace_first(event.onFulfill, "%s", VLC->creh->creatures[cond.objectType]->nameSing);
|
||||
boost::algorithm::replace_first(event.onFulfill, "%d", boost::lexical_cast<std::string>(cond.value));
|
||||
break;
|
||||
|
||||
break; case EventCondition::HAVE_RESOURCES:
|
||||
case EventCondition::HAVE_RESOURCES:
|
||||
boost::algorithm::replace_first(event.onFulfill, "%s", VLC->generaltexth->restypes[cond.objectType]);
|
||||
boost::algorithm::replace_first(event.onFulfill, "%d", boost::lexical_cast<std::string>(cond.value));
|
||||
break;
|
||||
|
||||
break; case EventCondition::HAVE_BUILDING:
|
||||
case EventCondition::HAVE_BUILDING:
|
||||
if (isInTheMap(cond.position))
|
||||
cond.object = getObjectiveObjectFrom(cond.position, Obj::TOWN);
|
||||
break;
|
||||
|
||||
break; case EventCondition::CONTROL:
|
||||
case EventCondition::CONTROL:
|
||||
if (isInTheMap(cond.position))
|
||||
cond.object = getObjectiveObjectFrom(cond.position, Obj::EObj(cond.objectType));
|
||||
|
||||
@ -531,8 +544,9 @@ void CMap::checkForObjectives()
|
||||
if (hero)
|
||||
boost::algorithm::replace_first(event.onFulfill, "%s", hero->name);
|
||||
}
|
||||
break;
|
||||
|
||||
break; case EventCondition::DESTROY:
|
||||
case EventCondition::DESTROY:
|
||||
if (isInTheMap(cond.position))
|
||||
cond.object = getObjectiveObjectFrom(cond.position, Obj::EObj(cond.objectType));
|
||||
|
||||
@ -542,12 +556,22 @@ void CMap::checkForObjectives()
|
||||
if (hero)
|
||||
boost::algorithm::replace_first(event.onFulfill, "%s", hero->name);
|
||||
}
|
||||
break; case EventCondition::TRANSPORT:
|
||||
break;
|
||||
case EventCondition::TRANSPORT:
|
||||
cond.object = getObjectiveObjectFrom(cond.position, Obj::TOWN);
|
||||
break;
|
||||
//break; case EventCondition::DAYS_PASSED:
|
||||
//break; case EventCondition::IS_HUMAN:
|
||||
//break; case EventCondition::DAYS_WITHOUT_TOWN:
|
||||
//break; case EventCondition::STANDARD_WIN:
|
||||
|
||||
//TODO: support new condition format
|
||||
case EventCondition::HAVE_0:
|
||||
break;
|
||||
case EventCondition::DESTROY_0:
|
||||
break;
|
||||
case EventCondition::HAVE_BUILDING_0:
|
||||
break;
|
||||
}
|
||||
return cond;
|
||||
};
|
||||
|
@ -68,16 +68,22 @@ struct DLL_LINKAGE PlayerInfo
|
||||
std::set<TFaction> allowedFactions;
|
||||
bool isFactionRandom;
|
||||
|
||||
si32 mainCustomHeroPortrait; /// The default value is -1.
|
||||
///main hero instance (VCMI maps only)
|
||||
std::string mainHeroInstance;
|
||||
/// Player has a random main hero
|
||||
bool hasRandomHero;
|
||||
/// The default value is -1.
|
||||
si32 mainCustomHeroPortrait;
|
||||
std::string mainCustomHeroName;
|
||||
si32 mainCustomHeroId; /// ID of custom hero (only if portrait and hero name are set, otherwise unpredicted value), -1 if none (not always -1)
|
||||
/// ID of custom hero (only if portrait and hero name are set, otherwise unpredicted value), -1 if none (not always -1)
|
||||
si32 mainCustomHeroId;
|
||||
|
||||
std::vector<SHeroName> heroesNames; /// list of placed heroes on the map
|
||||
bool hasMainTown; /// The default value is false.
|
||||
bool generateHeroAtMainTown; /// The default value is false.
|
||||
int3 posOfMainTown;
|
||||
TeamID team; /// The default value NO_TEAM
|
||||
bool hasRandomHero; /// Player has a random hero
|
||||
|
||||
|
||||
bool generateHero; /// Unused.
|
||||
si32 p7; /// Unknown and unused.
|
||||
@ -91,6 +97,11 @@ struct DLL_LINKAGE PlayerInfo
|
||||
h & p7 & hasRandomHero & mainCustomHeroId & canHumanPlay & canComputerPlay & aiTactic & allowedFactions & isFactionRandom &
|
||||
mainCustomHeroPortrait & mainCustomHeroName & heroesNames & hasMainTown & generateHeroAtMainTown &
|
||||
posOfMainTown & team & generateHero;
|
||||
|
||||
if(version >= 770)
|
||||
{
|
||||
h & mainHeroInstance;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -124,6 +135,7 @@ struct DLL_LINKAGE EventCondition
|
||||
EventCondition(EWinLoseType condition, si32 value, si32 objectType, int3 position = int3(-1, -1, -1));
|
||||
|
||||
const CGObjectInstance * object; // object that was at specified position or with instance name on start
|
||||
EMetaclass metaType;
|
||||
si32 value;
|
||||
si32 objectType;
|
||||
si32 objectSubtype;
|
||||
@ -144,6 +156,8 @@ struct DLL_LINKAGE EventCondition
|
||||
h & objectSubtype;
|
||||
h & objectInstanceName;
|
||||
}
|
||||
if(version >= 770)
|
||||
h & metaType;
|
||||
}
|
||||
};
|
||||
|
||||
@ -203,11 +217,16 @@ struct DLL_LINKAGE Rumor
|
||||
std::string name;
|
||||
std::string text;
|
||||
|
||||
Rumor() = default;
|
||||
~Rumor() = default;
|
||||
|
||||
template <typename Handler>
|
||||
void serialize(Handler & h, const int version)
|
||||
{
|
||||
h & name & text;
|
||||
}
|
||||
|
||||
void serializeJson(JsonSerializeFormat & handler);
|
||||
};
|
||||
|
||||
/// The disposed hero struct describes which hero can be hired from which player.
|
||||
|
@ -247,9 +247,9 @@ void CMapEditManager::drawRoad(ERoadType::ERoadType roadType, CRandomGenerator*
|
||||
}
|
||||
|
||||
|
||||
void CMapEditManager::insertObject(CGObjectInstance * obj, const int3 & pos)
|
||||
void CMapEditManager::insertObject(CGObjectInstance * obj)
|
||||
{
|
||||
execute(make_unique<CInsertObjectOperation>(map, obj, pos));
|
||||
execute(make_unique<CInsertObjectOperation>(map, obj));
|
||||
}
|
||||
|
||||
void CMapEditManager::execute(std::unique_ptr<CMapOperation> && operation)
|
||||
@ -422,7 +422,7 @@ CTerrainViewPatternConfig::CTerrainViewPatternConfig()
|
||||
flipPattern(terGroupPattern, i); //FIXME: we flip in place - doesn't make much sense now, but used to work
|
||||
terrainViewPatternFlips.push_back(terGroupPattern);
|
||||
}
|
||||
terrainViewPatterns[terGroup].push_back(terrainViewPatternFlips);
|
||||
terrainViewPatterns[terGroup].push_back(terrainViewPatternFlips);
|
||||
}
|
||||
}
|
||||
else if(i == 1)
|
||||
@ -1069,15 +1069,14 @@ std::string CClearTerrainOperation::getLabel() const
|
||||
return "Clear Terrain";
|
||||
}
|
||||
|
||||
CInsertObjectOperation::CInsertObjectOperation(CMap * map, CGObjectInstance * obj, const int3 & pos)
|
||||
: CMapOperation(map), pos(pos), obj(obj)
|
||||
CInsertObjectOperation::CInsertObjectOperation(CMap * map, CGObjectInstance * obj)
|
||||
: CMapOperation(map), obj(obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CInsertObjectOperation::execute()
|
||||
{
|
||||
obj->pos = pos;
|
||||
obj->id = ObjectInstanceID(map->objects.size());
|
||||
|
||||
boost::format fmt("%s_%d");
|
||||
|
@ -119,10 +119,10 @@ public:
|
||||
static const int FLIP_PATTERN_VERTICAL = 2;
|
||||
static const int FLIP_PATTERN_BOTH = 3;
|
||||
|
||||
protected:
|
||||
protected:
|
||||
MapRect extendTileAround(const int3 & centerPos) const;
|
||||
MapRect extendTileAroundSafely(const int3 & centerPos) const; /// doesn't exceed map size
|
||||
|
||||
MapRect extendTileAroundSafely(const int3 & centerPos) const; /// doesn't exceed map size
|
||||
|
||||
CMap * map;
|
||||
};
|
||||
|
||||
@ -170,11 +170,11 @@ public:
|
||||
|
||||
/// Draws terrain at the current terrain selection. The selection will be cleared automatically.
|
||||
void drawTerrain(ETerrainType terType, CRandomGenerator * gen = nullptr);
|
||||
|
||||
|
||||
/// Draws roads at the current terrain selection. The selection will be cleared automatically.
|
||||
void drawRoad(ERoadType::ERoadType roadType, CRandomGenerator * gen = nullptr);
|
||||
|
||||
void insertObject(CGObjectInstance * obj, const int3 & pos);
|
||||
|
||||
void insertObject(CGObjectInstance * obj);
|
||||
|
||||
CTerrainSelection & getTerrainSelection();
|
||||
CObjectSelection & getObjectSelection();
|
||||
@ -267,7 +267,7 @@ struct DLL_LINKAGE TerrainViewPattern
|
||||
/// Optional. A rule can have points. Patterns may have a minimum count of points to reach to be successful.
|
||||
int points;
|
||||
|
||||
private:
|
||||
private:
|
||||
bool standardRule;
|
||||
bool anyRule;
|
||||
bool dirtRule;
|
||||
@ -421,7 +421,7 @@ private:
|
||||
class CInsertObjectOperation : public CMapOperation
|
||||
{
|
||||
public:
|
||||
CInsertObjectOperation(CMap * map, CGObjectInstance * obj, const int3 & pos);
|
||||
CInsertObjectOperation(CMap * map, CGObjectInstance * obj);
|
||||
|
||||
void execute() override;
|
||||
void undo() override;
|
||||
@ -429,6 +429,5 @@ public:
|
||||
std::string getLabel() const override;
|
||||
|
||||
private:
|
||||
int3 pos;
|
||||
CGObjectInstance * obj;
|
||||
};
|
||||
|
@ -130,6 +130,7 @@ void CMapLoaderH3M::init()
|
||||
}
|
||||
}
|
||||
map->calculateGuardingGreaturePositions();
|
||||
afterRead();
|
||||
}
|
||||
|
||||
void CMapLoaderH3M::readHeader()
|
||||
@ -1322,7 +1323,8 @@ void CMapLoaderH3M::readObjects()
|
||||
case Obj::RANDOM_DWELLING_LVL: //same as castle, fixed level
|
||||
case Obj::RANDOM_DWELLING_FACTION: //level range, fixed faction
|
||||
{
|
||||
nobj = new CGDwelling();
|
||||
auto dwelling = new CGDwelling();
|
||||
nobj = dwelling;
|
||||
CSpecObjInfo * spec = nullptr;
|
||||
switch(objTempl.id)
|
||||
{
|
||||
@ -1330,18 +1332,31 @@ void CMapLoaderH3M::readObjects()
|
||||
break; case Obj::RANDOM_DWELLING_LVL: spec = new CCreGenAsCastleInfo();
|
||||
break; case Obj::RANDOM_DWELLING_FACTION: spec = new CCreGenLeveledInfo();
|
||||
}
|
||||
spec->owner = dwelling;
|
||||
|
||||
spec->player = PlayerColor(reader.readUInt32());
|
||||
nobj->setOwner(PlayerColor(reader.readUInt32()));
|
||||
|
||||
//216 and 217
|
||||
if (auto castleSpec = dynamic_cast<CCreGenAsCastleInfo *>(spec))
|
||||
{
|
||||
castleSpec->identifier = reader.readUInt32();
|
||||
castleSpec->instanceId = "";
|
||||
castleSpec->identifier = reader.readUInt32();
|
||||
if(!castleSpec->identifier)
|
||||
{
|
||||
castleSpec->asCastle = false;
|
||||
castleSpec->castles[0] = reader.readUInt8();
|
||||
castleSpec->castles[1] = reader.readUInt8();
|
||||
const int MASK_SIZE = 8;
|
||||
ui8 mask[2];
|
||||
mask[0] = reader.readUInt8();
|
||||
mask[1] = reader.readUInt8();
|
||||
|
||||
castleSpec->allowedFactions.clear();
|
||||
castleSpec->allowedFactions.resize(VLC->townh->factions.size(), false);
|
||||
|
||||
for(int i = 0; i < MASK_SIZE; i++)
|
||||
castleSpec->allowedFactions[i] = ((mask[0] & (1 << i))>0);
|
||||
|
||||
for(int i = 0; i < (GameConstants::F_NUMBER-MASK_SIZE); i++)
|
||||
castleSpec->allowedFactions[i+MASK_SIZE] = ((mask[1] & (1 << i))>0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1355,8 +1370,7 @@ void CMapLoaderH3M::readObjects()
|
||||
lvlSpec->minLevel = std::max(reader.readUInt8(), ui8(1));
|
||||
lvlSpec->maxLevel = std::min(reader.readUInt8(), ui8(7));
|
||||
}
|
||||
nobj->setOwner(spec->player);
|
||||
static_cast<CGDwelling *>(nobj)->info = spec;
|
||||
dwelling->info = spec;
|
||||
break;
|
||||
}
|
||||
case Obj::QUEST_GUARD:
|
||||
@ -1819,9 +1833,9 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
|
||||
|
||||
switch(guard->quest->missionType)
|
||||
{
|
||||
case 0:
|
||||
case CQuest::MISSION_NONE:
|
||||
return;
|
||||
case 2:
|
||||
case CQuest::MISSION_PRIMARY_STAT:
|
||||
{
|
||||
guard->quest->m2stats.resize(4);
|
||||
for(int x = 0; x < 4; ++x)
|
||||
@ -1830,14 +1844,14 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
case 4:
|
||||
case CQuest::MISSION_LEVEL:
|
||||
case CQuest::MISSION_KILL_HERO:
|
||||
case CQuest::MISSION_KILL_CREATURE:
|
||||
{
|
||||
guard->quest->m13489val = reader.readUInt32();
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
case CQuest::MISSION_ART:
|
||||
{
|
||||
int artNumber = reader.readUInt8();
|
||||
for(int yy = 0; yy < artNumber; ++yy)
|
||||
@ -1848,7 +1862,7 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
case CQuest::MISSION_ARMY:
|
||||
{
|
||||
int typeNumber = reader.readUInt8();
|
||||
guard->quest->m6creatures.resize(typeNumber);
|
||||
@ -1859,7 +1873,7 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
case CQuest::MISSION_RESOURCES:
|
||||
{
|
||||
guard->quest->m7resources.resize(7);
|
||||
for(int x = 0; x < 7; ++x)
|
||||
@ -1868,8 +1882,8 @@ void CMapLoaderH3M::readQuest(IQuestObject * guard)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
case 9:
|
||||
case CQuest::MISSION_HERO:
|
||||
case CQuest::MISSION_PLAYER:
|
||||
{
|
||||
guard->quest->m13489val = reader.readUInt8();
|
||||
break;
|
||||
@ -2134,7 +2148,6 @@ void CMapLoaderH3M::readMessageAndGuards(std::string& message, CCreatureSet* gua
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CMapLoaderH3M::readSpells(std::set<SpellID>& dest)
|
||||
{
|
||||
readBitmask(dest,9,GameConstants::SPELLS_QUANTITY,false);
|
||||
@ -2149,8 +2162,8 @@ void CMapLoaderH3M::readResourses(TResources& resources)
|
||||
}
|
||||
}
|
||||
|
||||
template <class Indenifier>
|
||||
void CMapLoaderH3M::readBitmask(std::set<Indenifier>& dest, const int byteCount, const int limit, bool negate)
|
||||
template <class Indentifier>
|
||||
void CMapLoaderH3M::readBitmask(std::set<Indentifier>& dest, const int byteCount, const int limit, bool negate)
|
||||
{
|
||||
std::vector<bool> temp;
|
||||
temp.resize(limit,true);
|
||||
@ -2160,18 +2173,11 @@ void CMapLoaderH3M::readBitmask(std::set<Indenifier>& dest, const int byteCount,
|
||||
{
|
||||
if(temp[i])
|
||||
{
|
||||
dest.insert(static_cast<Indenifier>(i));
|
||||
dest.insert(static_cast<Indentifier>(i));
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// dest.erase(static_cast<Indenifier>(i));
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CMapLoaderH3M::readBitmask(std::vector<bool>& dest, const int byteCount, const int limit, bool negate)
|
||||
{
|
||||
for(int byte = 0; byte < byteCount; ++byte)
|
||||
@ -2189,7 +2195,6 @@ void CMapLoaderH3M::readBitmask(std::vector<bool>& dest, const int byteCount, co
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ui8 CMapLoaderH3M::reverse(ui8 arg)
|
||||
{
|
||||
ui8 ret = 0;
|
||||
@ -2202,3 +2207,33 @@ ui8 CMapLoaderH3M::reverse(ui8 arg)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void CMapLoaderH3M::afterRead()
|
||||
{
|
||||
//convert main town positions for all players to actual object position, in H3M it is position of active tile
|
||||
|
||||
for(auto & p : map->players)
|
||||
{
|
||||
int3 posOfMainTown = p.posOfMainTown;
|
||||
if(posOfMainTown.valid() && map->isInTheMap(posOfMainTown))
|
||||
{
|
||||
const TerrainTile & t = map->getTile(posOfMainTown);
|
||||
|
||||
const CGObjectInstance * mainTown = nullptr;
|
||||
|
||||
for(auto obj : t.visitableObjects)
|
||||
{
|
||||
if(obj->ID = Obj::TOWN)
|
||||
{
|
||||
mainTown = obj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(mainTown == nullptr)
|
||||
continue;
|
||||
|
||||
p.posOfMainTown = posOfMainTown + mainTown->getVisitableOffset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -242,6 +242,8 @@ private:
|
||||
return p;
|
||||
}
|
||||
|
||||
void afterRead();
|
||||
|
||||
/** List of templates loaded from the map, used on later stage to create
|
||||
* objects but not needed for fully functional CMap */
|
||||
std::vector<ObjectTemplate> templates;
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "../filesystem/COutputStream.h"
|
||||
#include "CMap.h"
|
||||
#include "../CModHandler.h"
|
||||
#include "../CCreatureHandler.h"
|
||||
#include "../CHeroHandler.h"
|
||||
#include "../CTownHandler.h"
|
||||
#include "../VCMI_Lib.h"
|
||||
@ -28,6 +29,65 @@
|
||||
#include "../serializer/JsonDeserializer.h"
|
||||
#include "../serializer/JsonSerializer.h"
|
||||
|
||||
class MapObjectResolver: public IInstanceResolver
|
||||
{
|
||||
public:
|
||||
MapObjectResolver(const CMapFormatJson * owner_);
|
||||
|
||||
si32 decode (const std::string & identifier) const override;
|
||||
std::string encode(si32 identifier) const override;
|
||||
|
||||
private:
|
||||
const CMapFormatJson * owner;
|
||||
};
|
||||
|
||||
MapObjectResolver::MapObjectResolver(const CMapFormatJson * owner_):
|
||||
owner(owner_)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
si32 MapObjectResolver::decode(const std::string & identifier) const
|
||||
{
|
||||
//always decode as ObjectInstanceID
|
||||
|
||||
auto it = owner->map->instanceNames.find(identifier);
|
||||
|
||||
if(it != owner->map->instanceNames.end())
|
||||
{
|
||||
return (*it).second->id.getNum();
|
||||
}
|
||||
else
|
||||
{
|
||||
logGlobal->errorStream() << "Object not found: " << identifier;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
std::string MapObjectResolver::encode(si32 identifier) const
|
||||
{
|
||||
ObjectInstanceID id;
|
||||
|
||||
//use h3m questIdentifiers if they are present
|
||||
if(owner->map->questIdentifierToId.empty())
|
||||
{
|
||||
id = ObjectInstanceID(identifier);
|
||||
}
|
||||
else
|
||||
{
|
||||
id = owner->map->questIdentifierToId[identifier];
|
||||
}
|
||||
|
||||
si32 oid = id.getNum();
|
||||
if(oid < 0 || oid >= owner->map->objects.size())
|
||||
{
|
||||
logGlobal->errorStream() << "Cannot get object with id " << oid;
|
||||
return "";
|
||||
}
|
||||
|
||||
return owner->map->objects[oid]->instanceName;
|
||||
}
|
||||
|
||||
namespace HeaderDetail
|
||||
{
|
||||
static const ui8 difficultyDefault = 1;//normal
|
||||
@ -40,6 +100,12 @@ namespace HeaderDetail
|
||||
"EXPERT",
|
||||
"IMPOSSIBLE"
|
||||
};
|
||||
|
||||
static const std::vector<std::string> canPlayMap =
|
||||
{
|
||||
"AIOnly",
|
||||
"PlayerOrAI"
|
||||
};
|
||||
}
|
||||
|
||||
namespace TriggeredEventsDetail
|
||||
@ -53,12 +119,67 @@ namespace TriggeredEventsDetail
|
||||
"have_0", "haveBuilding_0", "destroy_0"
|
||||
};
|
||||
|
||||
|
||||
static const std::array<std::string, 2> typeNames = { "victory", "defeat" };
|
||||
|
||||
static EMetaclass decodeMetaclass(const std::string & source)
|
||||
{
|
||||
if(source == "")
|
||||
return EMetaclass::INVALID;
|
||||
auto rawId = vstd::find_pos(NMetaclass::names, source);
|
||||
|
||||
if(rawId >= 0)
|
||||
return (EMetaclass)rawId;
|
||||
else
|
||||
return EMetaclass::INVALID;
|
||||
}
|
||||
|
||||
static std::string encodeIdentifier(EMetaclass metaType, si32 type)
|
||||
{
|
||||
std::string metaclassName = NMetaclass::names[(int)metaType];
|
||||
std::string identifier = "";
|
||||
|
||||
switch(metaType)
|
||||
{
|
||||
case EMetaclass::ARTIFACT:
|
||||
{
|
||||
identifier = CArtHandler::encodeArtifact(type);
|
||||
}
|
||||
break;
|
||||
case EMetaclass::CREATURE:
|
||||
{
|
||||
identifier = CCreatureHandler::encodeCreature(type);
|
||||
}
|
||||
break;
|
||||
case EMetaclass::OBJECT:
|
||||
{
|
||||
//TODO
|
||||
std::set<si32> subtypes = VLC->objtypeh->knownSubObjects(type);
|
||||
if(!subtypes.empty())
|
||||
{
|
||||
si32 subtype = *subtypes.begin();
|
||||
auto handler = VLC->objtypeh->getHandlerFor(type, subtype);
|
||||
identifier = handler->typeName;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EMetaclass::RESOURCE:
|
||||
{
|
||||
identifier = GameConstants::RESOURCE_NAMES[type];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
logGlobal->error("Unsupported metaclass %s for event condition", metaclassName);
|
||||
return "";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return VLC->modh->makeFullIdentifier("", metaclassName, identifier);
|
||||
}
|
||||
|
||||
static EventCondition JsonToCondition(const JsonNode & node)
|
||||
{
|
||||
//todo: support of new condition format
|
||||
EventCondition event;
|
||||
|
||||
const auto & conditionName = node.Vector()[0].String();
|
||||
@ -66,24 +187,58 @@ namespace TriggeredEventsDetail
|
||||
auto pos = vstd::find_pos(conditionNames, conditionName);
|
||||
|
||||
event.condition = EventCondition::EWinLoseType(pos);
|
||||
|
||||
if (node.Vector().size() > 1)
|
||||
{
|
||||
const JsonNode & data = node.Vector()[1];
|
||||
if (data["type"].getType() == JsonNode::DATA_STRING)
|
||||
|
||||
switch (event.condition)
|
||||
{
|
||||
auto identifier = VLC->modh->identifiers.getIdentifier(data["type"]);
|
||||
if(identifier)
|
||||
event.objectType = identifier.get();
|
||||
else
|
||||
throw std::runtime_error("Identifier resolution failed in event condition");
|
||||
case EventCondition::HAVE_0:
|
||||
case EventCondition::DESTROY_0:
|
||||
{
|
||||
//todo: support subtypes
|
||||
|
||||
std::string fullIdentifier = data["type"].String(), metaTypeName = "", scope = "" , identifier = "";
|
||||
CModHandler::parseIdentifier(fullIdentifier, scope, metaTypeName, identifier);
|
||||
|
||||
event.metaType = decodeMetaclass(metaTypeName);
|
||||
|
||||
auto type = VLC->modh->identifiers.getIdentifier("core", fullIdentifier, false);
|
||||
|
||||
if(type)
|
||||
event.objectType = type.get();
|
||||
event.objectInstanceName = data["object"].String();
|
||||
if(data["value"].isNumber())
|
||||
event.value = data["value"].Integer();
|
||||
}
|
||||
break;
|
||||
case EventCondition::HAVE_BUILDING_0:
|
||||
{
|
||||
//todo: support of new condition format HAVE_BUILDING_0
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
//old format
|
||||
if (data["type"].getType() == JsonNode::DATA_STRING)
|
||||
{
|
||||
auto identifier = VLC->modh->identifiers.getIdentifier(data["type"]);
|
||||
if(identifier)
|
||||
event.objectType = identifier.get();
|
||||
else
|
||||
throw std::runtime_error("Identifier resolution failed in event condition");
|
||||
}
|
||||
|
||||
if (data["type"].isNumber())
|
||||
event.objectType = data["type"].Float();
|
||||
|
||||
if (!data["value"].isNull())
|
||||
event.value = data["value"].Float();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (data["type"].getType() == JsonNode::DATA_FLOAT)
|
||||
event.objectType = data["type"].Float();
|
||||
|
||||
if (!data["value"].isNull())
|
||||
event.value = data["value"].Float();
|
||||
|
||||
if (!data["position"].isNull())
|
||||
{
|
||||
auto & position = data["position"].Vector();
|
||||
@ -91,21 +246,15 @@ namespace TriggeredEventsDetail
|
||||
event.position.y = position.at(1).Float();
|
||||
event.position.z = position.at(2).Float();
|
||||
}
|
||||
|
||||
// if(!data["subtype"].isNull())
|
||||
// {
|
||||
// //todo
|
||||
// }
|
||||
// event.objectInstanceName = data["object"].String();
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
static JsonNode ConditionToJson(const EventCondition& event)
|
||||
static JsonNode ConditionToJson(const EventCondition & event)
|
||||
{
|
||||
JsonNode json;
|
||||
|
||||
JsonVector& asVector = json.Vector();
|
||||
JsonVector & asVector = json.Vector();
|
||||
|
||||
JsonNode condition;
|
||||
condition.String() = conditionNames.at(event.condition);
|
||||
@ -113,15 +262,41 @@ namespace TriggeredEventsDetail
|
||||
|
||||
JsonNode data;
|
||||
|
||||
//todo: save identifier
|
||||
switch (event.condition)
|
||||
{
|
||||
case EventCondition::HAVE_0:
|
||||
case EventCondition::DESTROY_0:
|
||||
{
|
||||
//todo: support subtypes
|
||||
|
||||
if(event.objectType != -1)
|
||||
data["type"].Float() = event.objectType;
|
||||
if(event.metaType != EMetaclass::INVALID)
|
||||
data["type"].String() = encodeIdentifier(event.metaType, event.objectType);
|
||||
|
||||
if(event.value != -1)
|
||||
data["value"].Float() = event.value;
|
||||
if(event.value > 0)
|
||||
data["value"].Integer() = event.value;
|
||||
|
||||
if(event.position != int3(-1,-1,-1))
|
||||
if(event.objectInstanceName != "")
|
||||
data["object"].String() = event.objectInstanceName;
|
||||
}
|
||||
break;
|
||||
case EventCondition::HAVE_BUILDING_0:
|
||||
{
|
||||
//todo: support of new condition format HAVE_BUILDING_0
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
//old format
|
||||
if(event.objectType != -1)
|
||||
data["type"].Integer() = event.objectType;
|
||||
|
||||
if(event.value != -1)
|
||||
data["value"].Integer() = event.value;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(event.position != int3(-1, -1, -1))
|
||||
{
|
||||
auto & position = data["position"].Vector();
|
||||
position.resize(3);
|
||||
@ -153,7 +328,7 @@ namespace TerrainDetail
|
||||
"", "rw", "ri", "rm", "rl"
|
||||
};
|
||||
|
||||
static const std::array<char, 10> flipCodes =
|
||||
static const std::array<char, 4> flipCodes =
|
||||
{
|
||||
'_', '-', '|', '+'
|
||||
};
|
||||
@ -166,6 +341,12 @@ const int CMapFormatJson::VERSION_MINOR = 0;
|
||||
const std::string CMapFormatJson::HEADER_FILE_NAME = "header.json";
|
||||
const std::string CMapFormatJson::OBJECTS_FILE_NAME = "objects.json";
|
||||
|
||||
CMapFormatJson::CMapFormatJson():
|
||||
mapObjectResolver(make_unique<MapObjectResolver>(this))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMapFormatJson::serializeAllowedFactions(JsonSerializeFormat & handler, std::set<TFaction> & value)
|
||||
{
|
||||
//TODO: unify allowed factions with others - make them std::vector<bool>
|
||||
@ -196,14 +377,20 @@ void CMapFormatJson::serializeHeader(JsonSerializeFormat & handler)
|
||||
{
|
||||
handler.serializeString("name", mapHeader->name);
|
||||
handler.serializeString("description", mapHeader->description);
|
||||
handler.serializeNumeric("heroLevelLimit", mapHeader->levelLimit);
|
||||
handler.serializeInt("heroLevelLimit", mapHeader->levelLimit, 0);
|
||||
|
||||
//todo: support arbitrary percentage
|
||||
handler.serializeNumericEnum("difficulty", HeaderDetail::difficultyMap, HeaderDetail::difficultyDefault, mapHeader->difficulty);
|
||||
handler.serializeEnum("difficulty", mapHeader->difficulty, HeaderDetail::difficultyMap);
|
||||
|
||||
serializePlayerInfo(handler);
|
||||
|
||||
handler.serializeLIC("allowedHeroes", &CHeroHandler::decodeHero, &CHeroHandler::encodeHero, VLC->heroh->getDefaultAllowed(), mapHeader->allowedHeroes);
|
||||
|
||||
handler.serializeString("victoryString", mapHeader->victoryMessage);
|
||||
handler.serializeInt("victoryIconIndex", mapHeader->victoryIconIndex);
|
||||
|
||||
handler.serializeString("defeatString", mapHeader->defeatMessage);
|
||||
handler.serializeInt("defeatIconIndex", mapHeader->defeatIconIndex);
|
||||
}
|
||||
|
||||
void CMapFormatJson::serializePlayerInfo(JsonSerializeFormat & handler)
|
||||
@ -235,48 +422,100 @@ void CMapFormatJson::serializePlayerInfo(JsonSerializeFormat & handler)
|
||||
|
||||
serializeAllowedFactions(handler, info.allowedFactions);
|
||||
|
||||
handler.serializeEnum("canPlay", "PlayerOrAI", "AIOnly", info.canHumanPlay);
|
||||
handler.serializeEnum("canPlay", info.canHumanPlay, HeaderDetail::canPlayMap);
|
||||
|
||||
//saving whole structure only if position is valid
|
||||
if(!handler.saving || info.posOfMainTown.valid())
|
||||
{
|
||||
auto mainTown = handler.enterStruct("mainTown");
|
||||
handler.serializeBool("generateHero", info.generateHeroAtMainTown);
|
||||
handler.serializeNumeric("x", info.posOfMainTown.x);
|
||||
handler.serializeNumeric("y", info.posOfMainTown.y);
|
||||
handler.serializeNumeric("l", info.posOfMainTown.z);
|
||||
handler.serializeInt("x", info.posOfMainTown.x, -1);
|
||||
handler.serializeInt("y", info.posOfMainTown.y, -1);
|
||||
handler.serializeInt("l", info.posOfMainTown.z, -1);
|
||||
}
|
||||
if(!handler.saving)
|
||||
{
|
||||
info.hasMainTown = info.posOfMainTown.valid();
|
||||
}
|
||||
|
||||
//mainHero
|
||||
|
||||
//mainHeroPortrait
|
||||
|
||||
//mainCustomHeroName
|
||||
handler.serializeString("mainHero", info.mainHeroInstance);//must be before "heroes"
|
||||
|
||||
//heroes
|
||||
if(handler.saving)
|
||||
{
|
||||
//auto heroes = playerData.enterStruct("heroes");
|
||||
//ignoring heroesNames and saving from actual map objects
|
||||
//TODO: optimize
|
||||
for(auto & obj : map->objects)
|
||||
{
|
||||
if((obj->ID == Obj::HERO || obj->ID == Obj::RANDOM_HERO) && obj->tempOwner == PlayerColor(player))
|
||||
{
|
||||
CGHeroInstance * hero = dynamic_cast<CGHeroInstance *>(obj.get());
|
||||
|
||||
auto heroes = playerData.enterStruct("heroes");
|
||||
if(hero)
|
||||
{
|
||||
auto heroData = heroes.enterStruct(hero->instanceName);
|
||||
heroData->serializeString("name", hero->name);
|
||||
|
||||
if(hero->ID == Obj::HERO)
|
||||
{
|
||||
if(hero->type)
|
||||
{
|
||||
handler.serializeString("type", hero->type->identifier);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto temp = VLC->heroh->heroes[hero->subID]->identifier;
|
||||
handler.serializeString("type", temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
info.heroesNames.clear();
|
||||
|
||||
auto heroes = playerData.enterStruct("heroes");
|
||||
|
||||
for(const auto & hero : handler.getCurrent().Struct())
|
||||
{
|
||||
const JsonNode & data = hero.second;
|
||||
const std::string instanceName = hero.first;
|
||||
|
||||
SHeroName hname;
|
||||
hname.heroId = -1;
|
||||
std::string rawId = data["type"].String();
|
||||
|
||||
if(rawId != "")
|
||||
{
|
||||
hname.heroId = VLC->heroh->decodeHero(rawId);
|
||||
}
|
||||
|
||||
hname.heroName = data["name"].String();
|
||||
|
||||
if(instanceName == info.mainHeroInstance)
|
||||
{
|
||||
//this is main hero
|
||||
info.mainCustomHeroName = hname.heroName;
|
||||
info.hasRandomHero = (hname.heroId == -1);
|
||||
info.mainCustomHeroId = hname.heroId;
|
||||
info.mainCustomHeroPortrait = -1;
|
||||
//todo:mainHeroPortrait
|
||||
}
|
||||
|
||||
info.heroesNames.push_back(hname);
|
||||
}
|
||||
}
|
||||
|
||||
if(!handler.saving)
|
||||
{
|
||||
//isFactionRandom indicates that player may select faction, depends on towns & heroes
|
||||
// true if main town is random and generateHeroAtMainTown==true
|
||||
// or main hero is random
|
||||
//TODO: recheck mechanics
|
||||
info.isFactionRandom = info.allowedFactions.size() > 1;
|
||||
}
|
||||
handler.serializeBool("randomFaction", info.isFactionRandom);
|
||||
}
|
||||
}
|
||||
|
||||
void CMapFormatJson::readTeams(JsonDeserializer & handler)
|
||||
{
|
||||
auto teams = handler.enterStruct("teams");
|
||||
auto teams = handler.enterArray("teams");
|
||||
const JsonNode & src = teams.get();
|
||||
|
||||
if(src.getType() != JsonNode::DATA_VECTOR)
|
||||
@ -287,12 +526,8 @@ void CMapFormatJson::readTeams(JsonDeserializer & handler)
|
||||
|
||||
mapHeader->howManyTeams = 0;
|
||||
for(int i = 0; i < PlayerColor::PLAYER_LIMIT_I; i++)
|
||||
{
|
||||
if(mapHeader->players[i].canComputerPlay || mapHeader->players[i].canHumanPlay)
|
||||
{
|
||||
mapHeader->players[i].team = TeamID(mapHeader->howManyTeams++);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -300,34 +535,22 @@ void CMapFormatJson::readTeams(JsonDeserializer & handler)
|
||||
mapHeader->howManyTeams = srcVector.size();
|
||||
|
||||
for(int team = 0; team < mapHeader->howManyTeams; team++)
|
||||
{
|
||||
for(const JsonNode & playerData : srcVector[team].Vector())
|
||||
{
|
||||
PlayerColor player = PlayerColor(vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, playerData.String()));
|
||||
if(player.isValidPlayer())
|
||||
{
|
||||
if(mapHeader->players[player.getNum()].canAnyonePlay())
|
||||
{
|
||||
mapHeader->players[player.getNum()].team = TeamID(team);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(PlayerInfo & player : mapHeader->players)
|
||||
{
|
||||
if(player.canAnyonePlay() && player.team == TeamID::NO_TEAM)
|
||||
player.team = TeamID(mapHeader->howManyTeams++);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CMapFormatJson::writeTeams(JsonSerializer & handler)
|
||||
{
|
||||
auto teams = handler.enterStruct("teams");
|
||||
JsonNode & dest = teams.get();
|
||||
std::vector<std::set<PlayerColor>> teamsData;
|
||||
|
||||
teamsData.resize(mapHeader->howManyTeams);
|
||||
@ -347,41 +570,35 @@ void CMapFormatJson::writeTeams(JsonSerializer & handler)
|
||||
return elem.size() <= 1;
|
||||
});
|
||||
|
||||
//construct output
|
||||
dest.setType(JsonNode::DATA_VECTOR);
|
||||
|
||||
for(const std::set<PlayerColor> & teamData : teamsData)
|
||||
if(!teamsData.empty())
|
||||
{
|
||||
JsonNode team(JsonNode::DATA_VECTOR);
|
||||
for(const PlayerColor & player : teamData)
|
||||
auto teams = handler.enterArray("teams");
|
||||
JsonNode & dest = teams.get();
|
||||
|
||||
//construct output
|
||||
dest.setType(JsonNode::DATA_VECTOR);
|
||||
|
||||
for(const std::set<PlayerColor> & teamData : teamsData)
|
||||
{
|
||||
JsonNode member(JsonNode::DATA_STRING);
|
||||
member.String() = GameConstants::PLAYER_COLOR_NAMES[player.getNum()];
|
||||
team.Vector().push_back(std::move(member));
|
||||
JsonNode team(JsonNode::DATA_VECTOR);
|
||||
for(const PlayerColor & player : teamData)
|
||||
{
|
||||
JsonNode member(JsonNode::DATA_STRING);
|
||||
member.String() = GameConstants::PLAYER_COLOR_NAMES[player.getNum()];
|
||||
team.Vector().push_back(std::move(member));
|
||||
}
|
||||
dest.Vector().push_back(std::move(team));
|
||||
}
|
||||
dest.Vector().push_back(std::move(team));
|
||||
}
|
||||
}
|
||||
|
||||
void CMapFormatJson::serializeTriggeredEvents(JsonSerializeFormat & handler)
|
||||
{
|
||||
handler.serializeString("victoryString", mapHeader->victoryMessage);
|
||||
handler.serializeNumeric("victoryIconIndex", mapHeader->victoryIconIndex);
|
||||
|
||||
handler.serializeString("defeatString", mapHeader->defeatMessage);
|
||||
handler.serializeNumeric("defeatIconIndex", mapHeader->defeatIconIndex);
|
||||
}
|
||||
|
||||
|
||||
void CMapFormatJson::readTriggeredEvents(JsonDeserializer & handler)
|
||||
{
|
||||
const JsonNode & input = handler.getCurrent();
|
||||
|
||||
serializeTriggeredEvents(handler);
|
||||
|
||||
mapHeader->triggeredEvents.clear();
|
||||
|
||||
for (auto & entry : input["triggeredEvents"].Struct())
|
||||
for(auto & entry : input["triggeredEvents"].Struct())
|
||||
{
|
||||
TriggeredEvent event;
|
||||
event.identifier = entry.first;
|
||||
@ -405,34 +622,138 @@ void CMapFormatJson::writeTriggeredEvents(JsonSerializer & handler)
|
||||
{
|
||||
JsonNode & output = handler.getCurrent();
|
||||
|
||||
serializeTriggeredEvents(handler);
|
||||
|
||||
JsonMap & triggeredEvents = output["triggeredEvents"].Struct();
|
||||
|
||||
for(auto event : mapHeader->triggeredEvents)
|
||||
writeTriggeredEvent(event, triggeredEvents[event.identifier]);
|
||||
}
|
||||
|
||||
void CMapFormatJson::writeTriggeredEvent(const TriggeredEvent& event, JsonNode& dest)
|
||||
void CMapFormatJson::writeTriggeredEvent(const TriggeredEvent & event, JsonNode & dest)
|
||||
{
|
||||
using namespace TriggeredEventsDetail;
|
||||
|
||||
dest["message"].String() = event.onFulfill;
|
||||
dest["description"].String() = event.description;
|
||||
if(!event.onFulfill.empty())
|
||||
dest["message"].String() = event.onFulfill;
|
||||
|
||||
if(!event.description.empty())
|
||||
dest["description"].String() = event.description;
|
||||
|
||||
dest["effect"]["type"].String() = typeNames.at(size_t(event.effect.type));
|
||||
dest["effect"]["messageToSend"].String() = event.effect.toOtherMessage;
|
||||
|
||||
if(!event.effect.toOtherMessage.empty())
|
||||
dest["effect"]["messageToSend"].String() = event.effect.toOtherMessage;
|
||||
|
||||
dest["condition"] = event.trigger.toJson(ConditionToJson);
|
||||
}
|
||||
|
||||
void CMapFormatJson::readDisposedHeroes(JsonSerializeFormat & handler)
|
||||
{
|
||||
auto definitions = handler.enterStruct("predefinedHeroes");//DisposedHeroes are part of predefinedHeroes in VCMI map format
|
||||
|
||||
JsonNode & data = handler.getCurrent();
|
||||
|
||||
for(const auto & entry : data.Struct())
|
||||
{
|
||||
HeroTypeID type(VLC->heroh->decodeHero(entry.first));
|
||||
|
||||
ui8 mask = 0;
|
||||
|
||||
for(const JsonNode & playerData : entry.second["availableFor"].Vector())
|
||||
{
|
||||
PlayerColor player = PlayerColor(vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, playerData.String()));
|
||||
if(player.isValidPlayer())
|
||||
{
|
||||
mask |= 1 << player.getNum();
|
||||
}
|
||||
}
|
||||
|
||||
if(mask != 0 && mask != GameConstants::ALL_PLAYERS && type.getNum() >= 0)
|
||||
{
|
||||
DisposedHero hero;
|
||||
|
||||
hero.heroId = type.getNum();
|
||||
hero.players = mask;
|
||||
//name and portrait are not used
|
||||
|
||||
map->disposedHeroes.push_back(hero);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CMapFormatJson::writeDisposedHeroes(JsonSerializeFormat & handler)
|
||||
{
|
||||
if(map->disposedHeroes.empty())
|
||||
return;
|
||||
|
||||
auto definitions = handler.enterStruct("predefinedHeroes");//DisposedHeroes are part of predefinedHeroes in VCMI map format
|
||||
|
||||
JsonNode & data = handler.getCurrent();
|
||||
|
||||
for(const DisposedHero & hero : map->disposedHeroes)
|
||||
{
|
||||
std::string type = VLC->heroh->encodeHero(hero.heroId);
|
||||
|
||||
JsonVector & players = data[type]["availableFor"].Vector();
|
||||
|
||||
for(int playerNum = 0; playerNum < PlayerColor::PLAYER_LIMIT_I; playerNum++)
|
||||
if((1 << playerNum) & hero.players)
|
||||
{
|
||||
JsonNode player(JsonNode::DATA_STRING);
|
||||
player.String() = GameConstants::PLAYER_COLOR_NAMES[playerNum];
|
||||
players.push_back(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CMapFormatJson::serializeRumors(JsonSerializeFormat & handler)
|
||||
{
|
||||
auto rumors = handler.enterArray("rumors");
|
||||
rumors.serializeStruct(map->rumors);
|
||||
}
|
||||
|
||||
void CMapFormatJson::serializePredefinedHeroes(JsonSerializeFormat & handler)
|
||||
{
|
||||
//todo:serializePredefinedHeroes
|
||||
|
||||
if(handler.saving)
|
||||
{
|
||||
if(!map->predefinedHeroes.empty())
|
||||
{
|
||||
auto predefinedHeroes = handler.enterStruct("predefinedHeroes");
|
||||
|
||||
for(auto & hero : map->predefinedHeroes)
|
||||
{
|
||||
auto predefinedHero = handler.enterStruct(hero->getHeroTypeName());
|
||||
|
||||
hero->serializeJsonDefinition(handler);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto predefinedHeroes = handler.enterStruct("predefinedHeroes");
|
||||
|
||||
const JsonNode & data = handler.getCurrent();
|
||||
|
||||
for(const auto & p : data.Struct())
|
||||
{
|
||||
auto predefinedHero = handler.enterStruct(p.first);
|
||||
|
||||
CGHeroInstance * hero = new CGHeroInstance();
|
||||
hero->ID = Obj::HERO;
|
||||
hero->setHeroTypeName(p.first);
|
||||
hero->serializeJsonDefinition(handler);
|
||||
|
||||
map->predefinedHeroes.push_back(hero);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CMapFormatJson::serializeOptions(JsonSerializeFormat & handler)
|
||||
{
|
||||
//rumors
|
||||
serializeRumors(handler);
|
||||
|
||||
//disposedHeroes
|
||||
|
||||
//predefinedHeroes
|
||||
serializePredefinedHeroes(handler);
|
||||
|
||||
handler.serializeLIC("allowedAbilities", &CHeroHandler::decodeSkill, &CHeroHandler::encodeSkill, VLC->heroh->getDefaultAllowedAbilities(), map->allowedAbilities);
|
||||
|
||||
@ -440,22 +761,24 @@ void CMapFormatJson::serializeOptions(JsonSerializeFormat & handler)
|
||||
|
||||
handler.serializeLIC("allowedSpells", &CSpellHandler::decodeSpell, &CSpellHandler::encodeSpell, VLC->spellh->getDefaultAllowed(), map->allowedSpell);
|
||||
|
||||
//events
|
||||
//todo:events
|
||||
}
|
||||
|
||||
void CMapFormatJson::readOptions(JsonDeserializer & handler)
|
||||
{
|
||||
readDisposedHeroes(handler);
|
||||
serializeOptions(handler);
|
||||
}
|
||||
|
||||
void CMapFormatJson::writeOptions(JsonSerializer & handler)
|
||||
{
|
||||
writeDisposedHeroes(handler);
|
||||
serializeOptions(handler);
|
||||
}
|
||||
|
||||
|
||||
///CMapPatcher
|
||||
CMapPatcher::CMapPatcher(JsonNode stream):
|
||||
CMapFormatJson(),
|
||||
input(stream)
|
||||
{
|
||||
//todo: update map patches and change this
|
||||
@ -473,13 +796,13 @@ void CMapPatcher::patchMapHeader(std::unique_ptr<CMapHeader> & header)
|
||||
|
||||
void CMapPatcher::readPatchData()
|
||||
{
|
||||
JsonDeserializer handler(input);
|
||||
JsonDeserializer handler(mapObjectResolver.get(), input);
|
||||
readTriggeredEvents(handler);
|
||||
}
|
||||
|
||||
|
||||
///CMapLoaderJson
|
||||
CMapLoaderJson::CMapLoaderJson(CInputStream * stream):
|
||||
CMapFormatJson(),
|
||||
buffer(stream),
|
||||
ioApi(new CProxyROIOApi(buffer)),
|
||||
loader("", "_", ioApi)
|
||||
@ -487,17 +810,6 @@ CMapLoaderJson::CMapLoaderJson(CInputStream * stream):
|
||||
|
||||
}
|
||||
|
||||
si32 CMapLoaderJson::getIdentifier(const std::string& type, const std::string& name)
|
||||
{
|
||||
boost::optional<si32> res = VLC->modh->identifiers.getIdentifier("core", type, name, false);
|
||||
|
||||
if(!res)
|
||||
{
|
||||
throw new std::runtime_error("Map load failed. Identifier not resolved.");
|
||||
}
|
||||
return res.get();
|
||||
}
|
||||
|
||||
std::unique_ptr<CMap> CMapLoaderJson::loadMap()
|
||||
{
|
||||
LOG_TRACE(logGlobal);
|
||||
@ -560,10 +872,10 @@ void CMapLoaderJson::readHeader(const bool complete)
|
||||
|
||||
if(fileVersionMinor > VERSION_MINOR)
|
||||
{
|
||||
logGlobal->traceStream() << "Too new map format revision: " << fileVersionMinor << ". This map should work but some of map features may be ignored.";
|
||||
logGlobal->warnStream() << "Too new map format revision: " << fileVersionMinor << ". This map should work but some of map features may be ignored.";
|
||||
}
|
||||
|
||||
JsonDeserializer handler(header);
|
||||
JsonDeserializer handler(mapObjectResolver.get(), header);
|
||||
|
||||
mapHeader->version = EMapFormat::VCMI;//todo: new version field
|
||||
|
||||
@ -586,20 +898,18 @@ void CMapLoaderJson::readHeader(const bool complete)
|
||||
|
||||
readTriggeredEvents(handler);
|
||||
|
||||
|
||||
readTeams(handler);
|
||||
//TODO: readHeader
|
||||
//TODO: check mods
|
||||
|
||||
if(complete)
|
||||
readOptions(handler);
|
||||
}
|
||||
|
||||
|
||||
void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
void CMapLoaderJson::readTerrainTile(const std::string & src, TerrainTile & tile)
|
||||
{
|
||||
using namespace TerrainDetail;
|
||||
{//terrain type
|
||||
const std::string typeCode = src.substr(0,2);
|
||||
const std::string typeCode = src.substr(0, 2);
|
||||
|
||||
int rawType = vstd::find_pos(terrainCodes, typeCode);
|
||||
|
||||
@ -616,7 +926,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
int len = pos - startPos;
|
||||
if(len<=0)
|
||||
throw new std::runtime_error("Invalid terrain view in "+src);
|
||||
const std::string rawCode = src.substr(startPos,len);
|
||||
const std::string rawCode = src.substr(startPos, len);
|
||||
tile.terView = atoi(rawCode.c_str());
|
||||
startPos+=len;
|
||||
}
|
||||
@ -631,7 +941,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
return;
|
||||
bool hasRoad = true;
|
||||
{//road type
|
||||
const std::string typeCode = src.substr(startPos,2);
|
||||
const std::string typeCode = src.substr(startPos, 2);
|
||||
startPos+=2;
|
||||
int rawType = vstd::find_pos(roadCodes, typeCode);
|
||||
if(rawType < 0)
|
||||
@ -656,7 +966,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
int len = pos - startPos;
|
||||
if(len<=0)
|
||||
throw new std::runtime_error("Invalid road dir in "+src);
|
||||
const std::string rawCode = src.substr(startPos,len);
|
||||
const std::string rawCode = src.substr(startPos, len);
|
||||
tile.roadDir = atoi(rawCode.c_str());
|
||||
startPos+=len;
|
||||
}
|
||||
@ -672,7 +982,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
return;
|
||||
if(hasRoad)
|
||||
{//river type
|
||||
const std::string typeCode = src.substr(startPos,2);
|
||||
const std::string typeCode = src.substr(startPos, 2);
|
||||
startPos+=2;
|
||||
int rawType = vstd::find_pos(riverCodes, typeCode);
|
||||
if(rawType < 0)
|
||||
@ -686,7 +996,7 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
int len = pos - startPos;
|
||||
if(len<=0)
|
||||
throw new std::runtime_error("Invalid river dir in "+src);
|
||||
const std::string rawCode = src.substr(startPos,len);
|
||||
const std::string rawCode = src.substr(startPos, len);
|
||||
tile.riverDir = atoi(rawCode.c_str());
|
||||
startPos+=len;
|
||||
}
|
||||
@ -699,9 +1009,9 @@ void CMapLoaderJson::readTerrainTile(const std::string& src, TerrainTile& tile)
|
||||
}
|
||||
}
|
||||
|
||||
void CMapLoaderJson::readTerrainLevel(const JsonNode& src, const int index)
|
||||
void CMapLoaderJson::readTerrainLevel(const JsonNode & src, const int index)
|
||||
{
|
||||
int3 pos(0,0,index);
|
||||
int3 pos(0, 0, index);
|
||||
|
||||
const JsonVector & rows = src.Vector();
|
||||
|
||||
@ -734,15 +1044,15 @@ void CMapLoaderJson::readTerrain()
|
||||
|
||||
}
|
||||
|
||||
CMapLoaderJson::MapObjectLoader::MapObjectLoader(CMapLoaderJson * _owner, JsonMap::value_type& json):
|
||||
owner(_owner), instance(nullptr),id(-1), jsonKey(json.first), configuration(json.second)
|
||||
CMapLoaderJson::MapObjectLoader::MapObjectLoader(CMapLoaderJson * _owner, JsonMap::value_type & json):
|
||||
owner(_owner), instance(nullptr), id(-1), jsonKey(json.first), configuration(json.second)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMapLoaderJson::MapObjectLoader::construct()
|
||||
{
|
||||
logGlobal->debugStream() <<"Loading: " <<jsonKey;
|
||||
//logGlobal->debugStream() <<"Loading: " <<jsonKey;
|
||||
|
||||
//TODO:consider move to ObjectTypeHandler
|
||||
//find type handler
|
||||
@ -778,9 +1088,9 @@ void CMapLoaderJson::MapObjectLoader::construct()
|
||||
|
||||
ObjectTemplate appearance;
|
||||
|
||||
appearance.readJson(configuration["template"], false);
|
||||
appearance.id = Obj(handler->type);
|
||||
appearance.subid = handler->subtype;
|
||||
appearance.readJson(configuration["template"], false);
|
||||
|
||||
instance = handler->create(appearance);
|
||||
|
||||
@ -795,14 +1105,15 @@ void CMapLoaderJson::MapObjectLoader::configure()
|
||||
if(nullptr == instance)
|
||||
return;
|
||||
|
||||
JsonDeserializer handler(configuration);
|
||||
JsonDeserializer handler(owner->mapObjectResolver.get(), configuration);
|
||||
|
||||
instance->serializeJson(handler);
|
||||
|
||||
//artifact instance serialization requires access to Map object, handle it here for now
|
||||
//todo: find better solution for artifact instance serialization
|
||||
|
||||
if(auto art = dynamic_cast<CGArtifact *>(instance))
|
||||
{
|
||||
//todo: find better place for this code
|
||||
|
||||
int artID = ArtifactID::NONE;
|
||||
int spellID = -1;
|
||||
|
||||
@ -824,6 +1135,12 @@ void CMapLoaderJson::MapObjectLoader::configure()
|
||||
|
||||
art->storedArtifact = CArtifactInstance::createArtifact(owner->map, artID, spellID);
|
||||
}
|
||||
|
||||
if(auto hero = dynamic_cast<CGHeroInstance *>(instance))
|
||||
{
|
||||
auto o = handler.enterStruct("options");
|
||||
hero->serializeJsonArtifacts(handler, "artifacts", owner->map);
|
||||
}
|
||||
}
|
||||
|
||||
void CMapLoaderJson::readObjects()
|
||||
@ -853,6 +1170,7 @@ void CMapLoaderJson::readObjects()
|
||||
|
||||
///CMapSaverJson
|
||||
CMapSaverJson::CMapSaverJson(CInputOutputStream * stream):
|
||||
CMapFormatJson(),
|
||||
buffer(stream),
|
||||
ioApi(new CProxyIOApi(buffer)),
|
||||
saver(ioApi, "_")
|
||||
@ -866,7 +1184,7 @@ CMapSaverJson::~CMapSaverJson()
|
||||
|
||||
}
|
||||
|
||||
void CMapSaverJson::addToArchive(const JsonNode& data, const std::string& filename)
|
||||
void CMapSaverJson::addToArchive(const JsonNode & data, const std::string & filename)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << data;
|
||||
@ -893,7 +1211,7 @@ void CMapSaverJson::saveMap(const std::unique_ptr<CMap>& map)
|
||||
void CMapSaverJson::writeHeader()
|
||||
{
|
||||
JsonNode header;
|
||||
JsonSerializer handler(header);
|
||||
JsonSerializer handler(mapObjectResolver.get(), header);
|
||||
|
||||
header["versionMajor"].Float() = VERSION_MAJOR;
|
||||
header["versionMinor"].Float() = VERSION_MINOR;
|
||||
@ -933,14 +1251,10 @@ const std::string CMapSaverJson::writeTerrainTile(const TerrainTile & tile)
|
||||
out << terrainCodes.at(int(tile.terType)) << (int)tile.terView << flipCodes[tile.extTileFlags % 4];
|
||||
|
||||
if(tile.roadType != ERoadType::NO_ROAD)
|
||||
{
|
||||
out << roadCodes.at(int(tile.roadType)) << (int)tile.roadDir << flipCodes[(tile.extTileFlags >> 4) % 4];
|
||||
}
|
||||
|
||||
if(tile.riverType != ERiverType::NO_RIVER)
|
||||
{
|
||||
out << riverCodes.at(int(tile.riverType)) << (int)tile.riverDir << flipCodes[(tile.extTileFlags >> 2) % 4];
|
||||
}
|
||||
|
||||
return out.str();
|
||||
}
|
||||
@ -983,7 +1297,7 @@ void CMapSaverJson::writeObjects()
|
||||
{
|
||||
JsonNode data(JsonNode::DATA_STRUCT);
|
||||
|
||||
JsonSerializer handler(data);
|
||||
JsonSerializer handler(mapObjectResolver.get(), data);
|
||||
|
||||
for(CGObjectInstance * obj : map->objects)
|
||||
{
|
||||
|
@ -17,6 +17,8 @@
|
||||
#include "../filesystem/CZipLoader.h"
|
||||
#include "../GameConstants.h"
|
||||
|
||||
#include "../serializer/JsonSerializeFormat.h"
|
||||
|
||||
struct TriggeredEvent;
|
||||
struct TerrainTile;
|
||||
struct PlayerInfo;
|
||||
@ -39,6 +41,8 @@ public:
|
||||
int fileVersionMajor;
|
||||
int fileVersionMinor;
|
||||
protected:
|
||||
friend class MapObjectResolver;
|
||||
std::unique_ptr<IInstanceResolver> mapObjectResolver;
|
||||
|
||||
/** ptr to the map object which gets filled by data from the buffer or written to buffer */
|
||||
CMap * map;
|
||||
@ -49,6 +53,8 @@ protected:
|
||||
*/
|
||||
CMapHeader * mapHeader;
|
||||
|
||||
CMapFormatJson();
|
||||
|
||||
void serializeAllowedFactions(JsonSerializeFormat & handler, std::set<TFaction> & value);
|
||||
|
||||
///common part of header saving/loading
|
||||
@ -67,10 +73,6 @@ protected:
|
||||
*/
|
||||
void writeTeams(JsonSerializer & handler);
|
||||
|
||||
|
||||
///common part triggered events of saving/loading
|
||||
void serializeTriggeredEvents(JsonSerializeFormat & handler);
|
||||
|
||||
/**
|
||||
* Reads triggered events, including victory/loss conditions
|
||||
*/
|
||||
@ -91,7 +93,13 @@ protected:
|
||||
*/
|
||||
void writeTriggeredEvent(const TriggeredEvent & event, JsonNode & dest);
|
||||
|
||||
void writeDisposedHeroes(JsonSerializeFormat & handler);
|
||||
|
||||
void readDisposedHeroes(JsonSerializeFormat & handler);
|
||||
|
||||
void serializePredefinedHeroes(JsonSerializeFormat & handler);
|
||||
|
||||
void serializeRumors(JsonSerializeFormat & handler);
|
||||
|
||||
///common part of map attributes saving/loading
|
||||
void serializeOptions(JsonSerializeFormat & handler);
|
||||
@ -130,7 +138,6 @@ private:
|
||||
*/
|
||||
void readPatchData();
|
||||
|
||||
|
||||
JsonNode input;
|
||||
};
|
||||
|
||||
@ -174,11 +181,8 @@ private:
|
||||
|
||||
///configures object
|
||||
void configure();
|
||||
|
||||
};
|
||||
|
||||
si32 getIdentifier(const std::string & type, const std::string & name);
|
||||
|
||||
/**
|
||||
* Reads the map header.
|
||||
*/
|
||||
|
@ -763,7 +763,7 @@ bool CRmgTemplateZone::createRoad(CMapGenerator* gen, const int3& src, const int
|
||||
auto pq = std::move(createPiorityQueue()); // The set of tentative nodes to be evaluated, initially containing the start node
|
||||
std::map<int3, int3> cameFrom; // The map of navigated nodes.
|
||||
std::map<int3, float> distances;
|
||||
|
||||
|
||||
gen->setRoad (src, ERoadType::NO_ROAD); //just in case zone guard already has road under it. Road under nodes will be added at very end
|
||||
|
||||
cameFrom[src] = int3(-1, -1, -1); //first node points to finish condition
|
||||
@ -1432,7 +1432,7 @@ void CRmgTemplateZone::initTownType (CMapGenerator* gen)
|
||||
playerInfo.allowedFactions.clear();
|
||||
playerInfo.allowedFactions.insert(townType);
|
||||
playerInfo.hasMainTown = true;
|
||||
playerInfo.posOfMainTown = town->pos - town->getVisitableOffset();
|
||||
playerInfo.posOfMainTown = town->pos;
|
||||
playerInfo.generateHeroAtMainTown = true;
|
||||
|
||||
//now create actual towns
|
||||
@ -2092,7 +2092,7 @@ void CRmgTemplateZone::checkAndPlaceObject(CMapGenerator* gen, CGObjectInstance*
|
||||
object->appearance = templates.front();
|
||||
}
|
||||
|
||||
gen->editManager->insertObject(object, pos);
|
||||
gen->editManager->insertObject(object);
|
||||
//logGlobal->traceStream() << boost::format ("Successfully inserted object (%d,%d) at pos %s") %object->ID %object->subID %pos();
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include "../ConstTransitivePtr.h"
|
||||
#include "../GameConstants.h"
|
||||
|
||||
const ui32 SERIALIZATION_VERSION = 762;
|
||||
const ui32 SERIALIZATION_VERSION = 770;
|
||||
const ui32 MINIMAL_SERIALIZATION_VERSION = 753;
|
||||
const std::string SAVEGAME_MAGIC = "VCMISVG";
|
||||
|
||||
|
@ -14,63 +14,88 @@
|
||||
|
||||
#include "../JsonNode.h"
|
||||
|
||||
JsonDeserializer::JsonDeserializer(JsonNode & root_):
|
||||
JsonSerializeFormat(root_, false)
|
||||
JsonDeserializer::JsonDeserializer(const IInstanceResolver * instanceResolver_, JsonNode & root_):
|
||||
JsonSerializeFormat(instanceResolver_, root_, false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeBool(const std::string & fieldName, bool & value)
|
||||
void JsonDeserializer::serializeInternal(const std::string & fieldName, boost::logic::tribool & value)
|
||||
{
|
||||
value = current->operator[](fieldName).Bool();
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value)
|
||||
{
|
||||
const JsonNode & tmp = current->operator[](fieldName);
|
||||
|
||||
value = tmp.String() == trueValue;
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeFloat(const std::string & fieldName, double & value)
|
||||
{
|
||||
value = current->operator[](fieldName).Float();
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value)
|
||||
{
|
||||
const std::string & valueName = current->operator[](fieldName).String();
|
||||
|
||||
si32 rawValue = vstd::find_pos(enumMap, valueName);
|
||||
if(rawValue < 0)
|
||||
value = defaultValue;
|
||||
const JsonNode & data = current->operator[](fieldName);
|
||||
if(data.getType() != JsonNode::DATA_BOOL)
|
||||
value = boost::logic::indeterminate;
|
||||
else
|
||||
value = rawValue;
|
||||
value = data.Bool();
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value)
|
||||
void JsonDeserializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
std::string identifier;
|
||||
serializeString(fieldName, identifier);
|
||||
|
||||
if(identifier == "")
|
||||
{
|
||||
value = defaultValue;
|
||||
return;
|
||||
}
|
||||
value = defaultValue ? defaultValue.get() : 0;
|
||||
|
||||
si32 rawId = decoder(identifier);
|
||||
if(rawId >= 0)
|
||||
value = rawId;
|
||||
if(identifier != "")
|
||||
{
|
||||
si32 rawId = decoder(identifier);
|
||||
if(rawId >= 0)
|
||||
value = rawId;
|
||||
}
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
const JsonVector & data = current->operator[](fieldName).Vector();
|
||||
|
||||
value.clear();
|
||||
value.reserve(data.size());
|
||||
|
||||
for(const JsonNode elem : data)
|
||||
{
|
||||
si32 rawId = decoder(elem.String());
|
||||
|
||||
if(rawId >= 0)
|
||||
value.push_back(rawId);
|
||||
}
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue)
|
||||
{
|
||||
const JsonNode & data = current->operator[](fieldName);
|
||||
|
||||
if(!data.isNumber())
|
||||
value = defaultValue ? defaultValue.get() : 0;//todo: report error on not null?
|
||||
else
|
||||
value = defaultValue;
|
||||
value = data.Float();
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue)
|
||||
{
|
||||
const JsonNode & data = current->operator[](fieldName);
|
||||
|
||||
if(!data.isNumber())
|
||||
value = defaultValue ? defaultValue.get() : 0;//todo: report error on not null?
|
||||
else
|
||||
value = data.Integer();
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap)
|
||||
{
|
||||
const std::string & valueName = current->operator[](fieldName).String();
|
||||
|
||||
const si32 actualOptional = defaultValue ? defaultValue.get() : 0;
|
||||
|
||||
si32 rawValue = vstd::find_pos(enumMap, valueName);
|
||||
if(rawValue < 0)
|
||||
value = actualOptional;
|
||||
else
|
||||
value = rawValue;
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeLIC(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const std::vector<bool> & standard, std::vector<bool> & value)
|
||||
{
|
||||
const JsonNode & field = current->operator[](fieldName);
|
||||
if(field.isNull())
|
||||
return;
|
||||
|
||||
const JsonNode & anyOf = field["anyOf"];
|
||||
const JsonNode & allOf = field["allOf"];
|
||||
@ -139,6 +164,51 @@ void JsonDeserializer::serializeLIC(const std::string & fieldName, LIC & value)
|
||||
}
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeLIC(const std::string & fieldName, LICSet & value)
|
||||
{
|
||||
const JsonNode & field = current->operator[](fieldName);
|
||||
|
||||
const JsonNode & anyOf = field["anyOf"];
|
||||
const JsonNode & allOf = field["allOf"];
|
||||
const JsonNode & noneOf = field["noneOf"];
|
||||
|
||||
value.all.clear();
|
||||
value.none.clear();
|
||||
|
||||
if(anyOf.Vector().empty())
|
||||
{
|
||||
//permissive mode
|
||||
value.any = value.standard;
|
||||
}
|
||||
else
|
||||
{
|
||||
//restrictive mode
|
||||
value.any.clear();
|
||||
readLICPart(anyOf, value.decoder, value.any);
|
||||
|
||||
for(si32 item : value.standard)
|
||||
if(!vstd::contains(value.any, item))
|
||||
value.none.insert(item);
|
||||
}
|
||||
|
||||
readLICPart(allOf, value.decoder, value.all);
|
||||
readLICPart(noneOf, value.decoder, value.none);
|
||||
|
||||
//remove any banned from allowed and required
|
||||
auto isBanned = [&value](const si32 item)->bool
|
||||
{
|
||||
return vstd::contains(value.none, item);
|
||||
};
|
||||
vstd::erase_if(value.all, isBanned);
|
||||
vstd::erase_if(value.any, isBanned);
|
||||
|
||||
//add all required to allowed
|
||||
for(si32 item : value.all)
|
||||
{
|
||||
value.any.insert(item);
|
||||
}
|
||||
}
|
||||
|
||||
void JsonDeserializer::serializeString(const std::string & fieldName, std::string & value)
|
||||
{
|
||||
value = current->operator[](fieldName).String();
|
||||
@ -161,3 +231,15 @@ void JsonDeserializer::readLICPart(const JsonNode & part, const TDecoder & decod
|
||||
}
|
||||
}
|
||||
|
||||
void JsonDeserializer::readLICPart(const JsonNode & part, const TDecoder & decoder, std::set<si32> & value)
|
||||
{
|
||||
for(size_t index = 0; index < part.Vector().size(); index++)
|
||||
{
|
||||
const std::string & identifier = part.Vector()[index].String();
|
||||
|
||||
const si32 rawId = decoder(identifier);
|
||||
if(rawId != -1)
|
||||
value.insert(rawId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,18 +17,22 @@ class JsonNode;
|
||||
class JsonDeserializer: public JsonSerializeFormat
|
||||
{
|
||||
public:
|
||||
JsonDeserializer(JsonNode & root_);
|
||||
JsonDeserializer(const IInstanceResolver * instanceResolver_, JsonNode & root_);
|
||||
|
||||
void serializeBool(const std::string & fieldName, bool & value) override;
|
||||
void serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value) override;
|
||||
void serializeLIC(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const std::vector<bool> & standard, std::vector<bool> & value) override;
|
||||
void serializeLIC(const std::string & fieldName, LIC & value) override;
|
||||
void serializeLIC(const std::string & fieldName, LICSet & value) override;
|
||||
void serializeString(const std::string & fieldName, std::string & value) override;
|
||||
|
||||
protected:
|
||||
void serializeFloat(const std::string & fieldName, double & value) override;
|
||||
void serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value) override;
|
||||
void serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value) override;
|
||||
void serializeInternal(const std::string & fieldName, boost::logic::tribool & value) override;
|
||||
void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder) override;
|
||||
void serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder) override;
|
||||
void serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue) override;
|
||||
void serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue) override;
|
||||
void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap) override;
|
||||
|
||||
private:
|
||||
void readLICPart(const JsonNode & part, const TDecoder & decoder, const bool val, std::vector<bool> & value);
|
||||
void readLICPart(const JsonNode & part, const TDecoder & decoder, std::set<si32> & value);
|
||||
};
|
||||
|
@ -14,57 +14,147 @@
|
||||
|
||||
#include "../JsonNode.h"
|
||||
|
||||
|
||||
//JsonStructSerializer
|
||||
JsonStructSerializer::JsonStructSerializer(JsonStructSerializer&& other):
|
||||
restoreState(false),
|
||||
//JsonSerializeHelper
|
||||
JsonSerializeHelper::JsonSerializeHelper(JsonSerializeHelper && other):
|
||||
owner(other.owner),
|
||||
thisNode(other.thisNode),
|
||||
parentNode(other.parentNode),
|
||||
thisNode(other.thisNode)
|
||||
restoreState(false)
|
||||
{
|
||||
|
||||
std::swap(restoreState, other.restoreState);
|
||||
}
|
||||
|
||||
JsonStructSerializer::~JsonStructSerializer()
|
||||
JsonSerializeHelper::~JsonSerializeHelper()
|
||||
{
|
||||
if(restoreState)
|
||||
owner.current = parentNode;
|
||||
}
|
||||
|
||||
JsonStructSerializer::JsonStructSerializer(JsonSerializeFormat& owner_, const std::string& fieldName):
|
||||
restoreState(true),
|
||||
owner(owner_),
|
||||
parentNode(owner.current),
|
||||
thisNode(&(parentNode->operator[](fieldName)))
|
||||
JsonNode & JsonSerializeHelper::get()
|
||||
{
|
||||
owner.current = thisNode;
|
||||
return * thisNode;
|
||||
}
|
||||
|
||||
JsonStructSerializer::JsonStructSerializer(JsonStructSerializer & parent, const std::string & fieldName):
|
||||
restoreState(true),
|
||||
owner(parent.owner),
|
||||
parentNode(parent.thisNode),
|
||||
thisNode(&(parentNode->operator[](fieldName)))
|
||||
{
|
||||
owner.current = thisNode;
|
||||
}
|
||||
|
||||
JsonStructSerializer JsonStructSerializer::enterStruct(const std::string & fieldName)
|
||||
{
|
||||
return JsonStructSerializer(*this, fieldName);
|
||||
}
|
||||
|
||||
JsonNode& JsonStructSerializer::get()
|
||||
{
|
||||
return *thisNode;
|
||||
}
|
||||
|
||||
JsonSerializeFormat * JsonStructSerializer::operator->()
|
||||
JsonSerializeFormat * JsonSerializeHelper::operator->()
|
||||
{
|
||||
return &owner;
|
||||
}
|
||||
|
||||
JsonSerializeFormat::LIC::LIC(const std::vector<bool> & Standard, const TDecoder & Decoder, const TEncoder & Encoder):
|
||||
JsonSerializeHelper::JsonSerializeHelper(JsonSerializeFormat & owner_, JsonNode * thisNode_):
|
||||
owner(owner_),
|
||||
thisNode(thisNode_),
|
||||
parentNode(owner.current),
|
||||
restoreState(true)
|
||||
{
|
||||
owner.current = thisNode;
|
||||
}
|
||||
|
||||
JsonSerializeHelper::JsonSerializeHelper(JsonSerializeHelper & parent, const std::string & fieldName):
|
||||
owner(parent.owner),
|
||||
thisNode(&(parent.thisNode->operator[](fieldName))),
|
||||
parentNode(parent.thisNode),
|
||||
restoreState(true)
|
||||
{
|
||||
owner.current = thisNode;
|
||||
}
|
||||
|
||||
JsonStructSerializer JsonSerializeHelper::enterStruct(const std::string & fieldName)
|
||||
{
|
||||
return JsonStructSerializer(*this, fieldName);
|
||||
}
|
||||
|
||||
JsonArraySerializer JsonSerializeHelper::enterArray(const std::string & fieldName)
|
||||
{
|
||||
return JsonArraySerializer(*this, fieldName);
|
||||
}
|
||||
|
||||
//JsonStructSerializer
|
||||
JsonStructSerializer::JsonStructSerializer(JsonStructSerializer && other):
|
||||
JsonSerializeHelper(std::move(static_cast<JsonSerializeHelper &>(other))),
|
||||
optional(other.optional)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JsonStructSerializer::JsonStructSerializer(JsonSerializeFormat & owner_, const std::string & fieldName):
|
||||
JsonSerializeHelper(owner_, &(owner_.current->operator[](fieldName))),
|
||||
optional(false)
|
||||
{
|
||||
if(owner.saving)
|
||||
thisNode->setType(JsonNode::DATA_STRUCT);
|
||||
}
|
||||
|
||||
JsonStructSerializer::JsonStructSerializer(JsonSerializeHelper & parent, const std::string & fieldName):
|
||||
JsonSerializeHelper(parent, fieldName),
|
||||
optional(false)
|
||||
{
|
||||
if(owner.saving)
|
||||
thisNode->setType(JsonNode::DATA_STRUCT);
|
||||
}
|
||||
|
||||
JsonStructSerializer::JsonStructSerializer(JsonSerializeFormat & owner_, JsonNode * thisNode_):
|
||||
JsonSerializeHelper(owner_, thisNode_),
|
||||
optional(false)
|
||||
{
|
||||
if(owner.saving)
|
||||
thisNode->setType(JsonNode::DATA_STRUCT);
|
||||
}
|
||||
|
||||
JsonStructSerializer::~JsonStructSerializer()
|
||||
{
|
||||
//todo: delete empty optional node
|
||||
if(owner.saving && optional && thisNode->Struct().empty())
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
//JsonArraySerializer
|
||||
JsonArraySerializer::JsonArraySerializer(JsonStructSerializer && other):
|
||||
JsonSerializeHelper(std::move(static_cast<JsonSerializeHelper &>(other)))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JsonArraySerializer::JsonArraySerializer(JsonSerializeFormat & owner_, const std::string & fieldName):
|
||||
JsonSerializeHelper(owner_, &(owner_.current->operator[](fieldName)))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JsonArraySerializer::JsonArraySerializer(JsonSerializeHelper & parent, const std::string & fieldName):
|
||||
JsonSerializeHelper(parent, fieldName)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JsonStructSerializer JsonArraySerializer::enterStruct(const size_t index)
|
||||
{
|
||||
return JsonStructSerializer(owner, &(thisNode->Vector()[index]));
|
||||
}
|
||||
|
||||
void JsonArraySerializer::resize(const size_t newSize)
|
||||
{
|
||||
thisNode->Vector().resize(newSize);
|
||||
}
|
||||
|
||||
void JsonArraySerializer::resize(const size_t newSize, JsonNode::JsonType type)
|
||||
{
|
||||
resize(newSize);
|
||||
|
||||
for(JsonNode & n : thisNode->Vector())
|
||||
if(n.getType() == JsonNode::DATA_NULL)
|
||||
n.setType(type);
|
||||
}
|
||||
|
||||
|
||||
size_t JsonArraySerializer::size() const
|
||||
{
|
||||
return thisNode->Vector().size();
|
||||
}
|
||||
|
||||
//JsonSerializeFormat::LIC
|
||||
JsonSerializeFormat::LIC::LIC(const std::vector<bool> & Standard, const TDecoder Decoder, const TEncoder Encoder):
|
||||
standard(Standard), decoder(Decoder), encoder(Encoder)
|
||||
{
|
||||
any.resize(standard.size(), false);
|
||||
@ -72,19 +162,33 @@ JsonSerializeFormat::LIC::LIC(const std::vector<bool> & Standard, const TDecoder
|
||||
none.resize(standard.size(), false);
|
||||
}
|
||||
|
||||
JsonSerializeFormat::LICSet::LICSet(const std::set<si32>& Standard, const TDecoder Decoder, const TEncoder Encoder):
|
||||
standard(Standard), decoder(Decoder), encoder(Encoder)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//JsonSerializeFormat
|
||||
JsonSerializeFormat::JsonSerializeFormat(JsonNode & root_, const bool saving_):
|
||||
JsonSerializeFormat::JsonSerializeFormat(const IInstanceResolver * instanceResolver_, JsonNode & root_, const bool saving_):
|
||||
saving(saving_),
|
||||
root(&root_),
|
||||
current(root)
|
||||
current(root),
|
||||
instanceResolver(instanceResolver_)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JsonStructSerializer JsonSerializeFormat::enterStruct(const std::string & fieldName)
|
||||
{
|
||||
JsonStructSerializer res(*this, fieldName);
|
||||
|
||||
return res;
|
||||
return JsonStructSerializer(*this, fieldName);
|
||||
}
|
||||
|
||||
JsonArraySerializer JsonSerializeFormat::enterArray(const std::string & fieldName)
|
||||
{
|
||||
return JsonArraySerializer(*this, fieldName);
|
||||
}
|
||||
|
||||
void JsonSerializeFormat::serializeBool(const std::string & fieldName, bool & value)
|
||||
{
|
||||
serializeBool<bool>(fieldName, value, true, false, false);
|
||||
}
|
||||
|
@ -10,30 +10,96 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
class JsonNode;
|
||||
#include "../JsonNode.h"
|
||||
|
||||
class JsonSerializeFormat;
|
||||
class JsonStructSerializer;
|
||||
class JsonArraySerializer;
|
||||
|
||||
class JsonStructSerializer: public boost::noncopyable
|
||||
class IInstanceResolver
|
||||
{
|
||||
public:
|
||||
JsonStructSerializer(JsonStructSerializer && other);
|
||||
virtual ~JsonStructSerializer();
|
||||
virtual ~IInstanceResolver(){};
|
||||
virtual si32 decode(const std::string & identifier) const = 0;
|
||||
virtual std::string encode(si32 identifier) const = 0;
|
||||
};
|
||||
|
||||
JsonStructSerializer enterStruct(const std::string & fieldName);
|
||||
class JsonSerializeHelper: public boost::noncopyable
|
||||
{
|
||||
public:
|
||||
JsonSerializeHelper(JsonSerializeHelper && other);
|
||||
virtual ~JsonSerializeHelper();
|
||||
|
||||
JsonNode & get();
|
||||
|
||||
JsonSerializeFormat * operator->();
|
||||
private:
|
||||
JsonStructSerializer(JsonSerializeFormat & owner_, const std::string & fieldName);
|
||||
JsonStructSerializer(JsonStructSerializer & parent, const std::string & fieldName);
|
||||
|
||||
bool restoreState;
|
||||
JsonStructSerializer enterStruct(const std::string & fieldName);
|
||||
JsonArraySerializer enterArray(const std::string & fieldName);
|
||||
|
||||
protected:
|
||||
JsonSerializeHelper(JsonSerializeFormat & owner_, JsonNode * thisNode_);
|
||||
JsonSerializeHelper(JsonSerializeHelper & parent, const std::string & fieldName);
|
||||
|
||||
JsonSerializeFormat & owner;
|
||||
JsonNode * parentNode;
|
||||
|
||||
JsonNode * thisNode;
|
||||
JsonNode * parentNode;
|
||||
|
||||
friend class JsonStructSerializer;
|
||||
|
||||
private:
|
||||
bool restoreState;
|
||||
};
|
||||
|
||||
class JsonStructSerializer: public JsonSerializeHelper
|
||||
{
|
||||
public:
|
||||
bool optional;
|
||||
JsonStructSerializer(JsonStructSerializer && other);
|
||||
~JsonStructSerializer();
|
||||
protected:
|
||||
JsonStructSerializer(JsonSerializeFormat & owner_, JsonNode * thisNode_);
|
||||
JsonStructSerializer(JsonSerializeFormat & owner_, const std::string & fieldName);
|
||||
JsonStructSerializer(JsonSerializeHelper & parent, const std::string & fieldName);
|
||||
|
||||
friend class JsonSerializeFormat;
|
||||
friend class JsonSerializeHelper;
|
||||
friend class JsonArraySerializer;
|
||||
};
|
||||
|
||||
class JsonArraySerializer: public JsonSerializeHelper
|
||||
{
|
||||
public:
|
||||
JsonArraySerializer(JsonStructSerializer && other);
|
||||
|
||||
JsonStructSerializer enterStruct(const size_t index);
|
||||
|
||||
template <typename Container>
|
||||
void syncSize(Container & c, JsonNode::JsonType type = JsonNode::DATA_NULL);
|
||||
|
||||
///vector of serializable <-> Json vector of structs
|
||||
template <typename Element>
|
||||
void serializeStruct(std::vector<Element> & value)
|
||||
{
|
||||
syncSize(value, JsonNode::DATA_STRUCT);
|
||||
|
||||
for(size_t idx = 0; idx < size(); idx++)
|
||||
{
|
||||
auto s = enterStruct(idx);
|
||||
value[idx].serializeJson(owner);
|
||||
}
|
||||
}
|
||||
|
||||
void resize(const size_t newSize);
|
||||
void resize(const size_t newSize, JsonNode::JsonType type);
|
||||
size_t size() const;
|
||||
protected:
|
||||
JsonArraySerializer(JsonSerializeFormat & owner_, const std::string & fieldName);
|
||||
JsonArraySerializer(JsonSerializeHelper & parent, const std::string & fieldName);
|
||||
|
||||
friend class JsonSerializeFormat;
|
||||
friend class JsonSerializeHelper;
|
||||
};
|
||||
|
||||
class JsonSerializeFormat: public boost::noncopyable
|
||||
@ -47,16 +113,28 @@ public:
|
||||
///may assume that object index is valid
|
||||
typedef std::function<std::string(si32)> TEncoder;
|
||||
|
||||
typedef std::function<void(JsonSerializeFormat &)> TSerialize;
|
||||
|
||||
struct LIC
|
||||
{
|
||||
LIC(const std::vector<bool> & Standard, const TDecoder & Decoder, const TEncoder & Encoder);
|
||||
LIC(const std::vector<bool> & Standard, const TDecoder Decoder, const TEncoder Encoder);
|
||||
|
||||
const std::vector<bool> & standard;
|
||||
const TDecoder & decoder;
|
||||
const TEncoder & encoder;
|
||||
const TDecoder decoder;
|
||||
const TEncoder encoder;
|
||||
std::vector<bool> all, any, none;
|
||||
};
|
||||
|
||||
struct LICSet
|
||||
{
|
||||
LICSet(const std::set<si32> & Standard, const TDecoder Decoder, const TEncoder Encoder);
|
||||
|
||||
const std::set<si32> & standard;
|
||||
const TDecoder decoder;
|
||||
const TEncoder encoder;
|
||||
std::set<si32> all, any, none;
|
||||
};
|
||||
|
||||
const bool saving;
|
||||
|
||||
JsonSerializeFormat() = delete;
|
||||
@ -73,19 +151,39 @@ public:
|
||||
};
|
||||
|
||||
JsonStructSerializer enterStruct(const std::string & fieldName);
|
||||
JsonArraySerializer enterArray(const std::string & fieldName);
|
||||
|
||||
///Anything comparable <-> Json bool
|
||||
template <typename T>
|
||||
void serializeBool(const std::string & fieldName, const T trueValue, const T falseValue, T & value)
|
||||
void serializeBool(const std::string & fieldName, T & value, const T trueValue, const T falseValue, const T defaultValue)
|
||||
{
|
||||
bool temp = (value == trueValue);
|
||||
serializeBool(fieldName, temp);
|
||||
boost::logic::tribool temp(boost::logic::indeterminate);
|
||||
|
||||
if(value == defaultValue)
|
||||
;//leave as indeterminate
|
||||
else if(value == trueValue)
|
||||
temp = true;
|
||||
else if(value == falseValue)
|
||||
temp = false;
|
||||
|
||||
serializeInternal(fieldName, temp);
|
||||
if(!saving)
|
||||
value = temp ? trueValue : falseValue;
|
||||
{
|
||||
if(boost::logic::indeterminate(temp))
|
||||
value = defaultValue;
|
||||
else
|
||||
value = temp ? trueValue : falseValue;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void serializeBool(const std::string & fieldName, bool & value) = 0;
|
||||
///bool <-> Json bool
|
||||
void serializeBool(const std::string & fieldName, bool & value);
|
||||
|
||||
virtual void serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value) = 0;
|
||||
///tribool <-> Json bool
|
||||
void serializeBool(const std::string & fieldName, boost::logic::tribool & value)
|
||||
{
|
||||
serializeInternal(fieldName, value);
|
||||
};
|
||||
|
||||
/** @brief Restrictive ("anyOf") simple serialization of Logical identifier condition, simple deserialization (allOf=anyOf)
|
||||
*
|
||||
@ -101,48 +199,225 @@ public:
|
||||
*/
|
||||
virtual void serializeLIC(const std::string & fieldName, LIC & value) = 0;
|
||||
|
||||
template <typename T>
|
||||
void serializeNumericEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const T defaultValue, T & value)
|
||||
{
|
||||
si32 temp = value;
|
||||
serializeIntEnum(fieldName, enumMap, defaultValue, temp);
|
||||
if(!saving)
|
||||
value = temp;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
void serializeNumeric(const std::string & fieldName, T & value)
|
||||
{
|
||||
double temp = value;
|
||||
serializeFloat(fieldName, temp);
|
||||
if(!saving)
|
||||
value = temp;
|
||||
};
|
||||
/** @brief Complete serialization of Logical identifier condition. (Special version)
|
||||
* Assumes that all values are allowed by default, and standard contains them
|
||||
*/
|
||||
virtual void serializeLIC(const std::string & fieldName, LICSet & value) = 0;
|
||||
|
||||
///String <-> Json string
|
||||
virtual void serializeString(const std::string & fieldName, std::string & value) = 0;
|
||||
|
||||
///si32-convertible enum <-> Json string enum
|
||||
template <typename T>
|
||||
void serializeId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const T & defaultValue, T & value)
|
||||
void serializeEnum(const std::string & fieldName, T & value, const std::vector<std::string> & enumMap)
|
||||
{
|
||||
const si32 tempDefault = defaultValue.num;
|
||||
si32 tempValue = value.num;
|
||||
serializeIntId(fieldName, decoder, encoder, tempDefault, tempValue);
|
||||
doSerializeInternal<T, T, si32>(fieldName, value, boost::none, enumMap);
|
||||
};
|
||||
|
||||
///si32-convertible enum <-> Json string enum
|
||||
template <typename T, typename U>
|
||||
void serializeEnum(const std::string & fieldName, T & value, const U & defaultValue, const std::vector<std::string> & enumMap)
|
||||
{
|
||||
doSerializeInternal<T, U, si32>(fieldName, value, defaultValue, enumMap);
|
||||
};
|
||||
|
||||
template <typename T, typename U, typename C>
|
||||
void serializeEnum(const std::string & fieldName, T & value, const U & defaultValue, const C & enumMap)
|
||||
{
|
||||
std::vector<std::string> enumMapCopy;
|
||||
|
||||
std::copy(std::begin(enumMap), std::end(enumMap), std::back_inserter(enumMapCopy));
|
||||
|
||||
doSerializeInternal<T, U, si32>(fieldName, value, defaultValue, enumMapCopy);
|
||||
};
|
||||
|
||||
///Anything double-convertible <-> Json double
|
||||
template <typename T>
|
||||
void serializeFloat(const std::string & fieldName, T & value)
|
||||
{
|
||||
doSerializeInternal<T, T, double>(fieldName, value, boost::none);
|
||||
};
|
||||
|
||||
///Anything double-convertible <-> Json double
|
||||
template <typename T, typename U>
|
||||
void serializeFloat(const std::string & fieldName, T & value, const U & defaultValue)
|
||||
{
|
||||
doSerializeInternal<T, U, double>(fieldName, value, defaultValue);
|
||||
};
|
||||
|
||||
///Anything int64-convertible <-> Json integer
|
||||
template <typename T>
|
||||
void serializeInt(const std::string & fieldName, T & value)
|
||||
{
|
||||
doSerializeInternal<T, T, si64>(fieldName, value, boost::none);
|
||||
};
|
||||
|
||||
///Anything int64-convertible <-> Json integer
|
||||
template <typename T, typename U>
|
||||
void serializeInt(const std::string & fieldName, T & value, const U & defaultValue)
|
||||
{
|
||||
doSerializeInternal<T, U, si64>(fieldName, value, defaultValue);
|
||||
};
|
||||
|
||||
///si32-convertible identifier <-> Json string
|
||||
template <typename T, typename U>
|
||||
void serializeId(const std::string & fieldName, T & value, const U & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
doSerializeInternal<T, U, si32>(fieldName, value, defaultValue, decoder, encoder);
|
||||
}
|
||||
|
||||
///si32-convertible identifier vector <-> Json array of string
|
||||
template <typename T>
|
||||
void serializeIdArray(const std::string & fieldName, std::vector<T> & value, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
std::vector<si32> temp;
|
||||
|
||||
if(saving)
|
||||
{
|
||||
temp.reserve(value.size());
|
||||
|
||||
for(const T & vitem : value)
|
||||
{
|
||||
si32 item = static_cast<si32>(vitem);
|
||||
temp.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
serializeInternal(fieldName, temp, decoder, encoder);
|
||||
if(!saving)
|
||||
value = T(tempValue);
|
||||
{
|
||||
value.clear();
|
||||
value.reserve(temp.size());
|
||||
|
||||
for(const si32 item : temp)
|
||||
{
|
||||
T vitem = static_cast<T>(item);
|
||||
value.push_back(vitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///si32-convertible identifier set <-> Json array of string
|
||||
template <typename T>
|
||||
void serializeIdArray(const std::string & fieldName, std::set<T> & value, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
std::vector<si32> temp;
|
||||
|
||||
if(saving)
|
||||
{
|
||||
temp.reserve(value.size());
|
||||
|
||||
for(const T & vitem : value)
|
||||
{
|
||||
si32 item = static_cast<si32>(vitem);
|
||||
temp.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
serializeInternal(fieldName, temp, decoder, encoder);
|
||||
if(!saving)
|
||||
{
|
||||
value.clear();
|
||||
|
||||
for(const si32 item : temp)
|
||||
{
|
||||
T vitem = static_cast<T>(item);
|
||||
value.insert(vitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///bitmask <-> Json array of string
|
||||
template <typename T, int Size>
|
||||
void serializeIdArray(const std::string & fieldName, T & value, const T & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
static_assert(8 * sizeof(T) >= Size, "Mask size too small");
|
||||
|
||||
std::vector<si32> temp;
|
||||
temp.reserve(Size);
|
||||
|
||||
if(saving && value != defaultValue)
|
||||
{
|
||||
for(si32 i = 0; i < Size; i++)
|
||||
if(value & (1 << i))
|
||||
temp.push_back(i);
|
||||
serializeInternal(fieldName, temp, decoder, encoder);
|
||||
}
|
||||
|
||||
if(!saving)
|
||||
{
|
||||
serializeInternal(fieldName, temp, decoder, encoder);
|
||||
|
||||
if(temp.empty())
|
||||
value = defaultValue;
|
||||
else
|
||||
{
|
||||
value = 0;
|
||||
for(auto i : temp)
|
||||
value |= (1 << i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///si32-convertible instance identifier <-> Json string
|
||||
template <typename T>
|
||||
void serializeInstance(const std::string & fieldName, T & value, const T & defaultValue)
|
||||
{
|
||||
const TDecoder decoder = std::bind(&IInstanceResolver::decode, instanceResolver, _1);
|
||||
const TEncoder endoder = std::bind(&IInstanceResolver::encode, instanceResolver, _1);
|
||||
|
||||
serializeId<T>(fieldName, value, defaultValue, decoder, endoder);
|
||||
}
|
||||
|
||||
protected:
|
||||
JsonNode * root;
|
||||
JsonNode * current;
|
||||
|
||||
JsonSerializeFormat(JsonNode & root_, const bool saving_);
|
||||
JsonSerializeFormat(const IInstanceResolver * instanceResolver_, JsonNode & root_, const bool saving_);
|
||||
|
||||
virtual void serializeFloat(const std::string & fieldName, double & value) = 0;
|
||||
///bool <-> Json bool, indeterminate is default
|
||||
virtual void serializeInternal(const std::string & fieldName, boost::logic::tribool & value) = 0;
|
||||
|
||||
virtual void serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value) = 0;
|
||||
///Numeric Id <-> String Id
|
||||
virtual void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder) = 0;
|
||||
|
||||
///Numeric Id vector <-> String Id vector
|
||||
virtual void serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder) = 0;
|
||||
|
||||
///Numeric <-> Json double
|
||||
virtual void serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue) = 0;
|
||||
|
||||
///Numeric <-> Json integer
|
||||
virtual void serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue) = 0;
|
||||
|
||||
///Enum/Numeric <-> Json string enum
|
||||
virtual void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap) = 0;
|
||||
|
||||
virtual void serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value) = 0;
|
||||
private:
|
||||
const IInstanceResolver * instanceResolver;
|
||||
|
||||
template <typename VType, typename DVType, typename IType, typename... Args>
|
||||
void doSerializeInternal(const std::string & fieldName, VType & value, const boost::optional<DVType> & defaultValue, Args ... args)
|
||||
{
|
||||
const boost::optional<IType> tempDefault = defaultValue ? boost::optional<IType>(static_cast<IType>(defaultValue.get())) : boost::none;
|
||||
IType temp = static_cast<IType>(value);
|
||||
|
||||
serializeInternal(fieldName, temp, tempDefault, args...);
|
||||
|
||||
if(!saving)
|
||||
value = static_cast<VType>(temp);
|
||||
}
|
||||
|
||||
friend class JsonSerializeHelper;
|
||||
friend class JsonStructSerializer;
|
||||
friend class JsonArraySerializer;
|
||||
};
|
||||
|
||||
template <typename Container>
|
||||
void JsonArraySerializer::syncSize(Container & c, JsonNode::JsonType type)
|
||||
{
|
||||
if(owner.saving)
|
||||
resize(c.size(), type);
|
||||
else
|
||||
c.resize(size());
|
||||
}
|
||||
|
@ -14,44 +14,61 @@
|
||||
|
||||
#include "../JsonNode.h"
|
||||
|
||||
JsonSerializer::JsonSerializer(JsonNode & root_):
|
||||
JsonSerializeFormat(root_, true)
|
||||
JsonSerializer::JsonSerializer(const IInstanceResolver * instanceResolver_, JsonNode & root_):
|
||||
JsonSerializeFormat(instanceResolver_, root_, true)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeBool(const std::string & fieldName, bool & value)
|
||||
void JsonSerializer::serializeInternal(const std::string & fieldName, boost::logic::tribool & value)
|
||||
{
|
||||
if(value)
|
||||
current->operator[](fieldName).Bool() = true;
|
||||
if(!boost::logic::indeterminate(value))
|
||||
current->operator[](fieldName).Bool() = value;
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value)
|
||||
void JsonSerializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
current->operator[](fieldName).String() = value ? trueValue : falseValue;
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeFloat(const std::string & fieldName, double & value)
|
||||
{
|
||||
if(value != 0)
|
||||
current->operator[](fieldName).Float() = value;
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value)
|
||||
{
|
||||
if(defaultValue != value)
|
||||
current->operator[](fieldName).String() = enumMap.at(value);
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value)
|
||||
{
|
||||
if(defaultValue != value)
|
||||
if(!defaultValue || defaultValue.get() != value)
|
||||
{
|
||||
std::string identifier = encoder(value);
|
||||
serializeString(fieldName, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue)
|
||||
{
|
||||
if(!defaultValue || defaultValue.get() != value)
|
||||
current->operator[](fieldName).Float() = value;
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue)
|
||||
{
|
||||
if(!defaultValue || defaultValue.get() != value)
|
||||
current->operator[](fieldName).Integer() = value;
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap)
|
||||
{
|
||||
if(!defaultValue || defaultValue.get() != value)
|
||||
current->operator[](fieldName).String() = enumMap.at(value);
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder)
|
||||
{
|
||||
if(value.empty())
|
||||
return;
|
||||
|
||||
JsonVector & data = current->operator[](fieldName).Vector();
|
||||
data.reserve(value.size());
|
||||
|
||||
for(const si32 rawId : value)
|
||||
{
|
||||
JsonNode jsonElement(JsonNode::DATA_STRING);
|
||||
jsonElement.String() = encoder(rawId);
|
||||
data.push_back(std::move(jsonElement));
|
||||
}
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeLIC(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const std::vector<bool> & standard, std::vector<bool> & value)
|
||||
{
|
||||
assert(standard.size() == value.size());
|
||||
@ -64,9 +81,16 @@ void JsonSerializer::serializeLIC(const std::string & fieldName, const TDecoder
|
||||
void JsonSerializer::serializeLIC(const std::string & fieldName, LIC & value)
|
||||
{
|
||||
if(value.any != value.standard)
|
||||
{
|
||||
writeLICPart(fieldName, "anyOf", value.encoder, value.any);
|
||||
}
|
||||
|
||||
writeLICPart(fieldName, "allOf", value.encoder, value.all);
|
||||
writeLICPart(fieldName, "noneOf", value.encoder, value.none);
|
||||
}
|
||||
|
||||
void JsonSerializer::serializeLIC(const std::string & fieldName, LICSet & value)
|
||||
{
|
||||
if(value.any != value.standard)
|
||||
writeLICPart(fieldName, "anyOf", value.encoder, value.any);
|
||||
|
||||
writeLICPart(fieldName, "allOf", value.encoder, value.all);
|
||||
writeLICPart(fieldName, "noneOf", value.encoder, value.none);
|
||||
@ -78,15 +102,41 @@ void JsonSerializer::serializeString(const std::string & fieldName, std::string
|
||||
current->operator[](fieldName).String() = value;
|
||||
}
|
||||
|
||||
void JsonSerializer::writeLICPart(const std::string& fieldName, const std::string& partName, const TEncoder& encoder, const std::vector<bool> & data)
|
||||
void JsonSerializer::writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::vector<bool> & data)
|
||||
{
|
||||
auto & target = current->operator[](fieldName)[partName].Vector();
|
||||
for(si32 idx = 0; idx < data.size(); idx ++)
|
||||
{
|
||||
std::vector<std::string> buf;
|
||||
buf.reserve(data.size());
|
||||
|
||||
for(si32 idx = 0; idx < data.size(); idx++)
|
||||
if(data[idx])
|
||||
buf.push_back(encoder(idx));
|
||||
|
||||
writeLICPartBuffer(fieldName, partName, buf);
|
||||
}
|
||||
|
||||
void JsonSerializer::writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::set<si32> & data)
|
||||
{
|
||||
std::vector<std::string> buf;
|
||||
buf.reserve(data.size());
|
||||
|
||||
for(const si32 item : data)
|
||||
buf.push_back(encoder(item));
|
||||
|
||||
writeLICPartBuffer(fieldName, partName, buf);
|
||||
}
|
||||
|
||||
void JsonSerializer::writeLICPartBuffer(const std::string & fieldName, const std::string & partName, std::vector<std::string> & buffer)
|
||||
{
|
||||
if(!buffer.empty())
|
||||
{
|
||||
std::sort(buffer.begin(), buffer.end());
|
||||
|
||||
auto & target = current->operator[](fieldName)[partName].Vector();
|
||||
|
||||
for(auto & s : buffer)
|
||||
{
|
||||
JsonNode val(JsonNode::DATA_STRING);
|
||||
val.String() = encoder(idx);
|
||||
std::swap(val.String(), s);
|
||||
target.push_back(std::move(val));
|
||||
}
|
||||
}
|
||||
|
@ -17,19 +17,23 @@ class JsonNode;
|
||||
class JsonSerializer: public JsonSerializeFormat
|
||||
{
|
||||
public:
|
||||
JsonSerializer(JsonNode & root_);
|
||||
JsonSerializer(const IInstanceResolver * instanceResolver_, JsonNode & root_);
|
||||
|
||||
void serializeBool(const std::string & fieldName, bool & value) override;
|
||||
void serializeEnum(const std::string & fieldName, const std::string & trueValue, const std::string & falseValue, bool & value) override;
|
||||
void serializeLIC(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const std::vector<bool> & standard, std::vector<bool> & value) override;
|
||||
void serializeLIC(const std::string & fieldName, LIC & value) override;
|
||||
void serializeLIC(const std::string & fieldName, LICSet & value) override;
|
||||
void serializeString(const std::string & fieldName, std::string & value) override;
|
||||
|
||||
protected:
|
||||
void serializeFloat(const std::string & fieldName, double & value) override;
|
||||
void serializeIntEnum(const std::string & fieldName, const std::vector<std::string> & enumMap, const si32 defaultValue, si32 & value) override;
|
||||
void serializeIntId(const std::string & fieldName, const TDecoder & decoder, const TEncoder & encoder, const si32 defaultValue, si32 & value) override;
|
||||
void serializeInternal(const std::string & fieldName, boost::logic::tribool & value) override;
|
||||
void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const TDecoder & decoder, const TEncoder & encoder) override;
|
||||
void serializeInternal(const std::string & fieldName, std::vector<si32> & value, const TDecoder & decoder, const TEncoder & encoder) override;
|
||||
void serializeInternal(const std::string & fieldName, double & value, const boost::optional<double> & defaultValue) override;
|
||||
void serializeInternal(const std::string & fieldName, si64 & value, const boost::optional<si64> & defaultValue) override;
|
||||
void serializeInternal(const std::string & fieldName, si32 & value, const boost::optional<si32> & defaultValue, const std::vector<std::string> & enumMap) override;
|
||||
|
||||
private:
|
||||
void writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::vector<bool> & data);
|
||||
void writeLICPart(const std::string & fieldName, const std::string & partName, const TEncoder & encoder, const std::set<si32> & data);
|
||||
void writeLICPartBuffer(const std::string & fieldName, const std::string & partName, std::vector<std::string> & buffer);
|
||||
};
|
||||
|
@ -925,7 +925,7 @@ CSpell * CSpellHandler::loadFromJson(const JsonNode & json, const std::string &
|
||||
if("bottom" == vPosStr)
|
||||
newItem.verticalPosition = VerticalPosition::BOTTOM;
|
||||
}
|
||||
else if(item.getType() == JsonNode::DATA_FLOAT)
|
||||
else if(item.isNumber())
|
||||
{
|
||||
newItem.pause = item.Float();
|
||||
}
|
||||
|
@ -23,8 +23,12 @@ cotire(vcmitest)
|
||||
# Files to copy to the build directory
|
||||
add_custom_target(vcmitestFiles ALL)
|
||||
set(vcmitest_FILES
|
||||
TerrainViewTest.h3m
|
||||
terrainViewMappings.json
|
||||
testdata/TerrainViewTest.h3m
|
||||
testdata/terrainViewMappings.json
|
||||
testdata/ObjectPropertyTest/header.json
|
||||
testdata/ObjectPropertyTest/objects.json
|
||||
testdata/ObjectPropertyTest/surface_terrain.json
|
||||
testdata/ObjectPropertyTest/underground_terrain.json
|
||||
)
|
||||
|
||||
foreach(file ${vcmitest_FILES})
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
#include "../lib/filesystem/CMemoryBuffer.h"
|
||||
#include "../lib/filesystem/Filesystem.h"
|
||||
|
||||
#include "../lib/mapping/CMap.h"
|
||||
#include "../lib/rmg/CMapGenOptions.h"
|
||||
@ -23,54 +24,41 @@
|
||||
|
||||
#include "MapComparer.h"
|
||||
|
||||
|
||||
static const int TEST_RANDOM_SEED = 1337;
|
||||
|
||||
static std::unique_ptr<CMap> initialMap;
|
||||
|
||||
class CMapTestFixture
|
||||
BOOST_AUTO_TEST_CASE(MapFormat_Random)
|
||||
{
|
||||
public:
|
||||
CMapTestFixture()
|
||||
{
|
||||
CMapGenOptions opt;
|
||||
logGlobal->info("MapFormat_Random start");
|
||||
BOOST_TEST_CHECKPOINT("MapFormat_Random start");
|
||||
std::unique_ptr<CMap> initialMap;
|
||||
|
||||
opt.setHeight(CMapHeader::MAP_SIZE_MIDDLE);
|
||||
opt.setWidth(CMapHeader::MAP_SIZE_MIDDLE);
|
||||
opt.setHasTwoLevels(true);
|
||||
opt.setPlayerCount(4);
|
||||
CMapGenOptions opt;
|
||||
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(0), EPlayerType::HUMAN);
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(1), EPlayerType::AI);
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(2), EPlayerType::AI);
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(3), EPlayerType::AI);
|
||||
opt.setHeight(CMapHeader::MAP_SIZE_MIDDLE);
|
||||
opt.setWidth(CMapHeader::MAP_SIZE_MIDDLE);
|
||||
opt.setHasTwoLevels(true);
|
||||
opt.setPlayerCount(4);
|
||||
|
||||
CMapGenerator gen;
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(0), EPlayerType::HUMAN);
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(1), EPlayerType::AI);
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(2), EPlayerType::AI);
|
||||
opt.setPlayerTypeForStandardPlayer(PlayerColor(3), EPlayerType::AI);
|
||||
|
||||
initialMap = gen.generate(&opt, TEST_RANDOM_SEED);
|
||||
initialMap->name = "Test";
|
||||
};
|
||||
~CMapTestFixture()
|
||||
{
|
||||
initialMap.reset();
|
||||
};
|
||||
};
|
||||
CMapGenerator gen;
|
||||
|
||||
BOOST_GLOBAL_FIXTURE(CMapTestFixture);
|
||||
initialMap = gen.generate(&opt, TEST_RANDOM_SEED);
|
||||
initialMap->name = "Test";
|
||||
BOOST_TEST_CHECKPOINT("MapFormat_Random generated");
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CMapFormatVCMI_Simple)
|
||||
{
|
||||
logGlobal->info("CMapFormatVCMI_Simple start");
|
||||
BOOST_TEST_CHECKPOINT("CMapFormatVCMI_Simple start");
|
||||
CMemoryBuffer serializeBuffer;
|
||||
{
|
||||
CMapSaverJson saver(&serializeBuffer);
|
||||
saver.saveMap(initialMap);
|
||||
}
|
||||
BOOST_TEST_CHECKPOINT("CMapFormatVCMI_Simple serialized");
|
||||
BOOST_TEST_CHECKPOINT("MapFormat_Random serialized");
|
||||
#if 1
|
||||
{
|
||||
auto path = VCMIDirs::get().userDataPath()/"test.vmap";
|
||||
auto path = VCMIDirs::get().userDataPath()/"test_random.vmap";
|
||||
boost::filesystem::remove(path);
|
||||
boost::filesystem::ofstream tmp(path, boost::filesystem::ofstream::binary);
|
||||
|
||||
@ -81,7 +69,7 @@ BOOST_AUTO_TEST_CASE(CMapFormatVCMI_Simple)
|
||||
logGlobal->info("Test map has been saved to:");
|
||||
logGlobal->info(path.string());
|
||||
}
|
||||
BOOST_TEST_CHECKPOINT("CMapFormatVCMI_Simple saved");
|
||||
BOOST_TEST_CHECKPOINT("MapFormat_Random saved");
|
||||
|
||||
#endif // 1
|
||||
|
||||
@ -94,5 +82,123 @@ BOOST_AUTO_TEST_CASE(CMapFormatVCMI_Simple)
|
||||
c(serialized, initialMap);
|
||||
}
|
||||
|
||||
logGlobal->info("CMapFormatVCMI_Simple finish");
|
||||
logGlobal->info("MapFormat_Random finish");
|
||||
}
|
||||
|
||||
static JsonNode getFromArchive(CZipLoader & archive, const std::string & archiveFilename)
|
||||
{
|
||||
ResourceID resource(archiveFilename, EResType::TEXT);
|
||||
|
||||
if(!archive.existsResource(resource))
|
||||
throw new std::runtime_error(archiveFilename+" not found");
|
||||
|
||||
auto data = archive.load(resource)->readAll();
|
||||
|
||||
JsonNode res(reinterpret_cast<char*>(data.first.get()), data.second);
|
||||
|
||||
return std::move(res);
|
||||
}
|
||||
|
||||
|
||||
static void addToArchive(CZipSaver & saver, const JsonNode & data, const std::string & filename)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << data;
|
||||
out.flush();
|
||||
|
||||
{
|
||||
auto s = out.str();
|
||||
std::unique_ptr<COutputStream> stream = saver.addFile(filename);
|
||||
|
||||
if(stream->write((const ui8*)s.c_str(), s.size()) != s.size())
|
||||
throw new std::runtime_error("CMapSaverJson::saveHeader() zip compression failed.");
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(MapFormat_Objects)
|
||||
{
|
||||
logGlobal->info("MapFormat_Objects start");
|
||||
|
||||
static const std::string MAP_DATA_PATH = "test/ObjectPropertyTest/";
|
||||
|
||||
const JsonNode initialHeader(ResourceID(MAP_DATA_PATH+"header.json"));
|
||||
const JsonNode expectedHeader(ResourceID(MAP_DATA_PATH+"header.json"));//same as initial for now
|
||||
|
||||
const JsonNode initialObjects(ResourceID(MAP_DATA_PATH+"objects.json"));
|
||||
const JsonNode expectedObjects(ResourceID(MAP_DATA_PATH+"objects.ex.json"));
|
||||
|
||||
const JsonNode expectedSurface(ResourceID(MAP_DATA_PATH+"surface_terrain.json"));
|
||||
const JsonNode expectedUnderground(ResourceID(MAP_DATA_PATH+"underground_terrain.json"));
|
||||
|
||||
std::unique_ptr<CMap> originalMap;
|
||||
{
|
||||
CMemoryBuffer initialBuffer;
|
||||
|
||||
std::shared_ptr<CIOApi> originalDataIO(new CProxyIOApi(&initialBuffer));
|
||||
|
||||
{
|
||||
CZipSaver initialSaver(originalDataIO, "_");
|
||||
|
||||
addToArchive(initialSaver, initialHeader, "header.json");
|
||||
addToArchive(initialSaver, initialObjects, "objects.json");
|
||||
addToArchive(initialSaver, expectedSurface, "surface_terrain.json");
|
||||
addToArchive(initialSaver, expectedUnderground, "underground_terrain.json");
|
||||
}
|
||||
|
||||
initialBuffer.seek(0);
|
||||
|
||||
{
|
||||
CMapLoaderJson initialLoader(&initialBuffer);
|
||||
|
||||
originalMap = initialLoader.loadMap();
|
||||
}
|
||||
}
|
||||
|
||||
CMemoryBuffer serializeBuffer;
|
||||
{
|
||||
CMapSaverJson saver(&serializeBuffer);
|
||||
saver.saveMap(originalMap);
|
||||
}
|
||||
|
||||
std::shared_ptr<CIOApi> actualDataIO(new CProxyROIOApi(&serializeBuffer));
|
||||
CZipLoader actualDataLoader("", "_", actualDataIO);
|
||||
|
||||
const JsonNode actualHeader = getFromArchive(actualDataLoader, "header.json");
|
||||
const JsonNode actualObjects = getFromArchive(actualDataLoader, "objects.json");
|
||||
const JsonNode actualSurface = getFromArchive(actualDataLoader, "surface_terrain.json");
|
||||
const JsonNode actualUnderground = getFromArchive(actualDataLoader, "underground_terrain.json");
|
||||
|
||||
{
|
||||
auto path = VCMIDirs::get().userDataPath()/"test_object_property.vmap";
|
||||
boost::filesystem::remove(path);
|
||||
boost::filesystem::ofstream tmp(path, boost::filesystem::ofstream::binary);
|
||||
|
||||
tmp.write((const char *)serializeBuffer.getBuffer().data(),serializeBuffer.getSize());
|
||||
tmp.flush();
|
||||
tmp.close();
|
||||
|
||||
logGlobal->infoStream() << "Test map has been saved to " << path;
|
||||
}
|
||||
|
||||
{
|
||||
JsonMapComparer c;
|
||||
c.compareHeader(actualHeader, expectedHeader);
|
||||
}
|
||||
|
||||
{
|
||||
JsonMapComparer c;
|
||||
c.compareObjects(actualObjects, expectedObjects);
|
||||
}
|
||||
|
||||
{
|
||||
JsonMapComparer c;
|
||||
c.compareTerrain("surface", actualSurface, expectedSurface);
|
||||
}
|
||||
|
||||
{
|
||||
JsonMapComparer c;
|
||||
c.compareTerrain("underground", actualUnderground, expectedUnderground);
|
||||
}
|
||||
|
||||
logGlobal->info("MapFormat_Objects finish");
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ CVcmiTestConfig::CVcmiTestConfig()
|
||||
|
||||
/* TEST_DATA_DIR may be wrong, if yes below test don't run,
|
||||
find your test data folder in your build and change TEST_DATA_DIR for it*/
|
||||
const std::string TEST_DATA_DIR = "test/";
|
||||
const std::string TEST_DATA_DIR = "test/testdata/";
|
||||
auto path = boost::filesystem::current_path();
|
||||
path+= "/" + TEST_DATA_DIR;
|
||||
if(boost::filesystem::exists(path)){
|
||||
|
@ -13,6 +13,9 @@
|
||||
|
||||
#include "MapComparer.h"
|
||||
|
||||
#include "../lib/ScopeGuard.h"
|
||||
#include "../lib/mapping/CMap.h"
|
||||
|
||||
#define VCMI_CHECK_FIELD_EQUAL_P(field) BOOST_CHECK_EQUAL(actual->field, expected->field)
|
||||
|
||||
#define VCMI_CHECK_FIELD_EQUAL(field) BOOST_CHECK_EQUAL(actual.field, expected.field)
|
||||
@ -147,6 +150,7 @@ void checkEqual(const TerrainTile & actual, const TerrainTile & expected)
|
||||
|
||||
}
|
||||
|
||||
//MapComparer
|
||||
void MapComparer::compareHeader()
|
||||
{
|
||||
//map size parameters are vital for further checks
|
||||
@ -192,7 +196,6 @@ void MapComparer::compareOptions()
|
||||
checkEqual(actual->allowedAbilities, expected->allowedAbilities);
|
||||
checkEqual(actual->allowedArtifact, expected->allowedArtifact);
|
||||
checkEqual(actual->allowedSpell, expected->allowedSpell);
|
||||
//checkEqual(actual->allowedAbilities, expected->allowedAbilities);
|
||||
|
||||
//todo: compareOptions events
|
||||
}
|
||||
@ -272,3 +275,203 @@ void MapComparer::operator() (const std::unique_ptr<CMap>& actual, const std::un
|
||||
this->expected = expected.get();
|
||||
compare();
|
||||
}
|
||||
|
||||
//JsonMapComparer
|
||||
JsonMapComparer::JsonMapComparer():
|
||||
strict(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
vstd::ScopeGuard<JsonMapComparer::TScopeGuard> JsonMapComparer::pushName(const std::string & name)
|
||||
{
|
||||
namePath.push_back(name);
|
||||
return vstd::makeScopeGuard<TScopeGuard>([this](){namePath.pop_back();});
|
||||
}
|
||||
|
||||
std::string JsonMapComparer::buildMessage(const std::string & message)
|
||||
{
|
||||
std::stringstream buf;
|
||||
|
||||
for(auto & s : namePath)
|
||||
buf << s << "|";
|
||||
buf << " " << message;
|
||||
return buf.str();
|
||||
}
|
||||
|
||||
void JsonMapComparer::addError(const std::string & message)
|
||||
{
|
||||
BOOST_ERROR(buildMessage(message));
|
||||
}
|
||||
|
||||
void JsonMapComparer::addWarning(const std::string & message)
|
||||
{
|
||||
BOOST_WARN_MESSAGE(false, buildMessage(message));
|
||||
}
|
||||
|
||||
bool JsonMapComparer::isEmpty(const JsonNode & value)
|
||||
{
|
||||
switch (value.getType())
|
||||
{
|
||||
case JsonNode::DATA_NULL:
|
||||
return true;
|
||||
case JsonNode::DATA_BOOL:
|
||||
return !value.Bool();
|
||||
case JsonNode::DATA_FLOAT:
|
||||
return value.Float() == 0;
|
||||
case JsonNode::DATA_STRING:
|
||||
return value.String() == "";
|
||||
case JsonNode::DATA_VECTOR:
|
||||
return value.Vector().empty();
|
||||
case JsonNode::DATA_STRUCT:
|
||||
return value.Struct().empty();
|
||||
break;
|
||||
default:
|
||||
BOOST_FAIL("Unknown Json type");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void JsonMapComparer::check(const bool condition, const std::string & message)
|
||||
{
|
||||
if(strict)
|
||||
BOOST_REQUIRE_MESSAGE(condition, buildMessage(message));
|
||||
else
|
||||
BOOST_CHECK_MESSAGE(condition, buildMessage(message));
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkEqualInteger(const si64 actual, const si64 expected)
|
||||
{
|
||||
if(actual != expected)
|
||||
{
|
||||
check(false, boost::str(boost::format("'%d' != '%d'") % actual % expected));
|
||||
}
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkEqualFloat(const double actual, const double expected)
|
||||
{
|
||||
if(std::abs(actual - expected) > 1e-6)
|
||||
{
|
||||
check(false, boost::str(boost::format("'%d' != '%d' (diff %d)") % actual % expected % (expected - actual)));
|
||||
}
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkEqualString(const std::string & actual, const std::string & expected)
|
||||
{
|
||||
if(actual != expected)
|
||||
{
|
||||
check(false, boost::str(boost::format("'%s' != '%s'") % actual % expected));
|
||||
}
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkEqualJson(const JsonMap & actual, const JsonMap & expected)
|
||||
{
|
||||
for(const auto & p : expected)
|
||||
checkStructField(actual, p.first, p.second);
|
||||
for(const auto & p : actual)
|
||||
checkExcessStructField(p.second, p.first, expected);
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkEqualJson(const JsonVector & actual, const JsonVector & expected)
|
||||
{
|
||||
check(actual.size() == expected.size(), "size mismatch");
|
||||
|
||||
size_t sz = std::min(actual.size(), expected.size());
|
||||
|
||||
for(size_t idx = 0; idx < sz; idx ++)
|
||||
{
|
||||
auto guard = pushName(boost::to_string(idx));
|
||||
|
||||
checkEqualJson(actual.at(idx), expected.at(idx));
|
||||
}
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkEqualJson(const JsonNode & actual, const JsonNode & expected)
|
||||
{
|
||||
//name has been pushed before
|
||||
|
||||
const bool validType = actual.getType() == expected.getType();
|
||||
|
||||
if(!validType)
|
||||
addError("type mismatch");
|
||||
|
||||
//do detail checks avoiding assertions in JsonNode
|
||||
if(validType)
|
||||
{
|
||||
switch (actual.getType())
|
||||
{
|
||||
case JsonNode::DATA_NULL:
|
||||
break; //do nothing
|
||||
case JsonNode::DATA_BOOL:
|
||||
check(actual.Bool() == expected.Bool(), "mismatch");
|
||||
break;
|
||||
case JsonNode::DATA_FLOAT:
|
||||
checkEqualFloat(actual.Float(),expected.Float());
|
||||
break;
|
||||
case JsonNode::DATA_STRING:
|
||||
checkEqualString(actual.String(),expected.String());
|
||||
break;
|
||||
case JsonNode::DATA_VECTOR:
|
||||
checkEqualJson(actual.Vector(), expected.Vector());
|
||||
break;
|
||||
case JsonNode::DATA_STRUCT:
|
||||
checkEqualJson(actual.Struct(), expected.Struct());
|
||||
break;
|
||||
case JsonNode::DATA_INTEGER:
|
||||
checkEqualInteger(actual.Integer(), expected.Integer());
|
||||
break;
|
||||
default:
|
||||
BOOST_FAIL("Unknown Json type");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkExcessStructField(const JsonNode & actualValue, const std::string & name, const JsonMap & expected)
|
||||
{
|
||||
auto guard = pushName(name);
|
||||
|
||||
if(!vstd::contains(expected, name))
|
||||
{
|
||||
if(isEmpty(actualValue))
|
||||
addWarning("excess");
|
||||
else
|
||||
addError("excess");
|
||||
}
|
||||
}
|
||||
|
||||
void JsonMapComparer::checkStructField(const JsonMap & actual, const std::string & name, const JsonNode & expectedValue)
|
||||
{
|
||||
auto guard = pushName(name);
|
||||
|
||||
if(!vstd::contains(actual, name))
|
||||
{
|
||||
if(isEmpty(expectedValue))
|
||||
addWarning("missing");
|
||||
else
|
||||
addError("missing");
|
||||
}
|
||||
else
|
||||
checkEqualJson(actual.at(name), expectedValue);
|
||||
}
|
||||
|
||||
void JsonMapComparer::compareHeader(const JsonNode & actual, const JsonNode & expected)
|
||||
{
|
||||
strict = false;
|
||||
auto guard = pushName("hdr");
|
||||
checkEqualJson(actual, expected);
|
||||
}
|
||||
|
||||
void JsonMapComparer::compareObjects(const JsonNode & actual, const JsonNode & expected)
|
||||
{
|
||||
strict = false;
|
||||
auto guard = pushName("obj");
|
||||
checkEqualJson(actual, expected);
|
||||
}
|
||||
|
||||
void JsonMapComparer::compareTerrain(const std::string & levelName, const JsonNode & actual, const JsonNode & expected)
|
||||
{
|
||||
strict = true;
|
||||
auto guard = pushName(levelName);
|
||||
checkEqualJson(actual, expected);
|
||||
}
|
||||
|
@ -10,7 +10,17 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../lib/mapping/CMap.h"
|
||||
#include "../lib/ScopeGuard.h"
|
||||
#include "../lib/JsonNode.h"
|
||||
|
||||
namespace vstd
|
||||
{
|
||||
template<typename Func>
|
||||
class ScopeGuard;
|
||||
}
|
||||
|
||||
class CMap;
|
||||
class CGObjectInstance;
|
||||
|
||||
struct MapComparer
|
||||
{
|
||||
@ -28,4 +38,40 @@ struct MapComparer
|
||||
void operator() (const std::unique_ptr<CMap>& actual, const std::unique_ptr<CMap>& expected);
|
||||
};
|
||||
|
||||
struct JsonMapComparer
|
||||
{
|
||||
typedef std::function<void(void)> TScopeGuard;
|
||||
|
||||
bool strict;
|
||||
std::list<std::string> namePath;
|
||||
|
||||
JsonMapComparer();
|
||||
|
||||
vstd::ScopeGuard<TScopeGuard> pushName(const std::string & name);
|
||||
|
||||
std::string buildMessage(const std::string & message);
|
||||
|
||||
void addError(const std::string & message);
|
||||
void addWarning(const std::string & message);
|
||||
|
||||
bool isEmpty(const JsonNode & value);
|
||||
|
||||
void check(const bool condition, const std::string & message);
|
||||
|
||||
void checkExcessStructField(const JsonNode & actualValue, const std::string & name, const JsonMap & expected);
|
||||
void checkStructField(const JsonMap & actual, const std::string & name, const JsonNode & expectedValue);
|
||||
|
||||
void checkEqualInteger(const si64 actual, const si64 expected);
|
||||
void checkEqualFloat(const double actual, const double expected);
|
||||
void checkEqualString(const std::string & actual, const std::string & expected);
|
||||
|
||||
void checkEqualJson(const JsonNode & actual, const JsonNode & expected);
|
||||
void checkEqualJson(const JsonMap & actual, const JsonMap & expected);
|
||||
void checkEqualJson(const JsonVector & actual, const JsonVector & expected);
|
||||
|
||||
void compareHeader(const JsonNode & actual, const JsonNode & expected);
|
||||
void compareObjects(const JsonNode & actual, const JsonNode & expected);
|
||||
void compareTerrain(const std::string & levelName, const JsonNode & actual, const JsonNode & expected);
|
||||
};
|
||||
|
||||
|
||||
|
367
test/testdata/ObjectPropertyTest/header.json
vendored
Normal file
367
test/testdata/ObjectPropertyTest/header.json
vendored
Normal file
@ -0,0 +1,367 @@
|
||||
{
|
||||
"allowedAbilities" : {
|
||||
"anyOf" : [
|
||||
"airMagic",
|
||||
"archery",
|
||||
"armorer",
|
||||
"artillery",
|
||||
"ballistics",
|
||||
"diplomacy",
|
||||
"earthMagic",
|
||||
"estates",
|
||||
"fireMagic",
|
||||
"firstAid",
|
||||
"intelligence",
|
||||
"leadership",
|
||||
"learning",
|
||||
"logistics",
|
||||
"luck",
|
||||
"mysticism",
|
||||
"navigation",
|
||||
"necromancy",
|
||||
"offence",
|
||||
"pathfinding",
|
||||
"resistance",
|
||||
"scholar",
|
||||
"scouting",
|
||||
"sorcery",
|
||||
"tactics",
|
||||
"waterMagic",
|
||||
"wisdom"
|
||||
]
|
||||
},
|
||||
"allowedArtifacts" : {
|
||||
"anyOf" : [
|
||||
"admiralsHat",
|
||||
"angelicAlliance",
|
||||
"armageddonsBlade",
|
||||
"armorOfTheDamned",
|
||||
"bowOfTheSharpshooter",
|
||||
"cloakOfTheUndeadKing",
|
||||
"cornucopia",
|
||||
"elixirOfLife",
|
||||
"powerOfTheDragonFather",
|
||||
"ringOfTheMagi",
|
||||
"statueOfLegion",
|
||||
"titansThunder",
|
||||
"vialOfDragonBlood",
|
||||
"wizardsWell"
|
||||
]
|
||||
},
|
||||
"allowedHeroes" : {
|
||||
"anyOf" : [
|
||||
"adela",
|
||||
"adelaide",
|
||||
"aenain",
|
||||
"aeris",
|
||||
"aine",
|
||||
"aislinn",
|
||||
"ajit",
|
||||
"alagar",
|
||||
"alamar",
|
||||
"alkin",
|
||||
"andra",
|
||||
"arlach",
|
||||
"ash",
|
||||
"astral",
|
||||
"axsis",
|
||||
"ayden",
|
||||
"brissa",
|
||||
"broghild",
|
||||
"bron",
|
||||
"caitlin",
|
||||
"calh",
|
||||
"calid",
|
||||
"charna",
|
||||
"christian",
|
||||
"ciele",
|
||||
"clancy",
|
||||
"clavius",
|
||||
"coronius",
|
||||
"cragHack",
|
||||
"cuthbert",
|
||||
"cyra",
|
||||
"dace",
|
||||
"damacon",
|
||||
"daremyth",
|
||||
"darkstorn",
|
||||
"deemer",
|
||||
"dessa",
|
||||
"drakon",
|
||||
"elleshar",
|
||||
"erdamon",
|
||||
"fafner",
|
||||
"fiona",
|
||||
"fiur",
|
||||
"galthran",
|
||||
"gelare",
|
||||
"gem",
|
||||
"geon",
|
||||
"gerwulf",
|
||||
"gird",
|
||||
"gretchin",
|
||||
"grindan",
|
||||
"gundula",
|
||||
"gunnar",
|
||||
"gurnisson",
|
||||
"halon",
|
||||
"ignatius",
|
||||
"ignissa",
|
||||
"inteus",
|
||||
"iona",
|
||||
"isra",
|
||||
"ivor",
|
||||
"jabarkas",
|
||||
"jaegar",
|
||||
"jeddite",
|
||||
"jenova",
|
||||
"josephine",
|
||||
"kalt",
|
||||
"korbac",
|
||||
"krellion",
|
||||
"kyrre",
|
||||
"labetha",
|
||||
"lacus",
|
||||
"lorelei",
|
||||
"loynis",
|
||||
"malcom",
|
||||
"malekith",
|
||||
"marius",
|
||||
"melodia",
|
||||
"mephala",
|
||||
"merist",
|
||||
"mirlanda",
|
||||
"moandor",
|
||||
"monere",
|
||||
"nagash",
|
||||
"neela",
|
||||
"nimbus",
|
||||
"nymus",
|
||||
"octavia",
|
||||
"olema",
|
||||
"oris",
|
||||
"pasis",
|
||||
"piquedram",
|
||||
"pyre",
|
||||
"rashka",
|
||||
"rion",
|
||||
"rissa",
|
||||
"rosic",
|
||||
"ryland",
|
||||
"sandro",
|
||||
"sanya",
|
||||
"saurug",
|
||||
"sephinroth",
|
||||
"septienna",
|
||||
"serena",
|
||||
"shakti",
|
||||
"shiva",
|
||||
"sirMullich",
|
||||
"solmyr",
|
||||
"straker",
|
||||
"styg",
|
||||
"sylvia",
|
||||
"synca",
|
||||
"tamika",
|
||||
"tazar",
|
||||
"terek",
|
||||
"thane",
|
||||
"thant",
|
||||
"theodorus",
|
||||
"thorgrim",
|
||||
"thunar",
|
||||
"tiva",
|
||||
"torosar ",
|
||||
"tyraxor",
|
||||
"tyris",
|
||||
"ufretin",
|
||||
"uland",
|
||||
"verdish",
|
||||
"vey",
|
||||
"vidomina",
|
||||
"vokial",
|
||||
"voy",
|
||||
"wystan",
|
||||
"xarfax",
|
||||
"xsi",
|
||||
"xyron",
|
||||
"yog",
|
||||
"zubin",
|
||||
"zydar"
|
||||
]
|
||||
},
|
||||
"allowedSpells" : {
|
||||
"anyOf" : [
|
||||
"airElemental",
|
||||
"airShield",
|
||||
"animateDead",
|
||||
"antiMagic",
|
||||
"armageddon",
|
||||
"berserk",
|
||||
"bless",
|
||||
"blind",
|
||||
"bloodlust",
|
||||
"chainLightning",
|
||||
"clone",
|
||||
"counterstrike",
|
||||
"cure",
|
||||
"curse",
|
||||
"deathRipple",
|
||||
"destroyUndead",
|
||||
"dimensionDoor",
|
||||
"disguise",
|
||||
"dispel",
|
||||
"disruptingRay",
|
||||
"earthElemental",
|
||||
"earthquake",
|
||||
"fireElemental",
|
||||
"fireShield",
|
||||
"fireWall",
|
||||
"fireball",
|
||||
"fly",
|
||||
"forceField",
|
||||
"forgetfulness",
|
||||
"fortune",
|
||||
"frenzy",
|
||||
"frostRing",
|
||||
"haste",
|
||||
"hypnotize",
|
||||
"iceBolt",
|
||||
"implosion",
|
||||
"inferno",
|
||||
"landMine",
|
||||
"lightningBolt",
|
||||
"magicArrow",
|
||||
"magicMirror",
|
||||
"meteorShower",
|
||||
"mirth",
|
||||
"misfortune",
|
||||
"prayer",
|
||||
"precision",
|
||||
"protectAir",
|
||||
"protectEarth",
|
||||
"protectFire",
|
||||
"protectWater",
|
||||
"quicksand",
|
||||
"removeObstacle",
|
||||
"resurrection",
|
||||
"sacrifice",
|
||||
"scuttleBoat",
|
||||
"shield",
|
||||
"slayer",
|
||||
"slow",
|
||||
"sorrow",
|
||||
"stoneSkin",
|
||||
"summonBoat",
|
||||
"teleport",
|
||||
"titanBolt",
|
||||
"townPortal",
|
||||
"viewAir",
|
||||
"viewEarth",
|
||||
"visions",
|
||||
"waterElemental",
|
||||
"waterWalk",
|
||||
"weakness"
|
||||
]
|
||||
},
|
||||
"defeatIconIndex" : 3,
|
||||
"defeatString" : "Test defeatString",
|
||||
"difficulty" : "NORMAL",
|
||||
"mapLevels" : {
|
||||
"surface" : {
|
||||
"height" : 144,
|
||||
"index" : 0,
|
||||
"width" : 144
|
||||
},
|
||||
"underground" : {
|
||||
"height" : 144,
|
||||
"index" : 1,
|
||||
"width" : 144
|
||||
}
|
||||
},
|
||||
"mods" : {},
|
||||
"name" : "ObjectPropertyTest v1",
|
||||
"players" : {
|
||||
"blue" : {
|
||||
"canPlay" : "AIOnly",
|
||||
"heroes" : {
|
||||
"randomHero_104" : {}
|
||||
}
|
||||
},
|
||||
"green" : {
|
||||
"canPlay" : "AIOnly",
|
||||
"heroes" : {
|
||||
"randomHero_105" : {}
|
||||
}
|
||||
},
|
||||
"orange" : {
|
||||
"canPlay" : "AIOnly",
|
||||
"heroes" : {
|
||||
"randomHero_106" : {}
|
||||
}
|
||||
},
|
||||
"pink" : {
|
||||
"canPlay" : "AIOnly",
|
||||
"heroes" : {
|
||||
"randomHero_109" : {}
|
||||
}
|
||||
},
|
||||
"purple" : {
|
||||
"canPlay" : "AIOnly",
|
||||
"heroes" : {
|
||||
"randomHero_107" : {}
|
||||
}
|
||||
},
|
||||
"red" : {
|
||||
"canPlay" : "PlayerOrAI",
|
||||
"mainHero" : "hero_101",
|
||||
"heroes" : {
|
||||
"hero_101" : {
|
||||
"type" : "ingham"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tan" : {
|
||||
"canPlay" : "AIOnly",
|
||||
"heroes" : {
|
||||
"randomHero_103" : {}
|
||||
}
|
||||
},
|
||||
"teal" : {
|
||||
"canPlay" : "AIOnly",
|
||||
"heroes" : {
|
||||
"randomHero_108" : {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggeredEvents" : {
|
||||
"standardVictory" : {
|
||||
"condition" : [
|
||||
"standardWin"
|
||||
|
||||
],
|
||||
"effect" : {
|
||||
"messageToSend" : "%s standardVictory effect test message",
|
||||
"type" : "victory"
|
||||
},
|
||||
"message" : "Test standardVictory message"
|
||||
},
|
||||
"standardDefeat" : {
|
||||
"condition" : [
|
||||
"daysWithoutTown",
|
||||
{
|
||||
"value" : 7
|
||||
}
|
||||
],
|
||||
"effect" : {
|
||||
"messageToSend" : "%s standardDefeat effect test message",
|
||||
"type" : "defeat"
|
||||
},
|
||||
"message" : "%s, standardDefeat"
|
||||
}
|
||||
},
|
||||
"victoryIconIndex" : 11,
|
||||
"victoryString" : "Test victoryString",
|
||||
"versionMajor" : 1,
|
||||
"versionMinor" : 0
|
||||
}
|
7389
test/testdata/ObjectPropertyTest/objects.ex.json
vendored
Normal file
7389
test/testdata/ObjectPropertyTest/objects.ex.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7389
test/testdata/ObjectPropertyTest/objects.json
vendored
Normal file
7389
test/testdata/ObjectPropertyTest/objects.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
144
test/testdata/ObjectPropertyTest/surface_terrain.json
vendored
Normal file
144
test/testdata/ObjectPropertyTest/surface_terrain.json
vendored
Normal file
@ -0,0 +1,144 @@
|
||||
[["gr55_","gr50_","gr50_","gr56_","gr56_","gr52_","gr60_","gr61_","gr69_","gr55_","gr53_","gr54_","gr65_","gr56_","gr50_","gr51_","gr51_","gr64_","gr51_","gr54_","gr53_","gr49_","gr63_","gr68_","gr49_","gr52_","gr54_","gr55_","gr55_","gr54_","gr54_","gr55_","gr56_","gr54_","gr55_","gr52_","gr55_","gr56_","gr71_","gr54_","gr50_","gr69_","gr55_","gr54_","gr53_","gr65_","gr51_","gr50_","gr63_","gr52_","gr54_","gr60_","gr52_","gr50_","gr59_","gr51_","gr49_","gr51_","gr62_","gr49_","gr51_","gr51_","gr49_","gr68_","gr56_","gr51_","gr55_","gr54_","gr52_","gr54_","gr69_","gr52_","gr54_","gr53_","gr51_","gr50_","gr49_","gr51_","gr56_","gr54_","gr51_","gr50_","gr51_","gr56_","gr65_","gr52_","gr51_","gr49_","gr65_","gr51_","gr56_","gr65_","gr54_","gr66_","gr55_","gr54_","gr64_","gr65_","gr50_","gr60_","gr49_","gr53_","gr70_","gr56_","gr50_","gr53_","gr51_","gr52_","gr60_","gr55_","gr56_","gr71_","gr55_","gr49_","gr52_","gr57_","gr54_","gr56_","gr54_","gr51_","gr64_","gr52_","gr54_","gr53_","gr49_","gr50_","gr49_","gr54_","gr55_","gr49_","gr49_","gr56_","gr54_","gr53_","gr58_","gr49_","gr68_","gr55_","gr63_","gr67_","gr54_","gr51_","gr51_","gr69_"],
|
||||
["gr49_","gr49_","gr56_","gr72_","gr49_","gr53_","gr52_","gr50_","gr54_","gr71_","gr54_","gr63_","gr50_","gr59_","gr54_","gr59_","gr53_","gr50_","gr50_","gr57_","gr49_","gr71_","gr50_","gr63_","gr54_","gr50_","gr69_","gr56_","gr55_","gr49_","gr57_","gr56_","gr51_","gr50_","gr55_","gr60_","gr53_","gr51_","gr53_","gr55_","gr52_","gr51_","gr58_","gr54_","gr67_","gr53_","gr70_","gr53_","gr50_","gr68_","gr71_","gr55_","gr52_","gr49_","gr53_","gr51_","gr55_","gr55_","gr55_","gr65_","gr55_","gr56_","gr51_","gr49_","gr52_","gr53_","gr50_","gr52_","gr55_","gr50_","gr49_","gr49_","gr49_","gr56_","gr50_","gr66_","gr51_","gr49_","gr49_","gr52_","gr55_","gr55_","gr55_","gr51_","gr54_","gr69_","gr51_","gr51_","gr56_","gr53_","gr68_","gr56_","gr63_","gr56_","gr56_","gr55_","gr52_","gr49_","gr56_","gr51_","gr57_","gr51_","gr49_","gr49_","gr53_","gr54_","gr68_","gr51_","gr51_","gr54_","gr55_","gr49_","gr51_","gr52_","gr51_","gr52_","gr71_","gr51_","gr52_","gr49_","gr55_","gr59_","gr52_","gr52_","gr54_","gr50_","gr56_","gr50_","gr51_","gr54_","gr49_","gr54_","gr65_","gr53_","gr52_","gr53_","gr56_","gr61_","gr50_","gr50_","gr50_","gr52_","gr49_","gr51_"],
|
||||
["gr54_","gr49_","gr50_","gr50_","gr56_","gr49_","gr65_","gr53_","gr54_","gr52_","gr55_","gr62_","gr61_","gr53_","gr51_","gr51_","gr50_","gr53_","gr53_","gr55_","gr58_","gr56_","gr50_","gr71_","gr50_","gr54_","gr51_","gr70_","gr56_","gr52_","gr54_","gr50_","gr56_","gr49_","gr51_","gr69_","gr55_","gr57_","gr56_","gr53_","gr60_","gr53_","gr54_","gr52_","gr50_","gr57_","gr50_","gr49_","gr56_","gr53_","gr53_","gr53_","gr49_","gr52_","gr52_","gr54_","gr68_","gr56_","gr64_","gr55_","gr69_","gr52_","gr54_","gr55_","gr50_","gr49_","gr65_","gr54_","gr62_","gr50_","gr52_","gr51_","gr50_","gr56_","gr72_","gr56_","gr55_","gr54_","gr52_","gr60_","gr53_","gr54_","gr63_","gr64_","gr56_","gr50_","gr72_","gr51_","gr53_","gr52_","gr55_","gr54_","gr49_","gr54_","gr50_","gr56_","gr59_","gr51_","gr49_","gr59_","gr53_","gr52_","gr50_","gr70_","gr54_","gr68_","gr53_","gr49_","gr67_","gr53_","gr49_","gr52_","gr50_","gr56_","gr53_","gr72_","gr53_","gr49_","gr56_","gr52_","gr61_","gr56_","gr58_","gr50_","gr61_","gr50_","gr49_","gr55_","gr51_","gr53_","gr53_","gr54_","gr50_","gr56_","gr51_","gr54_","gr50_","gr49_","gr54_","gr56_","gr54_","gr61_","gr49_","gr50_"],
|
||||
["gr53_","gr51_","gr71_","gr54_","gr51_","gr57_","gr51_","gr51_","gr69_","gr70_","gr56_","gr51_","gr56_","gr70_","gr51_","gr59_","gr50_","gr49_","gr68_","gr55_","gr55_","gr69_","gr56_","gr51_","gr61_","gr63_","gr58_","gr51_","gr49_","gr70_","gr53_","gr52_","gr56_","gr56_","gr51_","gr57_","gr55_","gr50_","gr50_","gr55_","gr52_","gr53_","gr50_","gr65_","gr50_","gr52_","gr56_","gr53_","gr49_","gr55_","gr54_","gr52_","gr51_","gr51_","gr56_","gr54_","gr56_","gr55_","gr49_","gr68_","gr51_","gr72_","gr52_","gr60_","gr51_","gr70_","gr51_","gr49_","gr59_","gr53_","gr52_","gr72_","gr50_","gr53_","gr54_","gr60_","gr51_","gr51_","gr35_","gr30|","gr31|","gr29|","gr31|","gr30|","gr28|","gr30|","gr29|","gr29|","gr29|","gr31|","gr31|","gr31|","gr33-","gr52_","gr54_","gr58_","gr52_","gr61_","gr54_","gr55_","gr53_","gr57_","gr49_","gr55_","gr55_","gr55_","gr70_","gr53_","gr52_","gr51_","gr68_","gr55_","gr52_","gr53_","gr52_","gr55_","gr57_","gr50_","gr50_","gr67_","gr58_","gr50_","gr64_","gr70_","gr52_","gr56_","gr51_","gr52_","gr69_","gr54_","gr52_","gr65_","gr56_","gr54_","gr57_","gr51_","gr52_","gr50_","gr49_","gr51_","gr68_","gr52_","gr67_","gr56_"],
|
||||
["gr56_","gr54_","gr56_","gr52_","gr50_","gr52_","gr52_","gr54_","gr67_","gr53_","gr49_","gr54_","gr52_","gr54_","gr60_","gr52_","gr53_","gr55_","gr62_","gr49_","gr49_","gr60_","gr52_","gr52_","gr55_","gr54_","gr56_","gr54_","gr51_","gr55_","gr54_","gr55_","gr68_","gr65_","gr63_","gr55_","gr51_","gr55_","gr49_","gr53_","gr66_","gr50_","gr53_","gr52_","gr51_","gr54_","gr56_","gr49_","gr52_","gr58_","gr51_","gr54_","gr50_","gr52_","gr51_","gr66_","gr50_","gr51_","gr49_","gr63_","gr50_","gr67_","gr51_","gr50_","gr54_","gr52_","gr57_","gr55_","gr60_","gr51_","gr49_","gr50_","gr57_","gr56_","gr60_","gr55_","gr49_","gr54_","gr24-","wt0_","wt8_","wt10_","wt11_","wt10_","wt8_","wt10_","wt11_","wt9_","wt11_","wt9_","wt11_","wt3-","gr26_","gr72_","gr52_","gr51_","gr56_","gr49_","gr55_","gr52_","gr51_","gr49_","gr69_","gr53_","gr71_","gr55_","gr55_","gr55_","gr54_","gr56_","gr49_","gr51_","gr56_","gr52_","gr70_","gr56_","gr49_","gr55_","gr58_","gr55_","gr70_","gr49_","gr70_","gr56_","gr60_","gr55_","gr64_","gr49_","gr50_","gr55_","gr64_","gr54_","gr50_","gr72_","gr52_","gr60_","gr52_","gr56_","gr53_","gr53_","gr50_","gr51_","gr55_","gr55_"],
|
||||
["gr61_","gr51_","gr53_","gr61_","gr55_","gr50_","gr51_","gr53_","gr55_","gr50_","gr50_","gr56_","gr56_","gr54_","gr63_","gr61_","gr50_","gr55_","gr52_","gr54_","gr56_","gr56_","gr70_","gr49_","gr56_","gr49_","gr62_","gr56_","gr54_","gr56_","gr56_","gr50_","gr49_","gr67_","gr55_","gr56_","gr53_","gr71_","gr54_","gr64_","gr55_","gr52_","gr56_","gr53_","gr52_","gr55_","gr50_","gr54_","gr58_","gr55_","gr52_","gr51_","gr53_","gr49_","gr51_","gr51_","gr52_","gr52_","gr50_","gr56_","gr49_","gr61_","gr52_","gr49_","gr53_","gr52_","gr52_","gr55_","gr49_","gr53_","gr53_","gr49_","gr54_","gr64_","gr50_","gr64_","gr55_","gr49_","gr24-","wt5_","wt21_","wt25_","wt32_","wt25_","wt30_","wt32_","wt28_","wt21_","wt24_","wt28_","wt30_","wt7-","gr24_","gr52_","gr52_","gr69_","gr56_","gr55_","gr52_","gr68_","gr54_","gr52_","gr55_","gr55_","gr53_","gr53_","gr55_","gr64_","gr49_","gr61_","gr56_","gr55_","gr64_","gr68_","gr52_","gr68_","gr61_","gr55_","gr56_","gr54_","gr49_","gr54_","gr52_","gr56_","gr53_","gr52_","gr54_","gr55_","gr50_","gr58_","gr55_","gr70_","gr49_","gr52_","gr61_","gr50_","gr59_","gr59_","gr64_","gr53_","gr66_","gr50_","gr61_","gr55_"],
|
||||
["gr53_","gr49_","gr53_","gr56_","gr56_","gr52_","gr63_","gr56_","gr50_","gr52_","gr50_","gr56_","gr54_","gr69_","gr52_","gr54_","gr59_","gr55_","gr70_","gr53_","gr52_","gr54_","gr54_","gr50_","gr56_","gr50_","gr51_","gr56_","gr50_","gr63_","gr52_","gr53_","gr66_","gr54_","gr50_","gr50_","gr67_","gr50_","gr49_","gr55_","gr51_","gr60_","gr51_","gr53_","gr62_","gr56_","gr53_","gr66_","gr51_","gr53_","gr72_","gr49_","gr69_","gr49_","gr49_","gr56_","gr60_","gr51_","gr50_","gr56_","gr50_","gr55_","gr55_","gr72_","gr54_","gr53_","gr49_","gr57_","gr52_","gr50_","gr55_","gr51_","gr59_","gr53_","gr56_","gr55_","gr61_","gr52_","gr27-","wt6_","wt24_","wt24_","wt29_","wt24_","wt22_","wt22_","wt26_","wt26_","wt22_","wt23_","wt23_","wt7-","gr27_","gr55_","gr53_","gr56_","gr50_","gr53_","gr52_","gr54_","gr53_","gr51_","gr56_","gr69_","gr50_","gr64_","gr63_","gr55_","gr52_","gr65_","gr49_","gr51_","gr50_","gr54_","gr54_","gr50_","gr55_","gr51_","gr51_","gr50_","gr58_","gr56_","gr65_","gr55_","gr63_","gr49_","gr62_","gr53_","gr52_","gr54_","gr51_","gr55_","gr53_","gr53_","gr52_","gr59_","gr56_","gr52_","gr50_","gr52_","gr50_","gr71_","gr52_","gr55_"],
|
||||
["gr56_","gr64_","gr50_","gr62_","gr55_","gr49_","gr49_","gr56_","gr52_","gr68_","gr50_","gr54_","gr52_","gr52_","gr51_","gr56_","gr54_","gr49_","gr52_","gr54_","gr52_","gr72_","gr59_","gr55_","gr54_","gr72_","gr49_","gr54_","gr55_","gr55_","gr50_","gr56_","gr54_","gr51_","gr49_","gr55_","gr54_","gr49_","gr50_","gr50_","gr54_","gr49_","gr54_","gr67_","gr49_","gr56_","gr59_","gr72_","gr63_","gr53_","gr49_","gr50_","gr51_","gr52_","gr54_","gr49_","gr51_","gr63_","gr50_","gr53_","gr51_","gr64_","gr52_","gr55_","gr50_","gr55_","gr51_","gr54_","gr52_","gr50_","gr54_","gr50_","gr54_","gr56_","gr53_","gr53_","gr53_","gr69_","gr25-","wt6_","wt22_","wt30_","wt30_","wt21_","wt25_","wt23_","wt25_","wt32_","wt29_","wt28_","wt27_","wt5-","gr24_","gr66_","gr56_","gr66_","gr54_","gr69_","gr49_","gr50_","gr49_","gr53_","gr53_","gr55_","gr54_","gr56_","gr55_","gr52_","gr56_","gr52_","gr52_","gr55_","gr55_","gr56_","gr60_","gr50_","gr53_","gr65_","gr52_","gr51_","gr51_","gr55_","gr55_","gr52_","gr50_","gr61_","gr56_","gr51_","gr58_","gr68_","gr50_","gr51_","gr54_","gr56_","gr72_","gr50_","gr53_","gr65_","gr53_","gr49_","gr51_","gr52_","gr53_","gr55_"],
|
||||
["gr54_","gr72_","gr50_","gr54_","gr58_","gr49_","gr49_","gr68_","gr53_","gr49_","gr50_","gr51_","gr52_","gr49_","gr51_","gr66_","gr52_","gr68_","gr54_","gr58_","gr58_","gr53_","gr54_","gr49_","gr51_","gr52_","gr54_","gr51_","gr68_","gr53_","gr50_","gr52_","gr52_","gr49_","gr52_","gr55_","gr53_","gr51_","gr56_","gr50_","gr55_","gr52_","gr49_","gr71_","gr53_","gr55_","gr50_","gr53_","gr54_","gr54_","gr53_","gr53_","gr53_","gr51_","gr71_","gr54_","gr49_","gr56_","gr50_","gr58_","gr69_","gr56_","gr58_","gr54_","gr49_","gr51_","gr49_","gr53_","gr56_","gr54_","gr51_","gr53_","gr56_","gr56_","gr50_","gr49_","gr69_","gr54_","gr27-","wt5_","wt30_","wt31_","wt31_","wt31_","wt30_","wt27_","wt31_","wt27_","wt24_","wt22_","wt32_","wt6-","gr26_","gr51_","gr53_","gr53_","gr54_","gr54_","gr49_","gr49_","gr50_","gr50_","gr65_","gr54_","gr57_","gr54_","gr55_","gr56_","gr53_","gr55_","gr56_","gr52_","gr55_","gr60_","gr53_","gr52_","gr49_","gr59_","gr51_","gr63_","gr50_","gr67_","gr52_","gr55_","gr53_","gr56_","gr52_","gr50_","gr50_","gr51_","gr52_","gr49_","gr51_","gr55_","gr51_","gr52_","gr56_","gr53_","gr56_","gr52_","gr52_","gr56_","gr56_","gr55_"],
|
||||
["gr54_","gr50_","gr54_","gr56_","gr50_","gr53_","gr54_","gr52_","gr53_","gr51_","gr50_","gr54_","gr68_","gr55_","gr62_","gr52_","gr53_","gr49_","gr51_","gr72_","gr68_","gr54_","gr55_","gr55_","gr55_","gr53_","gr51_","gr53_","gr51_","gr51_","gr68_","gr56_","gr53_","gr56_","gr51_","gr49_","gr50_","gr56_","gr61_","gr54_","gr55_","gr51_","gr51_","gr50_","gr50_","gr54_","gr51_","gr51_","gr63_","gr56_","gr53_","gr51_","gr51_","gr53_","gr55_","gr56_","gr53_","gr62_","gr58_","gr52_","gr56_","gr55_","gr50_","gr53_","gr51_","gr64_","gr50_","gr54_","gr49_","gr53_","gr54_","gr53_","gr49_","gr54_","gr55_","gr51_","gr55_","gr55_","gr27-","wt4_","wt21_","wt29_","wt26_","wt22_","wt30_","wt21_","wt27_","wt32_","wt26_","wt28_","wt29_","wt4-","gr27_","gr52_","gr52_","gr65_","gr56_","gr49_","gr53_","gr50_","gr56_","gr50_","gr67_","gr49_","gr50_","gr49_","gr71_","gr50_","gr51_","gr57_","gr54_","gr49_","gr50_","gr66_","gr51_","gr49_","gr65_","gr49_","gr64_","gr56_","gr55_","gr53_","gr49_","gr49_","gr49_","gr51_","gr49_","gr49_","gr53_","gr51_","gr67_","gr50_","gr54_","gr49_","gr51_","gr51_","gr51_","gr53_","gr58_","gr53_","gr55_","gr52_","gr53_","gr56_"],
|
||||
["gr50_","gr53_","gr54_","gr52_","gr54_","gr52_","gr50_","gr49_","gr51_","gr50_","gr65_","gr71_","gr60_","gr51_","gr50_","gr62_","gr56_","gr35_","gr31|","gr30|","gr33-","gr49_","gr54_","gr50_","gr50_","gr51_","gr72_","gr33_","gr31|","gr29|","gr34-","gr68_","gr49_","gr49_","gr53_","gr53_","gr59_","gr49_","gr55_","gr54_","gr55_","gr64_","gr53_","gr51_","gr55_","gr52_","gr53_","gr49_","gr51_","gr51_","gr65_","gr51_","gr71_","gr51_","gr68_","gr54_","gr49_","gr50_","gr65_","gr61_","gr52_","gr54_","gr53_","gr69_","gr56_","gr54_","gr55_","gr50_","gr55_","gr55_","gr55_","gr65_","gr49_","gr72_","gr52_","gr52_","gr49_","gr70_","gr27-","wt5_","wt31_","wt31_","wt28_","wt22_","wt21_","wt32_","wt32_","wt25_","wt28_","wt26_","wt31_","wt6-","gr27_","gr53_","gr53_","gr52_","gr69_","gr53_","gr69_","gr53_","gr66_","gr54_","gr50_","gr49_","gr51_","gr49_","gr62_","gr50_","gr50_","gr50_","gr55_","gr54_","gr55_","gr56_","gr60_","gr56_","gr54_","gr49_","gr51_","gr54_","gr52_","gr52_","gr54_","gr49_","gr54_","gr53_","gr49_","gr56_","gr51_","gr53_","gr53_","gr53_","gr53_","gr55_","gr49_","gr54_","gr51_","gr59_","gr52_","gr53_","gr50_","gr55_","gr68_","gr49_"],
|
||||
["gr56_","gr57_","gr50_","gr51_","gr72_","gr54_","gr51_","gr66_","gr49_","gr71_","gr49_","gr71_","gr54_","gr71_","gr56_","gr49_","gr71_","gr25-","rc9_","rc11_","gr24_","gr56_","gr51_","gr56_","gr52_","gr71_","gr53_","gr24-","rc8_","rc11_","gr24_","gr49_","gr72_","gr59_","gr52_","gr51_","gr49_","gr53_","gr55_","gr51_","gr52_","gr51_","gr71_","gr50_","gr53_","gr49_","gr50_","gr56_","gr51_","gr56_","gr49_","gr53_","gr55_","gr59_","gr56_","gr56_","gr51_","gr67_","gr49_","gr52_","gr49_","gr52_","gr56_","gr54_","gr71_","gr54_","gr56_","gr56_","gr50_","gr52_","gr53_","gr49_","gr63_","gr56_","gr49_","gr51_","gr52_","gr53_","gr24-","wt1|","wt8|","wt10|","wt10|","wt11|","wt10|","wt11|","wt8|","wt8|","wt10|","wt9|","wt8|","wt1+","gr27_","gr53_","gr56_","gr64_","gr54_","gr50_","gr72_","gr51_","gr50_","gr53_","gr63_","gr61_","gr50_","gr55_","gr54_","gr56_","gr49_","gr66_","gr56_","gr52_","gr71_","gr56_","gr49_","gr50_","gr55_","gr61_","gr52_","gr55_","gr56_","gr64_","gr50_","gr55_","gr52_","gr54_","gr50_","gr56_","gr51_","gr55_","gr52_","gr50_","gr57_","gr55_","gr69_","gr53_","gr59_","gr54_","gr54_","gr51_","gr54_","gr49_","gr68_","gr50_"],
|
||||
["gr65_","gr55_","gr50_","gr52_","gr54_","gr52_","gr50_","gr55_","gr69_","gr49_","gr56_","gr61_","gr49_","gr50_","gr72_","gr52_","gr56_","gr25-","rc16_","rc19_","gr26_","gr51_","gr53_","gr52_","gr52_","gr63_","gr49_","gr25-","rc16_","rc19_","gr25_","gr62_","gr49_","gr70_","gr54_","gr52_","gr52_","gr68_","gr52_","gr52_","gr57_","gr50_","gr49_","gr56_","gr68_","gr54_","gr49_","gr54_","gr52_","gr54_","gr52_","gr49_","gr53_","gr55_","gr49_","gr55_","gr68_","gr50_","gr64_","gr49_","gr54_","gr49_","gr54_","gr54_","gr49_","gr55_","gr69_","gr56_","gr65_","gr53_","gr58_","gr54_","gr53_","gr53_","gr69_","gr56_","gr55_","gr51_","gr33|","gr28_","gr31_","gr28_","gr30_","gr29_","gr29_","gr29_","gr29_","gr29_","gr28_","gr29_","gr29_","gr30_","gr33+","gr52_","gr52_","gr52_","gr56_","gr72_","gr56_","gr50_","gr54_","gr56_","gr50_","gr53_","gr56_","gr50_","gr53_","gr61_","gr50_","gr50_","gr52_","gr50_","gr51_","gr58_","gr49_","gr53_","gr54_","gr52_","gr50_","gr53_","gr58_","gr50_","gr63_","gr52_","gr59_","gr55_","gr69_","gr55_","gr55_","gr51_","gr54_","gr50_","gr49_","gr59_","gr54_","gr49_","gr50_","gr55_","gr56_","gr56_","gr51_","gr50_","gr55_","gr52_"],
|
||||
["gr53_","gr70_","gr53_","gr55_","gr65_","gr61_","gr63_","gr56_","gr56_","gr56_","gr55_","gr49_","gr52_","gr52_","gr49_","gr56_","gr60_","gr27-","rc16_","rc19_","gr25_","gr64_","gr69_","gr51_","gr51_","gr70_","gr53_","gr26-","rc17_","rc19_","gr24_","gr51_","gr54_","gr50_","gr52_","gr55_","gr52_","gr54_","gr72_","gr49_","gr53_","gr71_","gr51_","gr68_","gr52_","gr50_","gr49_","gr53_","gr65_","gr53_","gr51_","gr64_","gr55_","gr55_","gr56_","gr50_","gr52_","gr62_","gr71_","gr53_","gr68_","gr54_","gr54_","gr63_","gr70_","gr49_","gr54_","gr51_","gr54_","gr49_","gr52_","gr54_","gr49_","gr56_","gr50_","gr51_","gr52_","gr49_","gr52_","gr56_","gr53_","gr52_","gr51_","gr55_","gr56_","gr70_","gr53_","gr70_","gr52_","gr71_","gr51_","gr55_","gr51_","gr66_","gr50_","gr65_","gr54_","gr64_","gr51_","gr69_","gr51_","gr65_","gr56_","gr49_","gr53_","gr50_","gr68_","gr56_","gr51_","gr49_","gr58_","gr56_","gr65_","gr52_","gr54_","gr51_","gr65_","gr55_","gr54_","gr56_","gr67_","gr49_","gr59_","gr71_","gr50_","gr55_","gr50_","gr55_","gr61_","gr49_","gr52_","gr52_","gr55_","gr51_","gr54_","gr49_","gr55_","gr69_","gr49_","gr51_","gr49_","gr51_","gr51_","gr70_"],
|
||||
["gr51_","gr54_","gr52_","gr53_","gr49_","gr49_","gr66_","gr70_","gr49_","gr53_","gr54_","gr52_","gr72_","gr53_","gr69_","gr52_","gr51_","gr26-","rc16_","rc19_","gr27_","gr49_","gr51_","gr55_","gr49_","gr49_","gr50_","gr24-","rc16_","rc19_","gr27_","gr56_","gr53_","gr56_","gr54_","gr52_","gr56_","gr68_","gr49_","gr50_","gr55_","gr50_","gr60_","gr54_","gr61_","gr53_","gr51_","gr53_","gr49_","gr54_","gr54_","gr49_","gr70_","gr49_","gr52_","gr49_","gr67_","gr55_","gr33_","gr31|","gr30|","gr28|","gr28|","gr30|","gr31|","gr29|","gr28|","gr31|","gr31|","gr31|","gr28|","gr29|","gr29|","gr31|","gr28|","gr31|","gr28|","gr31|","gr28|","gr30|","gr29|","gr29|","gr31|","gr30|","gr30|","gr29|","gr31|","gr28|","gr28|","gr28|","gr31|","gr28|","gr30|","gr29|","gr30|","gr28|","gr29|","gr34-","gr50_","gr52_","gr58_","gr53_","gr50_","gr50_","gr56_","gr71_","gr50_","gr50_","gr53_","gr56_","gr49_","gr63_","gr49_","gr56_","gr54_","gr68_","gr49_","gr61_","gr56_","gr54_","gr51_","gr53_","gr55_","gr56_","gr50_","gr54_","gr56_","gr56_","gr62_","gr56_","gr69_","gr56_","gr49_","gr69_","gr51_","gr54_","gr68_","gr56_","gr50_","gr68_","gr56_","gr51_","gr49_","gr56_"],
|
||||
["gr53_","gr55_","gr63_","gr53_","gr62_","gr56_","gr51_","gr56_","gr50_","gr63_","gr61_","gr53_","gr53_","gr54_","gr50_","gr56_","gr53_","gr24-","rc17_","rc18_","gr25_","gr54_","gr55_","gr71_","gr54_","gr50_","gr54_","gr26-","rc17_","rc18_","gr26_","gr62_","gr55_","gr56_","gr51_","gr51_","gr58_","gr53_","gr57_","gr56_","gr56_","gr49_","gr53_","gr54_","gr54_","gr56_","gr55_","gr60_","gr51_","gr56_","gr53_","gr53_","gr49_","gr55_","gr55_","gr53_","gr56_","gr61_","gr26-","rc8_","rc20_","rc20_","rc20_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc21_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc10_","gr24_","gr51_","gr55_","gr55_","gr65_","gr54_","gr55_","gr51_","gr50_","gr49_","gr58_","gr56_","gr54_","gr58_","gr54_","gr69_","gr54_","gr51_","gr70_","gr70_","gr54_","gr72_","gr49_","gr50_","gr55_","gr51_","gr56_","gr51_","gr69_","gr49_","gr49_","gr50_","gr56_","gr51_","gr54_","gr49_","gr51_","gr54_","gr54_","gr55_","gr56_","gr52_","gr51_","gr71_","gr51_","gr56_","gr51_"],
|
||||
["gr49_","gr58_","gr54_","gr63_","gr55_","gr51_","gr49_","gr55_","gr49_","gr54_","gr51_","gr52_","gr50_","gr55_","gr49_","gr52_","gr49_","gr25-","rc16_","rc18_","gr26_","gr53_","gr49_","gr51_","gr50_","gr56_","gr65_","gr24-","rc17_","rc18_","gr25_","gr69_","gr52_","gr56_","gr53_","gr61_","gr56_","gr66_","gr54_","gr50_","gr56_","gr54_","gr55_","gr61_","gr49_","gr49_","gr52_","gr52_","gr56_","gr51_","gr64_","gr50_","gr50_","gr65_","gr55_","gr69_","gr52_","gr65_","gr24-","rc16_","rc24_","rc22_","rc23_","rc27_","rc24_","rc22_","rc23_","rc27_","rc25_","rc23_","rc22_","rc27_","rc25_","rc22_","rc23_","rc26_","rc25_","rc23_","rc22_","rc26_","rc24_","rc23_","rc23_","rc27_","rc24_","rc23_","rc22_","rc27_","rc25_","rc22_","rc23_","rc26_","rc25_","rc23_","rc23_","rc26_","rc19_","gr26_","gr52_","gr50_","gr49_","gr50_","gr49_","gr64_","gr68_","gr50_","gr55_","gr56_","gr51_","gr51_","gr53_","gr53_","gr51_","gr52_","gr51_","gr51_","gr56_","gr51_","gr53_","gr64_","gr55_","gr70_","gr54_","gr70_","gr61_","gr51_","gr51_","gr50_","gr49_","gr57_","gr52_","gr55_","gr53_","gr53_","gr63_","gr51_","gr56_","gr54_","gr68_","gr49_","gr55_","gr49_","gr58_","gr54_"],
|
||||
["gr56_","gr54_","gr57_","gr52_","gr62_","gr65_","gr53_","gr50_","gr56_","gr67_","gr49_","gr49_","gr49_","gr54_","gr50_","gr65_","gr49_","gr27-","rc17_","rc19_","gr27_","gr72_","gr56_","gr51_","gr52_","gr51_","gr53_","gr25-","rc16_","rc19_","gr27_","gr51_","gr52_","gr50_","gr50_","gr50_","gr67_","gr50_","gr64_","gr49_","gr55_","gr56_","gr55_","gr50_","gr52_","gr51_","gr52_","gr61_","gr56_","gr56_","gr55_","gr50_","gr55_","gr53_","gr53_","gr49_","gr56_","gr50_","gr27-","rc16_","rc19_","sn23_","sn20-","rc16_","rc19_","sn23_","sn21-","rc16_","rc18_","sn20_","sn20-","rc17_","rc19_","sn21_","sn20-","rc17_","rc19_","sn22_","sn23-","rc16_","rc18_","sn20_","sn22-","rc16_","rc18_","sn20_","sn23-","rc16_","rc19_","sn23_","sn20-","rc16_","rc19_","sn22_","sn23-","rc17_","rc18_","gr25_","gr54_","gr50_","gr54_","gr56_","gr49_","gr54_","gr68_","gr56_","gr61_","gr52_","gr71_","gr55_","gr50_","gr53_","gr53_","gr60_","gr54_","gr51_","gr54_","gr50_","gr49_","gr52_","gr60_","gr50_","gr58_","gr50_","gr56_","gr56_","gr63_","gr51_","gr66_","gr52_","gr49_","gr50_","gr62_","gr49_","gr62_","gr53_","gr49_","gr49_","gr53_","gr53_","gr56_","gr55_","gr53_","gr49_"],
|
||||
["gr50_","gr60_","gr55_","gr51_","gr49_","gr51_","gr71_","gr49_","gr61_","gr53_","gr55_","gr69_","gr56_","gr53_","gr68_","gr62_","gr51_","gr27-","rc16_","rc18_","gr24_","gr55_","gr54_","gr56_","gr54_","gr68_","gr56_","gr25-","rc17_","rc18_","gr24_","gr50_","gr54_","gr53_","gr51_","gr56_","gr50_","gr53_","gr49_","gr51_","gr53_","gr56_","gr64_","gr54_","gr72_","gr51_","gr61_","gr53_","gr59_","gr70_","gr49_","gr61_","gr49_","gr53_","gr49_","gr49_","gr49_","gr72_","gr26-","rc17_","rc18_","sn21|","sn21+","rc17_","rc19_","sn21|","sn22+","rc17_","rc19_","sn21|","sn22+","rc17_","rc19_","sn23|","sn20+","rc17_","rc18_","sn23|","sn20+","rc16_","rc18_","sn23|","sn21+","rc16_","rc18_","sn20|","sn20+","rc16_","rc18_","sn21|","sn22+","rc17_","rc18_","sn21|","sn21+","rc16_","rc18_","gr25_","gr67_","gr56_","gr50_","gr70_","gr71_","gr56_","gr51_","gr51_","gr51_","gr55_","gr69_","gr51_","gr72_","gr61_","gr49_","gr53_","gr54_","gr52_","gr50_","gr53_","gr66_","gr51_","gr55_","gr52_","gr53_","gr52_","gr51_","gr53_","gr53_","gr69_","gr55_","gr72_","gr50_","gr55_","gr51_","gr49_","gr50_","gr50_","gr49_","gr58_","gr54_","gr55_","gr58_","gr53_","gr51_","gr52_"],
|
||||
["gr54_","gr51_","gr49_","gr52_","gr65_","gr56_","gr55_","gr68_","gr64_","gr52_","gr53_","gr55_","gr56_","gr59_","gr49_","gr51_","gr56_","gr27-","rc16_","rc19_","gr25_","gr56_","gr65_","gr50_","gr62_","gr50_","gr52_","gr27-","rc17_","rc18_","gr26_","gr57_","gr51_","gr57_","gr56_","gr65_","gr55_","gr67_","gr56_","gr66_","gr57_","gr53_","gr49_","gr55_","gr53_","gr67_","gr56_","gr54_","gr56_","gr53_","gr55_","gr49_","gr64_","gr72_","gr51_","gr62_","gr50_","gr60_","gr26-","rc13_","rc15_","sa7_","sa17_","rc13_","rc15_","sa4_","sa6_","rc13_","rc15_","sa4_","sa10_","rc13_","rc14_","sa13_","sa0_","rc13_","rc14_","sa14_","sa2_","rc13_","rc15_","sa2_","sa12_","rc12_","rc15_","sa1_","sa2_","rc13_","rc15_","sa0_","sa3_","rc13_","rc14_","sa1_","sa5_","rc17_","rc19_","gr25_","gr53_","gr52_","gr50_","gr54_","gr50_","gr54_","gr64_","gr51_","gr57_","gr56_","gr51_","gr54_","gr56_","gr61_","gr55_","gr72_","gr49_","gr56_","gr50_","gr52_","gr49_","gr64_","gr49_","gr67_","gr56_","gr61_","gr56_","gr49_","gr69_","gr55_","gr54_","gr53_","gr55_","gr71_","gr54_","gr53_","gr52_","gr52_","gr63_","gr55_","gr70_","gr56_","gr53_","gr49_","gr57_","gr56_"],
|
||||
["gr62_","gr51_","gr55_","gr56_","gr69_","gr56_","gr53_","gr52_","gr51_","gr56_","gr51_","gr56_","gr49_","gr49_","gr55_","gr65_","gr56_","gr25-","rc16_","rc19_","gr24_","gr53_","gr50_","gr55_","gr53_","gr53_","gr55_","gr25-","rc17_","rc18_","gr24_","gr49_","gr51_","gr55_","gr64_","gr52_","gr56_","gr53_","gr52_","gr54_","gr52_","gr55_","gr49_","gr56_","gr50_","gr50_","gr53_","gr56_","gr49_","gr54_","gr49_","gr64_","gr60_","gr55_","gr67_","gr56_","gr50_","gr53_","gr27-","sa0_","sa1_","sa3_","sa4_","sa5_","sa4_","sa2_","sa17_","sa6_","sa8_","sa7_","sa4_","sa5_","sa10_","sa3_","sa4_","sa6_","sa10_","sa2_","sa19_","sa4_","sa2_","sa16_","sa6_","sa1_","sa7_","sa11_","sa16_","sa1_","sa5_","sa3_","sa3_","sa1_","sa15_","sa14_","sa3_","rc17_","rc18_","gr24_","gr56_","gr56_","gr54_","gr51_","gr52_","gr49_","gr53_","gr56_","gr55_","gr71_","gr49_","gr56_","gr51_","gr53_","gr49_","gr51_","gr49_","gr62_","gr55_","gr54_","gr54_","gr56_","gr50_","gr55_","gr51_","gr52_","gr53_","gr52_","gr62_","gr49_","gr64_","gr52_","gr55_","gr49_","gr61_","gr51_","gr53_","gr50_","gr52_","gr50_","gr54_","gr55_","gr56_","gr61_","gr50_","gr52_"],
|
||||
["gr56_","gr52_","gr57_","gr53_","gr55_","gr51_","gr56_","gr56_","gr52_","gr50_","gr49_","gr54_","gr51_","gr53_","gr55_","gr55_","gr50_","gr24-","rc16_","rc18_","gr24_","gr53_","gr49_","gr49_","gr66_","gr70_","gr49_","gr24-","rc17_","rc19_","gr27_","gr56_","gr62_","gr54_","gr53_","gr66_","gr55_","gr50_","gr54_","gr53_","gr54_","gr54_","gr65_","gr54_","gr72_","gr56_","gr68_","gr49_","gr52_","gr56_","gr71_","gr50_","gr52_","gr56_","gr56_","gr53_","gr56_","gr59_","gr25-","sa22_","sa4_","sa1_","sa10_","sa18_","sa3_","sa0_","sa5_","sa20_","sa4_","sa7_","sa9_","sa3_","sa13_","sa1_","sa14_","sa7_","sa2_","sa23_","sa7_","sa3_","sa21_","sa2_","sa3_","sa7_","sa6_","sa4_","sa7_","sa5_","sa7_","sa4_","sa19_","sa3_","sa12_","sa7_","sa1_","rc17_","rc19_","gr26_","gr50_","gr52_","gr49_","gr57_","gr49_","gr56_","gr56_","gr51_","gr52_","gr53_","gr49_","gr50_","gr55_","gr54_","gr53_","gr49_","gr52_","gr71_","gr56_","gr67_","gr56_","gr69_","gr49_","gr49_","gr54_","gr66_","gr51_","gr54_","gr49_","gr60_","gr68_","gr52_","gr60_","gr54_","gr49_","gr53_","gr51_","gr53_","gr72_","gr51_","gr55_","gr52_","gr52_","gr65_","gr53_","gr49_"],
|
||||
["gr53_","gr55_","gr63_","gr54_","gr53_","gr50_","gr49_","gr64_","gr53_","gr49_","gr54_","gr51_","gr54_","gr49_","gr65_","gr53_","gr56_","gr25-","rc17_","rc18_","gr27_","gr65_","gr53_","gr55_","gr55_","gr52_","gr52_","gr27-","rc16_","rc19_","gr26_","gr56_","gr52_","gr55_","gr53_","gr49_","gr66_","gr50_","gr54_","gr49_","gr55_","gr51_","gr49_","gr51_","gr56_","gr54_","gr52_","gr51_","gr66_","gr51_","gr57_","gr53_","gr50_","gr62_","gr51_","gr55_","gr53_","gr55_","gr24-","rc9_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc20_","rc20_","rc20_","rc20_","rc21_","rc21_","rc21_","rc20_","rc21_","rc20_","rc21_","rc20_","rc21_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc21_","rc21_","rc20_","rc21_","rc21_","rc20_","rc30_","rc18_","gr27_","gr53_","gr62_","gr53_","gr53_","gr54_","gr51_","gr50_","gr51_","gr49_","gr57_","gr50_","gr67_","gr52_","gr55_","gr53_","gr55_","gr51_","gr50_","gr55_","gr51_","gr49_","gr62_","gr56_","gr63_","gr56_","gr53_","gr50_","gr56_","gr54_","gr55_","gr60_","gr53_","gr52_","gr52_","gr50_","gr50_","gr62_","gr52_","gr51_","gr56_","gr62_","gr63_","gr49_","gr51_","gr49_","gr61_"],
|
||||
["gr53_","gr51_","gr56_","gr56_","gr49_","gr52_","gr49_","gr61_","gr52_","gr54_","gr51_","gr55_","gr49_","gr53_","gr53_","gr51_","gr56_","gr25-","rc17_","rc18_","gr24_","gr56_","gr56_","gr50_","gr50_","gr55_","gr55_","gr27-","rc17_","rc19_","gr24_","gr49_","gr52_","gr72_","gr49_","gr51_","gr50_","gr62_","gr52_","gr50_","gr55_","gr61_","gr49_","gr54_","gr56_","gr59_","gr55_","gr69_","gr51_","gr55_","gr54_","gr51_","gr52_","gr54_","gr52_","gr53_","gr49_","gr55_","gr25-","rc13_","rc22_","rc23_","rc22_","rc22_","rc22_","rc22_","rc22_","rc23_","rc22_","rc22_","rc23_","rc23_","rc22_","rc22_","rc22_","rc22_","rc23_","rc22_","rc23_","rc22_","rc23_","rc23_","rc23_","rc23_","rc23_","rc23_","rc22_","rc23_","rc23_","rc22_","rc22_","rc23_","rc23_","rc23_","rc22_","rc23_","rc14_","gr24_","gr50_","gr50_","gr49_","gr51_","gr49_","gr51_","gr51_","gr56_","gr54_","gr51_","gr51_","gr51_","gr68_","gr49_","gr55_","gr55_","gr53_","gr55_","gr50_","gr55_","gr55_","gr59_","gr53_","gr52_","gr67_","gr55_","gr49_","gr49_","gr53_","gr58_","gr54_","gr55_","gr56_","gr61_","gr56_","gr51_","gr56_","gr55_","gr60_","gr51_","gr54_","gr49_","gr63_","gr53_","gr72_","gr51_"],
|
||||
["gr56_","gr56_","gr54_","gr53_","gr49_","gr57_","gr53_","gr54_","gr50_","gr55_","gr64_","gr49_","gr53_","gr56_","gr67_","gr50_","gr59_","gr25-","rc16_","rc19_","gr24_","gr50_","gr64_","gr56_","gr53_","gr56_","gr57_","gr24-","rc17_","rc19_","gr27_","gr49_","gr64_","gr67_","gr49_","gr56_","gr54_","gr53_","gr71_","gr54_","gr53_","gr53_","gr49_","gr55_","gr56_","gr55_","gr51_","gr56_","gr55_","gr53_","gr55_","gr51_","gr59_","gr50_","gr51_","gr55_","gr52_","gr62_","gr32|","gr31_","gr28_","gr31_","gr29_","gr29_","gr31_","gr30_","gr31_","gr28_","gr29_","gr30_","gr29_","gr31_","gr30_","gr31_","gr29_","gr31_","gr29_","gr29_","gr30_","gr28_","gr29_","gr31_","gr31_","gr31_","gr28_","gr31_","gr30_","gr31_","gr29_","gr28_","gr30_","gr30_","gr31_","gr30_","gr31_","gr31_","gr28_","gr33+","gr54_","gr49_","gr66_","gr66_","gr56_","gr54_","gr67_","gr51_","gr51_","gr51_","gr53_","gr51_","gr53_","gr51_","gr52_","gr64_","gr52_","gr54_","gr67_","gr54_","gr51_","gr69_","gr49_","gr61_","gr53_","gr72_","gr49_","gr49_","gr54_","gr54_","gr52_","gr51_","gr56_","gr56_","gr58_","gr55_","gr55_","gr62_","gr53_","gr68_","gr53_","gr50_","gr54_","gr54_","gr56_","gr56_"],
|
||||
["gr53_","gr55_","gr71_","gr68_","gr62_","gr50_","gr64_","gr51_","gr54_","gr55_","gr53_","gr49_","gr66_","gr50_","gr50_","gr66_","gr49_","gr27-","rc16_","rc18_","gr26_","gr71_","gr54_","gr52_","gr54_","gr54_","gr51_","gr26-","rc16_","rc19_","gr27_","gr50_","gr54_","gr64_","gr53_","gr55_","gr56_","gr55_","gr56_","gr55_","gr51_","gr65_","gr56_","gr55_","gr50_","gr51_","gr49_","gr51_","gr69_","gr52_","gr52_","gr54_","gr62_","gr49_","gr56_","gr70_","gr54_","gr49_","gr60_","gr53_","gr62_","gr49_","gr70_","gr50_","gr54_","gr49_","gr55_","gr54_","gr65_","gr53_","gr52_","gr64_","gr55_","gr53_","gr54_","gr50_","gr65_","gr54_","gr59_","gr49_","gr49_","gr55_","gr52_","gr56_","gr55_","gr52_","gr69_","gr54_","gr53_","gr54_","gr56_","gr51_","gr61_","gr49_","gr50_","gr55_","gr53_","gr55_","gr54_","gr52_","gr50_","gr53_","gr50_","gr55_","gr50_","gr51_","gr56_","gr50_","gr56_","gr50_","gr49_","gr53_","gr51_","gr50_","gr54_","gr64_","gr56_","gr72_","gr53_","gr51_","gr52_","gr52_","gr55_","gr54_","gr51_","gr65_","gr65_","gr50_","gr52_","gr56_","gr51_","gr62_","gr50_","gr54_","gr68_","gr50_","gr52_","gr49_","gr53_","gr56_","gr61_","gr55_","gr49_","gr70_"],
|
||||
["gr54_","gr55_","gr52_","gr53_","gr55_","gr54_","gr49_","gr53_","gr58_","gr51_","gr65_","gr55_","gr56_","gr51_","gr51_","gr49_","gr49_","gr27-","rc16_","rc18_","gr24_","gr56_","gr58_","gr51_","gr69_","gr49_","gr53_","gr27-","rc16_","rc18_","gr27_","gr52_","gr55_","gr69_","gr69_","gr56_","gr62_","gr52_","gr55_","gr52_","gr55_","gr51_","gr55_","gr52_","gr53_","gr54_","gr49_","gr54_","gr54_","gr69_","gr53_","gr51_","gr63_","gr51_","gr50_","gr49_","gr54_","gr50_","gr56_","gr51_","gr71_","gr53_","gr53_","gr55_","gr63_","gr52_","gr57_","gr55_","gr52_","gr60_","gr50_","gr49_","gr51_","gr69_","gr56_","gr55_","gr56_","gr50_","gr50_","gr56_","gr50_","gr53_","gr71_","gr53_","gr53_","gr56_","gr54_","gr60_","gr62_","gr60_","gr55_","gr49_","gr50_","gr70_","gr55_","gr56_","gr55_","gr50_","gr65_","gr52_","gr57_","gr54_","gr71_","gr51_","gr55_","gr72_","gr52_","gr55_","gr51_","gr56_","gr54_","gr55_","gr70_","gr54_","gr52_","gr52_","gr50_","gr54_","gr53_","gr53_","gr53_","gr56_","gr49_","gr51_","gr53_","gr56_","gr61_","gr54_","gr54_","gr55_","gr67_","gr54_","gr62_","gr56_","gr71_","gr50_","gr58_","gr52_","gr60_","gr53_","gr70_","gr71_","gr53_","gr52_"],
|
||||
["gr49_","gr56_","gr52_","gr65_","gr54_","gr53_","gr55_","gr59_","gr52_","gr53_","gr54_","gr59_","gr55_","gr52_","gr54_","gr65_","gr53_","gr27-","rc17_","rc19_","gr24_","gr52_","gr59_","gr55_","gr52_","gr66_","gr71_","gr24-","rc16_","rc18_","gr27_","gr53_","gr51_","gr52_","gr56_","gr51_","gr49_","gr53_","gr52_","gr70_","gr50_","gr51_","gr54_","gr57_","gr56_","gr72_","gr50_","gr49_","gr58_","gr54_","gr50_","gr50_","gr52_","gr49_","gr50_","gr56_","gr53_","gr56_","gr53_","gr71_","gr56_","gr56_","gr54_","gr68_","gr52_","gr49_","gr55_","gr50_","gr52_","gr55_","gr53_","gr54_","gr55_","gr66_","gr50_","gr59_","gr56_","gr70_","gr50_","gr55_","gr55_","gr52_","gr70_","gr52_","gr55_","gr55_","gr53_","gr55_","gr54_","gr56_","gr62_","gr52_","gr56_","gr51_","gr55_","gr57_","gr52_","gr71_","gr49_","gr63_","gr54_","gr50_","gr49_","gr52_","gr51_","gr51_","gr49_","gr51_","gr64_","gr54_","gr69_","gr50_","gr51_","gr51_","gr54_","gr51_","gr56_","gr55_","gr50_","gr60_","gr54_","gr49_","gr58_","gr55_","gr56_","gr55_","gr51_","gr58_","gr68_","gr55_","gr54_","gr56_","gr55_","gr54_","gr56_","gr55_","gr55_","gr52_","gr51_","gr56_","gr55_","gr54_","gr51_","gr50_"],
|
||||
["gr55_","gr51_","gr65_","gr55_","gr49_","gr56_","gr59_","gr53_","gr53_","gr68_","gr50_","gr54_","gr54_","gr68_","gr51_","gr49_","gr51_","gr27-","rc17_","rc19_","gr27_","gr51_","gr59_","gr55_","gr49_","gr55_","gr56_","gr27-","rc16_","rc19_","gr27_","gr55_","gr49_","gr60_","gr63_","gr49_","gr49_","gr50_","gr55_","gr60_","gr52_","gr55_","gr53_","gr51_","gr52_","gr50_","gr54_","gr53_","gr49_","gr49_","gr58_","gr51_","gr55_","gr66_","gr56_","gr52_","gr67_","gr52_","gr49_","gr50_","gr59_","gr51_","gr56_","gr50_","gr51_","gr55_","gr57_","gr55_","gr72_","gr53_","gr55_","gr56_","gr49_","gr52_","gr51_","gr53_","gr57_","gr50_","gr52_","gr54_","gr55_","gr61_","gr50_","gr53_","gr54_","gr50_","gr49_","gr55_","gr61_","gr49_","gr53_","gr54_","gr71_","gr55_","gr56_","gr50_","gr52_","gr51_","gr53_","gr51_","gr55_","gr49_","gr49_","gr49_","gr70_","gr50_","gr61_","gr53_","gr53_","gr50_","gr53_","gr53_","gr51_","gr49_","gr68_","gr51_","gr68_","gr51_","gr54_","gr55_","gr61_","gr56_","gr52_","gr56_","gr67_","gr52_","gr51_","gr55_","gr53_","gr56_","gr53_","gr53_","gr53_","gr55_","gr63_","gr55_","gr50_","gr50_","gr49_","gr49_","gr49_","gr52_","gr58_","gr49_"],
|
||||
["gr55_","gr55_","gr49_","gr55_","gr49_","gr61_","gr53_","gr52_","gr53_","gr56_","gr54_","gr56_","gr62_","gr51_","gr49_","gr65_","gr52_","gr24-","rc17_","rc18_","gr25_","gr54_","gr56_","gr51_","gr54_","gr51_","gr49_","gr26-","rc17_","rc18_","gr26_","gr50_","gr51_","gr54_","gr50_","gr49_","gr54_","gr57_","gr56_","gr54_","gr52_","gr49_","gr60_","gr60_","gr49_","gr67_","gr51_","gr49_","gr51_","gr54_","gr55_","gr55_","gr62_","gr54_","gr68_","gr60_","gr56_","gr52_","gr53_","gr66_","gr54_","gr52_","gr53_","gr56_","gr53_","gr54_","gr62_","gr55_","gr50_","gr54_","gr54_","gr62_","gr50_","gr52_","gr53_","gr54_","gr50_","gr68_","gr56_","gr54_","gr65_","gr55_","gr56_","gr56_","gr49_","gr72_","gr52_","gr50_","gr66_","gr56_","gr51_","gr71_","gr55_","gr50_","gr51_","gr51_","gr55_","gr56_","gr54_","gr51_","gr53_","gr52_","gr55_","gr50_","gr56_","gr56_","gr57_","gr53_","gr51_","gr55_","gr72_","gr56_","gr62_","gr49_","gr53_","gr54_","gr52_","gr51_","gr55_","gr70_","gr51_","gr52_","gr53_","gr64_","gr56_","gr49_","gr53_","gr52_","gr56_","gr50_","gr56_","gr60_","gr63_","gr51_","gr67_","gr52_","gr53_","gr53_","gr56_","gr65_","gr68_","gr50_","gr51_","gr56_"],
|
||||
["gr51_","gr68_","gr54_","gr50_","gr54_","gr55_","gr53_","gr63_","gr52_","gr50_","gr50_","gr63_","gr55_","gr50_","gr50_","gr50_","gr56_","gr24-","rc17_","rc18_","gr25_","gr68_","gr51_","gr52_","gr49_","gr59_","gr51_","gr27-","rc16_","rc19_","gr27_","gr52_","gr55_","gr49_","gr49_","gr51_","gr55_","gr52_","gr54_","gr68_","gr51_","gr65_","gr50_","gr51_","gr54_","gr51_","gr58_","gr54_","gr55_","gr52_","gr63_","gr53_","gr50_","gr62_","gr54_","gr56_","gr52_","gr51_","gr56_","gr49_","gr50_","gr53_","gr51_","gr54_","gr50_","gr55_","gr56_","gr49_","gr56_","gr50_","gr51_","gr72_","gr50_","gr57_","gr54_","gr53_","gr53_","gr54_","gr53_","gr70_","gr54_","gr50_","gr59_","gr54_","gr50_","gr49_","gr52_","gr50_","gr55_","gr51_","gr50_","gr53_","gr56_","gr53_","gr56_","gr53_","gr52_","gr54_","gr50_","gr52_","gr72_","gr50_","gr67_","gr56_","gr56_","gr50_","gr52_","gr51_","gr66_","gr50_","gr52_","gr52_","gr52_","gr66_","gr51_","gr52_","gr65_","gr53_","gr70_","gr49_","gr72_","gr53_","gr54_","gr71_","gr53_","gr54_","gr49_","gr50_","gr54_","gr62_","gr55_","gr53_","gr55_","gr51_","gr54_","gr70_","gr54_","gr53_","gr54_","gr55_","gr55_","gr55_","gr54_","gr55_"],
|
||||
["gr57_","gr51_","gr54_","gr55_","gr56_","gr51_","gr50_","gr54_","gr49_","gr49_","gr54_","gr53_","gr65_","gr55_","gr60_","gr51_","gr55_","gr27-","rc16_","rc19_","gr26_","gr53_","gr52_","gr49_","gr51_","gr49_","gr52_","gr27-","rc16_","rc18_","gr24_","gr55_","gr54_","gr53_","gr52_","gr63_","gr54_","gr66_","gr50_","gr55_","gr50_","gr61_","gr56_","gr49_","gr69_","gr51_","gr51_","gr50_","gr55_","gr51_","gr51_","gr54_","gr50_","gr49_","gr54_","gr49_","gr54_","gr54_","gr52_","gr71_","gr55_","gr54_","gr67_","gr61_","gr50_","gr56_","gr53_","gr53_","gr51_","gr50_","gr54_","gr54_","gr57_","gr51_","gr62_","gr50_","gr56_","gr55_","gr53_","gr54_","gr54_","gr55_","gr58_","gr54_","gr55_","gr54_","gr50_","gr62_","gr66_","gr52_","gr56_","gr50_","gr49_","gr55_","gr63_","gr63_","gr53_","gr61_","gr49_","gr56_","gr55_","gr51_","gr52_","gr50_","gr56_","gr58_","gr56_","gr64_","gr50_","gr53_","gr66_","gr72_","gr53_","gr52_","gr52_","gr51_","gr51_","gr68_","gr50_","gr65_","gr52_","gr52_","gr55_","gr51_","gr59_","gr65_","gr54_","gr55_","gr55_","gr51_","gr49_","gr56_","gr51_","gr70_","gr54_","gr52_","gr54_","gr58_","gr52_","gr52_","gr52_","gr68_","gr51_","gr54_"],
|
||||
["gr51_","gr51_","gr49_","gr54_","gr54_","gr51_","gr70_","gr49_","gr54_","gr53_","gr49_","gr49_","gr52_","gr53_","gr56_","gr53_","gr72_","gr24-","rc17_","rc19_","gr26_","gr50_","gr51_","gr50_","gr51_","gr60_","gr52_","gr25-","rc13_","rc14_","gr24_","gr50_","gr56_","gr58_","gr50_","gr54_","gr49_","gr51_","gr52_","gr62_","gr55_","gr55_","gr54_","gr53_","gr52_","gr49_","gr70_","gr55_","gr65_","gr51_","gr51_","gr56_","gr56_","gr71_","gr51_","gr62_","gr56_","gr55_","gr55_","gr50_","gr52_","gr61_","gr53_","gr51_","gr52_","gr60_","gr54_","gr68_","gr51_","gr69_","gr54_","gr49_","gr71_","gr50_","gr71_","gr53_","gr68_","gr56_","gr54_","gr55_","gr65_","gr53_","gr52_","gr56_","gr49_","gr54_","gr54_","gr55_","gr52_","gr51_","gr54_","gr54_","gr51_","gr56_","gr56_","gr50_","gr56_","gr54_","gr69_","gr54_","gr60_","gr56_","gr59_","gr49_","gr70_","gr55_","gr51_","gr51_","gr51_","gr71_","gr50_","gr68_","gr56_","gr56_","gr49_","gr61_","gr50_","gr53_","gr53_","gr53_","gr55_","gr56_","gr55_","gr54_","gr58_","gr52_","gr53_","gr62_","gr66_","gr49_","gr56_","gr54_","gr60_","gr52_","gr52_","gr70_","gr53_","gr53_","gr50_","gr54_","gr49_","gr55_","gr49_","gr70_"],
|
||||
["gr55_","gr52_","gr49_","gr56_","gr50_","gr54_","gr55_","gr65_","gr49_","gr54_","gr52_","gr52_","gr71_","gr49_","gr54_","gr54_","gr53_","gr25-","rc17_","rc18_","gr26_","gr50_","gr55_","gr56_","gr51_","gr52_","gr69_","gr33|","gr29_","gr31_","gr35+","gr54_","gr52_","gr49_","gr52_","gr72_","gr65_","gr56_","gr52_","gr50_","gr50_","gr70_","gr68_","gr55_","gr68_","gr56_","gr50_","gr53_","gr54_","gr52_","gr54_","gr61_","gr50_","gr57_","gr54_","gr55_","gr56_","gr53_","gr51_","gr68_","gr51_","gr68_","gr65_","gr51_","gr57_","gr64_","gr51_","gr52_","gr55_","gr68_","gr53_","gr56_","gr51_","gr63_","gr56_","gr55_","gr49_","gr55_","gr65_","gr56_","gr55_","gr68_","gr50_","gr53_","gr56_","gr49_","gr56_","gr52_","gr60_","gr54_","gr52_","gr55_","gr62_","gr65_","gr50_","gr53_","gr62_","gr64_","gr53_","gr55_","gr53_","gr56_","gr56_","gr51_","gr51_","gr58_","gr54_","gr53_","gr52_","gr56_","gr68_","gr49_","gr54_","gr52_","gr50_","gr50_","gr53_","gr66_","gr53_","gr54_","gr56_","gr49_","gr72_","gr63_","gr49_","gr70_","gr54_","gr52_","gr49_","gr49_","gr50_","gr54_","gr50_","gr54_","gr55_","gr52_","gr50_","gr69_","gr56_","gr55_","gr55_","gr50_","gr50_","gr55_"],
|
||||
["gr53_","gr54_","gr52_","gr68_","gr50_","gr60_","gr54_","gr53_","gr59_","gr53_","gr55_","gr53_","gr68_","gr53_","gr70_","gr56_","gr52_","gr27-","rc17_","rc18_","gr27_","gr53_","gr58_","gr50_","gr49_","gr50_","gr53_","gr63_","gr49_","gr54_","gr67_","gr58_","gr52_","gr49_","gr50_","gr51_","gr54_","gr56_","gr50_","gr50_","gr53_","gr67_","gr66_","gr55_","gr69_","gr53_","gr56_","gr50_","gr54_","gr55_","gr70_","gr53_","gr65_","gr54_","gr55_","gr61_","gr55_","gr56_","gr54_","gr52_","gr50_","gr51_","gr55_","gr50_","gr49_","gr54_","gr52_","gr56_","gr49_","gr53_","gr49_","gr51_","gr54_","gr49_","gr64_","gr55_","gr54_","gr54_","gr54_","gr49_","gr55_","gr52_","gr60_","gr52_","gr52_","gr55_","gr56_","gr53_","gr52_","gr55_","gr49_","gr55_","gr50_","gr49_","gr54_","gr72_","gr54_","gr51_","gr56_","gr57_","gr51_","gr52_","gr51_","gr50_","gr71_","gr49_","gr49_","gr52_","gr54_","gr57_","gr55_","gr70_","gr55_","gr67_","gr54_","gr56_","gr54_","gr50_","gr52_","gr51_","gr56_","gr56_","gr56_","gr55_","gr50_","gr56_","gr49_","gr51_","gr50_","gr50_","gr56_","gr56_","gr52_","gr67_","gr49_","gr54_","gr55_","gr67_","gr54_","gr55_","gr70_","gr53_","gr52_","gr55_"],
|
||||
["gr55_","gr50_","gr52_","gr50_","gr55_","gr54_","gr51_","gr69_","gr52_","gr50_","gr50_","gr52_","gr49_","gr56_","gr55_","gr59_","gr54_","gr25-","rc16_","rc18_","gr27_","gr52_","gr50_","gr56_","gr62_","gr69_","gr54_","gr54_","gr52_","gr58_","gr51_","gr70_","gr54_","gr51_","gr52_","gr49_","gr71_","gr52_","gr53_","gr54_","gr54_","gr53_","gr56_","gr62_","gr55_","gr66_","gr56_","gr72_","gr56_","gr52_","gr49_","gr54_","gr53_","gr54_","gr54_","gr71_","gr53_","gr49_","gr49_","gr51_","gr66_","gr56_","gr54_","gr50_","gr68_","gr61_","gr56_","gr53_","gr55_","gr50_","gr59_","gr51_","gr56_","gr49_","gr56_","gr53_","gr53_","gr61_","gr61_","gr51_","gr50_","gr62_","gr50_","gr53_","gr68_","gr49_","gr53_","gr51_","gr50_","gr54_","gr55_","gr61_","gr55_","gr56_","gr60_","gr59_","gr50_","gr56_","gr71_","gr55_","gr70_","gr50_","gr52_","gr70_","gr50_","gr54_","gr52_","gr66_","gr65_","gr49_","gr53_","gr59_","gr51_","gr50_","gr71_","gr49_","gr59_","gr54_","gr56_","gr60_","gr55_","gr52_","gr64_","gr53_","gr59_","gr49_","gr54_","gr58_","gr54_","gr52_","gr49_","gr53_","gr52_","gr51_","gr56_","gr53_","gr50_","gr53_","gr51_","gr60_","gr69_","gr55_","gr56_","gr64_"],
|
||||
["gr52_","gr71_","gr63_","gr51_","gr49_","gr59_","gr53_","gr50_","gr51_","gr51_","gr53_","gr49_","gr71_","gr51_","gr50_","gr53_","gr50_","gr24-","rc17_","rc18_","gr26_","gr62_","gr72_","gr50_","gr50_","gr53_","gr54_","gr51_","gr56_","gr53_","gr54_","gr50_","gr51_","gr54_","gr66_","gr49_","gr54_","gr50_","gr55_","gr54_","gr71_","gr52_","gr53_","gr51_","gr50_","gr54_","gr50_","gr54_","gr70_","gr65_","gr56_","gr58_","gr54_","gr49_","gr50_","gr53_","gr49_","gr55_","gr51_","gr64_","gr51_","gr69_","gr55_","gr50_","gr50_","gr69_","gr56_","gr53_","gr58_","gr51_","gr51_","gr63_","gr49_","gr54_","gr56_","gr58_","gr52_","gr51_","gr53_","gr53_","gr56_","gr49_","gr52_","gr49_","gr50_","gr54_","gr56_","gr52_","gr55_","gr65_","gr52_","gr50_","gr60_","gr54_","gr52_","gr55_","gr56_","gr54_","gr50_","gr54_","gr53_","gr52_","gr50_","gr53_","gr51_","gr49_","gr71_","gr55_","gr53_","gr56_","gr52_","gr56_","gr50_","gr51_","gr51_","gr60_","gr53_","gr68_","gr65_","gr57_","gr53_","gr53_","gr56_","gr49_","gr53_","gr49_","gr60_","gr49_","gr53_","gr72_","gr55_","gr52_","gr64_","gr55_","gr69_","gr49_","gr52_","gr53_","gr56_","gr56_","gr54_","gr55_","gr53_","gr57_"],
|
||||
["gr51_","gr54_","gr54_","gr53_","gr63_","gr52_","gr54_","gr59_","gr50_","gr50_","gr56_","gr61_","gr54_","gr52_","gr56_","gr56_","gr50_","gr27-","rc17_","rc19_","gr27_","gr59_","gr51_","gr49_","gr53_","gr51_","gr53_","gr63_","gr53_","gr56_","gr66_","gr55_","gr59_","gr50_","gr51_","gr68_","gr49_","gr52_","gr54_","gr51_","gr54_","gr56_","gr58_","gr54_","gr53_","gr49_","gr54_","gr53_","gr54_","gr56_","gr51_","gr57_","gr51_","gr56_","gr53_","gr55_","gr68_","gr50_","gr70_","gr51_","gr52_","gr49_","gr51_","gr50_","gr51_","gr55_","gr52_","gr55_","gr50_","gr62_","gr49_","gr55_","gr49_","gr56_","gr64_","gr53_","gr52_","gr56_","gr64_","gr55_","gr49_","gr54_","gr49_","gr55_","gr68_","gr55_","gr49_","gr50_","gr67_","gr50_","gr65_","gr60_","gr51_","gr52_","gr54_","gr51_","gr49_","gr53_","gr49_","gr56_","gr50_","gr49_","gr55_","gr65_","gr52_","gr49_","gr49_","gr49_","gr50_","gr71_","gr53_","gr54_","gr51_","gr53_","gr51_","gr50_","gr52_","gr54_","gr65_","gr51_","gr58_","gr51_","gr72_","gr51_","gr56_","gr56_","gr53_","gr49_","gr63_","gr53_","gr56_","gr54_","gr49_","gr54_","gr56_","gr56_","gr53_","gr59_","gr61_","gr50_","gr55_","gr56_","gr53_","gr50_"],
|
||||
["gr53_","gr53_","gr64_","gr51_","gr51_","gr55_","gr68_","gr49_","gr55_","gr54_","gr58_","gr55_","gr53_","gr62_","gr54_","gr52_","gr52_","gr27-","rc16_","rc19_","gr26_","gr51_","gr53_","gr52_","gr54_","gr62_","gr53_","gr49_","gr51_","gr50_","gr49_","gr52_","gr54_","gr55_","gr49_","gr56_","gr49_","gr66_","gr50_","gr52_","gr52_","gr58_","gr55_","gr56_","gr49_","gr52_","gr52_","gr52_","gr49_","gr56_","gr49_","gr65_","gr54_","gr50_","gr53_","gr54_","gr55_","gr50_","gr56_","gr53_","gr55_","gr53_","gr55_","gr51_","gr54_","gr66_","gr52_","gr51_","gr62_","gr53_","gr52_","gr68_","gr71_","gr55_","gr56_","gr54_","gr69_","gr52_","gr52_","gr49_","gr53_","gr52_","gr50_","gr71_","gr51_","gr50_","gr56_","gr53_","gr54_","gr56_","gr54_","gr54_","gr50_","gr49_","gr65_","gr55_","gr53_","gr54_","gr51_","gr52_","gr51_","gr50_","gr49_","gr49_","gr51_","gr70_","gr51_","gr50_","gr55_","gr69_","gr56_","gr60_","gr56_","gr56_","gr55_","gr50_","gr55_","gr60_","gr55_","gr49_","gr53_","gr63_","gr55_","gr52_","gr52_","gr71_","gr55_","gr57_","gr52_","gr51_","gr69_","gr49_","gr55_","gr56_","gr49_","gr60_","gr53_","gr53_","gr50_","gr67_","gr49_","gr63_","gr63_","gr52_"],
|
||||
["gr50_","gr54_","gr55_","gr50_","gr51_","gr54_","gr56_","gr50_","gr67_","gr56_","gr52_","gr55_","gr54_","gr54_","gr55_","gr55_","gr50_","gr26-","rc16_","rc18_","gr24_","gr55_","gr68_","gr52_","gr55_","gr54_","gr53_","gr49_","gr50_","gr51_","gr57_","gr50_","gr51_","gr54_","gr66_","gr55_","gr54_","gr50_","gr53_","gr57_","gr56_","gr65_","gr52_","gr72_","gr54_","gr54_","gr51_","gr51_","gr71_","gr50_","gr52_","gr52_","gr61_","gr56_","gr51_","gr49_","gr64_","gr56_","gr50_","gr52_","gr50_","gr56_","gr54_","gr60_","gr52_","gr54_","gr56_","gr50_","gr72_","gr55_","gr53_","gr53_","gr53_","gr60_","gr55_","gr70_","gr54_","gr56_","gr58_","gr52_","gr51_","gr51_","gr56_","gr49_","gr55_","gr65_","gr53_","gr52_","gr56_","gr52_","gr51_","gr53_","gr58_","gr54_","gr55_","gr52_","gr52_","gr56_","gr58_","gr50_","gr49_","gr62_","gr49_","gr62_","gr49_","gr56_","gr53_","gr49_","gr69_","gr50_","gr52_","gr51_","gr55_","gr61_","gr55_","gr52_","gr56_","gr60_","gr50_","gr51_","gr71_","gr56_","gr55_","gr59_","gr49_","gr53_","gr51_","gr49_","gr51_","gr59_","gr54_","gr71_","gr50_","gr53_","gr56_","gr52_","gr68_","gr53_","gr71_","gr50_","gr60_","gr54_","gr50_","gr54_"],
|
||||
["gr66_","gr49_","gr49_","gr52_","gr72_","gr49_","gr50_","gr72_","gr54_","gr70_","gr54_","gr54_","gr55_","gr54_","gr50_","gr67_","gr50_","gr24-","rc17_","rc19_","gr24_","gr70_","gr50_","gr72_","gr54_","gr52_","gr52_","gr56_","gr50_","gr51_","gr51_","gr55_","gr52_","gr54_","gr63_","gr49_","gr55_","gr54_","gr54_","gr67_","gr52_","gr54_","gr56_","gr54_","gr52_","gr64_","gr52_","gr51_","gr55_","gr53_","gr50_","gr49_","gr49_","gr56_","gr63_","gr49_","gr55_","gr52_","gr52_","gr51_","gr54_","gr66_","gr55_","gr53_","gr53_","gr68_","gr56_","gr51_","gr54_","gr53_","gr61_","gr50_","gr49_","gr54_","gr54_","gr52_","gr49_","gr51_","gr50_","gr55_","gr60_","gr51_","gr56_","gr54_","gr63_","gr52_","gr71_","gr71_","gr64_","gr53_","gr55_","gr51_","gr51_","gr50_","gr62_","gr49_","gr54_","gr51_","gr52_","gr51_","gr52_","gr53_","gr55_","gr55_","gr53_","gr56_","gr55_","gr55_","gr52_","gr55_","gr51_","gr49_","gr49_","gr51_","gr66_","gr56_","gr53_","gr56_","gr51_","gr50_","gr56_","gr55_","gr54_","gr72_","gr54_","gr51_","gr56_","gr57_","gr53_","gr52_","gr59_","gr55_","gr49_","gr54_","gr52_","gr49_","gr49_","gr51_","gr51_","gr55_","gr56_","gr61_","gr55_","gr49_"],
|
||||
["gr52_","gr60_","gr55_","gr64_","gr50_","gr54_","gr50_","gr51_","gr56_","gr50_","gr56_","gr59_","gr49_","gr53_","gr70_","gr55_","gr68_","gr26-","rc17_","rc19_","gr24_","gr49_","gr53_","gr56_","gr60_","gr55_","gr67_","gr52_","gr50_","gr51_","gr54_","gr61_","gr55_","gr55_","gr72_","gr53_","gr54_","gr53_","gr52_","gr56_","gr54_","gr55_","gr61_","gr51_","gr51_","gr72_","gr55_","gr50_","gr51_","gr49_","gr52_","gr57_","gr58_","gr53_","gr56_","gr52_","gr54_","gr52_","gr54_","gr55_","gr51_","gr51_","gr49_","gr55_","gr49_","gr67_","gr51_","gr54_","gr49_","gr54_","gr49_","gr68_","gr60_","gr69_","gr53_","gr64_","gr52_","gr53_","gr51_","gr51_","gr56_","gr53_","gr53_","gr53_","gr53_","gr66_","gr55_","gr54_","gr55_","gr51_","gr52_","gr55_","gr52_","gr53_","gr55_","gr62_","gr50_","gr56_","gr58_","gr54_","gr68_","gr56_","gr50_","gr60_","gr49_","gr53_","gr49_","gr51_","gr52_","gr59_","gr51_","gr65_","gr53_","gr51_","gr49_","gr55_","gr55_","gr64_","gr50_","gr53_","gr56_","gr51_","gr53_","gr60_","gr60_","gr55_","gr64_","gr50_","gr50_","gr54_","gr52_","gr50_","gr54_","gr50_","gr54_","gr49_","gr53_","gr53_","gr56_","gr59_","gr52_","gr50_","gr62_","gr51_"],
|
||||
["gr57_","gr49_","gr49_","gr54_","gr64_","gr55_","gr55_","gr49_","gr56_","gr52_","gr49_","gr54_","gr68_","gr51_","gr52_","gr52_","gr50_","gr27-","rc17_","rc18_","gr27_","gr55_","gr53_","gr68_","gr49_","gr55_","gr50_","gr56_","gr51_","gr67_","gr52_","gr52_","gr53_","gr50_","gr52_","gr51_","gr49_","gr56_","gr56_","gr51_","gr71_","gr54_","gr49_","gr54_","gr58_","gr56_","gr52_","gr51_","gr49_","gr54_","gr50_","gr51_","gr55_","gr52_","gr56_","gr52_","gr51_","gr58_","gr55_","gr50_","gr49_","gr52_","gr53_","gr49_","gr55_","gr51_","gr50_","gr52_","gr49_","gr50_","gr52_","gr49_","gr54_","gr50_","gr52_","gr51_","gr64_","gr63_","gr55_","gr55_","gr55_","gr56_","gr54_","gr55_","gr55_","gr51_","gr54_","gr50_","gr53_","gr54_","gr56_","gr49_","gr55_","gr55_","gr49_","gr52_","gr49_","gr53_","gr52_","gr51_","gr56_","gr69_","gr52_","gr61_","gr51_","gr55_","gr58_","gr53_","gr53_","gr70_","gr69_","gr56_","gr61_","gr67_","gr53_","gr56_","gr54_","gr50_","gr54_","gr52_","gr55_","gr52_","gr52_","gr54_","gr51_","gr59_","gr49_","gr52_","gr66_","gr49_","gr56_","gr55_","gr55_","gr50_","gr54_","gr55_","gr72_","gr53_","gr52_","gr52_","gr49_","gr55_","gr54_","gr62_"],
|
||||
["gr49_","gr72_","gr55_","gr71_","gr52_","gr52_","gr51_","gr68_","gr55_","gr67_","gr51_","gr56_","gr55_","gr49_","gr52_","gr49_","gr51_","gr27-","rc17_","rc19_","gr25_","gr56_","gr52_","gr53_","gr52_","gr60_","gr49_","gr49_","gr53_","gr49_","gr59_","gr66_","gr53_","gr61_","gr60_","gr51_","gr49_","gr54_","gr58_","gr49_","gr63_","gr67_","gr53_","gr71_","gr50_","gr55_","gr50_","gr51_","gr50_","gr61_","gr51_","gr63_","gr50_","gr71_","gr53_","gr49_","gr56_","gr53_","gr56_","gr51_","gr64_","gr52_","gr67_","gr51_","gr65_","gr52_","gr53_","gr52_","gr54_","gr50_","gr53_","gr60_","gr54_","gr52_","gr59_","gr68_","gr53_","gr55_","gr52_","gr51_","gr49_","gr52_","gr50_","gr51_","gr54_","gr63_","gr49_","gr66_","gr58_","gr55_","gr52_","gr50_","gr50_","gr49_","gr54_","gr65_","gr51_","gr53_","gr49_","gr51_","gr50_","gr54_","gr51_","gr51_","gr52_","gr70_","gr52_","gr69_","gr55_","gr49_","gr49_","gr56_","gr55_","gr53_","gr68_","gr52_","gr49_","gr56_","gr49_","gr56_","gr52_","gr50_","gr50_","gr70_","gr51_","gr55_","gr52_","gr53_","gr53_","gr70_","gr57_","gr54_","gr69_","gr53_","gr52_","gr56_","gr50_","gr58_","gr56_","gr52_","gr63_","gr67_","gr49_","gr50_"],
|
||||
["gr60_","gr55_","gr56_","gr50_","gr52_","gr59_","gr52_","gr51_","gr69_","gr55_","gr60_","gr56_","gr52_","gr54_","gr54_","gr70_","gr54_","gr26-","rc16_","rc19_","gr26_","gr52_","gr72_","gr50_","gr55_","gr55_","gr55_","gr49_","gr56_","gr71_","gr52_","gr49_","gr49_","gr51_","gr49_","gr54_","gr70_","gr55_","gr66_","gr52_","gr54_","gr52_","gr49_","gr55_","gr51_","gr54_","gr51_","gr52_","gr54_","gr53_","gr49_","gr53_","gr57_","gr53_","gr56_","gr49_","gr51_","gr70_","gr50_","gr50_","gr55_","gr52_","gr51_","gr54_","gr53_","gr55_","gr60_","gr54_","gr55_","gr52_","gr67_","gr50_","gr53_","gr51_","gr49_","gr51_","gr51_","gr64_","gr51_","gr55_","gr54_","gr58_","gr50_","gr65_","gr50_","gr55_","gr59_","gr54_","gr54_","gr53_","gr56_","gr65_","gr54_","gr50_","gr52_","gr56_","gr56_","gr53_","gr51_","gr52_","gr56_","gr51_","gr56_","gr53_","gr52_","gr51_","gr53_","gr52_","gr49_","gr50_","gr54_","gr56_","gr52_","gr49_","gr54_","gr49_","gr50_","gr50_","gr65_","gr56_","gr49_","gr70_","gr57_","gr53_","gr52_","gr49_","gr65_","gr55_","gr50_","gr52_","gr53_","gr56_","gr56_","gr51_","gr56_","gr54_","gr51_","gr53_","gr51_","gr51_","gr54_","gr55_","gr53_","gr61_"],
|
||||
["gr50_","gr56_","gr54_","gr71_","gr49_","gr62_","gr51_","gr63_","gr50_","gr56_","gr53_","gr54_","gr49_","gr66_","gr50_","gr67_","gr52_","gr25-","rc17_","rc19_","gr26_","gr52_","gr59_","gr51_","gr56_","gr55_","gr53_","gr55_","gr51_","gr52_","gr71_","gr56_","gr55_","gr49_","gr49_","gr51_","gr56_","gr52_","gr55_","gr51_","gr51_","gr51_","gr53_","gr69_","gr53_","gr52_","gr53_","gr53_","gr53_","gr54_","gr50_","gr62_","gr53_","gr54_","gr57_","gr54_","gr53_","gr51_","gr51_","gr56_","gr71_","gr50_","gr60_","gr49_","gr52_","gr51_","gr55_","gr67_","gr54_","gr67_","gr55_","gr53_","gr52_","gr72_","gr55_","gr56_","gr49_","gr63_","gr52_","gr52_","gr53_","gr49_","gr54_","gr49_","gr50_","gr49_","gr51_","gr55_","gr57_","gr56_","gr51_","gr54_","gr51_","gr66_","gr53_","gr54_","gr56_","gr63_","gr56_","gr65_","gr67_","gr51_","gr51_","gr52_","gr51_","gr70_","gr54_","gr65_","gr52_","gr52_","gr54_","gr64_","gr52_","gr61_","gr53_","gr49_","gr55_","gr62_","gr55_","gr52_","gr52_","gr55_","gr55_","gr50_","gr53_","gr51_","gr56_","gr49_","gr51_","gr68_","gr61_","gr52_","gr55_","gr52_","gr65_","gr56_","gr50_","gr69_","gr55_","gr56_","gr54_","gr65_","gr51_","gr49_"],
|
||||
["gr59_","gr51_","gr63_","gr55_","gr59_","gr52_","gr56_","gr55_","gr54_","gr55_","gr70_","gr51_","gr71_","gr54_","gr63_","gr49_","gr53_","gr27-","rc17_","rc18_","gr24_","gr55_","gr51_","gr49_","gr56_","gr53_","gr52_","gr67_","gr64_","gr56_","gr52_","gr56_","gr49_","gr49_","gr52_","gr58_","gr62_","gr51_","gr51_","gr55_","gr64_","gr55_","gr56_","gr49_","gr56_","gr49_","gr49_","gr70_","gr54_","gr65_","gr55_","gr49_","gr54_","gr51_","gr56_","gr56_","gr53_","gr70_","gr51_","gr68_","gr56_","gr56_","gr55_","gr68_","gr54_","gr49_","gr53_","gr50_","gr65_","gr68_","gr49_","gr68_","gr49_","gr50_","gr54_","gr68_","gr56_","gr54_","gr55_","gr49_","gr55_","gr49_","gr54_","gr60_","gr64_","gr56_","gr72_","gr52_","gr50_","gr57_","gr54_","gr50_","gr56_","gr50_","gr54_","gr53_","gr50_","gr50_","gr49_","gr55_","gr51_","gr54_","gr51_","gr54_","gr49_","gr53_","gr62_","gr61_","gr56_","gr52_","gr55_","gr49_","gr55_","gr51_","gr55_","gr52_","gr49_","gr54_","gr59_","gr53_","gr54_","gr53_","gr53_","gr53_","gr55_","gr53_","gr65_","gr51_","gr54_","gr52_","gr56_","gr50_","gr52_","gr49_","gr56_","gr70_","gr56_","gr50_","gr50_","gr51_","gr55_","gr51_","gr51_","gr62_"],
|
||||
["gr54_","gr54_","gr52_","gr65_","gr50_","gr54_","gr50_","gr59_","gr49_","gr67_","gr54_","gr54_","gr54_","gr49_","gr54_","gr55_","gr65_","gr26-","rc16_","rc19_","gr24_","gr53_","gr49_","gr51_","gr63_","gr56_","gr49_","gr54_","gr53_","gr68_","gr50_","gr64_","gr53_","gr50_","gr52_","gr51_","gr66_","gr55_","gr52_","gr63_","gr51_","gr49_","gr51_","gr51_","gr52_","gr54_","gr55_","gr56_","gr51_","gr53_","gr56_","gr55_","gr51_","gr51_","gr52_","gr53_","gr61_","gr63_","gr52_","gr54_","gr50_","gr54_","gr53_","gr55_","gr66_","gr72_","gr55_","gr59_","gr49_","gr49_","gr49_","gr55_","gr52_","gr49_","gr51_","gr54_","gr72_","gr52_","gr51_","gr62_","gr52_","gr51_","gr49_","gr57_","gr50_","gr49_","gr51_","gr61_","gr50_","gr55_","gr50_","gr52_","gr71_","gr49_","gr50_","gr52_","gr55_","gr55_","gr54_","gr56_","gr55_","gr52_","gr50_","gr61_","gr53_","gr50_","gr55_","gr55_","gr53_","gr52_","gr50_","gr50_","gr53_","gr66_","gr53_","gr56_","gr56_","gr49_","gr53_","gr49_","gr62_","gr49_","gr51_","gr71_","gr50_","gr53_","gr51_","gr54_","gr68_","gr54_","gr64_","gr50_","gr53_","gr49_","gr53_","gr49_","gr53_","gr52_","gr69_","gr52_","gr56_","gr53_","gr53_","gr50_"],
|
||||
["gr52_","gr51_","gr53_","gr53_","gr61_","gr51_","gr50_","gr67_","gr66_","gr52_","gr55_","gr63_","gr54_","gr51_","gr55_","gr53_","gr55_","gr26-","rc16_","rc19_","gr27_","gr55_","gr68_","gr49_","gr53_","gr56_","gr55_","gr55_","gr51_","gr55_","gr51_","gr56_","gr60_","gr69_","gr55_","gr55_","gr50_","gr53_","gr51_","gr51_","gr53_","gr56_","gr54_","gr52_","gr56_","gr66_","gr71_","gr50_","gr50_","gr50_","gr53_","gr54_","gr70_","gr54_","gr63_","gr55_","gr51_","gr53_","gr52_","gr71_","gr69_","gr51_","gr52_","gr51_","gr58_","gr64_","gr53_","gr55_","gr54_","gr49_","gr55_","gr55_","gr55_","gr53_","gr49_","gr55_","gr49_","gr58_","gr57_","gr52_","gr52_","gr54_","gr49_","gr56_","gr65_","gr54_","gr52_","gr50_","gr49_","gr51_","gr53_","gr60_","gr54_","gr55_","gr72_","gr52_","gr55_","gr52_","gr71_","gr67_","gr49_","gr54_","gr54_","gr49_","gr72_","gr52_","gr55_","gr55_","gr50_","gr51_","gr55_","gr51_","gr53_","gr51_","gr55_","gr71_","gr52_","gr56_","gr53_","gr59_","gr54_","gr58_","gr56_","gr55_","gr54_","gr53_","gr71_","gr49_","gr52_","gr50_","gr51_","gr69_","gr51_","gr60_","gr56_","gr56_","gr49_","gr52_","gr56_","gr52_","gr50_","gr54_","gr56_","gr55_"],
|
||||
["gr53_","gr49_","gr49_","gr68_","gr54_","gr51_","gr49_","gr56_","gr50_","gr50_","gr63_","gr54_","gr54_","gr52_","gr58_","gr60_","gr56_","gr27-","rc16_","rc19_","gr26_","gr52_","gr54_","gr52_","gr49_","gr53_","gr53_","gr54_","gr50_","gr49_","gr53_","gr57_","gr53_","gr65_","gr55_","gr54_","gr63_","gr55_","gr56_","gr51_","gr54_","gr60_","gr49_","gr51_","gr53_","gr53_","gr64_","gr52_","gr60_","gr49_","gr70_","gr56_","gr53_","gr68_","gr71_","gr53_","gr56_","gr56_","gr53_","gr54_","gr56_","gr54_","gr68_","gr55_","gr52_","gr49_","gr55_","gr52_","gr55_","gr60_","gr50_","gr51_","gr56_","gr55_","gr55_","gr54_","gr59_","gr54_","gr49_","gr50_","gr54_","gr50_","gr52_","gr50_","gr53_","gr54_","gr51_","gr52_","gr55_","gr51_","gr56_","gr59_","gr54_","gr53_","gr55_","gr51_","gr50_","gr51_","gr51_","gr57_","gr55_","gr51_","gr56_","gr56_","gr51_","gr51_","gr55_","gr53_","gr49_","gr49_","gr70_","gr52_","gr56_","gr53_","gr61_","gr65_","gr60_","gr50_","gr50_","gr56_","gr52_","gr56_","gr54_","gr53_","gr51_","gr52_","gr53_","gr53_","gr56_","gr55_","gr50_","gr50_","gr54_","gr51_","gr49_","gr51_","gr52_","gr49_","gr59_","gr50_","gr53_","gr54_","gr54_","gr60_"],
|
||||
["gr49_","gr49_","gr50_","gr53_","gr67_","gr54_","gr69_","gr49_","gr49_","gr54_","gr55_","gr52_","gr71_","gr69_","gr55_","gr51_","gr53_","gr27-","rc17_","rc18_","gr26_","gr52_","gr53_","gr67_","gr52_","gr56_","gr66_","gr52_","gr49_","gr51_","gr49_","gr49_","gr50_","gr54_","gr50_","gr54_","gr49_","gr68_","gr51_","gr56_","gr69_","gr54_","gr68_","gr49_","gr67_","gr71_","gr51_","gr55_","gr56_","gr57_","gr50_","gr53_","gr49_","gr54_","gr53_","gr56_","gr52_","gr56_","gr53_","gr51_","gr52_","gr50_","gr55_","gr68_","gr49_","gr52_","gr53_","gr53_","gr54_","gr51_","gr52_","gr52_","gr49_","gr54_","gr52_","gr51_","gr54_","gr67_","gr51_","gr56_","gr52_","gr56_","gr51_","gr54_","gr54_","gr50_","gr71_","gr58_","gr51_","gr49_","gr50_","gr55_","gr55_","gr50_","gr49_","gr51_","gr72_","gr52_","gr51_","gr56_","gr50_","gr51_","gr56_","gr52_","gr67_","gr56_","gr55_","gr50_","gr56_","gr55_","gr71_","gr54_","gr54_","gr56_","gr55_","gr52_","gr50_","gr63_","gr53_","gr50_","gr49_","gr52_","gr51_","gr65_","gr49_","gr51_","gr53_","gr56_","gr54_","gr61_","gr53_","gr49_","gr53_","gr53_","gr56_","gr51_","gr69_","gr51_","gr54_","gr54_","gr49_","gr53_","gr61_","gr66_"],
|
||||
["gr56_","gr57_","gr54_","gr64_","gr53_","gr69_","gr55_","gr55_","gr55_","gr55_","gr55_","gr56_","gr49_","gr53_","gr69_","gr51_","gr51_","gr27-","rc17_","rc19_","gr26_","gr71_","gr50_","gr54_","gr54_","gr56_","gr55_","gr56_","gr58_","gr60_","gr71_","gr51_","gr49_","gr52_","gr49_","gr49_","gr55_","gr52_","gr59_","gr49_","gr52_","gr53_","gr55_","gr52_","gr50_","gr49_","gr49_","gr50_","gr56_","gr66_","gr50_","gr51_","gr58_","gr51_","gr72_","gr55_","gr55_","gr54_","gr52_","gr55_","gr49_","gr52_","gr51_","gr65_","gr49_","gr56_","gr54_","gr55_","gr49_","gr61_","gr51_","gr56_","gr56_","gr51_","gr49_","gr62_","gr49_","gr54_","gr55_","gr71_","gr52_","gr55_","gr62_","gr52_","gr51_","gr49_","gr50_","gr53_","gr55_","gr52_","gr53_","gr51_","gr57_","gr54_","gr52_","gr52_","gr49_","gr69_","gr56_","gr51_","gr50_","gr55_","gr54_","gr53_","gr51_","gr50_","gr55_","gr53_","gr64_","gr52_","gr49_","gr56_","gr71_","gr60_","gr52_","gr58_","gr52_","gr55_","gr54_","gr56_","gr53_","gr69_","gr56_","gr52_","gr55_","gr49_","gr55_","gr52_","gr55_","gr52_","gr52_","gr67_","gr50_","gr50_","gr60_","gr63_","gr70_","gr51_","gr64_","gr49_","gr62_","gr52_","gr54_","gr72_"],
|
||||
["gr49_","gr52_","gr54_","gr54_","gr52_","gr55_","gr54_","gr64_","gr52_","gr70_","gr55_","gr51_","gr52_","gr53_","gr54_","gr50_","gr53_","gr26-","rc16_","rc18_","gr26_","gr54_","gr53_","gr54_","gr55_","gr53_","gr53_","gr50_","gr59_","gr52_","gr54_","gr52_","gr51_","gr52_","gr67_","gr54_","gr51_","gr56_","gr49_","gr54_","gr49_","gr57_","gr49_","gr63_","gr49_","gr50_","gr56_","gr61_","gr50_","gr53_","gr54_","gr68_","gr64_","gr52_","gr50_","gr58_","gr56_","gr56_","gr52_","gr56_","gr55_","gr54_","gr50_","gr54_","gr52_","gr53_","gr52_","gr52_","gr49_","gr50_","gr56_","gr57_","gr54_","gr53_","gr54_","gr56_","gr61_","gr49_","gr53_","gr53_","gr55_","gr55_","gr52_","gr69_","gr54_","gr51_","gr50_","gr52_","gr49_","gr53_","gr55_","gr60_","gr51_","gr49_","gr56_","gr53_","gr60_","gr56_","gr55_","gr71_","gr54_","gr54_","gr49_","gr49_","gr50_","gr50_","gr71_","gr54_","gr49_","gr49_","gr53_","gr51_","gr51_","gr50_","gr54_","gr50_","gr59_","gr51_","gr53_","gr58_","gr56_","gr51_","gr53_","gr53_","gr54_","gr70_","gr50_","gr49_","gr59_","gr52_","gr54_","gr55_","gr51_","gr50_","gr54_","gr55_","gr53_","gr72_","gr50_","gr50_","gr51_","gr50_","gr49_","gr54_"],
|
||||
["gr70_","gr63_","gr50_","gr53_","gr55_","gr52_","gr68_","gr55_","gr55_","gr50_","gr54_","gr51_","gr56_","gr52_","gr56_","gr50_","gr50_","gr26-","rc17_","rc19_","gr26_","gr56_","gr54_","gr50_","gr55_","gr56_","gr49_","gr51_","gr69_","gr52_","gr56_","gr54_","gr56_","gr61_","gr50_","gr54_","gr51_","gr63_","gr53_","gr56_","gr53_","gr50_","gr67_","gr55_","gr50_","gr51_","gr72_","gr57_","gr56_","gr56_","gr62_","gr56_","gr50_","gr56_","gr49_","gr50_","gr57_","gr57_","gr52_","gr49_","gr54_","gr64_","gr50_","gr51_","gr49_","gr52_","gr53_","gr59_","gr54_","gr51_","gr50_","gr54_","gr50_","gr52_","gr51_","gr64_","gr50_","gr51_","gr52_","gr53_","gr53_","gr56_","gr55_","gr56_","gr53_","gr56_","gr56_","gr55_","gr66_","gr51_","gr49_","gr68_","gr54_","gr52_","gr71_","gr54_","gr50_","gr61_","gr51_","gr54_","gr56_","gr56_","gr66_","gr50_","gr55_","gr54_","gr54_","gr62_","gr50_","gr52_","gr51_","gr54_","gr49_","gr65_","gr51_","gr53_","gr55_","gr50_","gr50_","gr49_","gr50_","gr54_","gr58_","gr53_","gr54_","gr50_","gr56_","gr53_","gr50_","gr54_","gr53_","gr54_","gr65_","gr54_","gr62_","gr51_","gr51_","gr51_","gr52_","gr49_","gr49_","gr55_","gr61_","gr52_"],
|
||||
["gr53_","gr52_","gr50_","gr72_","gr72_","gr53_","gr55_","gr49_","gr57_","gr51_","gr54_","gr50_","gr53_","gr50_","gr60_","gr50_","gr49_","gr26-","rc16_","rc18_","gr26_","gr70_","gr53_","gr50_","gr54_","gr56_","gr54_","gr49_","gr56_","gr51_","gr51_","gr56_","gr64_","gr55_","gr52_","gr55_","gr64_","gr49_","gr55_","gr54_","gr56_","gr49_","gr53_","gr54_","gr51_","gr50_","gr51_","gr53_","gr64_","gr54_","gr50_","gr53_","gr66_","gr55_","gr55_","gr53_","gr64_","gr54_","gr51_","gr71_","gr54_","gr56_","gr60_","gr49_","gr50_","gr52_","gr50_","gr52_","gr71_","gr55_","gr51_","gr72_","gr54_","gr56_","gr56_","gr54_","gr56_","gr52_","gr61_","gr52_","gr53_","gr51_","gr53_","gr53_","gr49_","gr49_","gr52_","gr62_","gr49_","gr54_","gr51_","gr50_","gr51_","gr55_","gr56_","gr55_","gr51_","gr50_","gr51_","gr71_","gr54_","gr54_","gr50_","gr56_","gr51_","gr56_","gr61_","gr52_","gr61_","gr55_","gr51_","gr49_","gr66_","gr50_","gr51_","gr50_","gr55_","gr68_","gr60_","gr52_","gr50_","gr55_","gr54_","gr66_","gr63_","gr54_","gr55_","gr50_","gr60_","gr50_","gr63_","gr54_","gr52_","gr54_","gr52_","gr52_","gr55_","gr50_","gr70_","gr54_","gr57_","gr52_","gr60_","gr51_"],
|
||||
["gr55_","gr50_","gr53_","gr52_","gr53_","gr49_","gr56_","gr56_","gr50_","gr49_","gr53_","gr56_","gr66_","gr55_","gr49_","gr59_","gr51_","gr27-","rc16_","rc19_","gr24_","gr71_","gr49_","gr54_","gr51_","gr53_","gr50_","gr55_","gr52_","gr49_","gr64_","gr50_","gr66_","gr51_","gr50_","gr51_","gr50_","gr55_","gr55_","gr56_","gr50_","gr53_","gr71_","gr51_","gr69_","gr49_","gr55_","gr49_","gr67_","gr52_","gr57_","gr53_","gr54_","gr49_","gr50_","gr53_","gr54_","gr49_","gr58_","gr52_","gr54_","gr56_","gr55_","gr55_","gr53_","gr61_","gr51_","gr56_","gr54_","gr70_","gr57_","gr54_","gr56_","gr50_","gr60_","gr59_","gr55_","gr53_","gr56_","gr52_","gr49_","gr55_","gr55_","gr52_","gr50_","gr53_","gr53_","gr50_","gr72_","gr71_","gr53_","gr71_","gr55_","gr56_","gr50_","gr49_","gr55_","gr49_","gr70_","gr50_","gr49_","gr54_","gr55_","gr49_","gr70_","gr56_","gr52_","gr56_","gr56_","gr49_","gr68_","gr52_","gr54_","gr52_","gr56_","gr49_","gr53_","gr50_","gr52_","gr52_","gr50_","gr53_","gr51_","gr54_","gr56_","gr57_","gr56_","gr72_","gr56_","gr70_","gr69_","gr49_","gr68_","gr56_","gr71_","gr49_","gr51_","gr55_","gr72_","gr50_","gr56_","gr63_","gr52_","gr50_"],
|
||||
["gr51_","gr49_","gr53_","gr51_","gr55_","gr56_","gr55_","gr51_","gr50_","gr69_","gr52_","gr60_","gr56_","gr52_","gr49_","gr52_","gr72_","gr27-","rc17_","rc18_","gr26_","gr51_","gr51_","gr55_","gr55_","gr64_","gr55_","gr50_","gr56_","gr71_","gr55_","gr53_","gr55_","gr56_","gr52_","gr50_","gr56_","gr56_","gr52_","gr55_","gr50_","gr62_","gr56_","gr54_","gr56_","gr56_","gr69_","gr61_","gr56_","gr52_","gr52_","gr55_","gr55_","gr55_","gr50_","gr50_","gr59_","gr49_","gr49_","gr63_","gr55_","gr71_","gr69_","gr53_","gr51_","gr56_","gr71_","gr54_","gr49_","gr49_","gr53_","gr72_","gr49_","gr49_","gr56_","gr54_","gr54_","gr53_","gr53_","gr52_","gr55_","gr53_","gr53_","gr54_","gr55_","gr60_","gr53_","gr66_","gr54_","gr52_","gr54_","gr49_","gr53_","gr65_","gr54_","gr51_","gr53_","gr57_","gr53_","gr64_","gr49_","gr51_","gr57_","gr55_","gr72_","gr52_","gr51_","gr50_","gr60_","gr51_","gr56_","gr56_","gr69_","gr55_","gr49_","gr50_","gr55_","gr51_","gr59_","gr55_","gr56_","gr49_","gr55_","gr49_","gr67_","gr52_","gr51_","gr53_","gr55_","gr52_","gr55_","gr54_","gr56_","gr54_","gr49_","gr51_","gr61_","gr49_","gr49_","gr53_","gr49_","gr51_","gr54_","gr65_"],
|
||||
["gr51_","gr58_","gr56_","gr52_","gr54_","gr51_","gr52_","gr50_","gr49_","gr54_","gr51_","gr54_","gr55_","gr56_","gr66_","gr53_","gr56_","gr26-","rc16_","rc19_","gr26_","gr50_","gr51_","gr60_","gr50_","gr56_","gr51_","gr52_","gr53_","gr51_","gr71_","gr56_","gr56_","gr54_","gr58_","gr51_","gr52_","gr52_","gr64_","gr66_","gr49_","gr53_","gr50_","gr56_","gr51_","gr53_","gr53_","gr50_","gr65_","gr53_","gr67_","gr52_","gr53_","gr56_","gr49_","gr67_","gr54_","gr63_","gr64_","gr49_","gr49_","gr54_","gr52_","gr60_","gr68_","gr52_","gr56_","gr54_","gr49_","gr55_","gr55_","gr55_","gr57_","gr53_","gr52_","gr55_","gr54_","gr52_","gr52_","gr53_","gr56_","gr59_","gr55_","gr50_","gr50_","gr55_","gr50_","gr54_","gr50_","gr56_","gr56_","gr50_","gr52_","gr49_","gr68_","gr53_","gr55_","gr51_","gr56_","gr56_","gr62_","gr50_","gr50_","gr49_","gr56_","gr54_","gr50_","gr51_","gr49_","gr52_","gr53_","gr52_","gr55_","gr51_","gr53_","gr54_","gr62_","gr55_","gr62_","gr55_","gr52_","gr50_","gr59_","gr49_","gr54_","gr53_","gr63_","gr51_","gr65_","gr67_","gr52_","gr70_","gr50_","gr63_","gr56_","gr49_","gr62_","gr49_","gr59_","gr53_","gr51_","gr61_","gr50_","gr49_"],
|
||||
["gr53_","gr52_","gr55_","gr55_","gr49_","gr49_","gr54_","gr69_","gr54_","gr53_","gr49_","gr54_","gr55_","gr51_","gr53_","gr55_","gr51_","gr27-","rc17_","rc19_","gr24_","gr61_","gr49_","gr54_","gr60_","gr53_","gr71_","gr52_","gr52_","gr56_","gr50_","gr51_","gr51_","gr62_","gr52_","gr54_","gr52_","gr68_","gr49_","gr49_","gr55_","gr49_","gr67_","gr55_","gr56_","gr50_","gr55_","gr55_","gr52_","gr71_","gr54_","gr51_","gr55_","gr53_","gr54_","gr56_","gr49_","gr50_","gr54_","gr56_","gr52_","gr51_","gr53_","gr51_","gr55_","gr49_","gr52_","gr57_","gr54_","gr56_","gr55_","gr50_","gr56_","gr55_","gr56_","gr62_","gr64_","gr51_","gr68_","gr53_","gr52_","gr51_","gr68_","gr49_","gr49_","gr53_","gr61_","gr55_","gr53_","gr56_","gr49_","gr50_","gr51_","gr72_","gr52_","gr55_","gr59_","gr54_","gr55_","gr50_","gr71_","gr53_","gr64_","gr56_","gr56_","gr70_","gr56_","gr50_","gr63_","gr52_","gr52_","gr57_","gr52_","gr49_","gr53_","gr68_","gr50_","gr55_","gr56_","gr52_","gr56_","gr72_","gr55_","gr72_","gr50_","gr54_","gr53_","gr57_","gr54_","gr52_","gr54_","gr56_","gr64_","gr51_","gr53_","gr51_","gr54_","gr54_","gr52_","gr60_","gr53_","gr55_","gr56_","gr49_"],
|
||||
["gr50_","gr55_","gr49_","gr61_","gr58_","gr50_","gr54_","gr53_","gr51_","gr56_","gr56_","gr52_","gr56_","gr62_","gr50_","gr64_","gr56_","gr27-","rc16_","rc19_","gr27_","gr51_","gr53_","gr51_","gr53_","gr55_","gr50_","gr58_","gr58_","gr51_","gr54_","gr55_","gr56_","gr55_","gr49_","gr51_","gr49_","gr55_","gr56_","gr52_","gr52_","gr58_","gr52_","gr70_","gr53_","gr55_","gr51_","gr53_","gr50_","gr51_","gr61_","gr52_","gr63_","gr52_","gr56_","gr49_","gr50_","gr50_","gr52_","gr54_","gr71_","gr56_","gr72_","gr50_","gr70_","gr56_","gr60_","gr54_","gr56_","gr52_","gr53_","gr49_","gr53_","gr70_","gr52_","gr52_","gr49_","gr49_","gr54_","gr70_","gr67_","gr53_","gr53_","gr58_","gr53_","gr55_","gr54_","gr52_","gr71_","gr54_","gr50_","gr55_","gr51_","gr55_","gr61_","gr50_","gr50_","gr50_","gr50_","gr55_","gr54_","gr51_","gr52_","gr50_","gr54_","gr50_","gr55_","gr72_","gr53_","gr52_","gr53_","gr53_","gr51_","gr56_","gr49_","gr53_","gr50_","gr50_","gr56_","gr52_","gr59_","gr59_","gr58_","gr54_","gr55_","gr55_","gr54_","gr56_","gr54_","gr54_","gr51_","gr68_","gr51_","gr51_","gr56_","gr57_","gr53_","gr56_","gr53_","gr49_","gr64_","gr72_","gr55_","gr50_"],
|
||||
["gr58_","gr52_","gr56_","gr53_","gr55_","gr55_","gr52_","gr50_","gr54_","gr49_","gr54_","gr57_","gr49_","gr56_","gr49_","gr51_","gr49_","gr25-","rc17_","rc19_","gr26_","gr61_","gr54_","gr53_","gr52_","gr55_","gr54_","gr55_","gr50_","gr54_","gr52_","gr51_","gr49_","gr57_","gr50_","gr51_","gr67_","gr53_","gr69_","gr52_","gr72_","gr49_","gr53_","gr50_","gr51_","gr58_","gr56_","gr51_","gr51_","gr64_","gr55_","gr63_","gr51_","gr55_","gr56_","gr55_","gr50_","gr55_","gr59_","gr59_","gr52_","gr53_","gr53_","gr50_","gr55_","gr56_","gr56_","gr53_","gr54_","gr60_","gr56_","gr52_","gr50_","gr50_","gr55_","gr56_","gr52_","gr54_","gr50_","gr56_","gr52_","gr55_","gr50_","gr53_","gr54_","gr51_","gr53_","gr53_","gr55_","gr49_","gr50_","gr59_","gr68_","gr53_","gr49_","gr69_","gr52_","gr56_","gr56_","gr61_","gr49_","gr53_","gr54_","gr50_","gr51_","gr52_","gr61_","gr52_","gr52_","gr59_","gr56_","gr50_","gr61_","gr56_","gr49_","gr55_","gr64_","gr56_","gr53_","gr49_","gr68_","gr52_","gr54_","gr49_","gr52_","gr54_","gr56_","gr55_","gr56_","gr49_","gr52_","gr51_","gr59_","gr54_","gr64_","gr52_","gr51_","gr56_","gr69_","gr52_","gr52_","gr57_","gr56_","gr66_"],
|
||||
["gr53_","gr50_","gr50_","gr55_","gr49_","gr55_","gr64_","gr50_","gr56_","gr56_","gr68_","gr53_","gr51_","gr49_","gr50_","gr53_","gr60_","gr26-","rc17_","rc19_","gr24_","gr49_","gr53_","gr52_","gr50_","gr68_","gr49_","gr50_","gr51_","gr56_","gr60_","gr55_","gr52_","gr53_","gr55_","gr53_","gr50_","gr62_","gr71_","gr49_","gr51_","gr61_","gr54_","gr53_","gr50_","gr53_","gr55_","gr49_","gr63_","gr55_","gr54_","gr53_","gr52_","gr70_","gr54_","gr49_","gr65_","gr50_","gr49_","gr53_","gr49_","gr49_","gr51_","gr49_","gr67_","gr49_","gr63_","gr55_","gr50_","gr55_","gr65_","gr52_","gr61_","gr52_","gr50_","gr67_","gr56_","gr50_","gr72_","gr50_","gr49_","gr51_","gr51_","gr66_","gr51_","gr59_","gr49_","gr51_","gr55_","gr65_","gr51_","gr54_","gr54_","gr58_","gr54_","gr49_","gr56_","gr62_","gr50_","gr55_","gr65_","gr49_","gr54_","gr53_","gr55_","gr59_","gr67_","gr54_","gr61_","gr49_","gr68_","gr56_","gr58_","gr50_","gr52_","gr68_","gr50_","gr50_","gr56_","gr50_","gr68_","gr50_","gr49_","gr67_","gr51_","gr53_","gr51_","gr54_","gr53_","gr61_","gr65_","gr52_","gr55_","gr69_","gr55_","gr51_","gr55_","gr52_","gr54_","gr62_","gr49_","gr56_","gr67_","gr51_"],
|
||||
["gr51_","gr49_","gr56_","gr60_","gr56_","gr50_","gr50_","gr63_","gr56_","gr51_","gr50_","gr70_","gr55_","gr50_","gr52_","gr56_","gr50_","gr25-","rc17_","rc18_","gr25_","gr57_","gr50_","gr70_","gr55_","gr55_","gr68_","gr52_","gr52_","gr49_","gr54_","gr52_","gr50_","gr50_","gr56_","gr49_","gr53_","gr51_","gr56_","gr49_","gr52_","gr54_","gr54_","gr54_","gr50_","gr63_","gr56_","gr71_","gr53_","gr54_","gr56_","gr69_","gr50_","gr55_","gr49_","gr55_","gr55_","gr58_","gr54_","gr54_","gr55_","gr52_","gr52_","gr50_","gr50_","gr51_","gr51_","gr51_","gr50_","gr62_","gr56_","gr64_","gr55_","gr51_","gr53_","gr52_","gr60_","gr54_","gr56_","gr52_","gr56_","gr49_","gr56_","gr66_","gr54_","gr62_","gr52_","gr53_","gr53_","gr55_","gr67_","gr62_","gr49_","gr55_","gr69_","gr53_","gr72_","gr54_","gr56_","gr50_","gr54_","gr49_","gr52_","gr53_","gr49_","gr56_","gr56_","gr54_","gr61_","gr54_","gr50_","gr53_","gr50_","gr52_","gr60_","gr52_","gr65_","gr55_","gr49_","gr56_","gr51_","gr53_","gr52_","gr52_","gr50_","gr60_","gr49_","gr53_","gr54_","gr51_","gr50_","gr63_","gr49_","gr54_","gr51_","gr54_","gr51_","gr71_","gr54_","gr54_","gr62_","gr56_","gr64_","gr52_"],
|
||||
["gr67_","gr49_","gr66_","gr51_","gr52_","gr72_","gr50_","gr72_","gr64_","gr52_","gr55_","gr62_","gr50_","gr66_","gr56_","gr51_","gr58_","gr25-","rc16_","rc19_","gr24_","gr53_","gr53_","gr53_","gr51_","gr55_","gr55_","gr51_","gr54_","gr50_","gr49_","gr57_","gr51_","gr56_","gr53_","gr55_","gr54_","gr51_","gr54_","gr54_","gr52_","gr69_","gr54_","gr62_","gr50_","gr49_","gr51_","gr62_","gr62_","gr55_","gr54_","gr56_","gr52_","gr52_","gr51_","gr50_","gr67_","gr72_","gr52_","gr54_","gr62_","gr54_","gr70_","gr50_","gr51_","gr55_","gr50_","gr49_","gr63_","gr55_","gr53_","gr49_","gr56_","gr55_","gr56_","gr51_","gr49_","gr49_","gr49_","gr54_","gr50_","gr55_","gr49_","gr52_","gr53_","gr53_","gr52_","gr51_","gr50_","gr50_","gr52_","gr53_","gr52_","gr51_","gr53_","gr49_","gr50_","gr64_","gr50_","gr56_","gr55_","gr53_","gr55_","gr49_","gr67_","gr50_","gr54_","gr53_","gr55_","gr51_","gr67_","gr51_","gr52_","gr57_","gr55_","gr53_","gr53_","gr55_","gr56_","gr50_","gr49_","gr54_","gr55_","gr50_","gr50_","gr49_","gr56_","gr53_","gr64_","gr50_","gr54_","gr52_","gr55_","gr51_","gr69_","gr54_","gr53_","gr54_","gr54_","gr53_","gr53_","gr70_","gr55_","gr54_"],
|
||||
["gr54_","gr51_","gr56_","gr52_","gr68_","gr50_","gr55_","gr54_","gr54_","gr51_","gr53_","gr52_","gr55_","gr57_","gr63_","gr54_","gr54_","gr25-","rc16_","rc18_","gr25_","gr67_","gr54_","gr49_","gr54_","gr68_","gr50_","gr49_","gr49_","gr58_","gr63_","gr54_","gr55_","gr55_","gr53_","gr56_","gr51_","gr55_","gr50_","gr55_","gr51_","gr49_","gr54_","gr52_","gr51_","gr50_","gr56_","gr53_","gr51_","gr50_","gr71_","gr52_","gr60_","gr52_","gr50_","gr64_","gr54_","gr50_","gr49_","gr51_","gr53_","gr56_","gr66_","gr51_","gr56_","gr52_","gr69_","gr50_","gr65_","gr52_","gr56_","gr53_","gr55_","gr56_","gr51_","gr56_","gr63_","gr52_","gr53_","gr49_","gr55_","gr55_","gr53_","gr56_","gr49_","gr55_","gr50_","gr54_","gr54_","gr50_","gr52_","gr59_","gr56_","gr62_","gr56_","gr53_","gr63_","gr51_","gr56_","gr56_","gr54_","gr51_","gr65_","gr49_","gr59_","gr49_","gr51_","gr50_","gr50_","gr55_","gr52_","gr66_","gr50_","gr54_","gr62_","gr49_","gr54_","gr50_","gr52_","gr72_","gr53_","gr52_","gr49_","gr55_","gr51_","gr54_","gr50_","gr53_","gr54_","gr66_","gr54_","gr60_","gr50_","gr52_","gr53_","gr50_","gr53_","gr51_","gr54_","gr49_","gr68_","gr52_","gr56_","gr72_"],
|
||||
["gr68_","gr55_","gr50_","gr56_","gr50_","gr63_","gr50_","gr55_","gr52_","gr54_","gr50_","gr49_","gr53_","gr55_","gr54_","gr50_","gr52_","gr25-","rc17_","rc18_","gr24_","gr53_","gr61_","gr64_","gr55_","gr54_","gr53_","gr54_","gr53_","gr50_","gr62_","gr59_","gr62_","gr56_","gr49_","gr52_","gr53_","gr69_","gr52_","gr52_","gr49_","gr66_","gr54_","gr56_","gr70_","gr58_","gr54_","gr52_","gr50_","gr53_","gr53_","gr51_","gr56_","gr64_","gr63_","gr52_","gr65_","gr50_","gr55_","gr55_","gr54_","gr49_","gr56_","gr52_","gr55_","gr67_","gr52_","gr52_","gr55_","gr53_","gr64_","gr54_","gr54_","gr55_","gr62_","gr52_","gr54_","gr54_","gr50_","gr51_","gr54_","gr49_","gr69_","gr55_","gr50_","gr52_","gr69_","gr52_","gr65_","gr56_","gr52_","gr54_","gr54_","gr49_","gr69_","gr50_","gr55_","gr55_","gr66_","gr51_","gr49_","gr53_","gr72_","gr54_","gr66_","gr61_","gr56_","gr54_","gr53_","gr51_","gr56_","gr56_","gr50_","gr53_","gr49_","gr64_","gr51_","gr65_","gr55_","gr50_","gr49_","gr55_","gr52_","gr58_","gr53_","gr51_","gr69_","gr53_","gr55_","gr52_","gr51_","gr54_","gr50_","gr63_","gr51_","gr50_","gr53_","gr61_","gr54_","gr52_","gr52_","gr49_","gr50_","gr50_"],
|
||||
["gr53_","gr51_","gr55_","gr70_","gr52_","gr56_","gr51_","gr54_","gr55_","gr55_","gr55_","gr52_","gr59_","gr53_","gr72_","gr54_","gr53_","gr24-","rc16_","rc19_","gr27_","gr58_","gr65_","gr52_","gr64_","gr62_","gr55_","gr56_","gr50_","gr56_","gr55_","gr49_","gr55_","gr50_","gr49_","gr49_","gr52_","gr56_","gr51_","gr54_","gr54_","gr49_","gr54_","gr50_","gr56_","gr49_","gr55_","gr52_","gr59_","gr50_","gr54_","gr53_","gr65_","gr55_","gr50_","gr67_","gr49_","gr56_","gr52_","gr66_","gr55_","gr65_","gr55_","gr70_","gr49_","gr58_","gr54_","gr50_","gr51_","gr57_","gr54_","gr52_","gr51_","gr51_","gr56_","gr62_","gr53_","gr55_","gr49_","gr71_","gr49_","gr51_","gr49_","gr56_","gr56_","gr60_","gr55_","gr72_","gr50_","gr51_","gr51_","gr64_","gr51_","gr51_","gr51_","gr63_","gr50_","gr60_","gr55_","gr55_","gr49_","gr67_","gr53_","gr55_","gr56_","gr55_","gr69_","gr55_","gr49_","gr53_","gr54_","gr55_","gr61_","gr53_","gr55_","gr56_","gr62_","gr51_","gr55_","gr57_","gr51_","gr56_","gr70_","gr52_","gr55_","gr54_","gr50_","gr54_","gr50_","gr55_","gr51_","gr50_","gr54_","gr54_","gr62_","gr55_","gr52_","gr52_","gr62_","gr54_","gr53_","gr53_","gr54_","gr53_"],
|
||||
["gr49_","gr57_","gr49_","gr54_","gr51_","gr52_","gr50_","gr56_","gr50_","gr61_","gr52_","gr53_","gr50_","gr58_","gr52_","gr50_","gr49_","gr25-","rc17_","rc19_","gr27_","gr51_","gr51_","gr52_","gr55_","gr51_","gr49_","gr65_","gr55_","gr54_","gr50_","gr55_","gr52_","gr70_","gr53_","gr49_","gr55_","gr53_","gr49_","gr68_","gr49_","gr52_","gr54_","gr51_","gr52_","gr64_","gr49_","gr52_","gr56_","gr56_","gr52_","gr56_","gr71_","gr57_","gr51_","gr55_","gr49_","gr50_","gr56_","gr50_","gr49_","gr49_","gr49_","gr55_","gr54_","gr52_","gr53_","gr49_","gr51_","gr56_","gr50_","gr53_","gr55_","gr53_","gr50_","gr54_","gr54_","gr55_","gr49_","gr50_","gr62_","gr55_","gr49_","gr67_","gr50_","gr56_","gr54_","gr55_","gr51_","gr51_","gr59_","gr56_","gr50_","gr52_","gr51_","gr53_","gr71_","gr51_","gr72_","gr55_","gr62_","gr51_","gr63_","gr52_","gr52_","gr54_","gr50_","gr71_","gr54_","gr71_","gr53_","gr54_","gr51_","gr55_","gr50_","gr51_","gr53_","gr49_","gr53_","gr52_","gr52_","gr53_","gr56_","gr52_","gr50_","gr57_","gr56_","gr55_","gr72_","gr51_","gr54_","gr49_","gr56_","gr49_","gr56_","gr56_","gr49_","gr65_","gr53_","gr53_","gr54_","gr49_","gr52_","gr55_"],
|
||||
["gr55_","gr56_","gr62_","gr49_","gr55_","gr51_","gr63_","gr55_","gr52_","gr65_","gr49_","gr52_","gr66_","gr55_","gr57_","gr55_","gr56_","gr26-","rc17_","rc19_","gr26_","gr55_","gr51_","gr57_","gr53_","gr53_","gr67_","gr56_","gr53_","gr51_","gr54_","gr54_","gr51_","gr50_","gr69_","gr51_","gr56_","gr62_","gr52_","gr54_","gr51_","gr62_","gr53_","gr50_","gr49_","gr54_","gr53_","gr52_","gr55_","gr72_","gr53_","gr54_","gr50_","gr55_","gr66_","gr55_","gr56_","gr50_","gr53_","gr65_","gr52_","gr71_","gr52_","gr57_","gr54_","gr54_","gr55_","gr51_","gr72_","gr50_","gr52_","gr67_","gr50_","gr51_","gr52_","gr53_","gr63_","gr55_","gr52_","gr54_","gr54_","gr52_","gr53_","gr49_","gr66_","gr55_","gr52_","gr51_","gr50_","gr49_","gr50_","gr55_","gr50_","gr53_","gr69_","gr50_","gr64_","gr67_","gr69_","gr56_","gr55_","gr55_","gr56_","gr62_","gr56_","gr51_","gr71_","gr54_","gr52_","gr49_","gr54_","gr54_","gr51_","gr50_","gr56_","gr56_","gr49_","gr50_","gr49_","gr52_","gr52_","gr49_","gr58_","gr66_","gr55_","gr51_","gr49_","gr56_","gr49_","gr49_","gr54_","gr66_","gr54_","gr54_","gr71_","gr53_","gr53_","gr51_","gr52_","gr59_","gr49_","gr52_","gr60_","gr51_"],
|
||||
["gr72_","gr56_","gr55_","gr53_","gr63_","gr53_","gr49_","gr66_","gr52_","gr50_","gr53_","gr58_","gr51_","gr51_","gr56_","gr68_","gr50_","gr25-","rc16_","rc18_","gr27_","gr54_","gr65_","gr50_","gr49_","gr53_","gr53_","gr54_","gr53_","gr72_","gr53_","gr69_","gr53_","gr56_","gr56_","gr56_","gr69_","gr50_","gr61_","gr53_","gr52_","gr52_","gr60_","gr71_","gr54_","gr68_","gr50_","gr53_","gr50_","gr49_","gr49_","gr71_","gr49_","gr55_","gr54_","gr52_","gr53_","gr64_","gr50_","gr54_","gr64_","gr54_","gr49_","gr52_","gr56_","gr50_","gr53_","gr55_","gr58_","gr55_","gr52_","gr54_","gr52_","gr64_","gr54_","gr50_","gr49_","gr70_","gr72_","gr66_","gr49_","gr51_","gr60_","gr49_","gr54_","gr50_","gr55_","gr51_","gr56_","gr68_","gr49_","gr52_","gr50_","gr52_","gr72_","gr56_","gr51_","gr52_","gr54_","gr52_","gr54_","gr71_","gr54_","gr52_","gr50_","gr52_","gr51_","gr66_","gr59_","gr49_","gr49_","gr70_","gr55_","gr54_","gr50_","gr64_","gr58_","gr54_","gr50_","gr55_","gr50_","gr49_","gr52_","gr54_","gr52_","gr53_","gr51_","gr50_","gr53_","gr56_","gr49_","gr54_","gr49_","gr55_","gr68_","gr55_","gr56_","gr50_","gr51_","gr55_","gr60_","gr54_","gr53_","gr54_"],
|
||||
["gr53_","gr58_","gr51_","gr53_","gr53_","gr51_","gr58_","gr49_","gr52_","gr56_","gr50_","gr54_","gr60_","gr54_","gr49_","gr49_","gr54_","gr24-","rc17_","rc19_","gr27_","gr49_","gr60_","gr55_","gr53_","gr50_","gr55_","gr50_","gr52_","gr52_","gr69_","gr52_","gr49_","gr64_","gr56_","gr54_","gr55_","gr49_","gr52_","gr72_","gr52_","gr56_","gr67_","gr51_","gr68_","gr56_","gr50_","gr53_","gr55_","gr51_","gr50_","gr49_","gr70_","gr52_","gr56_","gr61_","gr49_","gr50_","gr54_","gr50_","gr52_","gr59_","gr56_","gr63_","gr53_","gr55_","gr55_","gr53_","gr56_","gr56_","gr65_","gr52_","gr52_","gr65_","gr55_","gr53_","gr52_","gr52_","gr54_","gr55_","gr54_","gr50_","gr55_","gr51_","gr55_","gr64_","gr55_","gr55_","gr53_","gr52_","gr56_","gr55_","gr51_","gr60_","gr54_","gr55_","gr49_","gr63_","gr50_","gr50_","gr49_","gr49_","gr50_","gr54_","gr59_","gr51_","gr55_","gr53_","gr50_","gr57_","gr54_","gr54_","gr69_","gr51_","gr64_","gr50_","gr55_","gr53_","gr50_","gr55_","gr64_","gr55_","gr53_","gr57_","gr49_","gr53_","gr63_","gr52_","gr67_","gr56_","gr56_","gr51_","gr49_","gr67_","gr54_","gr53_","gr50_","gr71_","gr50_","gr50_","gr56_","gr56_","gr57_","gr66_"],
|
||||
["gr51_","gr53_","gr52_","gr54_","gr55_","gr52_","gr56_","gr61_","gr50_","gr51_","gr54_","gr56_","gr55_","gr56_","gr52_","gr55_","gr53_","gr24-","rc17_","rc18_","gr26_","gr54_","gr62_","gr72_","gr55_","gr52_","gr56_","gr52_","gr53_","gr63_","gr55_","gr51_","gr49_","gr56_","gr51_","gr55_","gr54_","gr52_","gr49_","gr55_","gr59_","gr49_","gr50_","gr53_","gr51_","gr52_","gr51_","gr55_","gr54_","gr54_","gr54_","gr54_","gr55_","gr67_","gr56_","gr50_","gr52_","gr50_","gr50_","gr51_","gr65_","gr56_","gr56_","gr50_","gr62_","gr53_","gr53_","gr54_","gr68_","gr61_","gr53_","gr63_","gr51_","gr56_","gr57_","gr55_","gr55_","gr58_","gr54_","gr52_","gr55_","gr52_","gr54_","gr71_","gr53_","gr49_","gr54_","gr56_","gr56_","gr50_","gr71_","gr56_","gr53_","gr58_","gr53_","gr53_","gr50_","gr51_","gr51_","gr66_","gr49_","gr63_","gr52_","gr68_","gr51_","gr56_","gr51_","gr54_","gr51_","gr49_","gr53_","gr54_","gr54_","gr50_","gr50_","gr54_","gr50_","gr72_","gr55_","gr52_","gr52_","gr66_","gr55_","gr50_","gr56_","gr61_","gr53_","gr54_","gr53_","gr50_","gr51_","gr51_","gr54_","gr51_","gr55_","gr71_","gr50_","gr49_","gr57_","gr67_","gr53_","gr49_","gr54_","gr54_"],
|
||||
["gr53_","gr50_","gr72_","gr50_","gr54_","gr56_","gr52_","gr53_","gr54_","gr68_","gr50_","gr49_","gr50_","gr50_","gr56_","gr69_","gr71_","gr26-","rc17_","rc18_","gr25_","gr64_","gr53_","gr54_","gr49_","gr60_","gr58_","gr53_","gr55_","gr50_","gr51_","gr51_","gr51_","gr58_","gr58_","gr51_","gr49_","gr66_","gr51_","gr51_","gr72_","gr55_","gr72_","gr53_","gr51_","gr64_","gr55_","gr56_","gr57_","gr51_","gr63_","gr61_","gr53_","gr54_","gr54_","gr51_","gr54_","gr55_","gr70_","gr52_","gr56_","gr52_","gr67_","gr53_","gr49_","gr52_","gr55_","gr49_","gr52_","gr52_","gr54_","gr54_","gr50_","gr60_","gr50_","gr55_","gr52_","gr55_","gr56_","gr57_","gr50_","gr54_","gr49_","gr70_","gr55_","gr69_","gr51_","gr53_","gr59_","gr68_","gr53_","gr56_","gr64_","gr56_","gr54_","gr52_","gr53_","gr56_","gr55_","gr53_","gr54_","gr56_","gr52_","gr55_","gr50_","gr49_","gr55_","gr54_","gr52_","gr55_","gr53_","gr55_","gr50_","gr50_","gr55_","gr52_","gr57_","gr54_","gr50_","gr53_","gr71_","gr51_","gr56_","gr49_","gr55_","gr53_","gr53_","gr65_","gr57_","gr52_","gr50_","gr54_","gr55_","gr54_","gr53_","gr53_","gr50_","gr72_","gr55_","gr50_","gr51_","gr49_","gr53_","gr50_"],
|
||||
["gr50_","gr55_","gr56_","gr56_","gr50_","gr56_","gr69_","gr49_","gr50_","gr50_","gr54_","gr56_","gr54_","gr51_","gr54_","gr51_","gr52_","gr27-","rc16_","rc18_","gr27_","gr52_","gr66_","gr56_","gr49_","gr56_","gr51_","gr59_","gr49_","gr52_","gr49_","gr51_","gr56_","gr54_","gr52_","gr49_","gr50_","gr51_","gr51_","gr51_","gr53_","gr51_","gr71_","gr52_","gr52_","gr50_","gr51_","gr50_","gr54_","gr49_","gr51_","gr55_","gr64_","gr52_","gr50_","gr49_","gr55_","gr58_","gr50_","gr50_","gr55_","gr56_","gr55_","gr49_","gr54_","gr53_","gr52_","gr54_","gr49_","gr55_","gr53_","gr58_","gr54_","gr69_","gr51_","gr53_","gr49_","gr51_","gr52_","gr54_","gr56_","gr50_","gr56_","gr55_","gr55_","gr53_","gr53_","gr55_","gr52_","gr53_","gr60_","gr54_","gr51_","gr53_","gr57_","gr52_","gr52_","gr54_","gr55_","gr50_","gr56_","gr69_","gr50_","gr54_","gr64_","gr64_","gr51_","gr68_","gr53_","gr61_","gr55_","gr56_","gr49_","gr67_","gr56_","gr53_","gr53_","gr55_","gr67_","gr66_","gr49_","gr56_","gr65_","gr55_","gr63_","gr52_","gr54_","gr52_","gr64_","gr49_","gr53_","gr50_","gr62_","gr68_","gr66_","gr56_","gr56_","gr53_","gr54_","gr56_","gr65_","gr56_","gr54_","gr55_"],
|
||||
["gr49_","gr54_","gr52_","gr72_","gr50_","gr51_","gr53_","gr58_","gr53_","gr54_","gr65_","gr53_","gr51_","gr51_","gr55_","gr49_","gr52_","gr24-","rc16_","rc19_","gr25_","gr52_","gr53_","gr55_","gr55_","gr51_","gr52_","gr49_","gr68_","gr53_","gr56_","gr51_","gr56_","gr50_","gr51_","gr65_","gr55_","gr55_","gr50_","gr55_","gr56_","gr52_","gr53_","gr49_","gr53_","gr52_","gr50_","gr60_","gr55_","gr49_","gr67_","gr51_","gr55_","gr61_","gr51_","gr51_","gr54_","gr50_","gr53_","gr55_","gr70_","gr50_","gr53_","gr52_","gr55_","gr56_","gr53_","gr54_","gr51_","gr53_","gr50_","gr50_","gr50_","gr52_","gr52_","gr50_","gr63_","gr55_","gr49_","gr60_","gr49_","gr71_","gr50_","gr51_","gr51_","gr56_","gr53_","gr52_","gr52_","gr50_","gr50_","gr50_","gr56_","gr49_","gr70_","gr51_","gr53_","gr54_","gr51_","gr49_","gr62_","gr53_","gr53_","gr50_","gr52_","gr53_","gr70_","gr64_","gr56_","gr50_","gr51_","gr49_","gr50_","gr62_","gr53_","gr56_","gr54_","gr60_","gr50_","gr51_","gr49_","gr52_","gr66_","gr51_","gr56_","gr50_","gr50_","gr55_","gr58_","gr54_","gr51_","gr49_","gr49_","gr53_","gr52_","gr55_","gr53_","gr55_","gr52_","gr51_","gr56_","gr55_","gr57_","gr52_"],
|
||||
["gr51_","gr54_","gr52_","gr51_","gr64_","gr49_","gr66_","gr55_","gr54_","gr54_","gr53_","gr57_","gr56_","gr51_","gr49_","gr56_","gr62_","gr24-","rc16_","rc18_","gr26_","gr55_","gr53_","gr58_","gr53_","gr50_","gr52_","gr52_","gr56_","gr53_","gr65_","gr52_","gr51_","gr56_","gr69_","gr51_","gr49_","gr63_","gr54_","gr56_","gr50_","gr50_","gr51_","gr52_","gr56_","gr54_","gr51_","gr55_","gr50_","gr50_","gr54_","gr57_","gr68_","gr66_","gr50_","gr49_","gr60_","gr55_","gr56_","gr50_","gr55_","gr61_","gr53_","gr49_","gr50_","gr51_","gr66_","gr56_","gr50_","gr63_","gr60_","gr54_","gr53_","gr56_","gr53_","gr53_","gr54_","gr58_","gr56_","gr66_","gr53_","gr53_","gr49_","gr49_","gr68_","gr62_","gr51_","gr54_","gr51_","gr61_","gr56_","gr53_","gr53_","gr53_","gr52_","gr51_","gr49_","gr71_","gr50_","gr51_","gr50_","gr56_","gr70_","gr50_","gr55_","gr54_","gr49_","gr50_","gr52_","gr55_","gr49_","gr51_","gr55_","gr50_","gr54_","gr62_","gr51_","gr52_","gr54_","gr72_","gr49_","gr52_","gr50_","gr53_","gr50_","gr55_","gr55_","gr67_","gr55_","gr53_","gr53_","gr50_","gr49_","gr58_","gr51_","gr50_","gr49_","gr54_","gr50_","gr69_","gr49_","gr61_","gr53_","gr65_"],
|
||||
["gr56_","gr56_","gr55_","gr64_","gr50_","gr66_","gr53_","gr56_","gr54_","gr52_","gr56_","gr51_","gr55_","gr50_","gr52_","gr55_","gr51_","gr24-","rc16_","rc18_","gr27_","gr53_","gr52_","gr49_","gr49_","gr55_","gr53_","gr54_","gr53_","gr53_","gr52_","gr53_","gr49_","gr55_","gr52_","gr56_","gr64_","gr50_","gr55_","gr53_","gr50_","gr54_","gr49_","gr70_","gr67_","gr54_","gr53_","gr49_","gr56_","gr52_","gr70_","gr49_","gr53_","gr50_","gr72_","gr52_","gr49_","gr49_","gr52_","gr51_","gr56_","gr54_","gr55_","gr53_","gr49_","gr56_","gr67_","gr52_","gr53_","gr52_","gr53_","gr55_","gr70_","gr49_","gr53_","gr62_","gr54_","gr52_","gr57_","gr49_","gr59_","gr53_","gr51_","gr49_","gr50_","gr56_","gr54_","gr52_","gr57_","gr53_","gr69_","gr54_","gr51_","gr64_","gr53_","gr51_","gr56_","gr50_","gr54_","gr54_","gr58_","gr54_","gr53_","gr54_","gr49_","gr53_","gr53_","gr51_","gr56_","gr51_","gr49_","gr53_","gr54_","gr55_","gr51_","gr53_","gr54_","gr55_","gr57_","gr50_","gr55_","gr66_","gr51_","gr54_","gr53_","gr52_","gr54_","gr54_","gr70_","gr53_","gr52_","gr54_","gr54_","gr50_","gr49_","gr58_","gr51_","gr50_","gr71_","gr54_","gr50_","gr51_","gr59_","gr55_"],
|
||||
["gr72_","gr51_","gr55_","gr55_","gr49_","gr55_","gr54_","gr53_","gr53_","gr56_","gr51_","gr51_","gr54_","gr56_","gr50_","gr55_","gr52_","gr27-","rc16_","rc19_","gr27_","gr55_","gr64_","gr52_","gr61_","gr49_","gr53_","gr70_","gr50_","gr52_","gr49_","gr54_","gr49_","gr56_","gr54_","gr55_","gr52_","gr49_","gr55_","gr70_","gr50_","gr55_","gr54_","gr54_","gr54_","gr54_","gr58_","gr52_","gr56_","gr55_","gr49_","gr52_","gr51_","gr53_","gr50_","gr51_","gr53_","gr49_","gr55_","gr51_","gr58_","gr55_","gr51_","gr50_","gr50_","gr54_","gr56_","gr59_","gr54_","gr52_","gr51_","gr51_","gr54_","gr64_","gr53_","gr53_","gr70_","gr53_","gr52_","gr55_","gr53_","gr54_","gr49_","gr51_","gr52_","gr53_","gr56_","gr55_","gr53_","gr50_","gr51_","gr53_","gr58_","gr51_","gr55_","gr52_","gr49_","gr54_","gr53_","gr53_","gr55_","gr56_","gr50_","gr54_","gr58_","gr49_","gr55_","gr50_","gr53_","gr54_","gr66_","gr55_","gr56_","gr54_","gr52_","gr63_","gr53_","gr69_","gr49_","gr49_","gr52_","gr53_","gr51_","gr61_","gr56_","gr56_","gr71_","gr51_","gr56_","gr54_","gr53_","gr52_","gr55_","gr61_","gr52_","gr54_","gr53_","gr68_","gr53_","gr53_","gr51_","gr56_","gr52_","gr53_"],
|
||||
["gr50_","gr32_","gr28|","gr28|","gr28|","gr29|","gr28|","gr30|","gr31|","gr29|","gr31|","gr28|","gr31|","gr29|","gr30|","gr29|","gr30|","gr21+","rc16_","rc19_","gr21|","gr28|","gr31|","gr31|","gr31|","gr29|","gr28|","gr29|","gr29|","gr30|","gr30|","gr29|","gr31|","gr29|","gr30|","gr31|","gr29|","gr28|","gr28|","gr29|","gr28|","gr28|","gr30|","gr29|","gr30|","gr31|","gr31|","gr34-","gr52_","gr52_","gr72_","gr49_","gr54_","gr52_","gr51_","gr54_","gr56_","gr62_","gr57_","gr49_","gr53_","gr55_","gr56_","gr55_","gr53_","gr54_","gr56_","gr52_","gr67_","gr55_","gr55_","gr52_","gr61_","gr51_","gr69_","gr51_","gr55_","gr54_","gr49_","gr54_","gr57_","gr72_","gr51_","gr56_","gr52_","gr53_","gr63_","gr54_","gr56_","gr53_","gr56_","gr51_","gr49_","gr52_","gr51_","gr53_","gr62_","gr51_","gr56_","gr53_","gr49_","gr69_","gr53_","gr51_","gr49_","gr51_","gr50_","gr64_","gr51_","gr56_","gr54_","gr66_","gr53_","gr54_","gr72_","gr52_","gr65_","gr55_","gr55_","gr51_","gr56_","gr61_","gr67_","gr50_","gr53_","gr51_","gr49_","gr55_","gr53_","gr49_","gr51_","gr52_","gr62_","gr52_","gr54_","gr71_","gr61_","gr51_","gr50_","gr50_","gr54_","gr60_","gr54_","gr51_"],
|
||||
["gr72_","gr27-","rc9_","rc21_","rc21_","rc21_","rc20_","rc21_","rc20_","rc21_","rc20_","rc21_","rc21_","rc21_","rc21_","rc21_","rc21_","rc21_","rc31_","rc29_","rc21_","rc21_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc21_","rc21_","rc20_","rc21_","rc20_","rc11_","gr24_","gr50_","gr50_","gr51_","gr57_","gr69_","gr54_","gr50_","gr54_","gr49_","gr49_","gr60_","gr53_","gr57_","gr54_","gr55_","gr69_","gr52_","gr55_","gr52_","gr55_","gr61_","gr54_","gr49_","gr50_","gr51_","gr61_","gr53_","gr55_","gr58_","gr54_","gr55_","gr62_","gr56_","gr68_","gr72_","gr55_","gr56_","gr49_","gr52_","gr49_","gr51_","gr53_","gr70_","gr55_","gr50_","gr53_","gr49_","gr54_","gr53_","gr49_","gr55_","gr72_","gr63_","gr69_","gr53_","gr52_","gr56_","gr58_","gr53_","gr52_","gr50_","gr58_","gr59_","gr53_","gr68_","gr63_","gr56_","gr50_","gr50_","gr53_","gr51_","gr58_","gr51_","gr51_","gr51_","gr54_","gr58_","gr54_","gr70_","gr68_","gr53_","gr53_","gr53_","gr54_","gr49_","gr62_","gr53_","gr51_","gr52_","gr56_","gr55_","gr61_","gr49_","gr55_","gr49_","gr50_"],
|
||||
["gr56_","gr24-","rc13_","rc23_","rc23_","rc22_","rc23_","rc23_","rc22_","rc23_","rc23_","rc23_","rc23_","rc22_","rc22_","rc23_","rc22_","rc23_","rc23_","rc23_","rc23_","rc23_","rc23_","rc23_","rc22_","rc23_","rc23_","rc22_","rc22_","rc23_","rc22_","rc23_","rc22_","rc23_","rc23_","rc22_","rc22_","rc22_","rc23_","rc22_","rc23_","rc22_","rc22_","rc23_","rc22_","rc23_","rc15_","gr26_","gr67_","gr49_","gr50_","gr50_","gr50_","gr51_","gr70_","gr50_","gr50_","gr56_","gr54_","gr56_","gr54_","gr69_","gr56_","gr51_","gr53_","gr49_","gr52_","gr53_","gr60_","gr56_","gr56_","gr52_","gr56_","gr51_","gr61_","gr50_","gr53_","gr54_","gr56_","gr53_","gr65_","gr49_","gr49_","gr56_","gr49_","gr55_","gr55_","gr49_","gr68_","gr50_","gr51_","gr49_","gr67_","gr53_","gr72_","gr55_","gr55_","gr49_","gr49_","gr53_","gr51_","gr65_","gr51_","gr65_","gr61_","gr54_","gr55_","gr54_","gr65_","gr51_","gr50_","gr64_","gr55_","gr50_","gr68_","gr51_","gr56_","gr53_","gr52_","gr53_","gr53_","gr54_","gr66_","gr56_","gr55_","gr55_","gr52_","gr49_","gr56_","gr51_","gr50_","gr51_","gr49_","gr51_","gr66_","gr52_","gr50_","gr50_","gr52_","gr55_","gr53_","gr50_","gr55_","gr49_"],
|
||||
["gr51_","gr32|","gr31_","gr30_","gr29_","gr30_","gr31_","gr29_","gr31_","gr29_","gr30_","gr28_","gr28_","gr31_","gr28_","gr29_","gr28_","gr29_","gr31_","gr29_","gr30_","gr28_","gr30_","gr29_","gr30_","gr29_","gr28_","gr30_","gr28_","gr29_","gr30_","gr28_","gr28_","gr31_","gr29_","gr31_","gr28_","gr31_","gr29_","gr28_","gr31_","gr31_","gr31_","gr30_","gr31_","gr29_","gr29_","gr32+","gr55_","gr50_","gr52_","gr54_","gr51_","gr60_","gr56_","gr50_","gr49_","gr53_","gr56_","gr49_","gr51_","gr51_","gr59_","gr49_","gr50_","gr52_","gr72_","gr52_","gr55_","gr53_","gr62_","gr66_","gr51_","gr55_","gr53_","gr67_","gr56_","gr53_","gr50_","gr61_","gr54_","gr55_","gr55_","gr52_","gr55_","gr50_","gr72_","gr53_","gr51_","gr53_","gr55_","gr50_","gr53_","gr53_","gr50_","gr49_","gr68_","gr50_","gr64_","gr53_","gr51_","gr56_","gr55_","gr51_","gr49_","gr55_","gr49_","gr70_","gr50_","gr68_","gr58_","gr52_","gr52_","gr62_","gr52_","gr55_","gr50_","gr49_","gr52_","gr69_","gr53_","gr54_","gr50_","gr56_","gr54_","gr49_","gr52_","gr54_","gr53_","gr49_","gr51_","gr50_","gr54_","gr52_","gr52_","gr50_","gr54_","gr65_","gr49_","gr55_","gr66_","gr60_","gr54_","gr72_"],
|
||||
["gr49_","gr53_","gr53_","gr55_","gr69_","gr49_","gr50_","gr50_","gr54_","gr56_","gr55_","gr51_","gr54_","gr53_","gr49_","gr57_","gr54_","gr50_","gr65_","gr53_","gr72_","gr49_","gr53_","gr53_","gr51_","gr52_","gr52_","gr53_","gr50_","gr53_","gr53_","gr49_","gr53_","gr54_","gr65_","gr52_","gr63_","gr59_","gr52_","gr52_","gr70_","gr51_","gr72_","gr52_","gr35_","gr28|","gr31|","gr32-","gr54_","gr52_","gr59_","gr53_","gr49_","gr63_","gr56_","gr55_","gr55_","gr56_","gr51_","gr56_","gr50_","gr56_","gr63_","gr55_","gr49_","gr49_","gr56_","gr63_","gr56_","gr70_","gr49_","gr52_","gr53_","gr56_","gr68_","gr50_","gr53_","gr51_","gr54_","gr54_","gr53_","gr54_","gr64_","gr50_","gr50_","gr55_","gr55_","gr53_","gr50_","gr53_","gr52_","gr49_","gr56_","gr52_","gr53_","gr51_","gr52_","gr68_","gr50_","gr62_","gr56_","gr50_","gr49_","gr49_","gr52_","gr62_","gr51_","gr53_","gr51_","gr51_","gr53_","gr56_","gr52_","gr51_","gr56_","gr60_","gr66_","gr56_","gr57_","gr56_","gr52_","gr51_","gr49_","gr54_","gr54_","gr57_","gr54_","gr52_","gr62_","gr49_","gr56_","gr52_","gr55_","gr72_","gr53_","gr51_","gr50_","gr53_","gr54_","gr53_","gr72_","gr53_","gr55_","gr55_"],
|
||||
["gr50_","gr72_","gr51_","gr60_","gr49_","gr50_","gr54_","gr49_","gr62_","gr51_","gr49_","gr57_","gr51_","gr56_","gr50_","gr50_","gr55_","gr55_","gr49_","gr54_","gr54_","gr63_","gr52_","gr51_","gr55_","gr54_","gr51_","gr51_","gr53_","gr56_","gr61_","gr52_","gr55_","gr55_","gr50_","gr49_","gr63_","gr54_","gr54_","gr55_","gr54_","gr68_","gr52_","gr65_","gr25-","rc8_","rc10_","gr27_","gr56_","gr55_","gr53_","gr53_","gr52_","gr55_","gr54_","gr63_","gr52_","gr55_","gr52_","gr54_","gr49_","gr53_","gr54_","gr54_","gr51_","gr55_","gr51_","gr59_","gr53_","gr50_","gr66_","gr51_","gr54_","gr55_","gr51_","gr63_","gr50_","gr56_","gr51_","gr54_","gr56_","gr55_","gr52_","gr50_","gr57_","gr56_","gr51_","gr49_","gr55_","gr50_","gr49_","gr54_","gr60_","gr50_","gr50_","gr53_","gr54_","gr56_","gr56_","gr51_","gr50_","gr56_","gr65_","gr51_","gr70_","gr50_","gr53_","gr50_","gr53_","gr50_","gr65_","gr52_","gr55_","gr49_","gr63_","gr52_","gr54_","gr58_","gr52_","gr49_","gr50_","gr70_","gr56_","gr51_","gr70_","gr49_","gr49_","gr58_","gr49_","gr59_","gr49_","gr55_","gr54_","gr55_","gr67_","gr49_","gr60_","gr55_","gr50_","gr50_","gr63_","gr54_","gr66_","gr55_"],
|
||||
["gr53_","gr52_","gr53_","gr52_","gr66_","gr54_","gr64_","gr61_","gr52_","gr60_","gr51_","gr54_","gr56_","gr57_","gr52_","gr52_","gr59_","gr54_","gr52_","gr49_","gr65_","gr56_","gr49_","gr52_","gr58_","gr53_","gr50_","gr71_","gr56_","gr51_","gr55_","gr72_","gr51_","gr57_","gr54_","gr56_","gr53_","gr51_","gr55_","gr55_","gr62_","gr50_","gr49_","gr54_","gr26-","rc16_","rc18_","gr26_","gr68_","gr51_","gr51_","gr72_","gr52_","gr65_","gr49_","gr53_","gr55_","gr52_","gr70_","gr49_","gr49_","gr49_","gr54_","gr53_","gr55_","gr62_","gr51_","gr50_","gr55_","gr57_","gr49_","gr54_","gr54_","gr50_","gr58_","gr51_","gr56_","gr53_","gr51_","gr55_","gr69_","gr50_","gr69_","gr53_","gr54_","gr52_","gr61_","gr58_","gr51_","gr53_","gr53_","gr49_","gr56_","gr56_","gr49_","gr56_","gr52_","gr53_","gr50_","gr57_","gr49_","gr49_","gr63_","gr66_","gr54_","gr68_","gr55_","gr53_","gr56_","gr49_","gr55_","gr49_","gr52_","gr49_","gr50_","gr70_","gr55_","gr56_","gr53_","gr61_","gr55_","gr55_","gr55_","gr62_","gr55_","gr56_","gr55_","gr56_","gr55_","gr53_","gr61_","gr53_","gr49_","gr50_","gr55_","gr51_","gr53_","gr54_","gr54_","gr69_","gr54_","gr70_","gr55_","gr55_"],
|
||||
["gr51_","gr66_","gr51_","gr53_","gr71_","gr54_","gr55_","gr53_","gr50_","gr58_","gr52_","gr64_","gr53_","gr50_","gr56_","gr54_","gr49_","gr55_","gr51_","gr71_","gr49_","gr52_","gr67_","gr50_","gr52_","gr50_","gr49_","gr50_","gr52_","gr52_","gr50_","gr51_","gr49_","gr52_","gr55_","gr58_","gr55_","gr52_","gr53_","gr50_","gr52_","gr54_","gr53_","gr56_","gr24-","rc17_","rc19_","gr27_","gr51_","gr49_","gr53_","gr54_","gr49_","gr55_","gr51_","gr62_","gr49_","gr55_","gr63_","gr52_","gr49_","gr60_","gr56_","gr53_","gr63_","gr55_","gr54_","gr51_","gr54_","gr52_","gr54_","gr69_","gr53_","gr67_","gr49_","gr53_","gr55_","gr49_","gr52_","gr64_","gr52_","gr53_","gr50_","gr58_","gr55_","gr60_","gr53_","gr55_","gr54_","gr53_","gr57_","gr51_","gr54_","gr61_","gr49_","gr59_","gr52_","gr59_","gr56_","gr50_","gr68_","gr53_","gr58_","gr53_","gr53_","gr50_","gr56_","gr55_","gr67_","gr54_","gr55_","gr53_","gr53_","gr50_","gr49_","gr51_","gr53_","gr49_","gr51_","gr54_","gr50_","gr68_","gr54_","gr56_","gr65_","gr55_","gr54_","gr63_","gr56_","gr49_","gr54_","gr70_","gr49_","gr64_","gr49_","gr50_","gr53_","gr50_","gr50_","gr54_","gr63_","gr53_","gr54_","gr56_"],
|
||||
["gr52_","gr56_","gr69_","gr50_","gr50_","gr56_","gr68_","gr49_","gr54_","gr69_","gr54_","gr49_","gr52_","gr58_","gr54_","gr56_","gr51_","gr56_","gr54_","gr55_","gr62_","gr51_","gr52_","gr52_","gr52_","gr68_","gr56_","gr50_","gr49_","gr69_","gr55_","gr55_","gr51_","gr56_","gr51_","gr53_","gr54_","gr49_","gr49_","gr50_","gr49_","gr55_","gr49_","gr49_","gr25-","rc17_","rc18_","gr24_","gr53_","gr56_","gr50_","gr61_","gr50_","gr56_","gr50_","gr52_","gr51_","gr54_","gr57_","gr52_","gr51_","gr54_","gr52_","gr52_","gr49_","gr49_","gr61_","gr62_","gr58_","gr50_","gr64_","gr49_","gr58_","gr50_","gr55_","gr53_","gr55_","gr52_","gr56_","gr50_","gr55_","gr50_","gr50_","gr49_","gr69_","gr54_","gr51_","gr65_","gr56_","gr50_","gr53_","gr51_","gr52_","gr49_","gr52_","gr54_","gr55_","gr51_","gr50_","gr61_","gr52_","gr53_","gr51_","gr52_","gr52_","gr54_","gr49_","gr55_","gr72_","gr59_","gr49_","gr50_","gr56_","gr69_","gr52_","gr58_","gr55_","gr54_","gr56_","gr59_","gr53_","gr63_","gr52_","gr55_","gr68_","gr52_","gr55_","gr54_","gr51_","gr54_","gr50_","gr56_","gr54_","gr49_","gr57_","gr53_","gr52_","gr52_","gr54_","gr61_","gr56_","gr52_","gr54_","gr49_"],
|
||||
["gr56_","gr49_","gr50_","gr72_","gr49_","gr70_","gr55_","gr50_","gr49_","gr53_","gr55_","gr49_","gr59_","gr49_","gr70_","gr50_","gr71_","gr51_","gr53_","gr57_","gr56_","gr54_","gr58_","gr51_","gr52_","gr59_","gr54_","gr66_","gr55_","gr69_","gr62_","gr52_","gr56_","gr62_","gr51_","gr59_","gr50_","gr56_","gr50_","gr71_","gr52_","gr53_","gr53_","gr56_","gr26-","rc17_","rc19_","gr27_","gr50_","gr49_","gr68_","gr55_","gr64_","gr53_","gr55_","gr62_","gr51_","gr67_","gr50_","gr51_","gr69_","gr56_","gr58_","gr52_","gr54_","gr60_","gr55_","gr68_","gr50_","gr67_","gr56_","gr49_","gr55_","gr54_","gr54_","gr52_","gr56_","gr55_","gr53_","gr68_","gr53_","gr56_","gr54_","gr50_","gr56_","gr52_","gr55_","gr54_","gr49_","gr60_","gr49_","gr50_","gr51_","gr68_","gr56_","gr58_","gr52_","gr52_","gr55_","gr50_","gr49_","gr56_","gr50_","gr72_","gr49_","gr64_","gr50_","gr69_","gr53_","gr56_","gr69_","gr56_","gr54_","gr56_","gr51_","gr51_","gr55_","gr53_","gr50_","gr52_","gr62_","gr55_","gr67_","gr53_","gr55_","gr50_","gr50_","gr53_","gr50_","gr53_","gr50_","gr69_","gr56_","gr53_","gr55_","gr52_","gr50_","gr59_","gr50_","gr51_","gr50_","gr66_","gr56_","gr58_"],
|
||||
["gr55_","gr66_","gr51_","gr49_","gr53_","gr56_","gr56_","gr71_","gr51_","gr51_","gr56_","gr55_","gr51_","gr56_","gr55_","gr61_","gr54_","gr55_","gr56_","gr54_","gr62_","gr52_","gr55_","gr62_","gr50_","gr71_","gr53_","gr55_","gr69_","gr53_","gr63_","gr56_","gr55_","gr53_","gr55_","gr52_","gr51_","gr67_","gr50_","gr55_","gr55_","gr64_","gr56_","gr53_","gr25-","rc17_","rc19_","gr25_","gr50_","gr51_","gr49_","gr51_","gr51_","gr52_","gr50_","gr52_","gr49_","gr53_","gr51_","gr56_","gr56_","gr49_","gr49_","gr69_","gr54_","gr49_","gr54_","gr52_","gr55_","gr56_","gr55_","gr53_","gr58_","gr55_","gr52_","gr49_","gr49_","gr49_","gr51_","gr54_","gr53_","gr71_","gr54_","gr62_","gr71_","gr54_","gr56_","gr56_","gr64_","gr52_","gr52_","gr54_","gr50_","gr55_","gr54_","gr54_","gr53_","gr54_","gr72_","gr50_","gr51_","gr54_","gr63_","gr55_","gr52_","gr54_","gr51_","gr49_","gr59_","gr51_","gr50_","gr54_","gr55_","gr53_","gr62_","gr54_","gr51_","gr72_","gr50_","gr50_","gr54_","gr53_","gr49_","gr50_","gr60_","gr54_","gr55_","gr53_","gr51_","gr69_","gr54_","gr53_","gr71_","gr53_","gr50_","gr55_","gr54_","gr55_","gr61_","gr56_","gr52_","gr55_","gr68_","gr51_"],
|
||||
["gr56_","gr53_","gr49_","gr52_","gr54_","gr52_","gr71_","gr56_","gr67_","gr54_","gr49_","gr51_","gr52_","gr54_","gr51_","gr57_","gr56_","gr53_","gr54_","gr69_","gr49_","gr54_","gr49_","gr53_","gr71_","gr49_","gr51_","gr51_","gr53_","gr68_","gr50_","gr54_","gr49_","gr61_","gr55_","gr55_","gr56_","gr49_","gr55_","gr68_","gr56_","gr49_","gr52_","gr49_","gr26-","rc17_","rc19_","gr25_","gr60_","gr54_","gr66_","gr50_","gr59_","gr55_","gr50_","gr63_","gr55_","gr69_","gr51_","gr52_","gr52_","gr50_","gr50_","gr53_","gr57_","gr55_","gr56_","gr54_","gr49_","gr56_","gr51_","gr61_","gr52_","gr53_","gr50_","gr52_","gr60_","gr50_","gr52_","gr72_","gr56_","gr56_","gr65_","gr52_","gr52_","gr50_","gr56_","gr71_","gr54_","gr57_","gr55_","gr49_","gr51_","gr49_","gr54_","gr50_","gr56_","gr66_","gr53_","gr60_","gr50_","gr63_","gr49_","gr52_","gr71_","gr66_","gr52_","gr52_","gr50_","gr54_","gr49_","gr68_","gr59_","gr52_","gr52_","gr60_","gr52_","gr55_","gr56_","gr52_","gr69_","gr55_","gr71_","gr53_","gr49_","gr58_","gr53_","gr53_","gr55_","gr62_","gr53_","gr62_","gr50_","gr56_","gr59_","gr55_","gr65_","gr49_","gr65_","gr50_","gr56_","gr51_","gr50_","gr53_"],
|
||||
["gr53_","gr49_","gr49_","gr57_","gr52_","gr52_","gr51_","gr54_","gr51_","gr70_","gr49_","gr53_","gr70_","gr52_","gr56_","gr52_","gr69_","gr59_","gr49_","gr54_","gr49_","gr50_","gr56_","gr56_","gr51_","gr49_","gr49_","gr53_","gr69_","gr50_","gr54_","gr51_","gr54_","gr55_","gr50_","gr52_","gr50_","gr51_","gr50_","gr53_","gr72_","gr55_","gr71_","gr50_","gr27-","rc17_","rc18_","gr25_","gr50_","gr50_","gr55_","gr51_","gr63_","gr54_","gr49_","gr54_","gr51_","gr50_","gr60_","gr53_","gr65_","gr50_","gr70_","gr54_","gr55_","gr54_","gr55_","gr51_","gr56_","gr51_","gr52_","gr58_","gr53_","gr49_","gr56_","gr69_","gr55_","gr67_","gr54_","gr67_","gr54_","gr50_","gr49_","gr53_","gr53_","gr50_","gr53_","gr49_","gr51_","gr52_","gr51_","gr51_","gr52_","gr59_","gr56_","gr55_","gr63_","gr55_","gr54_","gr56_","gr54_","gr52_","gr58_","gr52_","gr56_","gr51_","gr52_","gr61_","gr50_","gr72_","gr51_","gr50_","gr49_","gr51_","gr70_","gr52_","gr50_","gr56_","gr52_","gr50_","gr51_","gr55_","gr52_","gr54_","gr55_","gr53_","gr54_","gr53_","gr70_","gr56_","gr49_","gr50_","gr50_","gr55_","gr50_","gr51_","gr51_","gr56_","gr60_","gr51_","gr52_","gr71_","gr50_","gr55_"],
|
||||
["gr52_","gr62_","gr54_","gr49_","gr54_","gr55_","gr54_","gr56_","gr49_","gr52_","gr50_","gr61_","gr65_","gr56_","gr55_","gr56_","gr52_","gr52_","gr71_","gr49_","gr54_","gr51_","gr54_","gr64_","gr69_","gr53_","gr54_","gr53_","gr54_","gr55_","gr53_","gr56_","gr54_","gr50_","gr50_","gr51_","gr49_","gr56_","gr51_","gr51_","gr55_","gr50_","gr50_","gr51_","gr24-","rc17_","rc19_","gr24_","gr50_","gr72_","gr56_","gr54_","gr49_","gr56_","gr61_","gr49_","gr63_","gr60_","gr52_","gr53_","gr54_","gr49_","gr50_","gr63_","gr55_","gr55_","gr49_","gr50_","gr52_","gr57_","gr52_","gr51_","gr52_","gr50_","gr54_","gr53_","gr51_","gr59_","gr51_","gr54_","gr54_","gr54_","gr68_","gr56_","gr51_","gr54_","gr55_","gr56_","gr55_","gr52_","gr54_","gr50_","gr54_","gr51_","gr60_","gr52_","gr56_","gr53_","gr51_","gr55_","gr70_","gr52_","gr56_","gr49_","gr72_","gr50_","gr52_","gr53_","gr58_","gr50_","gr69_","gr49_","gr51_","gr68_","gr52_","gr55_","gr53_","gr53_","gr69_","gr53_","gr55_","gr53_","gr50_","gr53_","gr70_","gr63_","gr56_","gr69_","gr55_","gr52_","gr56_","gr56_","gr55_","gr49_","gr55_","gr52_","gr52_","gr52_","gr55_","gr50_","gr65_","gr50_","gr59_","gr49_"],
|
||||
["gr70_","gr52_","gr63_","gr51_","gr69_","gr54_","gr54_","gr54_","gr54_","gr55_","gr50_","gr52_","gr52_","gr52_","gr56_","gr52_","gr54_","gr61_","gr56_","gr55_","gr55_","gr62_","gr50_","gr52_","gr55_","gr55_","gr52_","gr52_","gr55_","gr52_","gr53_","gr54_","gr49_","gr54_","gr53_","gr53_","gr53_","gr64_","gr50_","gr53_","gr53_","gr51_","gr53_","gr49_","gr26-","rc16_","rc18_","gr24_","gr53_","gr55_","gr68_","gr51_","gr55_","gr61_","gr55_","gr57_","gr65_","gr51_","gr52_","gr52_","gr53_","gr55_","gr49_","gr49_","gr50_","gr72_","gr54_","gr67_","gr53_","gr51_","gr49_","gr49_","gr58_","gr56_","gr51_","gr51_","gr63_","gr50_","gr49_","gr49_","gr66_","gr50_","gr51_","gr53_","gr54_","gr68_","gr56_","gr52_","gr50_","gr49_","gr72_","gr56_","gr65_","gr51_","gr49_","gr65_","gr51_","gr52_","gr51_","gr55_","gr51_","gr56_","gr52_","gr50_","gr55_","gr54_","gr52_","gr67_","gr52_","gr51_","gr58_","gr64_","gr55_","gr55_","gr54_","gr51_","gr60_","gr54_","gr52_","gr52_","gr51_","gr64_","gr55_","gr50_","gr53_","gr65_","gr52_","gr54_","gr52_","gr49_","gr59_","gr49_","gr65_","gr62_","gr50_","gr56_","gr52_","gr69_","gr49_","gr63_","gr55_","gr53_","gr55_","gr52_"],
|
||||
["gr67_","gr52_","gr51_","gr55_","gr65_","gr56_","gr52_","gr49_","gr50_","gr56_","gr50_","gr50_","gr57_","gr55_","gr58_","gr49_","gr51_","gr72_","gr54_","gr71_","gr70_","gr53_","gr51_","gr52_","gr63_","gr54_","gr49_","gr65_","gr66_","gr56_","gr55_","gr53_","gr54_","gr51_","gr68_","gr49_","gr70_","gr68_","gr55_","gr51_","gr49_","gr49_","gr55_","gr54_","gr27-","rc16_","rc19_","gr26_","gr50_","gr63_","gr53_","gr51_","gr50_","gr53_","gr71_","gr53_","gr50_","gr56_","gr52_","gr56_","gr52_","gr53_","gr50_","gr59_","gr56_","gr52_","gr64_","gr55_","gr50_","gr56_","gr52_","gr51_","gr56_","gr51_","gr56_","gr56_","gr53_","gr49_","gr56_","gr53_","gr56_","gr56_","gr54_","gr52_","gr54_","gr54_","gr55_","gr51_","gr59_","gr51_","gr51_","gr53_","gr53_","gr51_","gr56_","gr54_","gr50_","gr53_","gr55_","gr51_","gr53_","gr71_","gr54_","gr63_","gr53_","gr55_","gr52_","gr55_","gr54_","gr51_","gr49_","gr55_","gr70_","gr50_","gr59_","gr50_","gr56_","gr65_","gr50_","gr55_","gr53_","gr56_","gr53_","gr54_","gr54_","gr50_","gr50_","gr63_","gr51_","gr64_","gr50_","gr52_","gr55_","gr54_","gr50_","gr50_","gr50_","gr52_","gr52_","gr51_","gr54_","gr55_","gr52_","gr55_"],
|
||||
["gr50_","gr62_","gr59_","gr54_","gr50_","gr53_","gr56_","gr56_","gr53_","gr53_","gr50_","gr53_","gr54_","gr50_","gr55_","gr53_","gr51_","gr52_","gr56_","gr50_","gr49_","gr63_","gr50_","gr65_","gr54_","gr51_","gr54_","gr53_","gr53_","gr68_","gr50_","gr51_","gr70_","gr50_","gr71_","gr55_","gr52_","gr50_","gr49_","gr62_","gr53_","gr52_","gr50_","gr49_","gr27-","rc16_","rc19_","gr24_","gr51_","gr57_","gr49_","gr53_","gr50_","gr56_","gr53_","gr53_","gr49_","gr50_","gr52_","gr51_","gr52_","gr50_","gr52_","gr53_","gr49_","gr56_","gr53_","gr61_","gr52_","gr49_","gr54_","gr49_","gr52_","gr52_","gr53_","gr51_","gr67_","gr54_","gr58_","gr65_","gr49_","gr56_","gr53_","gr54_","gr50_","gr52_","gr51_","gr55_","gr52_","gr51_","gr53_","gr55_","gr50_","gr49_","gr49_","gr60_","gr52_","gr55_","gr55_","gr56_","gr52_","gr49_","gr53_","gr49_","gr50_","gr54_","gr52_","gr49_","gr57_","gr51_","gr49_","gr55_","gr55_","gr55_","gr53_","gr52_","gr65_","gr56_","gr52_","gr54_","gr54_","gr53_","gr50_","gr49_","gr55_","gr50_","gr49_","gr49_","gr53_","gr56_","gr53_","gr49_","gr67_","gr58_","gr56_","gr55_","gr55_","gr56_","gr54_","gr53_","gr53_","gr56_","gr51_","gr50_"],
|
||||
["gr53_","gr56_","gr55_","gr63_","gr56_","gr54_","gr49_","gr51_","gr55_","gr56_","gr49_","gr55_","gr52_","gr68_","gr53_","gr50_","gr62_","gr57_","gr53_","gr55_","gr65_","gr52_","gr55_","gr50_","gr68_","gr52_","gr51_","gr54_","gr49_","gr54_","gr56_","gr50_","gr49_","gr50_","gr69_","gr55_","gr54_","gr53_","gr49_","gr52_","gr55_","gr53_","gr68_","gr51_","gr26-","rc16_","rc18_","gr26_","gr54_","gr52_","gr57_","gr50_","gr55_","gr55_","gr56_","gr50_","gr56_","gr49_","gr60_","gr53_","gr53_","gr70_","gr56_","gr56_","gr61_","gr54_","gr55_","gr53_","gr59_","gr53_","gr52_","gr67_","gr54_","gr50_","gr50_","gr60_","gr50_","gr52_","gr54_","gr53_","gr53_","gr56_","gr72_","gr50_","gr51_","gr52_","gr53_","gr56_","gr67_","gr56_","gr56_","gr64_","gr55_","gr55_","gr60_","gr50_","gr72_","gr51_","gr51_","gr64_","gr55_","gr54_","gr67_","gr55_","gr61_","gr58_","gr52_","gr50_","gr52_","gr57_","gr51_","gr63_","gr52_","gr69_","gr50_","gr55_","gr71_","gr50_","gr53_","gr50_","gr53_","gr56_","gr63_","gr49_","gr49_","gr50_","gr51_","gr50_","gr50_","gr65_","gr51_","gr64_","gr51_","gr49_","gr52_","gr57_","gr51_","gr66_","gr56_","gr54_","gr62_","gr56_","gr51_","gr61_"],
|
||||
["gr58_","gr52_","gr55_","gr50_","gr51_","gr49_","gr49_","gr50_","gr55_","gr64_","gr49_","gr55_","gr50_","gr53_","gr53_","gr56_","gr52_","gr56_","gr54_","gr70_","gr54_","gr53_","gr49_","gr55_","gr49_","gr51_","gr56_","gr54_","gr70_","gr56_","gr55_","gr57_","gr55_","gr52_","gr56_","gr50_","gr53_","gr50_","gr55_","gr55_","gr56_","gr51_","gr54_","gr51_","gr26-","rc16_","rc18_","gr24_","gr52_","gr56_","gr60_","gr64_","gr56_","gr66_","gr50_","gr51_","gr53_","gr54_","gr51_","gr52_","gr54_","gr50_","gr54_","gr51_","gr51_","gr61_","gr52_","gr56_","gr55_","gr68_","gr49_","gr50_","gr56_","gr54_","gr55_","gr51_","gr50_","gr56_","gr59_","gr50_","gr60_","gr50_","gr54_","gr64_","gr49_","gr64_","gr61_","gr52_","gr49_","gr50_","gr50_","gr56_","gr54_","gr53_","gr56_","gr49_","gr55_","gr55_","gr51_","gr50_","gr56_","gr55_","gr54_","gr50_","gr55_","gr51_","gr59_","gr49_","gr49_","gr55_","gr55_","gr55_","gr59_","gr53_","gr59_","gr53_","gr50_","gr72_","gr52_","gr50_","gr60_","gr55_","gr51_","gr56_","gr52_","gr49_","gr54_","gr53_","gr50_","gr51_","gr61_","gr50_","gr56_","gr67_","gr54_","gr55_","gr54_","gr49_","gr50_","gr52_","gr55_","gr56_","gr54_","gr49_"],
|
||||
["gr50_","gr49_","gr51_","gr64_","gr50_","gr49_","gr62_","gr54_","gr62_","gr54_","gr56_","gr54_","gr50_","gr62_","gr55_","gr53_","gr52_","gr64_","gr51_","gr55_","gr56_","gr56_","gr50_","gr57_","gr52_","gr64_","gr53_","gr53_","gr52_","gr66_","gr56_","gr49_","gr64_","gr55_","gr54_","gr56_","gr49_","gr51_","gr51_","gr55_","gr56_","gr54_","gr56_","gr49_","gr27-","rc16_","rc18_","gr27_","gr53_","gr62_","gr52_","gr49_","gr70_","gr55_","gr49_","gr56_","gr49_","gr56_","gr66_","gr50_","gr49_","gr53_","gr54_","gr54_","gr69_","gr53_","gr53_","gr52_","gr63_","gr54_","gr51_","gr53_","gr56_","gr63_","gr52_","gr49_","gr51_","gr52_","gr50_","gr71_","gr54_","gr53_","gr56_","gr49_","gr52_","gr55_","gr51_","gr53_","gr54_","gr50_","gr51_","gr53_","gr61_","gr49_","gr55_","gr56_","gr49_","gr53_","gr62_","gr55_","gr69_","gr51_","gr55_","gr64_","gr56_","gr49_","gr50_","gr55_","gr54_","gr53_","gr53_","gr56_","gr54_","gr54_","gr56_","gr54_","gr50_","gr49_","gr56_","gr71_","gr49_","gr53_","gr56_","gr53_","gr72_","gr55_","gr67_","gr71_","gr52_","gr71_","gr51_","gr54_","gr50_","gr49_","gr54_","gr49_","gr56_","gr53_","gr52_","gr57_","gr49_","gr55_","gr58_","gr54_"],
|
||||
["gr53_","gr56_","gr50_","gr56_","gr54_","gr51_","gr49_","gr54_","gr52_","gr49_","gr55_","gr51_","gr50_","gr70_","gr50_","gr51_","gr55_","gr49_","gr52_","gr51_","gr54_","gr56_","gr56_","gr55_","gr54_","gr49_","gr57_","gr49_","gr51_","gr50_","gr59_","gr49_","gr51_","gr51_","gr56_","gr71_","gr58_","gr55_","gr53_","gr51_","gr62_","gr54_","gr50_","gr69_","gr27-","rc16_","rc18_","gr26_","gr49_","gr53_","gr55_","gr53_","gr49_","gr64_","gr54_","gr50_","gr68_","gr56_","gr49_","gr63_","gr52_","gr55_","gr56_","gr49_","gr65_","gr71_","gr49_","gr60_","gr53_","gr68_","gr52_","gr60_","gr56_","gr53_","gr56_","gr53_","gr52_","gr55_","gr67_","gr52_","gr58_","gr50_","gr54_","gr60_","gr52_","gr50_","gr54_","gr50_","gr49_","gr55_","gr53_","gr49_","gr53_","gr53_","gr71_","gr55_","gr54_","gr61_","gr54_","gr53_","gr63_","gr50_","gr54_","gr51_","gr56_","gr53_","gr49_","gr50_","gr53_","gr50_","gr52_","gr49_","gr51_","gr56_","gr56_","gr64_","gr70_","gr53_","gr66_","gr56_","gr53_","gr55_","gr52_","gr49_","gr52_","gr52_","gr50_","gr50_","gr50_","gr52_","gr53_","gr53_","gr65_","gr50_","gr52_","gr55_","gr56_","gr54_","gr54_","gr53_","gr52_","gr61_","gr56_","gr50_"],
|
||||
["gr50_","gr56_","gr53_","gr58_","gr55_","gr65_","gr66_","gr51_","gr49_","gr49_","gr54_","gr70_","gr51_","gr53_","gr56_","gr50_","gr69_","gr52_","gr56_","gr49_","gr65_","gr50_","gr60_","gr49_","gr55_","gr49_","gr53_","gr52_","gr50_","gr50_","gr56_","gr49_","gr49_","gr56_","gr70_","gr49_","gr55_","gr54_","gr52_","gr51_","gr52_","gr52_","gr59_","gr56_","gr26-","rc16_","rc18_","gr27_","gr56_","gr53_","gr55_","gr66_","gr49_","gr52_","gr49_","gr56_","gr54_","gr52_","gr72_","gr49_","gr64_","gr49_","gr51_","gr53_","gr56_","gr50_","gr50_","gr53_","gr55_","gr53_","gr58_","gr56_","gr70_","gr56_","gr68_","gr55_","gr55_","gr49_","gr54_","gr50_","gr49_","gr56_","gr56_","gr49_","gr49_","gr56_","gr56_","gr52_","gr51_","gr49_","gr55_","gr67_","gr69_","gr56_","gr49_","gr62_","gr53_","gr54_","gr49_","gr71_","gr54_","gr69_","gr51_","gr51_","gr55_","gr54_","gr56_","gr52_","gr60_","gr54_","gr53_","gr50_","gr50_","gr60_","gr53_","gr53_","gr55_","gr52_","gr50_","gr61_","gr56_","gr71_","gr56_","gr51_","gr50_","gr57_","gr51_","gr53_","gr58_","gr50_","gr59_","gr53_","gr68_","gr54_","gr55_","gr58_","gr56_","gr53_","gr55_","gr54_","gr55_","gr51_","gr56_","gr63_"],
|
||||
["gr51_","gr57_","gr53_","gr63_","gr53_","gr50_","gr64_","gr51_","gr69_","gr71_","gr53_","gr55_","gr53_","gr51_","gr55_","gr56_","gr54_","gr72_","gr49_","gr49_","gr49_","gr56_","gr54_","gr63_","gr55_","gr53_","gr49_","gr69_","gr51_","gr50_","gr71_","gr49_","gr50_","gr55_","gr56_","gr53_","gr58_","gr49_","gr49_","gr55_","gr64_","gr55_","gr53_","gr49_","gr26-","rc17_","rc19_","gr26_","gr57_","gr55_","gr49_","gr50_","gr54_","gr52_","gr49_","gr50_","gr54_","gr54_","gr71_","gr50_","gr53_","gr50_","gr56_","gr49_","gr49_","gr55_","gr62_","gr49_","gr70_","gr49_","gr54_","gr56_","gr51_","gr49_","gr56_","gr64_","gr50_","gr51_","gr66_","gr56_","gr51_","gr55_","gr54_","gr65_","gr50_","gr65_","gr55_","gr49_","gr53_","gr65_","gr56_","gr68_","gr55_","gr51_","gr53_","gr70_","gr55_","gr55_","gr56_","gr50_","gr50_","gr51_","gr53_","gr70_","gr53_","gr52_","gr54_","gr69_","gr51_","gr49_","gr49_","gr67_","gr53_","gr56_","gr53_","gr52_","gr53_","gr55_","gr56_","gr54_","gr50_","gr52_","gr52_","gr51_","gr56_","gr53_","gr53_","gr56_","gr53_","gr58_","gr53_","gr56_","gr52_","gr53_","gr56_","gr50_","gr54_","gr65_","gr56_","gr62_","gr52_","gr72_","gr50_","gr52_"],
|
||||
["gr54_","gr51_","gr63_","gr53_","gr63_","gr54_","gr53_","gr56_","gr55_","gr49_","gr51_","gr55_","gr56_","gr49_","gr56_","gr71_","gr49_","gr53_","gr69_","gr52_","gr54_","gr49_","gr54_","gr50_","gr54_","gr54_","gr53_","gr53_","gr52_","gr56_","gr55_","gr50_","gr62_","gr55_","gr53_","gr52_","gr57_","gr55_","gr52_","gr56_","gr51_","gr56_","gr62_","gr56_","gr24-","rc16_","rc19_","gr25_","gr53_","gr50_","gr72_","gr53_","gr64_","gr55_","gr55_","gr56_","gr54_","gr53_","gr61_","gr49_","gr67_","gr50_","gr63_","gr69_","gr54_","gr52_","gr54_","gr55_","gr50_","gr65_","gr55_","gr68_","gr54_","gr55_","gr60_","gr55_","gr54_","gr52_","gr49_","gr54_","gr72_","gr55_","gr55_","gr51_","gr56_","gr69_","gr52_","gr51_","gr53_","gr54_","gr49_","gr51_","gr49_","gr61_","gr51_","gr70_","gr53_","gr67_","gr51_","gr56_","gr50_","gr52_","gr54_","gr54_","gr49_","gr56_","gr53_","gr51_","gr52_","gr52_","gr54_","gr53_","gr51_","gr55_","gr65_","gr54_","gr64_","gr53_","gr52_","gr52_","gr51_","gr55_","gr56_","gr57_","gr63_","gr49_","gr49_","gr52_","gr50_","gr51_","gr50_","gr54_","gr65_","gr56_","gr55_","gr69_","gr51_","gr50_","gr49_","gr52_","gr49_","gr52_","gr54_","gr49_"],
|
||||
["gr68_","gr55_","gr54_","gr55_","gr71_","gr54_","gr55_","gr50_","gr56_","gr58_","gr50_","gr53_","gr51_","gr54_","gr51_","gr55_","gr56_","gr52_","gr53_","gr49_","gr56_","gr54_","gr52_","gr49_","gr52_","gr53_","gr49_","gr51_","gr54_","gr54_","gr49_","gr59_","gr53_","gr56_","gr54_","gr60_","gr53_","gr56_","gr53_","gr53_","gr61_","gr54_","gr55_","gr70_","gr24-","rc16_","rc19_","gr25_","gr52_","gr70_","gr51_","gr49_","gr54_","gr53_","gr52_","gr51_","gr68_","gr50_","gr52_","gr63_","gr49_","gr65_","gr56_","gr50_","gr61_","gr59_","gr50_","gr55_","gr51_","gr52_","gr55_","gr53_","gr49_","gr51_","gr55_","gr52_","gr51_","gr53_","gr49_","gr52_","gr56_","gr49_","gr52_","gr63_","gr51_","gr53_","gr55_","gr50_","gr51_","gr56_","gr50_","gr56_","gr60_","gr54_","gr50_","gr54_","gr52_","gr55_","gr57_","gr72_","gr55_","gr56_","gr52_","gr50_","gr52_","gr49_","gr59_","gr56_","gr53_","gr54_","gr52_","gr55_","gr51_","gr54_","gr49_","gr50_","gr71_","gr54_","gr69_","gr54_","gr50_","gr55_","gr51_","gr54_","gr54_","gr52_","gr55_","gr64_","gr51_","gr53_","gr51_","gr53_","gr51_","gr54_","gr52_","gr53_","gr54_","gr49_","gr50_","gr49_","gr55_","gr56_","gr67_","gr63_"],
|
||||
["gr53_","gr52_","gr49_","gr58_","gr51_","gr49_","gr55_","gr55_","gr56_","gr55_","gr56_","gr49_","gr56_","gr51_","gr56_","gr70_","gr49_","gr51_","gr49_","gr56_","gr55_","gr54_","gr71_","gr53_","gr56_","gr50_","gr52_","gr55_","gr56_","gr51_","gr53_","gr53_","gr55_","gr51_","gr52_","gr55_","gr54_","gr53_","gr52_","gr54_","gr54_","gr49_","gr64_","gr50_","gr25-","rc17_","rc19_","gr24_","gr54_","gr51_","gr65_","gr56_","gr49_","gr54_","gr70_","gr50_","gr57_","gr68_","gr50_","gr50_","gr49_","gr64_","gr51_","gr55_","gr55_","gr52_","gr50_","gr58_","gr56_","gr58_","gr52_","gr50_","gr50_","gr51_","gr51_","gr56_","gr64_","gr52_","gr67_","gr51_","gr50_","gr68_","gr53_","gr53_","gr67_","gr56_","gr72_","gr53_","gr49_","gr55_","gr51_","gr51_","gr56_","gr54_","gr51_","gr55_","gr55_","gr53_","gr51_","gr50_","gr49_","gr56_","gr56_","gr51_","gr54_","gr55_","gr49_","gr51_","gr56_","gr55_","gr53_","gr50_","gr54_","gr71_","gr68_","gr56_","gr52_","gr51_","gr53_","gr52_","gr56_","gr52_","gr55_","gr49_","gr71_","gr54_","gr63_","gr52_","gr54_","gr56_","gr56_","gr63_","gr50_","gr56_","gr70_","gr65_","gr49_","gr53_","gr51_","gr52_","gr62_","gr51_","gr51_","gr53_"],
|
||||
["gr57_","gr50_","gr55_","gr56_","gr52_","gr55_","gr69_","gr49_","gr71_","gr50_","gr54_","gr60_","gr53_","gr70_","gr63_","gr54_","gr53_","gr69_","gr56_","gr50_","gr50_","gr49_","gr56_","gr69_","gr51_","gr51_","gr64_","gr50_","gr60_","gr56_","gr51_","gr62_","gr51_","gr55_","gr53_","gr53_","gr68_","gr53_","gr56_","gr68_","gr53_","gr49_","gr56_","gr68_","gr24-","rc16_","rc19_","gr27_","gr51_","gr50_","gr52_","gr57_","gr49_","gr51_","gr53_","gr70_","gr53_","gr59_","gr56_","gr53_","gr49_","gr54_","gr55_","gr52_","gr52_","gr53_","gr53_","gr55_","gr66_","gr52_","gr55_","gr51_","gr58_","gr49_","gr54_","gr50_","gr55_","gr67_","gr71_","gr50_","gr56_","gr49_","gr50_","gr54_","gr55_","gr70_","gr54_","gr52_","gr69_","gr52_","gr51_","gr53_","gr53_","gr54_","gr55_","gr72_","gr61_","gr53_","gr50_","gr55_","gr64_","gr60_","gr49_","gr64_","gr55_","gr51_","gr55_","gr53_","gr51_","gr55_","gr63_","gr52_","gr52_","gr49_","gr52_","gr72_","gr53_","gr59_","gr50_","gr55_","gr54_","gr54_","gr50_","gr50_","gr56_","gr55_","gr49_","gr56_","gr61_","gr53_","gr49_","gr52_","gr54_","gr53_","gr55_","gr50_","gr50_","gr70_","gr51_","gr53_","gr54_","gr53_","gr60_","gr52_"],
|
||||
["gr55_","gr50_","gr49_","gr56_","gr50_","gr57_","gr49_","gr56_","gr53_","gr50_","gr52_","gr53_","gr51_","gr49_","gr55_","gr54_","gr68_","gr55_","gr52_","gr54_","gr50_","gr55_","gr63_","gr49_","gr53_","gr50_","gr51_","gr50_","gr56_","gr52_","gr59_","gr56_","gr50_","gr52_","gr65_","gr53_","gr54_","gr64_","gr51_","gr53_","gr51_","gr55_","gr49_","gr53_","gr25-","rc16_","rc18_","gr25_","gr66_","gr50_","gr58_","gr69_","gr70_","gr51_","gr51_","gr53_","gr55_","gr64_","gr53_","gr53_","gr50_","gr52_","gr54_","gr58_","gr52_","gr56_","gr53_","gr55_","gr49_","gr56_","gr56_","gr49_","gr49_","gr53_","gr49_","gr50_","gr54_","gr49_","gr52_","gr50_","gr72_","gr55_","gr51_","gr49_","gr49_","gr56_","gr58_","gr55_","gr49_","gr62_","gr51_","gr53_","gr50_","gr53_","gr51_","gr49_","gr69_","gr53_","gr68_","gr70_","gr52_","gr50_","gr49_","gr49_","gr54_","gr68_","gr53_","gr53_","gr55_","gr63_","gr52_","gr64_","gr53_","gr52_","gr71_","gr51_","gr51_","gr54_","gr53_","gr54_","gr49_","gr62_","gr53_","gr66_","gr51_","gr56_","gr53_","gr53_","gr54_","gr51_","gr54_","gr50_","gr54_","gr53_","gr53_","gr54_","gr50_","gr53_","gr51_","gr69_","gr62_","gr55_","gr54_","gr50_"],
|
||||
["gr57_","gr51_","gr55_","gr58_","gr53_","gr54_","gr50_","gr50_","gr57_","gr55_","gr49_","gr52_","gr50_","gr52_","gr49_","gr55_","gr53_","gr51_","gr51_","gr52_","gr63_","gr49_","gr52_","gr57_","gr62_","gr70_","gr54_","gr50_","gr53_","gr55_","gr52_","gr51_","gr52_","gr67_","gr50_","gr55_","gr53_","gr55_","gr51_","gr52_","gr56_","gr50_","gr49_","gr52_","gr26-","rc16_","rc18_","gr25_","gr52_","gr68_","gr52_","gr51_","gr55_","gr54_","gr55_","gr65_","gr49_","gr49_","gr51_","gr68_","gr51_","gr49_","gr54_","gr56_","gr55_","gr68_","gr56_","gr56_","gr69_","gr57_","gr55_","gr50_","gr63_","gr53_","gr60_","gr49_","gr62_","gr55_","gr52_","gr50_","gr51_","gr62_","gr55_","gr71_","gr55_","gr53_","gr52_","gr55_","gr51_","gr54_","gr52_","gr51_","gr65_","gr52_","gr50_","gr59_","gr56_","gr55_","gr49_","gr55_","gr53_","gr52_","gr54_","gr54_","gr53_","gr50_","gr50_","gr51_","gr51_","gr55_","gr50_","gr51_","gr56_","gr49_","gr54_","gr56_","gr54_","gr69_","gr53_","gr49_","gr52_","gr51_","gr55_","gr56_","gr54_","gr56_","gr50_","gr51_","gr50_","gr51_","gr70_","gr51_","gr51_","gr72_","gr49_","gr72_","gr49_","gr65_","gr52_","gr50_","gr56_","gr55_","gr59_","gr49_"],
|
||||
["gr53_","gr53_","gr49_","gr55_","gr60_","gr54_","gr49_","gr49_","gr69_","gr50_","gr55_","gr66_","gr49_","gr53_","gr53_","gr56_","gr50_","gr56_","gr54_","gr52_","gr49_","gr70_","gr55_","gr54_","gr62_","gr56_","gr56_","gr55_","gr51_","gr50_","gr56_","gr53_","gr57_","gr51_","gr54_","gr59_","gr65_","gr64_","gr49_","gr54_","gr52_","gr66_","gr49_","gr49_","gr24-","rc17_","rc19_","gr25_","gr49_","gr70_","gr49_","gr51_","gr54_","gr61_","gr56_","gr50_","gr49_","gr65_","gr56_","gr65_","gr54_","gr69_","gr56_","gr54_","gr52_","gr50_","gr55_","gr52_","gr54_","gr52_","gr52_","gr49_","gr51_","gr51_","gr54_","gr54_","gr55_","gr52_","gr53_","gr50_","gr56_","gr62_","gr56_","gr55_","gr50_","gr53_","gr68_","gr51_","gr52_","gr59_","gr52_","gr56_","gr56_","gr49_","gr59_","gr53_","gr54_","gr50_","gr51_","gr67_","gr50_","gr49_","gr50_","gr56_","gr50_","gr70_","gr55_","gr55_","gr49_","gr69_","gr50_","gr55_","gr54_","gr55_","gr49_","gr56_","gr70_","gr55_","gr68_","gr49_","gr54_","gr70_","gr50_","gr52_","gr65_","gr55_","gr49_","gr72_","gr56_","gr68_","gr50_","gr54_","gr53_","gr55_","gr59_","gr53_","gr55_","gr66_","gr51_","gr54_","gr50_","gr56_","gr50_","gr49_"],
|
||||
["gr68_","gr49_","gr54_","gr70_","gr56_","gr50_","gr55_","gr52_","gr55_","gr50_","gr52_","gr54_","gr58_","gr54_","gr51_","gr49_","gr49_","gr54_","gr53_","gr55_","gr55_","gr55_","gr55_","gr55_","gr52_","gr55_","gr51_","gr51_","gr66_","gr51_","gr53_","gr56_","gr56_","gr60_","gr54_","gr50_","gr58_","gr54_","gr53_","gr53_","gr55_","gr56_","gr57_","gr53_","gr27-","rc16_","rc18_","gr24_","gr49_","gr50_","gr51_","gr69_","gr49_","gr55_","gr55_","gr54_","gr64_","gr53_","gr53_","gr52_","gr49_","gr56_","gr67_","gr61_","gr52_","gr49_","gr50_","gr50_","gr52_","gr51_","gr54_","gr51_","gr55_","gr55_","gr57_","gr49_","gr57_","gr56_","gr72_","gr50_","gr57_","gr56_","gr60_","gr49_","gr66_","gr49_","gr50_","gr51_","gr51_","gr53_","gr51_","gr59_","gr56_","gr54_","gr53_","gr55_","gr55_","gr55_","gr49_","gr72_","gr52_","gr49_","gr67_","gr54_","gr54_","gr55_","gr68_","gr50_","gr55_","gr51_","gr51_","gr51_","gr56_","gr54_","gr64_","gr49_","gr66_","gr52_","gr56_","gr53_","gr54_","gr53_","gr52_","gr63_","gr54_","gr54_","gr50_","gr54_","gr50_","gr54_","gr50_","gr68_","gr52_","gr49_","gr50_","gr71_","gr52_","gr64_","gr51_","gr49_","gr53_","gr71_","gr50_","gr56_"],
|
||||
["gr54_","gr54_","gr56_","gr55_","gr49_","gr49_","gr50_","gr52_","gr56_","gr55_","gr49_","gr56_","gr51_","gr55_","gr50_","gr50_","gr51_","gr54_","gr56_","gr52_","gr51_","gr50_","gr53_","gr52_","gr49_","gr67_","gr53_","gr53_","gr49_","gr52_","gr60_","gr51_","gr51_","gr55_","gr50_","gr51_","gr56_","gr54_","gr70_","gr56_","gr49_","gr67_","gr56_","gr71_","gr26-","rc17_","rc19_","gr25_","gr52_","gr56_","gr56_","gr50_","gr49_","gr60_","gr52_","gr63_","gr54_","gr55_","gr50_","gr54_","gr54_","gr59_","gr49_","gr68_","gr55_","gr49_","gr56_","gr51_","gr62_","gr53_","gr62_","gr50_","gr49_","gr71_","gr51_","gr50_","gr51_","gr60_","gr53_","gr51_","gr52_","gr51_","gr52_","gr69_","gr55_","gr56_","gr53_","gr56_","gr66_","gr52_","gr67_","gr52_","gr49_","gr51_","gr49_","gr49_","gr51_","gr52_","gr50_","gr49_","gr59_","gr53_","gr49_","gr49_","gr56_","gr53_","gr49_","gr51_","gr54_","gr56_","gr55_","gr55_","gr51_","gr63_","gr59_","gr69_","gr51_","gr53_","gr50_","gr61_","gr53_","gr66_","gr71_","gr56_","gr51_","gr52_","gr61_","gr60_","gr54_","gr49_","gr62_","gr52_","gr55_","gr55_","gr56_","gr53_","gr55_","gr52_","gr51_","gr50_","gr72_","gr54_","gr60_","gr56_"],
|
||||
["gr50_","gr52_","gr69_","gr51_","gr63_","gr51_","gr50_","gr56_","gr55_","gr50_","gr54_","gr65_","gr53_","gr62_","gr52_","gr52_","gr56_","gr55_","gr54_","gr68_","gr51_","gr49_","gr50_","gr54_","gr53_","gr52_","gr55_","gr53_","gr66_","gr53_","gr52_","gr63_","gr56_","gr59_","gr50_","gr70_","gr51_","gr50_","gr54_","gr56_","gr49_","gr51_","gr56_","gr71_","gr27-","rc17_","rc18_","gr24_","gr50_","gr54_","gr57_","gr49_","gr54_","gr53_","gr63_","gr53_","gr51_","gr70_","gr55_","gr54_","gr51_","gr53_","gr56_","gr51_","gr53_","gr51_","gr59_","gr54_","gr53_","gr59_","gr52_","gr53_","gr50_","gr53_","gr53_","gr50_","gr71_","gr55_","gr51_","gr60_","gr50_","gr55_","gr71_","gr52_","gr56_","gr50_","gr71_","gr65_","gr55_","gr49_","gr50_","gr52_","gr66_","gr70_","gr55_","gr52_","gr57_","gr60_","gr55_","gr59_","gr55_","gr60_","gr54_","gr55_","gr50_","gr49_","gr54_","gr51_","gr70_","gr53_","gr52_","gr52_","gr50_","gr49_","gr49_","gr52_","gr49_","gr49_","gr66_","gr50_","gr51_","gr53_","gr49_","gr55_","gr50_","gr49_","gr50_","gr50_","gr53_","gr54_","gr54_","gr54_","gr56_","gr55_","gr51_","gr71_","gr50_","gr53_","gr66_","gr49_","gr53_","gr68_","gr56_","gr49_"],
|
||||
["gr49_","gr52_","gr54_","gr49_","gr50_","gr72_","gr65_","gr56_","gr54_","gr50_","gr50_","gr72_","gr56_","gr53_","gr55_","gr54_","gr56_","gr50_","gr56_","gr54_","gr56_","gr52_","gr67_","gr52_","gr56_","gr51_","gr57_","gr52_","gr51_","gr53_","gr55_","gr51_","gr56_","gr56_","gr54_","gr51_","gr50_","gr57_","gr51_","gr52_","gr56_","gr49_","gr55_","gr53_","gr24-","rc17_","rc18_","gr24_","gr50_","gr54_","gr54_","gr51_","gr72_","gr57_","gr55_","gr54_","gr54_","gr50_","gr52_","gr52_","gr56_","gr54_","gr65_","gr50_","gr54_","gr53_","gr49_","gr67_","gr49_","gr51_","gr72_","gr52_","gr50_","gr56_","gr55_","gr56_","gr51_","gr49_","gr52_","gr53_","gr51_","gr53_","gr55_","gr53_","gr54_","gr56_","gr54_","gr54_","gr67_","gr67_","gr49_","gr58_","gr53_","gr49_","gr55_","gr55_","gr51_","gr52_","gr56_","gr56_","gr55_","gr71_","gr56_","gr58_","gr51_","gr49_","gr59_","gr65_","gr55_","gr56_","gr51_","gr49_","gr52_","gr52_","gr59_","gr52_","gr52_","gr56_","gr56_","gr50_","gr56_","gr52_","gr66_","gr53_","gr49_","gr54_","gr64_","gr49_","gr55_","gr52_","gr49_","gr50_","gr69_","gr51_","gr52_","gr62_","gr51_","gr52_","gr57_","gr54_","gr50_","gr49_","gr70_","gr49_"],
|
||||
["gr52_","gr60_","gr59_","gr49_","gr58_","gr49_","gr69_","gr52_","gr51_","gr55_","gr71_","gr53_","gr68_","gr51_","gr52_","gr49_","gr58_","gr53_","gr55_","gr50_","gr50_","gr57_","gr51_","gr62_","gr58_","gr55_","gr51_","gr65_","gr53_","gr52_","gr51_","gr71_","gr51_","gr54_","gr53_","gr51_","gr54_","gr52_","gr54_","gr52_","gr54_","gr51_","gr54_","gr50_","gr26-","rc16_","rc19_","gr25_","gr53_","gr56_","gr55_","gr70_","gr54_","gr56_","gr53_","gr52_","gr56_","gr52_","gr56_","gr49_","gr71_","gr55_","gr52_","gr50_","gr49_","gr49_","gr51_","gr51_","gr50_","gr55_","gr50_","gr56_","gr56_","gr65_","gr49_","gr53_","gr56_","gr50_","gr54_","gr71_","gr55_","gr51_","gr50_","gr56_","gr49_","gr49_","gr51_","gr71_","gr54_","gr50_","gr49_","gr54_","gr56_","gr52_","gr49_","gr51_","gr55_","gr54_","gr60_","gr55_","gr53_","gr52_","gr49_","gr50_","gr66_","gr56_","gr55_","gr53_","gr65_","gr60_","gr52_","gr54_","gr64_","gr56_","gr49_","gr63_","gr52_","gr66_","gr60_","gr56_","gr51_","gr49_","gr52_","gr49_","gr49_","gr50_","gr56_","gr56_","gr52_","gr51_","gr49_","gr49_","gr55_","gr51_","gr51_","gr49_","gr50_","gr55_","gr72_","gr50_","gr49_","gr62_","gr69_","gr66_"],
|
||||
["gr49_","gr55_","gr59_","gr52_","gr70_","gr53_","gr55_","gr53_","gr55_","gr50_","gr51_","gr56_","gr56_","gr57_","gr51_","gr67_","gr64_","gr50_","gr64_","gr56_","gr49_","gr50_","gr49_","gr53_","gr50_","gr49_","gr53_","gr68_","gr56_","gr50_","gr50_","gr52_","gr56_","gr62_","gr49_","gr62_","gr55_","gr49_","gr71_","gr56_","gr51_","gr52_","gr53_","gr53_","gr24-","rc16_","rc19_","gr24_","gr51_","gr50_","gr51_","gr52_","gr49_","gr67_","gr57_","gr54_","gr65_","gr51_","gr52_","gr52_","gr54_","gr63_","gr49_","gr50_","gr55_","gr63_","gr49_","gr53_","gr55_","gr63_","gr57_","gr56_","gr62_","gr55_","gr50_","gr64_","gr53_","gr51_","gr58_","gr49_","gr54_","gr52_","gr50_","gr62_","gr49_","gr53_","gr54_","gr53_","gr56_","gr63_","gr55_","gr49_","gr52_","gr53_","gr52_","gr54_","gr62_","gr49_","gr53_","gr49_","gr71_","gr53_","gr55_","gr54_","gr56_","gr59_","gr51_","gr71_","gr51_","gr54_","gr55_","gr67_","gr55_","gr54_","gr51_","gr53_","gr49_","gr56_","gr69_","gr49_","gr54_","gr60_","gr54_","gr51_","gr49_","gr53_","gr58_","gr56_","gr59_","gr52_","gr68_","gr50_","gr70_","gr53_","gr56_","gr56_","gr57_","gr57_","gr55_","gr52_","gr56_","gr50_","gr55_","gr51_"],
|
||||
["gr49_","gr58_","gr56_","gr49_","gr55_","gr53_","gr55_","gr50_","gr50_","gr58_","gr55_","gr50_","gr54_","gr54_","gr52_","gr54_","gr64_","gr49_","gr54_","gr49_","gr52_","gr54_","gr52_","gr56_","gr50_","gr55_","gr70_","gr54_","gr52_","gr56_","gr50_","gr56_","gr49_","gr55_","gr56_","gr50_","gr53_","gr66_","gr53_","gr49_","gr55_","gr49_","gr52_","gr55_","gr27-","rc16_","rc18_","gr25_","gr52_","gr54_","gr68_","gr53_","gr49_","gr49_","gr67_","gr53_","gr49_","gr55_","gr56_","gr53_","gr55_","gr54_","gr56_","gr51_","gr56_","gr54_","gr59_","gr49_","gr50_","gr49_","gr54_","gr61_","gr50_","gr50_","gr60_","gr49_","gr52_","gr51_","gr56_","gr51_","gr55_","gr53_","gr61_","gr54_","gr54_","gr60_","gr54_","gr55_","gr56_","gr57_","gr54_","gr58_","gr49_","gr62_","gr49_","gr51_","gr55_","gr53_","gr49_","gr52_","gr54_","gr50_","gr67_","gr53_","gr53_","gr52_","gr55_","gr64_","gr54_","gr56_","gr51_","gr65_","gr49_","gr61_","gr49_","gr68_","gr50_","gr49_","gr52_","gr55_","gr71_","gr51_","gr71_","gr51_","gr59_","gr63_","gr54_","gr55_","gr53_","gr54_","gr51_","gr54_","gr50_","gr59_","gr50_","gr52_","gr55_","gr55_","gr62_","gr52_","gr55_","gr54_","gr50_","gr53_"],
|
||||
["gr51_","gr55_","gr56_","gr56_","gr53_","gr55_","gr53_","gr52_","gr52_","gr55_","gr51_","gr50_","gr52_","gr58_","gr54_","gr58_","gr51_","gr56_","gr64_","gr52_","gr52_","gr54_","gr53_","gr71_","gr56_","gr51_","gr55_","gr54_","gr56_","gr69_","gr51_","gr54_","gr52_","gr50_","gr58_","gr65_","gr55_","gr55_","gr50_","gr54_","gr49_","gr52_","gr58_","gr55_","gr25-","rc16_","rc19_","gr25_","gr55_","gr52_","gr56_","gr55_","gr54_","gr50_","gr51_","gr64_","gr56_","gr49_","gr52_","gr61_","gr56_","gr53_","gr72_","gr52_","gr52_","gr54_","gr56_","gr55_","gr49_","gr55_","gr49_","gr53_","gr53_","gr58_","gr53_","gr64_","gr51_","gr51_","gr72_","gr54_","gr51_","gr56_","gr51_","gr64_","gr56_","gr55_","gr53_","gr54_","gr56_","gr56_","gr52_","gr65_","gr55_","gr54_","gr56_","gr55_","gr60_","gr51_","gr65_","gr51_","gr50_","gr49_","gr52_","gr50_","gr56_","gr50_","gr51_","gr55_","gr50_","gr49_","gr50_","gr56_","gr54_","gr54_","gr50_","gr62_","gr56_","gr54_","gr57_","gr49_","gr55_","gr56_","gr56_","gr50_","gr53_","gr49_","gr52_","gr63_","gr51_","gr49_","gr54_","gr51_","gr50_","gr68_","gr51_","gr52_","gr51_","gr59_","gr52_","gr51_","gr56_","gr56_","gr55_","gr55_"],
|
||||
["gr49_","gr53_","gr52_","gr66_","gr56_","gr53_","gr49_","gr50_","gr61_","gr50_","gr55_","gr49_","gr59_","gr53_","gr58_","gr53_","gr49_","gr57_","gr53_","gr57_","gr49_","gr49_","gr68_","gr51_","gr53_","gr53_","gr56_","gr52_","gr53_","gr49_","gr55_","gr51_","gr50_","gr53_","gr49_","gr50_","gr55_","gr54_","gr52_","gr55_","gr50_","gr60_","gr49_","gr53_","gr24-","rc17_","rc19_","gr25_","gr62_","gr50_","gr56_","gr52_","gr56_","gr54_","gr49_","gr55_","gr62_","gr56_","gr56_","gr58_","gr50_","gr51_","gr50_","gr53_","gr59_","gr63_","gr50_","gr72_","gr53_","gr49_","gr58_","gr50_","gr63_","gr56_","gr54_","gr54_","gr52_","gr49_","gr49_","gr49_","gr50_","gr60_","gr54_","gr53_","gr54_","gr69_","gr49_","gr49_","gr62_","gr53_","gr51_","gr54_","gr53_","gr70_","gr49_","gr52_","gr51_","gr50_","gr53_","gr51_","gr59_","gr52_","gr52_","gr50_","gr67_","gr69_","gr54_","gr52_","gr55_","gr65_","gr50_","gr70_","gr54_","gr64_","gr63_","gr66_","gr51_","gr61_","gr52_","gr63_","gr54_","gr50_","gr57_","gr55_","gr56_","gr50_","gr51_","gr56_","gr51_","gr70_","gr52_","gr51_","gr55_","gr49_","gr49_","gr56_","gr54_","gr52_","gr50_","gr72_","gr49_","gr50_","gr53_","gr49_"],
|
||||
["gr49_","gr69_","gr52_","gr53_","gr55_","gr55_","gr50_","gr68_","gr52_","gr49_","gr50_","gr53_","gr50_","gr56_","gr49_","gr49_","gr49_","gr51_","gr54_","gr49_","gr51_","gr55_","gr49_","gr51_","gr56_","gr51_","gr49_","gr49_","gr51_","gr52_","gr52_","gr57_","gr51_","gr50_","gr52_","gr54_","gr51_","gr50_","gr52_","gr53_","gr58_","gr50_","gr55_","gr57_","gr25-","rc16_","rc18_","gr25_","gr55_","gr50_","gr60_","gr52_","gr55_","gr54_","gr68_","gr51_","gr50_","gr68_","gr51_","gr55_","gr52_","gr72_","gr54_","gr70_","gr53_","gr50_","gr55_","gr51_","gr54_","gr53_","gr49_","gr51_","gr56_","gr51_","gr63_","gr50_","gr53_","gr55_","gr53_","gr60_","gr52_","gr50_","gr68_","gr60_","gr49_","gr55_","gr67_","gr64_","gr51_","gr54_","gr57_","gr50_","gr69_","gr53_","gr52_","gr49_","gr53_","gr50_","gr53_","gr54_","gr56_","gr59_","gr65_","gr55_","gr52_","gr62_","gr50_","gr56_","gr53_","gr49_","gr52_","gr53_","gr72_","gr51_","gr56_","gr57_","gr51_","gr49_","gr53_","gr58_","gr51_","gr50_","gr50_","gr51_","gr52_","gr51_","gr53_","gr56_","gr53_","gr52_","gr55_","gr54_","gr65_","gr49_","gr53_","gr56_","gr56_","gr50_","gr56_","gr51_","gr52_","gr51_","gr62_","gr51_"],
|
||||
["gr52_","gr53_","gr56_","gr52_","gr52_","gr52_","gr50_","gr66_","gr51_","gr63_","gr54_","gr49_","gr67_","gr50_","gr56_","gr61_","gr53_","gr55_","gr51_","gr51_","gr66_","gr49_","gr51_","gr63_","gr51_","gr71_","gr50_","gr51_","gr66_","gr55_","gr52_","gr55_","gr71_","gr49_","gr66_","gr51_","gr52_","gr72_","gr50_","gr55_","gr49_","gr52_","gr53_","gr52_","gr24-","rc16_","rc19_","gr24_","gr51_","gr51_","gr51_","gr69_","gr50_","gr49_","gr53_","gr50_","gr53_","gr54_","gr55_","gr49_","gr56_","gr53_","gr52_","gr56_","gr49_","gr54_","gr56_","gr56_","gr52_","gr53_","gr54_","gr49_","gr55_","gr52_","gr55_","gr52_","gr54_","gr53_","gr50_","gr55_","gr65_","gr49_","gr55_","gr61_","gr49_","gr52_","gr51_","gr51_","gr55_","gr54_","gr55_","gr60_","gr53_","gr51_","gr72_","gr54_","gr50_","gr68_","gr49_","gr67_","gr58_","gr52_","gr52_","gr57_","gr60_","gr52_","gr53_","gr50_","gr67_","gr56_","gr72_","gr52_","gr54_","gr55_","gr61_","gr58_","gr63_","gr55_","gr51_","gr49_","gr56_","gr55_","gr50_","gr52_","gr49_","gr67_","gr72_","gr49_","gr51_","gr59_","gr53_","gr58_","gr56_","gr52_","gr54_","gr53_","gr49_","gr54_","gr54_","gr52_","gr55_","gr60_","gr56_","gr54_"],
|
||||
["gr66_","gr55_","gr55_","gr60_","gr53_","gr52_","gr71_","gr53_","gr56_","gr49_","gr65_","gr50_","gr52_","gr52_","gr50_","gr50_","gr51_","gr52_","gr52_","gr55_","gr54_","gr53_","gr68_","gr55_","gr52_","gr49_","gr50_","gr61_","gr50_","gr50_","gr53_","gr53_","gr53_","gr49_","gr52_","gr51_","gr50_","gr49_","gr54_","gr69_","gr55_","gr53_","gr51_","gr61_","gr26-","rc16_","rc18_","gr27_","gr50_","gr54_","gr55_","gr49_","gr50_","gr56_","gr60_","gr54_","gr55_","gr53_","gr58_","gr50_","gr52_","gr56_","gr52_","gr50_","gr64_","gr51_","gr52_","gr64_","gr54_","gr49_","gr56_","gr51_","gr53_","gr49_","gr56_","gr61_","gr49_","gr65_","gr49_","gr51_","gr56_","gr57_","gr53_","gr56_","gr54_","gr52_","gr56_","gr59_","gr49_","gr50_","gr52_","gr61_","gr54_","gr49_","gr63_","gr52_","gr50_","gr55_","gr56_","gr50_","gr49_","gr49_","gr69_","gr54_","gr51_","gr55_","gr56_","gr50_","gr50_","gr54_","gr53_","gr51_","gr54_","gr53_","gr54_","gr53_","gr49_","gr49_","gr71_","gr61_","gr51_","gr65_","gr50_","gr68_","gr55_","gr50_","gr53_","gr51_","gr59_","gr52_","gr63_","gr49_","gr60_","gr51_","gr70_","gr54_","gr56_","gr55_","gr52_","gr60_","gr51_","gr52_","gr53_","gr49_"],
|
||||
["gr51_","gr51_","gr50_","gr55_","gr67_","gr55_","gr50_","gr60_","gr51_","gr49_","gr68_","gr50_","gr55_","gr52_","gr54_","gr55_","gr52_","gr50_","gr49_","gr70_","gr54_","gr53_","gr50_","gr60_","gr52_","gr55_","gr51_","gr52_","gr66_","gr51_","gr55_","gr52_","gr55_","gr50_","gr50_","gr54_","gr61_","gr54_","gr63_","gr72_","gr51_","gr50_","gr72_","gr52_","gr24-","rc16_","rc18_","gr27_","gr51_","gr49_","gr54_","gr55_","gr63_","gr50_","gr49_","gr55_","gr72_","gr49_","gr53_","gr49_","gr49_","gr52_","gr54_","gr68_","gr50_","gr50_","gr53_","gr50_","gr69_","gr55_","gr56_","gr49_","gr59_","gr52_","gr72_","gr52_","gr60_","gr53_","gr50_","gr55_","gr50_","gr50_","gr55_","gr54_","gr72_","gr55_","gr52_","gr55_","gr59_","gr52_","gr50_","gr59_","gr55_","gr53_","gr55_","gr50_","gr69_","gr67_","gr51_","gr68_","gr53_","gr65_","gr52_","gr56_","gr49_","gr56_","gr51_","gr56_","gr58_","gr52_","gr53_","gr51_","gr49_","gr52_","gr58_","gr50_","gr55_","gr54_","gr49_","gr52_","gr53_","gr56_","gr51_","gr51_","gr53_","gr56_","gr51_","gr52_","gr54_","gr54_","gr53_","gr59_","gr53_","gr52_","gr67_","gr52_","gr55_","gr53_","gr49_","gr51_","gr71_","gr51_","gr51_","gr52_"],
|
||||
["gr62_","gr55_","gr57_","gr60_","gr54_","gr70_","gr50_","gr71_","gr54_","gr54_","gr54_","gr56_","gr50_","gr52_","gr51_","gr68_","gr56_","gr57_","gr49_","gr55_","gr51_","gr49_","gr54_","gr53_","gr67_","gr51_","gr59_","gr50_","gr68_","gr52_","gr60_","gr51_","gr51_","gr52_","gr52_","gr51_","gr52_","gr55_","gr55_","gr55_","gr63_","gr53_","gr54_","gr50_","gr25-","rc16_","rc19_","gr24_","gr56_","gr55_","gr65_","gr56_","gr49_","gr55_","gr60_","gr52_","gr56_","gr51_","gr55_","gr55_","gr55_","gr70_","gr49_","gr55_","gr55_","gr50_","gr49_","gr55_","gr50_","gr49_","gr70_","gr68_","gr54_","gr61_","gr56_","gr49_","gr49_","gr65_","gr52_","gr52_","gr56_","gr69_","gr52_","gr54_","gr54_","gr70_","gr53_","gr55_","gr51_","gr51_","gr63_","gr56_","gr50_","gr49_","gr49_","gr72_","gr50_","gr49_","gr50_","gr56_","gr54_","gr53_","gr65_","gr54_","gr53_","gr54_","gr54_","gr53_","gr51_","gr65_","gr54_","gr51_","gr62_","gr60_","gr51_","gr50_","gr50_","gr54_","gr49_","gr56_","gr62_","gr53_","gr51_","gr56_","gr52_","gr70_","gr52_","gr62_","gr53_","gr49_","gr54_","gr54_","gr50_","gr50_","gr55_","gr54_","gr52_","gr65_","gr54_","gr55_","gr53_","gr50_","gr51_","gr56_"],
|
||||
["gr60_","gr53_","gr52_","gr51_","gr54_","gr55_","gr49_","gr54_","gr64_","gr56_","gr49_","gr68_","gr53_","gr52_","gr50_","gr50_","gr54_","gr50_","gr53_","gr50_","gr53_","gr72_","gr56_","gr51_","gr49_","gr52_","gr51_","gr54_","gr54_","gr60_","gr51_","gr66_","gr50_","gr55_","gr49_","gr66_","gr64_","gr50_","gr52_","gr50_","gr49_","gr53_","gr51_","gr54_","gr27-","rc16_","rc18_","gr24_","gr55_","gr61_","gr56_","gr51_","gr56_","gr55_","gr52_","gr61_","gr54_","gr49_","gr50_","gr58_","gr54_","gr56_","gr54_","gr50_","gr54_","gr51_","gr49_","gr53_","gr66_","gr54_","gr50_","gr59_","gr49_","gr50_","gr64_","gr52_","gr54_","gr51_","gr49_","gr56_","gr55_","gr49_","gr54_","gr49_","gr65_","gr56_","gr52_","gr52_","gr50_","gr56_","gr52_","gr68_","gr53_","gr53_","gr52_","gr54_","gr50_","gr71_","gr53_","gr54_","gr52_","gr52_","gr51_","gr57_","gr49_","gr49_","gr56_","gr72_","gr53_","gr53_","gr49_","gr52_","gr55_","gr54_","gr55_","gr68_","gr50_","gr50_","gr55_","gr49_","gr53_","gr55_","gr50_","gr51_","gr68_","gr51_","gr54_","gr56_","gr53_","gr69_","gr68_","gr52_","gr52_","gr50_","gr56_","gr52_","gr56_","gr65_","gr51_","gr58_","gr59_","gr56_","gr52_","gr68_"],
|
||||
["gr54_","gr61_","gr51_","gr53_","gr50_","gr53_","gr53_","gr50_","gr56_","gr56_","gr59_","gr55_","gr66_","gr50_","gr51_","gr55_","gr64_","gr52_","gr53_","gr55_","gr52_","gr50_","gr55_","gr52_","gr54_","gr51_","gr50_","gr56_","gr49_","gr52_","gr67_","gr50_","gr52_","gr52_","gr59_","gr51_","gr50_","gr65_","gr55_","gr50_","gr50_","gr50_","gr56_","gr64_","gr26-","rc16_","rc18_","gr24_","gr49_","gr53_","gr67_","gr56_","gr51_","gr51_","gr67_","gr50_","gr67_","gr53_","gr52_","gr52_","gr54_","gr49_","gr61_","gr53_","gr49_","gr53_","gr53_","gr54_","gr56_","gr55_","gr51_","gr54_","gr67_","gr53_","gr63_","gr54_","gr52_","gr53_","gr71_","gr53_","gr50_","gr70_","gr51_","gr54_","gr49_","gr53_","gr49_","gr53_","gr56_","gr57_","gr49_","gr53_","gr50_","gr56_","gr50_","gr53_","gr53_","gr56_","gr60_","gr55_","gr54_","gr54_","gr67_","gr55_","gr59_","gr50_","gr66_","gr50_","gr55_","gr64_","gr54_","gr52_","gr50_","gr49_","gr55_","gr49_","gr55_","gr57_","gr50_","gr69_","gr52_","gr63_","gr50_","gr68_","gr61_","gr55_","gr50_","gr59_","gr49_","gr51_","gr53_","gr52_","gr51_","gr54_","gr54_","gr54_","gr51_","gr56_","gr56_","gr51_","gr50_","gr53_","gr72_","gr49_"],
|
||||
["gr66_","gr53_","gr54_","gr65_","gr51_","gr53_","gr55_","gr51_","gr71_","gr53_","gr54_","gr63_","gr55_","gr64_","gr54_","gr54_","gr52_","gr56_","gr57_","gr55_","gr56_","gr55_","gr53_","gr50_","gr49_","gr63_","gr50_","gr49_","gr60_","gr50_","gr53_","gr50_","gr56_","gr51_","gr56_","gr55_","gr71_","gr51_","gr55_","gr61_","gr49_","gr53_","gr61_","gr56_","gr25-","rc17_","rc18_","gr25_","gr54_","gr54_","gr49_","gr71_","gr51_","gr50_","gr55_","gr52_","gr55_","gr55_","gr54_","gr53_","gr54_","gr49_","gr70_","gr49_","gr70_","gr49_","gr53_","gr49_","gr67_","gr51_","gr51_","gr53_","gr51_","gr70_","gr55_","gr54_","gr50_","gr54_","gr55_","gr51_","gr64_","gr53_","gr52_","gr53_","gr62_","gr54_","gr52_","gr50_","gr53_","gr56_","gr54_","gr69_","gr55_","gr50_","gr49_","gr52_","gr59_","gr49_","gr54_","gr49_","gr53_","gr51_","gr49_","gr51_","gr52_","gr56_","gr52_","gr66_","gr51_","gr59_","gr52_","gr53_","gr56_","gr53_","gr51_","gr55_","gr56_","gr51_","gr52_","gr62_","gr49_","gr51_","gr49_","gr51_","gr55_","gr59_","gr56_","gr54_","gr55_","gr58_","gr50_","gr55_","gr55_","gr53_","gr51_","gr61_","gr52_","gr59_","gr53_","gr50_","gr50_","gr49_","gr53_","gr53_"],
|
||||
["gr56_","gr63_","gr52_","gr55_","gr50_","gr65_","gr55_","gr55_","gr53_","gr55_","gr56_","gr71_","gr54_","gr54_","gr51_","gr52_","gr51_","gr53_","gr49_","gr49_","gr56_","gr56_","gr56_","gr53_","gr52_","gr56_","gr57_","gr56_","gr65_","gr49_","gr49_","gr66_","gr56_","gr50_","gr49_","gr53_","gr50_","gr49_","gr54_","gr54_","gr56_","gr69_","gr49_","gr55_","gr25-","rc16_","rc19_","gr26_","gr54_","gr56_","gr51_","gr49_","gr56_","gr52_","gr65_","gr50_","gr50_","gr54_","gr64_","gr51_","gr63_","gr49_","gr56_","gr52_","gr54_","gr54_","gr49_","gr55_","gr50_","gr50_","gr56_","gr49_","gr66_","gr51_","gr54_","gr53_","gr58_","gr55_","gr49_","gr49_","gr56_","gr53_","gr65_","gr54_","gr56_","gr50_","gr52_","gr52_","gr72_","gr53_","gr51_","gr52_","gr52_","gr51_","gr50_","gr52_","gr52_","gr52_","gr52_","gr55_","gr57_","gr52_","gr53_","gr50_","gr52_","gr51_","gr54_","gr56_","gr55_","gr53_","gr53_","gr55_","gr49_","gr51_","gr58_","gr56_","gr70_","gr56_","gr51_","gr51_","gr53_","gr53_","gr49_","gr49_","gr49_","gr54_","gr56_","gr49_","gr65_","gr51_","gr51_","gr52_","gr64_","gr55_","gr54_","gr56_","gr53_","gr52_","gr58_","gr72_","gr51_","gr53_","gr52_","gr50_"],
|
||||
["gr50_","gr50_","gr54_","gr56_","gr52_","gr56_","gr53_","gr56_","gr50_","gr55_","gr50_","gr52_","gr53_","gr50_","gr49_","gr59_","gr61_","gr51_","gr53_","gr54_","gr53_","gr68_","gr49_","gr51_","gr69_","gr54_","gr56_","gr54_","gr70_","gr70_","gr63_","gr51_","gr58_","gr51_","gr54_","gr69_","gr50_","gr66_","gr50_","gr50_","gr69_","gr50_","gr54_","gr68_","gr24-","rc17_","rc19_","gr26_","gr56_","gr52_","gr50_","gr53_","gr50_","gr50_","gr64_","gr52_","gr52_","gr50_","gr50_","gr72_","gr49_","gr56_","gr52_","gr49_","gr49_","gr53_","gr72_","gr55_","gr54_","gr68_","gr51_","gr65_","gr56_","gr54_","gr61_","gr50_","gr50_","gr55_","gr53_","gr71_","gr51_","gr54_","gr50_","gr58_","gr54_","gr49_","gr50_","gr50_","gr50_","gr55_","gr55_","gr56_","gr51_","gr52_","gr61_","gr52_","gr55_","gr56_","gr62_","gr54_","gr50_","gr56_","gr55_","gr54_","gr50_","gr51_","gr56_","gr68_","gr68_","gr55_","gr55_","gr56_","gr61_","gr50_","gr53_","gr52_","gr50_","gr49_","gr72_","gr53_","gr56_","gr53_","gr56_","gr54_","gr52_","gr56_","gr50_","gr52_","gr53_","gr52_","gr55_","gr51_","gr53_","gr53_","gr62_","gr71_","gr52_","gr50_","gr54_","gr52_","gr53_","gr72_","gr53_","gr55_"],
|
||||
["gr54_","gr55_","gr52_","gr51_","gr52_","gr51_","gr49_","gr53_","gr53_","gr52_","gr51_","gr64_","gr53_","gr54_","gr57_","gr50_","gr50_","gr50_","gr52_","gr53_","gr55_","gr67_","gr56_","gr62_","gr52_","gr50_","gr55_","gr57_","gr53_","gr51_","gr54_","gr52_","gr55_","gr53_","gr70_","gr55_","gr70_","gr54_","gr61_","gr67_","gr50_","gr52_","gr50_","gr72_","gr27-","rc17_","rc19_","gr24_","gr54_","gr49_","gr52_","gr52_","gr49_","gr59_","gr54_","gr51_","gr60_","gr51_","gr52_","gr52_","gr60_","gr55_","gr51_","gr53_","gr54_","gr53_","gr52_","gr49_","gr55_","gr50_","gr52_","gr54_","gr61_","gr54_","gr52_","gr53_","gr51_","gr54_","gr50_","gr53_","gr65_","gr49_","gr54_","gr56_","gr49_","gr59_","gr71_","gr68_","gr52_","gr54_","gr67_","gr51_","gr67_","gr52_","gr50_","gr52_","gr53_","gr53_","gr52_","gr56_","gr56_","gr55_","gr62_","gr70_","gr56_","gr49_","gr50_","gr55_","gr50_","gr56_","gr51_","gr50_","gr52_","gr50_","gr69_","gr50_","gr49_","gr69_","gr51_","gr51_","gr50_","gr49_","gr54_","gr56_","gr56_","gr58_","gr61_","gr56_","gr52_","gr55_","gr56_","gr52_","gr71_","gr54_","gr52_","gr51_","gr50_","gr54_","gr66_","gr63_","gr55_","gr51_","gr56_","gr53_"],
|
||||
["gr54_","gr53_","gr54_","gr72_","gr49_","gr49_","gr50_","gr63_","gr56_","gr62_","gr53_","gr50_","gr61_","gr49_","gr59_","gr49_","gr65_","gr51_","gr55_","gr54_","gr54_","gr54_","gr53_","gr54_","gr51_","gr51_","gr54_","gr51_","gr52_","gr55_","gr56_","gr53_","gr55_","gr57_","gr51_","gr60_","gr55_","gr53_","gr53_","gr72_","gr53_","gr52_","gr54_","gr50_","gr26-","rc17_","rc18_","gr25_","gr54_","gr63_","gr49_","gr60_","gr52_","gr55_","gr49_","gr70_","gr52_","gr50_","gr53_","gr53_","gr56_","gr52_","gr59_","gr50_","gr55_","gr70_","gr51_","gr54_","gr61_","gr51_","gr50_","gr54_","gr49_","gr52_","gr51_","gr54_","gr53_","gr52_","gr65_","gr52_","gr50_","gr53_","gr55_","gr56_","gr66_","gr49_","gr56_","gr59_","gr51_","gr66_","gr55_","gr53_","gr51_","gr51_","gr49_","gr60_","gr55_","gr52_","gr62_","gr52_","gr50_","gr58_","gr51_","gr50_","gr52_","gr52_","gr51_","gr56_","gr72_","gr64_","gr49_","gr53_","gr69_","gr52_","gr56_","gr49_","gr54_","gr61_","gr51_","gr53_","gr51_","gr67_","gr53_","gr49_","gr53_","gr67_","gr50_","gr52_","gr61_","gr52_","gr52_","gr72_","gr54_","gr66_","gr56_","gr51_","gr71_","gr62_","gr54_","gr55_","gr58_","gr52_","gr68_","gr51_"],
|
||||
["gr64_","gr52_","gr52_","gr56_","gr58_","gr50_","gr49_","gr53_","gr49_","gr70_","gr54_","gr67_","gr55_","gr52_","gr55_","gr57_","gr51_","gr53_","gr54_","gr49_","gr50_","gr52_","gr55_","gr49_","gr49_","gr66_","gr53_","gr68_","gr51_","gr50_","gr51_","gr54_","gr65_","gr54_","gr51_","gr52_","gr53_","gr56_","gr50_","gr49_","gr54_","gr50_","gr50_","gr50_","gr27-","rc17_","rc19_","gr24_","gr49_","gr55_","gr51_","gr55_","gr52_","gr55_","gr66_","gr53_","gr50_","gr70_","gr54_","gr53_","gr52_","gr49_","gr52_","gr55_","gr50_","gr56_","gr54_","gr69_","gr56_","gr55_","gr55_","gr51_","gr51_","gr55_","gr49_","gr54_","gr56_","gr50_","gr50_","gr51_","gr53_","gr58_","gr51_","gr67_","gr54_","gr51_","gr56_","gr69_","gr50_","gr52_","gr51_","gr60_","gr52_","gr49_","gr57_","gr53_","gr50_","gr52_","gr59_","gr51_","gr57_","gr56_","gr55_","gr59_","gr55_","gr53_","gr52_","gr56_","gr55_","gr55_","gr49_","gr55_","gr49_","gr55_","gr54_","gr60_","gr56_","gr56_","gr50_","gr59_","gr50_","gr51_","gr52_","gr56_","gr51_","gr51_","gr65_","gr56_","gr50_","gr65_","gr52_","gr54_","gr50_","gr50_","gr49_","gr55_","gr50_","gr60_","gr50_","gr54_","gr54_","gr53_","gr51_","gr49_"],
|
||||
["gr52_","gr53_","gr53_","gr50_","gr56_","gr54_","gr54_","gr55_","gr49_","gr51_","gr55_","gr50_","gr49_","gr70_","gr53_","gr49_","gr49_","gr56_","gr49_","gr55_","gr50_","gr69_","gr56_","gr49_","gr53_","gr53_","gr67_","gr50_","gr68_","gr53_","gr56_","gr56_","gr55_","gr52_","gr55_","gr53_","gr56_","gr54_","gr54_","gr55_","gr55_","gr52_","gr62_","gr56_","gr25-","rc17_","rc18_","gr27_","gr71_","gr56_","gr56_","gr53_","gr50_","gr49_","gr49_","gr64_","gr55_","gr55_","gr55_","gr52_","gr57_","gr53_","gr56_","gr53_","gr56_","gr52_","gr52_","gr54_","gr55_","gr55_","gr49_","gr61_","gr52_","gr63_","gr56_","gr52_","gr52_","gr55_","gr53_","gr50_","gr52_","gr49_","gr51_","gr56_","gr72_","gr55_","gr54_","gr53_","gr56_","gr51_","gr71_","gr50_","gr54_","gr55_","gr52_","gr62_","gr49_","gr54_","gr53_","gr51_","gr53_","gr49_","gr71_","gr56_","gr65_","gr51_","gr61_","gr69_","gr56_","gr62_","gr50_","gr50_","gr72_","gr51_","gr49_","gr56_","gr62_","gr54_","gr54_","gr54_","gr56_","gr71_","gr50_","gr62_","gr65_","gr51_","gr50_","gr61_","gr49_","gr56_","gr72_","gr55_","gr51_","gr53_","gr57_","gr56_","gr69_","gr56_","gr53_","gr52_","gr51_","gr62_","gr51_","gr56_"],
|
||||
["gr52_","gr70_","gr50_","gr54_","gr51_","gr54_","gr49_","gr61_","gr56_","gr69_","gr56_","gr63_","gr52_","gr63_","gr52_","gr49_","gr49_","gr53_","gr63_","gr63_","gr55_","gr50_","gr54_","gr69_","gr56_","gr70_","gr57_","gr55_","gr54_","gr55_","gr55_","gr50_","gr55_","gr51_","gr55_","gr49_","gr56_","gr55_","gr63_","gr49_","gr54_","gr52_","gr57_","gr53_","gr25-","rc17_","rc18_","gr26_","gr55_","gr50_","gr49_","gr52_","gr59_","gr56_","gr54_","gr72_","gr50_","gr70_","gr56_","gr56_","gr55_","gr57_","gr53_","gr50_","gr49_","gr49_","gr55_","gr49_","gr51_","gr50_","gr49_","gr50_","gr52_","gr52_","gr70_","gr49_","gr56_","gr52_","gr50_","gr49_","gr69_","gr49_","gr55_","gr55_","gr55_","gr55_","gr65_","gr56_","gr52_","gr55_","gr50_","gr54_","gr56_","gr53_","gr72_","gr56_","gr67_","gr56_","gr50_","gr63_","gr54_","gr62_","gr54_","gr49_","gr50_","gr54_","gr62_","gr49_","gr49_","gr52_","gr70_","gr53_","gr50_","gr64_","gr55_","gr55_","gr49_","gr71_","gr56_","gr53_","gr53_","gr49_","gr56_","gr50_","gr49_","gr49_","gr61_","gr50_","gr51_","gr49_","gr56_","gr49_","gr56_","gr51_","gr54_","gr53_","gr54_","gr49_","gr65_","gr55_","gr49_","gr53_","gr53_","gr62_"],
|
||||
["gr54_","gr49_","gr51_","gr53_","gr67_","gr49_","gr50_","gr56_","gr53_","gr52_","gr49_","gr50_","gr56_","gr72_","gr54_","gr50_","gr51_","gr50_","gr50_","gr49_","gr66_","gr49_","gr50_","gr54_","gr66_","gr53_","gr55_","gr50_","gr72_","gr64_","gr55_","gr53_","gr50_","gr52_","gr51_","gr55_","gr52_","gr52_","gr55_","gr55_","gr69_","gr49_","gr53_","gr72_","gr27-","rc17_","rc18_","gr26_","gr51_","gr53_","gr54_","gr70_","gr50_","gr65_","gr56_","gr60_","gr53_","gr50_","gr49_","gr51_","gr54_","gr52_","gr53_","gr56_","gr53_","gr55_","gr69_","gr55_","gr68_","gr56_","gr55_","gr52_","gr51_","gr55_","gr60_","gr51_","gr53_","gr63_","gr49_","gr57_","gr49_","gr50_","gr70_","gr49_","gr50_","gr50_","gr50_","gr56_","gr63_","gr56_","gr54_","gr49_","gr52_","gr65_","gr53_","gr49_","gr55_","gr52_","gr51_","gr52_","gr52_","gr54_","gr51_","gr55_","gr49_","gr54_","gr54_","gr68_","gr50_","gr49_","gr51_","gr49_","gr71_","gr55_","gr50_","gr56_","gr49_","gr52_","gr72_","gr49_","gr49_","gr56_","gr54_","gr68_","gr49_","gr64_","gr49_","gr56_","gr56_","gr50_","gr60_","gr54_","gr50_","gr53_","gr49_","gr54_","gr54_","gr71_","gr52_","gr65_","gr55_","gr60_","gr49_","gr54_"],
|
||||
["gr52_","gr54_","gr72_","gr53_","gr56_","gr72_","gr56_","gr63_","gr50_","gr57_","gr49_","gr52_","gr61_","gr55_","gr49_","gr51_","gr57_","gr50_","gr56_","gr54_","gr56_","gr53_","gr52_","gr51_","gr51_","gr56_","gr53_","gr68_","gr51_","gr49_","gr66_","gr56_","gr56_","gr62_","gr50_","gr56_","gr53_","gr60_","gr52_","gr50_","gr50_","gr52_","gr56_","gr49_","gr27-","rc17_","rc18_","gr24_","gr49_","gr50_","gr63_","gr51_","gr54_","gr54_","gr49_","gr53_","gr54_","gr51_","gr57_","gr52_","gr54_","gr54_","gr54_","gr55_","gr51_","gr55_","gr55_","gr55_","gr50_","gr50_","gr51_","gr51_","gr65_","gr55_","gr50_","gr68_","gr67_","gr50_","gr49_","gr49_","gr56_","gr52_","gr50_","gr53_","gr50_","gr72_","gr49_","gr52_","gr49_","gr71_","gr49_","gr50_","gr56_","gr53_","gr53_","gr51_","gr54_","gr66_","gr55_","gr52_","gr54_","gr65_","gr53_","gr49_","gr55_","gr52_","gr63_","gr52_","gr61_","gr54_","gr50_","gr69_","gr54_","gr55_","gr56_","gr52_","gr54_","gr52_","gr53_","gr56_","gr51_","gr53_","gr52_","gr52_","gr50_","gr53_","gr64_","gr53_","gr64_","gr53_","gr51_","gr70_","gr50_","gr66_","gr50_","gr52_","gr53_","gr50_","gr55_","gr49_","gr54_","gr51_","gr54_","gr61_"],
|
||||
["gr52_","gr52_","gr49_","gr49_","gr49_","gr49_","gr52_","gr66_","gr53_","gr51_","gr50_","gr52_","gr51_","gr54_","gr54_","gr52_","gr49_","gr58_","gr50_","gr61_","gr52_","gr51_","gr59_","gr52_","gr50_","gr49_","gr51_","gr52_","gr55_","gr57_","gr54_","gr67_","gr49_","gr49_","gr53_","gr58_","gr51_","gr55_","gr71_","gr49_","gr54_","gr67_","gr51_","gr65_","gr26-","rc16_","rc18_","gr25_","gr50_","gr49_","gr52_","gr49_","gr70_","gr54_","gr55_","gr50_","gr55_","gr58_","gr58_","gr52_","gr54_","gr56_","gr49_","gr70_","gr53_","gr56_","gr61_","gr49_","gr69_","gr55_","gr60_","gr53_","gr53_","gr52_","gr63_","gr52_","gr50_","gr53_","gr51_","gr50_","gr58_","gr56_","gr49_","gr59_","gr55_","gr50_","gr70_","gr52_","gr50_","gr52_","gr52_","gr49_","gr53_","gr56_","gr55_","gr54_","gr56_","gr56_","gr72_","gr54_","gr53_","gr72_","gr53_","gr55_","gr53_","gr55_","gr55_","gr59_","gr49_","gr50_","gr51_","gr49_","gr56_","gr49_","gr50_","gr50_","gr56_","gr56_","gr49_","gr53_","gr53_","gr55_","gr49_","gr51_","gr68_","gr50_","gr56_","gr51_","gr67_","gr50_","gr54_","gr55_","gr53_","gr50_","gr49_","gr54_","gr51_","gr59_","gr58_","gr56_","gr54_","gr56_","gr54_","gr61_"],
|
||||
["gr55_","gr51_","gr53_","gr54_","gr55_","gr54_","gr62_","gr50_","gr55_","gr51_","gr50_","gr50_","gr49_","gr53_","gr60_","gr62_","gr53_","gr52_","gr56_","gr54_","gr53_","gr53_","gr56_","gr49_","gr49_","gr55_","gr56_","gr58_","gr51_","gr56_","gr52_","gr54_","gr52_","gr70_","gr53_","gr63_","gr54_","gr54_","gr55_","gr68_","gr56_","gr56_","gr70_","gr55_","gr27-","rc17_","rc19_","gr24_","gr54_","gr56_","gr52_","gr50_","gr51_","gr50_","gr51_","gr51_","gr70_","gr54_","gr50_","gr65_","gr56_","gr65_","gr53_","gr53_","gr49_","gr50_","gr55_","gr54_","gr52_","gr55_","gr52_","gr52_","gr57_","gr55_","gr53_","gr49_","gr50_","gr54_","gr63_","gr51_","gr54_","gr53_","gr52_","gr67_","gr49_","gr55_","gr49_","gr49_","gr50_","gr61_","gr54_","gr62_","gr51_","gr51_","gr50_","gr72_","gr53_","gr56_","gr52_","gr50_","gr66_","gr50_","gr59_","gr49_","gr72_","gr55_","gr55_","gr56_","gr53_","gr53_","gr69_","gr53_","gr54_","gr51_","gr55_","gr50_","gr54_","gr54_","gr66_","gr53_","gr69_","gr54_","gr70_","gr56_","gr54_","gr54_","gr58_","gr49_","gr56_","gr55_","gr53_","gr51_","gr54_","gr69_","gr54_","gr52_","gr56_","gr65_","gr53_","gr53_","gr71_","gr53_","gr55_","gr53_"],
|
||||
["gr60_","gr51_","gr54_","gr70_","gr50_","gr55_","gr54_","gr54_","gr56_","gr64_","gr50_","gr55_","gr56_","gr51_","gr53_","gr56_","gr51_","gr55_","gr65_","gr58_","gr50_","gr50_","gr52_","gr51_","gr62_","gr59_","gr69_","gr55_","gr49_","gr54_","gr60_","gr50_","gr51_","gr52_","gr55_","gr71_","gr54_","gr56_","gr62_","gr52_","gr66_","gr51_","gr72_","gr51_","gr25-","rc17_","rc18_","gr26_","gr52_","gr49_","gr56_","gr69_","gr53_","gr56_","gr53_","gr72_","gr51_","gr55_","gr50_","gr54_","gr58_","gr49_","gr52_","gr68_","gr64_","gr54_","gr52_","gr53_","gr56_","gr51_","gr49_","gr56_","gr51_","gr71_","gr50_","gr69_","gr50_","gr55_","gr53_","gr52_","gr53_","gr68_","gr51_","gr54_","gr64_","gr56_","gr49_","gr50_","gr56_","gr68_","gr49_","gr66_","gr58_","gr52_","gr55_","gr51_","gr52_","gr49_","gr69_","gr49_","gr50_","gr55_","gr55_","gr56_","gr51_","gr69_","gr55_","gr52_","gr51_","gr50_","gr54_","gr51_","gr55_","gr51_","gr57_","gr49_","gr52_","gr49_","gr50_","gr51_","gr55_","gr51_","gr50_","gr60_","gr71_","gr51_","gr52_","gr64_","gr51_","gr49_","gr56_","gr55_","gr51_","gr52_","gr56_","gr53_","gr53_","gr53_","gr51_","gr51_","gr49_","gr61_","gr53_","gr60_"],
|
||||
["gr53_","gr53_","gr50_","gr56_","gr50_","gr50_","gr52_","gr54_","gr55_","gr66_","gr57_","gr50_","gr56_","gr56_","gr55_","gr50_","gr51_","gr52_","gr55_","gr56_","gr52_","gr59_","gr53_","gr49_","gr50_","gr52_","gr51_","gr49_","gr55_","gr68_","gr53_","gr54_","gr60_","gr51_","gr54_","gr49_","gr66_","gr53_","gr50_","gr56_","gr50_","gr67_","gr51_","gr54_","gr27-","rc17_","rc19_","gr25_","gr54_","gr51_","gr49_","gr51_","gr60_","gr50_","gr53_","gr50_","gr56_","gr69_","gr49_","gr56_","gr53_","gr56_","gr52_","gr68_","gr50_","gr59_","gr70_","gr55_","gr66_","gr50_","gr60_","gr55_","gr52_","gr53_","gr55_","gr55_","gr51_","gr56_","gr53_","gr53_","gr71_","gr51_","gr70_","gr51_","gr51_","gr51_","gr64_","gr56_","gr53_","gr56_","gr51_","gr52_","gr50_","gr54_","gr62_","gr55_","gr55_","gr52_","gr49_","gr50_","gr56_","gr63_","gr56_","gr51_","gr53_","gr56_","gr54_","gr70_","gr51_","gr55_","gr54_","gr60_","gr53_","gr50_","gr54_","gr50_","gr52_","gr53_","gr51_","gr50_","gr53_","gr60_","gr65_","gr69_","gr54_","gr55_","gr57_","gr52_","gr69_","gr54_","gr51_","gr49_","gr51_","gr56_","gr50_","gr61_","gr68_","gr53_","gr51_","gr51_","gr56_","gr52_","gr58_","gr51_"],
|
||||
["gr56_","gr56_","gr66_","gr52_","gr71_","gr49_","gr64_","gr51_","gr54_","gr65_","gr49_","gr51_","gr49_","gr52_","gr59_","gr52_","gr55_","gr58_","gr56_","gr56_","gr59_","gr54_","gr52_","gr52_","gr53_","gr50_","gr55_","gr51_","gr54_","gr49_","gr65_","gr50_","gr64_","gr52_","gr65_","gr53_","gr51_","gr62_","gr52_","gr56_","gr49_","gr56_","gr53_","gr55_","gr25-","rc17_","rc19_","gr24_","gr50_","gr70_","gr52_","gr59_","gr56_","gr56_","gr50_","gr56_","gr51_","gr49_","gr49_","gr49_","gr49_","gr71_","gr54_","gr52_","gr54_","gr49_","gr51_","gr50_","gr55_","gr52_","gr52_","gr67_","gr51_","gr63_","gr52_","gr64_","gr53_","gr55_","gr70_","gr55_","gr60_","gr52_","gr52_","gr51_","gr51_","gr50_","gr68_","gr65_","gr49_","gr50_","gr53_","gr52_","gr50_","gr70_","gr55_","gr66_","gr52_","gr56_","gr64_","gr61_","gr51_","gr67_","gr56_","gr51_","gr53_","gr72_","gr54_","gr55_","gr64_","gr49_","gr59_","gr56_","gr49_","gr49_","gr54_","gr51_","gr65_","gr63_","gr51_","gr54_","gr54_","gr54_","gr55_","gr56_","gr52_","gr53_","gr50_","gr53_","gr50_","gr51_","gr50_","gr53_","gr49_","gr50_","gr53_","gr53_","gr64_","gr49_","gr71_","gr53_","gr69_","gr51_","gr56_","gr60_"],
|
||||
["gr54_","gr52_","gr62_","gr51_","gr56_","gr51_","gr49_","gr52_","gr59_","gr54_","gr72_","gr59_","gr51_","gr56_","gr49_","gr55_","gr53_","gr49_","gr53_","gr50_","gr55_","gr53_","gr56_","gr51_","gr54_","gr54_","gr52_","gr50_","gr54_","gr54_","gr54_","gr55_","gr62_","gr54_","gr71_","gr51_","gr50_","gr50_","gr52_","gr53_","gr55_","gr50_","gr63_","gr54_","gr24-","rc17_","rc18_","gr26_","gr49_","gr51_","gr52_","gr53_","gr56_","gr72_","gr61_","gr50_","gr70_","gr50_","gr56_","gr56_","gr53_","gr53_","gr50_","gr60_","gr54_","gr57_","gr52_","gr56_","gr58_","gr49_","gr59_","gr51_","gr50_","gr55_","gr56_","gr71_","gr56_","gr54_","gr49_","gr49_","gr52_","gr55_","gr55_","gr53_","gr64_","gr53_","gr54_","gr63_","gr52_","gr56_","gr55_","gr51_","gr51_","gr54_","gr49_","gr54_","gr68_","gr53_","gr52_","gr59_","gr50_","gr50_","gr53_","gr71_","gr52_","gr54_","gr53_","gr49_","gr54_","gr54_","gr53_","gr56_","gr55_","gr56_","gr51_","gr62_","gr52_","gr49_","gr54_","gr49_","gr61_","gr53_","gr72_","gr49_","gr59_","gr53_","gr66_","gr63_","gr53_","gr55_","gr52_","gr50_","gr53_","gr49_","gr52_","gr50_","gr58_","gr55_","gr49_","gr54_","gr54_","gr50_","gr56_","gr55_"],
|
||||
["gr55_","gr50_","gr53_","gr52_","gr54_","gr49_","gr56_","gr49_","gr55_","gr56_","gr56_","gr49_","gr53_","gr67_","gr49_","gr66_","gr55_","gr49_","gr54_","gr55_","gr56_","gr56_","gr51_","gr54_","gr71_","gr63_","gr49_","gr64_","gr55_","gr50_","gr53_","gr52_","gr56_","gr49_","gr49_","gr52_","gr52_","gr65_","gr66_","gr54_","gr52_","gr50_","gr49_","gr52_","gr25-","rc17_","rc19_","gr26_","gr51_","gr49_","gr56_","gr49_","gr53_","gr68_","gr54_","gr49_","gr55_","gr49_","gr71_","gr53_","gr51_","gr59_","gr56_","gr52_","gr56_","gr50_","gr49_","gr56_","gr50_","gr50_","gr55_","gr72_","gr55_","gr60_","gr53_","gr52_","gr52_","gr68_","gr54_","gr68_","gr54_","gr50_","gr61_","gr49_","gr50_","gr50_","gr69_","gr50_","gr54_","gr52_","gr49_","gr56_","gr53_","gr61_","gr54_","gr50_","gr55_","gr51_","gr51_","gr50_","gr54_","gr53_","gr56_","gr55_","gr50_","gr65_","gr52_","gr56_","gr35_","gr29|","gr28|","gr29|","gr28|","gr28|","gr30|","gr28|","gr28|","gr28|","gr29|","gr28|","gr31|","gr30|","gr30|","gr30|","gr28|","gr29|","gr31|","gr29|","gr31|","gr28|","gr28|","gr30|","gr29|","gr29|","gr28|","gr29|","gr31|","gr30|","gr29|","gr29|","gr29|","gr31|","gr30|","gr30|"],
|
||||
["gr51_","gr49_","gr49_","gr55_","gr50_","gr66_","gr53_","gr50_","gr66_","gr55_","gr55_","gr53_","gr56_","gr53_","gr51_","gr54_","gr59_","gr51_","gr50_","gr62_","gr53_","gr53_","gr51_","gr61_","gr54_","gr53_","gr69_","gr52_","gr49_","gr69_","gr54_","gr49_","gr52_","gr54_","gr71_","gr55_","gr68_","gr67_","gr54_","gr59_","gr55_","gr70_","gr50_","gr72_","gr26-","rc16_","rc19_","gr26_","gr56_","gr57_","gr55_","gr72_","gr55_","gr52_","gr53_","gr68_","gr55_","gr53_","gr70_","gr49_","gr49_","gr55_","gr71_","gr53_","gr53_","gr60_","gr49_","gr51_","gr54_","gr54_","gr66_","gr56_","gr52_","gr55_","gr57_","gr55_","gr56_","gr50_","gr53_","gr54_","gr52_","gr63_","gr55_","gr55_","gr49_","gr67_","gr51_","gr56_","gr54_","gr62_","gr51_","gr51_","gr72_","gr51_","gr52_","gr55_","gr53_","gr51_","gr55_","gr53_","gr55_","gr66_","gr49_","gr51_","gr55_","gr49_","gr51_","gr52_","gr24-","rc9_","rc21_","rc21_","rc20_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc20_","rc21_","rc21_","rc20_","rc21_","rc21_","rc20_","rc20_","rc21_","rc21_","rc21_","rc21_","rc21_","rc20_"],
|
||||
["gr50_","gr49_","gr56_","gr53_","gr58_","gr54_","gr56_","gr56_","gr52_","gr52_","gr61_","gr56_","gr52_","gr70_","gr54_","gr66_","gr50_","gr62_","gr51_","gr56_","gr55_","gr54_","gr49_","gr49_","gr68_","gr56_","gr49_","gr54_","gr51_","gr55_","gr65_","gr55_","gr60_","gr51_","gr49_","gr52_","gr49_","gr65_","gr55_","gr52_","gr50_","gr49_","gr52_","gr50_","gr26-","rc17_","rc18_","gr26_","gr55_","gr49_","gr50_","gr49_","gr70_","gr54_","gr50_","gr51_","gr53_","gr54_","gr53_","gr51_","gr72_","gr51_","gr49_","gr54_","gr53_","gr55_","gr54_","gr56_","gr55_","gr54_","gr50_","gr61_","gr55_","gr55_","gr69_","gr49_","gr54_","gr55_","gr54_","gr49_","gr52_","gr54_","gr52_","gr56_","gr68_","gr56_","gr54_","gr51_","gr54_","gr52_","gr52_","gr69_","gr52_","gr49_","gr52_","gr68_","gr53_","gr52_","gr54_","gr49_","gr69_","gr52_","gr55_","gr68_","gr51_","gr54_","gr50_","gr54_","gr27-","rc16_","rc3_","rc24_","rc22_","rc23_","rc27_","rc0_","rc25_","rc23_","rc22_","rc27_","rc5_","rc24_","rc23_","rc22_","rc27_","rc6_","rc25_","rc23_","rc22_","rc27_","rc5_","rc24_","rc23_","rc23_","rc27_","rc4_","rc24_","rc22_","rc22_","rc27_","rc2_","rc24_","rc22_","rc23_"],
|
||||
["gr59_","gr50_","gr51_","gr53_","gr54_","gr62_","gr56_","gr58_","gr69_","gr54_","gr52_","gr49_","gr49_","gr55_","gr51_","gr70_","gr51_","gr50_","gr71_","gr52_","gr54_","gr51_","gr53_","gr49_","gr49_","gr49_","gr53_","gr55_","gr54_","gr57_","gr53_","gr52_","gr54_","gr51_","gr55_","gr51_","gr50_","gr50_","gr54_","gr50_","gr59_","gr56_","gr53_","gr58_","gr27-","rc16_","rc19_","gr26_","gr50_","gr51_","gr49_","gr53_","gr58_","gr52_","gr68_","gr55_","gr51_","gr52_","gr60_","gr51_","gr56_","gr55_","gr68_","gr64_","gr55_","gr52_","gr70_","gr55_","gr53_","gr65_","gr63_","gr55_","gr72_","gr52_","gr49_","gr65_","gr52_","gr67_","gr56_","gr53_","gr55_","gr53_","gr54_","gr51_","gr69_","gr71_","gr55_","gr50_","gr52_","gr57_","gr53_","gr61_","gr56_","gr62_","gr53_","gr49_","gr64_","gr55_","gr65_","gr56_","gr56_","gr56_","gr52_","gr49_","gr53_","gr49_","gr56_","gr54_","gr25-","rc17_","rc1_","rc18_","dt3_","dt3-","rc17_","rc5_","rc18_","dt1_","dt2-","rc17_","rc4_","rc19_","sa3_","sa12_","rc17_","rc3_","rc18_","sa4_","sa4_","rc17_","rc5_","rc19_","sa4_","sa0_","rc16_","rc1_","rc18_","sa7_","sa7_","rc17_","rc0_","rc18_","dt0_","dt10_"]]
|
144
test/testdata/ObjectPropertyTest/underground_terrain.json
vendored
Normal file
144
test/testdata/ObjectPropertyTest/underground_terrain.json
vendored
Normal file
@ -0,0 +1,144 @@
|
||||
[["rc1_","rc7_","rc2_","rc7_","rc0_","rc7_","rc2_","rc5_","rc0_","rc7_","rc0_","rc4_","rc7_","rc1_","rc1_","rc2_","rc0_","rc6_","rc3_","rc7_","rc7_","rc2_","rc4_","rc7_","rc4_","rc5_","rc3_","rc2_","rc7_","rc1_","rc5_","rc0_","rc3_","rc0_","rc2_","rc0_","rc6_","rc6_","rc1_","rc2_","rc7_","rc0_","rc1_","rc4_","rc1_","rc3_","rc2_","rc2_","rc7_","rc7_","rc3_","rc2_","rc0_","rc5_","rc5_","rc7_","rc6_","rc7_","rc0_","rc4_","rc1_","rc0_","rc5_","rc3_","rc1_","rc4_","rc3_","rc6_","rc4_","rc1_","rc6_","rc6_","rc5_","rc5_","rc5_","rc2_","rc6_","rc1_","rc3_","rc3_","rc7_","rc7_","rc0_","rc5_","rc7_","rc1_","rc0_","rc0_","rc2_","rc2_","rc5_","rc0_","rc3_","rc0_","rc1_","rc2_","rc4_","rc2_","rc6_","rc1_","rc4_","rc6_","rc1_","rc7_","rc1_","rc7_","rc4_","rc7_","rc7_","rc5_","rc4_","rc3_","rc7_","rc5_","rc2_","rc1_","rc3_","rc3_","rc5_","rc4_","rc0_","rc5_","rc0_","rc0_","rc5_","rc2_","rc0_","rc5_","rc4_","rc2_","rc2_","rc0_","rc6_","rc7_","rc2_","rc7_","rc4_","rc5_","rc6_","rc3_","rc3_","rc6_","rc4_","rc3_"],
|
||||
["rc7_","rc2_","rc1_","rc6_","rc4_","rc5_","rc5_","rc1_","rc1_","rc0_","rc3_","rc2_","rc6_","rc5_","rc4_","rc4_","rc7_","rc5_","rc6_","rc5_","rc2_","rc4_","rc1_","rc4_","rc5_","rc0_","rc3_","rc6_","rc3_","rc5_","rc5_","rc3_","rc1_","rc5_","rc6_","rc4_","rc3_","rc6_","rc6_","rc0_","rc5_","rc4_","rc5_","rc0_","rc7_","rc1_","rc4_","rc7_","rc0_","rc2_","rc4_","rc6_","rc6_","rc4_","rc7_","rc7_","rc5_","rc6_","rc4_","rc0_","rc7_","rc1_","rc6_","rc2_","rc3_","rc6_","rc7_","rc3_","rc0_","rc6_","rc1_","rc1_","rc3_","rc0_","rc6_","rc0_","rc7_","rc6_","rc0_","rc5_","rc5_","rc1_","rc3_","rc4_","rc5_","rc7_","rc2_","rc7_","rc4_","rc1_","rc7_","rc0_","rc6_","rc2_","rc7_","rc1_","rc5_","rc5_","rc5_","rc2_","rc2_","rc6_","rc6_","rc3_","rc4_","rc4_","rc5_","rc3_","rc7_","rc5_","rc0_","rc0_","rc7_","rc3_","rc3_","rc7_","rc5_","rc5_","rc3_","rc6_","rc1_","rc1_","rc5_","rc0_","rc0_","rc0_","rc0_","rc1_","rc0_","rc3_","rc1_","rc2_","rc2_","rc5_","rc6_","rc0_","rc7_","rc1_","rc4_","rc0_","rc7_","rc5_","rc4_","rc6_"],
|
||||
["rc5_","rc6_","rc4_","rc6_","rc7_","rc7_","rc3_","rc2_","rc4_","rc4_","rc7_","rc6_","rc7_","rc4_","rc2_","rc0_","rc3_","rc7_","rc1_","rc3_","rc7_","rc3_","rc7_","rc6_","rc5_","rc5_","rc2_","rc1_","rc6_","rc7_","rc5_","rc0_","rc0_","rc5_","rc6_","rc3_","rc2_","rc4_","rc0_","rc4_","rc6_","rc4_","rc3_","rc3_","rc0_","rc5_","rc3_","rc6_","rc7_","rc1_","rc7_","rc5_","rc2_","rc1_","rc3_","rc6_","rc5_","rc3_","rc7_","rc4_","rc4_","rc1_","rc1_","rc5_","rc7_","rc5_","rc1_","rc4_","rc6_","rc4_","rc4_","rc4_","rc7_","rc1_","rc3_","rc6_","rc6_","rc4_","rc4_","rc5_","rc4_","rc2_","rc1_","rc0_","rc3_","rc6_","rc0_","rc0_","rc0_","rc0_","rc4_","rc2_","rc2_","rc5_","rc1_","rc7_","rc3_","rc0_","rc5_","rc2_","rc5_","rc0_","rc5_","rc2_","rc6_","rc1_","rc6_","rc1_","rc7_","rc7_","rc5_","rc4_","rc1_","rc1_","rc1_","rc3_","rc1_","rc2_","rc0_","rc3_","rc6_","rc6_","rc7_","rc3_","rc0_","rc3_","rc6_","rc4_","rc3_","rc5_","rc2_","rc5_","rc5_","rc7_","rc5_","rc5_","rc4_","rc6_","rc3_","rc2_","rc3_","rc0_","rc7_","rc2_"],
|
||||
["rc7_","rc6_","rc6_","rc0_","rc5_","rc6_","rc1_","rc1_","rc6_","rc4_","rc1_","rc7_","rc5_","rc1_","rc6_","rc5_","rc1_","rc4_","rc1_","rc5_","rc6_","rc1_","rc3_","rc7_","rc1_","rc7_","rc4_","rc2_","rc3_","rc7_","rc0_","rc0_","rc5_","rc1_","rc0_","rc5_","rc6_","rc1_","rc5_","rc0_","rc1_","rc2_","rc2_","rc5_","rc2_","rc1_","rc3_","rc2_","rc2_","rc6_","rc0_","rc1_","rc1_","rc7_","rc6_","rc6_","rc4_","rc5_","rc0_","rc1_","rc7_","rc2_","rc2_","rc6_","rc4_","rc3_","rc6_","rc3_","rc5_","rc3_","rc3_","rc1_","rc6_","rc1_","rc3_","rc7_","rc7_","rc3_","rc3_","rc3_","rc0_","rc2_","rc0_","rc2_","rc6_","rc0_","rc0_","rc3_","rc5_","rc7_","rc7_","rc7_","rc6_","rc3_","rc3_","rc3_","rc4_","rc3_","rc2_","rc1_","rc1_","rc5_","rc3_","rc4_","rc6_","rc0_","rc2_","rc3_","rc3_","rc5_","rc0_","rc0_","rc3_","rc0_","rc2_","rc1_","rc4_","rc4_","rc0_","rc6_","rc5_","rc5_","rc1_","rc4_","rc1_","rc2_","rc5_","rc1_","rc4_","rc2_","rc3_","rc1_","rc3_","rc6_","rc5_","rc1_","rc0_","rc7_","rc1_","rc2_","rc6_","rc1_","rc1_","rc0_"],
|
||||
["rc2_","rc1_","rc4_","rc4_","rc3_","rc3_","rc6_","rc6_","rc4_","rc0_","rc6_","rc7_","rc7_","rc5_","rc7_","rc6_","rc4_","rc7_","rc1_","rc1_","rc2_","rc6_","rc1_","rc7_","rc5_","rc7_","rc6_","rc4_","rc1_","rc7_","rc5_","rc4_","rc6_","rc4_","rc0_","rc3_","rc5_","rc6_","rc2_","rc5_","rc1_","rc6_","rc6_","rc1_","rc1_","rc6_","rc1_","rc3_","rc5_","rc2_","rc5_","rc3_","rc7_","rc5_","rc7_","rc0_","rc5_","rc7_","rc3_","rc0_","rc4_","rc5_","rc6_","rc4_","rc7_","rc1_","rc5_","rc0_","rc7_","rc4_","rc4_","rc1_","rc5_","rc1_","rc1_","rc2_","rc6_","rc4_","rc3_","rc0_","rc7_","rc3_","rc5_","rc4_","rc2_","rc4_","rc7_","rc2_","rc7_","rc7_","rc6_","rc0_","rc6_","rc5_","rc3_","rc0_","rc3_","rc1_","rc2_","rc1_","rc4_","rc6_","rc4_","rc3_","rc7_","rc1_","rc7_","rc2_","rc7_","rc0_","rc4_","rc5_","rc1_","rc3_","rc2_","rc7_","rc2_","rc2_","rc1_","rc6_","rc4_","rc0_","rc1_","rc2_","rc0_","rc6_","rc4_","rc0_","rc5_","rc3_","rc1_","rc7_","rc2_","rc2_","rc2_","rc3_","rc0_","rc5_","rc1_","rc1_","rc4_","rc1_","rc6_","rc2_"],
|
||||
["rc4_","rc1_","rc4_","rc3_","rc0_","rc0_","rc5_","rc3_","rc3_","rc1_","rc3_","rc7_","rc1_","rc1_","rc1_","rc3_","rc3_","rc7_","rc1_","rc2_","rc1_","rc2_","rc7_","rc0_","rc0_","rc5_","rc5_","rc6_","rc4_","rc7_","rc0_","rc6_","rc7_","rc6_","rc4_","rc7_","rc3_","rc4_","rc4_","rc3_","rc4_","rc2_","rc4_","rc7_","rc2_","rc5_","rc2_","rc3_","rc6_","rc6_","rc2_","rc2_","rc2_","rc6_","rc1_","rc4_","rc6_","rc1_","rc5_","rc2_","rc0_","rc2_","rc3_","rc2_","rc3_","rc0_","rc0_","rc5_","rc4_","rc0_","rc4_","rc4_","rc1_","rc3_","rc4_","rc2_","rc2_","rc2_","rc7_","rc6_","rc5_","rc6_","rc4_","rc7_","rc5_","rc5_","rc2_","rc5_","rc2_","rc2_","rc7_","rc6_","rc7_","rc3_","rc5_","rc6_","rc0_","rc1_","rc2_","rc3_","rc2_","rc4_","rc6_","rc0_","rc0_","rc5_","rc3_","rc7_","rc3_","rc0_","rc0_","rc5_","rc1_","rc2_","rc7_","rc0_","rc1_","rc7_","rc0_","rc4_","rc6_","rc7_","rc5_","rc7_","rc2_","rc1_","rc7_","rc2_","rc5_","rc1_","rc0_","rc1_","rc6_","rc6_","rc3_","rc5_","rc1_","rc7_","rc1_","rc7_","rc2_","rc0_","rc6_","rc7_"],
|
||||
["rc1_","rc7_","rc3_","rc7_","rc7_","rc4_","rc4_","rc1_","rc7_","rc0_","rc5_","rc0_","rc0_","rc5_","rc1_","rc6_","rc2_","rc6_","rc4_","rc1_","rc0_","rc0_","rc2_","rc3_","rc5_","rc2_","rc6_","rc3_","rc1_","rc1_","rc7_","rc6_","rc6_","rc7_","rc0_","rc2_","rc6_","rc5_","rc7_","rc4_","rc0_","rc6_","rc1_","rc0_","rc2_","rc5_","rc4_","rc1_","rc1_","rc2_","rc4_","rc2_","rc7_","rc2_","rc2_","rc4_","rc4_","rc5_","rc2_","rc0_","rc0_","rc3_","rc4_","rc0_","rc7_","rc1_","rc6_","rc2_","rc7_","rc0_","rc0_","rc5_","rc6_","rc0_","rc0_","rc6_","rc0_","rc3_","rc6_","rc4_","rc7_","rc4_","rc2_","rc3_","rc3_","rc2_","rc5_","rc6_","rc5_","rc0_","rc6_","rc1_","rc6_","rc7_","rc6_","rc6_","rc5_","rc5_","rc5_","rc6_","rc1_","rc0_","rc6_","rc3_","rc4_","rc6_","rc1_","rc3_","rc1_","rc7_","rc1_","rc7_","rc7_","rc5_","rc5_","rc5_","rc5_","rc2_","rc2_","rc3_","rc1_","rc3_","rc0_","rc5_","rc4_","rc4_","rc3_","rc0_","rc0_","rc4_","rc6_","rc0_","rc5_","rc2_","rc3_","rc7_","rc0_","rc0_","rc6_","rc7_","rc5_","rc7_","rc3_","rc2_"],
|
||||
["rc7_","rc4_","rc5_","rc0_","rc5_","rc1_","rc0_","rc1_","rc7_","rc7_","rc1_","rc3_","rc1_","rc2_","rc5_","rc6_","rc7_","rc5_","rc7_","rc6_","rc3_","rc0_","rc6_","rc1_","rc2_","rc7_","rc6_","rc2_","rc5_","rc5_","rc6_","rc5_","rc7_","rc1_","rc2_","rc4_","rc3_","rc0_","rc1_","rc1_","rc0_","rc3_","rc2_","rc4_","rc6_","rc2_","rc2_","rc0_","rc3_","rc1_","rc2_","rc1_","rc2_","rc1_","rc7_","rc1_","rc4_","rc2_","rc1_","rc3_","rc1_","rc1_","rc0_","rc7_","rc0_","rc5_","rc4_","rc0_","rc5_","rc6_","rc4_","rc2_","rc3_","rc7_","rc1_","rc0_","rc3_","rc3_","rc4_","rc5_","rc3_","rc6_","rc5_","rc1_","rc2_","rc6_","rc6_","rc6_","rc3_","rc2_","rc7_","rc4_","rc1_","rc1_","rc3_","rc2_","rc2_","rc6_","rc3_","rc5_","rc6_","rc3_","rc1_","rc6_","rc1_","rc4_","rc0_","rc7_","rc7_","rc5_","rc2_","rc6_","rc0_","rc6_","rc2_","rc6_","rc5_","rc6_","rc3_","rc2_","rc1_","rc6_","rc0_","rc3_","rc3_","rc7_","rc6_","rc4_","rc4_","rc7_","rc7_","rc4_","rc4_","rc7_","rc0_","rc3_","rc2_","rc1_","rc5_","rc1_","rc3_","rc1_","rc4_","rc3_"],
|
||||
["rc1_","rc0_","rc7_","rc0_","rc0_","rc1_","rc6_","rc3_","rc6_","rc6_","rc4_","rc1_","rc2_","rc2_","rc1_","rc6_","rc6_","rc5_","rc0_","rc3_","rc7_","rc3_","rc1_","rc2_","rc5_","rc6_","rc2_","rc5_","rc6_","rc5_","rc2_","rc4_","rc7_","rc5_","rc6_","rc6_","rc6_","rc7_","rc7_","rc2_","rc2_","rc2_","rc4_","rc6_","rc4_","rc3_","rc4_","rc0_","rc2_","rc2_","rc6_","rc2_","rc1_","rc6_","rc5_","rc3_","rc2_","rc4_","rc6_","rc4_","rc1_","rc4_","rc4_","rc1_","rc2_","rc4_","rc6_","rc1_","rc5_","rc1_","rc6_","rc7_","rc4_","rc3_","rc6_","rc2_","rc1_","rc1_","rc7_","rc1_","rc5_","rc5_","rc2_","rc3_","rc7_","rc1_","rc2_","rc6_","rc2_","rc1_","rc1_","rc6_","rc3_","rc3_","rc2_","rc1_","rc1_","rc5_","rc7_","rc1_","rc5_","rc6_","rc4_","rc2_","rc4_","rc0_","rc3_","rc4_","rc2_","rc4_","rc2_","rc2_","rc2_","rc6_","rc2_","rc4_","rc4_","rc2_","rc1_","rc3_","rc5_","rc0_","rc2_","rc3_","rc5_","rc4_","rc4_","rc6_","rc5_","rc1_","rc0_","rc6_","rc7_","rc7_","rc7_","rc2_","rc3_","rc1_","rc4_","rc5_","rc7_","rc4_","rc5_","rc4_"],
|
||||
["rc7_","rc6_","rc7_","rc7_","rc5_","rc3_","rc2_","rc1_","rc3_","rc6_","rc3_","rc3_","rc6_","rc6_","rc2_","rc6_","rc5_","rc7_","rc3_","rc0_","rc3_","rc2_","rc0_","rc0_","rc1_","rc7_","rc7_","rc5_","rc7_","rc2_","rc0_","rc5_","rc4_","rc4_","rc2_","rc2_","rc5_","rc4_","rc6_","rc1_","rc2_","rc5_","rc3_","rc6_","rc7_","rc2_","rc4_","rc2_","rc2_","rc7_","rc7_","rc6_","rc0_","rc1_","rc0_","rc5_","rc5_","rc1_","rc6_","rc4_","rc3_","rc5_","rc3_","rc5_","rc2_","rc0_","rc1_","rc6_","rc2_","rc4_","rc3_","rc3_","rc5_","rc4_","rc2_","rc3_","rc0_","rc6_","rc2_","rc1_","rc3_","rc1_","rc5_","rc1_","rc7_","rc4_","rc5_","rc7_","rc0_","rc7_","rc7_","rc2_","rc3_","rc6_","rc6_","rc6_","rc1_","rc3_","rc6_","rc2_","rc4_","rc2_","rc3_","rc7_","rc2_","rc4_","rc1_","rc3_","rc0_","rc4_","rc5_","rc5_","rc1_","rc6_","rc3_","rc1_","rc7_","rc1_","rc1_","rc6_","rc1_","rc2_","rc4_","rc7_","rc5_","rc3_","rc2_","rc7_","rc0_","rc4_","rc0_","rc0_","rc4_","rc1_","rc5_","rc5_","rc1_","rc3_","rc6_","rc6_","rc0_","rc4_","rc3_","rc4_"],
|
||||
["rc3_","rc5_","rc2_","rc6_","rc1_","rc2_","rc3_","rc4_","rc1_","rc1_","rc4_","rc2_","rc4_","rc6_","rc5_","rc7_","rc0_","rc3_","rc6_","rc6_","rc2_","rc6_","rc0_","rc4_","rc4_","rc3_","rc2_","rc4_","rc7_","rc4_","rc5_","rc7_","rc2_","rc6_","rc2_","rc0_","rc4_","rc6_","rc2_","rc7_","rc7_","rc4_","rc6_","rc4_","rc6_","rc7_","rc1_","rc7_","rc0_","rc1_","rc2_","rc5_","rc5_","rc3_","rc6_","rc6_","rc0_","rc4_","rc5_","rc4_","rc6_","rc6_","rc4_","rc6_","rc6_","rc2_","rc3_","rc6_","rc1_","rc6_","rc0_","rc0_","rc4_","rc4_","rc4_","rc5_","rc4_","rc4_","rc4_","rc7_","rc1_","rc4_","rc3_","rc5_","rc6_","rc0_","rc6_","rc1_","rc0_","rc5_","rc0_","rc0_","rc4_","rc2_","rc7_","rc1_","rc6_","rc0_","rc6_","rc2_","rc0_","rc1_","rc4_","rc7_","rc0_","rc0_","rc5_","rc5_","rc5_","rc7_","rc0_","rc6_","rc3_","rc7_","rc1_","rc6_","rc4_","rc3_","rc0_","rc5_","rc1_","rc6_","rc1_","rc6_","rc2_","rc6_","rc5_","rc0_","rc3_","rc1_","rc1_","rc2_","rc0_","rc7_","rc6_","rc4_","rc2_","rc0_","rc1_","rc3_","rc2_","rc0_","rc3_","rc6_"],
|
||||
["rc5_","rc7_","rc4_","rc7_","rc0_","rc6_","rc4_","rc4_","rc6_","rc7_","rc2_","rc7_","rc0_","rc4_","rc0_","rc2_","rc4_","rc3_","rc6_","rc7_","rc2_","rc1_","rc6_","rc7_","rc2_","rc4_","rc0_","rc1_","rc2_","rc5_","rc7_","rc5_","rc7_","rc6_","rc4_","rc2_","rc1_","rc0_","rc2_","rc5_","rc5_","rc1_","rc1_","rc3_","rc5_","rc3_","rc7_","rc0_","rc2_","rc0_","rc3_","rc1_","rc5_","rc5_","rc4_","rc7_","rc2_","rc5_","rc2_","rc5_","rc6_","rc0_","rc3_","rc4_","rc2_","rc3_","rc1_","rc5_","rc0_","rc2_","rc2_","rc7_","rc6_","rc3_","rc0_","rc1_","rc2_","rc4_","rc1_","rc2_","rc4_","rc0_","rc2_","rc7_","rc2_","rc6_","rc0_","rc5_","rc7_","rc2_","rc7_","rc0_","rc5_","rc0_","rc7_","rc3_","rc6_","rc7_","rc3_","rc1_","rc5_","rc2_","rc4_","rc3_","rc2_","rc5_","rc6_","rc3_","rc6_","rc6_","rc0_","rc0_","rc3_","rc1_","rc2_","rc3_","rc0_","rc1_","rc2_","rc1_","rc4_","rc4_","rc0_","rc2_","rc0_","rc6_","rc3_","rc2_","rc2_","rc0_","rc3_","rc6_","rc7_","rc2_","rc0_","rc1_","rc1_","rc7_","rc2_","rc7_","rc1_","rc1_","rc3_","rc2_"],
|
||||
["rc7_","rc5_","rc3_","rc3_","rc0_","rc0_","rc2_","rc3_","rc7_","rc1_","rc3_","rc2_","rc7_","rc1_","rc7_","rc1_","rc7_","rc0_","rc7_","rc3_","rc7_","rc2_","rc6_","rc1_","rc2_","rc2_","rc6_","rc6_","rc5_","rc6_","rc2_","rc7_","rc7_","rc3_","rc4_","rc0_","rc1_","rc2_","rc1_","rc3_","rc0_","rc3_","rc1_","rc2_","rc1_","rc1_","rc3_","rc7_","rc4_","rc7_","rc0_","rc2_","rc4_","rc1_","rc7_","rc2_","rc6_","rc5_","rc1_","rc0_","rc0_","rc3_","rc5_","rc1_","rc4_","rc4_","rc7_","rc2_","rc4_","rc7_","rc5_","rc0_","rc0_","rc2_","rc3_","rc0_","rc7_","rc6_","rc7_","rc5_","rc2_","rc3_","rc7_","rc1_","rc7_","rc7_","rc1_","rc6_","rc4_","rc1_","rc3_","rc4_","rc2_","rc3_","rc4_","rc6_","rc5_","rc7_","rc3_","rc0_","rc1_","rc0_","rc7_","rc4_","rc7_","rc4_","rc7_","rc5_","rc0_","rc1_","rc3_","rc3_","rc1_","rc6_","rc2_","rc1_","rc7_","rc4_","rc5_","rc3_","rc5_","rc5_","rc4_","rc4_","rc4_","rc3_","rc0_","rc7_","rc3_","rc4_","rc0_","rc4_","rc7_","rc4_","rc0_","rc5_","rc4_","rc3_","rc7_","rc1_","rc5_","rc1_","rc7_","rc1_"],
|
||||
["rc0_","rc0_","rc3_","rc2_","rc5_","rc1_","rc4_","rc2_","rc1_","rc1_","rc4_","rc6_","rc6_","rc5_","rc7_","rc3_","rc5_","rc3_","rc6_","rc4_","rc7_","rc3_","rc6_","rc4_","rc0_","rc7_","rc1_","rc4_","rc5_","rc7_","rc4_","rc7_","rc7_","rc7_","rc0_","rc3_","rc1_","rc5_","rc4_","rc3_","rc7_","rc5_","rc3_","rc3_","rc7_","rc0_","rc2_","rc4_","rc4_","rc5_","rc5_","rc1_","rc0_","rc6_","rc3_","rc1_","rc2_","rc6_","rc7_","rc5_","rc1_","rc1_","rc0_","rc4_","rc0_","rc5_","rc3_","rc6_","rc2_","rc0_","rc7_","rc6_","rc7_","rc2_","rc1_","rc3_","rc0_","rc4_","rc2_","rc0_","rc7_","rc1_","rc6_","rc3_","rc3_","rc4_","rc6_","rc3_","rc3_","rc2_","rc0_","rc6_","rc0_","rc1_","rc4_","rc1_","rc0_","rc2_","rc3_","rc1_","rc0_","rc3_","rc4_","rc2_","rc2_","rc7_","rc7_","rc6_","rc0_","rc2_","rc5_","rc0_","rc7_","rc0_","rc7_","rc2_","rc7_","rc5_","rc6_","rc3_","rc2_","rc2_","rc3_","rc5_","rc3_","rc7_","rc1_","rc6_","rc2_","rc4_","rc7_","rc5_","rc5_","rc5_","rc2_","rc0_","rc0_","rc5_","rc3_","rc4_","rc0_","rc1_","rc5_","rc4_"],
|
||||
["rc4_","rc0_","rc1_","rc5_","rc5_","rc2_","rc5_","rc2_","rc0_","rc7_","rc2_","rc3_","rc2_","rc1_","rc5_","rc3_","rc4_","rc5_","rc1_","rc2_","rc6_","rc6_","rc3_","rc0_","rc0_","rc2_","rc6_","rc4_","rc7_","rc1_","rc0_","rc4_","rc5_","rc3_","rc5_","rc5_","rc5_","rc2_","rc2_","rc6_","rc5_","rc0_","rc4_","rc0_","rc4_","rc1_","rc2_","rc0_","rc6_","rc4_","rc0_","rc0_","rc6_","rc6_","rc6_","rc2_","rc3_","rc0_","rc1_","rc7_","rc6_","rc3_","rc0_","rc0_","rc3_","rc1_","rc1_","rc3_","rc6_","rc5_","rc5_","rc7_","rc0_","rc5_","rc1_","rc3_","rc2_","rc7_","rc7_","rc4_","rc1_","rc2_","rc4_","rc6_","rc3_","rc6_","rc3_","rc6_","rc1_","rc7_","rc2_","rc5_","rc5_","rc6_","rc4_","rc7_","rc5_","rc0_","rc7_","rc4_","rc1_","rc3_","rc6_","rc7_","rc2_","rc7_","rc1_","rc6_","rc3_","rc1_","rc3_","rc1_","rc5_","rc6_","rc5_","rc6_","rc5_","rc5_","rc2_","rc3_","rc0_","rc5_","rc3_","rc6_","rc3_","rc2_","rc3_","rc2_","rc4_","rc2_","rc5_","rc3_","rc5_","rc5_","rc5_","rc4_","rc2_","rc4_","rc4_","rc7_","rc0_","rc1_","rc0_","rc5_"],
|
||||
["rc1_","rc0_","rc3_","rc6_","rc5_","rc4_","rc3_","rc3_","rc3_","rc4_","rc2_","rc2_","rc0_","rc7_","rc7_","rc1_","rc7_","rc7_","rc5_","rc7_","rc3_","rc2_","rc2_","rc0_","rc1_","rc6_","rc2_","rc7_","rc1_","rc6_","rc5_","rc1_","rc5_","rc0_","rc7_","rc7_","rc3_","rc2_","rc6_","rc4_","rc0_","rc4_","rc1_","rc0_","rc6_","rc6_","rc7_","rc4_","rc7_","rc5_","rc6_","rc7_","rc2_","rc3_","rc5_","rc1_","rc6_","rc5_","rc4_","rc6_","rc5_","rc1_","rc2_","rc5_","rc3_","rc7_","rc7_","rc1_","rc6_","rc7_","rc3_","rc7_","rc0_","rc3_","rc7_","rc1_","rc2_","rc7_","rc3_","rc3_","rc4_","rc6_","rc7_","rc4_","rc3_","rc6_","rc6_","rc0_","rc2_","rc0_","rc0_","rc3_","rc4_","rc1_","rc7_","rc0_","rc0_","rc4_","rc4_","rc3_","rc6_","rc3_","rc3_","rc4_","rc2_","rc3_","rc4_","rc5_","rc7_","rc0_","rc3_","rc5_","rc5_","rc1_","rc2_","rc6_","rc5_","rc6_","rc6_","rc4_","rc4_","rc7_","rc7_","rc0_","rc7_","rc6_","rc4_","rc3_","rc7_","rc7_","rc6_","rc7_","rc5_","rc7_","rc4_","rc2_","rc7_","rc3_","rc0_","rc4_","rc3_","rc3_","rc7_","rc4_"],
|
||||
["rc3_","rc7_","rc6_","rc5_","rc1_","rc0_","rc3_","rc7_","rc5_","rc2_","rc2_","rc3_","rc6_","rc0_","rc1_","rc7_","rc6_","rc1_","rc6_","rc3_","rc1_","rc2_","rc7_","rc3_","rc6_","rc4_","rc3_","rc6_","rc6_","rc7_","rc7_","rc6_","rc5_","rc7_","rc3_","rc1_","rc7_","rc6_","rc6_","rc7_","rc5_","rc2_","rc7_","rc5_","rc0_","rc0_","rc6_","rc2_","rc5_","rc1_","rc2_","rc0_","rc2_","rc4_","rc5_","rc5_","rc0_","rc5_","rc5_","rc2_","rc1_","rc4_","rc3_","rc4_","rc4_","rc1_","rc1_","rc1_","rc6_","rc7_","rc0_","rc5_","rc3_","rc6_","rc0_","rc6_","rc6_","rc5_","rc3_","rc4_","rc5_","rc7_","rc4_","rc6_","rc1_","rc6_","rc4_","rc1_","rc4_","rc6_","rc6_","rc2_","rc4_","rc3_","rc4_","rc5_","rc7_","rc5_","rc0_","rc7_","rc7_","rc3_","rc7_","rc1_","rc0_","rc6_","rc3_","rc6_","rc7_","rc0_","rc1_","rc7_","rc6_","rc4_","rc3_","rc4_","rc5_","rc7_","rc6_","rc7_","rc3_","rc7_","rc6_","rc4_","rc6_","rc3_","rc0_","rc3_","rc7_","rc4_","rc0_","rc1_","rc1_","rc3_","rc5_","rc3_","rc3_","rc3_","rc2_","rc4_","rc4_","rc7_","rc6_","rc2_"],
|
||||
["rc7_","rc7_","rc6_","rc4_","rc7_","rc7_","rc1_","rc6_","rc5_","rc1_","rc5_","rc1_","rc7_","rc5_","rc0_","rc4_","rc3_","rc5_","rc1_","rc7_","rc5_","rc6_","rc0_","rc2_","rc5_","rc4_","rc4_","rc2_","rc5_","rc4_","rc4_","rc4_","rc1_","rc0_","rc7_","rc4_","rc7_","rc7_","rc7_","rc0_","rc1_","rc3_","rc3_","rc0_","rc1_","rc7_","rc5_","rc1_","rc4_","rc1_","rc4_","rc3_","rc2_","rc4_","rc2_","rc0_","rc6_","rc1_","rc0_","rc6_","rc1_","rc7_","rc1_","rc6_","rc3_","rc0_","rc5_","rc5_","rc4_","rc6_","rc7_","rc3_","rc0_","rc6_","rc0_","rc3_","rc2_","rc3_","rc5_","rc2_","rc2_","rc6_","rc7_","rc4_","rc1_","rc5_","rc2_","rc3_","rc5_","rc2_","rc0_","rc1_","rc0_","rc6_","rc7_","rc0_","rc6_","rc6_","rc0_","rc7_","rc7_","rc4_","rc1_","rc0_","rc1_","rc0_","rc5_","rc0_","rc2_","rc1_","rc2_","rc7_","rc4_","rc6_","rc3_","rc1_","rc2_","rc2_","rc0_","rc4_","rc2_","rc0_","rc3_","rc3_","rc4_","rc3_","rc4_","rc1_","rc1_","rc2_","rc0_","rc2_","rc7_","rc1_","rc4_","rc7_","rc5_","rc3_","rc0_","rc0_","rc2_","rc7_","rc2_","rc0_"],
|
||||
["rc3_","rc1_","rc1_","rc3_","rc4_","rc2_","rc4_","rc3_","rc6_","rc2_","rc1_","rc3_","rc2_","rc5_","rc2_","rc3_","rc5_","rc4_","rc5_","rc6_","rc5_","rc6_","rc2_","rc0_","rc3_","rc7_","rc3_","rc3_","rc1_","rc7_","rc7_","rc4_","rc6_","rc5_","rc7_","rc2_","rc0_","rc6_","rc6_","rc7_","rc1_","rc1_","rc2_","rc3_","rc5_","rc5_","rc0_","rc4_","rc2_","rc5_","rc7_","rc2_","rc1_","rc3_","rc2_","rc2_","rc4_","rc2_","rc4_","rc1_","rc1_","rc0_","rc0_","rc4_","rc6_","rc4_","rc7_","rc6_","rc5_","rc5_","rc6_","rc2_","rc2_","rc4_","rc6_","rc1_","rc2_","rc2_","rc5_","rc5_","rc7_","rc4_","rc6_","rc7_","rc2_","rc6_","rc4_","rc7_","rc0_","rc6_","rc5_","rc2_","rc7_","rc3_","rc5_","rc0_","rc2_","rc6_","rc0_","rc6_","rc4_","rc7_","rc4_","rc2_","rc2_","rc3_","rc5_","rc6_","rc4_","rc4_","rc3_","rc6_","rc5_","rc2_","rc2_","rc5_","rc0_","rc1_","rc1_","rc5_","rc6_","rc2_","rc5_","rc5_","rc5_","rc7_","rc6_","rc0_","rc3_","rc1_","rc1_","rc4_","rc4_","rc4_","rc0_","rc0_","rc0_","rc6_","rc0_","rc2_","rc1_","rc4_","rc1_","rc7_"],
|
||||
["rc3_","rc5_","rc3_","rc4_","rc4_","rc3_","rc7_","rc5_","rc6_","rc7_","rc3_","rc4_","rc3_","rc4_","rc3_","rc4_","rc1_","rc7_","rc4_","rc6_","rc6_","rc5_","rc2_","rc4_","rc5_","rc6_","rc5_","rc4_","rc1_","rc1_","rc7_","rc0_","rc2_","rc7_","rc1_","rc3_","rc6_","rc4_","rc7_","rc6_","rc2_","rc4_","rc1_","rc5_","rc1_","rc2_","rc4_","rc3_","rc3_","rc7_","rc0_","rc5_","rc1_","rc1_","rc2_","rc5_","rc1_","rc2_","rc5_","rc6_","rc6_","rc3_","rc5_","rc0_","rc1_","rc0_","rc5_","rc4_","rc5_","rc5_","rc1_","rc2_","rc7_","rc1_","rc6_","rc0_","rc5_","rc2_","rc1_","rc7_","rc2_","rc2_","rc5_","rc1_","rc7_","rc1_","rc1_","rc5_","rc3_","rc2_","rc1_","rc6_","rc5_","rc2_","rc3_","rc0_","rc1_","rc7_","rc5_","rc5_","rc2_","rc5_","rc6_","rc7_","rc0_","rc7_","rc2_","rc7_","rc2_","rc3_","rc2_","rc6_","rc5_","rc7_","rc3_","rc1_","rc5_","rc3_","rc5_","rc2_","rc3_","rc7_","rc7_","rc5_","rc0_","rc7_","rc1_","rc0_","rc2_","rc4_","rc3_","rc7_","rc5_","rc4_","rc4_","rc7_","rc3_","rc4_","rc5_","rc1_","rc6_","rc6_","rc7_","rc1_"],
|
||||
["rc5_","rc6_","rc2_","rc7_","rc5_","rc1_","rc0_","rc5_","rc2_","rc0_","rc1_","rc3_","rc7_","rc1_","rc0_","rc0_","rc3_","rc7_","rc5_","rc2_","rc4_","rc3_","rc5_","rc0_","rc0_","rc3_","rc7_","rc5_","rc1_","rc2_","rc0_","rc7_","rc1_","rc7_","rc2_","rc1_","rc7_","rc3_","rc0_","rc6_","rc0_","rc5_","rc5_","rc0_","rc2_","rc0_","rc6_","rc0_","rc4_","rc1_","rc5_","rc6_","rc2_","rc1_","rc7_","rc2_","rc0_","rc1_","rc0_","rc4_","rc5_","rc7_","rc6_","rc2_","rc2_","rc3_","rc3_","rc0_","rc2_","rc7_","rc7_","rc5_","rc5_","rc7_","rc5_","rc3_","rc0_","rc5_","rc4_","rc7_","rc7_","rc0_","rc2_","rc2_","rc5_","rc6_","rc4_","rc7_","rc3_","rc0_","rc0_","rc6_","rc7_","rc5_","rc7_","rc0_","rc7_","rc1_","rc5_","rc4_","rc7_","rc7_","rc3_","rc2_","rc7_","rc5_","rc0_","rc6_","rc1_","rc7_","rc3_","rc6_","rc1_","rc7_","rc3_","rc7_","rc6_","rc3_","rc2_","rc6_","rc0_","rc7_","rc0_","rc3_","rc2_","rc5_","rc4_","rc2_","rc1_","rc2_","rc1_","rc5_","rc6_","rc3_","rc6_","rc4_","rc1_","rc7_","rc5_","rc7_","rc6_","rc7_","rc1_","rc5_"],
|
||||
["rc5_","rc3_","rc2_","rc5_","rc4_","rc7_","rc3_","rc6_","rc7_","rc6_","rc6_","rc2_","rc3_","rc6_","rc6_","rc0_","rc0_","rc4_","rc5_","rc2_","rc6_","rc1_","rc7_","rc4_","rc1_","rc6_","rc6_","rc7_","rc7_","rc3_","rc0_","rc4_","rc0_","rc6_","rc6_","rc4_","rc0_","rc2_","rc6_","rc0_","rc2_","rc6_","rc3_","rc5_","rc5_","rc0_","rc3_","rc2_","rc3_","rc1_","rc2_","rc5_","rc7_","rc3_","rc6_","rc2_","rc7_","rc1_","rc2_","rc5_","rc3_","rc5_","rc6_","rc3_","rc5_","rc7_","rc7_","rc4_","rc1_","rc5_","rc3_","rc4_","rc7_","rc6_","rc0_","rc2_","rc6_","rc4_","rc5_","rc0_","rc3_","rc1_","rc1_","rc4_","rc2_","rc0_","rc3_","rc6_","rc4_","rc0_","rc1_","rc3_","rc3_","rc4_","rc5_","rc1_","rc2_","rc7_","rc5_","rc5_","rc0_","rc7_","rc2_","rc1_","rc6_","rc6_","rc3_","rc2_","rc6_","rc1_","rc3_","rc1_","rc7_","rc2_","rc0_","rc0_","rc7_","rc1_","rc6_","rc7_","rc0_","rc3_","rc3_","rc7_","rc6_","rc1_","rc4_","rc0_","rc7_","rc5_","rc0_","rc6_","rc4_","rc0_","rc3_","rc1_","rc0_","rc7_","rc6_","rc5_","rc6_","rc7_","rc5_","rc6_"],
|
||||
["rc0_","rc6_","rc1_","rc0_","rc5_","rc5_","rc7_","rc7_","rc2_","rc3_","rc0_","rc3_","rc5_","rc3_","rc2_","rc6_","rc6_","rc1_","rc0_","rc0_","rc6_","rc0_","rc6_","rc2_","rc4_","rc0_","rc0_","rc2_","rc6_","rc6_","rc2_","rc7_","rc5_","rc5_","rc2_","rc6_","rc5_","rc4_","rc6_","rc4_","rc3_","rc7_","rc0_","rc5_","rc7_","rc2_","rc1_","rc4_","rc4_","rc3_","rc5_","rc3_","rc6_","rc0_","rc3_","rc5_","rc3_","rc1_","rc0_","rc3_","rc5_","rc7_","rc4_","rc4_","rc7_","rc5_","rc5_","rc0_","rc6_","rc6_","rc3_","rc7_","rc2_","rc0_","rc4_","rc5_","rc5_","rc7_","rc0_","rc2_","rc4_","rc4_","rc7_","rc7_","rc3_","rc7_","rc2_","rc2_","rc5_","rc3_","rc0_","rc6_","rc4_","rc1_","rc2_","rc5_","rc6_","rc0_","rc1_","rc0_","rc1_","rc4_","rc6_","rc0_","rc0_","rc4_","rc2_","rc5_","rc7_","rc1_","rc7_","rc7_","rc3_","rc3_","rc7_","rc4_","rc6_","rc5_","rc3_","rc1_","rc1_","rc5_","rc7_","rc4_","rc2_","rc5_","rc4_","rc1_","rc1_","rc5_","rc6_","rc4_","rc6_","rc5_","rc7_","rc7_","rc5_","rc5_","rc3_","rc4_","rc4_","rc0_","rc6_","rc4_"],
|
||||
["rc4_","rc0_","rc3_","rc1_","rc6_","rc3_","rc7_","rc2_","rc0_","rc7_","rc5_","rc5_","rc0_","rc2_","rc2_","rc2_","rc1_","rc5_","rc4_","rc4_","rc4_","rc1_","rc7_","rc3_","rc0_","rc3_","rc0_","rc1_","rc5_","rc4_","rc5_","rc2_","rc5_","rc4_","rc4_","rc7_","rc4_","rc0_","rc4_","rc4_","rc1_","rc1_","rc2_","rc1_","rc6_","rc0_","rc4_","rc6_","rc5_","rc7_","rc3_","rc2_","rc3_","rc1_","rc4_","rc6_","rc2_","rc4_","rc7_","rc5_","rc1_","rc6_","rc5_","rc7_","rc6_","rc6_","rc3_","rc6_","rc7_","rc5_","rc4_","rc0_","rc5_","rc4_","rc6_","rc7_","rc3_","rc7_","rc3_","rc6_","rc6_","rc3_","rc3_","rc5_","rc4_","rc4_","rc0_","rc6_","rc2_","rc2_","rc2_","rc0_","rc1_","rc5_","rc4_","rc3_","rc0_","rc6_","rc7_","rc6_","rc0_","rc0_","rc5_","rc6_","rc4_","rc7_","rc1_","rc0_","rc7_","rc0_","rc5_","rc1_","rc3_","rc1_","rc4_","rc4_","rc7_","rc2_","rc1_","rc4_","rc0_","rc5_","rc7_","rc2_","rc4_","rc1_","rc3_","rc0_","rc3_","rc5_","rc7_","rc7_","rc7_","rc3_","rc1_","rc6_","rc5_","rc3_","rc3_","rc4_","rc3_","rc2_","rc3_","rc1_"],
|
||||
["rc5_","rc2_","rc6_","rc0_","rc3_","rc4_","rc1_","rc7_","rc6_","rc3_","rc0_","rc2_","rc3_","rc3_","rc2_","rc5_","rc6_","rc2_","rc5_","rc0_","rc3_","rc6_","rc6_","rc0_","rc0_","rc7_","rc4_","rc3_","rc7_","rc5_","rc6_","rc4_","rc3_","rc5_","rc1_","rc1_","rc1_","rc1_","rc6_","rc1_","rc2_","rc6_","rc4_","rc1_","rc5_","rc2_","rc2_","rc1_","rc2_","rc5_","rc0_","rc3_","rc4_","rc7_","rc6_","rc3_","rc7_","rc3_","rc4_","rc5_","rc2_","rc2_","rc4_","rc3_","rc6_","rc3_","rc5_","rc6_","rc1_","rc1_","rc2_","rc0_","rc4_","rc5_","rc2_","rc0_","rc3_","rc6_","rc1_","rc5_","rc6_","rc7_","rc7_","rc6_","rc3_","rc0_","rc0_","rc1_","rc7_","rc7_","rc4_","rc2_","rc5_","rc0_","rc7_","rc6_","rc6_","rc2_","rc3_","rc1_","rc2_","rc5_","rc4_","rc5_","rc5_","rc1_","rc4_","rc5_","rc5_","rc0_","rc1_","rc1_","rc3_","rc7_","rc4_","rc2_","rc0_","rc0_","rc3_","rc0_","rc2_","rc4_","rc2_","rc1_","rc0_","rc7_","rc5_","rc5_","rc2_","rc5_","rc1_","rc0_","rc4_","rc4_","rc4_","rc0_","rc5_","rc1_","rc1_","rc0_","rc2_","rc7_","rc0_","rc4_"],
|
||||
["rc0_","rc5_","rc6_","rc6_","rc3_","rc0_","rc1_","rc1_","rc0_","rc1_","rc7_","rc3_","rc2_","rc0_","rc0_","rc0_","rc3_","rc1_","rc0_","rc4_","rc0_","rc6_","rc2_","rc1_","rc3_","rc5_","rc1_","rc3_","rc3_","rc3_","rc0_","rc0_","rc6_","rc1_","rc5_","rc4_","rc2_","rc7_","rc1_","rc3_","rc1_","rc6_","rc4_","rc0_","rc3_","rc2_","rc6_","rc6_","rc0_","rc0_","rc1_","rc5_","rc6_","rc3_","rc5_","rc0_","rc7_","rc5_","rc4_","rc4_","rc7_","rc5_","rc0_","rc3_","rc5_","rc4_","rc1_","rc2_","rc0_","rc5_","rc3_","rc0_","rc4_","rc4_","rc7_","rc0_","rc4_","rc5_","rc1_","rc0_","rc2_","rc1_","rc3_","rc3_","rc5_","rc4_","rc0_","rc4_","rc3_","rc2_","rc2_","rc5_","rc7_","rc4_","rc0_","rc6_","rc4_","rc5_","rc2_","rc1_","rc3_","rc2_","rc7_","rc6_","rc1_","rc2_","rc2_","rc3_","rc5_","rc2_","rc0_","rc6_","rc0_","rc4_","rc5_","rc6_","rc6_","rc0_","rc0_","rc6_","rc4_","rc3_","rc4_","rc4_","rc3_","rc0_","rc0_","rc1_","rc4_","rc5_","rc0_","rc1_","rc3_","rc7_","rc5_","rc6_","rc1_","rc0_","rc4_","rc0_","rc5_","rc0_","rc3_","rc0_"],
|
||||
["rc3_","rc1_","rc1_","rc5_","rc0_","rc0_","rc6_","rc6_","rc5_","rc1_","rc0_","rc1_","rc2_","rc2_","rc7_","rc4_","rc4_","rc3_","rc4_","rc2_","rc2_","rc3_","rc6_","rc0_","rc4_","rc7_","rc4_","rc0_","rc5_","rc7_","rc2_","rc6_","rc3_","rc1_","rc6_","rc1_","rc4_","rc3_","rc2_","rc4_","rc4_","rc3_","rc7_","rc6_","rc4_","rc0_","rc7_","rc7_","rc5_","rc7_","rc4_","rc4_","rc5_","rc7_","rc0_","rc4_","rc1_","rc6_","rc4_","rc3_","rc4_","rc7_","rc5_","rc7_","rc7_","rc4_","rc4_","rc2_","rc2_","rc1_","rc4_","rc0_","rc1_","rc1_","rc1_","rc1_","rc2_","rc5_","rc7_","rc1_","rc6_","rc1_","rc1_","rc6_","rc7_","rc1_","rc4_","rc2_","rc1_","rc5_","rc3_","rc1_","rc3_","rc1_","rc4_","rc5_","rc0_","rc0_","rc2_","rc0_","rc1_","rc2_","rc5_","rc1_","rc5_","rc3_","rc7_","rc4_","rc4_","rc6_","rc0_","rc3_","rc0_","rc2_","rc4_","rc1_","rc5_","rc3_","rc3_","rc1_","rc3_","rc4_","rc1_","rc2_","rc2_","rc4_","rc7_","rc6_","rc5_","rc7_","rc2_","rc3_","rc1_","rc7_","rc3_","rc1_","rc0_","rc2_","rc7_","rc5_","rc1_","rc5_","rc0_","rc5_"],
|
||||
["rc3_","rc1_","rc3_","rc5_","rc2_","rc5_","rc3_","rc2_","rc0_","rc4_","rc6_","rc5_","rc0_","rc1_","rc6_","rc3_","rc7_","rc0_","rc3_","rc2_","rc3_","rc7_","rc7_","rc6_","rc1_","rc5_","rc3_","rc5_","rc2_","rc1_","rc0_","rc7_","rc6_","rc6_","rc0_","rc2_","rc4_","rc5_","rc5_","rc5_","rc7_","rc4_","rc2_","rc4_","rc5_","rc6_","rc2_","rc3_","rc5_","rc4_","rc5_","rc6_","rc7_","rc2_","rc2_","rc1_","rc1_","rc4_","rc1_","rc3_","rc6_","rc2_","rc0_","rc1_","rc1_","rc2_","rc1_","rc0_","rc3_","rc5_","rc2_","rc2_","rc2_","rc5_","rc5_","rc5_","rc2_","rc6_","rc1_","rc0_","rc0_","rc1_","rc1_","rc0_","rc4_","rc1_","rc3_","rc2_","rc7_","rc0_","rc3_","rc1_","rc6_","rc1_","rc1_","rc2_","rc6_","rc4_","rc0_","rc6_","rc0_","rc5_","rc1_","rc1_","rc6_","rc5_","rc0_","rc1_","rc7_","rc6_","rc4_","rc0_","rc7_","rc1_","rc5_","rc5_","rc3_","rc3_","rc1_","rc0_","rc4_","rc7_","rc0_","rc5_","rc2_","rc5_","rc1_","rc3_","rc2_","rc4_","rc4_","rc6_","rc3_","rc3_","rc1_","rc1_","rc5_","rc7_","rc1_","rc0_","rc3_","rc0_","rc4_","rc4_"],
|
||||
["rc3_","rc4_","rc2_","rc0_","rc4_","rc0_","rc6_","rc4_","rc7_","rc4_","rc0_","rc0_","rc1_","rc6_","rc1_","rc4_","rc0_","rc2_","rc5_","rc6_","rc3_","rc1_","rc4_","rc3_","rc7_","rc0_","rc1_","rc1_","rc7_","rc3_","rc7_","rc4_","rc4_","rc1_","rc0_","rc0_","rc6_","rc0_","rc1_","rc7_","rc1_","rc4_","rc2_","rc2_","rc3_","rc5_","rc2_","rc5_","rc5_","rc7_","rc3_","rc7_","rc1_","rc7_","rc1_","rc7_","rc3_","rc2_","rc0_","rc5_","rc3_","rc7_","rc7_","rc0_","rc1_","rc0_","rc0_","rc4_","rc1_","rc4_","rc2_","rc7_","rc2_","rc1_","rc0_","rc3_","rc2_","rc1_","rc3_","rc6_","rc4_","rc2_","rc5_","rc0_","rc4_","rc3_","rc0_","rc5_","rc2_","rc4_","rc7_","rc5_","rc6_","rc5_","rc2_","rc0_","rc3_","rc1_","rc0_","rc5_","rc6_","rc4_","rc0_","rc4_","rc1_","rc2_","rc1_","rc3_","rc3_","rc2_","rc3_","rc6_","rc3_","rc4_","rc5_","rc3_","rc5_","rc7_","rc1_","rc5_","rc3_","rc6_","rc4_","rc7_","rc0_","rc3_","rc2_","rc3_","rc1_","rc5_","rc2_","rc3_","rc5_","rc6_","rc5_","rc0_","rc7_","rc0_","rc5_","rc1_","rc1_","rc1_","rc4_","rc7_"],
|
||||
["rc2_","rc4_","rc2_","rc6_","rc3_","rc2_","rc4_","rc6_","rc7_","rc1_","rc1_","rc3_","rc2_","rc4_","rc6_","rc2_","rc4_","rc3_","rc4_","rc6_","rc5_","rc4_","rc0_","rc1_","rc3_","rc2_","rc4_","rc6_","rc1_","rc5_","rc5_","rc7_","rc3_","rc2_","rc5_","rc2_","rc7_","rc5_","rc1_","rc2_","rc6_","rc4_","rc5_","rc3_","rc4_","rc5_","rc6_","rc5_","rc3_","rc3_","rc0_","rc5_","rc7_","rc5_","rc2_","rc1_","rc6_","rc0_","rc7_","rc2_","rc6_","rc6_","rc6_","rc7_","rc3_","rc6_","rc4_","rc7_","rc1_","rc6_","rc0_","rc7_","rc7_","rc7_","rc7_","rc5_","rc5_","rc0_","rc2_","rc4_","rc7_","rc5_","rc5_","rc2_","rc2_","rc2_","rc1_","rc6_","rc7_","rc2_","rc4_","rc5_","rc6_","rc5_","rc7_","rc7_","rc5_","rc1_","rc0_","rc5_","rc0_","rc7_","rc1_","rc6_","rc3_","rc2_","rc1_","rc3_","rc6_","rc4_","rc2_","rc7_","rc0_","rc2_","rc3_","rc3_","rc7_","rc1_","rc6_","rc1_","rc7_","rc1_","rc4_","rc7_","rc1_","rc0_","rc0_","rc6_","rc6_","rc2_","rc1_","rc4_","rc5_","rc0_","rc4_","rc7_","rc1_","rc6_","rc2_","rc3_","rc6_","rc2_","rc6_","rc5_"],
|
||||
["rc5_","rc2_","rc1_","rc1_","rc6_","rc4_","rc1_","rc1_","rc5_","rc4_","rc7_","rc7_","rc1_","rc2_","rc1_","rc6_","rc1_","rc2_","rc0_","rc3_","rc7_","rc0_","rc2_","rc1_","rc2_","rc3_","rc2_","rc6_","rc6_","rc1_","rc6_","rc0_","rc7_","rc3_","rc1_","rc4_","rc6_","rc3_","rc2_","rc0_","rc2_","rc3_","rc6_","rc7_","rc3_","rc0_","rc2_","rc5_","rc4_","rc7_","rc3_","rc3_","rc7_","rc7_","rc1_","rc6_","rc5_","rc7_","rc1_","rc3_","rc5_","rc1_","rc2_","rc6_","rc5_","rc7_","rc2_","rc3_","rc7_","rc4_","rc2_","rc4_","rc6_","rc7_","rc7_","rc5_","rc2_","rc4_","rc3_","rc4_","rc7_","rc3_","rc4_","rc4_","rc4_","rc5_","rc2_","rc4_","rc3_","rc4_","rc7_","rc4_","rc4_","rc2_","rc2_","rc0_","rc0_","rc5_","rc4_","rc0_","rc3_","rc1_","rc7_","rc6_","rc0_","rc7_","rc4_","rc2_","rc3_","rc5_","rc4_","rc3_","rc3_","rc6_","rc1_","rc6_","rc7_","rc3_","rc6_","rc4_","rc3_","rc1_","rc4_","rc7_","rc3_","rc5_","rc6_","rc5_","rc7_","rc6_","rc7_","rc1_","rc7_","rc2_","rc3_","rc6_","rc1_","rc3_","rc3_","rc5_","rc1_","rc3_","rc5_","rc1_"],
|
||||
["rc0_","rc6_","rc4_","rc1_","rc0_","rc0_","rc3_","rc6_","rc6_","rc7_","rc0_","rc5_","rc1_","rc1_","rc7_","rc7_","rc3_","rc0_","rc3_","rc7_","rc6_","rc5_","rc4_","rc4_","rc0_","rc4_","rc6_","rc0_","rc2_","rc7_","rc7_","rc0_","rc5_","rc5_","rc3_","rc4_","rc6_","rc4_","rc3_","rc1_","rc4_","rc4_","rc3_","rc6_","rc7_","rc6_","rc3_","rc4_","rc3_","rc5_","rc1_","rc2_","rc5_","rc4_","rc4_","rc7_","rc6_","rc1_","rc4_","rc1_","rc6_","rc0_","rc0_","rc6_","rc3_","rc2_","rc0_","rc1_","rc1_","rc0_","rc5_","rc7_","rc4_","rc2_","rc5_","rc2_","rc4_","rc5_","rc3_","rc5_","rc0_","rc5_","rc7_","rc2_","rc7_","rc7_","rc2_","rc1_","rc2_","rc2_","rc5_","rc1_","rc6_","rc6_","rc2_","rc4_","rc1_","rc6_","rc2_","rc6_","rc3_","rc2_","rc0_","rc6_","rc7_","rc1_","rc7_","rc0_","rc1_","rc5_","rc0_","rc2_","rc2_","rc7_","rc6_","rc6_","rc2_","rc4_","rc6_","rc0_","rc5_","rc0_","rc0_","rc0_","rc2_","rc2_","rc3_","rc2_","rc0_","rc0_","rc1_","rc4_","rc1_","rc5_","rc6_","rc7_","rc4_","rc0_","rc7_","rc2_","rc5_","rc6_","rc0_","rc3_"],
|
||||
["rc0_","rc3_","rc7_","rc0_","rc6_","rc5_","rc7_","rc5_","rc7_","rc1_","rc7_","rc6_","rc1_","rc3_","rc5_","rc7_","rc7_","rc0_","rc5_","rc3_","rc6_","rc6_","rc6_","rc2_","rc4_","rc7_","rc6_","rc6_","rc1_","rc1_","rc5_","rc0_","rc3_","rc1_","rc0_","rc6_","rc4_","rc1_","rc7_","rc0_","rc7_","rc0_","rc1_","rc3_","rc4_","rc1_","rc6_","rc5_","rc7_","rc7_","rc6_","rc2_","rc0_","rc7_","rc0_","rc7_","rc6_","rc6_","rc5_","rc5_","rc5_","rc5_","rc6_","rc0_","rc2_","rc2_","rc3_","rc1_","rc4_","rc1_","rc5_","rc0_","rc6_","rc2_","rc6_","rc6_","rc2_","rc5_","rc0_","rc2_","rc0_","rc3_","rc4_","rc2_","rc7_","rc7_","rc4_","rc5_","rc3_","rc6_","rc2_","rc7_","rc0_","rc2_","rc3_","rc4_","rc6_","rc5_","rc6_","rc0_","rc5_","rc4_","rc1_","rc7_","rc3_","rc1_","rc6_","rc0_","rc4_","rc6_","rc2_","rc7_","rc1_","rc7_","rc7_","rc4_","rc4_","rc7_","rc2_","rc6_","rc3_","rc5_","rc7_","rc3_","rc3_","rc1_","rc3_","rc4_","rc6_","rc2_","rc3_","rc5_","rc0_","rc2_","rc3_","rc3_","rc7_","rc4_","rc2_","rc1_","rc1_","rc4_","rc4_","rc4_"],
|
||||
["rc3_","rc0_","rc7_","rc6_","rc7_","rc6_","rc2_","rc0_","rc5_","rc6_","rc3_","rc3_","rc5_","rc1_","rc0_","rc0_","rc3_","rc2_","rc1_","rc6_","rc4_","rc3_","rc4_","rc5_","rc1_","rc3_","rc0_","rc1_","rc2_","rc0_","rc6_","rc1_","rc5_","rc0_","rc4_","rc0_","rc7_","rc4_","rc4_","rc4_","rc1_","rc6_","rc6_","rc5_","rc7_","rc2_","rc1_","rc0_","rc5_","rc3_","rc7_","rc5_","rc2_","rc0_","rc2_","rc5_","rc2_","rc7_","rc1_","rc0_","rc7_","rc0_","rc0_","rc6_","rc0_","rc6_","rc7_","rc4_","rc4_","rc1_","rc1_","rc1_","rc1_","rc7_","rc7_","rc2_","rc0_","rc4_","rc6_","rc3_","rc3_","rc0_","rc7_","rc0_","rc2_","rc0_","rc6_","rc3_","rc2_","rc7_","rc5_","rc5_","rc7_","rc7_","rc2_","rc2_","rc3_","rc2_","rc6_","rc0_","rc0_","rc6_","rc7_","rc1_","rc2_","rc0_","rc0_","rc2_","rc1_","rc0_","rc7_","rc3_","rc6_","rc6_","rc0_","rc7_","rc3_","rc3_","rc0_","rc6_","rc0_","rc4_","rc5_","rc2_","rc3_","rc2_","rc4_","rc6_","rc7_","rc5_","rc2_","rc6_","rc1_","rc2_","rc7_","rc2_","rc7_","rc2_","rc0_","rc5_","rc1_","rc5_","rc4_","rc6_"],
|
||||
["rc5_","rc7_","rc2_","rc4_","rc6_","rc2_","rc1_","rc7_","rc4_","rc4_","rc7_","rc5_","rc2_","rc3_","rc6_","rc2_","rc4_","rc6_","rc4_","rc4_","rc7_","rc5_","rc2_","rc6_","rc5_","rc4_","rc7_","rc2_","rc1_","rc4_","rc6_","rc5_","rc1_","rc2_","rc5_","rc5_","rc2_","rc4_","rc7_","rc6_","rc7_","rc1_","rc5_","rc6_","rc5_","rc1_","rc0_","rc6_","rc1_","rc5_","rc2_","rc2_","rc3_","rc0_","rc6_","rc3_","rc7_","rc6_","rc5_","rc3_","rc1_","rc3_","rc3_","rc7_","rc1_","rc0_","rc1_","rc4_","rc7_","rc1_","rc4_","rc3_","rc1_","rc3_","rc5_","rc7_","rc3_","rc4_","rc3_","rc2_","rc6_","rc3_","rc6_","rc2_","rc4_","rc2_","rc5_","rc1_","rc3_","rc0_","rc2_","rc6_","rc0_","rc4_","rc4_","rc6_","rc6_","rc7_","rc6_","rc7_","rc7_","rc2_","rc6_","rc6_","rc1_","rc0_","rc1_","rc7_","rc5_","rc5_","rc5_","rc5_","rc4_","rc7_","rc7_","rc3_","rc3_","rc3_","rc5_","rc2_","rc2_","rc3_","rc7_","rc4_","rc7_","rc7_","rc2_","rc0_","rc7_","rc2_","rc4_","rc7_","rc0_","rc6_","rc7_","rc7_","rc0_","rc2_","rc0_","rc5_","rc2_","rc3_","rc7_","rc0_"],
|
||||
["rc3_","rc1_","rc4_","rc4_","rc0_","rc4_","rc0_","rc5_","rc3_","rc6_","rc2_","rc4_","rc5_","rc2_","rc3_","rc6_","rc5_","rc6_","rc4_","rc3_","rc2_","rc5_","rc6_","rc5_","rc6_","rc0_","rc2_","rc2_","rc3_","rc6_","rc2_","rc3_","rc3_","rc2_","rc7_","rc6_","rc2_","rc4_","rc5_","rc1_","rc6_","rc2_","rc4_","rc0_","rc3_","rc7_","rc1_","rc0_","rc0_","rc5_","rc4_","rc5_","rc6_","rc0_","rc3_","rc1_","rc2_","rc3_","rc6_","rc6_","rc0_","rc7_","rc4_","rc6_","rc2_","rc0_","rc7_","rc1_","rc2_","rc3_","rc4_","rc7_","rc5_","rc5_","rc6_","rc6_","rc0_","rc6_","rc2_","rc6_","rc7_","rc6_","rc5_","rc3_","rc3_","rc6_","rc5_","rc3_","rc4_","rc2_","rc6_","rc1_","rc0_","rc5_","rc7_","rc1_","rc3_","rc6_","rc4_","rc5_","rc7_","rc1_","rc5_","rc7_","rc5_","rc1_","rc6_","rc7_","rc5_","rc5_","rc0_","rc0_","rc3_","rc1_","rc0_","rc6_","rc3_","rc7_","rc6_","rc3_","rc5_","rc5_","rc1_","rc3_","rc4_","rc0_","rc2_","rc3_","rc4_","rc1_","rc6_","rc1_","rc2_","rc7_","rc7_","rc0_","rc1_","rc6_","rc5_","rc3_","rc2_","rc6_","rc1_","rc5_"],
|
||||
["rc3_","rc7_","rc3_","rc6_","rc3_","rc3_","rc5_","rc1_","rc5_","rc4_","rc7_","rc3_","rc3_","rc1_","rc4_","rc6_","rc5_","rc3_","rc5_","rc7_","rc3_","rc4_","rc4_","rc4_","rc7_","rc2_","rc4_","rc2_","rc6_","rc1_","rc7_","rc6_","rc0_","rc7_","rc0_","rc3_","rc5_","rc3_","rc2_","rc4_","rc3_","rc0_","rc0_","rc2_","rc6_","rc7_","rc7_","rc0_","rc0_","rc3_","rc1_","rc5_","rc1_","rc1_","rc4_","rc1_","rc7_","rc7_","rc2_","rc4_","rc1_","rc4_","rc1_","rc3_","rc1_","rc1_","rc6_","rc5_","rc1_","rc6_","rc5_","rc5_","rc0_","rc0_","rc5_","rc0_","rc5_","rc2_","rc2_","rc2_","rc2_","rc2_","rc2_","rc4_","rc4_","rc5_","rc5_","rc0_","rc2_","rc5_","rc6_","rc0_","rc5_","rc1_","rc7_","rc4_","rc7_","rc6_","rc4_","rc3_","rc7_","rc5_","rc7_","rc4_","rc3_","rc5_","rc4_","rc5_","rc7_","rc2_","rc5_","rc4_","rc5_","rc6_","rc1_","rc3_","rc5_","rc0_","rc0_","rc1_","rc0_","rc2_","rc2_","rc7_","rc7_","rc7_","rc1_","rc1_","rc2_","rc5_","rc4_","rc6_","rc6_","rc7_","rc6_","rc1_","rc5_","rc6_","rc6_","rc1_","rc4_","rc0_","rc0_","rc5_"],
|
||||
["rc1_","rc1_","rc4_","rc4_","rc4_","rc2_","rc5_","rc4_","rc0_","rc0_","rc5_","rc2_","rc2_","rc7_","rc7_","rc1_","rc1_","rc6_","rc5_","rc6_","rc6_","rc4_","rc3_","rc4_","rc6_","rc3_","rc3_","rc3_","rc5_","rc3_","rc3_","rc7_","rc6_","rc3_","rc4_","rc5_","rc0_","rc4_","rc4_","rc1_","rc3_","rc6_","rc7_","rc6_","rc4_","rc0_","rc1_","rc6_","rc5_","rc1_","rc7_","rc3_","rc0_","rc4_","rc6_","rc4_","rc5_","rc4_","rc4_","rc4_","rc2_","rc4_","rc6_","rc0_","rc3_","rc2_","rc2_","rc0_","rc2_","rc5_","rc6_","rc7_","rc0_","rc5_","rc0_","rc6_","rc5_","rc2_","rc7_","rc6_","rc5_","rc7_","rc2_","rc5_","rc4_","rc0_","rc0_","rc3_","rc2_","rc2_","rc7_","rc4_","rc2_","rc2_","rc1_","rc1_","rc0_","rc0_","rc4_","rc3_","rc2_","rc5_","rc1_","rc7_","rc0_","rc4_","rc0_","rc1_","rc6_","rc5_","rc1_","rc2_","rc2_","rc7_","rc6_","rc3_","rc1_","rc7_","rc7_","rc7_","rc7_","rc4_","rc6_","rc3_","rc6_","rc5_","rc4_","rc2_","rc6_","rc5_","rc4_","rc7_","rc6_","rc5_","rc7_","rc1_","rc3_","rc3_","rc7_","rc6_","rc7_","rc2_","rc0_","rc1_"],
|
||||
["rc3_","rc2_","rc3_","rc6_","rc0_","rc1_","rc5_","rc1_","rc1_","rc2_","rc7_","rc1_","rc5_","rc5_","rc0_","rc2_","rc5_","rc7_","rc0_","rc3_","rc1_","rc4_","rc6_","rc5_","rc0_","rc2_","rc5_","rc6_","rc7_","rc0_","rc2_","rc5_","rc1_","rc7_","rc1_","rc6_","rc0_","rc7_","rc0_","rc0_","rc3_","rc5_","rc4_","rc6_","rc0_","rc3_","rc3_","rc3_","rc4_","rc0_","rc2_","rc1_","rc1_","rc2_","rc0_","rc3_","rc7_","rc2_","rc2_","rc1_","rc7_","rc7_","rc0_","rc4_","rc3_","rc6_","rc0_","rc3_","rc2_","rc0_","rc2_","rc6_","rc3_","rc3_","rc4_","rc1_","rc7_","rc6_","rc7_","rc3_","rc4_","rc0_","rc1_","rc7_","rc7_","rc0_","rc4_","rc2_","rc1_","rc2_","rc6_","rc7_","rc6_","rc0_","rc3_","rc7_","rc2_","rc7_","rc0_","rc5_","rc5_","rc4_","rc2_","rc1_","rc1_","rc7_","rc7_","rc3_","rc1_","rc6_","rc2_","rc3_","rc4_","rc5_","rc5_","rc6_","rc2_","rc5_","rc1_","rc4_","rc6_","rc2_","rc2_","rc7_","rc5_","rc2_","rc1_","rc6_","rc6_","rc3_","rc2_","rc3_","rc2_","rc4_","rc7_","rc2_","rc6_","rc6_","rc4_","rc4_","rc6_","rc4_","rc6_","rc3_"],
|
||||
["rc5_","rc1_","rc5_","rc6_","rc3_","rc1_","rc1_","rc7_","rc5_","rc3_","rc4_","rc3_","rc3_","rc5_","rc4_","rc1_","rc6_","rc1_","rc4_","rc7_","rc1_","rc6_","rc3_","rc1_","rc1_","rc2_","rc5_","rc4_","rc0_","rc7_","rc1_","rc2_","rc6_","rc3_","rc3_","rc7_","rc1_","rc5_","rc3_","rc4_","rc7_","rc4_","rc6_","rc1_","rc1_","rc2_","rc2_","rc0_","rc3_","rc1_","rc0_","rc7_","rc1_","rc5_","rc5_","rc6_","rc4_","rc2_","rc1_","rc2_","rc4_","rc7_","rc5_","rc2_","rc0_","rc4_","rc6_","rc0_","rc5_","rc0_","rc7_","rc2_","rc4_","rc5_","rc6_","rc2_","rc7_","rc0_","rc5_","rc2_","rc4_","rc4_","rc4_","rc4_","rc2_","rc6_","rc5_","rc1_","rc4_","rc7_","rc0_","rc0_","rc5_","rc5_","rc1_","rc1_","rc3_","rc3_","rc6_","rc3_","rc6_","rc2_","rc5_","rc3_","rc3_","rc7_","rc6_","rc6_","rc4_","rc7_","rc4_","rc0_","rc2_","rc1_","rc2_","rc6_","rc6_","rc3_","rc3_","rc1_","rc3_","rc0_","rc3_","rc4_","rc1_","rc0_","rc4_","rc0_","rc6_","rc0_","rc3_","rc6_","rc5_","rc3_","rc5_","rc5_","rc4_","rc1_","rc4_","rc4_","rc0_","rc0_","rc7_","rc2_"],
|
||||
["rc4_","rc0_","rc0_","rc4_","rc2_","rc3_","rc7_","rc7_","rc1_","rc5_","rc0_","rc7_","rc0_","rc0_","rc0_","rc7_","rc2_","rc3_","rc6_","rc2_","rc2_","rc4_","rc7_","rc1_","rc0_","rc3_","rc2_","rc6_","rc5_","rc1_","rc6_","rc0_","rc3_","rc2_","rc0_","rc0_","rc1_","rc7_","rc1_","rc3_","rc6_","rc6_","rc0_","rc1_","rc3_","rc5_","rc4_","rc6_","rc6_","rc5_","rc5_","rc7_","rc4_","rc4_","rc3_","rc7_","rc7_","rc6_","rc7_","rc2_","rc0_","rc5_","rc1_","rc2_","rc7_","rc6_","rc1_","rc0_","rc1_","rc5_","rc2_","rc5_","rc1_","rc4_","rc3_","rc2_","rc2_","rc0_","rc0_","rc5_","rc3_","rc5_","rc1_","rc4_","rc4_","rc3_","rc2_","rc7_","rc0_","rc1_","rc2_","rc1_","rc4_","rc1_","rc0_","rc7_","rc7_","rc4_","rc3_","rc5_","rc2_","rc7_","rc0_","rc5_","rc2_","rc6_","rc2_","rc1_","rc4_","rc0_","rc4_","rc3_","rc0_","rc3_","rc3_","rc3_","rc1_","rc2_","rc2_","rc1_","rc4_","rc4_","rc5_","rc3_","rc7_","rc7_","rc3_","rc1_","rc4_","rc4_","rc6_","rc7_","rc5_","rc5_","rc4_","rc3_","rc2_","rc4_","rc3_","rc7_","rc1_","rc6_","rc0_","rc1_"],
|
||||
["rc6_","rc0_","rc1_","rc2_","rc4_","rc0_","rc4_","rc4_","rc2_","rc0_","rc7_","rc7_","rc1_","rc6_","rc2_","rc6_","rc5_","rc7_","rc2_","rc5_","rc2_","rc6_","rc7_","rc6_","rc1_","rc7_","rc7_","rc4_","rc3_","rc1_","rc4_","rc7_","rc5_","rc3_","rc4_","rc2_","rc4_","rc6_","rc1_","rc1_","rc3_","rc3_","rc0_","rc7_","rc3_","rc7_","rc5_","rc7_","rc3_","rc4_","rc7_","rc1_","rc0_","rc2_","rc7_","rc7_","rc6_","rc6_","rc7_","rc0_","rc7_","rc1_","rc1_","rc5_","rc4_","rc4_","rc5_","rc3_","rc2_","rc2_","rc7_","rc0_","rc6_","rc0_","rc0_","rc1_","rc5_","rc0_","rc4_","rc3_","rc5_","rc4_","rc5_","rc1_","rc0_","rc1_","rc6_","rc6_","rc2_","rc1_","rc2_","rc3_","rc0_","rc6_","rc5_","rc3_","rc3_","rc4_","rc3_","rc4_","rc6_","rc6_","rc0_","rc1_","rc4_","rc4_","rc7_","rc6_","rc6_","rc3_","rc0_","rc4_","rc4_","rc6_","rc4_","rc6_","rc1_","rc3_","rc2_","rc3_","rc4_","rc1_","rc7_","rc4_","rc4_","rc1_","rc1_","rc0_","rc3_","rc2_","rc5_","rc7_","rc7_","rc2_","rc2_","rc4_","rc5_","rc1_","rc6_","rc6_","rc6_","rc0_","rc7_","rc0_"],
|
||||
["rc7_","rc2_","rc4_","rc0_","rc4_","rc1_","rc5_","rc5_","rc5_","rc5_","rc0_","rc5_","rc3_","rc1_","rc6_","rc5_","rc4_","rc6_","rc5_","rc2_","rc5_","rc4_","rc7_","rc0_","rc0_","rc6_","rc3_","rc1_","rc7_","rc5_","rc2_","rc0_","rc7_","rc0_","rc5_","rc7_","rc0_","rc3_","rc6_","rc5_","rc4_","rc5_","rc4_","rc4_","rc6_","rc6_","rc2_","rc2_","rc5_","rc1_","rc2_","rc6_","rc1_","rc6_","rc6_","rc6_","rc6_","rc3_","rc7_","rc7_","rc7_","rc4_","rc2_","rc4_","rc4_","rc1_","rc0_","rc2_","rc6_","rc7_","rc4_","rc4_","rc2_","rc2_","rc3_","rc2_","rc5_","rc1_","rc7_","rc7_","rc7_","rc2_","rc4_","rc3_","rc3_","rc7_","rc7_","rc6_","rc6_","rc1_","rc3_","rc7_","rc6_","rc5_","rc5_","rc4_","rc5_","rc4_","rc3_","rc2_","rc6_","rc7_","rc1_","rc0_","rc7_","rc2_","rc4_","rc7_","rc7_","rc1_","rc3_","rc4_","rc2_","rc1_","rc3_","rc1_","rc3_","rc0_","rc1_","rc0_","rc1_","rc7_","rc5_","rc2_","rc5_","rc6_","rc5_","rc0_","rc3_","rc1_","rc7_","rc0_","rc7_","rc2_","rc4_","rc1_","rc2_","rc0_","rc1_","rc2_","rc5_","rc6_","rc0_","rc0_"],
|
||||
["rc5_","rc6_","rc7_","rc7_","rc7_","rc0_","rc6_","rc4_","rc6_","rc5_","rc7_","rc0_","rc3_","rc1_","rc1_","rc7_","rc5_","rc1_","rc5_","rc2_","rc1_","rc1_","rc5_","rc1_","rc3_","rc1_","rc1_","rc5_","rc6_","rc1_","rc5_","rc5_","rc0_","rc2_","rc0_","rc7_","rc2_","rc7_","rc5_","rc2_","rc6_","rc4_","rc7_","rc1_","rc2_","rc5_","rc1_","rc2_","rc4_","rc3_","rc4_","rc0_","rc6_","rc3_","rc4_","rc6_","rc4_","rc7_","rc5_","rc6_","rc3_","rc1_","rc1_","rc1_","rc4_","rc4_","rc6_","rc7_","rc2_","rc5_","rc6_","rc1_","rc1_","rc3_","rc7_","rc5_","rc7_","rc3_","rc4_","rc1_","rc7_","rc7_","rc3_","rc4_","rc3_","rc0_","rc1_","rc2_","rc2_","rc1_","rc3_","rc6_","rc3_","rc6_","rc6_","rc5_","rc1_","rc5_","rc1_","rc0_","rc7_","rc3_","rc1_","rc2_","rc6_","rc2_","rc5_","rc3_","rc4_","rc2_","rc4_","rc4_","rc7_","rc6_","rc4_","rc4_","rc3_","rc0_","rc4_","rc3_","rc0_","rc7_","rc4_","rc5_","rc7_","rc0_","rc3_","rc1_","rc6_","rc3_","rc1_","rc2_","rc3_","rc0_","rc7_","rc5_","rc5_","rc2_","rc3_","rc4_","rc1_","rc2_","rc0_","rc3_"],
|
||||
["rc4_","rc7_","rc6_","rc1_","rc4_","rc4_","rc6_","rc2_","rc4_","rc2_","rc0_","rc2_","rc7_","rc0_","rc0_","rc4_","rc4_","rc0_","rc6_","rc4_","rc3_","rc5_","rc6_","rc2_","rc0_","rc2_","rc0_","rc0_","rc5_","rc4_","rc0_","rc5_","rc5_","rc2_","rc0_","rc3_","rc6_","rc3_","rc5_","rc6_","rc6_","rc1_","rc0_","rc7_","rc2_","rc5_","rc5_","rc0_","rc3_","rc4_","rc1_","rc0_","rc2_","rc0_","rc7_","rc0_","rc4_","rc2_","rc4_","rc7_","rc1_","rc6_","rc4_","rc4_","rc2_","rc7_","rc4_","rc2_","rc2_","rc6_","rc2_","rc1_","rc7_","rc5_","rc2_","rc2_","rc1_","rc0_","rc2_","rc3_","rc2_","rc6_","rc0_","rc4_","rc5_","rc3_","rc3_","rc1_","rc4_","rc2_","rc7_","rc1_","rc5_","rc3_","rc4_","rc6_","rc5_","rc7_","rc1_","rc6_","rc0_","rc3_","rc6_","rc1_","rc7_","rc4_","rc7_","rc4_","rc3_","rc0_","rc0_","rc6_","rc1_","rc6_","rc5_","rc1_","rc7_","rc6_","rc0_","rc3_","rc6_","rc3_","rc1_","rc5_","rc0_","rc0_","rc1_","rc4_","rc3_","rc1_","rc7_","rc6_","rc7_","rc4_","rc7_","rc7_","rc5_","rc0_","rc0_","rc5_","rc1_","rc5_","rc5_","rc1_"],
|
||||
["rc1_","rc4_","rc6_","rc7_","rc6_","rc7_","rc0_","rc7_","rc2_","rc4_","rc2_","rc5_","rc2_","rc7_","rc1_","rc5_","rc7_","rc6_","rc6_","rc4_","rc0_","rc1_","rc7_","rc3_","rc2_","rc1_","rc4_","rc5_","rc2_","rc7_","rc2_","rc3_","rc2_","rc0_","rc5_","rc6_","rc2_","rc0_","rc1_","rc5_","rc1_","rc6_","rc2_","rc7_","rc5_","rc7_","rc5_","rc3_","rc7_","rc5_","rc7_","rc6_","rc2_","rc0_","rc4_","rc5_","rc5_","rc5_","rc2_","rc3_","rc7_","rc7_","rc7_","rc6_","rc3_","rc3_","rc1_","rc5_","rc4_","rc1_","rc5_","rc4_","rc3_","rc0_","rc1_","rc4_","rc6_","rc0_","rc6_","rc4_","rc3_","rc6_","rc0_","rc5_","rc6_","rc3_","rc0_","rc4_","rc7_","rc6_","rc4_","rc1_","rc7_","rc4_","rc5_","rc0_","rc5_","rc5_","rc1_","rc5_","rc4_","rc0_","rc2_","rc6_","rc7_","rc2_","rc7_","rc3_","rc0_","rc3_","rc2_","rc1_","rc4_","rc1_","rc2_","rc0_","rc3_","rc1_","rc1_","rc2_","rc7_","rc3_","rc1_","rc5_","rc4_","rc6_","rc2_","rc2_","rc7_","rc4_","rc7_","rc6_","rc1_","rc7_","rc2_","rc1_","rc6_","rc4_","rc5_","rc6_","rc0_","rc7_","rc3_","rc2_"],
|
||||
["rc2_","rc7_","rc5_","rc1_","rc2_","rc3_","rc1_","rc5_","rc6_","rc5_","rc1_","rc0_","rc3_","rc6_","rc0_","rc4_","rc2_","rc2_","rc2_","rc0_","rc4_","rc5_","rc4_","rc6_","rc7_","rc7_","rc1_","rc3_","rc1_","rc4_","rc7_","rc7_","rc4_","rc7_","rc2_","rc6_","rc3_","rc0_","rc7_","rc6_","rc4_","rc3_","rc3_","rc2_","rc6_","rc3_","rc5_","rc5_","rc5_","rc6_","rc2_","rc3_","rc4_","rc3_","rc0_","rc5_","rc3_","rc2_","rc5_","rc4_","rc1_","rc3_","rc0_","rc0_","rc3_","rc1_","rc7_","rc0_","rc5_","rc0_","rc3_","rc5_","rc0_","rc5_","rc1_","rc2_","rc5_","rc5_","rc3_","rc7_","rc1_","rc1_","rc7_","rc7_","rc2_","rc0_","rc6_","rc6_","rc1_","rc5_","rc7_","rc7_","rc0_","rc3_","rc4_","rc4_","rc6_","rc6_","rc6_","rc7_","rc1_","rc4_","rc5_","rc1_","rc3_","rc3_","rc2_","rc2_","rc7_","rc5_","rc1_","rc0_","rc6_","rc2_","rc1_","rc3_","rc5_","rc4_","rc6_","rc0_","rc2_","rc1_","rc1_","rc4_","rc7_","rc4_","rc5_","rc4_","rc6_","rc5_","rc5_","rc3_","rc6_","rc2_","rc5_","rc4_","rc4_","rc6_","rc7_","rc0_","rc5_","rc2_","rc7_","rc1_"],
|
||||
["rc3_","rc1_","rc0_","rc0_","rc6_","rc0_","rc0_","rc5_","rc6_","rc5_","rc1_","rc5_","rc6_","rc6_","rc2_","rc0_","rc2_","rc6_","rc6_","rc3_","rc5_","rc5_","rc3_","rc4_","rc4_","rc5_","rc6_","rc5_","rc7_","rc4_","rc4_","rc2_","rc1_","rc6_","rc4_","rc6_","rc5_","rc2_","rc4_","rc3_","rc4_","rc1_","rc1_","rc0_","rc4_","rc2_","rc3_","rc0_","rc3_","rc2_","rc0_","rc1_","rc5_","rc2_","rc7_","rc2_","rc2_","rc1_","rc0_","rc1_","rc4_","rc3_","rc2_","rc3_","rc7_","rc2_","rc5_","rc5_","rc1_","rc4_","rc2_","rc3_","rc4_","rc6_","rc0_","rc7_","rc2_","rc0_","rc0_","rc4_","rc1_","rc0_","rc2_","rc3_","rc7_","rc3_","rc1_","rc6_","rc7_","rc1_","rc5_","rc3_","rc4_","rc0_","rc0_","rc4_","rc6_","rc4_","rc4_","rc4_","rc3_","rc6_","rc2_","rc4_","rc7_","rc2_","rc6_","rc0_","rc7_","rc6_","rc1_","rc3_","rc3_","rc0_","rc6_","rc2_","rc2_","rc7_","rc2_","rc0_","rc2_","rc5_","rc6_","rc5_","rc0_","rc2_","rc6_","rc4_","rc5_","rc4_","rc7_","rc5_","rc2_","rc7_","rc5_","rc0_","rc5_","rc0_","rc2_","rc4_","rc4_","rc6_","rc6_","rc7_"],
|
||||
["rc1_","rc2_","rc3_","rc6_","rc7_","rc6_","rc0_","rc7_","rc5_","rc5_","rc1_","rc5_","rc0_","rc2_","rc5_","rc4_","rc5_","rc3_","rc0_","rc6_","rc7_","rc7_","rc1_","rc5_","rc6_","rc5_","rc6_","rc2_","rc1_","rc7_","rc7_","rc6_","rc5_","rc7_","rc1_","rc7_","rc6_","rc1_","rc4_","rc4_","rc5_","rc2_","rc7_","rc4_","rc3_","rc7_","rc3_","rc4_","rc6_","rc0_","rc5_","rc0_","rc1_","rc6_","rc7_","rc5_","rc0_","rc3_","rc1_","rc4_","rc5_","rc1_","rc4_","rc1_","rc4_","rc6_","rc0_","rc4_","rc6_","rc7_","rc7_","rc7_","rc4_","rc3_","rc1_","rc2_","rc2_","rc1_","rc1_","rc4_","rc7_","rc3_","rc0_","rc3_","rc1_","rc5_","rc0_","rc6_","rc6_","rc1_","rc3_","rc0_","rc0_","rc5_","rc6_","rc7_","rc1_","rc0_","rc0_","rc6_","rc0_","rc0_","rc7_","rc0_","rc2_","rc0_","rc6_","rc7_","rc4_","rc0_","rc7_","rc4_","rc0_","rc5_","rc7_","rc7_","rc7_","rc3_","rc2_","rc0_","rc6_","rc0_","rc5_","rc7_","rc3_","rc2_","rc3_","rc2_","rc2_","rc4_","rc1_","rc5_","rc3_","rc5_","rc6_","rc7_","rc6_","rc1_","rc5_","rc2_","rc2_","rc5_","rc6_","rc3_"],
|
||||
["rc2_","rc5_","rc4_","rc3_","rc2_","rc0_","rc7_","rc5_","rc0_","rc6_","rc5_","rc1_","rc6_","rc1_","rc4_","rc0_","rc7_","rc2_","rc4_","rc1_","rc0_","rc5_","rc3_","rc4_","rc1_","rc7_","rc0_","rc5_","rc4_","rc7_","rc4_","rc2_","rc5_","rc3_","rc6_","rc0_","rc2_","rc5_","rc6_","rc4_","rc6_","rc6_","rc4_","rc6_","rc0_","rc0_","rc2_","rc2_","rc1_","rc2_","rc7_","rc2_","rc6_","rc0_","rc5_","rc6_","rc3_","rc2_","rc6_","rc6_","rc1_","rc6_","rc2_","rc1_","rc0_","rc0_","rc4_","rc7_","rc1_","rc0_","rc7_","rc4_","rc5_","rc5_","rc2_","rc5_","rc2_","rc1_","rc3_","rc0_","rc0_","rc5_","rc3_","rc7_","rc6_","rc7_","rc6_","rc6_","rc3_","rc0_","rc7_","rc6_","rc2_","rc3_","rc1_","rc0_","rc4_","rc3_","rc0_","rc5_","rc4_","rc4_","rc1_","rc6_","rc0_","rc5_","rc0_","rc0_","rc4_","rc4_","rc1_","rc2_","rc3_","rc2_","rc1_","rc2_","rc0_","rc1_","rc5_","rc4_","rc1_","rc3_","rc3_","rc4_","rc6_","rc5_","rc0_","rc7_","rc1_","rc4_","rc1_","rc5_","rc6_","rc6_","rc6_","rc2_","rc4_","rc5_","rc4_","rc5_","rc5_","rc7_","rc2_","rc0_"],
|
||||
["rc3_","rc1_","rc7_","rc1_","rc3_","rc6_","rc2_","rc0_","rc6_","rc2_","rc1_","rc2_","rc5_","rc4_","rc6_","rc5_","rc6_","rc3_","rc7_","rc6_","rc5_","rc0_","rc5_","rc0_","rc4_","rc5_","rc0_","rc5_","rc5_","rc4_","rc0_","rc1_","rc7_","rc3_","rc7_","rc5_","rc0_","rc6_","rc5_","rc2_","rc2_","rc6_","rc4_","rc6_","rc1_","rc1_","rc5_","rc4_","rc3_","rc1_","rc2_","rc7_","rc1_","rc1_","rc6_","rc7_","rc6_","rc6_","rc2_","rc0_","rc5_","rc2_","rc2_","rc6_","rc0_","rc7_","rc7_","rc6_","rc6_","rc2_","rc6_","rc1_","rc4_","rc6_","rc1_","rc2_","rc0_","rc2_","rc4_","rc2_","rc1_","rc5_","rc2_","rc1_","rc3_","rc2_","rc1_","rc0_","rc2_","rc7_","rc4_","rc5_","rc5_","rc2_","rc0_","rc7_","rc5_","rc5_","rc1_","rc3_","rc6_","rc1_","rc5_","rc6_","rc5_","rc2_","rc1_","rc4_","rc2_","rc2_","rc3_","rc0_","rc0_","rc0_","rc7_","rc4_","rc3_","rc2_","rc6_","rc4_","rc1_","rc0_","rc5_","rc6_","rc4_","rc3_","rc2_","rc4_","rc7_","rc6_","rc3_","rc6_","rc7_","rc4_","rc2_","rc1_","rc4_","rc2_","rc4_","rc5_","rc0_","rc6_","rc2_","rc6_"],
|
||||
["rc7_","rc1_","rc2_","rc0_","rc0_","rc1_","rc6_","rc0_","rc3_","rc1_","rc4_","rc1_","rc3_","rc5_","rc0_","rc5_","rc6_","rc1_","rc7_","rc5_","rc2_","rc1_","rc5_","rc2_","rc2_","rc7_","rc2_","rc4_","rc2_","rc0_","rc1_","rc3_","rc7_","rc0_","rc1_","rc5_","rc2_","rc7_","rc7_","rc7_","rc7_","rc3_","rc3_","rc7_","rc1_","rc0_","rc2_","rc1_","rc1_","rc6_","rc4_","rc1_","rc6_","rc3_","rc7_","rc1_","rc7_","rc0_","rc4_","rc3_","rc7_","rc7_","rc0_","rc1_","rc0_","rc5_","rc5_","rc2_","rc3_","rc5_","rc2_","rc0_","rc6_","rc6_","rc1_","rc0_","rc7_","rc5_","rc0_","rc2_","rc0_","rc6_","rc2_","rc2_","rc4_","rc7_","rc6_","rc5_","rc2_","rc5_","rc0_","rc0_","rc7_","rc4_","rc7_","rc6_","rc0_","rc1_","rc7_","rc0_","rc1_","rc2_","rc7_","rc2_","rc7_","rc0_","rc6_","rc4_","rc5_","rc3_","rc2_","rc6_","rc5_","rc7_","rc1_","rc7_","rc4_","rc7_","rc3_","rc0_","rc3_","rc7_","rc0_","rc4_","rc4_","rc5_","rc6_","rc3_","rc2_","rc3_","rc5_","rc7_","rc4_","rc6_","rc7_","rc6_","rc3_","rc3_","rc2_","rc2_","rc2_","rc3_","rc0_","rc6_"],
|
||||
["rc5_","rc4_","rc1_","rc2_","rc5_","rc2_","rc7_","rc0_","rc4_","rc5_","rc2_","rc7_","rc3_","rc5_","rc5_","rc0_","rc4_","rc3_","rc1_","rc7_","rc5_","rc2_","rc0_","rc4_","rc2_","rc6_","rc5_","rc3_","rc6_","rc4_","rc2_","rc1_","rc3_","rc2_","rc2_","rc1_","rc0_","rc0_","rc0_","rc6_","rc2_","rc7_","rc0_","rc1_","rc7_","rc1_","rc4_","rc4_","rc7_","rc2_","rc1_","rc0_","rc3_","rc5_","rc4_","rc4_","rc3_","rc1_","rc7_","rc0_","rc2_","rc6_","rc1_","rc1_","rc5_","rc3_","rc4_","rc5_","rc4_","rc2_","rc0_","rc1_","rc0_","rc6_","rc0_","rc1_","rc6_","rc3_","rc4_","rc1_","rc2_","rc7_","rc7_","rc1_","rc7_","rc7_","rc2_","rc6_","rc6_","rc5_","rc0_","rc6_","rc6_","rc1_","rc3_","rc4_","rc3_","rc6_","rc7_","rc6_","rc2_","rc7_","rc6_","rc3_","rc3_","rc1_","rc4_","rc0_","rc0_","rc2_","rc3_","rc5_","rc6_","rc2_","rc2_","rc4_","rc1_","rc1_","rc1_","rc1_","rc4_","rc1_","rc1_","rc0_","rc1_","rc6_","rc1_","rc3_","rc6_","rc3_","rc4_","rc4_","rc1_","rc7_","rc1_","rc2_","rc6_","rc0_","rc3_","rc7_","rc6_","rc6_","rc3_","rc1_"],
|
||||
["rc2_","rc3_","rc2_","rc7_","rc0_","rc2_","rc3_","rc7_","rc5_","rc6_","rc0_","rc5_","rc4_","rc4_","rc4_","rc6_","rc6_","rc3_","rc1_","rc6_","rc2_","rc2_","rc3_","rc7_","rc7_","rc4_","rc5_","rc4_","rc0_","rc0_","rc2_","rc5_","rc7_","rc3_","rc7_","rc3_","rc5_","rc2_","rc7_","rc6_","rc0_","rc2_","rc6_","rc4_","rc7_","rc3_","rc2_","rc5_","rc2_","rc5_","rc7_","rc5_","rc5_","rc1_","rc3_","rc2_","rc6_","rc3_","rc2_","rc7_","rc5_","rc7_","rc2_","rc0_","rc4_","rc1_","rc0_","rc7_","rc7_","rc1_","rc5_","rc7_","rc6_","rc7_","rc4_","rc6_","rc0_","rc4_","rc5_","rc0_","rc3_","rc1_","rc7_","rc1_","rc1_","rc3_","rc1_","rc3_","rc4_","rc0_","rc2_","rc2_","rc6_","rc3_","rc1_","rc4_","rc2_","rc6_","rc7_","rc5_","rc7_","rc0_","rc5_","rc1_","rc6_","rc5_","rc0_","rc3_","rc2_","rc6_","rc4_","rc6_","rc0_","rc0_","rc7_","rc2_","rc7_","rc1_","rc5_","rc2_","rc1_","rc0_","rc5_","rc3_","rc2_","rc5_","rc1_","rc7_","rc1_","rc1_","rc3_","rc3_","rc5_","rc6_","rc7_","rc6_","rc1_","rc2_","rc4_","rc3_","rc3_","rc1_","rc7_","rc0_"],
|
||||
["rc2_","rc1_","rc1_","rc0_","rc6_","rc2_","rc7_","rc6_","rc4_","rc5_","rc3_","rc4_","rc2_","rc3_","rc1_","rc2_","rc0_","rc2_","rc5_","rc2_","rc0_","rc4_","rc3_","rc4_","rc7_","rc0_","rc6_","rc6_","rc4_","rc5_","rc5_","rc6_","rc0_","rc4_","rc4_","rc3_","rc7_","rc6_","rc7_","rc0_","rc6_","rc6_","rc4_","rc3_","rc5_","rc0_","rc1_","rc5_","rc0_","rc1_","rc3_","rc2_","rc0_","rc1_","rc1_","rc4_","rc7_","rc7_","rc0_","rc3_","rc4_","rc3_","rc0_","rc0_","rc3_","rc2_","rc7_","rc2_","rc1_","rc5_","rc5_","rc1_","rc7_","rc3_","rc0_","rc0_","rc4_","rc1_","rc1_","rc0_","rc0_","rc7_","rc6_","rc3_","rc6_","rc5_","rc1_","rc6_","rc2_","rc5_","rc1_","rc3_","rc4_","rc2_","rc7_","rc6_","rc3_","rc2_","rc4_","rc6_","rc5_","rc0_","rc1_","rc6_","rc5_","rc5_","rc7_","rc5_","rc7_","rc0_","rc1_","rc3_","rc1_","rc3_","rc6_","rc5_","rc2_","rc0_","rc3_","rc2_","rc7_","rc4_","rc1_","rc6_","rc3_","rc3_","rc2_","rc7_","rc7_","rc4_","rc2_","rc7_","rc2_","rc6_","rc4_","rc2_","rc3_","rc3_","rc2_","rc1_","rc5_","rc4_","rc1_","rc5_"],
|
||||
["rc2_","rc6_","rc4_","rc7_","rc3_","rc3_","rc7_","rc0_","rc7_","rc3_","rc7_","rc4_","rc2_","rc5_","rc1_","rc5_","rc7_","rc1_","rc1_","rc5_","rc2_","rc0_","rc4_","rc4_","rc7_","rc6_","rc7_","rc3_","rc7_","rc6_","rc1_","rc7_","rc4_","rc6_","rc6_","rc2_","rc2_","rc5_","rc6_","rc7_","rc1_","rc3_","rc5_","rc5_","rc0_","rc0_","rc4_","rc6_","rc5_","rc7_","rc1_","rc0_","rc2_","rc4_","rc2_","rc3_","rc2_","rc4_","rc0_","rc4_","rc4_","rc4_","rc1_","rc1_","rc6_","rc5_","rc6_","rc6_","rc7_","rc6_","rc6_","rc0_","rc6_","rc3_","rc2_","rc0_","rc6_","rc4_","rc4_","rc3_","rc6_","rc1_","rc2_","rc7_","rc4_","rc4_","rc7_","rc0_","rc3_","rc7_","rc3_","rc4_","rc5_","rc1_","rc1_","rc3_","rc2_","rc3_","rc2_","rc3_","rc0_","rc7_","rc1_","rc3_","rc5_","rc3_","rc6_","rc7_","rc4_","rc2_","rc7_","rc3_","rc5_","rc4_","rc4_","rc4_","rc0_","rc0_","rc1_","rc3_","rc2_","rc7_","rc2_","rc3_","rc1_","rc2_","rc2_","rc5_","rc5_","rc6_","rc4_","rc1_","rc0_","rc7_","rc5_","rc0_","rc7_","rc3_","rc2_","rc0_","rc1_","rc1_","rc6_","rc0_"],
|
||||
["rc0_","rc2_","rc7_","rc5_","rc5_","rc6_","rc2_","rc4_","rc1_","rc2_","rc3_","rc0_","rc1_","rc1_","rc2_","rc6_","rc1_","rc0_","rc2_","rc7_","rc5_","rc6_","rc4_","rc7_","rc4_","rc4_","rc4_","rc4_","rc6_","rc1_","rc2_","rc0_","rc7_","rc2_","rc3_","rc2_","rc4_","rc0_","rc1_","rc2_","rc6_","rc2_","rc0_","rc4_","rc5_","rc5_","rc2_","rc7_","rc6_","rc0_","rc6_","rc7_","rc0_","rc5_","rc5_","rc7_","rc3_","rc5_","rc5_","rc3_","rc2_","rc3_","rc1_","rc4_","rc3_","rc4_","rc0_","rc5_","rc5_","rc5_","rc5_","rc7_","rc1_","rc6_","rc0_","rc0_","rc4_","rc6_","rc3_","rc0_","rc3_","rc7_","rc7_","rc7_","rc0_","rc3_","rc7_","rc1_","rc5_","rc7_","rc5_","rc4_","rc6_","rc6_","rc5_","rc4_","rc4_","rc1_","rc7_","rc5_","rc7_","rc6_","rc0_","rc1_","rc3_","rc7_","rc3_","rc1_","rc6_","rc5_","rc3_","rc1_","rc1_","rc4_","rc5_","rc0_","rc6_","rc0_","rc4_","rc5_","rc1_","rc0_","rc5_","rc1_","rc1_","rc2_","rc4_","rc0_","rc1_","rc0_","rc6_","rc1_","rc2_","rc2_","rc1_","rc1_","rc4_","rc4_","rc1_","rc2_","rc4_","rc1_","rc4_","rc2_"],
|
||||
["rc0_","rc7_","rc0_","rc1_","rc1_","rc5_","rc3_","rc3_","rc0_","rc2_","rc3_","rc0_","rc4_","rc0_","rc0_","rc0_","rc3_","rc2_","rc7_","rc2_","rc7_","rc1_","rc0_","rc6_","rc3_","rc5_","rc2_","rc2_","rc6_","rc2_","rc5_","rc3_","rc7_","rc1_","rc0_","rc4_","rc2_","rc0_","rc4_","rc3_","rc1_","rc5_","rc1_","rc2_","rc7_","rc7_","rc7_","rc3_","rc1_","rc5_","rc0_","rc0_","rc6_","rc4_","rc5_","rc2_","rc0_","rc2_","rc6_","rc0_","rc3_","rc0_","rc5_","rc3_","rc6_","rc0_","rc5_","rc7_","rc0_","rc4_","rc7_","rc5_","rc5_","rc7_","rc5_","rc6_","rc1_","rc7_","rc3_","rc2_","rc4_","rc3_","rc3_","rc3_","rc6_","rc1_","rc0_","rc3_","rc5_","rc4_","rc5_","rc5_","rc4_","rc4_","rc6_","rc3_","rc6_","rc6_","rc7_","rc4_","rc4_","rc6_","rc4_","rc0_","rc4_","rc2_","rc1_","rc6_","rc3_","rc1_","rc3_","rc5_","rc3_","rc3_","rc6_","rc2_","rc0_","rc3_","rc1_","rc3_","rc7_","rc2_","rc7_","rc1_","rc1_","rc6_","rc7_","rc3_","rc7_","rc3_","rc6_","rc0_","rc6_","rc0_","rc3_","rc5_","rc5_","rc5_","rc4_","rc1_","rc4_","rc4_","rc7_","rc4_"],
|
||||
["rc7_","rc6_","rc3_","rc7_","rc3_","rc7_","rc0_","rc0_","rc1_","rc5_","rc4_","rc4_","rc1_","rc4_","rc0_","rc3_","rc0_","rc6_","rc2_","rc6_","rc5_","rc1_","rc4_","rc4_","rc0_","rc1_","rc5_","rc6_","rc5_","rc0_","rc7_","rc7_","rc0_","rc3_","rc1_","rc0_","rc0_","rc7_","rc5_","rc3_","rc1_","rc3_","rc4_","rc6_","rc4_","rc0_","rc1_","rc2_","rc2_","rc7_","rc4_","rc5_","rc2_","rc1_","rc0_","rc5_","rc7_","rc5_","rc6_","rc6_","rc5_","rc5_","rc3_","rc5_","rc5_","rc2_","rc0_","rc6_","rc7_","rc2_","rc0_","rc3_","rc7_","rc7_","rc0_","rc6_","rc3_","rc1_","rc2_","rc2_","rc4_","rc6_","rc2_","rc4_","rc4_","rc1_","rc5_","rc7_","rc7_","rc1_","rc6_","rc1_","rc5_","rc4_","rc3_","rc0_","rc6_","rc4_","rc0_","rc1_","rc7_","rc0_","rc2_","rc2_","rc4_","rc6_","rc6_","rc6_","rc6_","rc0_","rc3_","rc1_","rc7_","rc4_","rc5_","rc5_","rc4_","rc0_","rc4_","rc4_","rc3_","rc6_","rc5_","rc6_","rc4_","rc4_","rc7_","rc6_","rc5_","rc0_","rc0_","rc0_","rc0_","rc2_","rc1_","rc6_","rc0_","rc2_","rc0_","rc4_","rc4_","rc3_","rc4_","rc0_"],
|
||||
["rc3_","rc0_","rc6_","rc6_","rc1_","rc7_","rc6_","rc2_","rc1_","rc3_","rc3_","rc7_","rc3_","rc6_","rc7_","rc0_","rc7_","rc6_","rc3_","rc5_","rc3_","rc7_","rc7_","rc0_","rc2_","rc2_","rc4_","rc1_","rc6_","rc4_","rc5_","rc7_","rc7_","rc2_","rc3_","rc7_","rc4_","rc4_","rc1_","rc2_","rc1_","rc0_","rc0_","rc2_","rc2_","rc0_","rc4_","rc5_","rc7_","rc6_","rc6_","rc6_","rc0_","rc7_","rc2_","rc0_","rc3_","rc6_","rc4_","rc4_","rc3_","rc3_","rc7_","rc5_","rc4_","rc3_","rc6_","rc2_","rc5_","rc1_","rc7_","rc4_","rc4_","rc5_","rc4_","rc0_","rc0_","rc5_","rc4_","rc7_","rc3_","rc1_","rc2_","rc4_","rc6_","rc3_","rc4_","rc6_","rc2_","rc6_","rc6_","rc7_","rc4_","rc7_","rc0_","rc4_","rc1_","rc2_","rc6_","rc6_","rc3_","rc6_","rc6_","rc7_","rc2_","rc3_","rc7_","rc1_","rc6_","rc2_","rc0_","rc4_","rc3_","rc6_","rc7_","rc7_","rc6_","rc2_","rc3_","rc1_","rc0_","rc3_","rc4_","rc0_","rc1_","rc0_","rc1_","rc2_","rc7_","rc7_","rc2_","rc2_","rc6_","rc1_","rc0_","rc5_","rc2_","rc1_","rc2_","rc5_","rc3_","rc1_","rc1_","rc5_"],
|
||||
["rc0_","rc5_","rc5_","rc7_","rc0_","rc4_","rc1_","rc3_","rc4_","rc5_","rc5_","rc0_","rc1_","rc6_","rc3_","rc0_","rc5_","rc3_","rc4_","rc7_","rc7_","rc4_","rc4_","rc4_","rc4_","rc7_","rc3_","rc4_","rc0_","rc1_","rc5_","rc2_","rc2_","rc7_","rc5_","rc3_","rc3_","rc2_","rc5_","rc2_","rc7_","rc2_","rc1_","rc7_","rc5_","rc2_","rc5_","rc6_","rc4_","rc4_","rc3_","rc5_","rc6_","rc6_","rc2_","rc5_","rc2_","rc6_","rc3_","rc5_","rc4_","rc2_","rc6_","rc3_","rc0_","rc3_","rc5_","rc5_","rc7_","rc3_","rc7_","rc7_","rc1_","rc4_","rc0_","rc5_","rc4_","rc3_","rc6_","rc4_","rc3_","rc5_","rc7_","rc4_","rc3_","rc0_","rc1_","rc0_","rc2_","rc5_","rc3_","rc1_","rc0_","rc5_","rc2_","rc0_","rc3_","rc2_","rc6_","rc3_","rc5_","rc7_","rc7_","rc2_","rc1_","rc2_","rc2_","rc2_","rc6_","rc1_","rc0_","rc1_","rc3_","rc3_","rc0_","rc3_","rc4_","rc1_","rc3_","rc5_","rc4_","rc4_","rc1_","rc0_","rc4_","rc0_","rc3_","rc0_","rc2_","rc2_","rc1_","rc6_","rc5_","rc6_","rc5_","rc2_","rc0_","rc5_","rc7_","rc5_","rc5_","rc4_","rc2_","rc6_"],
|
||||
["rc4_","rc0_","rc6_","rc3_","rc4_","rc1_","rc7_","rc3_","rc1_","rc4_","rc7_","rc2_","rc7_","rc6_","rc0_","rc4_","rc6_","rc5_","rc4_","rc5_","rc6_","rc1_","rc1_","rc1_","rc5_","rc4_","rc7_","rc7_","rc7_","rc5_","rc3_","rc3_","rc5_","rc3_","rc1_","rc5_","rc1_","rc0_","rc5_","rc4_","rc0_","rc4_","rc3_","rc6_","rc1_","rc4_","rc1_","rc4_","rc6_","rc2_","rc1_","rc2_","rc1_","rc7_","rc3_","rc5_","rc1_","rc7_","rc2_","rc0_","rc4_","rc4_","rc5_","rc0_","rc7_","rc5_","rc1_","rc7_","rc3_","rc7_","rc6_","rc6_","rc2_","rc4_","rc7_","rc6_","rc4_","rc4_","rc6_","rc0_","rc3_","rc2_","rc7_","rc3_","rc5_","rc1_","rc3_","rc7_","rc3_","rc6_","rc0_","rc0_","rc5_","rc7_","rc7_","rc5_","rc1_","rc4_","rc7_","rc1_","rc4_","rc5_","rc0_","rc2_","rc7_","rc5_","rc2_","rc0_","rc5_","rc5_","rc7_","rc0_","rc5_","rc4_","rc6_","rc2_","rc3_","rc6_","rc1_","rc7_","rc4_","rc2_","rc1_","rc7_","rc2_","rc0_","rc1_","rc2_","rc4_","rc2_","rc1_","rc5_","rc1_","rc3_","rc4_","rc0_","rc6_","rc6_","rc4_","rc5_","rc7_","rc0_","rc4_","rc3_"],
|
||||
["rc3_","rc0_","rc5_","rc5_","rc3_","rc6_","rc5_","rc5_","rc3_","rc2_","rc6_","rc4_","rc2_","rc6_","rc3_","rc6_","rc7_","rc7_","rc0_","rc1_","rc5_","rc7_","rc2_","rc7_","rc0_","rc7_","rc5_","rc5_","rc0_","rc4_","rc5_","rc3_","rc5_","rc7_","rc6_","rc4_","rc4_","rc1_","rc0_","rc0_","rc1_","rc6_","rc5_","rc1_","rc5_","rc2_","rc5_","rc2_","rc3_","rc1_","rc5_","rc7_","rc5_","rc3_","rc3_","rc0_","rc4_","rc0_","rc5_","rc0_","rc0_","rc1_","rc2_","rc6_","rc5_","rc0_","rc0_","rc1_","rc6_","rc0_","rc0_","rc1_","rc6_","rc7_","rc0_","rc4_","rc5_","rc2_","rc7_","rc6_","rc7_","rc2_","rc6_","rc5_","rc4_","rc7_","rc5_","rc4_","rc3_","rc2_","rc4_","rc5_","rc0_","rc7_","rc3_","rc5_","rc0_","rc3_","rc3_","rc3_","rc3_","rc2_","rc7_","rc0_","rc1_","rc4_","rc5_","rc6_","rc7_","rc0_","rc2_","rc2_","rc4_","rc2_","rc5_","rc4_","rc0_","rc1_","rc2_","rc1_","rc5_","rc4_","rc2_","rc6_","rc0_","rc7_","rc0_","rc7_","rc1_","rc0_","rc7_","rc1_","rc0_","rc7_","rc3_","rc5_","rc3_","rc5_","rc6_","rc6_","rc6_","rc4_","rc4_","rc6_"],
|
||||
["rc2_","rc7_","rc0_","rc3_","rc1_","rc3_","rc0_","rc0_","rc1_","rc7_","rc7_","rc1_","rc7_","rc0_","rc2_","rc6_","rc6_","rc0_","rc5_","rc4_","rc0_","rc0_","rc6_","rc0_","rc3_","rc3_","rc1_","rc6_","rc0_","rc5_","rc6_","rc1_","rc0_","rc3_","rc1_","rc4_","rc0_","rc5_","rc1_","rc0_","rc7_","rc2_","rc3_","rc7_","rc6_","rc2_","rc7_","rc0_","rc7_","rc2_","rc3_","rc4_","rc0_","rc4_","rc6_","rc1_","rc2_","rc5_","rc0_","rc4_","rc5_","rc3_","rc1_","rc4_","rc7_","rc6_","rc7_","rc5_","rc5_","rc5_","rc3_","rc3_","rc0_","rc5_","rc6_","rc7_","rc4_","rc6_","rc0_","rc6_","rc5_","rc7_","rc2_","rc0_","rc3_","rc3_","rc5_","rc7_","rc0_","rc3_","rc2_","rc1_","rc6_","rc6_","rc3_","rc7_","rc6_","rc6_","rc2_","rc7_","rc7_","rc5_","rc0_","rc7_","rc4_","rc0_","rc0_","rc3_","rc2_","rc3_","rc6_","rc0_","rc0_","rc5_","rc2_","rc2_","rc7_","rc5_","rc2_","rc3_","rc4_","rc5_","rc7_","rc5_","rc3_","rc7_","rc6_","rc2_","rc6_","rc5_","rc1_","rc2_","rc7_","rc4_","rc7_","rc5_","rc2_","rc4_","rc2_","rc1_","rc7_","rc1_","rc7_","rc6_"],
|
||||
["rc7_","rc6_","rc4_","rc0_","rc4_","rc3_","rc5_","rc5_","rc6_","rc4_","rc7_","rc0_","rc3_","rc5_","rc0_","rc5_","rc7_","rc2_","rc6_","rc6_","rc4_","rc3_","rc0_","rc5_","rc3_","rc0_","rc2_","rc2_","rc4_","rc1_","rc5_","rc0_","rc3_","rc2_","rc6_","rc3_","rc3_","rc5_","rc6_","rc5_","rc7_","rc0_","rc2_","rc2_","rc7_","rc0_","rc3_","rc0_","rc0_","rc6_","rc0_","rc2_","rc7_","rc1_","rc3_","rc7_","rc7_","rc4_","rc2_","rc6_","rc1_","rc2_","rc7_","rc5_","rc3_","rc7_","rc2_","rc3_","rc4_","rc1_","rc5_","rc3_","rc7_","rc7_","rc0_","rc2_","rc6_","rc0_","rc6_","rc2_","rc1_","rc0_","rc7_","rc0_","rc7_","rc6_","rc0_","rc2_","rc5_","rc1_","rc0_","rc5_","rc5_","rc4_","rc5_","rc6_","rc0_","rc7_","rc6_","rc0_","rc6_","rc1_","rc2_","rc6_","rc5_","rc3_","rc1_","rc1_","rc1_","rc6_","rc0_","rc4_","rc3_","rc0_","rc3_","rc6_","rc5_","rc3_","rc7_","rc7_","rc5_","rc6_","rc6_","rc7_","rc0_","rc0_","rc6_","rc3_","rc1_","rc2_","rc4_","rc2_","rc2_","rc4_","rc5_","rc7_","rc2_","rc3_","rc5_","rc7_","rc7_","rc1_","rc3_","rc6_"],
|
||||
["rc6_","rc6_","rc5_","rc5_","rc1_","rc6_","rc0_","rc7_","rc0_","rc3_","rc3_","rc3_","rc3_","rc5_","rc4_","rc4_","rc7_","rc6_","rc3_","rc0_","rc7_","rc2_","rc6_","rc6_","rc5_","rc7_","rc4_","rc4_","rc1_","rc2_","rc6_","rc0_","rc1_","rc3_","rc3_","rc5_","rc2_","rc1_","rc3_","rc7_","rc6_","rc1_","rc6_","rc3_","rc6_","rc3_","rc6_","rc1_","rc2_","rc5_","rc2_","rc3_","rc6_","rc4_","rc5_","rc3_","rc7_","rc0_","rc6_","rc0_","rc7_","rc0_","rc1_","rc1_","rc5_","rc6_","rc6_","rc5_","rc1_","rc4_","rc0_","rc2_","rc6_","rc7_","rc1_","rc5_","rc1_","rc2_","rc4_","rc1_","rc1_","rc6_","rc3_","rc3_","rc7_","rc1_","rc2_","rc6_","rc0_","rc5_","rc4_","rc2_","rc0_","rc3_","rc4_","rc3_","rc1_","rc7_","rc7_","rc7_","rc5_","rc6_","rc0_","rc7_","rc1_","rc5_","rc3_","rc1_","rc2_","rc3_","rc6_","rc6_","rc4_","rc2_","rc5_","rc0_","rc1_","rc2_","rc6_","rc6_","rc7_","rc7_","rc4_","rc3_","rc5_","rc3_","rc7_","rc4_","rc6_","rc7_","rc4_","rc1_","rc7_","rc7_","rc1_","rc5_","rc6_","rc3_","rc4_","rc1_","rc4_","rc5_","rc4_","rc6_"],
|
||||
["rc5_","rc0_","rc0_","rc2_","rc4_","rc5_","rc7_","rc5_","rc4_","rc4_","rc0_","rc4_","rc5_","rc1_","rc3_","rc5_","rc4_","rc5_","rc6_","rc4_","rc6_","rc7_","rc5_","rc5_","rc6_","rc2_","rc4_","rc4_","rc5_","rc1_","rc7_","rc2_","rc1_","rc0_","rc4_","rc0_","rc2_","rc4_","rc7_","rc1_","rc0_","rc6_","rc6_","rc2_","rc1_","rc4_","rc6_","rc6_","rc2_","rc1_","rc6_","rc0_","rc3_","rc7_","rc2_","rc7_","rc0_","rc1_","rc3_","rc1_","rc6_","rc5_","rc5_","rc1_","rc3_","rc2_","rc1_","rc3_","rc0_","rc7_","rc4_","rc3_","rc3_","rc4_","rc0_","rc0_","rc0_","rc5_","rc1_","rc6_","rc1_","rc4_","rc3_","rc4_","rc6_","rc6_","rc2_","rc3_","rc6_","rc1_","rc1_","rc1_","rc6_","rc3_","rc7_","rc5_","rc1_","rc7_","rc7_","rc3_","rc1_","rc4_","rc0_","rc2_","rc4_","rc7_","rc4_","rc5_","rc3_","rc2_","rc4_","rc7_","rc0_","rc5_","rc4_","rc2_","rc6_","rc4_","rc3_","rc1_","rc5_","rc1_","rc6_","rc4_","rc5_","rc3_","rc6_","rc4_","rc3_","rc6_","rc7_","rc0_","rc2_","rc5_","rc1_","rc0_","rc4_","rc6_","rc4_","rc0_","rc2_","rc5_","rc0_","rc7_"],
|
||||
["rc0_","rc4_","rc3_","rc0_","rc3_","rc2_","rc7_","rc0_","rc7_","rc1_","rc3_","rc2_","rc5_","rc4_","rc0_","rc7_","rc2_","rc0_","rc7_","rc2_","rc6_","rc2_","rc1_","rc3_","rc3_","rc1_","rc7_","rc2_","rc4_","rc6_","rc3_","rc7_","rc0_","rc2_","rc7_","rc7_","rc7_","rc6_","rc5_","rc2_","rc4_","rc1_","rc6_","rc2_","rc4_","rc5_","rc7_","rc6_","rc6_","rc3_","rc0_","rc1_","rc3_","rc1_","rc7_","rc4_","rc0_","rc1_","rc5_","rc3_","rc1_","rc3_","rc7_","rc7_","rc1_","rc6_","rc0_","rc7_","rc7_","rc3_","rc4_","rc5_","rc3_","rc2_","rc0_","rc6_","rc2_","rc1_","rc1_","rc1_","rc6_","rc1_","rc3_","rc4_","rc1_","rc4_","rc3_","rc3_","rc3_","rc5_","rc6_","rc3_","rc2_","rc6_","rc2_","rc7_","rc2_","rc0_","rc6_","rc0_","rc6_","rc6_","rc6_","rc2_","rc5_","rc3_","rc2_","rc4_","rc0_","rc5_","rc0_","rc0_","rc3_","rc2_","rc6_","rc4_","rc1_","rc2_","rc4_","rc0_","rc5_","rc5_","rc2_","rc1_","rc7_","rc7_","rc6_","rc6_","rc4_","rc0_","rc1_","rc1_","rc2_","rc1_","rc2_","rc0_","rc1_","rc4_","rc2_","rc5_","rc5_","rc3_","rc2_","rc2_"],
|
||||
["rc4_","rc4_","rc2_","rc1_","rc3_","rc4_","rc4_","rc3_","rc6_","rc1_","rc1_","rc7_","rc7_","rc4_","rc2_","rc5_","rc7_","rc7_","rc1_","rc4_","rc3_","rc3_","rc0_","rc1_","rc0_","rc6_","rc2_","rc1_","rc2_","rc3_","rc1_","rc0_","rc2_","rc1_","rc0_","rc3_","rc6_","rc1_","rc2_","rc3_","rc5_","rc2_","rc3_","rc3_","rc3_","rc7_","rc6_","rc4_","rc2_","rc4_","rc6_","rc7_","rc2_","rc5_","rc0_","rc3_","rc2_","rc0_","rc1_","rc7_","rc7_","rc3_","rc4_","rc2_","rc4_","rc1_","rc7_","rc1_","rc3_","rc1_","rc7_","rc2_","rc3_","rc7_","rc0_","rc6_","rc3_","rc7_","rc1_","rc3_","rc5_","rc0_","rc0_","rc3_","rc7_","rc6_","rc2_","rc7_","rc6_","rc2_","rc6_","rc1_","rc3_","rc5_","rc3_","rc0_","rc3_","rc2_","rc6_","rc5_","rc2_","rc4_","rc1_","rc6_","rc7_","rc1_","rc0_","rc0_","rc6_","rc5_","rc5_","rc2_","rc2_","rc1_","rc7_","rc0_","rc1_","rc6_","rc7_","rc5_","rc5_","rc5_","rc3_","rc5_","rc7_","rc0_","rc6_","rc2_","rc7_","rc6_","rc7_","rc5_","rc1_","rc3_","rc1_","rc7_","rc2_","rc6_","rc3_","rc1_","rc4_","rc0_","rc1_","rc1_"],
|
||||
["rc7_","rc1_","rc3_","rc5_","rc0_","rc5_","rc5_","rc5_","rc6_","rc7_","rc7_","rc4_","rc2_","rc5_","rc5_","rc7_","rc7_","rc4_","rc1_","rc2_","rc3_","rc5_","rc7_","rc7_","rc4_","rc0_","rc2_","rc0_","rc6_","rc0_","rc5_","rc7_","rc4_","rc0_","rc5_","rc4_","rc6_","rc4_","rc5_","rc7_","rc2_","rc3_","rc2_","rc6_","rc5_","rc3_","rc0_","rc1_","rc3_","rc5_","rc4_","rc4_","rc6_","rc2_","rc4_","rc5_","rc4_","rc7_","rc3_","rc6_","rc4_","rc5_","rc2_","rc5_","rc2_","rc5_","rc3_","rc3_","rc1_","rc2_","rc7_","rc2_","rc0_","rc6_","rc4_","rc3_","rc0_","rc2_","rc7_","rc6_","rc5_","rc0_","rc0_","rc2_","rc3_","rc3_","rc6_","rc0_","rc2_","rc2_","rc0_","rc3_","rc5_","rc0_","rc6_","rc3_","rc0_","rc0_","rc7_","rc3_","rc1_","rc7_","rc4_","rc7_","rc1_","rc2_","rc5_","rc2_","rc2_","rc2_","rc2_","rc7_","rc2_","rc5_","rc5_","rc6_","rc1_","rc7_","rc6_","rc1_","rc0_","rc1_","rc7_","rc7_","rc2_","rc0_","rc2_","rc1_","rc7_","rc1_","rc7_","rc4_","rc7_","rc4_","rc2_","rc6_","rc4_","rc6_","rc5_","rc4_","rc3_","rc4_","rc2_","rc3_"],
|
||||
["rc5_","rc4_","rc3_","rc6_","rc0_","rc6_","rc5_","rc0_","rc3_","rc4_","rc2_","rc2_","rc3_","rc6_","rc6_","rc7_","rc7_","rc0_","rc5_","rc5_","rc2_","rc0_","rc3_","rc7_","rc2_","rc3_","rc4_","rc1_","rc5_","rc7_","rc5_","rc4_","rc4_","rc6_","rc2_","rc3_","rc2_","rc1_","rc2_","rc5_","rc6_","rc3_","rc7_","rc4_","rc6_","rc0_","rc3_","rc4_","rc7_","rc6_","rc0_","rc0_","rc3_","rc3_","rc6_","rc2_","rc3_","rc7_","rc2_","rc1_","rc5_","rc3_","rc4_","rc0_","rc7_","rc2_","rc2_","rc5_","rc5_","rc7_","rc4_","rc7_","rc7_","rc7_","rc0_","rc4_","rc6_","rc0_","rc7_","rc1_","rc0_","rc3_","rc7_","rc3_","rc2_","rc6_","rc2_","rc6_","rc6_","rc4_","rc7_","rc4_","rc6_","rc1_","rc0_","rc0_","rc7_","rc1_","rc4_","rc4_","rc1_","rc0_","rc5_","rc0_","rc6_","rc0_","rc4_","rc3_","rc1_","rc6_","rc3_","rc6_","rc1_","rc5_","rc4_","rc7_","rc6_","rc0_","rc1_","rc4_","rc4_","rc2_","rc4_","rc2_","rc5_","rc0_","rc7_","rc4_","rc4_","rc1_","rc6_","rc7_","rc7_","rc5_","rc4_","rc6_","rc4_","rc4_","rc3_","rc1_","rc0_","rc0_","rc0_","rc3_"],
|
||||
["rc3_","rc6_","rc6_","rc4_","rc0_","rc1_","rc2_","rc4_","rc4_","rc0_","rc7_","rc2_","rc5_","rc0_","rc3_","rc4_","rc5_","rc4_","rc1_","rc0_","rc6_","rc5_","rc1_","rc2_","rc1_","rc5_","rc5_","rc6_","rc2_","rc0_","rc5_","rc0_","rc6_","rc5_","rc5_","rc2_","rc7_","rc1_","rc5_","rc6_","rc7_","rc6_","rc1_","rc5_","rc4_","rc2_","rc2_","rc0_","rc3_","rc2_","rc6_","rc5_","rc0_","rc0_","rc3_","rc3_","rc4_","rc2_","rc2_","rc1_","rc0_","rc6_","rc1_","rc5_","rc1_","rc3_","rc1_","rc1_","rc4_","rc1_","rc2_","rc2_","rc4_","rc4_","rc3_","rc3_","rc2_","rc5_","rc6_","rc7_","rc5_","rc1_","rc3_","rc7_","rc2_","rc6_","rc4_","rc3_","rc5_","rc4_","rc2_","rc4_","rc1_","rc0_","rc6_","rc1_","rc4_","rc7_","rc2_","rc0_","rc7_","rc0_","rc1_","rc0_","rc4_","rc3_","rc3_","rc4_","rc0_","rc1_","rc6_","rc2_","rc4_","rc3_","rc2_","rc5_","rc6_","rc0_","rc3_","rc1_","rc6_","rc1_","rc5_","rc5_","rc6_","rc0_","rc3_","rc5_","rc0_","rc1_","rc0_","rc0_","rc7_","rc7_","rc2_","rc7_","rc7_","rc1_","rc3_","rc0_","rc6_","rc7_","rc2_","rc1_"],
|
||||
["rc7_","rc0_","rc1_","rc1_","rc4_","rc5_","rc0_","rc4_","rc4_","rc4_","rc3_","rc5_","rc6_","rc5_","rc0_","rc1_","rc5_","rc1_","rc3_","rc1_","rc4_","rc5_","rc5_","rc0_","rc4_","rc1_","rc2_","rc6_","rc3_","rc5_","rc2_","rc4_","rc7_","rc6_","rc2_","rc1_","rc4_","rc6_","rc4_","rc5_","rc2_","rc2_","rc4_","rc4_","rc2_","rc0_","rc5_","rc5_","rc2_","rc0_","rc3_","rc3_","rc7_","rc2_","rc2_","rc3_","rc3_","rc0_","rc7_","rc7_","rc0_","rc6_","rc6_","rc3_","rc4_","rc7_","rc4_","rc6_","rc5_","rc2_","rc5_","rc4_","rc6_","rc5_","rc1_","rc1_","rc2_","rc0_","rc2_","rc0_","rc0_","rc5_","rc1_","rc5_","rc0_","rc6_","rc1_","rc0_","rc6_","rc0_","rc4_","rc3_","rc4_","rc7_","rc6_","rc5_","rc5_","rc2_","rc7_","rc1_","rc7_","rc1_","rc4_","rc0_","rc0_","rc4_","rc0_","rc6_","rc5_","rc5_","rc7_","rc4_","rc6_","rc0_","rc3_","rc1_","rc6_","rc2_","rc3_","rc6_","rc2_","rc0_","rc0_","rc2_","rc0_","rc2_","rc2_","rc4_","rc2_","rc0_","rc3_","rc7_","rc3_","rc3_","rc1_","rc3_","rc1_","rc7_","rc2_","rc1_","rc3_","rc7_","rc4_","rc7_"],
|
||||
["rc5_","rc2_","rc3_","rc5_","rc2_","rc5_","rc6_","rc7_","rc2_","rc1_","rc3_","rc4_","rc4_","rc6_","rc2_","rc6_","rc5_","rc0_","rc0_","rc3_","rc1_","rc1_","rc5_","rc3_","rc1_","rc7_","rc0_","rc3_","rc6_","rc7_","rc1_","rc2_","rc5_","rc2_","rc7_","rc2_","rc4_","rc7_","rc3_","rc1_","rc3_","rc2_","rc5_","rc0_","rc7_","rc4_","rc6_","rc4_","rc3_","rc2_","rc6_","rc3_","rc0_","rc2_","rc6_","rc1_","rc7_","rc3_","rc0_","rc4_","rc4_","rc4_","rc6_","rc5_","rc5_","rc0_","rc1_","rc0_","rc2_","rc1_","rc3_","rc5_","rc0_","rc3_","rc6_","rc0_","rc1_","rc2_","rc6_","rc5_","rc7_","rc6_","rc5_","rc1_","rc1_","rc6_","rc6_","rc5_","rc4_","rc3_","rc4_","rc4_","rc5_","rc7_","rc3_","rc7_","rc6_","rc5_","rc7_","rc7_","rc7_","rc2_","rc4_","rc3_","rc7_","rc4_","rc6_","rc2_","rc3_","rc2_","rc3_","rc3_","rc7_","rc5_","rc5_","rc3_","rc3_","rc6_","rc3_","rc7_","rc7_","rc0_","rc3_","rc2_","rc2_","rc6_","rc1_","rc2_","rc7_","rc0_","rc3_","rc6_","rc1_","rc2_","rc0_","rc2_","rc1_","rc6_","rc6_","rc7_","rc5_","rc4_","rc3_","rc4_"],
|
||||
["rc3_","rc6_","rc6_","rc2_","rc7_","rc1_","rc7_","rc6_","rc1_","rc1_","rc4_","rc0_","rc2_","rc3_","rc6_","rc4_","rc0_","rc1_","rc4_","rc6_","rc1_","rc2_","rc6_","rc4_","rc5_","rc0_","rc4_","rc7_","rc6_","rc6_","rc7_","rc1_","rc4_","rc2_","rc0_","rc5_","rc4_","rc7_","rc1_","rc4_","rc1_","rc6_","rc1_","rc4_","rc6_","rc6_","rc4_","rc6_","rc3_","rc1_","rc1_","rc7_","rc6_","rc1_","rc5_","rc7_","rc3_","rc3_","rc1_","rc1_","rc7_","rc2_","rc0_","rc2_","rc2_","rc7_","rc4_","rc6_","rc3_","rc1_","rc1_","rc7_","rc0_","rc7_","rc1_","rc7_","rc6_","rc5_","rc1_","rc0_","rc6_","rc7_","rc4_","rc1_","rc1_","rc7_","rc7_","rc4_","rc5_","rc5_","rc5_","rc6_","rc0_","rc0_","rc4_","rc7_","rc4_","rc0_","rc0_","rc3_","rc4_","rc5_","rc6_","rc0_","rc6_","rc5_","rc4_","rc1_","rc1_","rc2_","rc7_","rc2_","rc1_","rc3_","rc4_","rc4_","rc1_","rc5_","rc3_","rc3_","rc0_","rc0_","rc1_","rc7_","rc0_","rc6_","rc5_","rc0_","rc3_","rc2_","rc6_","rc5_","rc6_","rc6_","rc2_","rc7_","rc2_","rc7_","rc2_","rc1_","rc0_","rc5_","rc4_","rc3_"],
|
||||
["rc5_","rc5_","rc1_","rc0_","rc7_","rc1_","rc1_","rc4_","rc7_","rc4_","rc3_","rc2_","rc7_","rc6_","rc2_","rc4_","rc6_","rc7_","rc4_","rc4_","rc1_","rc1_","rc4_","rc3_","rc5_","rc6_","rc3_","rc1_","rc2_","rc4_","rc2_","rc4_","rc2_","rc6_","rc3_","rc4_","rc2_","rc6_","rc1_","rc6_","rc0_","rc7_","rc5_","rc7_","rc6_","rc0_","rc3_","rc4_","rc6_","rc5_","rc4_","rc0_","rc7_","rc0_","rc4_","rc6_","rc6_","rc1_","rc7_","rc7_","rc0_","rc1_","rc0_","rc5_","rc7_","rc5_","rc2_","rc1_","rc3_","rc1_","rc3_","rc3_","rc3_","rc3_","rc6_","rc0_","rc5_","rc2_","rc7_","rc0_","rc2_","rc7_","rc4_","rc1_","rc5_","rc2_","rc2_","rc6_","rc6_","rc0_","rc6_","rc4_","rc1_","rc3_","rc6_","rc6_","rc4_","rc3_","rc7_","rc7_","rc2_","rc4_","rc7_","rc1_","rc1_","rc0_","rc5_","rc3_","rc3_","rc6_","rc0_","rc0_","rc3_","rc2_","rc6_","rc6_","rc6_","rc0_","rc7_","rc4_","rc4_","rc3_","rc0_","rc0_","rc6_","rc3_","rc4_","rc7_","rc3_","rc7_","rc0_","rc6_","rc6_","rc6_","rc5_","rc1_","rc2_","rc4_","rc4_","rc2_","rc1_","rc3_","rc5_","rc4_"],
|
||||
["rc1_","rc0_","rc1_","rc0_","rc0_","rc0_","rc1_","rc0_","rc1_","rc3_","rc6_","rc2_","rc7_","rc0_","rc2_","rc0_","rc2_","rc1_","rc6_","rc6_","rc0_","rc7_","rc6_","rc3_","rc5_","rc1_","rc2_","rc3_","rc6_","rc2_","rc6_","rc3_","rc3_","rc1_","rc5_","rc7_","rc3_","rc4_","rc1_","rc2_","rc4_","rc7_","rc6_","rc4_","rc3_","rc2_","rc0_","rc0_","rc1_","rc1_","rc1_","rc6_","rc7_","rc0_","rc0_","rc6_","rc3_","rc6_","rc7_","rc7_","rc3_","rc1_","rc3_","rc7_","rc1_","rc3_","rc1_","rc3_","rc0_","rc4_","rc7_","rc1_","rc6_","rc7_","rc1_","rc4_","rc3_","rc1_","rc6_","rc0_","rc1_","rc0_","rc2_","rc7_","rc4_","rc0_","rc4_","rc4_","rc3_","rc4_","rc3_","rc5_","rc0_","rc3_","rc4_","rc6_","rc4_","rc0_","rc7_","rc4_","rc7_","rc6_","rc4_","rc6_","rc7_","rc4_","rc0_","rc3_","rc6_","rc6_","rc4_","rc0_","rc1_","rc5_","rc7_","rc1_","rc6_","rc0_","rc3_","rc3_","rc6_","rc2_","rc6_","rc7_","rc4_","rc5_","rc2_","rc1_","rc4_","rc7_","rc6_","rc1_","rc7_","rc4_","rc6_","rc1_","rc6_","rc5_","rc1_","rc1_","rc5_","rc0_","rc2_","rc0_"],
|
||||
["rc2_","rc0_","rc2_","rc4_","rc6_","rc6_","rc3_","rc4_","rc4_","rc0_","rc0_","rc3_","rc7_","rc1_","rc3_","rc7_","rc1_","rc1_","rc7_","rc3_","rc1_","rc6_","rc7_","rc2_","rc4_","rc2_","rc6_","rc6_","rc7_","rc0_","rc1_","rc0_","rc4_","rc2_","rc1_","rc0_","rc4_","rc4_","rc6_","rc7_","rc4_","rc6_","rc1_","rc2_","rc2_","rc6_","rc0_","rc2_","rc2_","rc4_","rc0_","rc2_","rc4_","rc2_","rc5_","rc1_","rc0_","rc4_","rc6_","rc1_","rc5_","rc4_","rc7_","rc7_","rc6_","rc2_","rc6_","rc4_","rc7_","rc2_","rc2_","rc3_","rc6_","rc5_","rc1_","rc4_","rc5_","rc4_","rc2_","rc0_","rc7_","rc2_","rc2_","rc6_","rc1_","rc2_","rc2_","rc6_","rc3_","rc2_","rc0_","rc4_","rc7_","rc6_","rc5_","rc6_","rc1_","rc0_","rc0_","rc1_","rc7_","rc6_","rc1_","rc2_","rc3_","rc4_","rc0_","rc1_","rc7_","rc4_","rc7_","rc2_","rc1_","rc3_","rc5_","rc7_","rc7_","rc6_","rc5_","rc0_","rc4_","rc4_","rc6_","rc5_","rc4_","rc6_","rc4_","rc5_","rc4_","rc4_","rc7_","rc0_","rc5_","rc2_","rc2_","rc2_","rc3_","rc3_","rc7_","rc0_","rc1_","rc5_","rc1_","rc0_"],
|
||||
["rc0_","rc6_","rc1_","rc4_","rc7_","rc4_","rc6_","rc0_","rc4_","rc3_","rc7_","rc5_","rc4_","rc2_","rc2_","rc4_","rc0_","rc7_","rc3_","rc7_","rc1_","rc5_","rc5_","rc4_","rc5_","rc3_","rc4_","rc3_","rc2_","rc7_","rc6_","rc2_","rc3_","rc3_","rc7_","rc7_","rc1_","rc6_","rc4_","rc6_","rc3_","rc6_","rc3_","rc4_","rc1_","rc4_","rc1_","rc3_","rc5_","rc0_","rc3_","rc6_","rc3_","rc0_","rc2_","rc0_","rc2_","rc3_","rc0_","rc0_","rc3_","rc3_","rc0_","rc0_","rc2_","rc2_","rc5_","rc6_","rc4_","rc3_","rc1_","rc2_","rc0_","rc5_","rc2_","rc1_","rc0_","rc4_","rc0_","rc2_","rc2_","rc0_","rc1_","rc7_","rc1_","rc2_","rc0_","rc6_","rc2_","rc4_","rc4_","rc0_","rc4_","rc0_","rc5_","rc1_","rc7_","rc4_","rc5_","rc2_","rc0_","rc4_","rc4_","rc4_","rc4_","rc0_","rc4_","rc6_","rc4_","rc0_","rc6_","rc0_","rc7_","rc6_","rc5_","rc0_","rc6_","rc3_","rc1_","rc5_","rc4_","rc4_","rc7_","rc3_","rc4_","rc6_","rc7_","rc6_","rc0_","rc0_","rc5_","rc3_","rc7_","rc0_","rc5_","rc3_","rc6_","rc0_","rc1_","rc1_","rc2_","rc2_","rc5_","rc6_"],
|
||||
["rc5_","rc2_","rc5_","rc2_","rc0_","rc3_","rc5_","rc6_","rc0_","rc5_","rc0_","rc0_","rc4_","rc6_","rc5_","rc7_","rc5_","rc6_","rc7_","rc0_","rc6_","rc7_","rc4_","rc0_","rc7_","rc4_","rc1_","rc3_","rc5_","rc1_","rc4_","rc4_","rc4_","rc4_","rc2_","rc5_","rc7_","rc3_","rc2_","rc2_","rc7_","rc6_","rc1_","rc1_","rc3_","rc6_","rc7_","rc4_","rc7_","rc6_","rc2_","rc3_","rc0_","rc1_","rc1_","rc3_","rc6_","rc5_","rc4_","rc4_","rc3_","rc6_","rc3_","rc2_","rc3_","rc5_","rc4_","rc1_","rc5_","rc2_","rc1_","rc7_","rc1_","rc0_","rc1_","rc4_","rc2_","rc1_","rc5_","rc5_","rc6_","rc1_","rc6_","rc2_","rc3_","rc7_","rc5_","rc4_","rc4_","rc1_","rc3_","rc3_","rc4_","rc0_","rc2_","rc7_","rc3_","rc4_","rc3_","rc6_","rc7_","rc1_","rc2_","rc5_","rc5_","rc2_","rc7_","rc2_","rc0_","rc4_","rc7_","rc1_","rc1_","rc7_","rc2_","rc6_","rc7_","rc0_","rc6_","rc3_","rc1_","rc2_","rc4_","rc2_","rc2_","rc7_","rc1_","rc5_","rc3_","rc2_","rc0_","rc3_","rc0_","rc6_","rc5_","rc6_","rc4_","rc4_","rc5_","rc3_","rc6_","rc1_","rc5_","rc2_"],
|
||||
["rc0_","rc6_","rc0_","rc7_","rc5_","rc4_","rc5_","rc7_","rc4_","rc0_","rc0_","rc7_","rc2_","rc3_","rc0_","rc2_","rc4_","rc5_","rc1_","rc1_","rc5_","rc3_","rc3_","rc0_","rc5_","rc7_","rc2_","rc7_","rc3_","rc7_","rc7_","rc6_","rc4_","rc0_","rc7_","rc4_","rc5_","rc4_","rc3_","rc2_","rc5_","rc1_","rc0_","rc3_","rc6_","rc5_","rc7_","rc7_","rc6_","rc7_","rc0_","rc0_","rc1_","rc0_","rc2_","rc4_","rc1_","rc1_","rc6_","rc5_","rc0_","rc6_","rc5_","rc6_","rc5_","rc4_","rc7_","rc7_","rc6_","rc7_","rc6_","rc2_","rc5_","rc7_","rc2_","rc6_","rc6_","rc4_","rc6_","rc4_","rc0_","rc0_","rc3_","rc0_","rc2_","rc3_","rc4_","rc2_","rc7_","rc5_","rc1_","rc6_","rc5_","rc7_","rc0_","rc1_","rc3_","rc3_","rc0_","rc6_","rc1_","rc5_","rc0_","rc0_","rc4_","rc2_","rc0_","rc0_","rc2_","rc1_","rc6_","rc0_","rc2_","rc6_","rc4_","rc1_","rc0_","rc6_","rc7_","rc2_","rc0_","rc0_","rc3_","rc3_","rc1_","rc1_","rc6_","rc1_","rc5_","rc3_","rc2_","rc2_","rc5_","rc7_","rc7_","rc3_","rc1_","rc0_","rc1_","rc0_","rc1_","rc2_","rc5_","rc5_"],
|
||||
["rc6_","rc3_","rc1_","rc2_","rc4_","rc1_","rc5_","rc4_","rc4_","rc4_","rc5_","rc2_","rc5_","rc5_","rc0_","rc4_","rc3_","rc6_","rc6_","rc3_","rc3_","rc4_","rc5_","rc5_","rc5_","rc3_","rc4_","rc0_","rc3_","rc1_","rc4_","rc1_","rc1_","rc6_","rc4_","rc5_","rc6_","rc2_","rc5_","rc7_","rc2_","rc0_","rc5_","rc3_","rc0_","rc1_","rc7_","rc3_","rc6_","rc4_","rc2_","rc1_","rc2_","rc4_","rc1_","rc4_","rc0_","rc3_","rc3_","rc6_","rc1_","rc6_","rc4_","rc5_","rc6_","rc0_","rc4_","rc0_","rc5_","rc3_","rc6_","rc5_","rc3_","rc4_","rc4_","rc0_","rc3_","rc7_","rc1_","rc6_","rc6_","rc4_","rc7_","rc3_","rc3_","rc0_","rc2_","rc1_","rc1_","rc6_","rc5_","rc3_","rc3_","rc7_","rc3_","rc1_","rc3_","rc0_","rc1_","rc4_","rc2_","rc3_","rc2_","rc4_","rc6_","rc1_","rc3_","rc7_","rc5_","rc7_","rc0_","rc5_","rc2_","rc6_","rc6_","rc2_","rc6_","rc7_","rc2_","rc4_","rc0_","rc6_","rc2_","rc6_","rc0_","rc6_","rc3_","rc5_","rc0_","rc6_","rc3_","rc0_","rc4_","rc3_","rc0_","rc5_","rc4_","rc6_","rc0_","rc1_","rc7_","rc7_","rc2_","rc0_"],
|
||||
["rc2_","rc2_","rc5_","rc7_","rc2_","rc1_","rc0_","rc5_","rc6_","rc2_","rc2_","rc1_","rc1_","rc3_","rc3_","rc0_","rc6_","rc3_","rc2_","rc6_","rc4_","rc2_","rc0_","rc7_","rc4_","rc3_","rc4_","rc6_","rc1_","rc1_","rc1_","rc6_","rc0_","rc1_","rc6_","rc7_","rc0_","rc7_","rc4_","rc4_","rc3_","rc3_","rc5_","rc2_","rc5_","rc4_","rc2_","rc3_","rc5_","rc5_","rc6_","rc4_","rc1_","rc0_","rc2_","rc4_","rc7_","rc1_","rc0_","rc6_","rc2_","rc4_","rc4_","rc0_","rc2_","rc2_","rc7_","rc5_","rc7_","rc7_","rc6_","rc0_","rc6_","rc7_","rc3_","rc3_","rc5_","rc3_","rc2_","rc6_","rc4_","rc6_","rc7_","rc3_","rc4_","rc6_","rc6_","rc2_","rc5_","rc7_","rc3_","rc1_","rc3_","rc1_","rc3_","rc6_","rc0_","rc5_","rc2_","rc0_","rc0_","rc3_","rc6_","rc3_","rc0_","rc1_","rc4_","rc2_","rc0_","rc7_","rc2_","rc1_","rc3_","rc6_","rc5_","rc3_","rc5_","rc2_","rc4_","rc2_","rc5_","rc5_","rc4_","rc6_","rc3_","rc7_","rc6_","rc0_","rc3_","rc3_","rc6_","rc7_","rc2_","rc3_","rc4_","rc3_","rc0_","rc6_","rc0_","rc7_","rc7_","rc1_","rc2_","rc4_"],
|
||||
["rc4_","rc4_","rc0_","rc4_","rc3_","rc6_","rc4_","rc4_","rc7_","rc4_","rc5_","rc6_","rc3_","rc6_","rc5_","rc6_","rc2_","rc2_","rc2_","rc3_","rc6_","rc6_","rc1_","rc0_","rc7_","rc0_","rc0_","rc4_","rc2_","rc0_","rc2_","rc7_","rc4_","rc0_","rc1_","rc6_","rc7_","rc2_","rc6_","rc0_","rc5_","rc3_","rc5_","rc2_","rc2_","rc7_","rc0_","rc7_","rc7_","rc5_","rc0_","rc4_","rc3_","rc4_","rc3_","rc4_","rc5_","rc6_","rc2_","rc0_","rc0_","rc4_","rc2_","rc1_","rc6_","rc2_","rc6_","rc0_","rc0_","rc5_","rc3_","rc6_","rc4_","rc2_","rc4_","rc7_","rc1_","rc0_","rc7_","rc5_","rc7_","rc1_","rc7_","rc2_","rc2_","rc5_","rc3_","rc6_","rc1_","rc0_","rc7_","rc2_","rc2_","rc5_","rc2_","rc3_","rc0_","rc3_","rc0_","rc3_","rc7_","rc7_","rc1_","rc5_","rc7_","rc1_","rc2_","rc0_","rc7_","rc3_","rc2_","rc6_","rc4_","rc0_","rc7_","rc5_","rc3_","rc2_","rc2_","rc5_","rc3_","rc7_","rc0_","rc3_","rc7_","rc4_","rc2_","rc5_","rc2_","rc2_","rc0_","rc7_","rc3_","rc0_","rc2_","rc6_","rc4_","rc1_","rc7_","rc4_","rc5_","rc0_","rc1_","rc3_"],
|
||||
["rc6_","rc1_","rc0_","rc4_","rc5_","rc2_","rc6_","rc2_","rc5_","rc2_","rc3_","rc3_","rc0_","rc0_","rc3_","rc7_","rc5_","rc7_","rc4_","rc4_","rc5_","rc1_","rc4_","rc1_","rc3_","rc1_","rc3_","rc2_","rc3_","rc6_","rc4_","rc3_","rc5_","rc5_","rc2_","rc1_","rc1_","rc5_","rc1_","rc5_","rc4_","rc1_","rc2_","rc2_","rc4_","rc1_","rc3_","rc1_","rc1_","rc3_","rc6_","rc2_","rc5_","rc1_","rc1_","rc6_","rc5_","rc2_","rc6_","rc3_","rc0_","rc5_","rc4_","rc0_","rc7_","rc2_","rc5_","rc2_","rc6_","rc4_","rc1_","rc6_","rc3_","rc5_","rc4_","rc7_","rc4_","rc0_","rc3_","rc2_","rc5_","rc5_","rc5_","rc0_","rc2_","rc0_","rc7_","rc5_","rc2_","rc3_","rc0_","rc7_","rc5_","rc5_","rc7_","rc0_","rc7_","rc3_","rc1_","rc0_","rc5_","rc6_","rc0_","rc4_","rc7_","rc5_","rc0_","rc3_","rc7_","rc4_","rc4_","rc3_","rc2_","rc5_","rc0_","rc0_","rc4_","rc6_","rc0_","rc5_","rc1_","rc4_","rc1_","rc6_","rc1_","rc7_","rc6_","rc4_","rc3_","rc5_","rc7_","rc2_","rc5_","rc3_","rc5_","rc1_","rc3_","rc1_","rc0_","rc7_","rc6_","rc6_","rc4_","rc5_"],
|
||||
["rc7_","rc4_","rc1_","rc0_","rc5_","rc4_","rc3_","rc7_","rc3_","rc5_","rc2_","rc7_","rc5_","rc2_","rc2_","rc4_","rc4_","rc2_","rc5_","rc2_","rc7_","rc4_","rc7_","rc3_","rc5_","rc1_","rc3_","rc1_","rc1_","rc4_","rc5_","rc5_","rc5_","rc0_","rc7_","rc1_","rc2_","rc2_","rc7_","rc4_","rc7_","rc7_","rc1_","rc4_","rc0_","rc6_","rc1_","rc0_","rc1_","rc1_","rc4_","rc6_","rc3_","rc0_","rc0_","rc3_","rc5_","rc6_","rc1_","rc1_","rc7_","rc0_","rc5_","rc6_","rc4_","rc4_","rc2_","rc3_","rc6_","rc6_","rc6_","rc1_","rc6_","rc1_","rc0_","rc3_","rc3_","rc4_","rc5_","rc0_","rc2_","rc2_","rc5_","rc7_","rc0_","rc7_","rc7_","rc1_","rc5_","rc7_","rc2_","rc1_","rc1_","rc1_","rc6_","rc7_","rc3_","rc5_","rc2_","rc5_","rc7_","rc2_","rc7_","rc1_","rc7_","rc3_","rc5_","rc5_","rc6_","rc3_","rc5_","rc3_","rc1_","rc6_","rc6_","rc5_","rc7_","rc1_","rc4_","rc4_","rc2_","rc5_","rc6_","rc7_","rc6_","rc0_","rc7_","rc7_","rc2_","rc5_","rc7_","rc0_","rc5_","rc5_","rc2_","rc3_","rc3_","rc6_","rc2_","rc2_","rc0_","rc3_","rc1_","rc2_"],
|
||||
["rc4_","rc4_","rc1_","rc0_","rc7_","rc7_","rc7_","rc6_","rc6_","rc7_","rc5_","rc5_","rc7_","rc4_","rc7_","rc7_","rc2_","rc3_","rc1_","rc5_","rc1_","rc0_","rc7_","rc6_","rc1_","rc1_","rc5_","rc1_","rc1_","rc4_","rc0_","rc5_","rc3_","rc4_","rc5_","rc7_","rc1_","rc0_","rc0_","rc5_","rc1_","rc5_","rc7_","rc1_","rc4_","rc5_","rc0_","rc7_","rc3_","rc7_","rc0_","rc2_","rc3_","rc1_","rc6_","rc3_","rc3_","rc4_","rc0_","rc4_","rc3_","rc7_","rc4_","rc4_","rc7_","rc7_","rc1_","rc4_","rc4_","rc5_","rc7_","rc2_","rc3_","rc7_","rc4_","rc3_","rc4_","rc4_","rc1_","rc7_","rc4_","rc2_","rc5_","rc7_","rc2_","rc3_","rc0_","rc2_","rc6_","rc0_","rc2_","rc1_","rc3_","rc3_","rc4_","rc7_","rc7_","rc3_","rc7_","rc5_","rc1_","rc4_","rc5_","rc5_","rc2_","rc6_","rc5_","rc5_","rc7_","rc0_","rc2_","rc6_","rc6_","rc3_","rc6_","rc6_","rc6_","rc3_","rc3_","rc3_","rc4_","rc4_","rc2_","rc1_","rc4_","rc1_","rc0_","rc5_","rc5_","rc3_","rc6_","rc3_","rc7_","rc7_","rc0_","rc5_","rc1_","rc1_","rc0_","rc5_","rc6_","rc1_","rc3_","rc6_"],
|
||||
["rc0_","rc3_","rc4_","rc5_","rc1_","rc3_","rc0_","rc5_","rc5_","rc0_","rc2_","rc4_","rc4_","rc0_","rc0_","rc0_","rc6_","rc4_","rc6_","rc6_","rc7_","rc6_","rc1_","rc4_","rc6_","rc0_","rc6_","rc5_","rc1_","rc7_","rc4_","rc5_","rc3_","rc0_","rc0_","rc6_","rc1_","rc2_","rc0_","rc2_","rc1_","rc4_","rc1_","rc1_","rc3_","rc0_","rc4_","rc6_","rc4_","rc0_","rc7_","rc5_","rc1_","rc0_","rc1_","rc0_","rc2_","rc4_","rc0_","rc3_","rc7_","rc3_","rc6_","rc4_","rc7_","rc4_","rc0_","rc7_","rc6_","rc0_","rc1_","rc0_","rc6_","rc1_","rc7_","rc2_","rc2_","rc1_","rc5_","rc0_","rc7_","rc6_","rc1_","rc2_","rc4_","rc5_","rc6_","rc2_","rc4_","rc4_","rc4_","rc0_","rc1_","rc4_","rc7_","rc3_","rc3_","rc7_","rc6_","rc0_","rc1_","rc6_","rc4_","rc0_","rc7_","rc6_","rc4_","rc5_","rc1_","rc4_","rc1_","rc5_","rc7_","rc7_","rc4_","rc3_","rc1_","rc5_","rc2_","rc2_","rc5_","rc0_","rc4_","rc3_","rc6_","rc2_","rc0_","rc1_","rc7_","rc7_","rc0_","rc3_","rc1_","rc3_","rc2_","rc2_","rc2_","rc4_","rc0_","rc3_","rc7_","rc0_","rc1_","rc7_"],
|
||||
["rc2_","rc2_","rc0_","rc1_","rc7_","rc1_","rc3_","rc0_","rc4_","rc1_","rc7_","rc6_","rc7_","rc6_","rc1_","rc0_","rc5_","rc6_","rc0_","rc7_","rc7_","rc7_","rc2_","rc5_","rc7_","rc1_","rc4_","rc4_","rc5_","rc5_","rc6_","rc4_","rc3_","rc7_","rc5_","rc4_","rc7_","rc7_","rc3_","rc3_","rc2_","rc6_","rc4_","rc7_","rc4_","rc7_","rc3_","rc6_","rc2_","rc4_","rc5_","rc3_","rc3_","rc3_","rc3_","rc3_","rc0_","rc0_","rc6_","rc0_","rc2_","rc4_","rc6_","rc6_","rc0_","rc6_","rc4_","rc4_","rc0_","rc2_","rc0_","rc5_","rc6_","rc7_","rc5_","rc7_","rc4_","rc6_","rc4_","rc4_","rc1_","rc7_","rc7_","rc0_","rc4_","rc6_","rc7_","rc2_","rc2_","rc6_","rc7_","rc7_","rc7_","rc4_","rc3_","rc2_","rc2_","rc0_","rc3_","rc0_","rc3_","rc7_","rc4_","rc4_","rc1_","rc5_","rc1_","rc6_","rc7_","rc1_","rc6_","rc2_","rc0_","rc1_","rc5_","rc6_","rc3_","rc0_","rc5_","rc3_","rc0_","rc5_","rc0_","rc0_","rc3_","rc5_","rc3_","rc3_","rc0_","rc4_","rc3_","rc2_","rc0_","rc0_","rc6_","rc1_","rc3_","rc7_","rc0_","rc4_","rc7_","rc2_","rc7_","rc0_"],
|
||||
["rc7_","rc1_","rc1_","rc5_","rc7_","rc1_","rc5_","rc6_","rc7_","rc4_","rc7_","rc4_","rc7_","rc0_","rc0_","rc0_","rc2_","rc2_","rc5_","rc0_","rc6_","rc4_","rc6_","rc4_","rc3_","rc5_","rc2_","rc1_","rc1_","rc0_","rc1_","rc5_","rc7_","rc0_","rc2_","rc4_","rc1_","rc2_","rc7_","rc3_","rc2_","rc3_","rc6_","rc3_","rc3_","rc4_","rc0_","rc0_","rc2_","rc3_","rc7_","rc3_","rc6_","rc4_","rc4_","rc4_","rc1_","rc7_","rc7_","rc4_","rc0_","rc4_","rc3_","rc2_","rc0_","rc4_","rc0_","rc5_","rc1_","rc2_","rc3_","rc1_","rc7_","rc3_","rc3_","rc5_","rc6_","rc1_","rc5_","rc4_","rc6_","rc6_","rc3_","rc3_","rc7_","rc7_","rc0_","rc3_","rc7_","rc6_","rc7_","rc6_","rc1_","rc5_","rc5_","rc0_","rc1_","rc0_","rc3_","rc6_","rc6_","rc2_","rc1_","rc2_","rc6_","rc3_","rc0_","rc2_","rc0_","rc0_","rc6_","rc5_","rc6_","rc3_","rc7_","rc7_","rc2_","rc5_","rc2_","rc7_","rc2_","rc1_","rc2_","rc7_","rc7_","rc3_","rc6_","rc4_","rc2_","rc1_","rc4_","rc0_","rc0_","rc1_","rc1_","rc4_","rc0_","rc3_","rc3_","rc1_","rc2_","rc0_","rc3_","rc0_"],
|
||||
["rc3_","rc3_","rc5_","rc0_","rc6_","rc6_","rc2_","rc1_","rc5_","rc1_","rc0_","rc7_","rc0_","rc7_","rc0_","rc1_","rc5_","rc1_","rc1_","rc2_","rc0_","rc7_","rc3_","rc0_","rc5_","rc3_","rc6_","rc3_","rc4_","rc1_","rc4_","rc0_","rc4_","rc5_","rc4_","rc7_","rc4_","rc3_","rc0_","rc1_","rc6_","rc4_","rc2_","rc6_","rc4_","rc7_","rc2_","rc6_","rc7_","rc7_","rc3_","rc6_","rc6_","rc4_","rc7_","rc6_","rc4_","rc4_","rc0_","rc0_","rc6_","rc3_","rc1_","rc3_","rc3_","rc1_","rc4_","rc2_","rc4_","rc3_","rc5_","rc7_","rc5_","rc4_","rc6_","rc3_","rc5_","rc6_","rc4_","rc2_","rc3_","rc3_","rc3_","rc2_","rc1_","rc1_","rc6_","rc5_","rc6_","rc6_","rc1_","rc0_","rc6_","rc7_","rc2_","rc3_","rc5_","rc7_","rc5_","rc1_","rc5_","rc7_","rc7_","rc2_","rc3_","rc1_","rc5_","rc0_","rc0_","rc1_","rc7_","rc6_","rc7_","rc6_","rc7_","rc0_","rc2_","rc5_","rc6_","rc7_","rc2_","rc7_","rc1_","rc3_","rc7_","rc4_","rc7_","rc6_","rc4_","rc0_","rc7_","rc6_","rc7_","rc5_","rc7_","rc3_","rc0_","rc1_","rc0_","rc3_","rc7_","rc2_","rc1_","rc2_"],
|
||||
["rc3_","rc7_","rc0_","rc6_","rc1_","rc0_","rc0_","rc2_","rc1_","rc1_","rc0_","rc0_","rc7_","rc3_","rc0_","rc5_","rc0_","rc3_","rc2_","rc0_","rc3_","rc7_","rc6_","rc3_","rc3_","rc6_","rc5_","rc5_","rc2_","rc0_","rc3_","rc6_","rc0_","rc6_","rc7_","rc5_","rc4_","rc3_","rc5_","rc7_","rc3_","rc3_","rc6_","rc1_","rc7_","rc3_","rc6_","rc7_","rc1_","rc1_","rc6_","rc6_","rc1_","rc5_","rc2_","rc7_","rc5_","rc0_","rc6_","rc5_","rc1_","rc3_","rc5_","rc2_","rc6_","rc4_","rc3_","rc4_","rc6_","rc5_","rc3_","rc6_","rc7_","rc5_","rc3_","rc4_","rc6_","rc4_","rc7_","rc6_","rc5_","rc1_","rc3_","rc1_","rc0_","rc5_","rc5_","rc2_","rc5_","rc5_","rc2_","rc5_","rc3_","rc4_","rc0_","rc5_","rc4_","rc0_","rc3_","rc5_","rc5_","rc6_","rc4_","rc6_","rc5_","rc0_","rc7_","rc2_","rc4_","rc6_","rc4_","rc0_","rc7_","rc3_","rc1_","rc1_","rc1_","rc1_","rc6_","rc3_","rc4_","rc7_","rc0_","rc3_","rc0_","rc2_","rc2_","rc0_","rc3_","rc2_","rc1_","rc6_","rc2_","rc7_","rc7_","rc1_","rc6_","rc3_","rc2_","rc2_","rc3_","rc2_","rc6_","rc7_"],
|
||||
["rc5_","rc7_","rc0_","rc5_","rc4_","rc0_","rc4_","rc1_","rc1_","rc6_","rc2_","rc0_","rc1_","rc5_","rc4_","rc4_","rc2_","rc3_","rc4_","rc0_","rc4_","rc7_","rc4_","rc5_","rc2_","rc7_","rc5_","rc6_","rc0_","rc7_","rc3_","rc0_","rc0_","rc6_","rc1_","rc7_","rc0_","rc3_","rc1_","rc5_","rc5_","rc0_","rc7_","rc4_","rc6_","rc6_","rc7_","rc6_","rc2_","rc2_","rc4_","rc3_","rc4_","rc6_","rc2_","rc3_","rc0_","rc2_","rc6_","rc4_","rc6_","rc5_","rc5_","rc6_","rc7_","rc7_","rc2_","rc5_","rc5_","rc1_","rc4_","rc7_","rc0_","rc7_","rc7_","rc7_","rc6_","rc4_","rc2_","rc1_","rc2_","rc7_","rc1_","rc7_","rc1_","rc5_","rc3_","rc3_","rc1_","rc6_","rc7_","rc6_","rc3_","rc5_","rc2_","rc0_","rc2_","rc2_","rc4_","rc0_","rc4_","rc2_","rc5_","rc7_","rc1_","rc2_","rc2_","rc1_","rc2_","rc7_","rc4_","rc4_","rc3_","rc2_","rc3_","rc3_","rc4_","rc2_","rc6_","rc5_","rc4_","rc3_","rc6_","rc2_","rc7_","rc5_","rc4_","rc5_","rc3_","rc0_","rc0_","rc0_","rc5_","rc7_","rc4_","rc5_","rc1_","rc2_","rc0_","rc1_","rc1_","rc0_","rc7_","rc6_"],
|
||||
["rc5_","rc4_","rc2_","rc1_","rc4_","rc0_","rc3_","rc0_","rc2_","rc7_","rc5_","rc0_","rc3_","rc0_","rc2_","rc6_","rc0_","rc0_","rc5_","rc5_","rc7_","rc6_","rc1_","rc0_","rc7_","rc5_","rc1_","rc0_","rc4_","rc6_","rc2_","rc0_","rc7_","rc4_","rc6_","rc7_","rc2_","rc4_","rc2_","rc5_","rc3_","rc4_","rc2_","rc2_","rc7_","rc3_","rc4_","rc4_","rc1_","rc2_","rc2_","rc7_","rc3_","rc2_","rc4_","rc1_","rc4_","rc5_","rc5_","rc6_","rc2_","rc1_","rc5_","rc2_","rc2_","rc3_","rc7_","rc6_","rc6_","rc0_","rc3_","rc5_","rc6_","rc2_","rc7_","rc6_","rc2_","rc0_","rc2_","rc4_","rc7_","rc7_","rc1_","rc5_","rc0_","rc0_","rc5_","rc0_","rc7_","rc2_","rc4_","rc3_","rc4_","rc2_","rc0_","rc4_","rc5_","rc7_","rc5_","rc6_","rc7_","rc3_","rc6_","rc6_","rc4_","rc7_","rc3_","rc6_","rc5_","rc6_","rc4_","rc1_","rc1_","rc6_","rc1_","rc0_","rc7_","rc2_","rc4_","rc5_","rc1_","rc3_","rc7_","rc7_","rc2_","rc7_","rc3_","rc5_","rc1_","rc2_","rc0_","rc6_","rc6_","rc5_","rc4_","rc0_","rc4_","rc5_","rc6_","rc0_","rc7_","rc6_","rc2_","rc1_"],
|
||||
["rc1_","rc7_","rc2_","rc0_","rc0_","rc7_","rc2_","rc0_","rc1_","rc0_","rc4_","rc1_","rc3_","rc3_","rc6_","rc7_","rc5_","rc4_","rc1_","rc0_","rc2_","rc7_","rc3_","rc5_","rc7_","rc3_","rc7_","rc5_","rc1_","rc7_","rc4_","rc6_","rc4_","rc2_","rc3_","rc5_","rc2_","rc7_","rc5_","rc0_","rc0_","rc1_","rc5_","rc3_","rc0_","rc3_","rc1_","rc0_","rc2_","rc4_","rc6_","rc2_","rc4_","rc0_","rc4_","rc3_","rc4_","rc2_","rc0_","rc4_","rc3_","rc1_","rc2_","rc6_","rc4_","rc0_","rc6_","rc7_","rc5_","rc3_","rc6_","rc7_","rc6_","rc7_","rc0_","rc3_","rc0_","rc1_","rc4_","rc1_","rc0_","rc2_","rc1_","rc5_","rc3_","rc1_","rc0_","rc3_","rc4_","rc1_","rc0_","rc7_","rc4_","rc4_","rc4_","rc2_","rc1_","rc0_","rc2_","rc5_","rc2_","rc2_","rc6_","rc3_","rc2_","rc1_","rc7_","rc2_","rc4_","rc4_","rc7_","rc2_","rc6_","rc6_","rc0_","rc1_","rc0_","rc0_","rc5_","rc6_","rc6_","rc0_","rc7_","rc4_","rc4_","rc1_","rc2_","rc1_","rc3_","rc3_","rc7_","rc0_","rc1_","rc4_","rc3_","rc5_","rc5_","rc7_","rc0_","rc7_","rc3_","rc4_","rc2_","rc2_"],
|
||||
["rc4_","rc0_","rc5_","rc5_","rc3_","rc7_","rc5_","rc1_","rc3_","rc7_","rc6_","rc4_","rc5_","rc7_","rc5_","rc5_","rc0_","rc0_","rc6_","rc1_","rc1_","rc2_","rc7_","rc4_","rc6_","rc2_","rc5_","rc4_","rc6_","rc2_","rc6_","rc3_","rc4_","rc1_","rc7_","rc3_","rc3_","rc5_","rc6_","rc7_","rc3_","rc7_","rc3_","rc7_","rc4_","rc6_","rc3_","rc4_","rc3_","rc7_","rc5_","rc5_","rc3_","rc3_","rc1_","rc2_","rc6_","rc1_","rc4_","rc7_","rc4_","rc5_","rc1_","rc3_","rc3_","rc1_","rc5_","rc1_","rc0_","rc3_","rc2_","rc6_","rc5_","rc7_","rc7_","rc5_","rc4_","rc7_","rc5_","rc0_","rc2_","rc0_","rc5_","rc7_","rc7_","rc7_","rc0_","rc5_","rc5_","rc4_","rc7_","rc1_","rc6_","rc5_","rc5_","rc3_","rc4_","rc6_","rc1_","rc0_","rc3_","rc0_","rc0_","rc0_","rc2_","rc0_","rc2_","rc5_","rc2_","rc1_","rc4_","rc6_","rc5_","rc4_","rc6_","rc6_","rc4_","rc7_","rc6_","rc7_","rc2_","rc3_","rc5_","rc2_","rc4_","rc3_","rc0_","rc3_","rc5_","rc2_","rc2_","rc0_","rc4_","rc4_","rc0_","rc3_","rc1_","rc0_","rc5_","rc1_","rc1_","rc4_","rc6_","rc1_"],
|
||||
["rc6_","rc2_","rc1_","rc1_","rc2_","rc2_","rc2_","rc5_","rc5_","rc7_","rc6_","rc2_","rc5_","rc6_","rc4_","rc3_","rc6_","rc4_","rc0_","rc1_","rc3_","rc0_","rc2_","rc0_","rc3_","rc1_","rc6_","rc7_","rc7_","rc1_","rc5_","rc0_","rc2_","rc2_","rc4_","rc1_","rc2_","rc0_","rc4_","rc2_","rc7_","rc7_","rc2_","rc1_","rc2_","rc6_","rc7_","rc2_","rc0_","rc5_","rc3_","rc2_","rc6_","rc3_","rc6_","rc6_","rc7_","rc3_","rc7_","rc0_","rc4_","rc7_","rc0_","rc2_","rc4_","rc5_","rc1_","rc6_","rc4_","rc1_","rc4_","rc5_","rc0_","rc4_","rc1_","rc6_","rc2_","rc4_","rc3_","rc1_","rc2_","rc4_","rc3_","rc5_","rc0_","rc5_","rc4_","rc7_","rc6_","rc4_","rc6_","rc4_","rc1_","rc6_","rc7_","rc0_","rc1_","rc2_","rc6_","rc0_","rc7_","rc6_","rc2_","rc5_","rc7_","rc5_","rc3_","rc2_","rc6_","rc7_","rc7_","rc1_","rc6_","rc1_","rc0_","rc0_","rc7_","rc6_","rc4_","rc1_","rc0_","rc6_","rc5_","rc2_","rc6_","rc7_","rc1_","rc3_","rc4_","rc1_","rc5_","rc6_","rc4_","rc6_","rc6_","rc4_","rc5_","rc2_","rc0_","rc5_","rc6_","rc7_","rc3_","rc7_"],
|
||||
["rc1_","rc4_","rc2_","rc4_","rc3_","rc7_","rc6_","rc5_","rc4_","rc0_","rc3_","rc4_","rc2_","rc1_","rc0_","rc0_","rc3_","rc3_","rc5_","rc2_","rc2_","rc2_","rc0_","rc0_","rc1_","rc3_","rc1_","rc7_","rc1_","rc5_","rc7_","rc6_","rc6_","rc6_","rc1_","rc1_","rc6_","rc7_","rc2_","rc3_","rc2_","rc3_","rc7_","rc0_","rc6_","rc4_","rc3_","rc2_","rc6_","rc7_","rc5_","rc2_","rc2_","rc0_","rc0_","rc1_","rc4_","rc1_","rc4_","rc0_","rc7_","rc7_","rc3_","rc5_","rc2_","rc6_","rc6_","rc6_","rc5_","rc7_","rc0_","rc3_","rc4_","rc6_","rc3_","rc7_","rc1_","rc0_","rc2_","rc7_","rc6_","rc5_","rc7_","rc7_","rc4_","rc3_","rc7_","rc1_","rc6_","rc3_","rc2_","rc7_","rc1_","rc0_","rc7_","rc3_","rc0_","rc4_","rc7_","rc5_","rc3_","rc5_","rc0_","rc5_","rc7_","rc1_","rc6_","rc1_","rc4_","rc6_","rc5_","rc1_","rc3_","rc5_","rc2_","rc1_","rc7_","rc0_","rc3_","rc7_","rc6_","rc1_","rc4_","rc5_","rc7_","rc5_","rc3_","rc1_","rc6_","rc1_","rc6_","rc4_","rc5_","rc3_","rc3_","rc0_","rc6_","rc5_","rc0_","rc6_","rc7_","rc5_","rc4_","rc6_"],
|
||||
["rc4_","rc0_","rc6_","rc7_","rc3_","rc1_","rc5_","rc2_","rc4_","rc4_","rc0_","rc2_","rc0_","rc0_","rc7_","rc7_","rc4_","rc4_","rc1_","rc4_","rc6_","rc1_","rc7_","rc5_","rc7_","rc1_","rc1_","rc5_","rc1_","rc6_","rc0_","rc7_","rc2_","rc5_","rc3_","rc3_","rc2_","rc5_","rc6_","rc3_","rc1_","rc3_","rc0_","rc6_","rc5_","rc0_","rc3_","rc5_","rc3_","rc5_","rc2_","rc5_","rc4_","rc5_","rc6_","rc4_","rc2_","rc5_","rc1_","rc7_","rc2_","rc7_","rc7_","rc3_","rc4_","rc5_","rc1_","rc3_","rc1_","rc4_","rc4_","rc2_","rc5_","rc6_","rc2_","rc1_","rc5_","rc5_","rc0_","rc3_","rc3_","rc5_","rc7_","rc7_","rc7_","rc1_","rc6_","rc5_","rc0_","rc1_","rc0_","rc5_","rc3_","rc2_","rc2_","rc4_","rc3_","rc7_","rc0_","rc0_","rc3_","rc7_","rc1_","rc7_","rc0_","rc6_","rc0_","rc3_","rc1_","rc0_","rc4_","rc0_","rc3_","rc3_","rc2_","rc1_","rc0_","rc5_","rc1_","rc0_","rc1_","rc6_","rc6_","rc4_","rc4_","rc7_","rc2_","rc0_","rc7_","rc3_","rc1_","rc2_","rc5_","rc5_","rc3_","rc1_","rc0_","rc2_","rc1_","rc3_","rc1_","rc0_","rc0_","rc5_"],
|
||||
["rc4_","rc7_","rc2_","rc4_","rc7_","rc7_","rc6_","rc4_","rc4_","rc3_","rc4_","rc7_","rc4_","rc5_","rc5_","rc1_","rc7_","rc1_","rc2_","rc1_","rc2_","rc6_","rc4_","rc2_","rc0_","rc2_","rc4_","rc2_","rc4_","rc5_","rc5_","rc3_","rc5_","rc2_","rc6_","rc0_","rc3_","rc1_","rc4_","rc2_","rc1_","rc0_","rc0_","rc5_","rc4_","rc4_","rc5_","rc4_","rc3_","rc2_","rc4_","rc4_","rc0_","rc2_","rc3_","rc0_","rc6_","rc7_","rc3_","rc0_","rc2_","rc0_","rc1_","rc7_","rc7_","rc3_","rc0_","rc5_","rc5_","rc2_","rc5_","rc3_","rc2_","rc6_","rc3_","rc5_","rc4_","rc4_","rc0_","rc4_","rc5_","rc5_","rc0_","rc5_","rc7_","rc2_","rc0_","rc4_","rc2_","rc0_","rc5_","rc5_","rc5_","rc0_","rc6_","rc4_","rc1_","rc2_","rc7_","rc3_","rc4_","rc3_","rc0_","rc4_","rc5_","rc4_","rc6_","rc0_","rc3_","rc5_","rc0_","rc0_","rc2_","rc2_","rc4_","rc2_","rc0_","rc5_","rc3_","rc6_","rc5_","rc5_","rc2_","rc0_","rc2_","rc5_","rc3_","rc1_","rc4_","rc7_","rc3_","rc2_","rc1_","rc3_","rc5_","rc0_","rc2_","rc2_","rc7_","rc6_","rc1_","rc0_","rc3_","rc7_"],
|
||||
["rc5_","rc2_","rc2_","rc4_","rc3_","rc4_","rc4_","rc5_","rc7_","rc6_","rc2_","rc3_","rc4_","rc0_","rc7_","rc5_","rc0_","rc3_","rc4_","rc1_","rc3_","rc2_","rc4_","rc6_","rc2_","rc1_","rc0_","rc7_","rc7_","rc5_","rc3_","rc2_","rc3_","rc4_","rc0_","rc2_","rc7_","rc6_","rc3_","rc3_","rc7_","rc4_","rc5_","rc4_","rc1_","rc0_","rc4_","rc1_","rc4_","rc5_","rc2_","rc1_","rc3_","rc0_","rc5_","rc5_","rc4_","rc0_","rc7_","rc3_","rc5_","rc2_","rc7_","rc2_","rc7_","rc0_","rc0_","rc6_","rc5_","rc3_","rc0_","rc6_","rc6_","rc6_","rc3_","rc4_","rc1_","rc5_","rc1_","rc5_","rc1_","rc6_","rc6_","rc2_","rc1_","rc6_","rc0_","rc6_","rc1_","rc7_","rc6_","rc1_","rc2_","rc1_","rc7_","rc4_","rc7_","rc7_","rc1_","rc6_","rc4_","rc3_","rc3_","rc7_","rc3_","rc5_","rc5_","rc3_","rc5_","rc7_","rc6_","rc1_","rc6_","rc5_","rc6_","rc4_","rc4_","rc3_","rc5_","rc1_","rc1_","rc7_","rc4_","rc2_","rc7_","rc1_","rc3_","rc3_","rc3_","rc0_","rc2_","rc4_","rc5_","rc7_","rc4_","rc6_","rc7_","rc7_","rc1_","rc1_","rc5_","rc7_","rc3_","rc4_"],
|
||||
["rc4_","rc2_","rc3_","rc6_","rc5_","rc0_","rc5_","rc6_","rc3_","rc7_","rc1_","rc6_","rc3_","rc3_","rc3_","rc6_","rc4_","rc3_","rc5_","rc6_","rc0_","rc6_","rc3_","rc2_","rc2_","rc6_","rc0_","rc5_","rc0_","rc4_","rc0_","rc0_","rc2_","rc5_","rc5_","rc2_","rc3_","rc4_","rc6_","rc4_","rc0_","rc7_","rc4_","rc5_","rc7_","rc6_","rc7_","rc4_","rc2_","rc1_","rc1_","rc4_","rc4_","rc1_","rc1_","rc5_","rc3_","rc2_","rc3_","rc0_","rc6_","rc7_","rc5_","rc3_","rc1_","rc7_","rc5_","rc6_","rc7_","rc7_","rc1_","rc5_","rc7_","rc0_","rc7_","rc7_","rc2_","rc2_","rc7_","rc6_","rc4_","rc0_","rc6_","rc0_","rc1_","rc6_","rc4_","rc5_","rc3_","rc1_","rc0_","rc2_","rc1_","rc7_","rc2_","rc6_","rc1_","rc7_","rc1_","rc3_","rc0_","rc1_","rc7_","rc7_","rc1_","rc0_","rc1_","rc3_","rc5_","rc7_","rc3_","rc4_","rc3_","rc3_","rc4_","rc0_","rc1_","rc7_","rc6_","rc3_","rc1_","rc5_","rc1_","rc3_","rc6_","rc4_","rc7_","rc1_","rc1_","rc5_","rc3_","rc1_","rc7_","rc3_","rc6_","rc3_","rc6_","rc1_","rc3_","rc3_","rc0_","rc6_","rc4_","rc6_"],
|
||||
["rc6_","rc7_","rc3_","rc6_","rc1_","rc4_","rc5_","rc7_","rc5_","rc6_","rc4_","rc3_","rc0_","rc6_","rc5_","rc3_","rc1_","rc2_","rc2_","rc0_","rc4_","rc4_","rc0_","rc1_","rc5_","rc3_","rc3_","rc5_","rc2_","rc6_","rc0_","rc3_","rc6_","rc6_","rc3_","rc0_","rc4_","rc3_","rc3_","rc1_","rc1_","rc2_","rc3_","rc2_","rc5_","rc6_","rc2_","rc6_","rc3_","rc5_","rc5_","rc7_","rc6_","rc4_","rc3_","rc0_","rc6_","rc5_","rc2_","rc2_","rc4_","rc7_","rc0_","rc4_","rc3_","rc7_","rc4_","rc7_","rc7_","rc6_","rc6_","rc0_","rc3_","rc3_","rc5_","rc7_","rc5_","rc3_","rc7_","rc0_","rc4_","rc6_","rc6_","rc7_","rc5_","rc3_","rc1_","rc2_","rc2_","rc7_","rc0_","rc2_","rc5_","rc2_","rc5_","rc2_","rc4_","rc2_","rc7_","rc2_","rc5_","rc5_","rc0_","rc6_","rc3_","rc0_","rc1_","rc3_","rc1_","rc5_","rc5_","rc2_","rc7_","rc5_","rc4_","rc1_","rc3_","rc2_","rc1_","rc5_","rc1_","rc1_","rc5_","rc4_","rc6_","rc6_","rc5_","rc3_","rc1_","rc0_","rc2_","rc3_","rc4_","rc6_","rc0_","rc1_","rc2_","rc2_","rc1_","rc6_","rc1_","rc5_","rc2_","rc4_"],
|
||||
["rc1_","rc3_","rc7_","rc2_","rc5_","rc1_","rc3_","rc2_","rc2_","rc4_","rc2_","rc1_","rc6_","rc3_","rc2_","rc7_","rc4_","rc0_","rc6_","rc0_","rc4_","rc3_","rc6_","rc2_","rc0_","rc0_","rc4_","rc0_","rc4_","rc2_","rc0_","rc6_","rc5_","rc7_","rc6_","rc5_","rc6_","rc6_","rc6_","rc1_","rc6_","rc7_","rc5_","rc2_","rc6_","rc2_","rc2_","rc0_","rc2_","rc2_","rc4_","rc2_","rc7_","rc3_","rc2_","rc1_","rc4_","rc2_","rc2_","rc0_","rc3_","rc4_","rc6_","rc7_","rc1_","rc2_","rc3_","rc1_","rc4_","rc3_","rc4_","rc2_","rc5_","rc2_","rc0_","rc5_","rc6_","rc2_","rc7_","rc4_","rc6_","rc7_","rc2_","rc1_","rc2_","rc7_","rc4_","rc5_","rc6_","rc1_","rc3_","rc0_","rc5_","rc4_","rc3_","rc0_","rc5_","rc3_","rc6_","rc5_","rc7_","rc7_","rc4_","rc4_","rc6_","rc6_","rc1_","rc2_","rc5_","rc3_","rc0_","rc5_","rc5_","rc6_","rc2_","rc5_","rc7_","rc6_","rc4_","rc0_","rc0_","rc3_","rc7_","rc6_","rc3_","rc1_","rc1_","rc2_","rc3_","rc2_","rc5_","rc2_","rc0_","rc3_","rc6_","rc1_","rc1_","rc2_","rc2_","rc3_","rc4_","rc6_","rc5_","rc1_"],
|
||||
["rc2_","rc7_","rc3_","rc6_","rc6_","rc0_","rc2_","rc0_","rc7_","rc2_","rc6_","rc3_","rc4_","rc3_","rc7_","rc2_","rc0_","rc7_","rc1_","rc0_","rc7_","rc5_","rc3_","rc7_","rc7_","rc6_","rc2_","rc7_","rc2_","rc1_","rc6_","rc0_","rc3_","rc3_","rc4_","rc3_","rc7_","rc5_","rc6_","rc6_","rc6_","rc6_","rc1_","rc7_","rc1_","rc2_","rc5_","rc3_","rc7_","rc3_","rc2_","rc7_","rc3_","rc0_","rc1_","rc7_","rc0_","rc3_","rc0_","rc5_","rc0_","rc7_","rc3_","rc4_","rc0_","rc1_","rc7_","rc5_","rc0_","rc6_","rc0_","rc2_","rc3_","rc6_","rc6_","rc1_","rc2_","rc7_","rc3_","rc4_","rc5_","rc5_","rc0_","rc7_","rc4_","rc1_","rc1_","rc1_","rc3_","rc0_","rc6_","rc6_","rc5_","rc5_","rc4_","rc4_","rc2_","rc1_","rc3_","rc4_","rc4_","rc2_","rc0_","rc4_","rc6_","rc2_","rc6_","rc3_","rc6_","rc1_","rc1_","rc4_","rc5_","rc6_","rc4_","rc7_","rc4_","rc2_","rc3_","rc4_","rc1_","rc5_","rc3_","rc2_","rc2_","rc5_","rc1_","rc7_","rc1_","rc4_","rc0_","rc0_","rc1_","rc1_","rc7_","rc3_","rc0_","rc2_","rc2_","rc3_","rc6_","rc1_","rc7_","rc4_"],
|
||||
["rc5_","rc4_","rc4_","rc0_","rc1_","rc2_","rc0_","rc2_","rc1_","rc2_","rc7_","rc0_","rc6_","rc6_","rc2_","rc6_","rc4_","rc0_","rc6_","rc1_","rc0_","rc4_","rc3_","rc0_","rc1_","rc7_","rc0_","rc2_","rc1_","rc6_","rc5_","rc4_","rc5_","rc1_","rc2_","rc2_","rc3_","rc1_","rc6_","rc1_","rc4_","rc0_","rc2_","rc2_","rc2_","rc1_","rc7_","rc1_","rc4_","rc0_","rc5_","rc6_","rc0_","rc2_","rc6_","rc4_","rc0_","rc0_","rc2_","rc0_","rc0_","rc0_","rc4_","rc4_","rc6_","rc5_","rc4_","rc5_","rc3_","rc0_","rc7_","rc2_","rc1_","rc6_","rc4_","rc6_","rc6_","rc4_","rc0_","rc0_","rc0_","rc1_","rc5_","rc0_","rc1_","rc3_","rc6_","rc4_","rc6_","rc5_","rc6_","rc5_","rc2_","rc7_","rc2_","rc4_","rc0_","rc6_","rc4_","rc1_","rc0_","rc6_","rc1_","rc5_","rc1_","rc5_","rc5_","rc5_","rc1_","rc1_","rc6_","rc2_","rc1_","rc5_","rc6_","rc7_","rc5_","rc0_","rc5_","rc3_","rc2_","rc7_","rc6_","rc0_","rc0_","rc4_","rc0_","rc3_","rc2_","rc6_","rc0_","rc5_","rc3_","rc3_","rc6_","rc1_","rc4_","rc4_","rc5_","rc7_","rc4_","rc0_","rc7_","rc0_"],
|
||||
["rc7_","rc3_","rc0_","rc3_","rc2_","rc0_","rc1_","rc0_","rc5_","rc5_","rc1_","rc3_","rc1_","rc6_","rc7_","rc2_","rc5_","rc4_","rc2_","rc3_","rc4_","rc0_","rc4_","rc0_","rc1_","rc3_","rc5_","rc4_","rc6_","rc7_","rc4_","rc3_","rc1_","rc3_","rc3_","rc4_","rc0_","rc3_","rc4_","rc2_","rc6_","rc7_","rc6_","rc4_","rc7_","rc5_","rc5_","rc2_","rc0_","rc1_","rc1_","rc1_","rc2_","rc4_","rc5_","rc0_","rc1_","rc2_","rc3_","rc4_","rc0_","rc0_","rc6_","rc1_","rc7_","rc6_","rc0_","rc2_","rc0_","rc2_","rc5_","rc2_","rc6_","rc5_","rc7_","rc4_","rc7_","rc2_","rc4_","rc0_","rc4_","rc4_","rc5_","rc0_","rc6_","rc7_","rc0_","rc2_","rc3_","rc2_","rc0_","rc6_","rc1_","rc3_","rc3_","rc2_","rc3_","rc3_","rc5_","rc4_","rc2_","rc4_","rc4_","rc0_","rc5_","rc0_","rc3_","rc3_","rc3_","rc4_","rc2_","rc7_","rc0_","rc5_","rc6_","rc7_","rc7_","rc1_","rc5_","rc6_","rc0_","rc2_","rc5_","rc3_","rc2_","rc6_","rc5_","rc0_","rc2_","rc2_","rc4_","rc3_","rc5_","rc1_","rc1_","rc4_","rc2_","rc7_","rc2_","rc0_","rc3_","rc3_","rc1_","rc6_"],
|
||||
["rc5_","rc5_","rc4_","rc0_","rc6_","rc3_","rc4_","rc4_","rc7_","rc2_","rc0_","rc3_","rc3_","rc3_","rc3_","rc1_","rc7_","rc4_","rc3_","rc7_","rc1_","rc1_","rc4_","rc6_","rc6_","rc3_","rc4_","rc5_","rc6_","rc0_","rc0_","rc4_","rc3_","rc2_","rc7_","rc1_","rc3_","rc4_","rc5_","rc3_","rc1_","rc3_","rc3_","rc6_","rc3_","rc2_","rc5_","rc7_","rc7_","rc0_","rc4_","rc0_","rc7_","rc5_","rc5_","rc5_","rc0_","rc3_","rc1_","rc0_","rc5_","rc2_","rc6_","rc2_","rc1_","rc6_","rc7_","rc3_","rc5_","rc5_","rc0_","rc4_","rc6_","rc4_","rc4_","rc3_","rc3_","rc1_","rc2_","rc0_","rc5_","rc6_","rc5_","rc5_","rc7_","rc4_","rc4_","rc2_","rc1_","rc7_","rc1_","rc2_","rc0_","rc1_","rc5_","rc0_","rc0_","rc1_","rc4_","rc6_","rc4_","rc5_","rc5_","rc0_","rc5_","rc5_","rc5_","rc4_","rc2_","rc2_","rc4_","rc4_","rc7_","rc7_","rc0_","rc0_","rc1_","rc7_","rc1_","rc5_","rc0_","rc7_","rc5_","rc3_","rc6_","rc5_","rc4_","rc6_","rc7_","rc2_","rc6_","rc2_","rc1_","rc4_","rc4_","rc5_","rc7_","rc7_","rc5_","rc7_","rc0_","rc4_","rc2_","rc5_"],
|
||||
["rc5_","rc2_","rc4_","rc7_","rc4_","rc5_","rc4_","rc6_","rc6_","rc4_","rc3_","rc2_","rc7_","rc7_","rc3_","rc3_","rc7_","rc1_","rc6_","rc7_","rc4_","rc2_","rc5_","rc3_","rc3_","rc0_","rc4_","rc5_","rc7_","rc0_","rc4_","rc2_","rc0_","rc7_","rc1_","rc3_","rc0_","rc6_","rc5_","rc5_","rc2_","rc5_","rc4_","rc1_","rc4_","rc6_","rc2_","rc1_","rc7_","rc6_","rc2_","rc4_","rc4_","rc0_","rc1_","rc4_","rc2_","rc3_","rc2_","rc6_","rc5_","rc4_","rc2_","rc2_","rc0_","rc7_","rc7_","rc4_","rc6_","rc2_","rc5_","rc1_","rc5_","rc2_","rc1_","rc6_","rc5_","rc3_","rc1_","rc6_","rc0_","rc2_","rc3_","rc2_","rc2_","rc5_","rc6_","rc6_","rc3_","rc5_","rc7_","rc2_","rc2_","rc3_","rc4_","rc6_","rc4_","rc1_","rc6_","rc1_","rc6_","rc2_","rc2_","rc4_","rc7_","rc4_","rc0_","rc2_","rc1_","rc5_","rc0_","rc3_","rc2_","rc4_","rc2_","rc1_","rc6_","rc1_","rc5_","rc3_","rc7_","rc0_","rc3_","rc0_","rc7_","rc2_","rc3_","rc6_","rc5_","rc5_","rc6_","rc4_","rc7_","rc5_","rc5_","rc4_","rc7_","rc2_","rc3_","rc5_","rc1_","rc4_","rc0_","rc0_"],
|
||||
["rc4_","rc4_","rc5_","rc1_","rc6_","rc5_","rc7_","rc1_","rc5_","rc3_","rc6_","rc2_","rc4_","rc3_","rc5_","rc2_","rc2_","rc3_","rc7_","rc3_","rc2_","rc3_","rc7_","rc2_","rc6_","rc4_","rc0_","rc7_","rc4_","rc0_","rc7_","rc4_","rc6_","rc3_","rc6_","rc2_","rc5_","rc0_","rc3_","rc0_","rc6_","rc7_","rc0_","rc6_","rc0_","rc5_","rc3_","rc1_","rc4_","rc4_","rc1_","rc7_","rc6_","rc5_","rc7_","rc5_","rc3_","rc3_","rc1_","rc7_","rc3_","rc2_","rc6_","rc1_","rc1_","rc0_","rc4_","rc3_","rc1_","rc2_","rc0_","rc2_","rc2_","rc2_","rc1_","rc5_","rc4_","rc0_","rc6_","rc4_","rc3_","rc7_","rc4_","rc0_","rc4_","rc2_","rc4_","rc7_","rc7_","rc6_","rc5_","rc7_","rc6_","rc1_","rc6_","rc5_","rc5_","rc3_","rc6_","rc6_","rc3_","rc4_","rc0_","rc5_","rc0_","rc6_","rc1_","rc6_","rc7_","rc5_","rc4_","rc4_","rc6_","rc4_","rc0_","rc6_","rc3_","rc2_","rc0_","rc6_","rc1_","rc5_","rc3_","rc5_","rc4_","rc5_","rc5_","rc1_","rc2_","rc5_","rc6_","rc1_","rc2_","rc5_","rc2_","rc3_","rc1_","rc3_","rc0_","rc3_","rc2_","rc3_","rc7_","rc7_"],
|
||||
["rc5_","rc4_","rc6_","rc0_","rc4_","rc5_","rc2_","rc4_","rc2_","rc1_","rc5_","rc2_","rc5_","rc7_","rc5_","rc5_","rc6_","rc4_","rc3_","rc5_","rc7_","rc5_","rc5_","rc2_","rc4_","rc0_","rc7_","rc2_","rc4_","rc2_","rc5_","rc5_","rc2_","rc6_","rc4_","rc7_","rc7_","rc4_","rc2_","rc7_","rc2_","rc1_","rc2_","rc5_","rc3_","rc6_","rc4_","rc1_","rc4_","rc3_","rc5_","rc1_","rc1_","rc5_","rc3_","rc3_","rc2_","rc5_","rc4_","rc4_","rc6_","rc3_","rc0_","rc0_","rc2_","rc3_","rc3_","rc4_","rc3_","rc7_","rc7_","rc7_","rc0_","rc5_","rc2_","rc0_","rc3_","rc2_","rc4_","rc4_","rc2_","rc7_","rc4_","rc7_","rc1_","rc3_","rc3_","rc5_","rc2_","rc2_","rc1_","rc1_","rc0_","rc5_","rc6_","rc6_","rc0_","rc1_","rc4_","rc5_","rc0_","rc4_","rc3_","rc6_","rc5_","rc5_","rc5_","rc1_","rc0_","rc4_","rc4_","rc7_","rc0_","rc2_","rc0_","rc5_","rc6_","rc2_","rc5_","rc2_","rc5_","rc0_","rc4_","rc1_","rc1_","rc0_","rc1_","rc1_","rc1_","rc2_","rc6_","rc2_","rc0_","rc5_","rc5_","rc2_","rc0_","rc2_","rc3_","rc2_","rc0_","rc3_","rc4_","rc3_"],
|
||||
["rc0_","rc3_","rc1_","rc4_","rc1_","rc7_","rc1_","rc0_","rc3_","rc6_","rc7_","rc4_","rc1_","rc5_","rc0_","rc7_","rc0_","rc5_","rc0_","rc5_","rc0_","rc1_","rc6_","rc5_","rc2_","rc3_","rc4_","rc1_","rc3_","rc7_","rc3_","rc5_","rc7_","rc2_","rc7_","rc4_","rc2_","rc4_","rc7_","rc0_","rc3_","rc4_","rc1_","rc1_","rc2_","rc2_","rc3_","rc0_","rc3_","rc3_","rc4_","rc4_","rc3_","rc0_","rc4_","rc5_","rc2_","rc1_","rc1_","rc7_","rc2_","rc0_","rc3_","rc0_","rc7_","rc0_","rc3_","rc5_","rc0_","rc0_","rc0_","rc2_","rc5_","rc2_","rc1_","rc2_","rc1_","rc2_","rc2_","rc6_","rc2_","rc3_","rc1_","rc0_","rc7_","rc3_","rc0_","rc3_","rc1_","rc2_","rc0_","rc3_","rc5_","rc7_","rc3_","rc3_","rc0_","rc4_","rc3_","rc7_","rc4_","rc3_","rc2_","rc6_","rc3_","rc1_","rc1_","rc5_","rc1_","rc2_","rc5_","rc0_","rc6_","rc5_","rc6_","rc1_","rc4_","rc1_","rc2_","rc6_","rc7_","rc0_","rc2_","rc7_","rc3_","rc3_","rc3_","rc5_","rc2_","rc7_","rc0_","rc1_","rc5_","rc6_","rc6_","rc4_","rc2_","rc0_","rc0_","rc2_","rc0_","rc4_","rc4_","rc5_"],
|
||||
["rc7_","rc2_","rc5_","rc7_","rc3_","rc3_","rc3_","rc0_","rc3_","rc3_","rc0_","rc1_","rc4_","rc5_","rc3_","rc7_","rc4_","rc7_","rc3_","rc5_","rc4_","rc0_","rc4_","rc3_","rc5_","rc0_","rc6_","rc3_","rc6_","rc7_","rc7_","rc6_","rc4_","rc1_","rc5_","rc2_","rc4_","rc7_","rc1_","rc7_","rc5_","rc1_","rc0_","rc2_","rc2_","rc4_","rc4_","rc1_","rc6_","rc6_","rc2_","rc1_","rc0_","rc2_","rc5_","rc4_","rc1_","rc0_","rc3_","rc7_","rc4_","rc3_","rc6_","rc3_","rc6_","rc2_","rc6_","rc1_","rc6_","rc7_","rc5_","rc4_","rc6_","rc4_","rc4_","rc2_","rc2_","rc0_","rc4_","rc3_","rc1_","rc4_","rc7_","rc5_","rc2_","rc2_","rc7_","rc7_","rc1_","rc0_","rc7_","rc5_","rc2_","rc1_","rc2_","rc4_","rc4_","rc5_","rc0_","rc6_","rc2_","rc3_","rc0_","rc7_","rc6_","rc4_","rc2_","rc1_","rc7_","rc1_","rc4_","rc5_","rc5_","rc7_","rc0_","rc3_","rc2_","rc2_","rc4_","rc4_","rc3_","rc0_","rc2_","rc6_","rc7_","rc0_","rc1_","rc0_","rc7_","rc3_","rc4_","rc7_","rc7_","rc1_","rc1_","rc0_","rc4_","rc7_","rc4_","rc6_","rc7_","rc0_","rc5_","rc6_"],
|
||||
["rc1_","rc1_","rc7_","rc2_","rc7_","rc1_","rc3_","rc3_","rc0_","rc1_","rc4_","rc2_","rc3_","rc1_","rc4_","rc0_","rc7_","rc3_","rc0_","rc5_","rc6_","rc3_","rc7_","rc6_","rc1_","rc7_","rc1_","rc2_","rc2_","rc4_","rc5_","rc0_","rc6_","rc2_","rc3_","rc1_","rc1_","rc0_","rc3_","rc3_","rc7_","rc2_","rc6_","rc1_","rc0_","rc2_","rc4_","rc5_","rc3_","rc6_","rc5_","rc7_","rc6_","rc1_","rc4_","rc3_","rc5_","rc3_","rc0_","rc6_","rc1_","rc5_","rc5_","rc1_","rc3_","rc0_","rc4_","rc1_","rc1_","rc6_","rc6_","rc5_","rc0_","rc4_","rc6_","rc2_","rc4_","rc5_","rc7_","rc5_","rc3_","rc2_","rc3_","rc7_","rc0_","rc1_","rc7_","rc5_","rc7_","rc4_","rc3_","rc0_","rc4_","rc4_","rc6_","rc1_","rc1_","rc5_","rc1_","rc2_","rc7_","rc3_","rc3_","rc2_","rc5_","rc5_","rc5_","rc7_","rc7_","rc2_","rc7_","rc0_","rc1_","rc1_","rc3_","rc3_","rc4_","rc5_","rc7_","rc5_","rc7_","rc1_","rc1_","rc0_","rc2_","rc0_","rc7_","rc2_","rc7_","rc0_","rc4_","rc4_","rc3_","rc0_","rc2_","rc7_","rc3_","rc7_","rc4_","rc6_","rc2_","rc7_","rc2_","rc0_"],
|
||||
["rc2_","rc3_","rc3_","rc4_","rc1_","rc4_","rc6_","rc3_","rc6_","rc2_","rc2_","rc0_","rc4_","rc1_","rc7_","rc3_","rc6_","rc2_","rc4_","rc6_","rc3_","rc4_","rc3_","rc7_","rc5_","rc2_","rc1_","rc0_","rc4_","rc6_","rc2_","rc3_","rc1_","rc6_","rc5_","rc2_","rc7_","rc7_","rc3_","rc6_","rc4_","rc0_","rc6_","rc6_","rc1_","rc0_","rc0_","rc3_","rc6_","rc1_","rc1_","rc1_","rc2_","rc7_","rc6_","rc1_","rc1_","rc4_","rc6_","rc5_","rc7_","rc6_","rc6_","rc3_","rc3_","rc4_","rc7_","rc5_","rc0_","rc5_","rc6_","rc0_","rc0_","rc1_","rc5_","rc4_","rc2_","rc4_","rc1_","rc3_","rc6_","rc0_","rc4_","rc6_","rc6_","rc1_","rc3_","rc4_","rc7_","rc7_","rc2_","rc4_","rc0_","rc0_","rc6_","rc6_","rc3_","rc5_","rc3_","rc5_","rc1_","rc6_","rc7_","rc7_","rc3_","rc7_","rc7_","rc0_","rc6_","rc5_","rc2_","rc3_","rc7_","rc4_","rc3_","rc3_","rc7_","rc3_","rc2_","rc1_","rc0_","rc3_","rc4_","rc7_","rc1_","rc3_","rc2_","rc4_","rc7_","rc7_","rc0_","rc1_","rc5_","rc2_","rc7_","rc4_","rc4_","rc2_","rc5_","rc2_","rc6_","rc3_","rc3_","rc3_"],
|
||||
["rc0_","rc7_","rc7_","rc0_","rc7_","rc4_","rc3_","rc0_","rc4_","rc6_","rc6_","rc4_","rc2_","rc7_","rc2_","rc7_","rc7_","rc4_","rc5_","rc2_","rc2_","rc2_","rc4_","rc7_","rc4_","rc1_","rc5_","rc4_","rc2_","rc7_","rc4_","rc2_","rc2_","rc0_","rc0_","rc7_","rc3_","rc5_","rc6_","rc1_","rc2_","rc2_","rc7_","rc4_","rc3_","rc5_","rc6_","rc6_","rc4_","rc3_","rc4_","rc0_","rc0_","rc5_","rc7_","rc7_","rc3_","rc4_","rc0_","rc5_","rc1_","rc0_","rc5_","rc2_","rc4_","rc7_","rc7_","rc6_","rc6_","rc4_","rc4_","rc3_","rc3_","rc6_","rc7_","rc7_","rc2_","rc3_","rc6_","rc0_","rc6_","rc5_","rc4_","rc3_","rc0_","rc3_","rc0_","rc6_","rc0_","rc3_","rc7_","rc4_","rc4_","rc7_","rc6_","rc1_","rc7_","rc5_","rc2_","rc7_","rc5_","rc3_","rc3_","rc0_","rc6_","rc3_","rc6_","rc5_","rc2_","rc3_","rc2_","rc6_","rc4_","rc1_","rc5_","rc3_","rc2_","rc5_","rc0_","rc2_","rc3_","rc7_","rc0_","rc2_","rc2_","rc2_","rc7_","rc0_","rc3_","rc1_","rc2_","rc0_","rc3_","rc2_","rc4_","rc6_","rc4_","rc0_","rc4_","rc5_","rc1_","rc5_","rc2_","rc0_"],
|
||||
["rc7_","rc7_","rc7_","rc7_","rc5_","rc2_","rc5_","rc4_","rc6_","rc7_","rc5_","rc7_","rc4_","rc4_","rc0_","rc7_","rc7_","rc3_","rc0_","rc2_","rc6_","rc7_","rc0_","rc6_","rc5_","rc5_","rc1_","rc0_","rc7_","rc0_","rc6_","rc6_","rc6_","rc7_","rc2_","rc0_","rc2_","rc2_","rc1_","rc4_","rc6_","rc3_","rc4_","rc3_","rc1_","rc2_","rc1_","rc5_","rc3_","rc4_","rc3_","rc4_","rc6_","rc4_","rc5_","rc0_","rc0_","rc2_","rc5_","rc6_","rc6_","rc4_","rc7_","rc7_","rc2_","rc2_","rc6_","rc6_","rc0_","rc6_","rc2_","rc2_","rc6_","rc4_","rc7_","rc5_","rc2_","rc6_","rc3_","rc4_","rc0_","rc3_","rc2_","rc0_","rc4_","rc1_","rc5_","rc4_","rc5_","rc0_","rc0_","rc7_","rc3_","rc1_","rc3_","rc4_","rc3_","rc7_","rc4_","rc1_","rc0_","rc5_","rc2_","rc6_","rc4_","rc1_","rc5_","rc6_","rc7_","rc7_","rc4_","rc2_","rc6_","rc0_","rc7_","rc4_","rc0_","rc4_","rc7_","rc1_","rc5_","rc6_","rc2_","rc3_","rc1_","rc0_","rc3_","rc6_","rc0_","rc7_","rc2_","rc1_","rc1_","rc7_","rc0_","rc7_","rc0_","rc2_","rc6_","rc7_","rc7_","rc5_","rc6_","rc0_"],
|
||||
["rc4_","rc4_","rc1_","rc1_","rc1_","rc7_","rc2_","rc0_","rc0_","rc4_","rc4_","rc2_","rc5_","rc0_","rc0_","rc3_","rc1_","rc0_","rc1_","rc5_","rc4_","rc5_","rc4_","rc6_","rc3_","rc7_","rc1_","rc5_","rc2_","rc1_","rc7_","rc6_","rc3_","rc6_","rc0_","rc7_","rc0_","rc1_","rc0_","rc1_","rc5_","rc3_","rc4_","rc3_","rc2_","rc1_","rc0_","rc3_","rc0_","rc4_","rc2_","rc7_","rc1_","rc6_","rc5_","rc3_","rc4_","rc1_","rc0_","rc3_","rc1_","rc2_","rc1_","rc4_","rc3_","rc6_","rc4_","rc6_","rc4_","rc3_","rc0_","rc4_","rc5_","rc2_","rc3_","rc7_","rc6_","rc4_","rc5_","rc0_","rc2_","rc3_","rc3_","rc5_","rc7_","rc2_","rc5_","rc6_","rc5_","rc7_","rc2_","rc0_","rc4_","rc0_","rc2_","rc1_","rc3_","rc4_","rc5_","rc5_","rc6_","rc4_","rc2_","rc1_","rc0_","rc2_","rc2_","rc6_","rc1_","rc0_","rc6_","rc0_","rc2_","rc3_","rc6_","rc0_","rc7_","rc1_","rc3_","rc6_","rc3_","rc2_","rc7_","rc3_","rc2_","rc4_","rc4_","rc6_","rc3_","rc1_","rc3_","rc6_","rc5_","rc4_","rc6_","rc7_","rc5_","rc1_","rc7_","rc0_","rc4_","rc5_","rc3_","rc5_"],
|
||||
["rc5_","rc6_","rc1_","rc0_","rc0_","rc4_","rc7_","rc5_","rc0_","rc1_","rc7_","rc5_","rc4_","rc4_","rc6_","rc4_","rc4_","rc4_","rc6_","rc7_","rc2_","rc3_","rc4_","rc0_","rc4_","rc1_","rc4_","rc5_","rc7_","rc3_","rc3_","rc5_","rc6_","rc4_","rc6_","rc4_","rc3_","rc2_","rc1_","rc1_","rc4_","rc4_","rc3_","rc6_","rc2_","rc3_","rc0_","rc1_","rc6_","rc6_","rc6_","rc1_","rc5_","rc2_","rc4_","rc2_","rc6_","rc1_","rc0_","rc4_","rc1_","rc3_","rc0_","rc0_","rc3_","rc3_","rc3_","rc6_","rc7_","rc4_","rc2_","rc3_","rc7_","rc3_","rc1_","rc6_","rc3_","rc6_","rc2_","rc5_","rc0_","rc5_","rc3_","rc4_","rc5_","rc0_","rc6_","rc6_","rc3_","rc2_","rc3_","rc6_","rc3_","rc4_","rc1_","rc0_","rc4_","rc5_","rc2_","rc4_","rc5_","rc1_","rc0_","rc3_","rc0_","rc7_","rc2_","rc5_","rc7_","rc7_","rc4_","rc2_","rc3_","rc3_","rc6_","rc7_","rc3_","rc6_","rc3_","rc4_","rc2_","rc3_","rc4_","rc3_","rc4_","rc7_","rc6_","rc4_","rc2_","rc1_","rc2_","rc7_","rc4_","rc1_","rc4_","rc1_","rc7_","rc7_","rc6_","rc2_","rc7_","rc5_","rc6_","rc6_"],
|
||||
["rc7_","rc0_","rc5_","rc4_","rc6_","rc3_","rc1_","rc3_","rc4_","rc4_","rc5_","rc3_","rc5_","rc3_","rc7_","rc3_","rc5_","rc0_","rc3_","rc7_","rc5_","rc4_","rc6_","rc4_","rc5_","rc3_","rc6_","rc7_","rc3_","rc1_","rc0_","rc2_","rc3_","rc3_","rc1_","rc1_","rc7_","rc7_","rc1_","rc5_","rc0_","rc6_","rc5_","rc6_","rc6_","rc0_","rc4_","rc6_","rc4_","rc1_","rc5_","rc3_","rc0_","rc3_","rc7_","rc5_","rc2_","rc4_","rc0_","rc2_","rc2_","rc1_","rc2_","rc6_","rc7_","rc4_","rc3_","rc7_","rc5_","rc2_","rc4_","rc0_","rc7_","rc7_","rc4_","rc3_","rc6_","rc6_","rc6_","rc5_","rc0_","rc4_","rc0_","rc5_","rc4_","rc5_","rc5_","rc5_","rc5_","rc1_","rc6_","rc4_","rc5_","rc0_","rc4_","rc2_","rc4_","rc3_","rc1_","rc6_","rc1_","rc5_","rc0_","rc5_","rc0_","rc2_","rc2_","rc4_","rc5_","rc6_","rc3_","rc0_","rc0_","rc1_","rc4_","rc3_","rc2_","rc2_","rc2_","rc2_","rc7_","rc2_","rc6_","rc4_","rc3_","rc3_","rc7_","rc6_","rc2_","rc0_","rc5_","rc5_","rc3_","rc7_","rc7_","rc4_","rc4_","rc4_","rc7_","rc7_","rc4_","rc7_","rc4_","rc6_"],
|
||||
["rc5_","rc1_","rc1_","rc6_","rc1_","rc3_","rc4_","rc4_","rc7_","rc0_","rc2_","rc4_","rc5_","rc4_","rc1_","rc1_","rc0_","rc4_","rc6_","rc6_","rc2_","rc0_","rc7_","rc4_","rc3_","rc7_","rc4_","rc5_","rc3_","rc1_","rc2_","rc0_","rc7_","rc3_","rc7_","rc6_","rc2_","rc7_","rc5_","rc5_","rc6_","rc2_","rc1_","rc2_","rc3_","rc2_","rc3_","rc5_","rc7_","rc7_","rc3_","rc7_","rc6_","rc0_","rc2_","rc7_","rc4_","rc2_","rc7_","rc5_","rc1_","rc5_","rc3_","rc7_","rc5_","rc0_","rc7_","rc3_","rc4_","rc6_","rc4_","rc3_","rc3_","rc0_","rc3_","rc7_","rc4_","rc5_","rc6_","rc0_","rc6_","rc7_","rc6_","rc1_","rc1_","rc0_","rc7_","rc3_","rc0_","rc5_","rc1_","rc1_","rc7_","rc2_","rc1_","rc1_","rc7_","rc6_","rc7_","rc4_","rc0_","rc1_","rc0_","rc7_","rc7_","rc3_","rc7_","rc3_","rc1_","rc6_","rc0_","rc2_","rc6_","rc6_","rc6_","rc4_","rc0_","rc0_","rc6_","rc1_","rc6_","rc1_","rc2_","rc7_","rc5_","rc0_","rc2_","rc6_","rc6_","rc7_","rc0_","rc2_","rc6_","rc6_","rc3_","rc1_","rc2_","rc1_","rc7_","rc6_","rc1_","rc4_","rc3_","rc5_"],
|
||||
["rc6_","rc3_","rc3_","rc0_","rc6_","rc6_","rc7_","rc1_","rc7_","rc5_","rc3_","rc1_","rc2_","rc0_","rc0_","rc0_","rc2_","rc3_","rc3_","rc6_","rc5_","rc0_","rc4_","rc1_","rc3_","rc5_","rc2_","rc0_","rc4_","rc7_","rc6_","rc0_","rc7_","rc7_","rc5_","rc4_","rc1_","rc4_","rc1_","rc3_","rc2_","rc1_","rc2_","rc5_","rc6_","rc1_","rc1_","rc5_","rc2_","rc0_","rc6_","rc5_","rc6_","rc4_","rc3_","rc7_","rc2_","rc4_","rc0_","rc0_","rc4_","rc0_","rc0_","rc2_","rc1_","rc1_","rc4_","rc2_","rc1_","rc1_","rc6_","rc6_","rc0_","rc6_","rc1_","rc3_","rc2_","rc3_","rc7_","rc7_","rc7_","rc0_","rc3_","rc2_","rc0_","rc4_","rc0_","rc2_","rc1_","rc0_","rc1_","rc7_","rc7_","rc5_","rc3_","rc4_","rc3_","rc1_","rc0_","rc0_","rc7_","rc6_","rc5_","rc4_","rc1_","rc3_","rc7_","rc5_","rc6_","rc7_","rc1_","rc4_","rc1_","rc3_","rc1_","rc4_","rc4_","rc7_","rc3_","rc3_","rc5_","rc0_","rc6_","rc5_","rc5_","rc1_","rc6_","rc6_","rc6_","rc7_","rc1_","rc7_","rc3_","rc1_","rc7_","rc3_","rc4_","rc0_","rc3_","rc1_","rc1_","rc4_","rc7_","rc4_"],
|
||||
["rc7_","rc7_","rc7_","rc2_","rc1_","rc6_","rc4_","rc2_","rc1_","rc4_","rc5_","rc2_","rc7_","rc1_","rc1_","rc0_","rc1_","rc4_","rc0_","rc7_","rc4_","rc5_","rc2_","rc4_","rc1_","rc6_","rc7_","rc1_","rc4_","rc2_","rc1_","rc1_","rc1_","rc6_","rc7_","rc5_","rc0_","rc7_","rc4_","rc7_","rc3_","rc5_","rc7_","rc6_","rc5_","rc7_","rc4_","rc1_","rc5_","rc7_","rc3_","rc7_","rc2_","rc7_","rc7_","rc6_","rc2_","rc4_","rc2_","rc3_","rc6_","rc1_","rc7_","rc2_","rc0_","rc7_","rc0_","rc5_","rc0_","rc4_","rc1_","rc2_","rc3_","rc2_","rc4_","rc0_","rc6_","rc2_","rc7_","rc3_","rc1_","rc0_","rc3_","rc1_","rc7_","rc1_","rc6_","rc3_","rc4_","rc2_","rc4_","rc0_","rc0_","rc2_","rc1_","rc6_","rc4_","rc3_","rc2_","rc2_","rc2_","rc5_","rc4_","rc2_","rc2_","rc4_","rc5_","rc2_","rc2_","rc3_","rc2_","rc4_","rc6_","rc0_","rc1_","rc3_","rc1_","rc2_","rc0_","rc1_","rc2_","rc0_","rc5_","rc7_","rc2_","rc4_","rc7_","rc6_","rc4_","rc1_","rc5_","rc4_","rc6_","rc1_","rc6_","rc1_","rc0_","rc1_","rc0_","rc2_","rc3_","rc0_","rc5_","rc5_"],
|
||||
["rc4_","rc6_","rc3_","rc6_","rc0_","rc2_","rc3_","rc2_","rc2_","rc7_","rc5_","rc2_","rc3_","rc0_","rc1_","rc2_","rc1_","rc1_","rc1_","rc2_","rc3_","rc0_","rc5_","rc5_","rc4_","rc3_","rc7_","rc1_","rc6_","rc3_","rc0_","rc6_","rc2_","rc2_","rc3_","rc2_","rc5_","rc2_","rc1_","rc4_","rc4_","rc6_","rc4_","rc7_","rc3_","rc5_","rc0_","rc2_","rc2_","rc3_","rc6_","rc6_","rc2_","rc2_","rc3_","rc7_","rc7_","rc2_","rc0_","rc6_","rc6_","rc4_","rc4_","rc6_","rc0_","rc5_","rc7_","rc6_","rc7_","rc1_","rc0_","rc7_","rc1_","rc6_","rc2_","rc7_","rc3_","rc3_","rc2_","rc5_","rc0_","rc0_","rc4_","rc6_","rc2_","rc7_","rc6_","rc6_","rc0_","rc4_","rc5_","rc3_","rc1_","rc2_","rc7_","rc7_","rc7_","rc6_","rc1_","rc4_","rc7_","rc7_","rc2_","rc5_","rc1_","rc6_","rc7_","rc2_","rc3_","rc2_","rc0_","rc4_","rc3_","rc7_","rc3_","rc2_","rc4_","rc0_","rc0_","rc4_","rc0_","rc3_","rc5_","rc6_","rc7_","rc5_","rc2_","rc7_","rc7_","rc5_","rc0_","rc2_","rc5_","rc5_","rc5_","rc4_","rc3_","rc6_","rc3_","rc0_","rc2_","rc3_","rc3_","rc0_"],
|
||||
["rc2_","rc1_","rc3_","rc4_","rc0_","rc5_","rc0_","rc7_","rc6_","rc6_","rc0_","rc0_","rc1_","rc5_","rc6_","rc7_","rc7_","rc3_","rc3_","rc1_","rc0_","rc2_","rc3_","rc6_","rc0_","rc6_","rc7_","rc0_","rc1_","rc5_","rc1_","rc7_","rc5_","rc4_","rc5_","rc3_","rc4_","rc4_","rc5_","rc1_","rc3_","rc6_","rc5_","rc1_","rc7_","rc3_","rc1_","rc7_","rc0_","rc7_","rc4_","rc1_","rc1_","rc6_","rc3_","rc1_","rc7_","rc7_","rc1_","rc4_","rc0_","rc0_","rc4_","rc1_","rc5_","rc2_","rc7_","rc6_","rc3_","rc7_","rc1_","rc0_","rc7_","rc2_","rc6_","rc1_","rc0_","rc6_","rc5_","rc7_","rc2_","rc1_","rc2_","rc2_","rc7_","rc1_","rc5_","rc6_","rc1_","rc0_","rc2_","rc2_","rc6_","rc5_","rc2_","rc0_","rc2_","rc3_","rc3_","rc6_","rc3_","rc5_","rc3_","rc4_","rc1_","rc2_","rc2_","rc0_","rc5_","rc6_","rc1_","rc6_","rc4_","rc1_","rc5_","rc4_","rc3_","rc4_","rc1_","rc4_","rc5_","rc1_","rc3_","rc3_","rc3_","rc2_","rc5_","rc2_","rc3_","rc6_","rc7_","rc3_","rc5_","rc7_","rc3_","rc7_","rc2_","rc6_","rc1_","rc5_","rc5_","rc3_","rc4_","rc5_"],
|
||||
["rc6_","rc0_","rc5_","rc6_","rc5_","rc6_","rc7_","rc5_","rc4_","rc3_","rc3_","rc7_","rc0_","rc2_","rc4_","rc1_","rc1_","rc2_","rc5_","rc5_","rc0_","rc4_","rc1_","rc7_","rc1_","rc7_","rc3_","rc1_","rc1_","rc6_","rc0_","rc5_","rc1_","rc5_","rc2_","rc1_","rc4_","rc0_","rc7_","rc7_","rc5_","rc5_","rc1_","rc5_","rc5_","rc2_","rc7_","rc3_","rc4_","rc2_","rc3_","rc3_","rc5_","rc4_","rc5_","rc6_","rc7_","rc4_","rc1_","rc4_","rc0_","rc7_","rc4_","rc4_","rc5_","rc1_","rc5_","rc5_","rc0_","rc1_","rc1_","rc3_","rc2_","rc7_","rc7_","rc7_","rc1_","rc4_","rc6_","rc0_","rc3_","rc3_","rc3_","rc7_","rc3_","rc7_","rc7_","rc2_","rc3_","rc6_","rc1_","rc6_","rc3_","rc4_","rc0_","rc2_","rc1_","rc3_","rc4_","rc2_","rc2_","rc1_","rc5_","rc1_","rc0_","rc2_","rc4_","rc3_","rc5_","rc7_","rc1_","rc2_","rc6_","rc7_","rc4_","rc7_","rc3_","rc6_","rc0_","rc4_","rc6_","rc4_","rc4_","rc7_","rc2_","rc7_","rc4_","rc1_","rc6_","rc3_","rc0_","rc7_","rc2_","rc0_","rc3_","rc1_","rc1_","rc5_","rc7_","rc2_","rc0_","rc4_","rc0_","rc0_"],
|
||||
["rc6_","rc5_","rc6_","rc4_","rc5_","rc0_","rc6_","rc3_","rc7_","rc6_","rc2_","rc6_","rc4_","rc7_","rc0_","rc7_","rc4_","rc1_","rc1_","rc6_","rc7_","rc7_","rc4_","rc3_","rc5_","rc0_","rc2_","rc4_","rc3_","rc2_","rc3_","rc1_","rc3_","rc6_","rc1_","rc6_","rc0_","rc6_","rc2_","rc1_","rc0_","rc4_","rc4_","rc4_","rc2_","rc5_","rc4_","rc5_","rc1_","rc6_","rc0_","rc5_","rc2_","rc5_","rc6_","rc6_","rc3_","rc3_","rc4_","rc1_","rc5_","rc1_","rc2_","rc6_","rc4_","rc1_","rc4_","rc4_","rc4_","rc6_","rc5_","rc4_","rc6_","rc7_","rc0_","rc2_","rc3_","rc7_","rc0_","rc3_","rc0_","rc1_","rc3_","rc5_","rc3_","rc2_","rc3_","rc3_","rc4_","rc7_","rc5_","rc0_","rc7_","rc1_","rc5_","rc7_","rc2_","rc6_","rc2_","rc0_","rc2_","rc2_","rc5_","rc5_","rc3_","rc6_","rc0_","rc5_","rc0_","rc7_","rc5_","rc1_","rc7_","rc2_","rc4_","rc6_","rc0_","rc7_","rc1_","rc2_","rc0_","rc3_","rc5_","rc2_","rc1_","rc3_","rc4_","rc4_","rc4_","rc6_","rc0_","rc0_","rc2_","rc2_","rc4_","rc4_","rc7_","rc1_","rc2_","rc0_","rc0_","rc5_","rc1_","rc7_"],
|
||||
["rc7_","rc2_","rc2_","rc0_","rc4_","rc3_","rc2_","rc3_","rc6_","rc0_","rc4_","rc0_","rc2_","rc6_","rc0_","rc4_","rc3_","rc7_","rc7_","rc5_","rc3_","rc4_","rc0_","rc1_","rc1_","rc1_","rc0_","rc2_","rc4_","rc0_","rc5_","rc4_","rc7_","rc0_","rc4_","rc2_","rc5_","rc6_","rc4_","rc6_","rc6_","rc4_","rc3_","rc0_","rc3_","rc2_","rc7_","rc0_","rc7_","rc3_","rc7_","rc7_","rc6_","rc2_","rc3_","rc3_","rc2_","rc4_","rc1_","rc2_","rc4_","rc0_","rc2_","rc2_","rc0_","rc4_","rc4_","rc5_","rc4_","rc1_","rc1_","rc2_","rc2_","rc2_","rc0_","rc2_","rc3_","rc0_","rc2_","rc1_","rc7_","rc2_","rc0_","rc6_","rc3_","rc3_","rc4_","rc4_","rc2_","rc5_","rc5_","rc1_","rc7_","rc5_","rc6_","rc7_","rc1_","rc6_","rc1_","rc1_","rc0_","rc3_","rc0_","rc1_","rc7_","rc7_","rc4_","rc0_","rc3_","rc7_","rc2_","rc5_","rc3_","rc3_","rc3_","rc1_","rc1_","rc0_","rc2_","rc2_","rc0_","rc1_","rc3_","rc7_","rc5_","rc0_","rc3_","rc3_","rc3_","rc7_","rc3_","rc6_","rc2_","rc4_","rc0_","rc1_","rc0_","rc5_","rc0_","rc0_","rc2_","rc7_","rc5_","rc4_"],
|
||||
["rc4_","rc6_","rc6_","rc2_","rc0_","rc0_","rc7_","rc6_","rc4_","rc2_","rc5_","rc4_","rc7_","rc0_","rc7_","rc0_","rc5_","rc6_","rc2_","rc4_","rc1_","rc5_","rc3_","rc2_","rc2_","rc3_","rc2_","rc3_","rc1_","rc1_","rc5_","rc0_","rc2_","rc3_","rc2_","rc7_","rc1_","rc3_","rc2_","rc0_","rc7_","rc7_","rc2_","rc7_","rc5_","rc5_","rc4_","rc5_","rc0_","rc4_","rc6_","rc3_","rc6_","rc4_","rc0_","rc6_","rc0_","rc1_","rc3_","rc1_","rc0_","rc4_","rc1_","rc7_","rc4_","rc3_","rc0_","rc1_","rc4_","rc2_","rc3_","rc7_","rc1_","rc1_","rc2_","rc2_","rc6_","rc7_","rc1_","rc1_","rc4_","rc0_","rc7_","rc2_","rc0_","rc4_","rc7_","rc4_","rc0_","rc0_","rc4_","rc2_","rc6_","rc0_","rc1_","rc3_","rc3_","rc5_","rc6_","rc7_","rc0_","rc3_","rc2_","rc5_","rc1_","rc7_","rc5_","rc3_","rc3_","rc7_","rc5_","rc5_","rc0_","rc2_","rc5_","rc2_","rc0_","rc2_","rc0_","rc3_","rc2_","rc7_","rc4_","rc6_","rc4_","rc6_","rc4_","rc2_","rc7_","rc1_","rc6_","rc3_","rc6_","rc1_","rc7_","rc0_","rc0_","rc1_","rc4_","rc3_","rc4_","rc5_","rc2_","rc1_"],
|
||||
["rc5_","rc2_","rc0_","rc3_","rc6_","rc0_","rc3_","rc4_","rc7_","rc6_","rc2_","rc4_","rc1_","rc5_","rc4_","rc4_","rc7_","rc7_","rc7_","rc3_","rc5_","rc1_","rc2_","rc1_","rc5_","rc7_","rc5_","rc2_","rc0_","rc7_","rc7_","rc5_","rc2_","rc1_","rc0_","rc5_","rc1_","rc5_","rc1_","rc7_","rc7_","rc5_","rc0_","rc5_","rc6_","rc5_","rc0_","rc3_","rc3_","rc0_","rc1_","rc1_","rc6_","rc5_","rc3_","rc0_","rc1_","rc2_","rc1_","rc0_","rc7_","rc7_","rc4_","rc0_","rc0_","rc6_","rc5_","rc0_","rc2_","rc1_","rc0_","rc4_","rc1_","rc5_","rc5_","rc1_","rc2_","rc6_","rc0_","rc6_","rc4_","rc4_","rc3_","rc3_","rc1_","rc4_","rc3_","rc4_","rc4_","rc1_","rc0_","rc4_","rc2_","rc4_","rc1_","rc4_","rc6_","rc2_","rc0_","rc3_","rc0_","rc5_","rc1_","rc2_","rc6_","rc6_","rc1_","rc0_","rc6_","rc1_","rc4_","rc4_","rc2_","rc1_","rc7_","rc1_","rc5_","rc6_","rc0_","rc7_","rc5_","rc4_","rc3_","rc7_","rc1_","rc6_","rc6_","rc7_","rc5_","rc3_","rc7_","rc7_","rc4_","rc0_","rc5_","rc3_","rc5_","rc6_","rc4_","rc2_","rc1_","rc5_","rc4_","rc6_"],
|
||||
["rc4_","rc1_","rc4_","rc5_","rc2_","rc4_","rc3_","rc7_","rc4_","rc4_","rc0_","rc1_","rc3_","rc6_","rc3_","rc2_","rc4_","rc3_","rc4_","rc4_","rc5_","rc2_","rc2_","rc5_","rc7_","rc7_","rc6_","rc7_","rc4_","rc3_","rc1_","rc4_","rc3_","rc3_","rc2_","rc6_","rc1_","rc5_","rc5_","rc5_","rc3_","rc0_","rc1_","rc2_","rc1_","rc3_","rc1_","rc5_","rc5_","rc2_","rc5_","rc2_","rc4_","rc4_","rc1_","rc1_","rc4_","rc0_","rc7_","rc6_","rc7_","rc1_","rc1_","rc6_","rc6_","rc0_","rc1_","rc3_","rc2_","rc1_","rc4_","rc1_","rc7_","rc0_","rc4_","rc2_","rc3_","rc6_","rc6_","rc7_","rc5_","rc6_","rc4_","rc1_","rc1_","rc5_","rc3_","rc7_","rc3_","rc2_","rc7_","rc0_","rc1_","rc1_","rc5_","rc3_","rc6_","rc6_","rc2_","rc5_","rc4_","rc1_","rc2_","rc3_","rc3_","rc5_","rc3_","rc1_","rc7_","rc5_","rc3_","rc2_","rc6_","rc1_","rc7_","rc0_","rc3_","rc5_","rc7_","rc7_","rc4_","rc3_","rc6_","rc5_","rc3_","rc3_","rc6_","rc4_","rc3_","rc7_","rc3_","rc4_","rc0_","rc4_","rc6_","rc3_","rc4_","rc6_","rc5_","rc6_","rc0_","rc3_","rc1_","rc4_"],
|
||||
["rc0_","rc2_","rc0_","rc0_","rc2_","rc5_","rc4_","rc0_","rc0_","rc5_","rc4_","rc5_","rc4_","rc6_","rc2_","rc2_","rc4_","rc3_","rc5_","rc7_","rc6_","rc2_","rc7_","rc0_","rc5_","rc3_","rc2_","rc2_","rc4_","rc5_","rc6_","rc6_","rc2_","rc2_","rc6_","rc2_","rc7_","rc4_","rc4_","rc3_","rc7_","rc0_","rc2_","rc7_","rc5_","rc2_","rc3_","rc3_","rc1_","rc1_","rc0_","rc0_","rc5_","rc4_","rc7_","rc3_","rc4_","rc5_","rc2_","rc5_","rc4_","rc5_","rc4_","rc0_","rc5_","rc0_","rc1_","rc4_","rc2_","rc2_","rc6_","rc0_","rc0_","rc2_","rc6_","rc5_","rc5_","rc7_","rc7_","rc7_","rc3_","rc1_","rc5_","rc5_","rc5_","rc1_","rc5_","rc4_","rc1_","rc2_","rc4_","rc7_","rc7_","rc1_","rc1_","rc2_","rc1_","rc4_","rc1_","rc6_","rc3_","rc0_","rc2_","rc7_","rc4_","rc5_","rc2_","rc5_","rc5_","rc5_","rc0_","rc0_","rc2_","rc3_","rc2_","rc7_","rc7_","rc1_","rc1_","rc3_","rc5_","rc5_","rc2_","rc7_","rc6_","rc4_","rc7_","rc3_","rc5_","rc7_","rc6_","rc2_","rc0_","rc5_","rc0_","rc0_","rc2_","rc1_","rc4_","rc0_","rc5_","rc5_","rc4_","rc4_"],
|
||||
["rc5_","rc0_","rc1_","rc6_","rc3_","rc4_","rc3_","rc7_","rc0_","rc3_","rc3_","rc7_","rc0_","rc3_","rc5_","rc4_","rc1_","rc7_","rc0_","rc6_","rc4_","rc1_","rc0_","rc2_","rc3_","rc4_","rc6_","rc6_","rc4_","rc7_","rc5_","rc5_","rc5_","rc7_","rc0_","rc2_","rc0_","rc3_","rc3_","rc2_","rc1_","rc6_","rc0_","rc5_","rc6_","rc0_","rc3_","rc6_","rc6_","rc6_","rc7_","rc3_","rc5_","rc4_","rc2_","rc7_","rc7_","rc0_","rc6_","rc6_","rc2_","rc1_","rc2_","rc1_","rc2_","rc0_","rc1_","rc3_","rc7_","rc5_","rc1_","rc2_","rc1_","rc5_","rc7_","rc2_","rc7_","rc2_","rc0_","rc7_","rc4_","rc4_","rc3_","rc1_","rc3_","rc7_","rc6_","rc5_","rc5_","rc5_","rc6_","rc2_","rc1_","rc5_","rc3_","rc0_","rc3_","rc4_","rc3_","rc0_","rc7_","rc3_","rc5_","rc0_","rc0_","rc0_","rc1_","rc6_","rc4_","rc2_","rc6_","rc7_","rc2_","rc0_","rc4_","rc0_","rc0_","rc1_","rc4_","rc5_","rc6_","rc1_","rc5_","rc0_","rc6_","rc2_","rc0_","rc4_","rc0_","rc1_","rc5_","rc2_","rc1_","rc3_","rc7_","rc4_","rc4_","rc0_","rc6_","rc0_","rc5_","rc7_","rc4_","rc0_"],
|
||||
["rc1_","rc2_","rc3_","rc0_","rc1_","rc3_","rc4_","rc7_","rc1_","rc6_","rc2_","rc1_","rc4_","rc1_","rc1_","rc4_","rc2_","rc2_","rc1_","rc1_","rc5_","rc0_","rc0_","rc6_","rc0_","rc4_","rc7_","rc2_","rc1_","rc1_","rc2_","rc0_","rc1_","rc2_","rc6_","rc0_","rc1_","rc3_","rc7_","rc2_","rc7_","rc3_","rc7_","rc5_","rc1_","rc1_","rc6_","rc7_","rc1_","rc4_","rc6_","rc5_","rc2_","rc7_","rc6_","rc5_","rc2_","rc5_","rc2_","rc2_","rc0_","rc0_","rc0_","rc0_","rc0_","rc1_","rc6_","rc1_","rc5_","rc3_","rc3_","rc0_","rc7_","rc1_","rc3_","rc3_","rc5_","rc2_","rc7_","rc6_","rc4_","rc1_","rc4_","rc6_","rc0_","rc2_","rc2_","rc3_","rc3_","rc1_","rc0_","rc1_","rc4_","rc5_","rc7_","rc0_","rc1_","rc6_","rc4_","rc3_","rc0_","rc3_","rc1_","rc7_","rc2_","rc7_","rc6_","rc5_","rc1_","rc4_","rc4_","rc1_","rc4_","rc0_","rc3_","rc3_","rc1_","rc0_","rc5_","rc6_","rc2_","rc2_","rc2_","rc7_","rc3_","rc7_","rc5_","rc0_","rc2_","rc1_","rc6_","rc6_","rc0_","rc1_","rc2_","rc0_","rc7_","rc5_","rc0_","rc1_","rc5_","rc0_","rc6_","rc0_"],
|
||||
["rc0_","rc2_","rc3_","rc5_","rc2_","rc1_","rc5_","rc7_","rc7_","rc0_","rc7_","rc4_","rc5_","rc7_","rc3_","rc0_","rc4_","rc3_","rc6_","rc2_","rc5_","rc7_","rc4_","rc3_","rc7_","rc3_","rc1_","rc0_","rc0_","rc5_","rc3_","rc2_","rc1_","rc5_","rc4_","rc4_","rc6_","rc6_","rc4_","rc5_","rc4_","rc1_","rc6_","rc7_","rc3_","rc3_","rc2_","rc7_","rc6_","rc3_","rc3_","rc6_","rc0_","rc5_","rc1_","rc7_","rc2_","rc2_","rc2_","rc2_","rc3_","rc3_","rc4_","rc0_","rc7_","rc4_","rc7_","rc0_","rc2_","rc6_","rc1_","rc2_","rc7_","rc7_","rc1_","rc2_","rc4_","rc5_","rc0_","rc7_","rc1_","rc1_","rc5_","rc4_","rc1_","rc1_","rc0_","rc6_","rc7_","rc1_","rc1_","rc7_","rc5_","rc3_","rc2_","rc3_","rc1_","rc4_","rc2_","rc1_","rc1_","rc1_","rc3_","rc4_","rc0_","rc1_","rc7_","rc3_","rc1_","rc5_","rc6_","rc6_","rc4_","rc6_","rc3_","rc2_","rc7_","rc5_","rc0_","rc6_","rc7_","rc1_","rc7_","rc7_","rc7_","rc4_","rc3_","rc1_","rc7_","rc7_","rc6_","rc7_","rc1_","rc7_","rc4_","rc4_","rc0_","rc0_","rc0_","rc3_","rc2_","rc1_","rc5_","rc4_"],
|
||||
["rc0_","rc0_","rc7_","rc1_","rc3_","rc0_","rc3_","rc0_","rc1_","rc0_","rc5_","rc1_","rc0_","rc6_","rc1_","rc2_","rc2_","rc4_","rc4_","rc1_","rc2_","rc1_","rc3_","rc2_","rc7_","rc3_","rc3_","rc2_","rc6_","rc3_","rc4_","rc3_","rc4_","rc2_","rc0_","rc0_","rc4_","rc3_","rc0_","rc4_","rc6_","rc0_","rc1_","rc6_","rc1_","rc2_","rc2_","rc0_","rc2_","rc3_","rc2_","rc0_","rc5_","rc6_","rc0_","rc6_","rc4_","rc2_","rc2_","rc7_","rc6_","rc3_","rc2_","rc2_","rc1_","rc1_","rc6_","rc1_","rc3_","rc5_","rc7_","rc2_","rc5_","rc1_","rc5_","rc6_","rc2_","rc7_","rc0_","rc1_","rc6_","rc5_","rc1_","rc4_","rc2_","rc7_","rc3_","rc0_","rc7_","rc5_","rc4_","rc4_","rc1_","rc7_","rc1_","rc0_","rc7_","rc7_","rc1_","rc2_","rc7_","rc6_","rc0_","rc1_","rc7_","rc1_","rc7_","rc1_","rc2_","rc5_","rc2_","rc7_","rc7_","rc1_","rc2_","rc5_","rc0_","rc3_","rc4_","rc7_","rc2_","rc5_","rc2_","rc7_","rc0_","rc1_","rc0_","rc6_","rc5_","rc3_","rc1_","rc4_","rc2_","rc6_","rc3_","rc3_","rc4_","rc2_","rc1_","rc7_","rc1_","rc5_","rc0_","rc0_"],
|
||||
["rc5_","rc7_","rc4_","rc2_","rc0_","rc2_","rc3_","rc4_","rc2_","rc1_","rc2_","rc1_","rc2_","rc0_","rc7_","rc4_","rc4_","rc5_","rc6_","rc7_","rc1_","rc6_","rc0_","rc6_","rc3_","rc4_","rc1_","rc7_","rc1_","rc6_","rc2_","rc4_","rc7_","rc0_","rc6_","rc5_","rc1_","rc4_","rc0_","rc7_","rc2_","rc2_","rc5_","rc2_","rc0_","rc5_","rc6_","rc2_","rc3_","rc6_","rc1_","rc3_","rc6_","rc5_","rc7_","rc3_","rc4_","rc5_","rc1_","rc2_","rc7_","rc0_","rc7_","rc5_","rc5_","rc2_","rc2_","rc4_","rc4_","rc2_","rc3_","rc0_","rc0_","rc7_","rc3_","rc1_","rc2_","rc7_","rc4_","rc7_","rc3_","rc5_","rc0_","rc0_","rc1_","rc4_","rc1_","rc1_","rc1_","rc7_","rc0_","rc0_","rc6_","rc3_","rc2_","rc2_","rc0_","rc0_","rc7_","rc0_","rc1_","rc3_","rc5_","rc7_","rc4_","rc0_","rc5_","rc0_","rc7_","rc6_","rc4_","rc5_","rc3_","rc3_","rc4_","rc5_","rc1_","rc1_","rc4_","rc2_","rc7_","rc1_","rc6_","rc1_","rc4_","rc0_","rc0_","rc2_","rc0_","rc7_","rc5_","rc1_","rc7_","rc0_","rc4_","rc3_","rc7_","rc5_","rc1_","rc5_","rc0_","rc2_","rc3_","rc2_"],
|
||||
["rc4_","rc6_","rc6_","rc3_","rc7_","rc7_","rc1_","rc4_","rc1_","rc4_","rc3_","rc5_","rc1_","rc6_","rc2_","rc6_","rc4_","rc1_","rc4_","rc6_","rc6_","rc7_","rc1_","rc6_","rc1_","rc7_","rc0_","rc1_","rc4_","rc4_","rc2_","rc7_","rc5_","rc0_","rc4_","rc2_","rc2_","rc3_","rc1_","rc1_","rc5_","rc7_","rc7_","rc3_","rc6_","rc6_","rc0_","rc6_","rc5_","rc5_","rc4_","rc1_","rc0_","rc2_","rc5_","rc6_","rc1_","rc5_","rc3_","rc4_","rc4_","rc3_","rc1_","rc4_","rc7_","rc1_","rc0_","rc2_","rc3_","rc7_","rc2_","rc7_","rc3_","rc2_","rc2_","rc5_","rc3_","rc6_","rc2_","rc2_","rc2_","rc4_","rc5_","rc0_","rc2_","rc1_","rc6_","rc4_","rc0_","rc7_","rc1_","rc6_","rc7_","rc0_","rc0_","rc0_","rc2_","rc7_","rc0_","rc3_","rc2_","rc2_","rc6_","rc6_","rc4_","rc5_","rc4_","rc1_","rc7_","rc0_","rc0_","rc1_","rc4_","rc5_","rc7_","rc4_","rc7_","rc2_","rc6_","rc0_","rc5_","rc6_","rc1_","rc6_","rc6_","rc1_","rc0_","rc5_","rc5_","rc4_","rc6_","rc4_","rc6_","rc4_","rc3_","rc0_","rc0_","rc1_","rc5_","rc0_","rc2_","rc4_","rc3_","rc4_"],
|
||||
["rc3_","rc0_","rc2_","rc5_","rc4_","rc7_","rc4_","rc1_","rc1_","rc0_","rc5_","rc6_","rc1_","rc0_","rc7_","rc1_","rc1_","rc0_","rc1_","rc7_","rc0_","rc5_","rc3_","rc4_","rc6_","rc5_","rc5_","rc1_","rc6_","rc0_","rc1_","rc4_","rc6_","rc5_","rc7_","rc3_","rc4_","rc7_","rc7_","rc0_","rc3_","rc0_","rc4_","rc4_","rc7_","rc5_","rc7_","rc5_","rc5_","rc1_","rc1_","rc2_","rc7_","rc6_","rc5_","rc1_","rc6_","rc1_","rc5_","rc6_","rc1_","rc6_","rc4_","rc7_","rc5_","rc5_","rc4_","rc5_","rc5_","rc3_","rc1_","rc6_","rc4_","rc3_","rc6_","rc1_","rc0_","rc6_","rc6_","rc1_","rc2_","rc1_","rc5_","rc6_","rc3_","rc7_","rc1_","rc0_","rc2_","rc6_","rc3_","rc5_","rc3_","rc6_","rc2_","rc5_","rc1_","rc7_","rc2_","rc5_","rc7_","rc2_","rc1_","rc1_","rc4_","rc3_","rc2_","rc5_","rc5_","rc5_","rc6_","rc5_","rc0_","rc7_","rc7_","rc3_","rc6_","rc6_","rc7_","rc1_","rc0_","rc3_","rc1_","rc7_","rc5_","rc6_","rc5_","rc0_","rc2_","rc3_","rc2_","rc1_","rc4_","rc4_","rc7_","rc1_","rc2_","rc7_","rc2_","rc7_","rc6_","rc2_","rc5_","rc0_"],
|
||||
["rc6_","rc4_","rc6_","rc0_","rc6_","rc5_","rc7_","rc3_","rc0_","rc0_","rc5_","rc4_","rc6_","rc0_","rc4_","rc6_","rc7_","rc2_","rc2_","rc2_","rc1_","rc2_","rc3_","rc0_","rc7_","rc0_","rc6_","rc1_","rc3_","rc3_","rc5_","rc3_","rc4_","rc6_","rc2_","rc6_","rc3_","rc3_","rc0_","rc0_","rc3_","rc6_","rc1_","rc4_","rc0_","rc4_","rc7_","rc1_","rc1_","rc3_","rc4_","rc7_","rc0_","rc2_","rc5_","rc4_","rc2_","rc5_","rc4_","rc1_","rc2_","rc2_","rc5_","rc7_","rc3_","rc0_","rc4_","rc6_","rc6_","rc1_","rc5_","rc6_","rc0_","rc4_","rc3_","rc7_","rc0_","rc0_","rc5_","rc7_","rc0_","rc6_","rc6_","rc2_","rc1_","rc7_","rc5_","rc7_","rc4_","rc6_","rc5_","rc0_","rc6_","rc6_","rc5_","rc2_","rc3_","rc7_","rc2_","rc6_","rc7_","rc5_","rc3_","rc6_","rc0_","rc2_","rc5_","rc4_","rc0_","rc6_","rc0_","rc0_","rc3_","rc4_","rc2_","rc1_","rc4_","rc6_","rc3_","rc7_","rc4_","rc3_","rc1_","rc6_","rc5_","rc0_","rc5_","rc4_","rc3_","rc5_","rc5_","rc6_","rc5_","rc2_","rc3_","rc0_","rc3_","rc1_","rc6_","rc5_","rc0_","rc5_","rc7_","rc6_"],
|
||||
["rc2_","rc4_","rc7_","rc6_","rc7_","rc1_","rc7_","rc5_","rc3_","rc5_","rc0_","rc2_","rc7_","rc7_","rc5_","rc7_","rc4_","rc1_","rc5_","rc0_","rc1_","rc5_","rc5_","rc4_","rc0_","rc0_","rc6_","rc0_","rc7_","rc6_","rc2_","rc0_","rc6_","rc6_","rc5_","rc7_","rc5_","rc7_","rc1_","rc0_","rc0_","rc3_","rc3_","rc6_","rc5_","rc3_","rc5_","rc1_","rc5_","rc3_","rc3_","rc2_","rc2_","rc0_","rc1_","rc2_","rc0_","rc7_","rc4_","rc6_","rc6_","rc7_","rc1_","rc5_","rc7_","rc2_","rc4_","rc4_","rc4_","rc0_","rc2_","rc2_","rc4_","rc5_","rc0_","rc0_","rc7_","rc4_","rc5_","rc3_","rc7_","rc4_","rc5_","rc6_","rc1_","rc2_","rc0_","rc1_","rc2_","rc7_","rc2_","rc6_","rc5_","rc3_","rc4_","rc6_","rc4_","rc1_","rc4_","rc7_","rc5_","rc5_","rc0_","rc1_","rc7_","rc4_","rc0_","rc1_","rc4_","rc3_","rc5_","rc5_","rc2_","rc3_","rc5_","rc2_","rc5_","rc3_","rc0_","rc2_","rc7_","rc6_","rc7_","rc2_","rc3_","rc7_","rc4_","rc3_","rc6_","rc2_","rc5_","rc6_","rc7_","rc5_","rc5_","rc6_","rc0_","rc7_","rc4_","rc1_","rc5_","rc7_","rc5_","rc7_"],
|
||||
["rc5_","rc0_","rc1_","rc6_","rc7_","rc4_","rc3_","rc5_","rc7_","rc7_","rc3_","rc0_","rc0_","rc5_","rc7_","rc4_","rc4_","rc6_","rc7_","rc3_","rc2_","rc0_","rc7_","rc1_","rc0_","rc6_","rc3_","rc0_","rc2_","rc1_","rc5_","rc1_","rc1_","rc4_","rc3_","rc4_","rc6_","rc4_","rc7_","rc2_","rc1_","rc7_","rc7_","rc1_","rc6_","rc4_","rc6_","rc0_","rc7_","rc4_","rc2_","rc4_","rc0_","rc7_","rc0_","rc2_","rc6_","rc2_","rc4_","rc5_","rc2_","rc7_","rc6_","rc2_","rc5_","rc6_","rc1_","rc3_","rc3_","rc3_","rc6_","rc1_","rc5_","rc0_","rc1_","rc5_","rc2_","rc4_","rc2_","rc0_","rc7_","rc4_","rc6_","rc2_","rc7_","rc1_","rc6_","rc0_","rc3_","rc2_","rc1_","rc2_","rc5_","rc3_","rc6_","rc4_","rc2_","rc6_","rc5_","rc2_","rc6_","rc2_","rc7_","rc1_","rc4_","rc1_","rc2_","rc4_","rc7_","rc6_","rc1_","rc5_","rc3_","rc6_","rc3_","rc4_","rc7_","rc6_","rc3_","rc5_","rc7_","rc6_","rc1_","rc5_","rc4_","rc5_","rc7_","rc5_","rc7_","rc5_","rc6_","rc2_","rc6_","rc0_","rc1_","rc4_","rc6_","rc2_","rc2_","rc5_","rc2_","rc1_","rc5_","rc5_"],
|
||||
["rc3_","rc3_","rc2_","rc4_","rc1_","rc7_","rc6_","rc7_","rc0_","rc7_","rc4_","rc7_","rc7_","rc3_","rc7_","rc6_","rc5_","rc2_","rc4_","rc3_","rc4_","rc5_","rc6_","rc0_","rc2_","rc4_","rc2_","rc2_","rc6_","rc5_","rc4_","rc0_","rc0_","rc2_","rc1_","rc0_","rc5_","rc3_","rc7_","rc7_","rc1_","rc3_","rc2_","rc7_","rc5_","rc7_","rc0_","rc6_","rc3_","rc5_","rc7_","rc5_","rc7_","rc1_","rc5_","rc6_","rc1_","rc6_","rc0_","rc1_","rc1_","rc3_","rc0_","rc0_","rc2_","rc3_","rc2_","rc1_","rc2_","rc2_","rc6_","rc5_","rc0_","rc5_","rc3_","rc7_","rc7_","rc1_","rc1_","rc7_","rc2_","rc6_","rc7_","rc7_","rc0_","rc5_","rc6_","rc5_","rc3_","rc0_","rc6_","rc3_","rc3_","rc2_","rc7_","rc3_","rc0_","rc7_","rc3_","rc7_","rc0_","rc4_","rc3_","rc0_","rc6_","rc2_","rc7_","rc5_","rc4_","rc7_","rc1_","rc7_","rc2_","rc6_","rc4_","rc3_","rc7_","rc0_","rc1_","rc7_","rc7_","rc3_","rc2_","rc0_","rc5_","rc2_","rc3_","rc3_","rc3_","rc5_","rc6_","rc2_","rc1_","rc2_","rc6_","rc2_","rc2_","rc4_","rc6_","rc3_","rc5_","rc3_","rc2_","rc7_"],
|
||||
["rc2_","rc4_","rc6_","rc7_","rc3_","rc3_","rc6_","rc2_","rc5_","rc6_","rc6_","rc7_","rc7_","rc4_","rc3_","rc6_","rc3_","rc5_","rc1_","rc2_","rc2_","rc3_","rc7_","rc1_","rc5_","rc2_","rc0_","rc7_","rc1_","rc4_","rc3_","rc7_","rc3_","rc1_","rc5_","rc4_","rc4_","rc5_","rc5_","rc7_","rc6_","rc1_","rc1_","rc2_","rc0_","rc6_","rc7_","rc4_","rc7_","rc0_","rc6_","rc6_","rc6_","rc0_","rc6_","rc6_","rc6_","rc4_","rc5_","rc1_","rc1_","rc3_","rc4_","rc7_","rc4_","rc3_","rc1_","rc1_","rc3_","rc6_","rc6_","rc6_","rc2_","rc5_","rc2_","rc7_","rc1_","rc3_","rc7_","rc7_","rc7_","rc5_","rc4_","rc7_","rc3_","rc0_","rc3_","rc1_","rc6_","rc3_","rc5_","rc3_","rc5_","rc7_","rc5_","rc6_","rc6_","rc4_","rc3_","rc0_","rc0_","rc6_","rc2_","rc7_","rc0_","rc1_","rc3_","rc7_","rc1_","rc0_","rc3_","rc6_","rc4_","rc4_","rc3_","rc5_","rc1_","rc3_","rc6_","rc1_","rc5_","rc6_","rc1_","rc4_","rc4_","rc0_","rc6_","rc6_","rc0_","rc4_","rc1_","rc7_","rc2_","rc6_","rc7_","rc2_","rc1_","rc5_","rc3_","rc2_","rc1_","rc7_","rc3_","rc0_"]]
|
Loading…
Reference in New Issue
Block a user