UNPKG

@firestone-hs/replay-parser

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.

106 lines 17.7 kB
import { Injectable } from '@angular/core'; import { CardType, GameTag } from '@firestone-hs/reference-data'; import { AttachingEnchantmentAction } from '../../models/action/attaching-enchantment-action'; import { CardDrawAction } from '../../models/action/card-draw-action'; import { CardPlayedFromHandAction } from '../../models/action/card-played-from-hand-action'; import { CardTargetAction } from '../../models/action/card-target-action'; import { DamageAction } from '../../models/action/damage-action'; import { HealingAction } from '../../models/action/healing-action'; import { PowerTargetAction } from '../../models/action/power-target-action'; import { SecretRevealedAction } from '../../models/action/secret-revealed-action'; import { StartTurnAction } from '../../models/action/start-turn-action'; import { SummonAction } from '../../models/action/summon-action'; import { Game } from '../../models/game/game'; import * as i0 from "@angular/core"; import * as i1 from "../all-cards.service"; export class ActiveSpellParserService { constructor(allCards) { this.allCards = allCards; this.ACTIONS_THAT_RESET_ACTIVE_SPELL = [typeof StartTurnAction]; } parseActiveSpellForLastTurn(game) { let turns = game.turns; const numberOfTurns = turns.size; const turn = game.turns.get(numberOfTurns - 1); const enrichedTurn = this.enrichTurn(turn); turns = turns.set(numberOfTurns - 1, enrichedTurn); return Game.createGame(game, { turns }); } enrichTurn(turn) { const newActions = []; for (let i = 0; i < turn.actions.length; i++) { const previousAction = i === 0 ? null : newActions[i - 1]; const newAction = this.enrichAction(turn.actions[i], previousAction); newActions.push(newAction); } return turn.update({ actions: newActions }); } enrichAction(action, previousAction) { // Don't set any active spell for these actions if (this.ACTIONS_THAT_RESET_ACTIVE_SPELL.indexOf(typeof action) !== -1) { return action; } // By default, don't show any active spell let activeSpell; if (action instanceof CardPlayedFromHandAction && action.entities.get(action.entityId) //&& action.entities.get(action.entityId).getTag(GameTag.CARDTYPE) === CardType.SPELL ) { activeSpell = action.entityId; } else if (action instanceof PowerTargetAction && action.entities.get(action.originId) && action.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL) { activeSpell = action.originId; } else if (action instanceof AttachingEnchantmentAction && action.entities.get(action.originId) && action.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL) { activeSpell = action.originId; } else if (action instanceof CardTargetAction && action.entities.get(action.originId) && action.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL) { activeSpell = action.originId; } else if (action instanceof SummonAction && action.entities.get(action.originId) && action.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL) { activeSpell = action.originId; } else if (action instanceof SecretRevealedAction && action.entities.get(action.entityId) && action.entities.get(action.entityId).getTag(GameTag.CARDTYPE) === CardType.SPELL) { activeSpell = action.entityId; } else if (action instanceof AttachingEnchantmentAction && previousAction && previousAction.activeSpell) { activeSpell = previousAction.activeSpell; } else if (action instanceof CardDrawAction && previousAction && previousAction.activeSpell) { activeSpell = previousAction.activeSpell; } else if (action instanceof DamageAction && previousAction && previousAction.activeSpell) { activeSpell = previousAction.activeSpell; } else if (action instanceof HealingAction && previousAction && previousAction.activeSpell) { activeSpell = previousAction.activeSpell; } else if (action instanceof PowerTargetAction && previousAction && previousAction.activeSpell) { activeSpell = previousAction.activeSpell; } if (activeSpell) { // // // console.log('Updating active spell', activeSpell); return action.updateAction({ activeSpell }); } return action; } } ActiveSpellParserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: ActiveSpellParserService, deps: [{ token: i1.AllCardsService }], target: i0.ɵɵFactoryTarget.Injectable }); ActiveSpellParserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: ActiveSpellParserService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: ActiveSpellParserService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.AllCardsService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLXNwZWxsLXBhcnNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwbGF5LXBhcnNlci9zcmMvbGliL3NlcnZpY2VzL2dhbWVwaXBlbGluZS9hY3RpdmUtc3BlbGwtcGFyc2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWpFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFPOUMsTUFBTSxPQUFPLHdCQUF3QjtJQUdwQyxZQUFvQixRQUF5QjtRQUF6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUY1QixvQ0FBK0IsR0FBRyxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUM7SUFF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SSxNQUFNLFlBQVksYUFBYSxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQzNGLFdBQVcsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxNQUFNLFlBQVksaUJBQWlCLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxXQUFXLEVBQUU7WUFDL0YsV0FBVyxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUM7U0FDekM7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNoQiwyREFBMkQ7WUFDM0QsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFZLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQzs7cUhBckZXLHdCQUF3Qjt5SEFBeEIsd0JBQXdCLGNBRnhCLE1BQU07MkZBRU4sd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FyZFR5cGUsIEdhbWVUYWcgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9hY3Rpb24nO1xyXG5pbXBvcnQgeyBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vYXR0YWNoaW5nLWVuY2hhbnRtZW50LWFjdGlvbic7XHJcbmltcG9ydCB7IENhcmREcmF3QWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9jYXJkLWRyYXctYWN0aW9uJztcclxuaW1wb3J0IHsgQ2FyZFBsYXllZEZyb21IYW5kQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9jYXJkLXBsYXllZC1mcm9tLWhhbmQtYWN0aW9uJztcclxuaW1wb3J0IHsgQ2FyZFRhcmdldEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vY2FyZC10YXJnZXQtYWN0aW9uJztcclxuaW1wb3J0IHsgRGFtYWdlQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9kYW1hZ2UtYWN0aW9uJztcclxuaW1wb3J0IHsgSGVhbGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vaGVhbGluZy1hY3Rpb24nO1xyXG5pbXBvcnQgeyBQb3dlclRhcmdldEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vcG93ZXItdGFyZ2V0LWFjdGlvbic7XHJcbmltcG9ydCB7IFNlY3JldFJldmVhbGVkQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9zZWNyZXQtcmV2ZWFsZWQtYWN0aW9uJztcclxuaW1wb3J0IHsgU3RhcnRUdXJuQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9zdGFydC10dXJuLWFjdGlvbic7XHJcbmltcG9ydCB7IFN1bW1vbkFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vc3VtbW9uLWFjdGlvbic7XHJcbmltcG9ydCB7IEdhbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2FtZS9nYW1lJztcclxuaW1wb3J0IHsgVHVybiB9IGZyb20gJy4uLy4uL21vZGVscy9nYW1lL3R1cm4nO1xyXG5pbXBvcnQgeyBBbGxDYXJkc1NlcnZpY2UgfSBmcm9tICcuLi9hbGwtY2FyZHMuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZlU3BlbGxQYXJzZXJTZXJ2aWNlIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IEFDVElPTlNfVEhBVF9SRVNFVF9BQ1RJVkVfU1BFTEwgPSBbdHlwZW9mIFN0YXJ0VHVybkFjdGlvbl07XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWxsQ2FyZHM6IEFsbENhcmRzU2VydmljZSkge31cclxuXHJcblx0cHVibGljIHBhcnNlQWN0aXZlU3BlbGxGb3JMYXN0VHVybihnYW1lOiBHYW1lKTogR2FtZSB7XHJcblx0XHRsZXQgdHVybnMgPSBnYW1lLnR1cm5zO1xyXG5cdFx0Y29uc3QgbnVtYmVyT2ZUdXJucyA9IHR1cm5zLnNpemU7XHJcblx0XHRjb25zdCB0dXJuID0gZ2FtZS50dXJucy5nZXQobnVtYmVyT2ZUdXJucyAtIDEpO1xyXG5cdFx0Y29uc3QgZW5yaWNoZWRUdXJuID0gdGhpcy5lbnJpY2hUdXJuKHR1cm4pO1xyXG5cdFx0dHVybnMgPSB0dXJucy5zZXQobnVtYmVyT2ZUdXJucyAtIDEsIGVucmljaGVkVHVybik7XHJcblx0XHRyZXR1cm4gR2FtZS5jcmVhdGVHYW1lKGdhbWUsIHsgdHVybnMgfSBhcyBHYW1lKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZW5yaWNoVHVybih0dXJuOiBUdXJuKTogVHVybiB7XHJcblx0XHRjb25zdCBuZXdBY3Rpb25zID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHR1cm4uYWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBwcmV2aW91c0FjdGlvbiA9IGkgPT09IDAgPyBudWxsIDogbmV3QWN0aW9uc1tpIC0gMV07XHJcblx0XHRcdGNvbnN0IG5ld0FjdGlvbiA9IHRoaXMuZW5yaWNoQWN0aW9uKHR1cm4uYWN0aW9uc1tpXSwgcHJldmlvdXNBY3Rpb24pO1xyXG5cdFx0XHRuZXdBY3Rpb25zLnB1c2gobmV3QWN0aW9uKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0dXJuLnVwZGF0ZSh7IGFjdGlvbnM6IG5ld0FjdGlvbnMgYXMgcmVhZG9ubHkgQWN0aW9uW10gfSBhcyBUdXJuKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZW5yaWNoQWN0aW9uKGFjdGlvbjogQWN0aW9uLCBwcmV2aW91c0FjdGlvbjogQWN0aW9uKTogQWN0aW9uIHtcclxuXHRcdC8vIERvbid0IHNldCBhbnkgYWN0aXZlIHNwZWxsIGZvciB0aGVzZSBhY3Rpb25zXHJcblx0XHRpZiAodGhpcy5BQ1RJT05TX1RIQVRfUkVTRVRfQUNUSVZFX1NQRUxMLmluZGV4T2YodHlwZW9mIGFjdGlvbikgIT09IC0xKSB7XHJcblx0XHRcdHJldHVybiBhY3Rpb247XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQnkgZGVmYXVsdCwgZG9uJ3Qgc2hvdyBhbnkgYWN0aXZlIHNwZWxsXHJcblx0XHRsZXQgYWN0aXZlU3BlbGw7XHJcblx0XHRpZiAoXHJcblx0XHRcdGFjdGlvbiBpbnN0YW5jZW9mIENhcmRQbGF5ZWRGcm9tSGFuZEFjdGlvbiAmJlxyXG5cdFx0XHRhY3Rpb24uZW50aXRpZXMuZ2V0KGFjdGlvbi5lbnRpdHlJZClcclxuXHRcdFx0Ly8mJiBhY3Rpb24uZW50aXRpZXMuZ2V0KGFjdGlvbi5lbnRpdHlJZCkuZ2V0VGFnKEdhbWVUYWcuQ0FSRFRZUEUpID09PSBDYXJkVHlwZS5TUEVMTFxyXG5cdFx0KSB7XHJcblx0XHRcdGFjdGl2ZVNwZWxsID0gYWN0aW9uLmVudGl0eUlkO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0YWN0aW9uIGluc3RhbmNlb2YgUG93ZXJUYXJnZXRBY3Rpb24gJiZcclxuXHRcdFx0YWN0aW9uLmVudGl0aWVzLmdldChhY3Rpb24ub3JpZ2luSWQpICYmXHJcblx0XHRcdGFjdGlvbi5lbnRpdGllcy5nZXQoYWN0aW9uLm9yaWdpbklkKS5nZXRUYWcoR2FtZVRhZy5DQVJEVFlQRSkgPT09IENhcmRUeXBlLlNQRUxMXHJcblx0XHQpIHtcclxuXHRcdFx0YWN0aXZlU3BlbGwgPSBhY3Rpb24ub3JpZ2luSWQ7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRhY3Rpb24gaW5zdGFuY2VvZiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiAmJlxyXG5cdFx0XHRhY3Rpb24uZW50aXRpZXMuZ2V0KGFjdGlvbi5vcmlnaW5JZCkgJiZcclxuXHRcdFx0YWN0aW9uLmVudGl0aWVzLmdldChhY3Rpb24ub3JpZ2luSWQpLmdldFRhZyhHYW1lVGFnLkNBUkRUWVBFKSA9PT0gQ2FyZFR5cGUuU1BFTExcclxuXHRcdCkge1xyXG5cdFx0XHRhY3RpdmVTcGVsbCA9IGFjdGlvbi5vcmlnaW5JZDtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdGFjdGlvbiBpbnN0YW5jZW9mIENhcmRUYXJnZXRBY3Rpb24gJiZcclxuXHRcdFx0YWN0aW9uLmVudGl0aWVzLmdldChhY3Rpb24ub3JpZ2luSWQpICYmXHJcblx0XHRcdGFjdGlvbi5lbnRpdGllcy5nZXQoYWN0aW9uLm9yaWdpbklkKS5nZXRUYWcoR2FtZVRhZy5DQVJEVFlQRSkgPT09IENhcmRUeXBlLlNQRUxMXHJcblx0XHQpIHtcclxuXHRcdFx0YWN0aXZlU3BlbGwgPSBhY3Rpb24ub3JpZ2luSWQ7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRhY3Rpb24gaW5zdGFuY2VvZiBTdW1tb25BY3Rpb24gJiZcclxuXHRcdFx0YWN0aW9uLmVudGl0aWVzLmdldChhY3Rpb24ub3JpZ2luSWQpICYmXHJcblx0XHRcdGFjdGlvbi5lbnRpdGllcy5nZXQoYWN0aW9uLm9yaWdpbklkKS5nZXRUYWcoR2FtZVRhZy5DQVJEVFlQRSkgPT09IENhcmRUeXBlLlNQRUxMXHJcblx0XHQpIHtcclxuXHRcdFx0YWN0aXZlU3BlbGwgPSBhY3Rpb24ub3JpZ2luSWQ7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRhY3Rpb24gaW5zdGFuY2VvZiBTZWNyZXRSZXZlYWxlZEFjdGlvbiAmJlxyXG5cdFx0XHRhY3Rpb24uZW50aXRpZXMuZ2V0KGFjdGlvbi5lbnRpdHlJZCkgJiZcclxuXHRcdFx0YWN0aW9uLmVudGl0aWVzLmdldChhY3Rpb24uZW50aXR5SWQpLmdldFRhZyhHYW1lVGFnLkNBUkRUWVBFKSA9PT0gQ2FyZFR5cGUuU1BFTExcclxuXHRcdCkge1xyXG5cdFx0XHRhY3RpdmVTcGVsbCA9IGFjdGlvbi5lbnRpdHlJZDtcclxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24uYWN0aXZlU3BlbGwpIHtcclxuXHRcdFx0YWN0aXZlU3BlbGwgPSBwcmV2aW91c0FjdGlvbi5hY3RpdmVTcGVsbDtcclxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQ2FyZERyYXdBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24uYWN0aXZlU3BlbGwpIHtcclxuXHRcdFx0YWN0aXZlU3BlbGwgPSBwcmV2aW91c0FjdGlvbi5hY3RpdmVTcGVsbDtcclxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uIGluc3RhbmNlb2YgRGFtYWdlQWN0aW9uICYmIHByZXZpb3VzQWN0aW9uICYmIHByZXZpb3VzQWN0aW9uLmFjdGl2ZVNwZWxsKSB7XHJcblx0XHRcdGFjdGl2ZVNwZWxsID0gcHJldmlvdXNBY3Rpb24uYWN0aXZlU3BlbGw7XHJcblx0XHR9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEhlYWxpbmdBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24uYWN0aXZlU3BlbGwpIHtcclxuXHRcdFx0YWN0aXZlU3BlbGwgPSBwcmV2aW91c0FjdGlvbi5hY3RpdmVTcGVsbDtcclxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uIGluc3RhbmNlb2YgUG93ZXJUYXJnZXRBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24gJiYgcHJldmlvdXNBY3Rpb24uYWN0aXZlU3BlbGwpIHtcclxuXHRcdFx0YWN0aXZlU3BlbGwgPSBwcmV2aW91c0FjdGlvbi5hY3RpdmVTcGVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYWN0aXZlU3BlbGwpIHtcclxuXHRcdFx0Ly8gLy8gLy8gY29uc29sZS5sb2coJ1VwZGF0aW5nIGFjdGl2ZSBzcGVsbCcsIGFjdGl2ZVNwZWxsKTtcclxuXHRcdFx0cmV0dXJuIGFjdGlvbi51cGRhdGVBY3Rpb24oeyBhY3RpdmVTcGVsbCB9IGFzIEFjdGlvbik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYWN0aW9uO1xyXG5cdH1cclxufVxyXG4iXX0=