using System;

namespace Wizard;

public static class AIScriptParser
{
	public static int ParseInt(string num)
	{
		if (num == "")
		{
			return 0;
		}
		try
		{
			return int.Parse(num);
		}
		catch (Exception)
		{
			return 0;
		}
	}

	public static AIScriptTokenBase ConvertWordToToken(string word)
	{
		if (float.TryParse(word, out var result))
		{
			return new AIScriptNumericToken(result);
		}
		switch (word)
		{
		case "+":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.PLUS);
		case "-":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.MINUS);
		case "*":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.MULTI);
		case "/":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.DIV);
		case "%":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.REMAIN);
		case "(":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.LEFT_BLACKET);
		case ")":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.RIGHT_BLACKET);
		case ",":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.COMMA);
		case ">":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.MORE_THAN);
		case ">=":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.MORE_EQUAL);
		case "<":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.LESS_THAN);
		case "<=":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.LESS_EQUAL);
		case "==":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.EQUAL);
		case "max":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.MAX);
		case "min":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.MIN);
		case "|":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.OR);
		case "&":
			return new AIScriptOperatorSymbolToken(AIScriptTokenType.AND);
		default:
		{
			bool isNot = false;
			if (word.StartsWith("!"))
			{
				isNot = true;
				word = word.Substring(1);
			}
			return word switch
			{
				"NOW_TURN" => new AIScriptVariableToken(AIScriptTokenVariableType.NOW_TURN), 
				"COUNTDOWN" => new AIScriptVariableToken(AIScriptTokenVariableType.COUNTDOWN), 
				"REINCARNATION_MAX" => new AIScriptVariableToken(AIScriptTokenVariableType.REINCARNATION_MAX), 
				"SPELLBOOST" => new AIScriptVariableToken(AIScriptTokenVariableType.SPELLBOOST), 
				"FIELD_SPACE" => new AIScriptVariableToken(AIScriptTokenVariableType.FIELD_SPACE), 
				"ALLY_UNIT_MIN" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_UNIT_MIN), 
				"ALLY_UNIT_MAX" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_UNIT_MAX), 
				"ALLY_ATTACKABLE_ATK_MAX" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_ATTACKABLE_ATK_MAX), 
				"ALLY_NON_ATTACKABLE_ATK_MAX" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_NON_ATTACKABLE_ATK_MAX), 
				"ALLY_MAX_ATTACKABLE_LIFE" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_MAX_ATTACKABLE_LIFE), 
				"ENEMY_UNIT_MIN" => new AIScriptVariableToken(AIScriptTokenVariableType.ENEMY_UNIT_MIN), 
				"ENEMY_UNIT_MAX" => new AIScriptVariableToken(AIScriptTokenVariableType.ENEMY_UNIT_MAX), 
				"HAND_COUNT_E" => new AIScriptVariableToken(AIScriptTokenVariableType.HAND_COUNT_E), 
				"DECK_COUNT_E" => new AIScriptVariableToken(AIScriptTokenVariableType.DECK_COUNT_E), 
				"PLAYPTN_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.PLAYPTN_COUNT), 
				"MEMBER_ATK_SUM" => new AIScriptVariableToken(AIScriptTokenVariableType.MEMBER_ATK_SUM), 
				"MEMBER_MAX_LIFE" => new AIScriptVariableToken(AIScriptTokenVariableType.MEMBER_MAX_LIFE), 
				"MEMBER_LIFE_SUM" => new AIScriptVariableToken(AIScriptTokenVariableType.MEMBER_LIFE_SUM), 
				"INPLAY_ATTACK_SUM_TO_LEADER" => new AIScriptVariableToken(AIScriptTokenVariableType.INPLAY_ATTACK_SUM_TO_LEADER), 
				"SUMMON_DRUNKEN_ATK_MAX" => new AIScriptVariableToken(AIScriptTokenVariableType.SUMMON_DRUNKEN_ATK_MAX), 
				"ATTACK_TARGET_ATK_MAX" => new AIScriptVariableToken(AIScriptTokenVariableType.ATTACK_TARGET_ATK_MAX), 
				"ENEMY_MIN_ATK" => new AIScriptVariableToken(AIScriptTokenVariableType.ENEMY_MIN_ATK), 
				"ENEMY_MAX_ATK" => new AIScriptVariableToken(AIScriptTokenVariableType.ENEMY_MAX_ATK), 
				"ENEMY_ATK_SUM" => new AIScriptVariableToken(AIScriptTokenVariableType.ENEMY_ATK_SUM), 
				"ALLY_INPLAY_MAX_ATK" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_INPLAY_MAX_ATK), 
				"GRAVE_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.GRAVE_COUNT), 
				"ALLY_MAX_PP" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_MAX_PP), 
				"ENEMY_MAX_PP" => new AIScriptVariableToken(AIScriptTokenVariableType.ENEMY_MAX_PP), 
				"REST_PP" => new AIScriptVariableToken(AIScriptTokenVariableType.REST_PP), 
				"NOW_REST_PP" => new AIScriptVariableToken(AIScriptTokenVariableType.NOW_REST_PP), 
				"ALLY_EP" => new AIScriptVariableToken(AIScriptTokenVariableType.ALLY_EP), 
				"ENEMY_EP" => new AIScriptVariableToken(AIScriptTokenVariableType.ENEMY_EP), 
				"OWN_ATK" => new AIScriptVariableToken(AIScriptTokenVariableType.OWN_ATK), 
				"OWN_LIFE" => new AIScriptVariableToken(AIScriptTokenVariableType.OWN_LIFE), 
				"OWN_COST" => new AIScriptVariableToken(AIScriptTokenVariableType.OWN_COST), 
				"OWN_BASE_ATK" => new AIScriptVariableToken(AIScriptTokenVariableType.OWN_BASE_ATK), 
				"OWN_BASE_LIFE" => new AIScriptVariableToken(AIScriptTokenVariableType.OWN_BASE_LIFE), 
				"KILLER_ATTACK_VALUE" => new AIScriptVariableToken(AIScriptTokenVariableType.KILLER_ATTACK_VALUE), 
				"ENHANCE_COST" => new AIScriptVariableToken(AIScriptTokenVariableType.ENHANCE_COST), 
				"PLAY_ACTOR_ENHANCE_COST" => new AIScriptVariableToken(AIScriptTokenVariableType.PLAY_ACTOR_ENHANCE_COST), 
				"ACCELERATE_COST" => new AIScriptVariableToken(AIScriptTokenVariableType.ACCELERATE_COST), 
				"CHOICE_TRANSFORM_COST" => new AIScriptVariableToken(AIScriptTokenVariableType.CHOICE_TRANSFORM_COST), 
				"BASE_SKILL_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.BASE_SKILL_COUNT), 
				"LAST_LIFE" => new AIScriptVariableToken(AIScriptTokenVariableType.LAST_LIFE), 
				"MAX_ATTACKABLE_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.MAX_ATTACKABLE_COUNT), 
				"HAND_MIN_COST" => new AIScriptVariableToken(AIScriptTokenVariableType.HAND_MIN_COST), 
				"HAND_MAX_COST" => new AIScriptVariableToken(AIScriptTokenVariableType.HAND_MAX_COST), 
				"LEADER_DEF_LIFE" => new AIScriptVariableToken(AIScriptTokenVariableType.LEADER_DEF_LIFE), 
				"LEADER_CURRENT_LIFE" => new AIScriptVariableToken(AIScriptTokenVariableType.LEADER_CURRENT_LIFE), 
				"UNION_BURST_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.UNION_BURST_COUNT), 
				"CONSUME_EP" => new AIScriptVariableToken(AIScriptTokenVariableType.CONSUME_EP), 
				"LAST_HEAL_AMOUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.LAST_HEAL_AMOUNT), 
				"JUST_BEFORE_TURN_DAMAGE" => new AIScriptVariableToken(AIScriptTokenVariableType.JUST_BEFORE_TURN_DAMAGE), 
				"RALLY_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.RALLY_COUNT), 
				"SKYBOUND_ART_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.SKYBOUND_ART_COUNT), 
				"SUPER_SKYBOUND_ART_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.SUPER_SKYBOUND_ART_COUNT), 
				"USED_EP_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.USED_EP_COUNT), 
				"USED_PP_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.USED_PP_COUNT), 
				"EARTH_RITE_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.EARTH_RITE_COUNT), 
				"NECROMANCE_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.NECROMANCE_COUNT), 
				"USED_STACK_COUNT" => new AIScriptVariableToken(AIScriptTokenVariableType.USED_STACK_COUNT), 
				"DEFAULT_DAMAGE" => new AIScriptVariableToken(AIScriptTokenVariableType.DEFAULT_DAMAGE), 
				"NEXT_PLAY_PRIORITY" => new AIScriptVariableToken(AIScriptTokenVariableType.NEXT_PLAY_PRIORITY), 
				"NECROMANCED_COUNT_IN_GAME" => new AIScriptVariableToken(AIScriptTokenVariableType.NECROMANCED_COUNT_IN_GAME), 
				"IS_EVO_TURN" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_EVO_TURN), 
				"IS_ABLE_EVO" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ABLE_EVO), 
				"IS_F_ADV" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_F_ADV), 
				"IS_F_DISADV" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_F_DISADV), 
				"IS_AWAKE" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_AWAKE), 
				"IS_BERSERK" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_BERSERK), 
				"IS_TO_BE_BERSERK" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_TO_BE_BERSERK), 
				"IS_ON_FIELD" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ON_FIELD), 
				"IS_IN_HAND" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_IN_HAND), 
				"IS_IN_PLAYPTN" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_IN_PLAYPTN), 
				"IS_OWNER_TURN" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_OWNER_TURN), 
				"IS_ALLY" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ALLY), 
				"IS_ENEMY" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ENEMY), 
				"IS_ALLY_FIRST" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ALLY_FIRST), 
				"IS_SNEAK" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_SNEAK), 
				"IS_EVOLVED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_EVOLVED), 
				"IS_KILLER" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_KILLER), 
				"IS_MEDUSA" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_MEDUSA), 
				"IS_GUARD" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_GUARD), 
				"IS_RUSH" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_RUSH), 
				"IS_PLAYOUT_ATTACKER" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_PLAYOUT_ATTACKER), 
				"IS_ENHANCED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ENHANCED), 
				"IS_ACCELERATE" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ACCELERATE), 
				"IS_CRYSTALIZE" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_CRYSTALIZE), 
				"IS_ATTACK_LEADER" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ATTACK_LEADER), 
				"IS_FANFARE" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_FANFARE), 
				"IS_SKILL_REMOVED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_SKILL_REMOVED), 
				"IS_BARBAROSSA" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_BARBAROSSA), 
				"IS_RESONANCE" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_RESONANCE), 
				"IS_LETHAL" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_LETHAL), 
				"IS_USED_EVO" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_USED_EVO), 
				"IS_FIRST_TURN" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_FIRST_TURN), 
				"IS_DAMAGED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_DAMAGED), 
				"IS_DELAY_HEAL" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_DELAY_HEAL), 
				"IS_NOT_ATTACK_YET" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_NOT_ATTACK_YET), 
				"IS_EVOLVING" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_EVOLVING), 
				"IS_LEADER" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_LEADER), 
				"IS_GET_ON" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_GET_ON), 
				"IS_SKILL_SUMMONED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_SKILL_SUMMONED), 
				"IS_UNTOUCHABLE" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_UNTOUCHABLE), 
				"IS_FORCE_TARGETING" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_FORCE_TARGETING), 
				"IS_QUICK" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_QUICK), 
				"IS_NOT_BE_ATTACKED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_NOT_BE_ATTACKED), 
				"IS_IN_SIMULATION" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_IN_SIMULATION), 
				"IS_IGNORE_GUARD" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_IGNORE_GUARD), 
				"IS_ATTACKED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ATTACKED), 
				"IS_ONEMORELASTWORD_TAGGED" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_ONEMORELASTWORD_TAGGED), 
				"IS_DRAIN" => new AIScriptVariableToken(AIScriptTokenVariableType.IS_DRAIN), 
				"MEMBER_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.MEMBER_COUNT, 1), 
				"INPLAY_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.INPLAY_COUNT, 1), 
				"PLAYOUT_ATTACKER_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.PLAYOUT_ATTACKER_COUNT, 1), 
				"BEFORE_PLAYPTN_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.BEFORE_PLAYPTN_COUNT, 1), 
				"PLAY_TOKEN_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.PLAY_TOKEN_COUNT, 1), 
				"EVO_COUNT_IN_GAME" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVO_COUNT_IN_GAME, 1), 
				"EVO_COUNT_IN_PREVIOUS_TURN" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVO_COUNT_IN_PREVIOUS_TURN, 1), 
				"HAND_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.HAND_COUNT, 1), 
				"HAND_NAME_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.HAND_NAME_COUNT, 0), 
				"SKILL_COUNT_FROM_ID" => new AIScriptFunctionToken(AIScriptTokenFuncType.SKILL_COUNT_FROM_ID, 2), 
				"TAG_COUNT_FROM_ID" => new AIScriptFunctionToken(AIScriptTokenFuncType.TAG_COUNT_FROM_ID, 2), 
				"DECK_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.DECK_COUNT, 1), 
				"EVAL_RANDOM_MULTI_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_MULTI_DAMAGE, 2), 
				"EVAL_RANDOM_MULTI_SELECT_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_MULTI_SELECT_DAMAGE, 3), 
				"EVAL_RANDOM_MULTI_DAMAGE_MAX" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_MULTI_DAMAGE_MAX, 0), 
				"EVAL_INSTANT_ATTACK" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_INSTANT_ATTACK, 3), 
				"EVAL_RUSH" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RUSH, 3), 
				"EVAL_TARGETING_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_DAMAGE, 2), 
				"EVAL_TARGETING_AND_RANDOM_MULTI_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_AND_RANDOM_MULTI_DAMAGE, 0), 
				"EVAL_TARGETING_DESTROY" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_DESTROY, 4), 
				"EVAL_TARGETING_OTHER_DESTROY" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_OTHER_DESTROY, 4), 
				"EVAL_TARGETING_MULTI_DESTROY" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_MULTI_DESTROY, 0), 
				"EVAL_TARGETING_BOUNCE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_BOUNCE, 4), 
				"EVAL_TARGETING_BANISH" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_BANISH, 4), 
				"EVAL_TARGETING_HEAL" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_HEAL, 0), 
				"EVAL_TARGETING_METAMORPHOSE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_METAMORPHOSE, 0), 
				"EVAL_TARGETING_BUFF" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_TARGETING_BUFF, 0), 
				"EVAL_ECHO_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ECHO_DAMAGE, 2), 
				"EVAL_ALL_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_DAMAGE, 2), 
				"EVAL_ALL_MULTI_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_MULTI_DAMAGE, 3), 
				"EVAL_ALL_DESTROY" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_DESTROY, 4), 
				"EVAL_ALL_BOUNCE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_BOUNCE, 4), 
				"EVAL_ALL_METAMORPHOSE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_METAMORPHOSE, 0), 
				"EVAL_ALL_BUFF" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_BUFF, 0), 
				"EVAL_RANDOM_BUFF" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_BUFF, 0), 
				"EVAL_ALL_HEAL" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_HEAL, 0), 
				"EVAL_ALL_BANISH" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ALL_BANISH, 0), 
				"EVAL_RANDOM_DESTROY" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_DESTROY, 3), 
				"EVAL_RANDOM_BOUNCE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_BOUNCE, 1), 
				"EVAL_RANDOM_BANISH" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_BANISH, 0), 
				"EVAL_RANDOM_METAMORPHOSE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_RANDOM_METAMORPHOSE, 0), 
				"EVAL_LEADER_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_LEADER_DAMAGE, 2), 
				"EVAL_LEADER_HEAL" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_LEADER_HEAL, 2), 
				"EVAL_REANIMATE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_REANIMATE, 1), 
				"EVAL_DIVIDED_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_DIVIDED_DAMAGE, 1), 
				"FORCED_EXCHANGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.FORCED_EXCHANGE, 1), 
				"LIFE" => new AIScriptFunctionToken(AIScriptTokenFuncType.LIFE, 1), 
				"ATTACK" => new AIScriptFunctionToken(AIScriptTokenFuncType.ATTACK, 1), 
				"POW" => new AIScriptFunctionToken(AIScriptTokenFuncType.POW, 2), 
				"CEILING" => new AIScriptFunctionToken(AIScriptTokenFuncType.CEILING, 1), 
				"FLOOR" => new AIScriptFunctionToken(AIScriptTokenFuncType.FLOOR, 1), 
				"EVAL_COUNTDOWN" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_CHANT_COUNT_CHANGE, 1), 
				"EVAL_ALL_COUNTDOWN" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_CHANT_COUNT_CHANGE_ALL, 1), 
				"IS_CLASH_TARGET" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_CLASH_TARGET, 1), 
				"IS_ATTACK_TARGET" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_ATTACK_TARGET, 1), 
				"IS_SELECTED_TARGET" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_SELECTED_TARGET, 1), 
				"IS_NEXT_PLAY" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_NEXT_PLAY, 1), 
				"DECK_NAME_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.DECK_NAME_COUNT, 1), 
				"BROKEN_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.BROKEN_COUNT, 1), 
				"BROKEN_NAME_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.BROKEN_NAME_COUNT, 1), 
				"BROKEN_COST_SUM" => new AIScriptFunctionToken(AIScriptTokenFuncType.BROKEN_COST_SUM, 1), 
				"IS_TRIBE" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_TRIBE, 1), 
				"PLAYED_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.PLAYED_COUNT, 1), 
				"PLAYED_COUNT_IN_GAME" => new AIScriptFunctionToken(AIScriptTokenFuncType.PLAYED_COUNT_IN_GAME, 1), 
				"PLAYED_COUNT_IN_PREVIOUS_TURN" => new AIScriptFunctionToken(AIScriptTokenFuncType.PLAYED_COUNT_IN_PREVIOUS_TURN, 1), 
				"PLAYED_NAME_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.PLAYED_NAME_COUNT, 1), 
				"RANDOM" => new AIScriptFunctionToken(AIScriptTokenFuncType.RANDOM, 1), 
				"IS_REANIMATE" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_REANIMATE, 1), 
				"DAMAGE_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.DAMAGE_COUNT, 1), 
				"HEAL_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.HEAL_COUNT, 1), 
				"TOTAL_DAMAGE" => new AIScriptFunctionToken(AIScriptTokenFuncType.TOTAL_DAMAGE, 0), 
				"FUSION_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.FUSION_COUNT, 0), 
				"NOW_FUSION_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.NOW_FUSION_COUNT, 0), 
				"FUSION_COUNT_AT_ONCE" => new AIScriptFunctionToken(AIScriptTokenFuncType.FUSION_COUNT_AT_ONCE, 0), 
				"FUSION_NAME_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.FUSION_NAME_COUNT, 0), 
				"IS_SKILL_OCCURRED" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_SKILL_OCCURRED, 0), 
				"SKILL_ACTIVATE_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.SKILL_ACTIVATE_COUNT, 0), 
				"HAND_MAX_ATTACK" => new AIScriptFunctionToken(AIScriptTokenFuncType.HAND_MAX_ATTACK, 0), 
				"DECK_MAX_COST" => new AIScriptFunctionToken(AIScriptTokenFuncType.DECK_MAX_COST, 0), 
				"INPLAY_LARGEST_LIFE" => new AIScriptFunctionToken(AIScriptTokenFuncType.INPLAY_LARGEST_LIFE, 0), 
				"LEADER_MAX_LIFE" => new AIScriptFunctionToken(AIScriptTokenFuncType.LEADER_MAX_LIFE, 0), 
				"IS_DISCARD_TARGET" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_DISCARD_TARGET, 0), 
				"DISCARD_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.DISCARD_COUNT, 0), 
				"BOUNCE_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.BOUNCE_COUNT, 0), 
				"EMOTE_PLAY_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.EMOTE_PLAY_COUNT, 0), 
				"DRAW_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.DRAW_COUNT, 0), 
				"MEMBER_MAX_ATK" => new AIScriptFunctionToken(AIScriptTokenFuncType.MEMBER_MAX_ATK, 0), 
				"LEAVE_NAME_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.LEAVE_NAME_COUNT, 1), 
				"DESTROYED_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.DESTROYED_COUNT, 1), 
				"IS_BURIAL_RITE" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_BURIAL_RITE, 0), 
				"BURIAL_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.BURIAL_COUNT, 1), 
				"RESONANCE_START_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.RESONANCE_START_COUNT, 2), 
				"SUMMON_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.SUMMON_COUNT, 1), 
				"BUFF_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.BUFF_COUNT, 0), 
				"IS_HOLDING_BATTLE_SKILL" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_HOLDING_BATTLE_SKILL, 1), 
				"IS_LEADER_HOLDING_BATTLE_SKILL" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_LEADER_HOLDING_BATTLE_SKILL, 1), 
				"STACK_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.STACK_COUNT, 0), 
				"LEAVE_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.LEAVE_COUNT, 0), 
				"OWN_DESTROY_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.OWN_DESTROY_COUNT, 0), 
				"IS_SELECTABLE" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_SELECTABLE, 0), 
				"IS_ENEMY_AI_ID" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_ENEMY_AI_ID, 0), 
				"ADD_HAND_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.ADD_HAND_COUNT, 0), 
				"BASE_COST" => new AIScriptFunctionToken(AIScriptTokenFuncType.BASE_COST, 0), 
				"RECEIVED_DAMAGE_SUM" => new AIScriptFunctionToken(AIScriptTokenFuncType.RECEIVED_DAMAGE_SUM, 0), 
				"IS_PLAYER_CHARA_ID" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_PLAYER_CHARA_ID, 0), 
				"FUSION_COUNT_IN_GAME" => new AIScriptFunctionToken(AIScriptTokenFuncType.FUSION_COUNT_IN_GAME, 0), 
				"FUSION_NAME_COUNT_IN_GAME" => new AIScriptFunctionToken(AIScriptTokenFuncType.FUSION_NAME_COUNT_IN_GAME, 0), 
				"IS_PLAYER_ABILITY_ID" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_PLAYER_ABILITY_ID, 0), 
				"BANISH_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.BANISH_COUNT, 0), 
				"HAND_BANISH_COUNT" => new AIScriptFunctionToken(AIScriptTokenFuncType.HAND_BANISH_COUNT, 0), 
				"IS_BOTH_CLASS" => new AIScriptFunctionToken(AIScriptTokenFuncType.IS_BOTH_CLASS, 0), 
				"EVAL_ATTACK_REMOVE" => new AIScriptFunctionToken(AIScriptTokenFuncType.EVAL_ATTACK_REMOVE, 0), 
				"ADDED_DECK_COUNT_IN_GAME" => new AIScriptFunctionToken(AIScriptTokenFuncType.ADDED_DECK_COUNT_IN_GAME, 0), 
				"NONE" => new AIScriptArgumentToken(AIScriptTokenArgType.NONE, isNot), 
				"LEGION" => new AIScriptArgumentToken(AIScriptTokenArgType.LEGION, isNot), 
				"LORD" => new AIScriptArgumentToken(AIScriptTokenArgType.LORD, isNot), 
				"WHITE_RITUAL" => new AIScriptArgumentToken(AIScriptTokenArgType.WHITE_RITUAL, isNot), 
				"ARTIFACT" => new AIScriptArgumentToken(AIScriptTokenArgType.ARTIFACT, isNot), 
				"MANARIA" => new AIScriptArgumentToken(AIScriptTokenArgType.MANARIA, isNot), 
				"MACHINE" => new AIScriptArgumentToken(AIScriptTokenArgType.MACHINE, isNot), 
				"FOOD" => new AIScriptArgumentToken(AIScriptTokenArgType.FOOD, isNot), 
				"LEVIN" => new AIScriptArgumentToken(AIScriptTokenArgType.LEVIN, isNot), 
				"NATURE" => new AIScriptArgumentToken(AIScriptTokenArgType.NATURE, isNot), 
				"BANQUET" => new AIScriptArgumentToken(AIScriptTokenArgType.BANQUET, isNot), 
				"HERO" => new AIScriptArgumentToken(AIScriptTokenArgType.HERO, isNot), 
				"ARMED" => new AIScriptArgumentToken(AIScriptTokenArgType.ARMED, isNot), 
				"LOOT" => new AIScriptArgumentToken(AIScriptTokenArgType.LOOT, isNot), 
				"HELLBOUND" => new AIScriptArgumentToken(AIScriptTokenArgType.HELLBOUND, isNot), 
				"SCHOOL" => new AIScriptArgumentToken(AIScriptTokenArgType.SCHOOL, isNot), 
				"CHESS" => new AIScriptArgumentToken(AIScriptTokenArgType.CHESS, isNot), 
				"ANY_TRIBE" => new AIScriptArgumentToken(AIScriptTokenArgType.ANY_TRIBE, isNot), 
				"ALL" => new AIScriptArgumentToken(AIScriptTokenArgType.ALL, isNot), 
				"SPELL" => new AIScriptArgumentToken(AIScriptTokenArgType.SPELL, isNot), 
				"SPELL_CARD_TYPE" => new AIScriptArgumentToken(AIScriptTokenArgType.SPELL_CARD_TYPE, isNot), 
				"ALL_SPELLBOOST" => new AIScriptArgumentToken(AIScriptTokenArgType.ALL_SPELLBOOST, isNot), 
				"FIELD" => new AIScriptArgumentToken(AIScriptTokenArgType.FIELD, isNot), 
				"CHANT_FIELD" => new AIScriptArgumentToken(AIScriptTokenArgType.CHANT_FIELD, isNot), 
				"CLASS" => new AIScriptArgumentToken(AIScriptTokenArgType.CLASS, isNot), 
				"ALLY_CLASS" => new AIScriptArgumentToken(AIScriptTokenArgType.ALLY_CLASS, isNot), 
				"ENEMY_CLASS" => new AIScriptArgumentToken(AIScriptTokenArgType.ENEMY_CLASS, isNot), 
				"ACCELERATE" => new AIScriptArgumentToken(AIScriptTokenArgType.ACCELERATE, isNot), 
				"CRYSTALIZE" => new AIScriptArgumentToken(AIScriptTokenArgType.CRYSTALIZE, isNot), 
				"LASTWORD" => new AIScriptArgumentToken(AIScriptTokenArgType.LASTWORD, isNot), 
				"KILLER" => new AIScriptArgumentToken(AIScriptTokenArgType.KILLER, isNot), 
				"SNEAK" => new AIScriptArgumentToken(AIScriptTokenArgType.SNEAK, isNot), 
				"MEDUSA" => new AIScriptArgumentToken(AIScriptTokenArgType.MEDUSA, isNot), 
				"QUICK" => new AIScriptArgumentToken(AIScriptTokenArgType.QUICK, isNot), 
				"RUSH" => new AIScriptArgumentToken(AIScriptTokenArgType.RUSH, isNot), 
				"DRAIN" => new AIScriptArgumentToken(AIScriptTokenArgType.DRAIN, isNot), 
				"GUARD" => new AIScriptArgumentToken(AIScriptTokenArgType.GUARD, isNot), 
				"UNTOUCHABLE" => new AIScriptArgumentToken(AIScriptTokenArgType.UNTOUCHABLE, isNot), 
				"FORCE_TARGETING" => new AIScriptArgumentToken(AIScriptTokenArgType.FORCE_TARGETING, isNot), 
				"UNBANISHABLE" => new AIScriptArgumentToken(AIScriptTokenArgType.UNBANISHABLE, isNot), 
				"IGNORE_GUARD" => new AIScriptArgumentToken(AIScriptTokenArgType.IGNORE_GUARD, isNot), 
				"DAMAGE_CLIP" => new AIScriptArgumentToken(AIScriptTokenArgType.DAMAGE_CLIP, isNot), 
				"DAMAGE_CUT" => new AIScriptArgumentToken(AIScriptTokenArgType.DAMAGE_CUT, isNot), 
				"SKILL_DAMAGE" => new AIScriptArgumentToken(AIScriptTokenArgType.SKILL_DAMAGE, isNot), 
				"ALL_DAMAGE" => new AIScriptArgumentToken(AIScriptTokenArgType.ALL_DAMAGE, isNot), 
				"ATTACK_DAMAGE" => new AIScriptArgumentToken(AIScriptTokenArgType.ATTACK_DAMAGE, isNot), 
				"SPELL_DAMAGE" => new AIScriptArgumentToken(AIScriptTokenArgType.SPELL_DAMAGE, isNot), 
				"NOT_BE_ATTACKED" => new AIScriptArgumentToken(AIScriptTokenArgType.NOT_BE_ATTACKED, isNot), 
				"UNION_BURST" => new AIScriptArgumentToken(AIScriptTokenArgType.UNION_BURST, isNot), 
				"NO_SKILL" => new AIScriptArgumentToken(AIScriptTokenArgType.NO_SKILL, isNot), 
				"CRYSTALIZE_HOLDER" => new AIScriptArgumentToken(AIScriptTokenArgType.CRYSTALIZE_HOLDER, isNot), 
				"ELF" => new AIScriptArgumentToken(AIScriptTokenArgType.ELF, isNot), 
				"ROYAL" => new AIScriptArgumentToken(AIScriptTokenArgType.ROYAL, isNot), 
				"WITCH" => new AIScriptArgumentToken(AIScriptTokenArgType.WITCH, isNot), 
				"DRAGON" => new AIScriptArgumentToken(AIScriptTokenArgType.DRAGON, isNot), 
				"NECROMANCER" => new AIScriptArgumentToken(AIScriptTokenArgType.NECROMANCER, isNot), 
				"VAMPIRE" => new AIScriptArgumentToken(AIScriptTokenArgType.VAMPIRE, isNot), 
				"BISHOP" => new AIScriptArgumentToken(AIScriptTokenArgType.BISHOP, isNot), 
				"NEMESIS" => new AIScriptArgumentToken(AIScriptTokenArgType.NEMESIS, isNot), 
				"WHEN_PLAY" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_PLAY, isNot), 
				"WHEN_DESTROY" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_DESTROY, isNot), 
				"WHEN_ATTACK" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_ATTACK, isNot), 
				"WHEN_CLASH" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_CLASH, isNot), 
				"WHEN_EVO" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_EVO, isNot), 
				"WHEN_TURNEND" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_TURNEND, isNot), 
				"WHEN_ALLY_TURNEND" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_ALLY_TURNEND, isNot), 
				"WHEN_OPPONENT_TURNEND" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_OPPONENT_TURNEND, isNot), 
				"WHEN_ALLY_TURNSTART" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_ALLY_TURNSTART, isNot), 
				"WHEN_OPPONENT_TURNSTART" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_OPPONENT_TURNSTART, isNot), 
				"WHEN_NEXT_TURNEND" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_NEXT_TURNEND, isNot), 
				"WHEN_SUMMON" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_SUMMON, isNot), 
				"WHEN_HEAL" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_HEAL, isNot), 
				"WHEN_LEAVE" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_LEAVE, isNot), 
				"FIRST_TURN" => new AIScriptArgumentToken(AIScriptTokenArgType.FIRST_TURN, isNot), 
				"EVOLVED" => new AIScriptArgumentToken(AIScriptTokenArgType.EVOLVED, isNot), 
				"ATTACKABLE" => new AIScriptArgumentToken(AIScriptTokenArgType.ATTACKABLE, isNot), 
				"CANT_ATTACK" => new AIScriptArgumentToken(AIScriptTokenArgType.CANT_ATTACK, isNot), 
				"PREVIOUS_TURN_ATTACKED" => new AIScriptArgumentToken(AIScriptTokenArgType.PREVIOUS_TURN_ATTACKED, isNot), 
				"ATTACKED" => new AIScriptArgumentToken(AIScriptTokenArgType.ATTACKED, isNot), 
				"CONSUME_EP_ZERO" => new AIScriptArgumentToken(AIScriptTokenArgType.CONSUME_EP_ZERO, isNot), 
				"ALLY" => new AIScriptArgumentToken(AIScriptTokenArgType.ALLY, isNot), 
				"ENEMY" => new AIScriptArgumentToken(AIScriptTokenArgType.OPPONENT, isNot), 
				"BOTH" => new AIScriptArgumentToken(AIScriptTokenArgType.BOTH, isNot), 
				"SELECTED_TARGET_SIDE" => new AIScriptArgumentToken(AIScriptTokenArgType.SELECTED_TARGET_SIDE, isNot), 
				"RANDOM_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.RANDOM_SELECT, isNot), 
				"ALL_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.ALL_SELECT, isNot), 
				"TARGET_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.TARGET_SELECT, isNot), 
				"SECOND_TARGET_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.SECOND_TARGET_SELECT, isNot), 
				"RANDOM_MULTI_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.RANDOM_MULTI_SELECT, isNot), 
				"REVERSE_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.REVERSE_TARGET, isNot), 
				"FIRST_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.FIRST_SELECT, isNot), 
				"DIVIDED_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.DIVIDED_SELECT, isNot), 
				"OLDEST_SELECT" => new AIScriptArgumentToken(AIScriptTokenArgType.OLDEST_SELECT, isNot), 
				"FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.FOLLOWER, isNot), 
				"FOLLOWER_CARD_TYPE" => new AIScriptArgumentToken(AIScriptTokenArgType.FOLLOWER_CARD_TYPE, isNot), 
				"AMULET" => new AIScriptArgumentToken(AIScriptTokenArgType.AMULET, isNot), 
				"NOT_COUNTDOWN_AMULET" => new AIScriptArgumentToken(AIScriptTokenArgType.NOT_COUNTDOWN_AMULET, isNot), 
				"DAMAGED_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.DAMAGED_FOLLOWER, isNot), 
				"NO_DAMAGED_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.NO_DAMAGED_FOLLOWER, isNot), 
				"EVOLVED_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.EVOLVED_FOLLOWER, isNot), 
				"BUFFED_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.BUFFED_FOLLOWER, isNot), 
				"OTHER_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.OTHER_FOLLOWER, isNot), 
				"SUMMON_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.SUMMON_FOLLOWER, isNot), 
				"SUMMON_AMULET" => new AIScriptArgumentToken(AIScriptTokenArgType.SUMMON_AMULET, isNot), 
				"LATEST_SUMMON_CARD" => new AIScriptArgumentToken(AIScriptTokenArgType.LATEST_SUMMON_CARD, isNot), 
				"LATEST_DRAW_CARD" => new AIScriptArgumentToken(AIScriptTokenArgType.LATEST_DRAW_CARD, isNot), 
				"ROMELIA_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.ROMELIA_TARGET, isNot), 
				"MIN_ATTACK" => new AIScriptArgumentToken(AIScriptTokenArgType.MIN_ATTACK, isNot), 
				"MAX_ATTACK" => new AIScriptArgumentToken(AIScriptTokenArgType.MAX_ATTACK, isNot), 
				"MIN_COST" => new AIScriptArgumentToken(AIScriptTokenArgType.MIN_COST, isNot), 
				"MAX_COST" => new AIScriptArgumentToken(AIScriptTokenArgType.MAX_COST, isNot), 
				"ALLY_AMULET" => new AIScriptArgumentToken(AIScriptTokenArgType.ALLY_AMULET, isNot), 
				"LIFE_INF" => new AIScriptArgumentToken(AIScriptTokenArgType.LIFE_INF, isNot), 
				"ATK_INF" => new AIScriptArgumentToken(AIScriptTokenArgType.ATK_INF, isNot), 
				"COST_INF" => new AIScriptArgumentToken(AIScriptTokenArgType.COST_INF, isNot), 
				"LIFE_SUP" => new AIScriptArgumentToken(AIScriptTokenArgType.LIFE_SUP, isNot), 
				"ATK_EQL" => new AIScriptArgumentToken(AIScriptTokenArgType.ATK_EQL, isNot), 
				"LIFE_EQL" => new AIScriptArgumentToken(AIScriptTokenArgType.LIFE_EQL, isNot), 
				"ATK_SUP" => new AIScriptArgumentToken(AIScriptTokenArgType.ATK_SUP, isNot), 
				"COST_SUP" => new AIScriptArgumentToken(AIScriptTokenArgType.COST_SUP, isNot), 
				"COST_EQL" => new AIScriptArgumentToken(AIScriptTokenArgType.COST_EQL, isNot), 
				"BASE_COST_INF" => new AIScriptArgumentToken(AIScriptTokenArgType.BASE_COST_INF, isNot), 
				"BASE_COST_SUP" => new AIScriptArgumentToken(AIScriptTokenArgType.BASE_COST_SUP, isNot), 
				"BASE_COST_EQL" => new AIScriptArgumentToken(AIScriptTokenArgType.BASE_COST_EQL, isNot), 
				"COUNTDOWN_EQL" => new AIScriptArgumentToken(AIScriptTokenArgType.COUNTDOWN_EQL, isNot), 
				"PLAY_COUNT_EQL" => new AIScriptArgumentToken(AIScriptTokenArgType.PLAY_COUNT_EQL, isNot), 
				"CLASH_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.CLASH_TARGET, isNot), 
				"BANISHED_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.BANISHED_TARGET, isNot), 
				"GETOFF_CARD" => new AIScriptArgumentToken(AIScriptTokenArgType.GETOFF_CARD, isNot), 
				"ATTACKER" => new AIScriptArgumentToken(AIScriptTokenArgType.ATTACKER, isNot), 
				"EVOLVER" => new AIScriptArgumentToken(AIScriptTokenArgType.EVOLVER, isNot), 
				"PLAYED_CARD" => new AIScriptArgumentToken(AIScriptTokenArgType.PLAYED_CARD, isNot), 
				"TEMP" => new AIScriptArgumentToken(AIScriptTokenArgType.TEMP, isNot), 
				"PERM" => new AIScriptArgumentToken(AIScriptTokenArgType.PERM, isNot), 
				"TURN" => new AIScriptArgumentToken(AIScriptTokenArgType.TURN, isNot), 
				"GAME" => new AIScriptArgumentToken(AIScriptTokenArgType.GAME, isNot), 
				"DESTROY" => new AIScriptArgumentToken(AIScriptTokenArgType.DESTROY, isNot), 
				"BANISH" => new AIScriptArgumentToken(AIScriptTokenArgType.BANISH, isNot), 
				"TOKEN_DRAW" => new AIScriptArgumentToken(AIScriptTokenArgType.TOKEN_DRAW, isNot), 
				"SELF" => new AIScriptArgumentToken(AIScriptTokenArgType.SELF, isNot), 
				"NEUTRAL" => new AIScriptArgumentToken(AIScriptTokenArgType.NEUTRAL, isNot), 
				"WHEN_DAMAGED" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_DAMAGED, isNot), 
				"USE_MIN" => new AIScriptArgumentToken(AIScriptTokenArgType.USE_MIN, isNot), 
				"IGNORE_IN_BATTLE" => new AIScriptArgumentToken(AIScriptTokenArgType.IGNORE_IN_BATTLE, isNot), 
				"IGNORE_IN_FUSION" => new AIScriptArgumentToken(AIScriptTokenArgType.IGNORE_IN_FUSION, isNot), 
				"IN_HAND" => new AIScriptArgumentToken(AIScriptTokenArgType.IN_HAND, isNot), 
				"IN_PLAY" => new AIScriptArgumentToken(AIScriptTokenArgType.IN_PLAY, isNot), 
				"LAST_DRAW_CARD" => new AIScriptArgumentToken(AIScriptTokenArgType.LAST_DRAW_CARD, isNot), 
				"NEWER" => new AIScriptArgumentToken(AIScriptTokenArgType.NEWER, isNot), 
				"OLDEST_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.OLDEST_FOLLOWER, isNot), 
				"OTHER_OLDEST_HAND_CARD_TYPE" => new AIScriptArgumentToken(AIScriptTokenArgType.OTHER_OLDEST_HAND_CARD_TYPE, isNot), 
				"CHOICED_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.CHOICED_TARGET, isNot), 
				"SELECTED_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.SELECTED_TARGET, isNot), 
				"SECOND_SELECTED_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.SECOND_SELECTED_TARGET, isNot), 
				"PLAYED" => new AIScriptArgumentToken(AIScriptTokenArgType.PLAYED, isNot), 
				"PLAYPTN" => new AIScriptArgumentToken(AIScriptTokenArgType.PLAYPTN, isNot), 
				"BEFORE_PLAYPTN" => new AIScriptArgumentToken(AIScriptTokenArgType.BEFORE_PLAYPTN, isNot), 
				"NOW" => new AIScriptArgumentToken(AIScriptTokenArgType.NOW, isNot), 
				"DESTRUCTIBLE" => new AIScriptArgumentToken(AIScriptTokenArgType.DESTRUCTIBLE, isNot), 
				"TRIGGER" => new AIScriptArgumentToken(AIScriptTokenArgType.TRIGGER, isNot), 
				"REAL_SKILL_TARGET" => new AIScriptArgumentToken(AIScriptTokenArgType.REAL_SKILL_TARGET, isNot), 
				"CANDIDATE" => new AIScriptArgumentToken(AIScriptTokenArgType.CANDIDATE, isNot), 
				"ENHANCED" => new AIScriptArgumentToken(AIScriptTokenArgType.ENHANCED, isNot), 
				"LEAST_VALUE" => new AIScriptArgumentToken(AIScriptTokenArgType.LEAST_VALUE, isNot), 
				"ALLY_ATTACK_FOLLOWER" => new AIScriptArgumentToken(AIScriptTokenArgType.ALLY_ATTACK_FOLLOWER, isNot), 
				"ADD" => new AIScriptArgumentToken(AIScriptTokenArgType.ADD, isNot), 
				"SET" => new AIScriptArgumentToken(AIScriptTokenArgType.SET, isNot), 
				"SELECTED_TARGET_ID" => new AIScriptArgumentToken(AIScriptTokenArgType.SELECTED_TARGET_ID, isNot), 
				"DEFAULT_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.DEFAULT_LOGIC, isNot), 
				"DESTROY_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.DESTROY_LOGIC, isNot), 
				"DAMAGE_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.DAMAGE_LOGIC, isNot), 
				"BANISH_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.BANISH_LOGIC, isNot), 
				"BOUNCE_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.BOUNCE_LOGIC, isNot), 
				"METAMORPHOSE_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.METAMORPHOSE_LOGIC, isNot), 
				"MAX_ATTACK_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.MAX_ATTACK_LOGIC, isNot), 
				"TYRANT_ORDER_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.TYRANT_ORDER_LOGIC, isNot), 
				"REVERSE_DISCARD_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.REVERSE_DISCARD_LOGIC, isNot), 
				"WHITEFROST_WHISPER_LOGIC" => new AIScriptArgumentToken(AIScriptTokenArgType.WHITEFROST_WHISPER_LOGIC, isNot), 
				"FILTER_END" => new AIScriptArgumentToken(AIScriptTokenArgType.FILTER_END, isNot), 
				"NEXT_PLAY" => new AIScriptArgumentToken(AIScriptTokenArgType.NEXT_PLAY, isNot), 
				"WHEN_PLAY_DAMAGE" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_PLAY_DAMAGE, isNot), 
				"WHEN_PLAY_DESTROY" => new AIScriptArgumentToken(AIScriptTokenArgType.WHEN_PLAY_DESTROY, isNot), 
				"FIRST_SUMMON_FOLLOWER_IN_PLAYPTN" => new AIScriptArgumentToken(AIScriptTokenArgType.FIRST_SUMMON_FOLLOWER_IN_PLAYPTN, isNot), 
				"DESTROYED_CARD" => new AIScriptArgumentToken(AIScriptTokenArgType.DESTROYED_CARD, isNot), 
				"DESTROYED_IN_CURRENT_TURN" => new AIScriptArgumentToken(AIScriptTokenArgType.DESTROYED_IN_CURRENT_TURN, isNot), 
				_ => ConvertWordWithSpecialMarkToToken(word, isNot), 
			};
		}
		}
	}

	public static AIScriptTokenBase ConvertWordWithSpecialMarkToToken(string word, bool isNot)
	{
		char c = word[0];
		string text = word.Substring(1);
		switch (c)
		{
		case '@':
		{
			int result = 0;
			if (int.TryParse(text, out result))
			{
				return new AIScriptIDToken(result, isNot);
			}
			break;
		}
		case '#':
			return new AIScriptTextToken(text, isNot);
		}
		return null;
	}

	public static AIPlayTagType ConvertWordToTagType(string word)
	{
		switch (word)
		{
		case "playBonus":
			return AIPlayTagType.PlayBonus;
		case "playBonusRate":
			return AIPlayTagType.PlayBonusRate;
		case "fanfareBonus":
			return AIPlayTagType.FanfareBonus;
		case "ignoreFanfareBonus":
			return AIPlayTagType.IgnoreFanfareBonus;
		case "ignoreBreak":
			return AIPlayTagType.IgnoreBreak;
		case "evoBonus":
			return AIPlayTagType.EvoBonus;
		case "memberEvoBonus":
			return AIPlayTagType.MemberEvoBonus;
		case "enemyEvoBonus":
			return AIPlayTagType.EnemyEvoBonus;
		case "battleBonus":
			return AIPlayTagType.BattleBonus;
		case "battleBonusRate":
			return AIPlayTagType.BattleBonusRate;
		case "clashBonus":
			return AIPlayTagType.ClashBonus;
		case "clashDestroy":
			return AIPlayTagType.ClashDestroy;
		case "clashHeal":
			return AIPlayTagType.ClashHeal;
		case "clashToken":
			return AIPlayTagType.ClashToken;
		case "clashBanish":
			return AIPlayTagType.ClashBanish;
		case "clashSpellboost":
			return AIPlayTagType.ClashSpellboost;
		case "afterClashHeal":
			return AIPlayTagType.AfterClashHeal;
		case "attackDamage":
			return AIPlayTagType.AttackDamage;
		case "attackBreakDamage":
			return AIPlayTagType.AttackBreakDamage;
		case "attackBreakEvo":
			return AIPlayTagType.AttackBreakEvo;
		case "attackBreakRecoverPp":
			return AIPlayTagType.AttackBreakRecoverPp;
		case "attackBreakAttackTwice":
			return AIPlayTagType.AttackBreakAttackTwice;
		case "attackHeal":
			return AIPlayTagType.AttackHeal;
		case "attackAttackableCount":
			return AIPlayTagType.AttackAttackableCount;
		case "attackQuick":
			return AIPlayTagType.AttackQuick;
		case "afterAttackHeal":
			return AIPlayTagType.AfterAttackHeal;
		case "attackBonus":
			return AIPlayTagType.AttackBonus;
		case "clashDamage":
			return AIPlayTagType.ClashDamage;
		case "afterClashDamage":
			return AIPlayTagType.AfterClashDamage;
		case "clashRemoveSkill":
			return AIPlayTagType.ClashRemoveSkill;
		case "attackRemoveSkill":
			return AIPlayTagType.AttackRemoveSkill;
		case "playptnBonus":
			return AIPlayTagType.PlayptnBonus;
		case "priority":
			return AIPlayTagType.Priority;
		case "playoutAtkB":
			return AIPlayTagType.PlayoutAttackBonus;
		case "playoutDamageB":
			return AIPlayTagType.PlayoutDamageBonus;
		case "allyPlayoutDamageBonus":
			return AIPlayTagType.AllyPlayoutDamageBonus;
		case "playoutNextTurn":
			return AIPlayTagType.PlayoutNextTurn;
		case "costBonus":
			return AIPlayTagType.CostBonus;
		case "playLimit":
			return AIPlayTagType.PlayLimit;
		case "mlgKeep":
			return AIPlayTagType.MulliganKeep;
		case "mlgChange":
			return AIPlayTagType.MulliganChange;
		case "handPlus":
			return AIPlayTagType.HandPlus;
		case "playPlus":
			return AIPlayTagType.PlayPlus;
		case "evoHandPlus":
			return AIPlayTagType.EvoHandPlus;
		case "noNormalEvo":
			return AIPlayTagType.NoNormalEvo;
		case "evoEvo":
			return AIPlayTagType.EvoEvo;
		case "evoDamage":
			return AIPlayTagType.EvoDamage;
		case "break":
			return AIPlayTagType.Break;
		case "otherBreakBonus":
			return AIPlayTagType.OtherBreakBonus;
		case "otherBanishBonus":
			return AIPlayTagType.OtherBanishBonus;
		case "otherLeaveBonus":
			return AIPlayTagType.OtherLeaveBonus;
		case "lastwordDestroy":
			return AIPlayTagType.LastwordDestroy;
		case "breakDamage":
			return AIPlayTagType.BreakDamage;
		case "breakRecoverAttackableCount":
			return AIPlayTagType.BreakRecoverAttackableCount;
		case "lastwordDamage":
			return AIPlayTagType.LastwordDamage;
		case "lastwordHeal":
			return AIPlayTagType.LastwordHeal;
		case "lastwordMetamorphose":
			return AIPlayTagType.LastwordMetamorphose;
		case "lastwordBanish":
			return AIPlayTagType.LastwordBanish;
		case "lastwordDraw":
			return AIPlayTagType.LastwordDraw;
		case "lastwordAddDeck":
			return AIPlayTagType.LastwordAddDeck;
		case "lastwordSetStatus":
			return AIPlayTagType.LastwordSetStatus;
		case "turnEndDestroy":
			return AIPlayTagType.TurnEndDestroy;
		case "turnEndBanish":
			return AIPlayTagType.TurnEndBanish;
		case "turnEndDamage":
			return AIPlayTagType.TurnEndDamage;
		case "turnEndHeal":
			return AIPlayTagType.TurnEndHeal;
		case "turnEndSetLeaderMaxLife":
			return AIPlayTagType.TurnEndSetLeaderMaxLife;
		case "turnEndDiscard":
			return AIPlayTagType.TurnEndDiscard;
		case "turnEndBuff":
			return AIPlayTagType.TurnEndBuff;
		case "turnEndSubtractCountdown":
			return AIPlayTagType.TurnEndSubtractCountdown;
		case "turnEndToken":
			return AIPlayTagType.TurnEndToken;
		case "turnEndBounce":
			return AIPlayTagType.TurnEndBounce;
		case "turnEndAddDeck":
			return AIPlayTagType.TurnEndAddDeck;
		case "turnEndEvo":
			return AIPlayTagType.TurnEndEvo;
		case "turnEndDraw":
			return AIPlayTagType.TurnEndDraw;
		case "turnEndShield":
			return AIPlayTagType.TurnEndShield;
		case "turnEndDamageClip":
			return AIPlayTagType.TurnEndDamageClip;
		case "turnEndDamageCut":
			return AIPlayTagType.TurnEndDamageCut;
		case "turnEndGuard":
			return AIPlayTagType.TurnEndGuard;
		case "turnEndBanAttack":
			return AIPlayTagType.TurnEndBanAttack;
		case "playSkip":
			return AIPlayTagType.PlaySkip;
		case "playSkipWithEvo":
			return AIPlayTagType.PlaySkipWithEvo;
		case "playSkipIfEvo":
			return AIPlayTagType.PlaySkipIfEvo;
		case "playSkipWithAction":
			return AIPlayTagType.PlaySkipWithAction;
		case "playSkipWithActionIfEvo":
			return AIPlayTagType.PlaySkipWithActionIfEvo;
		case "target":
			return AIPlayTagType.Target;
		case "ignoreTarget":
			return AIPlayTagType.IgnoreTarget;
		case "memBattleB":
			return AIPlayTagType.MemberBattleBonus;
		case "memberBattleBonusRate":
			return AIPlayTagType.MemberBattleBonusRate;
		case "enemyBattleB":
			return AIPlayTagType.EnemyBattleBonus;
		case "enemyBattleBonusRate":
			return AIPlayTagType.EnemyBattleBonusRate;
		case "allyPlayB":
			return AIPlayTagType.AllyPlayBonus;
		case "enemyPlayBonus":
			return AIPlayTagType.EnemyPlayBonus;
		case "reincarnation":
			return AIPlayTagType.ReincarnationSimulation;
		case "attackBuff":
			return AIPlayTagType.AttackBuff;
		case "attackHandBuff":
			return AIPlayTagType.AttackHandBuff;
		case "attackDestroy":
			return AIPlayTagType.AttackDestroy;
		case "attackBanish":
			return AIPlayTagType.AttackBanish;
		case "attackEvo":
			return AIPlayTagType.AttackEvo;
		case "afterAttackEvo":
			return AIPlayTagType.AfterAttackEvo;
		case "afterAttackDraw":
			return AIPlayTagType.AfterAttackDraw;
		case "afterAttackBanish":
			return AIPlayTagType.AfterAttackBanish;
		case "breakBuff":
			return AIPlayTagType.BreakBuff;
		case "breakSetLeaderMaxLife":
			return AIPlayTagType.BreakSetLeaderMaxLife;
		case "summonBuff":
			return AIPlayTagType.SummonBuff;
		case "summonEvo":
			return AIPlayTagType.SummonEvo;
		case "summonRush":
			return AIPlayTagType.SummonRush;
		case "summonQuick":
			return AIPlayTagType.SummonQuick;
		case "summonDamage":
			return AIPlayTagType.SummonDamage;
		case "summonBanish":
			return AIPlayTagType.SummonBanish;
		case "summonHeal":
			return AIPlayTagType.SummonHeal;
		case "summonDestroy":
			return AIPlayTagType.SummonDestroy;
		case "summonBanAttack":
			return AIPlayTagType.SummonBanAttack;
		case "otherSummonDamage":
			return AIPlayTagType.OtherSummonDamage;
		case "otherSummonRush":
			return AIPlayTagType.OtherSummonRush;
		case "otherSummonGuard":
			return AIPlayTagType.OtherSummonGuard;
		case "otherSummonQuick":
			return AIPlayTagType.OtherSummonQuick;
		case "otherSummonKiller":
			return AIPlayTagType.OtherSummonKiller;
		case "otherSummonDrain":
			return AIPlayTagType.OtherSummonDrain;
		case "otherSummonBanish":
			return AIPlayTagType.OtherSummonBanish;
		case "otherSummonHeal":
			return AIPlayTagType.OtherSummonHeal;
		case "otherSummonBuff":
			return AIPlayTagType.OtherSummonBuff;
		case "otherSummonEvo":
			return AIPlayTagType.OtherSummonEvo;
		case "otherSummonDamageCut":
			return AIPlayTagType.OtherSummonDamageCut;
		case "otherSummonDamageClip":
			return AIPlayTagType.OtherSummonDamageClip;
		case "otherSummonSubtractCountdown":
			return AIPlayTagType.OtherSummonSubtractCountdown;
		case "otherSummonAddCemetery":
			return AIPlayTagType.OtherSummonAddCemetery;
		case "otherSummonUntouchable":
			return AIPlayTagType.OtherSummonUntouchable;
		case "otherSummonDestroy":
			return AIPlayTagType.OtherSummonDestory;
		case "otherSummonDraw":
			return AIPlayTagType.OtherSummonDraw;
		case "attackByLife":
			return AIPlayTagType.AttackByLife;
		case "attackToken":
			return AIPlayTagType.AttackToken;
		case "puppetAttack":
			return AIPlayTagType.PuppetAttack;
		case "noSkipAttack":
			return AIPlayTagType.NoSkipAttack;
		case "evoToken":
			return AIPlayTagType.EvoToken;
		case "playDestroy":
			return AIPlayTagType.PlayDestroy;
		case "playDamage":
			return AIPlayTagType.PlayDamage;
		case "fanfareDamage":
			return AIPlayTagType.FanfareDamage;
		case "fanfareDestroy":
			return AIPlayTagType.FanfareDestroy;
		case "playMetamorphose":
			return AIPlayTagType.PlayMetamorphose;
		case "fanfareMetamorphose":
			return AIPlayTagType.FanfareMetamorphose;
		case "playHandMetamorphose":
			return AIPlayTagType.PlayHandMetamorphose;
		case "fanfareHandMetamorphose":
			return AIPlayTagType.FanfareHandMetamorphose;
		case "playHeal":
			return AIPlayTagType.PlayHeal;
		case "fanfareHeal":
			return AIPlayTagType.FanfareHeal;
		case "playBanish":
			return AIPlayTagType.PlayBanish;
		case "fanfareBanish":
			return AIPlayTagType.FanfareBanish;
		case "playBounce":
			return AIPlayTagType.PlayBounce;
		case "fanfareBounce":
			return AIPlayTagType.FanfareBounce;
		case "playSubtractCountdown":
			return AIPlayTagType.PlaySubtractCountdown;
		case "fanfareSubtractCountdown":
			return AIPlayTagType.FanfareSubtractCountdown;
		case "fanfareRecoverAttackableCount":
			return AIPlayTagType.FanfareRecoverAttackableCount;
		case "fanfareSneak":
			return AIPlayTagType.FanfareSneak;
		case "playSneak":
			return AIPlayTagType.PlaySneak;
		case "fanfareQuick":
			return AIPlayTagType.FanfareQuick;
		case "playQuick":
			return AIPlayTagType.PlayQuick;
		case "fanfareRush":
			return AIPlayTagType.FanfareRush;
		case "playRush":
			return AIPlayTagType.PlayRush;
		case "fanfareGuard":
			return AIPlayTagType.FanfareGuard;
		case "playGuard":
			return AIPlayTagType.PlayGuard;
		case "fanfareDrain":
			return AIPlayTagType.FanfareDrain;
		case "playDrain":
			return AIPlayTagType.PlayDrain;
		case "fanfareKiller":
			return AIPlayTagType.FanfareKiller;
		case "playKiller":
			return AIPlayTagType.PlayKiller;
		case "fanfareUntouchable":
			return AIPlayTagType.FanfareUntouchable;
		case "playUntouchable":
			return AIPlayTagType.PlayUntouchable;
		case "playBonusInSimulation":
			return AIPlayTagType.PlayBonusInSimulation;
		case "fanfareBonusInSimulation":
			return AIPlayTagType.FanfareBonusInSimulation;
		case "fanfareForceTargeting":
			return AIPlayTagType.FanfareForceTargeting;
		case "breakFirst":
			return AIPlayTagType.BreakFirst;
		case "breakLast":
			return AIPlayTagType.BreakLast;
		case "bounceBonus":
			return AIPlayTagType.BounceBonus;
		case "banishBonus":
			return AIPlayTagType.BanishBonus;
		case "breakBeforePlay":
			return AIPlayTagType.BreakBeforePlay;
		case "emoOnPlay":
			return AIPlayTagType.EmoteOnPlay;
		case "emoOnEvo":
			return AIPlayTagType.EmoteOnEvo;
		case "emoOnAtk":
			return AIPlayTagType.EmoteOnAtk;
		case "emoOnDestroy":
			return AIPlayTagType.EmoteOnDestroy;
		case "forceEmoOnDestroy":
			return AIPlayTagType.ForceEmoteOnDestroy;
		case "emoOnTurnEnd":
			return AIPlayTagType.EmoteOnTurnEnd;
		case "clashKiller":
			return AIPlayTagType.ClashKiller;
		case "playAttachTag":
			return AIPlayTagType.PlayAttachTag;
		case "fanfareAttachTag":
			return AIPlayTagType.FanfareAttachTag;
		case "playCopyTag":
			return AIPlayTagType.PlayCopyTag;
		case "fanfareCopyTag":
			return AIPlayTagType.FanfareCopyTag;
		case "attackAttachTag":
			return AIPlayTagType.AttackAttachTag;
		case "lastwordAttachTag":
			return AIPlayTagType.LastwordAttachTag;
		case "evoAttachTag":
			return AIPlayTagType.EvoAttachTag;
		case "summonAttachTag":
			return AIPlayTagType.SummonAttachTag;
		case "otherSummonAttachTag":
			return AIPlayTagType.OtherSummonAttachTag;
		case "breakAttachTag":
			return AIPlayTagType.BreakAttachTag;
		case "necromanceAttachTag":
			return AIPlayTagType.NecromanceAttachTag;
		case "turnEndAttachTag":
			return AIPlayTagType.TurnEndAttachTag;
		case "healAttachTag":
			return AIPlayTagType.HealAttachTag;
		case "fanfareAttachStyle":
			return AIPlayTagType.FanfareAttachStyle;
		case "fanfareToken":
			return AIPlayTagType.FanfareToken;
		case "lastwordToken":
			return AIPlayTagType.LastwordToken;
		case "playToken":
			return AIPlayTagType.PlayToken;
		case "addCardToPlayoutPlayPtn":
			return AIPlayTagType.AddCardToPlayoutPlayPtn;
		case "cantBeAttacked":
			return AIPlayTagType.CantBeAttacked;
		case "necromance":
			return AIPlayTagType.Necromance;
		case "earthRite":
			return AIPlayTagType.EarthRite;
		case "burialRite":
			return AIPlayTagType.BurialRite;
		case "enhance":
			return AIPlayTagType.Enhance;
		case "accelerate":
			return AIPlayTagType.Accelerate;
		case "crystalize":
			return AIPlayTagType.Crystalize;
		case "choiceTransform":
			return AIPlayTagType.ChoiceTransform;
		case "removeSkill":
			return AIPlayTagType.RemoveSkill;
		case "oneMoreLastword":
			return AIPlayTagType.OneMoreLastword;
		case "attackableClass":
			return AIPlayTagType.AttackableClass;
		case "clashBuff":
			return AIPlayTagType.ClashBuff;
		case "playptnBaseStatsRate":
			return AIPlayTagType.PlayptnBaseStatsRate;
		case "playRecoverPp":
			return AIPlayTagType.PlayRecoverPP;
		case "fanfareRecoverPp":
			return AIPlayTagType.FanfareRecoverPp;
		case "buffRecoverPp":
			return AIPlayTagType.BuffRecoverPP;
		case "condChoice":
			return AIPlayTagType.CondChoice;
		case "evoChoice":
			return AIPlayTagType.EvoChoice;
		case "playChoice":
			return AIPlayTagType.PlayChoice;
		case "fanfareChoice":
			return AIPlayTagType.FanfareChoice;
		case "plagueCity":
			return AIPlayTagType.PlagueCity;
		case "breakDestroy":
			return AIPlayTagType.BreakDestroy;
		case "evolvedAttackable":
			return AIPlayTagType.EvolvedAttackable;
		case "evolvedAttackableCount":
			return AIPlayTagType.EvolvedAttackableCount;
		case "evolvedSkill":
			return AIPlayTagType.EvolvedSkill;
		case "evoDestroy":
			return AIPlayTagType.EvoDestroy;
		case "evoBuff":
			return AIPlayTagType.EvoBuff;
		case "evoHeal":
			return AIPlayTagType.EvoHeal;
		case "evoBanish":
			return AIPlayTagType.EvoBanish;
		case "evoSubtractCountdown":
			return AIPlayTagType.EvoSubtractCountdown;
		case "evoSetLeaderMaxLife":
			return AIPlayTagType.EvoSetLeaderMaxLife;
		case "evoMetamorphose":
			return AIPlayTagType.EvoMetamorphose;
		case "evoHandMetamorphose":
			return AIPlayTagType.EvoHandMetamorphose;
		case "evoBounce":
			return AIPlayTagType.EvoBounce;
		case "evoRush":
			return AIPlayTagType.EvoRush;
		case "evoQuick":
			return AIPlayTagType.EvoQuick;
		case "evoGuard":
			return AIPlayTagType.EvoGuard;
		case "evoKiller":
			return AIPlayTagType.EvoKiller;
		case "evoDrain":
			return AIPlayTagType.EvoDrain;
		case "evoShield":
			return AIPlayTagType.EvoShield;
		case "evoDamageCut":
			return AIPlayTagType.EvoDamageCut;
		case "evoReanimate":
			return AIPlayTagType.EvoReanimate;
		case "evoAddDeck":
			return AIPlayTagType.EvoAddDeck;
		case "healDamage":
			return AIPlayTagType.HealDamage;
		case "healBuff":
			return AIPlayTagType.HealBuff;
		case "healToken":
			return AIPlayTagType.HealToken;
		case "healHeal":
			return AIPlayTagType.HealHeal;
		case "healEvo":
			return AIPlayTagType.HealEvo;
		case "turnEndMetamorphose":
			return AIPlayTagType.TurnEndMetamorphose;
		case "leaveBonus":
			return AIPlayTagType.LeaveBonus;
		case "leaveToken":
			return AIPlayTagType.LeaveToken;
		case "leaveHeal":
			return AIPlayTagType.LeaveHeal;
		case "leaveDamage":
			return AIPlayTagType.LeaveDamage;
		case "leaveAttachTag":
			return AIPlayTagType.LeaveAttachTag;
		case "leaveBanish":
			return AIPlayTagType.LeaveBanish;
		case "lastwordBuff":
			return AIPlayTagType.LastwordBuff;
		case "firstEvo":
			return AIPlayTagType.FirstEvo;
		case "lastwordReanimate":
			return AIPlayTagType.LastwordReanimate;
		case "reanimateBonus":
			return AIPlayTagType.ReanimateBonus;
		case "reanimateEvo":
			return AIPlayTagType.ReanimateEvo;
		case "playDraw":
			return AIPlayTagType.PlayDraw;
		case "handBonus":
			return AIPlayTagType.HandBonus;
		case "fusion":
			return AIPlayTagType.Fusion;
		case "playReanimate":
			return AIPlayTagType.PlayReanimate;
		case "fanfareReanimate":
			return AIPlayTagType.FanfareReanimate;
		case "modifyHeal":
			return AIPlayTagType.ModifyHeal;
		case "evoRecoverPp":
			return AIPlayTagType.EvoRecoverPp;
		case "fusionBonus":
			return AIPlayTagType.FusionBonus;
		case "fusionDraw":
			return AIPlayTagType.FusionDraw;
		case "noInstantAttack":
			return AIPlayTagType.NoInstantAttack;
		case "giveSkill":
			return AIPlayTagType.GiveSkill;
		case "playDiscard":
			return AIPlayTagType.PlayDiscard;
		case "fanfareDiscard":
			return AIPlayTagType.FanfareDiscard;
		case "discardedBonus":
			return AIPlayTagType.DiscardedBonus;
		case "attackDiscard":
			return AIPlayTagType.AttackDiscard;
		case "discardedToken":
			return AIPlayTagType.DiscardedToken;
		case "discardDamage":
			return AIPlayTagType.DiscardDamage;
		case "breakHeal":
			return AIPlayTagType.BreakHeal;
		case "buffDamage":
			return AIPlayTagType.BuffDamage;
		case "buffHeal":
			return AIPlayTagType.BuffHeal;
		case "buffBuff":
			return AIPlayTagType.BuffBuff;
		case "buffEvo":
			return AIPlayTagType.BuffEvo;
		case "buffDestroy":
			return AIPlayTagType.BuffDestroy;
		case "buffToken":
			return AIPlayTagType.BuffToken;
		case "buffDraw":
			return AIPlayTagType.BuffDraw;
		case "buffShield":
			return AIPlayTagType.BuffShield;
		case "discardHeal":
			return AIPlayTagType.DiscardHeal;
		case "evoDiscard":
			return AIPlayTagType.EvoDiscard;
		case "allyDiscardBonus":
			return AIPlayTagType.AllyDiscardBonus;
		case "buffRush":
			return AIPlayTagType.BuffRush;
		case "banishAttachTag":
			return AIPlayTagType.BanishAttachTag;
		case "otherBanishToken":
			return AIPlayTagType.OtherBanishToken;
		case "otherBanishAddCemetery":
			return AIPlayTagType.OtherBanishAddCemetery;
		case "getOn":
			return AIPlayTagType.GetOn;
		case "getOnBanish":
			return AIPlayTagType.GetOnBanish;
		case "getOnDamage":
			return AIPlayTagType.GetOnDamage;
		case "getOnEvo":
			return AIPlayTagType.GetOnEvo;
		case "getOffMetamorphose":
			return AIPlayTagType.GetOffMetamorphose;
		case "getOffEvo":
			return AIPlayTagType.GetOffEvo;
		case "rallyCountPlus":
			return AIPlayTagType.RallyCountPlus;
		case "playActivateCount":
			return AIPlayTagType.PlayActivateCount;
		case "attackActivateCount":
			return AIPlayTagType.AttackActivateCount;
		case "breakActivateCount":
			return AIPlayTagType.BreakActivateCount;
		case "banishActivateCount":
			return AIPlayTagType.BanishActivateCount;
		case "damagedActivateCount":
			return AIPlayTagType.DamagedActivateCount;
		case "buffActivateCount":
			return AIPlayTagType.BuffActivateCounnt;
		case "turnEndActivateCount":
			return AIPlayTagType.TurnEndActivateCount;
		case "healActivateCount":
			return AIPlayTagType.HealActivateCount;
		case "evoActivateCount":
			return AIPlayTagType.EvoActivateCount;
		case "necromanceActivateCount":
			return AIPlayTagType.NecromanceActivateCount;
		case "summonActivateCount":
			return AIPlayTagType.SummonActivateCount;
		case "bounceDamage":
			return AIPlayTagType.BounceDamage;
		case "playBuff":
			return AIPlayTagType.PlayBuff;
		case "fanfareBuff":
			return AIPlayTagType.FanfareBuff;
		case "playHandBuff":
			return AIPlayTagType.PlayHandBuff;
		case "fanfareHandBuff":
			return AIPlayTagType.FanfareHandBuff;
		case "playSetMaxStatus":
			return AIPlayTagType.PlaySetMaxStatus;
		case "fanfareSetMaxStatus":
			return AIPlayTagType.FanfareSetMaxStatus;
		case "playSetLeaderMaxLife":
			return AIPlayTagType.PlaySetLeaderMaxLife;
		case "resonanceDamage":
			return AIPlayTagType.ResonanceDamage;
		case "resonanceHeal":
			return AIPlayTagType.ResonanceHeal;
		case "resonanceKiller":
			return AIPlayTagType.ResonanceKiller;
		case "forceBerserk":
			return AIPlayTagType.ForceBerserk;
		case "setAITribe":
			return AIPlayTagType.SetAITribe;
		case "playSpellboost":
			return AIPlayTagType.PlaySpellboost;
		case "fanfareSpellboost":
			return AIPlayTagType.FanfareSpellboost;
		case "playAddCemetery":
			return AIPlayTagType.PlayAddCemetery;
		case "necromanceAddCemetery":
			return AIPlayTagType.NecromanceAddCemetery;
		case "fanfareAddCemetery":
			return AIPlayTagType.FanfareAddCemetery;
		case "playBanAttack":
			return AIPlayTagType.PlayBanAttack;
		case "fanfareBanAttack":
			return AIPlayTagType.FanfareBanAttack;
		case "playIgnoreGuard":
			return AIPlayTagType.PlayIgnoreGuard;
		case "fanfareIgnoreGuard":
			return AIPlayTagType.FanfareIgnoreGuard;
		case "turnStartAttachTag":
			return AIPlayTagType.TurnStartAttachTag;
		case "turnStartSubtractCountdown":
			return AIPlayTagType.TurnStartSubtractCountdown;
		case "turnStartDamageCut":
			return AIPlayTagType.TurnStartDamageCut;
		case "turnStartShield":
			return AIPlayTagType.TurnStartShield;
		case "turnStartDamage":
			return AIPlayTagType.TurnStartDamage;
		case "generateTag":
			return AIPlayTagType.GenerateTag;
		case "evoTokenDraw":
			return AIPlayTagType.EvoTokenDraw;
		case "evoAttackableCount":
			return AIPlayTagType.EvoAttackableCount;
		case "evoChangeCost":
			return AIPlayTagType.EvoChangeCost;
		case "playTokenDraw":
			return AIPlayTagType.PlayTokenDraw;
		case "fanfareTokenDraw":
			return AIPlayTagType.FanfareTokenDraw;
		case "playSummonHandCard":
			return AIPlayTagType.PlaySummonHandCard;
		case "fanfareSummonHandCard":
			return AIPlayTagType.FanfareSummonHandCard;
		case "playChangeClass":
			return AIPlayTagType.PlayChangeClass;
		case "fanfareChangeClass":
			return AIPlayTagType.FanfareChangeClass;
		case "playChangeTribe":
			return AIPlayTagType.PlayChangeTribe;
		case "fanfareChangeTribe":
			return AIPlayTagType.FanfareChangeTribe;
		case "playChangeCost":
			return AIPlayTagType.PlayChangeCost;
		case "fanfareChangeCost":
			return AIPlayTagType.FanfareChangeCost;
		case "playSelect":
			return AIPlayTagType.PlaySelect;
		case "fanfareSelect":
			return AIPlayTagType.FanfareSelect;
		case "playHandSelect":
			return AIPlayTagType.PlayHandSelect;
		case "fanfareHandSelect":
			return AIPlayTagType.FanfareHandSelect;
		case "evoHandSelect":
			return AIPlayTagType.EvoHandSelect;
		case "removeByDestroy":
			return AIPlayTagType.RemoveByDestroy;
		case "evoHandBuff":
			return AIPlayTagType.EvoHandBuff;
		case "playNotBeAttacked":
			return AIPlayTagType.PlayNotBeAttacked;
		case "fanfareNotBeAttacked":
			return AIPlayTagType.FanfareNotBeAttacked;
		case "playAttackableCount":
			return AIPlayTagType.PlayAttackableCount;
		case "fanfareAttackableCount":
			return AIPlayTagType.FanfareAttackableCount;
		case "breakAddStack":
			return AIPlayTagType.BreakAddStack;
		case "changeInplayImmediateRemoveByBanish":
			return AIPlayTagType.ChangeInplayImmediateRemoveByBanish;
		case "changeInplayImmediateRemoveByDestroy":
			return AIPlayTagType.ChangeInplayImmediateRemoveByDestroy;
		case "changeInplayCannotPlay":
			return AIPlayTagType.ChangeInplayCannotPlay;
		case "changeInplayCannotAttack":
			return AIPlayTagType.ChangeInplayCannotAttack;
		case "changeInplayAttachTag":
			return AIPlayTagType.ChangeInplayAttachTag;
		case "changeInplayImmediateShield":
			return AIPlayTagType.ChangeInplayImmediateShield;
		case "changeInplayImmediateDamageCut":
			return AIPlayTagType.ChangeInplayImmediateDamageCut;
		case "changeInplayImmediateDamageClip":
			return AIPlayTagType.ChangeInplayImmediateDamageClip;
		case "changeInplayImmediateLifeLowerLimit":
			return AIPlayTagType.ChangeInplayImmediateLifeLowerLimit;
		case "changeInplayImmediateUntouchable":
			return AIPlayTagType.ChangeInplayImmediateUntouchable;
		case "changeInplayImmediateIndestructible":
			return AIPlayTagType.ChangeInplayImmediateIndestructible;
		case "changePpTotalBuff":
			return AIPlayTagType.ChangePpTotalBuff;
		case "changeInplayImmediateDamageModifier":
			return AIPlayTagType.ChangeInplayImmediateDamageModifier;
		case "evoSetStatus":
			return AIPlayTagType.EvoSetStatus;
		case "playRemoveSkill":
			return AIPlayTagType.PlayRemoveSkill;
		case "fanfareRemoveSkill":
			return AIPlayTagType.FanfareRemoveSkill;
		case "playModifyConsumeEp":
			return AIPlayTagType.PlayModifyConsumeEp;
		case "fanfareModifyConsumeEp":
			return AIPlayTagType.FanfareModifyConsumeEp;
		case "playEvo":
			return AIPlayTagType.PlayEvo;
		case "fanfareEvo":
			return AIPlayTagType.FanfareEvo;
		case "otherPlayEvo":
			return AIPlayTagType.OtherPlayEvo;
		case "otherEnhanceEvo":
			return AIPlayTagType.OtherEnhanceEvo;
		case "otherPlayDamage":
			return AIPlayTagType.OtherPlayDamage;
		case "otherPlayDestroy":
			return AIPlayTagType.OtherPlayDestroy;
		case "otherPlayBounce":
			return AIPlayTagType.OtherPlayBounce;
		case "otherPlayBuff":
			return AIPlayTagType.OtherPlayBuff;
		case "otherPlayToken":
			return AIPlayTagType.OtherPlayToken;
		case "otherPlayRemoveTag":
			return AIPlayTagType.OtherPlayRemoveTag;
		case "otherPlayQuick":
			return AIPlayTagType.OtherPlayQuick;
		case "attackSubtractCountdown":
			return AIPlayTagType.AttackSubtractCountdown;
		case "damagedBonus":
			return AIPlayTagType.DamagedBonus;
		case "damagedBuff":
			return AIPlayTagType.DamagedBuff;
		case "damagedDamage":
			return AIPlayTagType.DamagedDamage;
		case "damagedToken":
			return AIPlayTagType.DamagedToken;
		case "damagedHeal":
			return AIPlayTagType.DamagedHeal;
		case "damagedCantUnderAttack":
			return AIPlayTagType.DamagedCantUnderAttack;
		case "otherDamagedDamage":
			return AIPlayTagType.OtherDamagedDamage;
		case "otherDamagedHeal":
			return AIPlayTagType.OtherDamagedHeal;
		case "otherDamagedSetLeaderMaxLife":
			return AIPlayTagType.OtherDamagedSetLeaderMaxLife;
		case "otherDamagedSubtractCountdown":
			return AIPlayTagType.OtherDamagedSubtractCountdown;
		case "otherDamagedBanish":
			return AIPlayTagType.OtherDamagedBanish;
		case "otherAttackBuff":
			return AIPlayTagType.OtherAttackBuff;
		case "otherAttackDamage":
			return AIPlayTagType.OtherAttackDamage;
		case "otherAttackHeal":
			return AIPlayTagType.OtherAttackHeal;
		case "otherAttackToken":
			return AIPlayTagType.OtherAttackToken;
		case "otherEvoBuff":
			return AIPlayTagType.OtherEvoBuff;
		case "otherAttackAttachTag":
			return AIPlayTagType.OtherAttackAttachTag;
		case "otherAttackRemoveTag":
			return AIPlayTagType.OtherAttackRemoveTag;
		case "otherEvoDamage":
			return AIPlayTagType.OtherEvoDamage;
		case "otherEvoBanish":
			return AIPlayTagType.OtherEvoBanish;
		case "otherEvoSubtractCountdown":
			return AIPlayTagType.OtherEvoSubtractCountdown;
		case "otherEvoEvo":
			return AIPlayTagType.OtherEvoEvo;
		case "otherEvoToken":
			return AIPlayTagType.OtherEvoToken;
		case "otherEvoShield":
			return AIPlayTagType.OtherEvoShield;
		case "selfAndOtherEvoDamage":
			return AIPlayTagType.SelfAndOtherEvoDamage;
		case "selfAndOtherEvoAttachTag":
			return AIPlayTagType.SelfAndOtherEvoAttachTag;
		case "selfAndOtherEvoShield":
			return AIPlayTagType.SelfAndOtherEvoShield;
		case "selfAndOtherEvoDestroy":
			return AIPlayTagType.SelfAndOtherEvoDestroy;
		case "selfAndOtherEvoBounce":
			return AIPlayTagType.SelfAndOtherEvoBounce;
		case "selfAndOtherEvoToken":
			return AIPlayTagType.SelfAndOtherEvoToken;
		case "selfAndOtherEvoDraw":
			return AIPlayTagType.SelfAndOtherEvoDraw;
		case "selfAndOtherEvoAddCemetery":
			return AIPlayTagType.SelfAndOtherEvoAddCemetery;
		case "selfAndOtherEvoHeal":
			return AIPlayTagType.SelfAndOtherEvoHeal;
		case "selfAndOtherEvoTokenDraw":
			return AIPlayTagType.SelfAndOtherEvoTokenDraw;
		case "attackKiller":
			return AIPlayTagType.AttackKiller;
		case "lastwordEvo":
			return AIPlayTagType.LastwordEvo;
		case "lastwordRemoveSkill":
			return AIPlayTagType.LastwordRemoveSkill;
		case "lastwordAddCemetery":
			return AIPlayTagType.LastwordAddCemetery;
		case "lastwordDamageClip":
			return AIPlayTagType.LastwordDamageClip;
		case "lastwordShield":
			return AIPlayTagType.LastwordShield;
		case "evolveToOther":
			return AIPlayTagType.EvolveToOther;
		case "playShield":
			return AIPlayTagType.PlayShield;
		case "fanfareShield":
			return AIPlayTagType.FanfareShield;
		case "playDamageCut":
			return AIPlayTagType.PlayDamageCut;
		case "fanfareDamageCut":
			return AIPlayTagType.FanfareDamageCut;
		case "playDamageClip":
			return AIPlayTagType.PlayDamageClip;
		case "fanfareDamageClip":
			return AIPlayTagType.FanfareDamageClip;
		case "otherPlayRecoverPp":
			return AIPlayTagType.OtherPlayRecoverPp;
		case "attackShield":
			return AIPlayTagType.AttackShield;
		case "clashShield":
			return AIPlayTagType.ClashShield;
		case "attackDamageClip":
			return AIPlayTagType.AttackDamageClip;
		case "clashDamageClip":
			return AIPlayTagType.ClashDamageClip;
		case "clashRemoveTag":
			return AIPlayTagType.ClashRemoveTag;
		case "otherLeaveDamage":
			return AIPlayTagType.OtherLeaveDamage;
		case "otherLeaveToken":
			return AIPlayTagType.OtherLeaveToken;
		case "turnEndRemoveTag":
			return AIPlayTagType.TurnEndRemoveTag;
		case "otherPlayAttachTag":
			return AIPlayTagType.OtherPlayAttachTag;
		case "buffBonus":
			return AIPlayTagType.BuffBonus;
		case "necromanceDamage":
			return AIPlayTagType.NecromanceDamage;
		case "necromanceHeal":
			return AIPlayTagType.NecromanceHeal;
		case "fanfareRemoveGuard":
			return AIPlayTagType.FanfareRemoveGuard;
		case "attackRemoveTag":
			return AIPlayTagType.AttackRemoveTag;
		case "forceImmediateAttack":
			return AIPlayTagType.ForceImmediateAttack;
		case "stack":
			return AIPlayTagType.Stack;
		case "evoAddStack":
			return AIPlayTagType.EvoAddStack;
		case "fusionMetamorphose":
			return AIPlayTagType.FusionMetamorphose;
		case "lastwordSubtractCountdown":
			return AIPlayTagType.LastwordSubtractCountdown;
		case "attackSetStatus":
			return AIPlayTagType.AttackSetStatus;
		case "playAddDeck":
			return AIPlayTagType.PlayAddDeck;
		case "fanfareAddDeck":
			return AIPlayTagType.FanfareAddDeck;
		case "attackAddDeck":
			return AIPlayTagType.AttackAddDeck;
		case "breakRecoverPp":
			return AIPlayTagType.BreakRecoverPp;
		case "choiceBrave":
			return AIPlayTagType.ChoiceBrave;
		default:
			if (!string.IsNullOrEmpty(word))
			{
				AIConsoleUtility.LogError("AICardData Unknown tag : " + word);
			}
			return AIPlayTagType.None;
		}
	}
}
