code:
/**
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.PersonalAttention.slaveReport = function(slave) {
	const el = new DocumentFragment();
	if (V.personalAttention.task !== PersonalAttention.TRAINING) {
		return el; // not training any slaves this week
	}
	const pa = V.personalAttention.slaves.find((s) => s.ID === slave.ID);
	if (!pa) {
		return el; // not training this slave this week
	}

	// trying to train this slave this week
	const {
		He, His,
		he, his, him, himself, wife, girl, hers,
	} = getPronouns(slave);
	const {womenP} = getPronouns(V.PC).appendSuffix("P");
	let r = [];

	if (onBedRest(V.PC, true)) {
		r.push(`You`);
		if (pa.objective === "health") {
			r.push(`wanted to care for`);
		} else if (pa.objective === "ravish") {
			r.push(`really wanted to fuck`);
		} else if (pa.objective === "torture") {
			r.push(`wanted to torment`);
		} else {
			r.push(`wanted to train`);
		}
		r.push(App.UI.DOM.makeElement("span", slave.slaveName, ["slave-name"]));
		r.push(`this week, but you're not feeling up to it.`);
		App.Events.addNode(el, r, "div", "indent");
		return el;
	} else if (["combat training", "spar"].includes(pa.objective) && (!canWalk(V.PC) || !hasAnyArms(V.PC) || !hasAnyArms(slave) || !canWalk(slave) || slave.fetish === "mindbroken" || !canSee(slave))) {
		r.push(`As much as you'd like to train`);
		r.push(App.UI.DOM.makeElement("span", slave.slaveName, ["slave-name"]));
		r.push(`this week,`);
		if (!canWalk(V.PC)) {
			r.push(`you won't be able to until you're back on your feet.`);
			if (!hasBothLegs(V.PC) || V.PC.physicalImpairment > 1) {
				r.push(`Since that will never happen,`);
				r.push(App.UI.DOM.makeElement("span", `you'll focus on building ${his} devotion for now.`, "yellow"));
				pa.objective = "build devotion";
			}
		} else if (!hasAnyArms(V.PC)) {
			r.push(`you wouldn't be able to without a helping hand, and then it wouldn't really be you training ${him}, would it?`);
			r.push(App.UI.DOM.makeElement("span", `${His} assignment has defaulted to fostering devotion.`, "yellow"));
			pa.objective = "build devotion";
		} else if (!canWalk(slave)) {
			r.push(`you won't be able to until you find a way to get ${him} back on ${his} feet;`);
			r.push(App.UI.DOM.makeElement("span", `${his} assignment has defaulted to fostering devotion.`, "yellow"));
			pa.objective = "build devotion";
		} else {
			r.push(`${he} lacks the ability to fight back;`);
			r.push(App.UI.DOM.makeElement("span", `${his} assignment has defaulted to fostering devotion.`, "yellow"));
			pa.objective = "build devotion";
		}
		App.Events.addNode(el, r, "div", "indent");
		return el;
	}

	// actually training this slave
	let currentSlaveValue = slave.training < 100 ? 0.2 : 0.5;
	let coloredText;
	let trainingEfficiency;
	let vaginalTrainingEfficiency;
	let analTrainingEfficiency;
	let seed;
	let skillgainS = false;
	let skillgainP = false;
	let cumTotal = 0;
	let milkTotal = 0;
	let oldSkill;
	const hindranceMod = isHinderedDegree(V.PC);
	const nymphoMod = isPlayerHorny(V.PC) ? .75 : 1;
	if (pa.objective === "health") {
		r.push(App.UI.DOM.makeElement("span", `You care for`, ["bold"]));
	} else if (pa.objective === "spar") {
		r.push(App.UI.DOM.makeElement("span", `You train with`, ["bold"]));
	} else {
		r.push(App.UI.DOM.makeElement("span", `You train`, ["bold"]));
	}
	r.push(App.UI.DOM.makeElement("span", slave.slaveName, ["slave-name"]));
	r.push(`when ${he} isn't otherwise occupied.`);
	slave.training = Math.clamp(slave.training, 0, 100);
	slave.training += 80 - (slave.intelligence + slave.intelligenceImplant) / 5 + ((slave.devotion + slave.trust) / 10);
	if ((V.PC.skill.slaving >= 100) && V.personalAttention.slaves.length === 1) {
		slave.training += 20; // negate bonus when splitting focus among slaves
	}
	switch (pa.objective) {
		case "build devotion":
			// split devotion based off horny. Some slaves are not going to take it well.
			slave.devotion += 6;
			if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish === Fetish.SUBMISSIVE) {
				r.push(`Since ${slave.slaveName} is a submissive, you`);
				r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, ["hotpink"]));
				r.push(`by indulging ${his} need to be dominated. Already smiling to ${himself}, ${he} changes into bondage gear that`);
				if (canSee(slave)) {
					r.push(`blinds ${him},`);
				} else {
					r.push(`covers ${his} face,`);
				}
				if (hasAnyArms(slave)) {
					r.push(`forces ${his} ${(hasBothArms(slave)) ? `arms` : `arm`} behind ${his} back,`);
				}
				if (slave.vagina <= 0 && slave.anus <= 0) {
					r.push(`and`);
				}
				r.push(`forces ${him} to present ${his} breasts`);
				if (slave.vagina > 0 || slave.anus > 0) {
					r.push(`uncomfortably, and forces a painfully large dildo up ${his}`);
					if (slave.vagina > 0) {
						r.push(`vagina${(slave.anus > 0) ? ` and anus` : ``}.`);
					} else if (slave.anus > 0) {
						r.push(`anus.`);
					}
				} else {
					r.push(`uncomfortably.`);
				}
				r.push(`Thus attired, ${he} is forced to serve you in whatever petty ways occur to you. ${He} holds your tablet for you on ${his} upthrust ass as you work, holds a thin beverage glass for you in ${his} upturned mouth when you eat, and lies still so you can use ${his} tits as a pillow whenever you recline. ${He} loves it.`);
			} else if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish === "cumslut" && V.PC.dick !== 0) {
				r.push(`Since ${slave.slaveName} has an unusual taste for oral sex and cum, you`);
				r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, ["hotpink"]));
				r.push(`by indulging ${him}. You allow ${him} to spend ${his} free time following you around. ${He} is permitted to act as your private cum receptacle. If you use another slave, you usually pull out and give ${his} smiling face a facial. When you come inside another slave instead, ${slave.slaveName} is allowed to get your cum anyway, regardless of whether that requires the other slave to spit it into ${his} mouth or ${slave.slaveName} to suck it out of the other slave's vagina or rectum. Either way, ${he} rubs ${his} stomach happily after ${he}'s swallowed it down.`);
				seX(slave, "oral", V.PC, "penetrative", 20);
			} else if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish === "boobs") {
				r.push(`Since ${slave.slaveName} has an unusual taste for having ${his} tits fondled, you`);
				r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, ["hotpink"]));
				r.push(`by indulging ${him}. You keep ${him} near you as a sort of living stress ball. Whenever you have a free hand, whether you're conducting business or buttfucking another slave, you reach over and play with ${him}. ${He} sometimes masturbates while you massage ${his} breasts and`);
				if (slave.nipples === "fuckable") {
					r.push(`finger`);
				} else {
					r.push(`pinch`);
				}
				r.push(`${his} nipples, but often ${he} doesn't even need to.`);
				seX(slave, "mammary", V.PC, "penetrative", 10);
			} else if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish === "pregnancy") {
				r.push(`Since ${slave.slaveName} has an unusual taste for big pregnant bellies, you`);
				r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, ["hotpink"]));
				r.push(`by indulging ${him}. You`);
				if (isItemAccessible.entry("a small empathy belly", "bellyAccessory") && slave.belly < 1500 && slave.weight < 130) {
					r.push(`strap an enormous sympathy belly onto ${him} and`);
				} else if (slave.belly < 1500) {
					r.push(`strap a pillow around ${his} middle, give ${him} an oversized shirt and`);
				}
				r.push(`keep ${him} near you as a sort of living stress ball. Whenever you have a free hand, whether you're conducting business or buttfucking another slave, you reach over and rub ${his} dome of a belly for luck. Occasionally you pay more attention to ${him}, making sure to fondle ${his} rounded middle as you feel up ${his} motherly body. ${He} sometimes masturbates when you aren't groping ${him}, enjoying ${his} gravid figure, but often ${he} doesn't even need to.`);
			} else if (
				slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish === "humiliation" &&
					(
						(canDoVaginal(slave) && slave.vagina > 0) ||
						(canDoAnal(slave) && slave.anus > 0)
					)
			) {
				r.push(`Since ${slave.slaveName} has an unusual sexuality, you`);
				r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, ["hotpink"]));
				r.push(`by indulging ${his} perversions. Since ${he}'s an absolute slut for humiliation, you let ${him} whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you bring ${him} on a leash and fuck ${him} in public. ${He} comes harder than ever when you push ${his} naked body up against the wall of a crowded public arcology elevator and molest ${him}.`);
				seX(slave, "oral", V.PC, "penetrative", 4);
				r.push(VCheck.Both(slave, 4, 2));
			} else if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish === "humiliation") {
				r.push(`Since ${slave.slaveName} has an unusual sexuality, you`);
				r.push(App.UI.DOM.makeElement("span", `build ${his} devotion to you`, ["hotpink"]));
				r.push(`by indulging ${his} perversions. Since ${he}'s an absolute slut for humiliation, you let ${him} whore around inside the special camera room whenever possible. When you're going out and feel like putting on a show, you`);
				if (hasBothLegs(slave)) {
					r.push(`bring ${him} on a leash and have ${him} service you in public. ${He} comes harder than ever when you push ${him} down on ${his} knees in a crowded public arcology elevator and facefuck ${him} while ${he}`);
				} else {
					r.push(`carry ${him} out and have ${him} service you in public. ${He} comes harder than ever when you push ${his} face to your`);
					if (V.PC.dick !== 0) {
						r.push(`dick`);
					} else {
						r.push(`pussy`);
					}
					r.push(`in a crowded public arcology elevator and facefuck ${him} while ${he}`);
				}
				if (hasAnyArms(slave)) {
					r.push(`masturbates fervently.`);
				} else {
					r.push(`tries ${his} hardest to masturbate.`);
				}
				seX(slave, "oral", V.PC, "penetrative", 8);
			} else if ((slave.anus === 3) && (slave.vagina === 3) && slave.geneMods.rapidCellGrowth !== 1) {
				r.push(`${slave.slaveName} is a stretched-out, well-traveled slut. Some like their holes loose, but most prefer cunts and butts that don't make sloppy noises when fucked. So, you spend some quality care time with ${him}, carefully massaging ${his} abused holes with oils and lotions. ${He} comes, of course, but ${his} pussy and asshole do benefit from the treatment. You allow ${him} to service you with ${his} mouth to avoid spoiling your work right away. Afterward, ${he}`);
				if (hasAnyArms(slave)) {
					r.push(App.UI.DOM.makeElement("span", `hugs you and gives you a kiss.`, ["hotpink"]));
				} else {
					r.push(App.UI.DOM.makeElement("span", `gives you a kiss and tries to hug you,`, ["hotpink"]));
					r.push(`but without arms, all ${he} manages is a sort of nuzzle.`);
				}
				slave.vagina--;
				slave.anus--;
				seX(slave, "oral", V.PC, "penetrative", 5);
			} else if (slave.vagina === 0) {
				r.push(`${slave.slaveName}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is`);
				r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, ["hotpink"]));
				r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} virginity. You gently stimulate ${his}`);
				if (slave.dick) {
					r.push(`dick`);
				} else if (slave.clit) {
					r.push(`clit`);
				} else {
					r.push(`nipples`);
				}
				if (slave.rules.release.master) {
					r.push(`while ${he} sucks you off, bringing ${him} to a moaning climax as you cum in ${his} mouth.`);
					seX(slave, "oral", V.PC, "penetrative", 5);
				} else {
					r.push(`as you play with ${his} body, subconsciously causing ${him} to become more accustomed to your presence.`);
				}
			} else if (slave.anus === 0 && slave.vagina < 0) {
				// TODO: not sure if the PC has to have either a dick or a vagina... can PCs be nulls?
				if (slave.rules.release.master) {
					r.push(`You haven't decided to take ${slave.slaveName}'s anus yet, so you have ${him} ${V.PC.dick > 0 ? `suck you off` : `eat you out`} and allow ${him} to play with ${himself} while ${he} does. You stroke ${his} hair, play with ${his} tits, and generally pamper ${him} while ${he} orally services you. ${He}'s accustomed to the slave life, so the experience of affection is novel for ${him} and ${he} is`);
					r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, ["hotpink"]));
					r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} virgin hole.`);
					seX(slave, "oral", V.PC, "penetrative", 5);
				} else {
					r.push(`You haven't decided to take ${slave.slaveName}'s anus yet, so you have ${him} ${V.PC.dick > 0 ? `jerk you off` : `play with your pussy`} and allow ${him} to play with ${himself} while ${he} does. You stroke ${his} hair, play with ${his} tits, and generally pamper ${him} while ${he} services you. ${He}'s accustomed to the slave life, so the experience of affection is novel for ${him} and ${he} is`);
					r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, ["hotpink"]));
					r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} virgin hole.`);
				}
			} else if (slave.anus === 0 && slave.vagina > 0 && canDoVaginal(slave)) {
				r.push(`You fuck ${slave.slaveName}, of course, but you do it slowly and lovingly, and keep well clear of ${his} still-virgin asshole in the process. ${He}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is affectingly`);
				r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, ["hotpink"]));
				r.push(`${He} isn't used to being kissed, teased and massaged before ${he} takes cock. Slaves are usually used without regard to their orgasm, so ${he}'s also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with ${his} own. ${He}'s a puddle on the sheets under your hands.`);
				seX(slave, "oral", V.PC, "penetrative", 4);
				r.push(VCheck.Vaginal(slave, 4));
			} else if (slave.anus === 0) {
				r.push(`${slave.slaveName}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is`);
				r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, ["hotpink"]));
				r.push(`${He} isn't used to being kissed, teased and massaged. ${He}'s almost disappointed when it becomes clear that you don't mean to take ${his} anal virginity. You gently stimulate ${his}`);
				if (slave.dick) {
					r.push(`dick`);
				} else if (slave.clit) {
					r.push(`clit`);
				} else {
					r.push(`nipples`);
				}
				r.push(`while ${he} sucks you off, bringing ${him} to a moaning climax as you cum in ${his} mouth.`);
				seX(slave, "oral", V.PC, "penetrative", 5);
			} else {
				r.push(`You fuck ${slave.slaveName}, of course, but you do it slowly and lovingly. ${He}'s accustomed to the slave life, so the experience is almost novel for ${him} and ${he} is affectingly`);
				r.push(App.UI.DOM.makeElement("span", `touched by the affection.`, ["hotpink"]));
				r.push(`${He} isn't used to being kissed, teased and massaged before ${he} takes cock. Slaves are usually used without regard to their orgasm, so ${he}'s also surprised and gratified when you make meticulous efforts to delay your own orgasm so it can coincide with ${his} own. ${He}'s a puddle on the sheets under your hands.`);
				seX(slave, "oral", V.PC, "penetrative", 4);
				if (slave.vagina === 0) {
					r.push(VCheck.Vaginal(slave, 4));
				} else {
					r.push(VCheck.Both(slave, 4, 2));
				}
			}
			if (V.PC.skill.slaving >= 100) {
				r.push(`Your`);
				r.push(App.UI.DOM.makeElement("span", `slave training experience`, ["skill", "player"]));
				r.push(`allows you to`);
				r.push(App.UI.DOM.makeElement("span", `bend ${him} to your will`, ["hotpink"]));
				r.push(`more quickly without provoking resistance.`);
				slave.devotion += 1;
			}
			if (slave.trust > 10) {
				r.push(`Spending time with you`);
				r.push(App.UI.DOM.makeElement("span", `builds ${his} trust in ${his} ${getWrittenTitle(slave)}.`, "mediumaquamarine"));
				slave.trust += 4;
			} else {
				r.push(`Spending time with you`);
				r.push(App.UI.DOM.makeElement("span", `reduces ${his} fear towards you.`, "mediumaquamarine"));
				slave.trust += 6;
			}
			currentSlaveValue = 0.2;
			slave.training = 0;
			break;
		case "health":
			if (slave.relationship === -3 && slave.fetish === Fetish.MINDBROKEN) {
				r.push(`Since ${slave.slaveName} is your ${wife} and not all there, you keep ${him} under a watchful eye to make sure no harm comes to the broken ${girl}. ${He} almost seems in better spirits under your care, not that it will matter in an hour or two.`);
				if (slave.kindness) {
					slave.kindness++;
				} else {
					slave.kindness = 1;
				}
			}
			if (slave.health.condition < 100) {
				r.push(`Your close and expert attention improves ${his} health in a way drug treatment or mere medical intervention cannot.`);
				r.push(App.UI.DOM.makeElement("span", `${His} health has improved.`, ["health", "inc"]));
				improveCondition(slave, 10);
			}
			if (slave.health.tired > 10) {
				r.push(`You watch over ${him} as ${he} sleeps, assuring`);
				r.push(App.UI.DOM.makeElement("span", `a proper night's rest.`, ["health", "inc"]));
				slave.health.tired = Math.clamp(slave.health.tired - 10, 0, 1000);
			}
			if ((slave.anus >= 3 || slave.vagina >= 3) && slave.geneMods.rapidCellGrowth !== 1) {
				r.push(`${slave.slaveName} is a veteran sex slave and has seen hard use. Tightening up a slave is difficult, but with close supervision and attention it can be done. You and your other slaves carefully apply injections, creams, and massage, and ${his} other work is carefully managed to reduce wear and tear.`);
				if (slave.anus >= 3 && (random(1, 100)) > 50) {
					r.push(App.UI.DOM.makeElement("span", `${His} anus has recovered and is now merely loose.`, "orange"));
					slave.anus--;
				} else if (slave.anus >= 3) {
					r.push(`${His} distended anus does not improve this week.`);
				}
				if (slave.vagina >= 3 && random(1, 100) > 50) {
					r.push(App.UI.DOM.makeElement("span", `${His} pussy has tightened.`, "orange"));
					slave.vagina--;
				} else if (slave.vagina >= 3) {
					r.push(`${His} loose pussy does not recover this week.`);
				}
			}
			currentSlaveValue = 0.1;
			slave.training = 0;
			break;
		case "soften behavioral flaw":
			if (slave.behavioralFlaw === "none") {
				r.push(`${slave.slaveName} got over ${his} behavioral flaw without you;`);
				coloredText = [];
				coloredText.push(`${his} training assignment has defaulted to`);
				if (App.Data.misc.paraphiliaList.includes(slave.sexualFlaw) && slave.sexualFlaw !== "none") {
					if (slave.devotion <= 20 && slave.trust >= -20) {
						coloredText.push(`breaking ${his} will.`);
						pa.objective = "break will";
					} else {
						coloredText.push(`fostering devotion.`);
						pa.objective = "build devotion";
					}
				} else {
					coloredText.push(`softening ${his} sexual flaw.`);
					pa.objective = "soften sexual flaw";
				}
				r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow"));
			} else {
				if (slave.behavioralFlaw === "arrogant") {
					r.push(`${slave.slaveName} thinks ${he}'s better than everyone else. ${He} has some basis for a high opinion of ${himself}; otherwise you wouldn't be bothering with ${him}. You do your best to maintain ${his} belief that ${he} has something special to offer while training ${him} to offer it to you without objection.`);
				} else if (slave.behavioralFlaw === "bitchy") {
					r.push(`${slave.slaveName} always has a cutting remark ready. Some of them are actually pretty good, and you'd prefer to keep ${his} cutting wit intact. You strike a careful balance with ${him}, punishing the wrong remark at the wrong time, but rewarding appropriately biting comments.`);
				} else if (slave.behavioralFlaw === "odd") {
					r.push(`${slave.slaveName} is odd. ${He}'s usually annoying, but on occasion ${his} oddities can produce great comic relief. You strike a careful balance with ${him}, punishing ${him} when ${he} irritates you, but allowing and even rewarding harmless little idiosyncrasies.`);
				} else if (slave.behavioralFlaw === "hates men") {
					r.push(`${slave.slaveName} does not like men. ${He} desperately needs social contact, though, so you encourage ${him} to rely on women to address ${his} emotional needs. This is easy, since`);
					if (V.PC.vagina !== -1) {
						r.push(`you've got a pussy yourself.`);
					} else {
						r.push(`there are several readily available.`);
					}
				} else if (slave.behavioralFlaw === "hates women") {
					r.push(`${slave.slaveName} does not like girls. ${He} desperately needs social contact, though, so you encourage ${him} to rely on men to address ${his} emotional needs. This is easy, since`);
					if (V.PC.dick === 0) {
						r.push(`there are several readily available.`);
					} else {
						r.push(`you've got a cock yourself.`);
					}
				} else if (slave.behavioralFlaw === "anorexic") {
					r.push(`${slave.slaveName} suffers from anorexia. You work with ${him} patiently, applying the very best in modern therapy for this troubling condition. It's usually a product of poor self esteem, and you do your best to build ${hers} up without diminishing ${his} submission to you.`);
				} else if (slave.behavioralFlaw === "gluttonous") {
					r.push(`${slave.slaveName}'s diet is already closely controlled, but the impulse to overeat is strong in ${him} and like most gluttons ${he} manages to be quite cunning. You take a hard line with ${him}, and do your best to replace ${his} addiction to the endorphin release of eating with an addiction to the endorphin release of exercise.`);
				} else if (slave.behavioralFlaw === "liberated") {
					r.push(`${slave.slaveName} can express a decent argument for why it's wrong to use ${him} as a sex slave. With a combination of rote training, discussion, and reinforcement, you do your best to turn this into a sincere belief in the moral rightness of slavery.`);
				} else if (slave.behavioralFlaw === "devout") {
					r.push(`${slave.slaveName} remains devoted to an old world faith that serves ${him} as a reservoir of mental resilience. Like all such beliefs, ${hers} has certain sexual elements; you amuse yourself by forcing ${him} to break them, and rewarding ${him} generously when ${he} does.`);
				}
				if (slave.training < 100) {
					r.push(`You make progress, but ${he}'s the same at the end of the week.`);
				} else {
					slave.training = 0;
					r.push(`By the end of the week,`);
					r.push(App.UI.DOM.makeElement("span", `you resolve ${his} flaw into something special.`, ["green"]));
					r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, ["hotpink"]));
					SoftenBehavioralFlaw(slave);
					slave.devotion += 4;
				}
				if (slave.fetishKnown !== 1) {
					if (slave.fetish === Fetish.SUBMISSIVE) {
						r.push(`${He} really takes to your close attention;`);
						r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, ["pink"]));
						slave.fetishKnown = 1;
					} else if (slave.fetish === "cumslut") {
						r.push(`While you're giving ${him} personal attention, you discover by chance that`);
						r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, ["pink"]));
						slave.fetishKnown = 1;
					} else if (slave.fetish === "masochist") {
						r.push(`While you're giving ${him} personal correction, you discover by chance that`);
						r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, ["pink"]));
						slave.fetishKnown = 1;
					} else if (slave.fetish === "humiliation") {
						r.push(`While you're giving ${him} personal attention in public, you discover by chance that`);
						r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, ["pink"]));
						slave.fetishKnown = 1;
					}
				}
				if (slave.behavioralFlaw === "none") {
					r.push(`With ${his} behavioral flaw softened,`);
					coloredText = [];
					r.push(`${his} training assignment has defaulted to`);
					if (slave.sexualFlaw === "none") {
						if (slave.devotion <= 20 && slave.trust >= -20) {
							coloredText.push(`breaking ${his} will.`);
							pa.objective = "break will";
						} else {
							coloredText.push(`fostering devotion.`);
							pa.objective = "build devotion";
						}
					} else {
						coloredText.push(`softening ${his} sexual flaw.`);
						pa.objective = "soften sexual flaw";
					}
					r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow"));
				}
			}
			break;
		case "soften sexual flaw":
			if (slave.sexualFlaw === "none") {
				r.push(`${slave.slaveName} got over ${his} sexual flaw without you,`);
				coloredText = [];
				coloredText.push(`${his} training assignment has defaulted to`);
				if (slave.behavioralFlaw === "none") {
					if (slave.devotion <= 20 && slave.trust >= -20) {
						coloredText.push(`breaking ${his} will.`);
						pa.objective = "break will";
					} else {
						coloredText.push(`fostering devotion.`);
						pa.objective = "build devotion";
					}
				} else {
					coloredText.push(`softening ${his} behavioral flaw.`);
					pa.objective = "soften behavioral flaw";
				}
				r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow"));
			} else {
				r.push(`${slave.slaveName}`);
				switch (slave.sexualFlaw) {
					case "hates oral":
						r.push(`has a powerful gag reflex. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough facefuck without losing the fun aspects of forcing a slave to swallow a phallus, like the struggles, the gagging, and the tears.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
						break;
					case "hates anal":
						r.push(`does not like it up the butt. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears.`);
						if (canDoAnal(slave)) {
							r.push(VCheck.Anal(slave, 10));
						} else {
							r.push(`The inability to actually penetrate ${his} ass hinders your efforts, however.`);
							slave.training -= 20; // more difficult training
						}
						break;
					case "hates penetration":
						if (slave.vagina > -1 && canDoVaginal(slave)) {
							r.push(`does not like sex. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a hard pounding without losing the fun aspects of forced sex, like the struggles, the whining, and the tears.`);
							r.push(VCheck.Vaginal(slave, 10));
						} else if (canDoAnal(slave)) {
							r.push(`does not like it up the butt. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough buttfuck without losing the fun aspects of anal rape, like the struggles, the whining, and the tears.`);
							r.push(VCheck.Anal(slave, 10));
						} else {
							r.push(`does not dicks in ${his} mouth. Though it would be simpler to train ${him} out of it, you do your best to train ${him} to safely take a rough facefuck without losing the fun aspects of forcing a slave to swallow a phallus, like the struggles, the gagging, and the tears.`);
							seX(slave, "oral", V.PC, "penetrative", 10);
						}
						break;
					case "apathetic":
						r.push(`doesn't put out much effort when having sex. You do your best to redirect this apathy into caring for ${his} partners; since ${he} obviously doesn't think much of ${himself}, ${he} can spare the effort.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
						break;
					case "crude":
						r.push(`does not pay enough attention to standards when having sex, leading to crude comments and unsexy noises. To remedy this, you have ${him} give you oral regularly: a sacrifice, but you make sacrifices for your slaves' improvement. Oral sex can be difficult to make elegant, but you work with ${him} to make it as pretty as possible, even when you require ${him} to apply ${his} mouth to some of the less common erogenous zones. You do your best to retain ${his} sexual openness while making ${him} more sexually presentable.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
						break;
					case "judgemental":
						r.push(`has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to ${his} pretensions of standards. You do your best to train ${him} to perform regardless of ${his} partners' endowments, aiming for a delicate balance that will allow ${him} to get off with anyone while permitting ${him} to retain and even build on ${his} appetite for big dicks. You permit ${him} to achieve release only when ${he}'s done well with`);
						if (V.PC.dick > 3) {
							r.push(`your thick cock`);
						} else {
							r.push(`a fat dildo`);
						}
						if (slave.vagina > 0 && canDoVaginal(slave)) {
							r.push(`lodged up ${his} cunt.`);
							r.push(VCheck.Vaginal(slave, 10));
						} else if (slave.anus > 0 && canDoAnal(slave)) {
							r.push(`lodged up ${his} butt.`);
							r.push(VCheck.Anal(slave, 10));
						} else {
							r.push(`down ${his} throat.`);
							seX(slave, "oral", V.PC, "penetrative", 10);
						}
						break;
					case "shamefast":
						r.push(`is shamefast. You do your best to train ${him} out of this, but carefully retain the essential core of embarrassment, aiming for a slave that can use ${his} body to titillate the viewer and then offer an authentic blush at ${himself}.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
						break;
					case "idealistic":
						r.push(`still sees sex in a naïve light, hoping to be romanced, teased to arousal, and asked permission. Training ${him} directly out of this would shatter the poor ${girl}'s world, so you work with ${him} carefully, doing your best to keep sex special for ${him}.`);
						break;
					case "repressed":
						r.push(`is repressed. You strike a delicate balance with ${him}, doing your best to train ${him} to fuck as a sex slave should, but trying to retain the rush of doing the forbidden that makes ${him} flush, shiver, and moan.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
						break;
					case "abusive":
					case "anal addict":
					case "attention whore":
					case "breast growth":
					case "breeder":
					case "cum addict":
					case "malicious":
					case "neglectful":
					case "self hating":
						r.push(`has a paraphilia. Typical methods will have no effect on this kind of flaw.`);
						slave.training = 0;
						coloredText = [];
						coloredText.push(`${His} training assignment has defaulted to`);
						if (slave.devotion <= 20 && slave.trust >= -20) {
							coloredText.push(`breaking ${his} will.`);
							pa.objective = "break will";
						} else {
							coloredText.push(`fostering devotion.`);
							pa.objective = "build devotion";
						}
						r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow"));
						break;
					default:
						r.push(`has something. You should probably report this as nobody knows what is currently happening. ${His} flaw was supposed to be ${slave.sexualFlaw}.`);
				}
				if (slave.training < 100) {
					r.push(`You make progress, but ${he}'s the same at the end of the week.`);
				} else {
					slave.training = 0;
					r.push(`By the end of the week,`);
					r.push(App.UI.DOM.makeElement("span", `you resolve ${his} flaw into something special.`, ["green"]));
					r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, ["hotpink"]));
					SoftenSexualFlaw(slave);
					slave.devotion += 4;
				}
				if (slave.fetishKnown !== 1) {
					if (slave.fetish === Fetish.SUBMISSIVE) {
						r.push(`${He} really takes to your close attention;`);
						r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, ["pink"]));
						slave.fetishKnown = 1;
					} else if (slave.fetish === "cumslut") {
						r.push(`While you're giving ${him} personal attention, you discover by chance that`);
						r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, ["pink"]));
						slave.fetishKnown = 1;
					} else if (slave.fetish === "masochist") {
						r.push(`While you're giving ${him} personal correction, you discover by chance that`);
						r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, ["pink"]));
						slave.fetishKnown = 1;
					} else if (slave.fetish === "humiliation") {
						r.push(`While you're giving ${him} personal attention in public, you discover by chance that`);
						r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, ["pink"]));
						slave.fetishKnown = 1;
					}
				}
				if (slave.sexualFlaw === "none") {
					r.push(`With ${his} sexual flaw softened,`);
					coloredText = [];
					r.push(`${his} training assignment has defaulted to`);
					if (slave.behavioralFlaw === "none") {
						if (slave.devotion <= 20 && slave.trust >= -20) {
							coloredText.push(`breaking ${his} will.`);
							pa.objective = "break will";
						} else {
							coloredText.push(`fostering devotion.`);
							pa.objective = "build devotion";
						}
					} else {
						coloredText.push(`softening ${his} behavioral flaw.`);
						pa.objective = "soften behavioral flaw";
					}
					r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow"));
				}
			}
			break;
		case "learn skills":
			trainingEfficiency = 10 + Math.trunc(slave.devotion / 30) + Math.floor(slave.intelligence / 32);
			if (isPCCareerInCategory("escort")) {
				r.push(`You are well-versed in sexual techniques and how to employ them, giving you an edge in teaching ${him}.`);
				trainingEfficiency += 10;
			}
			if (slave.vagina >= 0) {
				if (!canDoVaginal(slave) && slave.vagina === 0) {
					vaginalTrainingEfficiency = Math.trunc(trainingEfficiency / 4);
				} else if (slave.vagina === 0 || !canDoVaginal(slave)) {
					vaginalTrainingEfficiency = Math.trunc(trainingEfficiency / 2);
				}
			}
			if (!canDoAnal(slave) && slave.anus === 0) {
				analTrainingEfficiency = Math.trunc(trainingEfficiency / 4);
			} else if (slave.anus === 0 || !canDoAnal(slave)) {
				analTrainingEfficiency = Math.trunc(trainingEfficiency / 2);
			}
			if (slave.devotion > 50) {
				r.push(`${He}'s devoted to you, making sexual training much easier.`);
			} else if (slave.devotion > 20) {
				r.push(`${He}'s accepted ${his} place as a sex slave, making sexual training easier.`);
			} else if (slave.devotion < -20) {
				r.push(`${He}'s unhappy being a sex slave, making sexual training harder.`);
			}
			if (slave.intelligence + slave.intelligenceImplant > 15) {
				r.push(`${His} intelligence allows ${him} to absorb ${his} lessons quickly.`);
			} else if (slave.intelligence + slave.intelligenceImplant < -15) {
				r.push(`${His} stupidity makes ${him} absorb ${his} lessons slowly.`);
			}
			if (slave.skill.oral <= 10) {
				r.push(`Since ${he}'s orally unskilled, you start with ${his} mouth. ${He}`);
				if (V.PC.dick !== 0) {
					r.push(`sucks your dick,`);
				} else {
					r.push(`eats you out,`);
				}
				r.push(`of course, but ${his} training is more creative than just that. You give ${him}`);
				if (canTaste(slave)) {
					r.push(`delicious`);
				} else {
					r.push(`sugary`);
				}
				r.push(`hard candies to suck and feed ${him} phallic fruits and vegetables that ${he} must deepthroat before ${he} can eat. As ${his} skill improves, ${he} wears a gag with an inward-facing dildo, which is swapped out for a bigger size every so often. You only let ${him} orgasm when ${he}'s sucking, and before long ${he}'s associating giving someone oral pleasure with experiencing pleasure ${himself}.`);
				r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('oral', slave, trainingEfficiency));
			} else if (slave.skill.vaginal <= 10 && slave.vagina > 0 && canDoVaginal(slave)) {
				r.push(`Since ${he}'s vaginally unskilled, and not a virgin, you start with ${his} pussy.`);
				r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency));
			} else if (slave.skill.anal <= 10 && slave.anus > 0 && canDoAnal(slave)) {
				r.push(`Since ${he}'s anally unskilled, and not an anal virgin, you start with ${his} ass.`);
				r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('anal', slave, trainingEfficiency));
			} else if (slave.skill.oral <= 30) {
				r.push(`Since ${he}'s sexually experienced, you work with ${him} on the finer points of oral sex.`);
				r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('oral', slave, trainingEfficiency));
			} else if (slave.skill.vaginal <= 30 && slave.vagina > 0 && canDoVaginal(slave)) {
				r.push(`Since ${he}'s sexually experienced, you work with ${him} on the finer points of penetrative sex. ${He} can already fuck pretty well, but ${his} muscular control could be improved. ${He} works ${his} Kegel muscles all week, using fingers, dildos, and your`);
				if (V.PC.dick === 0) {
					r.push(`strap-on`);
				} else {
					r.push(`cock`);
				}
				r.push(`as training tools. ${He} becomes expert enough that ${he} is able to make you cum without any thrusting at all by you or any riding by ${him}; ${he} just flexes ${his} muscles enough to`);
				if (V.PC.dick === 0) {
					r.push(`grind the fake phallus back against your cunt.`);
				} else {
					r.push(`stimulate you.`);
				}
				r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency));
			} else if (slave.skill.anal <= 30 && slave.anus > 0 && canDoAnal(slave)) {
				r.push(`Since ${he}'s anally experienced, you work with ${him} on the finer points of penetrative sex. ${He} can already take it up ${his} ass, but ${his} muscular control could be improved. ${He} works ${his} Kegel muscles and anal sphincter all week, using fingers, dildos, and your`);
				if (V.PC.dick === 0) {
					r.push(`strap-on`);
				} else {
					r.push(`cock`);
				}
				r.push(`as training tools. ${He} becomes expert enough that ${he} is able to make you cum without any thrusting at all by you or any riding by ${him}; ${he} just flexes ${his} muscles enough to`);
				if (V.PC.dick === 0) {
					r.push(`squeeze the fake phallus.`);
				} else {
					r.push(`stimulate you.`);
				}
				r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('anal', slave, trainingEfficiency));
			} else if (slave.skill.vaginal <= 10 && slave.vagina >= 0) {
				r.push(`Since ${he}'s vaginally unskilled,`);
				if (slave.vagina === 0 && !canDoVaginal(slave)) {
					r.push(`in chastity, and a virgin,`);
				} else if (slave.vagina === 0) {
					r.push(`and a virgin,`);
				} else {
					r.push(`and in chastity,`);
				}
				r.push(`you explain the basics of sex to ${him}.`);
				r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency));
			} else if (slave.skill.anal <= 10) {
				r.push(`Since ${he}'s anally unskilled,`);
				if (slave.anus === 0 && !canDoAnal(slave)) {
					r.push(`an anal virgin, and in chastity,`);
				} else if (slave.anus === 0) {
					r.push(`and an anal virgin,`);
				} else {
					r.push(`and in anal chastity,`);
				}
				r.push(`you explain the basics of anal sex to ${him}.`);
				r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency));
			} else if (slave.skill.oral < 100) {
				r.push(`${He} is already a skilled oral whore, but ${his} skills can be polished further. You train ${him} in the basics of`);
				if (V.seePee === 1) {
					r.push(`urine play,`);
				}
				r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} oral endurance, enabling ${him} to deepthroat for extended periods.`);
				r.push(App.UI.DOM.makeElement("span", `${His} oral skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('oral', slave, trainingEfficiency));
			} else if (slave.skill.vaginal < 100 && slave.vagina > 0 && canDoVaginal(slave)) {
				r.push(`${He} is already a skilled pussy slut, but ${his} skills can be polished further. You train ${him} in the basics of`);
				if (V.seePee === 1) {
					r.push(`urine play,`);
				}
				r.push(`massage, pet play, needle play, and many other niche skills. You also work with ${him} to develop a personal regimen of vaginal muscle exercises. This will enable ${him} to squeeze and massage dicks with ${his} practiced vaginal walls.`);
				r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('vaginal', slave, trainingEfficiency));
			} else if (slave.skill.anal < 100 && slave.anus > 0 && canDoAnal(slave)) {
				r.push(`${He} is already a skilled anal bitch, but ${his} skills can be polished further. You train ${him} in the basics of`);
				if (V.seePee === 1) {
					r.push(`urine play,`);
				}
				r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} knowledge of sexual positions. ${He} learns to balance ${himself} on tiptoe for the challenge of standing anal sex without support.`);
				r.push(App.UI.DOM.makeElement("span", `${His} sexual skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('anal', slave, trainingEfficiency));
			} else if (slave.skill.whoring <= 10) {
				r.push(`Since ${he}'s dangerously naïve about selling sex, you teach ${him} the basics of self protection and business.`);
				r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency));
			} else if (slave.skill.entertainment <= 10) {
				r.push(`Since ${he}'s rough and unskilled at entertainment, you teach ${him} the basics of polite conversation, music, and dance.`);
				r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency));
			} else if (slave.skill.whoring <= 30) {
				r.push(`Since ${he} has only basic entertainment skills, you teach ${him} to steer clients to more lucrative sex acts.`);
				r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency));
			} else if (slave.skill.entertainment <= 30) {
				r.push(`Since ${he} has only basic entertainment skills, you teach ${him} more about poise and Free Cities etiquette.`);
				r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency));
			} else if (slave.skill.whoring <= 60 && isPCCareerInCategory("escort")) {
				r.push(`${He} is already a skilled whore, so you teach ${him} some of your personal tricks to squeezing every last drop from a patron.`);
				r.push(App.UI.DOM.makeElement("span", `${His} prostitution skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('whoring', slave, trainingEfficiency));
			} else if (slave.skill.entertainment <= 60 && isPCCareerInCategory("escort")) {
				r.push(`${He} is already skilled at luring in partners, so you teach ${him} some of your sexual persuasion techniques.`);
				r.push(App.UI.DOM.makeElement("span", `${His} entertainment skills have improved.`, "lime"));
				r.push(slaveSkillIncrease('entertainment', slave, trainingEfficiency));
			} else if (slave.skill.vaginal <= 30 && slave.vagina >= 0) {
				r.push(`Since ${he} has only rudimentary vaginal skills,`);
				if (slave.vagina === 0 && !canDoVaginal(slave)) {
					r.push(`is in chastity, and a virgin on top of that,`);
				} else if (slave.vagina === 0) {
					r.push(`and still a virgin,`);
				} else {
					r.push(`and is in chastity,`);
				}
				r.push(`you spend time teaching ${him} sexual positions and how to someday use ${his} pussy to its potential. You have ${him} work ${his} Kegel muscles all week to prepare ${him} for the future.`);
				r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved,`, "lime"));
				r.push(`but it's a slow process without practical experience.`);
				r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency));
			} else if (slave.skill.anal <= 30) {
				r.push(`Since ${he} has only rudimentary anal skills,`);
				if (slave.anus === 0 && !canDoAnal(slave)) {
					r.push(`is an anal virgin, and is in chastity to top it off,`);
				} else if (slave.anus === 0) {
					r.push(`and is an anal virgin,`);
				} else {
					r.push(`and is in anal chastity,`);
				}
				r.push(`you spend time teaching ${him} sexual positions and how to someday use ${his} asshole to its potential. You have ${him} work ${his} Kegel muscles and anal sphincter all week to prepare ${him} for the future.`);
				r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved,`, "lime"));
				r.push(`but it's a slow process without practical experience.`);
				r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency));
			} else if (slave.skill.vaginal < 100 && slave.vagina >= 0) {
				r.push(`${He} already a skilled pussy slut,`);
				if (slave.vagina === 0 && !canDoVaginal(slave)) {
					r.push(`despite ${his} chastity and virginity,`);
				} else if (slave.vagina === 0) {
					r.push(`despite still being a virgin,`);
				} else {
					r.push(`despite ${his} chastity,`);
				}
				r.push(`but lacks practical experience. You train ${him} in the basics of`);
				if (V.seePee === 1) {
					r.push(`urine play,`);
				}
				r.push(`massage, pet play, needle play, and many other niche skills. You also work with ${him} to develop a personal regimen of vaginal muscle exercises. This will enable ${him} to squeeze and massage dicks with ${his} practiced vaginal walls. You spend time expanding ${his} knowledge of sexual positions.`);
				r.push(App.UI.DOM.makeElement("span", `${His} vaginal skills have improved,`, "lime"));
				r.push(`but it's a slow process without proper training.`);
				r.push(slaveSkillIncrease('vaginal', slave, vaginalTrainingEfficiency));
			} else if (slave.skill.anal < 100) {
				r.push(`${He} already a skilled anal bitch,`);
				if (slave.anus === 0 && !canDoAnal(slave)) {
					r.push(`despite ${his} anus chastity and virginity,`);
				} else if (slave.anus === 0) {
					r.push(`despite still being an anal virgin,`);
				} else {
					r.push(`despite ${his} anal chastity,`);
				}
				r.push(`but lacks practical experience. You train ${him} in the basics of`);
				if (V.seePee === 1) {
					r.push(`urine play,`);
				}
				r.push(`massage, pet play, needle play, and many other niche skills. You also expand ${his} knowledge of sexual positions. ${He} learns to balance ${himself} on tiptoe for the challenge of standing anal sex without support.`);
				r.push(App.UI.DOM.makeElement("span", `${His} anal skills have improved,`, "lime"));
				r.push(`but it's a slow process without proper training.`);
				r.push(slaveSkillIncrease('anal', slave, analTrainingEfficiency));
			} else {
				r.push(`${He}'s learned everything you can teach, and is now a masterful`);
				if (slave.skill.vaginal >= 100) {
					r.push(`slut;`);
				} else if (slave.vagina === 0) {
					r.push(`virgin slut;`);
				} else if (slave.dick === 0 && slave.scrotum === 0 && slave.vagina === -1) {
					r.push(`null slave;`);
				} else if (slave.dick > 0 && slave.balls === 0) {
					r.push(`gelded bitch;`);
				} else if (slave.dick > 0 && slave.boobs > 300 && slave.vagina === -1) {
					r.push(`shemale slut;`);
				} else if (slave.chastityVagina) {
					r.push(`slut, notwithstanding ${his} chastity belt;`);
				} else {
					r.push(`slave;`);
				}
				r.push(App.UI.DOM.makeElement("span", `${his} assignment has defaulted to fostering devotion.`, "yellow"));
				pa.objective = "build devotion";
			}
			currentSlaveValue = 0.1;
			slave.training = 0;
			break;
		case "combat training":
			trainingEfficiency = Math.max(1, Math.round((7 + (slave.devotion / 30) + (slave.intelligence / 32) - (isHindered(slave) ? 2 : 0) - Math.floor(slave.health.tired/ 10)) * hindranceMod * nymphoMod));
			r.push(`You focus on passing on your combat skills to ${him}.`);
			if (hindranceMod <= .3) {
				r.push(`It's physically impossible for you to properly train someone in your shape, so you're forced to rely on theory over example. Even the most rudimentary of techniques takes longer for ${him} to pick up due to the lack of proper demonstration.`);
			} else if (hindranceMod <= .5) {
				r.push(`You have to rely on theory more than example due to your body, cutting into the effectiveness of your training.`);
			} else if (hindranceMod <= .7) {
				r.push(`It's difficult to convey proper technique with your body constantly getting in the way.`);
			} else if (hindranceMod < 1) {
				r.push(`Your body gets in the way at times, forcing you to reconsider how exactly to demonstrate techniques with proper form.`);
			}
			if (slave.intelligence + slave.intelligenceImplant > 15) {
				r.push(`${His} intelligence allows ${him} to absorb ${his} lessons quickly.`);
			} else if (slave.intelligence + slave.intelligenceImplant < -15) {
				r.push(`${His} stupidity makes ${him} absorb ${his} lessons slowly.`);
			} else {
				r.push(`${He} takes to your lessons well enough.`);
			}
			if (isHindered(slave)) {
				r.push(`${He} isn't physically cut for combat, which hinders ${his} growth`);
			}
			if (slave.health.tired > 30) {
				r.push(`${His} fatigue cuts into the amount of time ${he} can spend training.`);
			}
			if (nymphoMod < 1) {
				r.push(`Activities like this definitely has to be done in the buff, and the sight of ${his}`);
				if (slave.weight > 160) {
					r.push(`rippling flesh`);
				} else if (slave.weight > 95) {
					r.push(`soft body`);
				} else if (slave.muscles > 95) {
					r.push(`ripped body`);
				} else if (slave.muscles > 30) {
					r.push(`muscular body`);
				} else if (slave.muscles > 5) {
					r.push(`toned body`);
				} else if (slave.weight > 30) {
					r.push(`soft body`);
				} else {
					r.push(`lithe body`);
				}
				if (slave.weight > 160) {
					r.push(`bouncing around`);
				} else {
					r.push(`in motion`);
				}
				r.push(`is just what your libido craves. It does detract from your teaching, but who cares when the lesson concludes with`);
				if (canDoVaginal(slave) && slave.vagina > 0 && (canPenetrate(V.PC) || V.PC.vagina >= 0)) {
					if (canPenetrate(V.PC)) {
						r.push(`some sweaty sex.`);
						seX(slave, "vaginal", V.PC, "penetrative");
						if (canImpreg(slave, V.PC)) {
							knockMeUp(slave, 5, 0, -1);
						}
					} else {
						r.push(`some sweaty tribbing.`);
						seX(slave, "vaginal", V.PC, "vaginal");
						if (canFemImpreg(slave, V.PC)) {
							knockMeUp(slave, 3, 0, -1);
						}
						if (canFemImpreg(V.PC, slave)) {
							knockMeUp(V.PC, 3, 0, slave.ID);
						}
					}
				} else if (canDoAnal(slave) && slave.anus > 0 && canPenetrate(V.PC)) {
					r.push(`some sweaty anal.`);
					seX(slave, "anal", V.PC, "penetrative");
					if (canImpreg(slave, V.PC)) {
						knockMeUp(slave, 5, 1, -1);
					}
				} else if ((V.policies.sexualOpenness === 1 || slave.toyHole === "dick") && (V.PC.dick > 0 || V.PC.vagina >= 0) && ((slave.dick > 0 && slave.chastityPenis === 0) || canDoVaginal(slave)) && V.PC.belly + slave.belly < 5000) {
					r.push(`a sweaty 69.`);
					if (V.PC.dick > 0) {
						seX(V.PC, "penetrative", slave, "oral");
					} else {
						seX(V.PC, "vaginal", slave, "oral");
					}
					if (slave.dick > 0 && slave.chastityPenis === 0) {
						seX(slave, "penetrative", V.PC, "oral");
					} else {
						seX(slave, "vaginal", V.PC, "oral");
					}
				} else if ((V.policies.sexualOpenness === 1 || slave.toyHole === "dick") && (V.PC.vagina > 0 || V.PC.anus > 0) && canPenetrate(slave)) {
					r.push(`you getting filled by ${his} dick.`);
					if (V.PC.vagina > 0) {
						seX(slave, "penetrative", V.PC, "vaginal");
						if (canImpreg(V.PC, slave)) {
							knockMeUp(V.PC, 5, 0, slave.ID);
						}
					} else {
						seX(slave, "penetrative", V.PC, "anal");
						if (canImpreg(V.PC, slave)) {
							knockMeUp(V.PC, 5, 1, slave.ID);
						}
					}
				} else if (V.PC.dick > 0) {
					r.push(`you getting your dick sucked.`);
					seX(slave, "oral", V.PC, "penetrative");
				} else if (V.PC.vagina >= 0) {
					r.push(`you getting eaten out.`);
					seX(slave, "oral", V.PC, "vaginal");
				} else {
					r.push(`a thorough molestation of ${his} sweaty body.`);
				}
			}
			r.push(slaveSkillIncrease('combat', slave, trainingEfficiency));
			slave.health.tired = Math.clamp(slave.health.tired + 10, 0, 100);
			if (slave.skill.combat >= V.PC.skill.combat - (130 - V.PC.intelligence + V.PC.intelligenceImplant)) {
				Math.clamp(slave.skill.combat, 0, V.PC.skill.combat);
				if (slave.skill.combat >= 100) {
					r.push(`${He}'s learned everything you can possibly teach ${him}; if ${he} weren't so dedicated to you, it might be worrying that you didn't leave yourself an edge against ${him}.`);
				} else {
					r.push(`${He}'s learned everything you can teach ${him}, but you both could possibly discover further combat insights by sparring with each other.`);
				}
				r.push(App.UI.DOM.makeElement("span", `${His} assignment has defaulted to fostering devotion.`, "yellow"));
				pa.objective = "build devotion";
			}
			currentSlaveValue = 0.1;
			slave.training = 0;
			break;
		case "spar":
			if (nymphoMod < 1) {
				r.push(`You spar in the buff so you may savor the sight of ${his}`);
				if (slave.weight > 160) {
					r.push(`rippling flesh`);
				} else if (slave.weight > 95) {
					r.push(`soft body`);
				} else if (slave.muscles > 95) {
					r.push(`ripped body`);
				} else if (slave.muscles > 30) {
					r.push(`muscular body`);
				} else if (slave.muscles > 5) {
					r.push(`toned body`);
				} else if (slave.weight > 30) {
					r.push(`soft body`);
				} else {
					r.push(`lithe body`);
				}
				if (slave.weight > 160) {
					r.push(`bouncing around as you fight,`);
				} else {
					r.push(`in motion,`);
				}
				r.push(`and soon your moves take a sexual`);
				if (slave.energy > 95 || slave.aphrodisiacs > 0 || slave.inflationType === "aphrodisiac") {
					r.push(`turn, only to be matched by the equally aroused slave${girl}. The session quickly devolves into what can only be described as "tantric wrestling" and only ends when the two of you are too exhausted to continue. Neither of you even considered improving your combat skills, but you both found the match to be`);
					r.push(App.UI.DOM.makeElement("span", `rather stimulating`, ["hotpink"]));
					r.push(`and something that should happen again. It isn't long until ${he} challenges you to another sparring match, to which you happily oblige.`);
					SimpleSexAct.Player(slave, 30);
					slave.devotion += 5;
					V.PC.need = 0;
				} else if (slave.skill.combat > 60) {
					r.push(`turn, forcing ${him} to swiftly send you to the floor. ${He} expected you to take this seriously; why invite ${him} to hone ${his} skills just to use the opportunity to ogle ${him}? ${He}`);
					r.push(App.UI.DOM.makeElement("span", `ends the session resentful`, ["mediumorchid"]));
					r.push(`of the wasted time, and obstinately refuses further challenges.`);
					r.push(App.UI.DOM.makeElement("span", `${His} assignment has defaulted to restoring ${his} devotion to you.`, "yellow"));
					pa.objective = "build devotion";
					slave.devotion -= 20;
				} else if (slave.energy > 20) {
					r.push(`turn. ${He} isn't quite sure what kind of sex game this is, but quickly gets into the swing of things and plays along. Neither of you learn anything new, but`);
					r.push(App.UI.DOM.makeElement("span", `${he} had fun`, ["hotpink"]));
					r.push(`doing it.`);
					SimpleSexAct.Player(slave, 3);
					slave.devotion += 2;
				} else {
					r.push(`turn. ${He} wasn't looking forward to being raped, and giving ${him} the chance to defend ${himself} against you`);
					r.push(App.UI.DOM.makeElement("span", `bolsters ${his} confidence.`, ["mediumorchid"]));
					r.push(`${He} glares at your panting form on the floor for a moment`);
					const judgement = overpowerCheck(slave, V.PC);
					const isVirile = (slave.balls > 0 && slave.pubertyXY === 1 && slave.vasectomy === 0 && slave.ballType !== "sterile");
					if (slave.devotion < -20 && slave.trust > 20 && judgement < 20) {
						r.push(`as dirty thoughts flick through ${his} mind. ${He} will be in serious trouble if ${he} takes advantage of you in this state and gets caught, but with you as horny as you are, ${he} might get away with it. ${He} moves towards you,`);
						if (canPenetrate(slave)) {
							if (slave.dick === 1) {
								r.push(`pathetic erection at the ready,`);
							} else if (slave.dick === 2) {
								r.push(`little erection at the ready,`);
							} else if (slave.dick === 3) {
								r.push(`erection in hand,`);
							} else if (slave.dick === 4) {
								r.push(`stroking ${his} sizeable erection,`);
							} else if (slave.dick === 5) {
								r.push(`stroking an impressive erection to the ready,`);
							} else if (slave.dick === 6) {
								r.push(`${his} enormous erection aching for your holes,`);
							} else if (slave.dick === 7) {
								r.push(`${his} massive, priapism stricken dick at the ready to stretch you to your limits,`);
							}
							r.push(`and assumes the position.`);
						} else if (canDoVaginal(slave)) {
							if (slave.vaginaLube > 1) {
								r.push(`a trail of pussy juice following ${him},`);
							} else if (slave.vaginaLube > 0) {
								r.push(`dripping pussy juice as ${he} goes,`);
							} else {
								r.push(`${his} dry pussy begging for attention,`);
							}
							r.push(`and positions ${himself} over your face.`);
						} else if (canDoAnal(slave)) {
							r.push(`butthole itching with anticipation, and lowers ${his} ass towards you.`);
						} else {
							r.push(`and lacking any means of release, sticks a finger in your mouth.`);
						}
						r.push(`Before ${he} can get any further, you come to your senses and grab ${him} forcing ${him} to struggle against you.`);
						if (overpowerCheck(slave, V.PC) > random(1, 100)) {
							r.push(`${He} manages to get the upper hand`);
							if (canPenetrate(slave)) {
								if (V.PC.vagina > 0) {
									r.push(`and quickly penetrates you. A few thrusts in and your libido is back in control and bucking against ${him} as ${he} fucks you raw. ${He} doesn't have much sexual stamina, nor time to take it slow, so ${he} blows ${his} load into you as soon as ${he} can and hurries off before anyone else notices what is going on.`);
									seX(slave, "penetrative", V.PC, "vaginal");
									if (canImpreg(V.PC, slave)) {
										knockMeUp(V.PC, 5, 0, slave.ID);
									}
								} else if (V.PC.anus > 0) {
									if (V.PC.vagina === 0) {
										r.push(`and, after considering your virgin pussy for a moment, decides not to risk it and shoves it in your ass instead.`);
									} else {
										r.push(`and quickly shoves it in your ass.`);
									}
									r.push(`A few thrusts in and your libido is back in control and bucking against ${him} as ${he} fucks you raw. ${He} doesn't have much sexual stamina, nor time to take it slow, so ${he} blows ${his} load into you as soon as ${he} can and hurries off before anyone else notices what is going on.`);
									cumTotal = (cumAmount(slave) / 70);
									seX(slave, "penetrative", V.PC, "anal");
									if (canImpreg(V.PC, slave)) {
										knockMeUp(V.PC, 5, 1, slave.ID);
									}
								} else {
									if (V.PC.vagina === 0 || V.PC.anus === 0) {
										r.push(`and, after considering your virginity for a moment, decides not to risk it and shoves it in your mouth instead.`);
									} else {
										r.push(`and quickly shoves it in your mouth.`);
									}
									if (canTaste(V.PC)) {
										r.push(`The taste of ${his} precum puts your libido in overdrive`);
									} else if (canSmell(V.PC)) {
										r.push(`The smell of ${his} precum and crotch puts your libido in overdrive`);
									} else {
										r.push(`With something phallic in your mouth, your libido takes the reigns`);
									}
									r.push(`and, after blowing ${his} load into your gullet, is stuck`);
									if (slave.dick > 5) {
										r.push(`desperately trying to pull ${his} giant dick out of your throat before you suffocate attempting to drain even more cum out of ${him}.`);
									} else if (slave.dick > 2) {
										r.push(`trying to pull ${his} dick out of your throat so ${he} can slip away before you drain even more cum out of ${him}.`);
									} else {
										r.push(`desperately trying to pull ${his} tiny dick out of your vice-like suction so ${he} can slip away.`);
									}
									cumTotal = (cumAmount(slave) / 70);
									seX(slave, "penetrative", V.PC, "oral");
								}
							} else if (canDoVaginal(slave)) {
								r.push(`smothers you with ${his} vagina, forcing you to eat ${him} out. ${canSmell(V.PC) ? `The scent of ${his} arousal` : `A little motivation`} gets your libido fired up again and your tongue sets to work. ${He} eventually tires of ${slave.scrotum > 0 ? "teabagging you" : "humiliating the willing"}, and sneaks off once ${he}'s climaxed`);
								if ((slave.prostate > 0 || cumTotal >= 1) && slave.dick === 0) {
									r.push(`and thoroughly soaked you with ${isVirile ? "semen and " : ""}sexual fluids.`);
								} else if (slave.balls > 0 && slave.dick === 0) {
									r.push(`and squirted a load across your face.`);
								} else if (slave.vaginaLube > 0) {
									r.push(`and thoroughly coated your face with femcum.`);
								} else {
									r.push(`on your face.`);
								}
								seX(slave, "vaginal", V.PC, "oral");
							} else if (canDoAnal(slave)) {
								r.push(`takes a seat on your face, forcing you to give ${him} a rimjob. A little motivation gets your libido fired up again and your tongue sets to work. ${He} eventually tires of humiliating the willing, and sneaks off once it becomes clear ${he} isn't going to orgasm from this.`);
								seX(slave, "anal", V.PC, "oral");
							} else {
								r.push(`forces you back to the ground`);
								if (slave.lactation > 0) {
									r.push(`before pushing a milky nipple into your mouth. Soon your libido has you sucking away, oblivious to ${him} playing with ${himself} while enjoying the release. ${He} sneaks off once ${he} feels you've drank as much of ${his} milk as you can handle.`);
									slave.boobs -= slave.boobsMilk;
									slave.boobsMilk = 0;
									slave.lactationDuration = 2;
								} else {
									r.push(`before pushing a nipple against your lips. Soon your libido has you sucking away, oblivious to ${him} exploring your body while trying to get ${himself} off. Eventually ${he} just gets sore, so ${he} gives up and sneaks away.`);
								}
							}
							r.push(`You come around with hazy memories of having sex,`);
							if (cumTotal >= 10) {
								r.push(`and a drum-taut belly,`);
							} else if (cumTotal >= 5) {
								r.push(`and a bulging, liquid-filled belly,`);
							} else if (cumTotal >= 1.5) {
								r.push(`and a belly bloated with something sloshing about,`);
							} else if (cumTotal >= .1) {
								r.push(`and a full belly,`);
							}
							r.push(`while ${he}`);
							r.push(App.UI.DOM.makeElement("span", `essentially got away with raping you.`, ["mediumaquamarine"]));
							slave.trust += 10;
							V.PC.need -= 5;
						} else {
							r.push(`You manage to overpower ${him}, tossing ${him} to the floor beside you and pinning ${him} down until ${he} surrenders.`);
							r.push(App.UI.DOM.makeElement("span", `A look of terror crosses ${his} face`, ["gold"]));
							r.push(`as the realization of just how screwed ${he} is washes over ${him}. ${He} clearly needs to relearn ${his} place, so`);
							r.push(App.UI.DOM.makeElement("span", `${his} assignment has been corrected to harshly breaking ${his} will.`, "yellow"));
							pa.objective = "harshly break will";
							slave.trust -= 20;
						}
					} else if (slave.devotion <= 20 && slave.trust > 20 && judgement < 50) {
						r.push(`before deciding to give you what you want. Sure, ${he} could get in trouble for doing this, but if ${he} fucks you hard enough, your lust addled mind probably won't remember anything other than sex. ${He} moves towards you,`);
						if (canPenetrate(slave)) {
							if (slave.dick === 1) {
								r.push(`pathetic erection at the ready,`);
							} else if (slave.dick === 2) {
								r.push(`little erection at the ready,`);
							} else if (slave.dick === 3) {
								r.push(`erection in hand,`);
							} else if (slave.dick === 4) {
								r.push(`stroking ${his} sizeable erection,`);
							} else if (slave.dick === 5) {
								r.push(`stroking an impressive erection to the ready,`);
							} else if (slave.dick === 6) {
								r.push(`${his} enormous erection aching for your holes,`);
							} else if (slave.dick === 7) {
								r.push(`${his} massive, priapism stricken dick at the ready to stretch you to your limits,`);
							}
							r.push(`and assumes the position.`);
						} else if (canDoVaginal(slave)) {
							if (slave.vaginaLube > 1) {
								r.push(`a trail of pussy juice following ${him},`);
							} else if (slave.vaginaLube > 0) {
								r.push(`dripping pussy juice as ${he} goes,`);
							} else {
								r.push(`${his} dry pussy begging for attention,`);
							}
							r.push(`and positions ${himself} over your face.`);
						} else if (canDoAnal(slave)) {
							r.push(`butthole itching with anticipation, and lowers ${his} ass towards your face.`);
						} else {
							r.push(`and lacking any means of release, sticks a finger in your mouth.`);
						}
						r.push(`Before ${he} can get any further, you come to your senses and grab ${him} forcing ${him} to struggle against you.`);
						if (overpowerCheck(slave, V.PC) > random(1, 100)) {
							r.push(`${He} manages to get the upper hand and`);
							if (canPenetrate(slave)) {
								if (V.PC.vagina >= 0) {
									if (V.PC.vagina > 0) {
										r.push(`and quickly penetrates you.`);
									} else {
										r.push(`and slowly eases it in to hopefully`);
										r.push(App.UI.DOM.makeElement("span", `make your first time less memorable,`, "red"));
										r.push(`for ${his} sake.`);
										V.PC.vagina++;
									}
									r.push(`A few thrusts in and your libido is back in control and bucking against ${him} as ${he} fucks you raw. ${He} doesn't have much sexual stamina, but ${he} makes sure to take ${his} time to better the odds of fucking you senseless. ${He} thoroughly creampies you for good measure before heading on ${his} way.`);
									seX(slave, "penetrative", V.PC, "vaginal");
									if (canImpreg(V.PC, slave)) {
										knockMeUp(V.PC, 15, 0, slave.ID);
									}
								} else if (V.PC.anus >= 0) {
									if (V.PC.anus > 0) {
										r.push(`and quickly shoves it in your ass.`);
									} else {
										r.push(`and slowly breaks in your asshole in the hopes that`);
										r.push(App.UI.DOM.makeElement("span", `making your first time less memorable,`, "red"));
										r.push(`will keep you from remembering it.`);
										V.PC.anus++;
									}
									r.push(`A few thrusts in and your libido is back in control and bucking against ${him} as ${he} fucks you raw. ${He} doesn't have much sexual stamina, but ${he} makes sure to take ${his} time to better the odds of fucking you senseless. ${He} thoroughly ${his} load inside you before heading on ${his} way.`);
									cumTotal = (cumAmount(slave) / 70);
									if (cumTotal >= 5) {
										r.push(`${He} briefly considers trying to drain the cumballoon ${he} has turned you into, but decides it's not worth the added risk.`);
									}
									seX(slave, "penetrative", V.PC, "anal");
									if (canImpreg(V.PC, slave)) {
										knockMeUp(V.PC, 15, 1, slave.ID);
									}
								} else {
									r.push(`and quickly shoves it in your mouth.`);
									if (canTaste(V.PC)) {
										r.push(`The taste of ${his} precum puts your libido in overdrive`);
									} else if (canSmell(V.PC)) {
										r.push(`The smell of ${his} precum and crotch puts your libido in overdrive`);
									} else {
										r.push(`With something phallic in your mouth, your libido takes the reigns`);
									}
									r.push(`and, after blowing ${his} load into your gullet, is stuck`);
									if (slave.dick > 5) {
										r.push(`desperately trying to pull ${his} sore dick out of your throat before you suffocate attempting to drain even more cum out of ${him}.`);
									} else if (slave.dick > 2) {
										r.push(`trying to pull ${his} sore dick out of your throat so ${he} can get away before you drain even more cum out of ${him}.`);
									} else {
										r.push(`desperately trying to pull ${his} sore dick out of your vice-like suction so ${he} can get away.`);
									}
									cumTotal = (cumAmount(slave) / 70);
									if (cumTotal >= 5) {
										r.push(`${He} eyes how large your stomach has inflated from ${his} cum, hopefully this can't be traced back to ${him}.`);
									}
									seX(slave, "penetrative", V.PC, "oral");
								}
							} else if (canDoVaginal(slave)) {
								r.push(`smothers you with ${his} vagina, forcing you to eat ${him} out. ${canSmell(V.PC) ? `The scent of ${his} arousal` : `A little motivation`} gets your libido fired up again and your tongue sets to work. ${He} eventually tires of your untrained tongue and heads off once ${he}'s climaxed`);
								if ((slave.prostate > 0 || cumTotal >= 1) && slave.dick === 0) {
									r.push(`and thoroughly soaked you with ${isVirile ? "semen and " : ""}sexual fluids.`);
								} else if (slave.balls > 0 && slave.dick === 0) {
									r.push(`and squirted a load across your face.`);
								} else if (slave.vaginaLube > 0) {
									r.push(`and thoroughly coated your face with femcum.`);
								} else {
									r.push(`on your face.`);
								}
								seX(slave, "vaginal", V.PC, "oral");
							} else if (canDoAnal(slave)) {
								r.push(`takes a seat on your face, forcing you to give ${him} a rimjob. A little motivation gets your libido fired up again and your tongue sets to work. Once ${he}'s gotten off, a spent a little extra time making certain the taste of ${his} ass will linger on your tongue, ${he} heads on ${his} way.`);
								seX(slave, "anal", V.PC, "oral");
							} else {
								r.push(`forces you back to the ground`);
								if (slave.lactation > 0) {
									r.push(`before sticking a milky nipple into your mouth. Soon your libido has you sucking away, oblivious to ${him} playing with your body while enjoying the release. ${He} leaves you to drift off to sleep only after you've drained ${him} of all ${his} milk and left ${his} nipples painfully sore.`);
									milkTotal = (milkAmount(slave) / 14);
									if (milkTotal >= 5) {
										r.push(`${He} eyes how large your stomach has swollen with ${his} milk, hopefully you'll consider this a good time and not think too much into it.`);
									}
									slave.boobs -= slave.boobsMilk;
									slave.boobsMilk = 0;
									slave.lactationDuration = 2;
								} else {
									r.push(`before pushing a nipple against your lips. Soon your libido has you sucking away, oblivious to ${him} playing with your body while trying to get ${himself} off. Eventually ${he} just gets tired and sore, so ${he} gives up and heads on ${his} way.`);
								}
							}
							r.push(`You come out of your torpor feeling satisfied,`);
							if (cumTotal + milkTotal >= 10) {
								r.push(`even if your belly feels like it might burst,`);
							} else if (cumTotal + milkTotal >= 5) {
								r.push(`if your sloshing belly is anything to go by,`);
							} else if (cumTotal + milkTotal >= 1.5) {
								r.push(`if a little bloated,`);
							} else if (cumTotal + milkTotal >= .1) {
								r.push(`and pleasantly full,`);
							}
							r.push(`while ${he}`);
							r.push(App.UI.DOM.makeElement("span", `got away with raping you.`, ["mediumaquamarine"]));
							slave.trust += 15;
							V.PC.need -= 5;
						} else {
							r.push(`You manage to overpower ${him}, tossing ${him} to the floor beside you and pinning ${him} down until ${he} surrenders.`);
							r.push(App.UI.DOM.makeElement("span", `A look of uncertainty crosses ${his} face`, ["gold"]));
							r.push(`as the realization that ${he} isn't going to be able to talk ${his} way out of this dawns on ${him}. ${He} clearly needs to relearn ${his} place, so`);
							r.push(App.UI.DOM.makeElement("span", `${his} assignment has been corrected to breaking ${his} will.`, "yellow"));
							pa.objective = "break will";
							slave.trust -= 5;
						}
					} else {
						r.push(`before helping you to your feet so the session can be over.`);
					}
					slave.devotion -= 5;
				}
			} else if (Math.abs(V.PC.skill.combat - slave.skill.combat) > 30) {
				r.push(`The skill difference between you is just too great for your bouts to not end instantly;`);
				r.push(App.UI.DOM.makeElement("span", `${his} assignment has defaulted to fostering devotion.`, "yellow"));
				pa.objective = "build devotion";
			} else {
				r.push(`You hone your combat skills against each other in an effort to perfect what you already know and discover new ways to improve yourselves.`);
				if (isHindered(V.PC) && isHindered(slave)) {
					r.push(`You are both extremely awkward in motion, and spend most of your time learning how to adequately fight with your bodies getting in the way. Your bouts would be comical if you both weren't making a serious effort.`);
					if (V.PC.skill.combat < 100 && random(1, 200) < Math.max(V.PC.intelligence, 20)) {
						skillgainP = true;
					}
					if (slave.skill.combat < 100 && random(1, 200) < Math.max(slave.intelligence, 20)) {
						skillgainS = true;
					}
				} else if (isHindered(V.PC)) {
					r.push(`You are extremely awkward in motion, and spend most of your time learning how to adequately fight with your body getting in the way, effectively holding ${him} back. ${He} does what ${he} can to help you adapt, but your bouts are still undeniably one-sided.`);
					if (V.PC.skill.combat < 100 && random(1, 200) < Math.max(V.PC.intelligence, 20)) {
						skillgainP = true;
					}
					if (slave.skill.combat < 100 && random(1, 100) < Math.max(slave.intelligence, 20)) {
						skillgainS = true;
					}
				} else if (isHindered(slave)) {
					r.push(`${He} is extremely awkward in motion, and spends most of ${his} time learning how to adequately fight with ${his} body getting in the way, effectively holding you back. You does what you can to help you adapt, but your bouts are still undeniably one-sided.`);
					if (V.PC.skill.combat < 100 && random(1, 100) < Math.max(V.PC.intelligence, 20)) {
						skillgainP = true;
					}
					if (slave.skill.combat < 100 && random(1, 200) < Math.max(slave.intelligence, 20)) {
						skillgainS = true;
					}
				} else {
					r.push(`Your bouts are intense and can easily go either way, but win or lose, ${he} is a good sport about it.`);
					if (V.PC.skill.combat < 100 && random(1, 100) < Math.max(V.PC.intelligence, 20)) {
						skillgainP = true;
					}
					if (slave.skill.combat < 100 && random(1, 100) < Math.max(slave.intelligence, 20)) {
						skillgainS = true;
					}
				}
				if (slave.skill.combat >= 100 && V.PC.skill.combat >= 100) {
					r.push(`There's little more either of you can learn from sparring, so you mostly fight for fun now.`);
				} else if (V.PC.skill.combat >= 100) {
					r.push(`There's little more you can learn from sparring, so you mostly focus on improving ${his} technique.`);
				} else if (slave.skill.combat >= 100) {
					r.push(`There's little more ${he} can learn from sparring, so ${he} mostly tries to help you improve your technique.`);
				}
				oldSkill = V.PC.skill.combat;
				if (skillgainP) {
					V.PC.skill.combat++;
					if (oldSkill <= 60 && V.PC.skill.combat > 60) {
						r.push(`You have become an <span class="green">expert at combat.</span>`);
					} else if (oldSkill < 100 && V.PC.skill.combat >= 100) {
						r.push(`You've <span class="green">mastered the art of combat.</span>`);
					}
				}
				if (skillgainS) {
					r.push(slaveSkillIncrease('combat', slave));
				}
				r.push(`Spending your free time with ${him} like this`);
				r.push(App.UI.DOM.makeElement("span", `helps strengthen ${his} bond to you,`, ["hotpink"]));
				r.push(`while also proving to ${him} that you are`);
				r.push(App.UI.DOM.makeElement("span", `someone ${he} can trust.`, ["mediumaquamarine"]));
				slave.devotion += 4;
				slave.trust += 4;
			}
			currentSlaveValue = 0.1;
			slave.training = 0;
			break;
		case "break will":
			slave.devotion -= 4;
			if (slave.trust > 20) {
				slave.trust -= 15;
			} else {
				slave.trust -= 10;
			}
			if (slave.devotion < -80) {
				r.push(`You bind ${him} securely to a special chair in your`);
				if (!canDoAnal(slave) || (slave.vagina > -1 && !canDoVaginal(slave))) {
					r.push(`office with ${his} holes exposed and vulnerable.`);
				} else {
					r.push(`office.`);
				}
				r.push(`Yours is a busy week, with a lot of business interviews, so whenever the interviewee has pleased you, you offer him or her the use of the poor slave's body on the way out. The chair is specially designed so that the seat, back and armrests can rotate vertically relative to the ground, so ${his} body can be spun to make any of ${his} available holes convenient. Fortunately, it also has a pan beneath it to stop the generous stream of ejaculate and lubricant that drips from ${him} from besmirching the floor. ${He} can't help but`);
				r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold"));
				r.push(`despite ${his}`);
				r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid"));
				r.push(VCheck.Both(slave, 10, 5));
			} else if (slave.devotion < -60 && slave.anus !== 0) {
				r.push(`${slave.slaveName} is really wild and stern measures must be taken. So, ${he} is`);
				if (!canDoAnal(slave) || (slave.vagina > -1 && !canDoVaginal(slave))) {
					r.push(`stripped of ${his} protective chastity and`);
				}
				r.push(`forced, struggling and screaming, into a latex suit that completely blinds, deafens, and immobilizes ${him}. So attired, the only places where ${he} can feel any sensations at all other than endless latex darkness are ${his}`);
				if (slave.dick !== 0 && slave.vagina !== -1) {
					r.push(`pussy, and cock`);
				} else if (slave.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`pussy`);
				}
				r.push(`and backdoor. For ${him}, time becomes a featureless, torturous boredom broken only by occasional rape. Eventually, ${he} becomes so`);
				r.push(App.UI.DOM.makeElement("span", `desperate`, "mediumorchid"));
				r.push(`for something, anything, to break the monotony that ${he} begins to look forward to the next time a phallus will`);
				r.push(App.UI.DOM.makeElement("span", `force`, "gold"));
				r.push(`its way into ${him}.`);
				r.push(VCheck.Both(slave, 6, 3));
			} else if (slave.devotion < -50 && slave.hStyle !== "shaved" && random(1, 100) > 90) {
				r.push(`${slave.slaveName} needs to be taken down a peg. Fortunately, you know just the thing. You bring ${him} into a bathroom, place a chair in the tub, and tie ${him} securely to the chair. ${He} isn't too perturbed — ${he} probably expects a facefuck under running water or something like that — but ${he} begins to cry when ${he}`);
				if (canHear(slave)) {
					r.push(`hears you switch on`);
				} else if (canSee(slave)) {
					r.push(`sees you pull out`);
				} else {
					r.push(`feels the cool touch of`);
				}
				r.push(`an electric shaver. ${He} luxuriates in ${his} hair, flaunting it every chance ${he} gets; it's something of value in a bleak slave world and ${he} sobs as you shave it off ${him}. Afterward, ${he} sniffles and`);
				r.push(App.UI.DOM.makeElement("span", `looks at you in fear`, "gold"));
				r.push(`and`);
				r.push(App.UI.DOM.makeElement("span", `unhappiness`, "mediumorchid"));
				r.push(`when you rub ${his} newly bald scalp. Of course, there's always the body modification studio if you ever feel like ${he}'s earned ${his} hair back.`);
				slave.hStyle = "shaved";
				slave.hLength = 0;
			} else if (canDoAnal(slave) && (random(1, 100) < 10)) {
				r.push(`Sometimes, there's no need to be clever. The first indication ${he} gets that you've decided to train ${him} this week is when ${he} wakes suddenly in the middle of the night to the burning sensation of a`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`strap-on`);
				}
				r.push(`being shoved up ${his} ass. Not knowing what is happening, ${he} struggles, but since ${he} was already lying in ${his} bed you just lie on top of ${him} and press ${his} wriggling body into the sheets as you assrape ${him}. For the rest of the week, ${he} finds ${himself} grabbed and fucked. ${He} can't help but`);
				r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold"));
				r.push(`despite ${his}`);
				r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid"));
				r.push(VCheck.Anal(slave, 6));
			} else if (canDoVaginal(slave) && (random(1, 100) < 10)) {
				r.push(`Sometimes, there's no need to be clever. The first indication ${he} gets that you've decided to train ${him} this week is when ${he} wakes suddenly in the middle of the night to the filling sensation of a`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`strap-on`);
				}
				r.push(`being shoved up into ${his} pussy. Not knowing what is happening, ${he} struggles, but since ${he} was already lying in ${his} bed you just lie on top of ${him} and press ${his} wriggling body into the sheets as you rape ${him}. For the rest of the week, ${he} finds ${himself} grabbed and fucked. ${He} can't help but`);
				r.push(App.UI.DOM.makeElement("span", `become used to the abuse`, "gold"));
				r.push(`despite ${his}`);
				r.push(App.UI.DOM.makeElement("span", `resentment.`, "mediumorchid"));
				r.push(VCheck.Vaginal(slave, 6));
			} else {
				r.push(`${slave.slaveName} violently resists you whenever ${he} can. This cannot be permitted, so after a particularly severe bout of physical resistance, you decide to employ an old method of breaking a mind without damaging a body. You secure ${him} to a board and gently wash ${his} face with a wet cloth. ${He} spits in defiance, only to be surprised when you lower the board so that ${his} feet are higher than ${his} head. You tie the cloth around ${his} face. A thin stream of water onto the cloth produces all the feeling and none of the reality of a slow death by drowning. Waterboarding isn't much use for extracting information, but it works well for`);
				r.push(App.UI.DOM.makeElement("span", `slavebreaking.`, "gold"));
			}
			if (V.PC.skill.slaving >= 100) {
				r.push(`Your`);
				r.push(App.UI.DOM.makeElement("span", `slavebreaking experience`, ["skill", "player"]));
				r.push(`allows you to apply`);
				r.push(App.UI.DOM.makeElement("span", `exquisitely calibrated`, "gold"));
				r.push(`mental pressure.`);
				slave.trust -= 2;
			}
			if (slave.trust < -20 && slave.fetishKnown === 0) {
				r.push(`${He} is now fully broken;`);
				r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to exploring ${his} sexuality.`, "yellow"));
				pa.objective = "explore sexuality";
			} else if (slave.trust < -20) {
				r.push(`${He} is now fully broken;`);
				r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow"));
				pa.objective = "build devotion";
			} else if (slave.devotion > 20 && slave.fetishKnown === 0) {
				r.push(`${He} is now obedient and attentive;`);
				r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to exploring ${his} sexuality.`, "yellow"));
				pa.objective = "explore sexuality";
			} else if (slave.devotion > 20) {
				r.push(`${He} is now obedient and attentive;`);
				r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow"));
				pa.objective = "build devotion";
			}
			currentSlaveValue = 0.7;
			slave.training = 0;
			break;
		case "harshly break will":
			slave.devotion -= 5;
			slave.trust -= 10;
			healthDamage(slave, 1);
			if (slave.fetish === Fetish.MINDBROKEN) {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`${slave.slaveName}'s mind is broken. ${He} is a boring slave to torture, though ${his} body will still occasionally react to intense pain. No matter what you try, nothing really reaches ${his} destroyed soul. The agonies do`);
				r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
			} else if (slave.devotion < -90) {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`Old traditions should not be forgotten. The scourge is the oldest slavebreaking tool known to man, and to slave${girl}s who do not properly obey ${womenP}. For the whole week, whenever ${slave.slaveName} disobeys you or whenever the whim strikes, you bind ${him} securely and flog ${him} without mercy. You use a soft leather appliance and apply medical care afterward, so there will be no permanent scarring, but`);
				r.push(App.UI.DOM.makeElement("span", `${his} health is affected and the beatings leave ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
				r.push(`${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience.`, "gold"));
			} else if (slave.devotion < -50 && canDoAnal(slave)) {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`${slave.slaveName} is willing to physically defend ${himself} against sexual abuse. Training ${him} out of this rebelliousness is a nice sexual change of pace. For the entire week, whenever ${he} commits some minor sin, you fight ${him} into a state of physical submission and then sodomize ${him}. This usually requires an extended beating to render ${him} quiescent, followed by holding ${him} down so that ${his} struggles do not dislodge your`);
				if (V.PC.dick !== 0) {
					r.push(`cock`);
				} else {
					r.push(`strap-on`);
				}
				r.push(`from ${his} delightfully spasming butthole. ${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold"));
				r.push(`but the extreme stress`);
				r.push(App.UI.DOM.makeElement("span", `affects ${his} health, leaving ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
				r.push(VCheck.Anal(slave, 6));
			} else if (slave.scrotum > 0) {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`${slave.slaveName} has indefensible, obvious targets for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his}`);
				if (slave.dick) {
					r.push(`cock and`);
				}
				r.push(`balls are dangling defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple beatings to ${his}`);
				if (slave.dick) {
					r.push(`member and`);
				}
				r.push(`sack, while beating the rest of ${him} thoroughly. ${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold"));
				r.push(`but the beatings`);
				r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
			} else if (slave.dick > 0) {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`${slave.slaveName} has an indefensible, obvious target for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his} cock is dangling defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple beatings to ${his} member, while beating the rest of ${him} thoroughly. ${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold"));
				r.push(`but the beatings`);
				r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
			} else if (slave.clit > 0) {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`${slave.slaveName} has an indefensible, obvious target for harsh breaking. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that ${his} unusually large clit is visible and defenseless, and ${he} cannot move to avoid blows. You then indulge your inventiveness, applying clips, weights, and simple slaps to ${his} womanhood, while beating the rest of ${him} thoroughly. ${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold"));
				r.push(`but the beatings`);
				r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
			} else if (slave.nipples === "huge") {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`${slave.slaveName}'s nipples beg for punishment. Whenever ${he} falls short in the smallest way, you bind ${him} in such a way that breasts dangle, ${his} nipples are free and at your mercy, and ${he} can only move enough to cause ${his} boobs to sway erotically when ${he} flinches with pain. You then indulge your inventiveness, applying clips, weights, and simple abuse to ${his} nipples, while beating the rest of ${him} thoroughly. ${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold"));
				r.push(`but the beatings`);
				r.push(App.UI.DOM.makeElement("span", `affect ${his} health, leaving ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
			} else if (slave.anus > 0 && canDoAnal(slave)) {
				r.push(`You bind ${slave.slaveName} with the head of an uncomfortably large dildo just inside ${his} anus. The setup offers ${him} a choice: ${he} can either stand and have only tip up ${his} butt, or ${he} can take ${his} weight off ${his} legs, and take a massive phallus up the ass. You keep ${him} like this for hours on end. At the start ${he} tries to stand all the time. Then, ${he} tries to rest on it for short periods, but realizes that this up and down motion really just leads to ${him} assraping ${himself}. Finally, ${he} becomes so`);
				r.push(App.UI.DOM.makeElement("span", `tired and apathetic`, "red"));
				r.push(`that ${he} accepts having a dildo up the ass, and sits down. ${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold"));
				r.push(`but the extreme stress`);
				r.push(App.UI.DOM.makeElement("span", `affects ${his} health.`, ["health", "dec"]));
				slave.health.tired = Math.clamp(slave.health.tired + 20, 0, 1000);
			} else {
				slave.minorInjury = either("black eye", "bruise", "split lip");
				r.push(`The first time you force ${slave.slaveName} to please you this week, ${he} could be forgiven for thinking sexual abuse is to be ${his} sentence. By the end of the week ${he} remembers only fearing rape as a pleasant dream. This change is due to your program of roughly using ${him} whenever ${he} shows any sign of sleeping. You reward ${him} with a short doze now and then, but ${he} is slowly reduced to a nearly insensible state of`);
				r.push(App.UI.DOM.makeElement("span", `agonizing fatigue.`, "red"));
				r.push(`${He} is subjected to`);
				r.push(App.UI.DOM.makeElement("span", `immense mental pressure`, "mediumorchid"));
				r.push(App.UI.DOM.makeElement("span", `in favor of obedience,`, "gold"));
				r.push(`but the extreme stress and rough treatment`);
				r.push(App.UI.DOM.makeElement("span", `affect ${his} health and leave ${him} with a ${slave.minorInjury}.`, ["health", "dec"]));
				if (slave.health.tired < 120) {
					slave.health.tired = 120;
				}
			}
			if (slave.fetish !== Fetish.MINDBROKEN) {
				seed = random(1, 100);
				if (seed > 90) {
					r.push(`This abuse has shattered ${his} already-fragile self;`);
					r.push(App.UI.DOM.makeElement("span", `${his} mind has been broken.`, "red"));
					applyMindbroken(slave);
				} else if (seed > 80 && slave.behavioralFlaw !== "hates men" && slave.behavioralFlaw !== "hates women") {
					r.push(`This abuse has associated`);
					if (V.PC.dick !== 0) {
						r.push(`cocks and masculinity with pain in ${his} mind;`);
						r.push(App.UI.DOM.makeElement("span", `${he} now instinctively hates men.`, "red"));
						slave.behavioralFlaw = "hates men";
					} else {
						r.push(`pussies and femininity with pain in ${his} mind;`);
						r.push(App.UI.DOM.makeElement("span", `${he} now instinctively hates women.`, "red"));
						slave.behavioralFlaw = "hates women";
					}
				} else if (seed > 70 && slave.behavioralFlaw !== "odd") {
					r.push(`This abuse has changed ${him} a bit;`);
					r.push(App.UI.DOM.makeElement("span", `${he} has begun to act strangely.`, "red"));
					slave.behavioralFlaw = "odd";
				}
			}
			r.push(`A week of agony`);
			if (slave.trust > 20) {
				r.push(App.UI.DOM.makeElement("span", `reduces ${his} trust`, "gold"));
				r.push(`in you.`);
				slave.trust -= 10;
			} else {
				r.push(App.UI.DOM.makeElement("span", `encourages ${his} fear`, "gold"));
				r.push(`of you.`);
				slave.trust -= 10;
			}
			if (V.PC.skill.slaving >= 100) {
				r.push(`Your`);
				r.push(App.UI.DOM.makeElement("span", `slave-breaking experience`, ["skill", "player"]));
				r.push(`allows you to apply`);
				r.push(App.UI.DOM.makeElement("span", `exquisite agony`, "gold"));
				r.push(`without any increase in damage.`);
				slave.trust -= 5;
			}
			if (slave.trust < -20) {
				r.push(`${He} is now fully broken;`);
				r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow"));
				pa.objective = "build devotion";
			} else if (slave.devotion > 20) {
				r.push(`${He} is now obedient and attentive;`);
				r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow"));
				pa.objective = "build devotion";
			}
			currentSlaveValue = 1.4;
			slave.training = 0;
			break;
		case "fix behavioral flaw":
			if (slave.behavioralFlaw === "arrogant") {
				r.push(`${slave.slaveName} seems to think ${he}'s better than everyone else. Naturally, as ${his} owner you have the means to correct this sad misapprehension. As you train ${him} during the week, you ensure that ${he} submits to anyone and everyone. ${He} is rarely permitted to enjoy sex under your tutelage, but is instead required to use ${his} mouth and hands to get others off. ${He} cleans, washes, and serves.`);
				seX(slave, "oral", V.PC, "penetrative", 10);
			} else if (slave.behavioralFlaw === "bitchy") {
				r.push(`${slave.slaveName} always has a cutting remark ready. The more obedient ${he}'s feeling, the more ${he} directs them at people other than ${his} ${getWrittenTitle(slave)}, but it's still a serious problem. When you train ${him} this week, you keep a sharp ear on ${him}. Whenever ${he} bitches out, you require ${him} to promptly offer the target of ${his} pissiness the use of ${his} mouth. ${He}'ll either shut ${his} mouth or have it roughly filled.`);
				seX(slave, "oral", V.PC, "penetrative", 10);
			} else if (slave.behavioralFlaw === "odd") {
				r.push(`${slave.slaveName} is odd. ${He} behaves strangely, speaking randomly at times and doing things for no apparent reason. In earlier times this might have been considered 'adorable' or 'unique,' but in a slave it's just annoying. You punish ${him} severely whenever ${he} fails to do or say the right thing for the right reasons.`);
			} else if (slave.behavioralFlaw === "hates men") {
				r.push(`${slave.slaveName} does not like spending time around men. This is of course a huge obstacle to ${him} performing ${his} duties well. Breaking ${him} of this is an unusually difficult task,`);
				if (V.PC.dick !== 0) {
					r.push(`so you approach it subtly. You simply require ${him} to spend as much time as possible around you, eating, sleeping, and going about normal business. ${He} already understood what you were to your slaves, sexually; ${he} now is accustomed to who you are when your cock isn't pounding a nice hole.`);
				} else {
					r.push(`all the more so since you cannot use yourself as a teaching tool. Fortunately, there are any number of men coming and going as you do business, and it's trivial to force ${him} to rely on them for social contact.`);
				}
				seX(slave, "oral", V.PC, "penetrative", 10);
			} else if (slave.behavioralFlaw === "hates women") {
				r.push(`${slave.slaveName} does not like spending time around girls. This is of course a huge obstacle to ${him} performing ${his} duties well. Breaking ${him} of this is an unusually difficult task,`);
				if (V.PC.dick !== 0) {
					r.push(`all the more so since you cannot use your penis-equipped self as a teaching tool. Fortunately, there are any number of girls around, and it's trivial to force ${him} to rely on them for social contact.`);
				} else {
					r.push(`so you approach it subtly. You simply require ${him} to spend as much time as possible around you, eating, sleeping, and going about normal business. ${He} already understood what you were to your slaves, sexually; ${he} now is accustomed to who you are when you're not fucking.`);
				}
				seX(slave, "oral", V.PC, "penetrative", 10);
			} else if (slave.behavioralFlaw === "anorexic") {
				r.push(`${slave.slaveName} has an unreasonable, psychologically based belief that ${he} is too fat. This is a serious enough condition in the clinical sense that the usual routine of punishment will not affect it. Instead, you apply a regime of positive reinforcement: ${he} is given attention and approval for ${his} curves when they grow.`);
			} else if (slave.behavioralFlaw === "gluttonous") {
				r.push(`${slave.slaveName}'s diet is already closely controlled, but the impulse to overeat is strong in ${him} and like most gluttons ${he} manages to be quite cunning. You watch ${him} closely and administer harsh punishment to associate overeating with pain in ${his} mind.`);
			} else if (slave.behavioralFlaw === "liberated") {
				r.push(`${slave.slaveName} has not yet accepted that ${his} world has changed. You could wait for the weight of circumstances to bear it home to ${him}, but you accelerated the process by giving ${him} as many trivial orders as possible. ${He} is required to receive orders to perform the most humiliatingly obvious of tasks.`);
			} else if (slave.behavioralFlaw === "devout") {
				r.push(`${slave.slaveName} remains devoted to an old world faith that serves ${him} as a reservoir of mental resilience. You carefully select pressure points to break ${him} of this by forcing ${him} to violate ${his} faith's purity codes, constantly. ${He} is forced to eat, dress, and fuck in ways that convince ${him} that ${he} must either condemn ${himself} as an irredeemable sinner, or abandon ${his} beliefs.`);
			}
			slave.training += 40; // fixing is easier than softening
			if (slave.training < 100) {
				r.push(`You make progress, but ${he}'s the same at the end of the week.`);
			} else {
				slave.training = 0;
				r.push(`By the end of the week,`);
				r.push(App.UI.DOM.makeElement("span", `you break ${him} of ${his} bad habits.`, "green"));
				r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, ["hotpink"]));
				slave.behavioralFlaw = "none";
				slave.devotion += 4;
			}
			if (slave.fetishKnown !== 1) {
				if (slave.fetish === Fetish.SUBMISSIVE) {
					r.push(`${He} really takes to your close attention;`);
					r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, "pink"));
					(slave.fetishKnown = 1);
				} else if (slave.fetish === "cumslut") {
					r.push(`While you're giving ${his} personal attention, you discover by chance that`);
					r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, "pink"));
					(slave.fetishKnown = 1);
				} else if (slave.fetish === "masochist") {
					r.push(`While you're giving ${his} personal correction, you discover by chance that`);
					r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, "pink"));
					(slave.fetishKnown = 1);
				} else if (slave.fetish === "humiliation") {
					r.push(`While you're giving ${his} personal attention in public, you discover by chance that`);
					r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, "pink"));
					(slave.fetishKnown = 1);
				}
			}
			if (slave.behavioralFlaw === "none") {
				r.push(`With ${his} behavioral flaw trained out,`);
				if (slave.sexualFlaw === "none") {
					if (slave.devotion <= 20 && slave.trust >= -20) {
						r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to breaking ${his} will.`, "yellow"));
						pa.objective = "break will";
					} else {
						r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to fostering devotion.`, "yellow"));
						pa.objective = "build devotion";
					}
				} else {
					r.push(App.UI.DOM.makeElement("span", `${his} training assignment has defaulted to addressing ${his} sexual flaw.`, "yellow"));
					pa.objective = "fix sexual flaw";
				}
			}
			break;
		case "fix sexual flaw":
			switch (slave.sexualFlaw) {
				case "hates oral":
					r.push(`${slave.slaveName} has a powerful gag reflex. As a result, it's pretty unpleasant to receive oral sex from ${him}, no matter how hard ${he} tries. You apply various inventive techniques for addressing this, all of which involve requiring ${him} to repeatedly deepthroat some object or other.`);
					seX(slave, "oral", V.PC, "penetrative", 10);
					break;
				case "hates anal":
					if (canDoAnal(slave)) {
						r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up ${his} behind, and when you bore of that, you require ${him} to assfuck ${himself} with a dildo instead.`);
						r.push(VCheck.Anal(slave, 10));
					} else {
						r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities sex slave to hold. The best way to address this foolishness is by long practice, so you take every opportunity to toy with ${his} rear. The inability to actually penetrate ${his} ass hinders your efforts, however.`);
						slave.training -= 20; // more difficult training
					}
					break;
				case "hates penetration":
					if (slave.vagina > -1) {
						r.push(`${slave.slaveName} does not like sex. In earlier times, it was accepted and understood that some, particularly some women, had a low sex drive. No Free Cities sex slave is allowed to engage in such foolishness. It's a hard flaw to fix, and for now you substitute obedience for honest enjoyment, and just get ${him} used to strong stimulation without putting anything in ${him}.`);
					} else if (canDoAnal(slave)) {
						r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. The best way to address this foolishness is by long practice, so you take every opportunity to stick things up ${his} behind, and when you bore of that, you require ${him} to assfuck ${himself} instead.`);
						r.push(VCheck.Anal(slave, 10));
					} else {
						r.push(`${slave.slaveName} does not like it up the butt. ${He} views ${his} rectum as a dirty place that should not be involved in sex. Naturally, this is an unacceptable view for a Free Cities slut to hold. It's a hard flaw to fix when you can't introduce ${his} anus to things, but for now you substitute obedience for honest enjoyment, and just get ${him} used to strong stimulation without putting anything in ${him}.`);
					}
					break;
				case "apathetic":
					r.push(`You are well practiced at forcing slaves to get you off or suffer punishment. To address ${slave.slaveName}'s sexual apathy, you adapt the method by requiring ${him} to work ${his} mouth under your desk while you do business. ${He} does all the work, start to finish, and ${he} does it well if ${he} wants to avoid pain.`);
					seX(slave, "oral", V.PC, "penetrative", 10);
					break;
				case "crude":
					r.push(`${slave.slaveName} does not pay enough attention to standards when having sex, leading to crude comments and unsexy noises. To remedy this, you have ${him} give you oral regularly: a sacrifice, but you make sacrifices for your slaves' improvement. Oral sex can be difficult to make elegant, but you work with ${him} to make it as pretty as possible, and spank ${him} cruelly when ${he} fails.`);
					seX(slave, "oral", V.PC, "penetrative", 10);
					break;
				case "judgemental":
					r.push(`${slave.slaveName} has a bad habit of being sexually judgemental, belittling anyone who doesn't live up to ${his} pretensions of standards. To ${his} regret, ${he} frequently implies that ${he} prefers partners with big dicks: regret, because whenever ${he}'s caught doing this, you have ${him} brought to you and`);
					if (V.PC.dick !== 0) {
						r.push(`apply your big dick`);
					} else {
						r.push(`apply a big dildo`);
					}
					if (slave.anus > 0 && canDoAnal(slave)) {
						r.push(`to ${his} anus without mercy.`);
						r.push(VCheck.Anal(slave, 10));
					} else {
						r.push(`to ${his} gagging throat.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
					}
					break;
				case "shamefast":
					r.push(`Fortunately, shamefastness is a simple problem to break. Whenever you feel the inclination, you strip ${slave.slaveName} naked, drag ${him} out into whatever public space catches your fancy, and force ${him} to`);
					if (V.PC.dick !== 0) {
						r.push(`suck your dick.`);
					} else {
						r.push(`eat you out.`);
					}
					r.push(`To make sure ${he}'s really working over ${his} shame despite having ${his} face buried against you, you force ${him} to spread ${his} buttocks to show off ${his} asshole while ${he}`);
					if (V.PC.dick !== 0) {
						r.push(`sucks.`);
					} else {
						r.push(`licks you.`);
					}
					seX(slave, "oral", V.PC, "penetrative", 10);
					break;
				case "idealistic":
					r.push(`${slave.slaveName} still sees sex in a naïve light, hoping to be romanced, teased to arousal, and asked permission. This might be an annoyingly ignorant outlook if it wasn't so amusing to break. By the tenth time you slap ${his} ${slave.skin} face at the slightest hesitation to`);
					if (V.PC.dick !== 0) {
						r.push(`suck your cock,`);
					} else {
						r.push(`eat your pussy,`);
					}
					r.push(`${his} illusions are guttering low.`);
					seX(slave, "oral", V.PC, "penetrative", 10);
					break;
				case "repressed":
					r.push(`${slave.slaveName}'s innocence and hesitations about sex are unlikely to survive much longer, but you decide to hurry the process along by making ${him}`);
					if (V.PC.dick !== 0) {
						r.push(`eat dick`);
					} else {
						r.push(`eat your pussy`);
					}
					r.push(`while masturbating. ${He}'s repressed enough that masturbation is still a partial punishment for ${him}, but ${he} usually gets ${himself} off anyway, shaking with release and sobbing with crushed illusions.`);
					seX(slave, "oral", V.PC, "penetrative", 10);
					break;
				case "cum addict":
					r.push(`${slave.slaveName} is utterly addicted to cum. You keep ${him} in your office whenever you can, and subject ${him} to a strict sexual diet of`);
					if (canDoVaginal(slave)) {
						r.push(`sex,`);
					} else if (canDoAnal(slave)) {
						r.push(`buttsex,`);
					} else {
						r.push(`breast play,`);
					}
					r.push(`no oral allowed, no matter how much ${he} begs to be permitted to`);
					if (V.PC.dick !== 0) {
						r.push(`suck you off.`);
					} else {
						r.push(`eat you out.`);
					}
					if (canDoVaginal(slave)) {
						VCheck.Vaginal(slave, 10);
					} else if (canDoAnal(slave)) {
						VCheck.Anal(slave, 10);
					}
					break;
				case "anal addict":
					r.push(`${slave.slaveName} is utterly addicted to buttsex. You keep ${him} in your office whenever you can, and subject ${him} to a strict sexual diet of`);
					if (canDoVaginal(slave)) {
						r.push(`vanilla sex,`);
					} else {
						r.push(`oral and manual intercourse,`);
					}
					r.push(`no anal allowed, no matter how much ${he} begs you to stick something, anything, up ${his} ass.`);
					if (slave.vagina > -1 && canDoVaginal(slave)) {
						VCheck.Vaginal(slave, 10);
					} else {
						seX(slave, "oral", V.PC, "penetrative", 10);
					}
					break;
				case "attention whore":
					r.push(`${slave.slaveName} is an obnoxious attention whore. You keep ${him} in your office and make love to ${him} whenever you can, but only whenever you're alone in the office. You even instruct ${V.assistant.name} not to bother you while the slave is receiving ${his} therapy.`);
					if (canDoVaginal(slave)) {
						VCheck.Vaginal(slave, 10);
					} else if (canDoAnal(slave)) {
						VCheck.Anal(slave, 10);
					}
					break;
				case "breast growth":
					r.push(`${slave.slaveName} is completely devoted to ${his} own tits. You keep ${him} in your office whenever you can,`);
					if (canDoVaginal(slave)) {
						r.push(`fucking ${him}`);
					} else if (canDoAnal(slave)) {
						r.push(`fucking ${his} ass`);
					} else {
						r.push(`fucking ${his} face`);
					}
					r.push(`in positions that offer ${his} boobs no stimulation at all. When you're not broadening ${his} sexual horizons, ${he}'s restrained to keep ${him} from touching ${his} own nipples, despite piteous begging.`);
					if (canDoVaginal(slave)) {
						VCheck.Vaginal(slave, 10);
					} else if (canDoAnal(slave)) {
						VCheck.Anal(slave, 10);
					}
					break;
				case "abusive":
				case "malicious":
					r.push(`${slave.slaveName} seems to have forgotten that ${he}'s your bitch, so you remind ${him}. You keep ${him} in your office whenever ${he}'s not otherwise occupied, and hold ${him} down and fuck ${him} whenever you feel like it. It's been a long time since ${he} was on the bottom this regularly.`);
					if (canDoVaginal(slave)) {
						VCheck.Vaginal(slave, 10);
					} else if (canDoAnal(slave)) {
						VCheck.Anal(slave, 10);
					}
					break;
				case "self hating":
					r.push(`${slave.slaveName} hates ${himself} much more than is normal for a well trained sex slave, to the point where ${he} actively seeks out unhealthy and destructive assignments. You build up ${his} sexual self esteem with a steady diet of`);
					if (canDoVaginal(slave)) {
						r.push(`missionary lovemaking,`);
					} else if (canDoAnal(slave)) {
						r.push(`gentle anal loving,`);
					} else {
						r.push(`gentle oral sex,`);
					}
					r.push(`and make sure to praise ${him} and keep ${his} spirits up as much as you can.`);
					if (canDoVaginal(slave)) {
						VCheck.Vaginal(slave, 10);
					} else if (canDoAnal(slave)) {
						VCheck.Anal(slave, 10);
					}
					break;
				case "neglectful":
					r.push(`${slave.slaveName} has given up on ${his} own sexual pleasure to an extent, focusing only on getting others off. You keep ${him} in your office and play with ${him} regularly, making a game of getting ${him} off as often as possible. You're careful to use other slaves for your own pleasure.`);
					if (canDoVaginal(slave)) {
						VCheck.Vaginal(slave, 10);
					} else if (canDoAnal(slave)) {
						VCheck.Anal(slave, 10);
					}
					break;
				case "breeder":
					r.push(`${slave.slaveName} has become so sexually obsessed with pregnancy that impregnation holds less interest for ${him} than being pregnant.`);
					if (slave.pregKnown === 1) {
						r.push(`Since ${he}'s pregnant, getting ${him} out of this perversion is more difficult than just fucking ${him}.`);
					} else if (!canDoAnal(slave)) {
						r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy.`);
						r.push(`Since ${his} ass is off-limits, you address the situation by fucking ${his} throat, and making sure ${he} enjoys it, too.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
					} else if (slave.mpreg === 1) {
						r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy, which, in ${his} case, is not ${his} fertile ass.`);
						r.push(`So, you address the situation by fucking ${his} throat, and making sure ${he} enjoys it, too.`);
						seX(slave, "oral", V.PC, "penetrative", 10);
					} else {
						r.push(`Fortunately, all slaves have a convenient hole in which they can be fucked without even the slightest danger of pregnancy.`);
						r.push(`So, you address the situation by fucking ${him} up the ass, and making sure ${he} gets off to it, too.`);
						r.push(VCheck.Anal(slave, 10));
					}
			}
			slave.training += 40; // fixing is easier than softening
			if (slave.training < 100) {
				r.push(`You make progress, but ${he}'s the same at the end of the week.`);
			} else {
				slave.training = 0;
				r.push(`By the end of the week,`);
				r.push(App.UI.DOM.makeElement("span", `you break ${him} of ${his} bad habits.`, "green"));
				r.push(App.UI.DOM.makeElement("span", `${His} obedience has increased.`, ["hotpink"]));
				slave.sexualFlaw = "none";
				slave.devotion += 4;
			}
			if (slave.fetishKnown !== 1) {
				if (slave.fetish === Fetish.SUBMISSIVE) {
					r.push(`${He} really takes to your close attention;`);
					r.push(App.UI.DOM.makeElement("span", `${he}'s a natural submissive!`, "pink"));
					(slave.fetishKnown = 1);
				} else if (slave.fetish === "cumslut") {
					r.push(`While you're giving ${him} personal attention, you discover by chance that`);
					r.push(App.UI.DOM.makeElement("span", `${he} has an oral fixation!`, "pink"));
					(slave.fetishKnown = 1);
				} else if (slave.fetish === "masochist") {
					r.push(`While you're giving ${him} personal correction, you discover by chance that`);
					r.push(App.UI.DOM.makeElement("span", `${he} likes pain!`, "pink"));
					(slave.fetishKnown = 1);
				} else if (slave.fetish === "humiliation") {
					r.push(`While you're giving ${him} personal attention in public, you discover by chance that`);
					r.push(App.UI.DOM.makeElement("span", `${he} likes humiliation!`, "pink"));
					(slave.fetishKnown = 1);
				}
			}
			if (slave.sexualFlaw === "none") {
				r.push(`With ${his} sexual flaw trained out,`);
				coloredText = [];
				coloredText.push(`${his} training assignment has defaulted to`);
				if (slave.behavioralFlaw === "none") {
					if (slave.devotion <= 20 && slave.trust >= -20) {
						coloredText.push(`breaking ${his} will.`);
						pa.objective = "break will";
					} else {
						coloredText.push(`fostering devotion.`);
						pa.objective = "build devotion";
					}
				} else {
					coloredText.push(`addressing ${his} behavioral flaw.`);
					pa.objective = "fix behavioral flaw";
				}
				r.push(App.UI.DOM.makeElement("span", coloredText.join(" "), "yellow"));
			}
			break;
		case "explore sexuality":
			slave.attrKnown = 1;
			r.push(`You set about investigating ${his} sexuality.`);
			if (slave.devotion < -20 && slave.trust >= -20) {
				r.push(`${He}'s so resistant that you have to fill ${him} with psychoactive drugs and restrain ${him} painfully in order to learn anything. This abuse`);
				r.push(App.UI.DOM.makeElement("span", `increases ${his} hatred.`, "mediumorchid"));
				slave.devotion -= 5;
			} else if (slave.devotion <= 20) {
				r.push(`You anticipate that ${he} won't be sufficiently compliant with some of the extreme practices you mean to investigate, so you give ${him} a hearty dose of aphrodisiacs and place ${him} in bondage gear. ${He} isn't happy, but soon ${he}'s too horny to care.`);
			} else {
				r.push(`${He}'s obedient enough that there is no trouble with any of the sexual kinks you subject ${him} to. Some ${he} likes more than others, but when ${he}'s not enjoying ${himself}, ${he} grits ${his} teeth and concentrates on obeying you.`);
			}
			r.push(`You start off by making ${him} view a medley of pornography while ${V.assistant.name} monitors ${him} for arousal. It seems ${he} is`);
			if (slave.attrXY <= 5) {
				r.push(App.UI.DOM.makeElement("span", `disgusted by men`, "red"));
			} else if (slave.attrXY <= 15) {
				r.push(App.UI.DOM.makeElement("span", `turned off by men`, "red"));
			} else if (slave.attrXY <= 35) {
				r.push(App.UI.DOM.makeElement("span", `not attracted to men`, "red"));
			} else if (slave.attrXY <= 65) {
				r.push(`indifferent to men,`);
			} else if (slave.attrXY <= 85) {
				r.push(App.UI.DOM.makeElement("span", `attracted to men`, "green"));
			} else if (slave.attrXY <= 95) {
				r.push(App.UI.DOM.makeElement("span", `aroused by men`, "green"));
			} else {
				r.push(App.UI.DOM.makeElement("span", `passionate about men`, "green"));
			}
			r.push(`and`);
			if (slave.attrXX <= 5) {
				r.push(App.UI.DOM.makeElement("span", `disgusted by women.`, "red"));
			} else if (slave.attrXX <= 15) {
				r.push(App.UI.DOM.makeElement("span", `turned off by women.`, "red"));
			} else if (slave.attrXX <= 35) {
				r.push(App.UI.DOM.makeElement("span", `not attracted to women.`, "red"));
			} else if (slave.attrXX <= 65) {
				r.push(`indifferent to women.`);
			} else if (slave.attrXX <= 85) {
				r.push(App.UI.DOM.makeElement("span", `attracted to women.`, "green"));
			} else if (slave.attrXX <= 95) {
				r.push(App.UI.DOM.makeElement("span", `aroused by women.`, "green"));
			} else {
				r.push(App.UI.DOM.makeElement("span", `passionate about women.`, "green"));
			}
			if (slave.fetishKnown !== 1) {
				slave.fetishKnown = 1;
				r.push(`You then give ${him} a good exploratory fondle. You play with ${his} nipples and each of ${his} holes and gauge ${his} reaction.`);
				if (slave.fetish === "boobs") {
					r.push(`You've barely touched ${his} nipples before ${he} moans. After some experimentation, it becomes clear that ${his} nipples might as well be a pair of slightly less sensitive`);
					if (slave.nipples === "fuckable") {
						r.push(`pussies.`);
					} else {
						r.push(`clits.`);
					}
					r.push(`Finding ${his} mammary fixation with you has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.fetish === "buttslut") {
					if (slave.vagina >= 0) {
						r.push(`When you move from fingering ${his} pussy to ${his} asshole,`);
					} else {
						r.push(`When you move from fondling ${his} mouth to ${his} asshole,`);
					}
					r.push(`you've barely touched ${his} butt before ${he} comes explosively. After some experimentation, it becomes clear that ${his} g-spot might as well be located up ${his} ass. Finding ${his} anal fixation with you has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} shows no real reaction when you move your fingers from hole to hole, because ${he} seems to react with arousal to fingers in any of them.`);
				} else {
					r.push(`Nothing unusual happens.`);
				}
				r.push(`Next, you demand extreme submission from ${him}. You make ${him} change into bondage gear that blinds ${him}, restricts ${his} movement, forces ${him} to present ${his} breasts uncomfortably, and holds vibrators against ${him}. Thus attired, ${he} is forced to serve you in whatever petty ways occur to you.`);
				if (slave.fetish === Fetish.SUBMISSIVE) {
					r.push(`During the first hour of this treatment, ${he} cums hard against the vibrators. ${He}'s a natural submissive! Discovering this about ${himself} under your hands has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} complies, showing the same enthusiasm for this as for other sex.`);
				} else {
					r.push(`${He} complies, but ${he}'s not a natural submissive.`);
				}
				r.push(`Before you let ${him} out of the extreme bondage, you rain a series of light blows across ${his} nipples and buttocks.`);
				if (slave.fetish === "masochist") {
					r.push(`${He} almost orgasms at the stinging pain. ${He}'s a masochist! This discovery has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} enjoys the pain play, but ${he} seems to enjoy everything you try.`);
				} else {
					r.push(`${He} struggles and tries to avoid the blows.`);
				}
				App.Events.addNode(el, r, "div", "indent");
				r = [];
				r.push(`The next day, ${he} continues to accompany you. Whenever cum is involved in your day's affairs in any way, you require ${him} to clean it up with ${his} mouth.`);
				if (slave.fetish === "cumslut") {
					r.push(`${He} enjoys this treatment. ${He}'s a cumslut! Discovering this about ${himself} under your hands has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} enjoys using ${his} mouth, but no more than other kinds of sexual activity.`);
				} else {
					r.push(`If ${he} had any special regard for cum, you'd know it, and ${he} doesn't.`);
				}
				const {himU, hisU, girlU} = getNonlocalPronouns(0).appendSuffix('U');
				r.push(`You carefully watch ${his} reaction as you let ${him} spend a short time relaxing with a pregnant slave.`);
				if (slave.fetish === "pregnancy") {
					r.push(`${He}'s fascinated. ${He} fetishizes fertility! Discovering this with you has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} spends most of the rest ogling the pregnant slave's boobs.`);
				} else {
					r.push(`${He} simply enjoys the rest.`);
				}
				r.push(`You restrain the pregnant slave and administer a brief beating across ${hisU} bare buttocks, ensuring that you cause enough pain to produce a few tears, a bit of begging, and some struggling.`);
				if (slave.fetish === "sadist") {
					r.push(`${He}'s almost painfully aroused. ${He}'s titillated by the idea of causing pain! Discovering this about ${himself} under your direction has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} enjoys watching the poor pregnant slave wriggle, but ${he}'s watching ${hisU} butt rather than the beating.`);
				} else {
					r.push(`${He}'s a bit disturbed by the`);
					if (canSee(slave)) {
						r.push(`sight`);
					} else if (canHear(slave)) {
						r.push(`sound`);
					} else {
						r.push(`idea`);
					}
					r.push(`of you punishing the pregnant ${girlU}.`);
				}
				r.push(`Before letting the poor pregnant slave go, you require ${slave.slaveName} to add a blindfold to the restraints.`);
				if (slave.fetish === "dom") {
					r.push(`${He} seems to really enjoy blindfolding the poor ${girlU}, reassuring ${himU} as ${he} does. ${He}'s a natural sexual top! Discovering this about ${himself} under your direction has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} enjoys getting closer to the slave, mostly so ${he} can give ${hisU} pregnant pussy a thorough grope.`);
				} else {
					r.push(`${He} just follows orders.`);
				}
				r.push(`Lastly, you place ${him} in a special room in your penthouse filled with live video equipment. They get to see ${him} groped, deepthroated, facialed, teased, and tortured.`);
				if (slave.fetish === "humiliation") {
					r.push(`The more viewers ${he} gets, the harder ${he} comes. ${He}'s a slut for humiliation! Discovering this about ${himself} under your hands has`);
					r.push(App.UI.DOM.makeElement("span", `increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 4;
				} else if (slave.energy > 95) {
					r.push(`${He} enjoys showing off sexually, but focuses on the sex first. ${He} got off on everything, and is clearly a nympho. Discovering this about ${himself} under your hands has`);
					r.push(App.UI.DOM.makeElement("span", `greatly increased ${his} devotion to you.`, ["hotpink"]));
					slave.devotion += 9;
				} else {
					r.push(`${He} gets through it, but ${he} doesn't seem to enjoy`);
					if (canSee(slave)) {
						r.push(`seeing ${his} audience on the screen.`);
					} else if (canHear(slave)) {
						r.push(`hearing ${his} jeering audience on the screen.`);
					} else {
						r.push(`the feeling of being watched.`);
					}
				}
			} else {
				r.push(`You already know that ${he}`);
				switch (slave.fetish) {
					case "buttslut":
					case "cumslut":
					case "dom":
					case "masochist":
					case "sadist":
					case "submissive":
						r.push(`is a`);
						r.push(App.UI.DOM.makeElement("span", `${slave.fetish},`, "coral"));
						break;
					case Fetish.MINDBROKEN:
						r.push(`is`);
						r.push(App.UI.DOM.makeElement("span", `mindbroken,`, "red"));
						break;
					case "boobs":
					case "humiliation":
					case "pregnancy":
						r.push(`loves`);
						r.push(App.UI.DOM.makeElement("span", `${slave.fetish},`, "coral"));
						break;
					default:
						r.push(`lacks a fetish,`);
				}
				r.push(`so your investigation is complete.`);
			}
			r.push(basicTrainingDefaulter(slave));
			break;
		case "induce arrogance":
			r.push(`Since you've decided to incite ${him} to arrogance, you praise ${him} effusively, and give orders that others are to do so as well. Other slaves are punished for things ${he}'s allowed to get away with.`);
			r.push(induceFlawLenityEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} isn't seriously affected; you'll have to be more subtle next week.`);
			} else {
				slave.training = 0;
				r.push(`${He} begins to think ${himself} special, and is now`);
				r.push(App.UI.DOM.makeElement("span", `arrogant.`, "red"));
				slave.behavioralFlaw = "arrogant";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce bitchiness":
			r.push(`Since you've decided to induce ${him} to bitchiness, you keep ${him} in your office and induce ${him} to criticize other slaves, rewarding ${him} when ${he}'s especially catty.`);
			r.push(induceFlawLenityEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} goes along, but remains cautious and will need more practice.`);
			} else {
				r.push(`${He} starts making`);
				r.push(App.UI.DOM.makeElement("span", `bitchy`, "red"));
				r.push(`remarks without being prompted.`);
				slave.behavioralFlaw = "bitchy";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce odd behavior":
			r.push(`Since you've decided to abuse ${him} into odd behavior, you target ${him} for a campaign of surprise sex. You constantly ambush ${him}, shove ${him} onto the ground, and fuck ${him}. Sometimes ${he} wakes up from bad dreams to find you penetrating ${him}.`);
			r.push(induceFlawAbuseEffects(slave));
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to tolerate the abuse.`);
			} else {
				r.push(`${He} starts`);
				r.push(App.UI.DOM.makeElement("span", `behaving oddly,`, "red"));
				r.push(`jumping at noises and mumbling to ${himself}.`);
				slave.behavioralFlaw = "odd";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce hatred of men":
			r.push(`In order to make ${him} hate men, you sometimes simply`);
			if (V.PC.dick !== 0) {
				r.push(`stick your dick in ${him} without asking,`);
			} else {
				r.push(`stuff a strap-on inside ${him} without asking,`);
			}
			r.push(`and sometimes force shockingly juvenile pranks on ${him}. ${He} is regularly smacked in the face with floppy dildos.`);
			r.push(induceFlawAbuseEffects(slave));
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			if (slave.training < 100) {
				r.push(`${He} focuses more on you than on the masculine aspects of this. You'll need to be more subtle next week.`);
			} else {
				r.push(`You notice ${him} starting to`);
				r.push(App.UI.DOM.makeElement("span", `shoot hateful glances`, "red"));
				r.push(`at any men ${he} sees.`);
				slave.behavioralFlaw = "hates men";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce hatred of women":
			r.push(`In order to make ${him} hate women, you keep ${him} in your office when ${he}'s not otherwise occupied, and`);
			if (V.PC.vagina === -1) {
				r.push(`make ${him} eat other slaves out`);
			} else {
				r.push(`sit on ${his} face`);
			}
			r.push(`until ${he}'s thoroughly sick of pussy.`);
			r.push(induceFlawAbuseEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} focuses more on you than on the feminine aspects of this. You'll need to be more subtle next week.`);
			} else {
				r.push(`You notice ${him} starting to`);
				r.push(App.UI.DOM.makeElement("span", `shoot hateful glances`, "red"));
				r.push(`at any vaginas ${he} sees.`);
				slave.behavioralFlaw = "hates women";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce gluttony":
			r.push(`Inducing gluttony is harder than inducing anorexia; you force ${him} to orgasm when ${he}'s eating, and praise ${him} effusively when ${he} gains weight. You also provide ${him} with ample rations for stress eating.`);
			slave.training -= 20; // more difficult training
			if (slave.training < 100) {
				r.push(`${He} eats when ordered, but isn't deeply affected. ${He}'ll need more practice being a pig.`);
			} else {
				r.push(`You notice ${him} starting to`);
				r.push(App.UI.DOM.makeElement("span", `enjoy eating`, "red"));
				r.push(`for its own sake, even when ${he}'s not hungry.`);
				slave.behavioralFlaw = "gluttonous";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce anorexia":
			r.push(`You criticize ${him} cruelly whenever ${he} eats, and praise thinner slaves to ${his} face at every opportunity.`);
			r.push(induceFlawAbuseEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} continues consuming ${his} rations when ordered, and will need further training.`);
			} else {
				r.push(`${He} begins to`);
				r.push(App.UI.DOM.makeElement("span", `eat only when repeatedly ordered to.`, "red"));
				slave.behavioralFlaw = "anorexic";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce religious devotion":
			r.push(`You direct a campaign of abuse and threats at ${him}, and surreptitiously ensure that a little religious text from ${his} home country finds its way into a hiding place in ${his} living area.`);
			r.push(induceFlawAbuseEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} keeps ${his} head down and shows no sign of religious introspection, at least this week.`);
			} else {
				r.push(`${He} begins to read it when ${he} thinks ${he}'s alone, and`);
				r.push(App.UI.DOM.makeElement("span", `talks to God`, "red"));
				r.push(`when ${he} thinks only He is listening.`);
				slave.behavioralFlaw = "devout";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce liberation":
			r.push(`You direct a campaign of abuse and threats at ${him}, making sure to threaten ${him} with the absolute worst of slavery in your arcology. You also arrange for ${him} to witness other citizen's slaves in situations that aren't much fun.`);
			r.push(induceFlawAbuseEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to endure the abuse, unknowingly condemning ${himself} to more.`);
			} else {
				r.push(`A deep`);
				r.push(App.UI.DOM.makeElement("span", `anger about slavery`, "red"));
				r.push(`builds within ${him}.`);
				slave.behavioralFlaw = "liberated";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce hatred of oral":
			r.push(`Since you've decided to force ${him} to dislike oral sex, you're forced to use a complicated and refined slave breaking technique: constantly raping ${his} face.`);
			r.push(induceFlawAbuseEffects(slave));
			seX(slave, "oral", V.PC, "penetrative", 10);
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to comply with the oral abuse, unknowingly condemning ${himself} to more.`);
			} else {
				r.push(`After gagging enough, ${he} finally starts to`);
				r.push(App.UI.DOM.makeElement("span", `hate oral.`, "red"));
				slave.sexualFlaw = "hates oral";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce hatred of anal":
			r.push(`Since you've decided to force ${him} to dislike anal sex, you're forced to use a complicated and refined slave breaking technique: constantly raping ${his} ass.`);
			if (!canDoAnal(slave)) {
				r.push(`Every time you catch ${him} with ${his} chastity off, you're there to penetrate ${his} rectum.`);
			}
			r.push(induceFlawAbuseEffects(slave));
			r.push(VCheck.Anal(slave, 10));
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to comply with your abuse of ${his} butthole, unknowingly condemning ${himself} to more assrape.`);
			} else {
				r.push(`After feeling ${his} poor sphincter grow sorer and sorer, ${he} starts to`);
				r.push(App.UI.DOM.makeElement("span", `hate anal.`, "red"));
				slave.sexualFlaw = "hates anal";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce hatred of penetration":
			r.push(`Since you've decided to force ${him} to dislike penetration, you're forced to use a complicated and refined slave breaking technique: constantly raping ${him}.`);
			r.push(induceFlawAbuseEffects(slave));
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to comply with your abuse, unknowingly condemning ${himself} to more of it.`);
			} else {
				r.push(`After feeling ${his} poor holes grow sorer and sorer, ${he} starts to`);
				r.push(App.UI.DOM.makeElement("span", `hate getting fucked.`, "red"));
				slave.sexualFlaw = "hates penetration";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce shame":
			r.push(`Since you've decided to force shame on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied, and heap derision on ${him} at every opportunity, even inviting visitors to join you in chats about how unattractive and worthless ${he} is.`);
			r.push(induceFlawAbuseEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to keep ${his} chin up, unknowingly condemning ${himself} to more of this abuse.`);
			} else {
				r.push(`${He} wants nothing more than to hide in corner and cry, and is now`);
				r.push(App.UI.DOM.makeElement("span", `shamefast.`, "red"));
				slave.sexualFlaw = "shamefast";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce sexual idealism":
			r.push(`Since you've decided to induce ${him} to sexual idealism, you keep ${him} in your office, and when the two of you are all alone, gossip with ${him} about other slaves and even citizens. You do your best to encourage ${him} to believe absurdities.`);
			r.push(induceFlawLenityEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} doesn't know what to make of this; you'll have to keep at it.`);
			} else {
				r.push(`${He} follows along, and is now`);
				r.push(App.UI.DOM.makeElement("span", `sexually idealistic.`, "red"));
				slave.sexualFlaw = "idealistic";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce sexual repression":
			r.push(`Since you've decided to force sexual repression on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied. You use the monitoring systems to reveal ${his} sexual arousal whenever it appears, and castigate and punish ${him} for it.`);
			r.push(induceFlawAbuseEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to keep ${his} chin up, unknowingly condemning ${himself} to more of this abuse.`);
			} else {
				r.push(`${He} desperately tries to avoid even thinking about subjects that get ${him} punished, and is now`);
				r.push(App.UI.DOM.makeElement("span", `sexually repressed.`, "red"));
				slave.sexualFlaw = "repressed";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce sexual apathy":
			r.push(`Since you've decided to force sexual apathy on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied. You use ${him} regularly, and punish ${him} whenever ${he} shows any sign of enjoyment.`);
			r.push(induceFlawAbuseEffects(slave));
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			if (slave.training < 100) {
				r.push(`${He} continues to experience arousal when fucked, and will need more of this treatment.`);
			} else {
				r.push(`${He} desperately tries to avoid arousal, and is now`);
				r.push(App.UI.DOM.makeElement("span", `sexually apathetic.`, "red"));
				slave.sexualFlaw = "apathetic";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce crudity":
			r.push(`Since you've decided to force sexual crudeness on ${him}, you keep ${him} in your office whenever ${he}'s not otherwise occupied, and degrade ${him} cruelly. You relax the normal cleanliness rules, and require ${him} to leave ${his} used holes as they are until ${he}'s too disgusting to fuck.`);
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			r.push(induceFlawAbuseEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} does ${his} best to tolerate the unclean feelings, condemning ${himself} to more of this.`);
			} else {
				r.push(`${He} slowly stops caring, and is now`);
				r.push(App.UI.DOM.makeElement("span", `sexually crude.`, "red"));
				slave.sexualFlaw = "crude";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce judgement":
			r.push(`Since you've decided to make ${him} sexually judgemental, you keep ${him} in your office and fuck ${him},`);
			if (V.PC.dick !== 0) {
				r.push(`praising ${him} whenever ${he} takes your big dick well.`);
			} else {
				r.push(`using a huge strap-on on ${him} and praising ${him} when ${he} takes it like a good ${girl}.`);
			}
			r.push(induceFlawLenityEffects(slave));
			if (slave.training < 100) {
				r.push(`${He} writes this off as bravado, and will need more training.`);
			} else {
				r.push(`${He} starts to consider ${himself} reserved for special sexual treatment, and is now`);
				r.push(App.UI.DOM.makeElement("span", `sexually judgemental.`, "red"));
				slave.sexualFlaw = "judgemental";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce cum addiction":
			r.push(`The cumslut is quite pleased when you order ${him} to stay in your office whenever ${he} can for use as one of your personal oral toys. You carefully limit ${his} orgasms to when`);
			if (V.PC.dick !== 0) {
				r.push(`you're blowing your load down ${his} throat,`);
			} else {
				r.push(`${he}'s swallowing your pussyjuice,`);
			}
			r.push(`and make ${his} oral adventures predictably regular.`);
			seX(slave, "oral", V.PC, "penetrative", 10);
			if (slave.training < 100) {
				r.push(`${He} enjoys giving you lots of oral, but will need more training to develop psychological addiction to it.`);
			} else {
				r.push(`${He} begins to develop a psychological`);
				r.push(App.UI.DOM.makeElement("span", `addiction to cum.`, "yellow"));
				slave.sexualFlaw = "cum addict";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce anal addiction":
			r.push(`The buttslut is quite pleased when you order ${him} to stay in your office`);
			if (!canDoAnal(slave)) {
				r.push(`and remove ${his} chastity`);
			}
			r.push(`whenever ${he} can for use as one of your personal anal toys. You make ${his} anal orgasms predictably regular, doing your best to inculcate reliance on them.`);
			r.push(VCheck.Anal(slave, 10));
			if (slave.training < 100) {
				r.push(`${He} enjoys all the anal attention, but will need more training to develop psychological addiction to buttsex.`);
			} else {
				r.push(`${He} begins to develop a psychological`);
				r.push(App.UI.DOM.makeElement("span", `addiction to anal sex.`, "yellow"));
				slave.sexualFlaw = "anal addict";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce attention whoring":
			r.push(`The humiliation slut is quite pleased when you order ${him} to stay in your office whenever ${he} can, and fucking ${him} whenever other slaves are present. You do your best to focus ${his} attention on how the others react to the spectacle.`);
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			if (slave.training < 100) {
				r.push(`${He} enjoys all the humiliation, but will need more training to become a true attention whore.`);
			} else {
				r.push(`${He} becomes a`);
				r.push(App.UI.DOM.makeElement("span", `true attention whore,`, "yellow"));
				r.push(`caring more about the spectators than the sex.`);
				slave.sexualFlaw = "attention whore";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce breast growth obsession":
			r.push(`You inspect ${his} breasts multiple times a day, and praise ${him} effusively when they grow at all. You treat it as though it were something ${he} could control personally.`);
			if (slave.training < 100) {
				r.push(`${He} enjoys your attention to ${his} favorite part of ${himself}, but doesn't truly internalize your focus on their growth.`);
			} else {
				r.push(`${He} begins to believe you despite ${himself}, and becomes`);
				r.push(App.UI.DOM.makeElement("span", `obsessed with breast growth.`, "yellow"));
				slave.sexualFlaw = "breast growth";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce abusiveness":
			r.push(`The dom is gratified when you order ${him} to stay in your office whenever ${he} can to fuck any slave you feel like throwing ${his} way. You do your best to limit ${his} menu items to reluctant or even rebellious slaves, and praise ${him} when ${he} forces ${himself} on them.`);
			seX(slave, "penetrative", "slaves", "penetrative", 10);
			if (slave.training < 100) {
				r.push(`${He} has fun, but ${he} continues to enjoy getting off more than getting to use bitches. ${He}'ll need more practice.`);
			} else {
				r.push(`${He} becomes`);
				r.push(App.UI.DOM.makeElement("span", `sexually abusive,`, "yellow"));
				r.push(`looking over each slave that comes into your office in the hope they'll resist.`);
				slave.sexualFlaw = "abusive";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce maliciousness":
			r.push(`The sadist is gratified when you order ${him} to stay in your office whenever ${he} can to have ${his} way with any slave you feel like throwing ${his} way. You do your best to limit ${his} menu items to rebellious slaves, and praise ${him} when ${his} sadism makes ${him} an effective punishment tool.`);
			seX(slave, "penetrative", "slaves", "penetrative", 10);
			if (slave.training < 100) {
				r.push(`${He} enjoys ${himself}, but still betrays occasional concern when slaves are really broken by what ${he} does to them. ${He}'ll need more practice.`);
			} else {
				r.push(`${He} becomes`);
				r.push(App.UI.DOM.makeElement("span", `sexually malicious,`, "yellow"));
				r.push(`going so far as to lick tears off ${his} victims' faces.`);
				slave.sexualFlaw = "malicious";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce self hatred":
			r.push(`You order the masochist to stay in your office whenever ${he}'s not working or resting. You fuck ${him} cruelly, going beyond the pain ${he} enjoys into harsh degradation. And every time you use ${him}, you make sure to tell ${him} how useless ${he} is.`);
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			if (slave.training < 100) {
				r.push(`${He} gets off on the pain, but ${his} sense of self isn't seriously affected this week.`);
			} else {
				r.push(`${He} becomes`);
				r.push(App.UI.DOM.makeElement("span", `sexually self hating,`, "yellow"));
				r.push(`and tearfully begs to you do worse to ${him}, no matter how bad it gets.`);
				slave.sexualFlaw = "self hating";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce sexual self neglect":
			r.push(`You order the sub to stay in your office whenever ${he}'s not working or resting, and use ${his} body for your pleasure. The instant you climax, you go back to your work or to another slave, treating ${him} like a piece of used tissue.`);
			if (canDoVaginal(slave)) {
				VCheck.Vaginal(slave, 10);
			} else if (canDoAnal(slave)) {
				VCheck.Anal(slave, 10);
			} else {
				seX(slave, "oral", V.PC, "penetrative", 10);
			}
			if (slave.training < 100) {
				r.push(`${He} accepts ${his} utterly submissive role, but ${his} sense of self isn't seriously affected this week.`);
			} else {
				r.push(`${He} becomes`);
				r.push(App.UI.DOM.makeElement("span", `sexually self neglectful,`, "yellow"));
				r.push(`and loses all expectation that those who use ${him} will address ${his} pleasure at all.`);
				slave.sexualFlaw = "neglectful";
				r.push(basicTrainingDefaulter(slave));
			}
			break;
		case "induce breeding obsession":
			r.push(`You order the pregnant slut to stay in your office whenever ${he}'s not working or resting.`);
			if (slave.pregKnown === 0) {
				r.push(`Since ${he}'s not pregnant, you keep ${him} rigged up with an enormous sympathy belly when ${he}'s there.`);
			}
			r.push(`Rather than fucking ${him}, you praise ${his} pregnancy effusively, and only allow ${him} to get off when you're doing so.`);
			if (slave.training < 100) {
				r.push(`${He} enjoys ${himself}, but mostly because of the pleasure. ${He}'ll need more training.`);
			} else {
				r.push(`${He} develops an`);
				r.push(App.UI.DOM.makeElement("span", `obsession with breeding,`, "yellow"));
				r.push(`and begins to stroke ${his} belly in a disturbingly masturbatory way.`);
				slave.sexualFlaw = "breeder";
				r.push(basicTrainingDefaulter(slave));
			}
	}
	r.push(IncreasePCSkills('slaving', currentSlaveValue));
	V.PC.skill.slaving = Math.clamp(V.PC.skill.slaving, -100, 100);
	App.Events.addNode(el, r, "div", "indent");
	return el;

	/**
	 * @param {App.Entity.SlaveState} slave
	 * @returns {DocumentFragment}
	 */
	function induceFlawAbuseEffects(slave) {
		const el = new DocumentFragment();
		const {He, His, him, his} = getPronouns(slave);
		slave.devotion -= 5;
		slave.trust -= 5;
		el.append(`${He}'s `);
		if (slave.devotion > 20) {
			App.UI.DOM.appendNewElement("span", el, `desperately confused`, "mediumorchid");
			el.append(` by this treatment, since the effect would be ruined if you explained it to ${him}, and ${his} `);
			App.UI.DOM.appendNewElement("span", el, `trust in you is reduced. `, "gold");
		} else if (slave.devotion >= -20) {
			App.UI.DOM.appendNewElement("span", el, `confused, depressed`, "mediumorchid");
			el.append(` and `);
			App.UI.DOM.appendNewElement("span", el, `frightened`, "gold");
			el.append(` by this treatment, since the effect would be ruined if you explained it to ${him}. `);
		} else {
			App.UI.DOM.appendNewElement("span", el, `angry`, "mediumorchid");
			el.append(` and `);
			App.UI.DOM.appendNewElement("span", el, `afraid`, "gold");
			el.append(` that you would treat ${him} like this. `);
		}
		if (slave.energy > 10) {
			slave.energy -= 2;
			el.append(`${His} `);
			App.UI.DOM.appendNewElement("span", el, `appetite for sex is also reduced. `, ["libido", "dec"]);
		}
		return el;
	}
	/**
	 * @param {App.Entity.SlaveState} slave
	 * @returns {DocumentFragment}
	 */
	function induceFlawLenityEffects(slave) {
		const el = new DocumentFragment();
		if (slave.devotion <= 20) {
			const {He, him} = getPronouns(slave);
			slave.trust += 5;
			el.append(`${He} doesn't understand what you intend by this strange treatment, but it does make ${him} `);
			App.UI.DOM.appendNewElement("span", el, `inappropriately trusting. `, "mediumaquamarine");
		}
		return el;
	}
	/**
	 * @param {App.Entity.SlaveState} slave
	 * @returns {HTMLElement}
	 */
	function basicTrainingDefaulter(slave) {
		const el = App.UI.DOM.makeElement("div", "", ["indent"]);
		const {He, His, his, he} = getPronouns(slave);
		if (slave.devotion > 20 && slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") {
			el.append(`Since ${he}'s obedient, `);
			App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} behavioral flaw. `, "yellow");
			pa.objective = "soften behavioral flaw";
		} else if ((slave.devotion > 20) && (slave.sexualQuirk === "none") && !App.Data.misc.paraphiliaList.includes(slave.sexualFlaw) && slave.sexualFlaw !== "none") {
			el.append(`Since ${he}'s obedient, `);
			App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to softening ${his} sexual flaw. `, "yellow");
			pa.objective = "soften sexual flaw";
		} else if (slave.devotion > 20 && slave.behavioralFlaw !== "none" && slave.behavioralQuirk !== "none") {
			el.append(`Since ${he}'s obedient and already has a behavioral quirk, `);
			App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} behavioral flaw. `, "yellow");
			pa.objective = "fix behavioral flaw";
		} else if ((slave.devotion > 20) && !App.Data.misc.paraphiliaList.includes(slave.sexualFlaw) && slave.sexualFlaw !== "none") {
			el.append(`Since ${he}'s obedient and already has a sexual quirk, `);
			App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to removing ${his} sexual flaw. `, "yellow");
			pa.objective = "fix sexual flaw";
		} else if (slave.devotion <= 20 && slave.trust >= -20) {
			App.UI.DOM.appendNewElement("span", el, `${His} training assignment has defaulted to breaking ${his} will. `, "yellow");
			pa.objective = "break will";
		} else {
			el.append(`${He} is now fully broken; `);
			App.UI.DOM.appendNewElement("span", el, `${his} training assignment has defaulted to fostering devotion. `, "yellow");
			pa.objective = "build devotion";
		}
		slave.training = 0;
		return el;
	}
};

repo_name: DontAskDontTell/fc

license: mit