code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fFeet = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He, His,
		he, his, him, himself, wife
	} = getPronouns(slave);
	const {title: Master} = getEnunciation(slave);

	addPartner(slave, -1);

	const footSeed = random(1, 100);
	let thighsAdj;
	let belly;
	let legsAdj;
	let boobsDesc;
	let boobs;
	let ballsDesc;
	let dickAdj;
	let buttAdj;
	let hipAdj;
	let skin;

	if (slave.weight > 190) {
		thighsAdj = "massive flabby";
	} else if (slave.weight > 160) {
		thighsAdj = "thick flabby";
	} else if (slave.weight > 130) {
		thighsAdj = "flabby";
	} else if (slave.weight > 95) {
		thighsAdj = "fat";
	} else if (slave.weight > 30) {
		if (slave.muscles > 75) {
			thighsAdj = "toned fat";
		} else if (slave.muscles < 15) {
			thighsAdj = "fat";
		} else {
			thighsAdj = "plush";
		}
	} else if (slave.weight > 10) {
		if (slave.muscles > 70) {
			thighsAdj = "thick muscular";
		} else if (slave.muscles > 20) {
			thighsAdj = "soft toned";
		} else {
			thighsAdj = "soft";
		}
	} else if (slave.weight >= -10) {
		if (slave.muscles > 70) {
			thighsAdj = "muscular";
		} else if (slave.muscles > 20) {
			thighsAdj = "toned";
		} else {
			thighsAdj = "average";
		}
	} else if (slave.weight >= -30) {
		if (slave.muscles > 40) {
			thighsAdj = "thin muscular";
		} else if (slave.muscles > 20) {
			thighsAdj = "toned model's";
		} else {
			thighsAdj = "model's";
		}
	} else {
		if (slave.muscles > 5) {
			thighsAdj = "emaciated toned";
		} else {
			thighsAdj = "emaciated";
		}
	}

	if (slave.belly < 1500) {
		belly = thighsAdj;
	} else {
		belly = bellyAdjective(slave);
	}

	if (slave.height >= 185) {
		legsAdj = "wonderfully long";
	} else if (slave.height >= 170) {
		legsAdj = "long";
	} else if (slave.height >= 160) {
		legsAdj = "nice";
	} else if (slave.height >= 150) {
		legsAdj = "short";
	} else {
		legsAdj = "short little";
	}

	if (slave.boobs >= 30000) {
		boobsDesc = "skip";
		boobs = "room filling";
	} else if (slave.boobs >= 20000) {
		boobsDesc = "beanbag sized";
	} else if (slave.boobs >= 8500) {
		boobsDesc = "obscenely massive";
	} else if (slave.boobs >= 8000) {
		boobsDesc = "Z-cup";
	} else if (slave.boobs >= 7500) {
		boobsDesc = "Y-cup";
	} else if (slave.boobs >= 7000) {
		boobsDesc = "X-cup";
	} else if (slave.boobs >= 6500) {
		boobsDesc = "V-cup";
	} else if (slave.boobs >= 5500) {
		boobsDesc = "U-cup";
	} else if (slave.boobs >= 5100) {
		boobsDesc = "T-cup";
	} else if (slave.boobs >= 4700) {
		boobsDesc = "S-cup";
	} else if (slave.boobs >= 4300) {
		boobsDesc = "R-cup";
	} else if (slave.boobs >= 3950) {
		boobsDesc = "Q-cup";
	} else if (slave.boobs >= 3600) {
		boobsDesc = "P-cup";
	} else if (slave.boobs >= 3250) {
		boobsDesc = "O-cup";
	} else if (slave.boobs >= 2900) {
		boobsDesc = "N-cup";
	} else if (slave.boobs >= 2600) {
		boobsDesc = "M-cup";
	} else if (slave.boobs >= 2300) {
		boobsDesc = "L-cup";
	} else if (slave.boobs >= 2050) {
		boobsDesc = "K-cup";
	} else if (slave.boobs >= 1800) {
		boobsDesc = "J-cup";
	} else if (slave.boobs >= 1600) {
		boobsDesc = "I-cup";
	} else if (slave.boobs >= 1400) {
		boobsDesc = "H-cup";
	} else if (slave.boobs >= 1200) {
		boobsDesc = "G-cup";
	} else if (slave.boobs >= 1000) {
		boobsDesc = "F-cup";
	} else if (slave.boobs >= 800) {
		boobsDesc = "DD-cup";
	} else if (slave.boobs >= 650) {
		boobsDesc = "D-cup";
	} else if (slave.boobs >= 400) {
		boobsDesc = "C-cup";
	} else if (slave.boobs >= 300) {
		boobsDesc = "B-cup";
	} else {
		boobsDesc = "skip";
		boobs = "flat";
	}
	if (boobsDesc !== "skip") {
		boobs = boobsDesc + " " + slave.boobShape;
	}

	if (slave.balls === 1) {
		ballsDesc = "vestigial";
	} else if (slave.balls === 2) {
		ballsDesc = "small";
	} else if (slave.balls === 3) {
		ballsDesc = "average";
	} else if (slave.balls === 4) {
		ballsDesc = "large";
	} else if (slave.balls === 5) {
		ballsDesc = "massive";
	} else if (slave.balls === 6) {
		ballsDesc = "huge";
	} else if (slave.balls === 7) {
		ballsDesc = "giant";
	} else if (slave.balls === 8) {
		ballsDesc = "enormous";
	} else if (slave.balls === 9) {
		ballsDesc = "monstrous";
	} else {
		ballsDesc = "overly massive";
	}

	if (slave.dick === 1) {
		dickAdj = "tiny";
	} else if (slave.dick === 2) {
		dickAdj = "little";
	} else if (slave.dick === 3) {
		dickAdj = "average";
	} else if (slave.dick === 4) {
		dickAdj = "big";
	} else if (slave.dick === 5) {
		dickAdj = "huge";
	} else if (slave.dick === 6) {
		dickAdj = "gigantic";
	} else if (slave.dick === 7) {
		dickAdj = "massive";
	} else if (slave.dick === 8) {
		dickAdj = "horse-sized";
	} else if (slave.dick === 9) {
		dickAdj = "monstrous";
	} else if (slave.dick === 10) {
		dickAdj = "inhuman";
	} else {
		dickAdj = "hypertrophied";
	}

	if (slave.butt < 1) {
		buttAdj = "flat";
	} else if (slave.butt < 2) {
		buttAdj = "small";
	} else if (slave.butt < 3) {
		buttAdj = "plump";
	} else if (slave.butt < 4) {
		buttAdj = "big bubble";
	} else if (slave.butt < 5) {
		buttAdj = "huge";
	} else if (slave.butt < 6) {
		buttAdj = "enormous";
	} else if (slave.butt < 7) {
		buttAdj = "gigantic";
	} else if (slave.butt < 8) {
		buttAdj = "ridiculous";
	} else if (slave.butt < 10) {
		buttAdj = "immense";
	} else {
		buttAdj = "inhuman";
	}

	if (slave.hips > 2) {
		hipAdj = "inhumanly wide";
	} else if (slave.hips > 1) {
		hipAdj = "very wide";
	} else if (slave.hips > 0) {
		hipAdj = "wide";
	} else if (slave.hips > -1) {
		hipAdj = "ample";
	} else if (slave.hips > -2) {
		hipAdj = "narrow";
	} else {
		hipAdj = "very narrow";
	}

	if (slave.skin === slave.race || slave.race === "white" || slave.race === "black" || V.seeRace === 0) {
		skin = slave.skin;
	} else {
		skin = `${slave.skin} ${slave.race}`;
	}

	const legs = hasBothLegs(slave) ? "legs" : "leg";
	const feet = hasBothLegs(slave) ? "feet" : "foot";
	const hands = hasBothArms(slave) ? "hands" : "hand";

	// Part 1: Order and reaction

	r.push(`You call ${slave.slaveName} to your office, telling ${him} to use ${his} ${feet} to please you.`);
	if (slave.fetish === "mindbroken") {
		r.push(`${He} is brought to you and stands blankly by your desk.`);
	} else if (slave.relationship === -3 && slave.devotion >= 60 ) {
		r.push(`Your devoted slave ${wife} is delighted to get another chance to pleasure you.`);
	} else if (slave.relationship === -2 && slave.devotion >= 60 ) {
		r.push(`${He} considers ${himself} your lover, and is delighted to spend time with you.`);
	} else if (slave.devotion < -50) {
		r.push(`${He} strongly refuses, and you have to restrain ${him} to get ${him} to obey.`);
	} else if (slave.devotion < -20) {
		r.push(`${He} tries to refuse, but decides it will just be easier to comply than risk punishment.`);
	} else if (slave.devotion <= 20) {
		r.push(`${He} doesn't seem eager to comply, but fears being punished enough to obey.`);
	} else if (slave.devotion < 60) {
		r.push(`${He} complies quietly.`);
	} else {
		if (slave.trust < -50) {
			r.push(`Although ${he} just barely trusts that you will not harm ${him}, ${he} is still unsure about what you are going to do which makes ${him} pause.`);
		} else {
			r.push(`${He} rushes to comply.`);
		}
	}

	// Extra 1 if tease/perverted and not mindbroken
	if ((slave.sexualQuirk === "tease" || slave.sexualQuirk === "perverted") && slave.devotion > 60 && slave.fetish !== "mindbroken") {
		r.push(`Before you can begin, ${he} arches`);
		if (hasBothLegs(slave)) {
			r.push(`a`);
		} else {
			r.push(`${his}`);
		}
		r.push(`leg in a seductive tease.`);
	}
	// Part 2: lube and reaction
	if (!canWalk(slave)) {
		if (tooBigBreasts(slave)) {
			r.push(`Since ${he} is immobilized by ${his} ${boobs} boobs, you have ${him} lay on ${his} side on the floor,`);
		} else if (tooBigBelly(slave)) {
			r.push(`Since ${he} is immobilized by ${his}`);
			if (slave.bellyPreg >= 3000) {
				r.push(`hugely gravid`);
			} else if (slave.bellyImplant >= 3000) {
				r.push(`${belly} protruding`);
			} else {
				r.push(`heavy ${slave.inflationType}-filled`);
			}
			r.push(`belly, you have ${he} lay on ${his} side on the floor,`);
		} else if (tooBigDick(slave)) {
			r.push(`Since ${he} is immobilized by ${his} ${dickAdj} dick, you have ${him} lay on ${his} side on the floor,`);
		} else if (tooBigButt(slave)) {
			r.push(`Since ${he} is immobilized by ${his} ${dickAdj} dick, you have ${him} sit on your desk to present ${his} ${legsAdj} ${legs} and ${feet},`);
		} else if (tooBigBalls(slave)) {
			r.push(`Since ${he} is immobilized by ${his} ${ballsDesc} balls, you have ${him} lay on ${his} back on the floor with ${his} ${legs} over ${his} nuts,`);
		} else {
			r.push(`You have ${him} sit on the edge of your desk to present ${his} ${legsAdj} ${legs} and ${feet},`);
		}
	} else {
		r.push(`You have ${him} sit on the edge of your desk to present ${his} ${legsAdj} ${legs} and ${feet},`);
	}
	if (getLegCount(slave, 4) + getLegCount(slave, 6) === 2) {
		r.push(`then pour lubricant onto your hands, applying it to ${his} elegant artificial ${feet}.`);
	} else if (getLegCount(slave, 5) === 2) {
		r.push(`then pour lubricant onto your hands, applying it to ${his} deadly artificial ${feet}.`);
	} else if (hasBothLegs(slave) && !hasAnyNaturalLegs(slave)) {
		r.push(`then pour lubricant onto your hands, applying it to ${his} artificial ${feet}.`);
	} else {
		r.push(`then pour lubricant onto your hands, massaging it into ${his} ${slave.skin} ${feet}: rubbing ${his} ${hasBothLegs(slave) ? `arches` : `arch`}, ${hasBothLegs(slave) ? `soles` : `sole`}, and toes.`);
	}
	if (slave.fetish === "mindbroken") {
		r.push(`${He} shows little reaction to your efforts.`);
	} else { // not mindbroken
		if (slave.devotion < -50) {
			r.push(`${He} tries to stay hateful despite the pleasurable stimulation.`);
		} else if (slave.devotion < -20) {
			r.push(`${He} is mostly quiet, but occasionally stifles a moan.`);
		} else if (slave.devotion > 20 && slave.sexualFlaw === "shamefast") {
			r.push(`${He}`);
			if (hasAnyArms(slave)) {
				r.push(`hides ${his} face in ${his} ${hands}`);
			} else {
				r.push(`attempts to hide ${his} face`);
			}
			r.push(`in shame at ${his} nudity, but occasionally a moan breaks out.`);
		} else if (slave.devotion <= 20) {
			r.push(`${He} seems a bit surprised by the attention, occasionally letting out a moan.`);
		} else {
			if (slave.trust < -50) {
				r.push(`${He} seems uncomfortable at your touch and frequently jerks away, spoiling the moment.`);
			} else {
				r.push(`${He} enjoys the massage, moaning in pleasure at your touch.`);
			}
		}
	} // close lube and reaction

	// Part 3: Actions, attraction/devotion and fetishes
	if (slave.fetish === "mindbroken") {
		r.push(`You hold ${his} ${feet} and thrust between them as ${he}`);
		if (canSee(slave)) {
			r.push(`watches you blankly.`);
		} else {
			r.push(`points ${his} blind gaze at you.`);
		}
	} else if (!(canWalk(slave))) {
		if (slave.devotion < -50) {
			r.push(`When ${he} refuses to serve, you take`);
			if (hasBothLegs(slave)) {
				r.push(`both of`);
			}
			r.push(`${his} ${feet} and start thrusting between them.`);
		} else if (slave.devotion < -20) {
			r.push(`${He} seems a bit reluctant when massaging you with ${his} ${feet} so you have to do most of the work.`);
		} else if (slave.devotion <= 20) {
			r.push(`${He} tries to make it pleasurable for you, but the combination of the awkward angle and ${his} nervousness makes ${him} lose ${his} pacing often.`);
		} else if (slave.devotion < 60 || (slave.sexualQuirk === "unflinching" && slave.devotion <= 20)) {
			r.push(`${He} does ${his} best to please you from ${his} position on ${his} side, massaging your cock nicely.`);
		} else {
			if (slave.trust < -50) {
				r.push(`${His} lack of trust causes ${him} to ask "${Master}, is this pleasurable for you?", spoiling the moment.`);
			} else {
				r.push(`${He} moves ${his} ${feet} hypnotically, trying ${his} hardest to make you cum. Being on ${his} side doesn't affect ${his} footjob, and you get a nice view of ${his} ${legsAdj} ${legs} as ${he} runs ${his} ${feet} across your cock.`);
			}
		}
		if (!canWalk(slave)) {
			if (slave.boobs > slave.belly ) {
				r.push(`${His} ${boobs} breasts wobble as ${his} ${feet} service you.`);
			} else {
				r.push(`${His} ${belly} belly wobbles as ${his} ${feet} service you.`);
			}
		}
	} else if (slave.devotion < -50) {
		r.push(`When ${he} refuses to comply, you take both ${his} ${feet} and start thrusting between them.`);
	} else if (slave.devotion < -20) {
		r.push(`${He} seems a bit reluctant when massaging you with ${his} ${feet} so you have to do most of the work.`);
	} else if (slave.devotion <= 20) {
		r.push(`${He} tries to make it pleasurable for you, trying to find the right angle and speed, but ${he} seems a bit tense and ruins ${his} pacing.`);
	} else if (slave.devotion < 60 || (slave.sexualQuirk === "unflinching" && slave.devotion <= 20)) {
		r.push(`${He} does ${his} best to please you, massaging you nicely with ${his} ${feet}.`);
	} else if (slave.attrXY < 16) {
		r.push(`${He} tries to make it pleasurable for you, but ${his} great distaste for men is obvious on ${his} expression.`);
	} else {
		if (slave.sexualQuirk === "perverted") {
			r.push(`As a devoted pervert, ${slave.slaveName} gives an enthusiastic footjob, with ${his}`);
			if (slave.dick > 0) {
				if (canAchieveErection(slave)) {
					if (slave.chastityPenis === 1) {
						r.push(`erect caged ${dickAdj} cock,`);
					} else {
						r.push(`erect ${dickAdj} cock,`);
					}
				} else {
					r.push(`soft and dripping ${dickAdj}`);
					if (slave.chastityPenis === 1) {
						r.push(`caged`);
					}
					r.push(`dick,`);
				}
				if (slave.balls > 0 && slave.scrotum > 0) {
					if (slave.vagina >= 0) {
						r.push(`and pulsing ${ballsDesc} balls`);
						if (slave.vaginaLube > 0 && slave.vagina >= 0) {
							r.push(`that are wet from ${his} feminine arousal`);
						}
					}
				} else if (slave.vagina >= 0) {
					r.push(`and`);
					if (slave.vaginaLube === 1) {
						r.push(`wet`);
					} else if (slave.vaginaLube === 2) {
						r.push(`dripping wet`);
					}
					r.push(`aroused vagina`);
				}
			} else if (slave.vagina >= 0) {
				if (slave.vaginaLube === 1) {
					r.push(`wet`);
				} else if (slave.vaginaLube === 2) {
					r.push(`dripping wet`);
				}
				r.push(`aroused vagina`);
			} else {
				r.push(`perverted smile`);
			}
			r.push(`showing ${his} sexual excitement to service your cock with ${his} ${feet}.`);
		} else if (slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`As a devoted cumslut, ${slave.slaveName} eagerly strokes your cock with ${his} ${feet}, delightedly smearing your precum on ${his} ${hasBothLegs(slave) ? `soles` : `sole`}. ${He}`);
			if (canSee(slave)) {
				if (V.PC.balls >= 10) {
					r.push(`stares at your massive balls with a ravenous gaze,`);
				} else if (V.PC.balls >= 5) {
					r.push(`stares at your large balls with a hungry gaze,`);
				} else if (V.PC.scrotum > 0) {
					r.push(`stares at your balls with a steady gaze,`);
				} else {
					r.push(`practically stares through you to your internal balls,`);
				}
			} else {
				r.push(`gingerly feels the`);
				if (V.PC.balls >= 10) {
					r.push(`weight of your massive balls`);
				} else if (V.PC.balls >= 5) {
					r.push(`weight of your large balls`);
				} else if (V.PC.scrotum > 0) {
					r.push(`weight of your balls`);
				} else {
					r.push(`tender skin at your base`);
				}
				r.push(`with ${his} ${feet},`);
			}
			r.push(`shivering in anticipation.`);
		} else if (slave.fetish === "humiliation" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`${slave.slaveName}`);
			r.push(`slowly strokes your cock with ${his} ${feet}, getting off on the degrading use of ${his} ${feet} and avoiding your gaze. ${He} is showing an embarrassed smile${skinToneLevel(slave.skin) > 22 ? `, and if ${his} skin was any lighter you would see ${his}` : `and`} bright blushing cheeks.`);
		} else if (slave.fetish === "boobs" && slave.fetishKnown === 1 && slave.fetishStrength >= 60 && hasAnyArms(slave)) {
			r.push(`As ${slave.slaveName} deftly strokes your cock with ${his} ${feet}, ${his} ${hasBothArms(slave) ? `hands play` : `hand plays`} with ${his}`);
			if (slave.boobs < 300) {
				r.push(`erect nipples.`);
			} else if (slave.boobs < 500) {
				r.push(`small chest.`);
			} else if (slave.boobs >= 18000) {
				r.push(`${boobs} breasts, though ${he} can't reach ${his} nipples.`);
			} else {
				r.push(`${boobs} breasts and erect nipples.`);
			}
			r.push(`${He} is certainly giving you plenty of sexy options for you to watch.`);
		} else if (slave.fetish === "sadist" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`${slave.slaveName} is a sadist, and ${his} deft footjob toys with the boundaries of pain and pleasure. ${His} devoted yet belittling`);
			if (canSee(slave)) {
				r.push(`gaze carefully watches your face`);
			} else {
				r.push(`expressions are clear as ${he} feels`);
			}
			r.push(`for every reaction.`);
		} else if (slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`${slave.slaveName} is a dominant and ${his} skilled ${feet} roughly stroke your erect cock, but ${he} pauses often to rub ${his} ${hasBothLegs(slave) ? `soles` : `sole`}`);
			if (V.PC.balls >= 10) {
				r.push(`on your massive balls`);
			} else if (V.PC.balls >= 5) {
				r.push(`on your large balls`);
			} else if (V.PC.scrotum > 0) {
				r.push(`on your balls`);
			} else {
				r.push(`around your hidden balls`);
			}
			r.push(`so ${he} doesn't get too aggressive with ${his} ${getWrittenTitle(slave)}.`);
		} else if (slave.fetish === "pregnancy" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`${slave.slaveName} skillfully strokes your cock with ${his}`);
			if (hasAnyArms(slave)) {
				r.push(`${feet},`);
				if (hasBothArms(slave)) {
					r.push(`one of`);
				}
				r.push(`${his} ${hands} roaming across ${his} ${belly} belly as ${he} happily services you.`);
			} else {
				r.push(`${feet}.`);
			}
			r.push(`${He} occasionally pauses to`);
			if (canSee(slave)) {
				r.push(`watch`);
			} else {
				r.push(`feel`);
			}
			r.push(`your`);
			if (V.PC.balls >= 10) {
				r.push(`massive balls`);
			} else if (V.PC.balls >= 5) {
				r.push(`large balls`);
			} else if (V.PC.scrotum > 0) {
				r.push(`balls`);
			} else {
				r.push(`pubic mound`);
			}
			r.push(`churn with sperm, clearly lost in a pregnancy fantasy.`);
		} else {
			r.push(`${slave.slaveName} skillfully strokes your cock with ${his} ${feet}, trying ${his} best to bring you pleasure.`);
		}
	}
	if (getLegCount(slave, 3) + getLegCount(slave, 6) > 0) {
		r.push(`As you enjoy your footjob ${his} capable prosthetics begin to vibrate on your cock.`);
	} else if (getLegCount(slave, 4)) {
		r.push(`The hard angles of ${his} metal ${feet} provide extra stimulation.`);
	}

	// Extra 2: if not mindbroken/immobile, tease with a flash.
	if (slave.fetish !== "mindbroken" && canWalk(slave) && slave.sexualQuirk === "tease" && slave.devotion >= 60) {
		if (canSee(slave)) {
			r.push(`Seeing`);
		} else {
			r.push(`Feeling`);
		}
		r.push(`you near your orgasm, ${he}`);
		if (footSeed < 40 && hasAnyArms(slave)) {
			if (slave.boobs < 300) {
				r.push(`presses ${his} ${hands} on ${his} flat chest,`);
			} else if (slave.boobs < 500) {
				r.push(`puts ${his} ${hands} under ${his} small chest,`);
			} else {
				r.push(`cups ${his} ${boobs} breasts with ${his} ${hands},`);
			}
			r.push(`then sticks out ${his} tongue, posing like a Free Cities whore who wants a cumshot.`);
		} else if (footSeed < 70 && !(slave.chastityPenis) && !(slave.chastityVagina) && (slave.dick > 0 || slave.vagina >= 0 )) {
			r.push(`spreads ${his} ${legsAdj} ${legs}`);
			if (slave.dick > 0) {
				if (slave.vagina >= 0) {
					r.push(`and raises ${his} ${dickAdj}`);
					if (canAchieveErection(slave)) {
						r.push(`erect`);
					} else {
						r.push(`soft`);
					}
					r.push(`cock`);
					if (slave.balls > 0 && slave.scrotum > 0) {
						r.push(`and ${ballsDesc} balls`);
					}
					r.push(`to reveal ${his}`);
					if (slave.vaginaLube === 1) {
						r.push(`wet`);
					} else if (slave.vaginaLube === 2) {
						r.push(`dripping wet`);
					}
					r.push(`aroused vagina`);
				} else {
					r.push(`and teases the tip of ${his} ${dickAdj}`);
					if (canAchieveErection(slave)) {
						r.push(`throbbing`);
					} else {
						r.push(`soft`);
					}
					r.push(`dick`);
				}
			} else {
				r.push(`to reveal ${his}`);
				if (slave.vaginaLube === 1) {
					r.push(`wet`);
				} else if (slave.vaginaLube === 2) {
					r.push(`dripping wet`);
				}
				r.push(`aroused vagina, then ${he} spreads ${his}`);
				if (slave.labia === 3) {
					r.push(`extremely large`);
				} else if (slave.labia === 2) {
					r.push(`large`);
				} else if (slave.labia === 1) {
					r.push(`pretty`);
				} else {
					r.push(`minimal`);
				}
				r.push(`pussylips`);
			}
			r.push(`with a sultry smile.`);
		} else {
			r.push(`rolls onto ${his} side while still stroking your dick, revealing ${his} ${buttAdj} ass, ${hipAdj} hips and ${thighsAdj} thighs with a sultry smile.`);
		}
	}

	// PC orgasms
	if (slave.fetish === "mindbroken") {
		r.push(`You eventually cum all over ${his} ${skin}`);
		if (V.PC.balls >= 9) {
			r.push(`${feet} ${legsAdj} ${legs}, and even ${belly} belly with your massive load.`);
		} else if (V.PC.balls >= 5) {
			r.push(`${feet} and ${legsAdj} ${legs} with your large load.`);
		} else {
			r.push(`${feet}.`);
		}
	} else if (!canWalk(slave)) {
		if (slave.devotion < -50) {
			r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
			if (V.PC.balls >= 9) {
				r.push(`${legsAdj} ${legs}, and even ${his} side with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`and ${legsAdj} ${legs} with your large load`);
			}
			r.push(`as ${he} struggles in your grasp. ${He} is furious that ${he} is now covered in cum ${he} can't easily reach to clean.`);
		} else if (slave.devotion < -20) {
			r.push(`You eventually cum all over ${his} ${skin}`);
			if (V.PC.balls >= 9) {
				r.push(`${feet} ${legsAdj} ${legs}, and even ${his} side with your massive load.`);
			} else if (V.PC.balls >= 5) {
				r.push(`${feet} and ${legsAdj} ${legs} with your large load.`);
			} else {
				r.push(`${feet}.`);
			}
			r.push(`${He} was startled by your orgasm and now wears a conflicted expression, but you are done using ${him} for now. ${He} is left covered in cum ${he} can't easily reach to clean.`);
		} else if (slave.devotion <= 20) {
			r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
			if (V.PC.balls >= 9) {
				r.push(`${legsAdj} ${legs}, and even ${his} side with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`and ${legsAdj} ${legs} with your large load`);
			}
			r.push(`as ${he} sighs in nervous relief.`);
		} else if (slave.devotion < 60 || (slave.sexualQuirk === "unflinching" && slave.devotion <= 20)) {
			r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
			if (V.PC.balls >= 9) {
				r.push(`${legsAdj} ${legs}, and even ${his} side with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`and ${legsAdj} ${legs} with your large load`);
			}
			r.push(`as ${he} rises to an elbow to smile at you.`);
		} else {
			if (slave.trust < -50) {
				r.push(`${His} lack of trust causes ${his} eyes to glaze over in fear.`);
			} else {
				r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
				if (V.PC.balls >= 9) {
					r.push(`${legsAdj} ${legs}, and even ${his} side with your massive load`);
				} else if (V.PC.balls >= 5) {
					r.push(`and ${legsAdj} ${legs} with your large load`);
				}
				r.push(`as ${he} moans in pleasure.`);
			}
		}
	} else if (slave.devotion < -50) {
		r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
		if (V.PC.balls >= 9) {
			r.push(`${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
		} else if (V.PC.balls >= 5) {
			r.push(`and ${legsAdj} ${legs} with your large load`);
		}
		r.push(`as ${he} struggles in your grasp with a look of disgust.`);
	} else if (slave.devotion < -20) {
		r.push(`You eventually cum all over ${his} ${skin}`);
		if (V.PC.balls >= 9) {
			r.push(`${feet} ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load,`);
		} else if (V.PC.balls >= 5) {
			r.push(`${feet} and ${legsAdj} ${legs} with your large load,`);
		} else {
			r.push(`${feet},`);
		}
		r.push(`${He} was startled by your orgasm and now wears a conflicted expression, as well as your cum, but you are done using ${him} for now.`);
	} else if (slave.devotion <= 20) {
		r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
		if (V.PC.balls >= 9) {
			r.push(`${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
		} else if (V.PC.balls >= 5) {
			r.push(`and ${legsAdj} ${legs} with your large load`);
		}
		r.push(`as ${he} sighs in nervous relief.`);
	} else if (slave.devotion < 60 || slave.attrXY < 16 || (slave.sexualQuirk === "unflinching" && slave.devotion <= 20)) {
		r.push(`You eventually cum all over ${his} ${skin}`);
		if (V.PC.balls >= 9) {
			r.push(`${feet} ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load,`);
		} else if (V.PC.balls >= 5) {
			r.push(`${feet} and ${legsAdj} ${legs} with your large load,`);
		} else {
			r.push(`${feet},`);
		}
		r.push(`and ${he} does ${his} best to catch your semen on ${his} ${legs}.`);
	} else {
		if (slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`When you eventually cum, ${slave.slaveName} giggles in lustful joy as your hot cum coats ${his} ${skin}`);
			if (V.PC.balls >= 5) {
				r.push(`${feet} and quickly slides from your desk to kneel in front of your pulsating cock.`);
				if (V.PC.balls >= 9) {
					r.push(`Your massive load quickly covers ${his} face as ${he} moans and twitches in pleasure, semen dripping down ${his}`);
					if (slave.boobs < 300) {
						r.push(`flat chest`);
					} else if (slave.boobs < 500) {
						r.push(`small chest`);
					} else {
						r.push(`${boobs} breasts`);
					}
					r.push(`and ${belly} belly onto ${his} thighs.`);
				} else {
					r.push(`Your large load coats ${his} face in sticky semen, some dripping onto ${his}`);
					if (slave.boobs < 300) {
						r.push(`flat chest.`);
					} else if (slave.boobs < 500) {
						r.push(`small chest.`);
					} else {
						r.push(`${boobs} breasts.`);
					}
				}
			} else {
				r.push(`${feet}.`);
			}
		} else if (slave.fetish === "humiliation" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`You eventually cum all over ${his} ${skin}`);
			if (V.PC.balls >= 9) {
				r.push(`${feet} ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`${feet} and ${legsAdj} ${legs} with your large load`);
			} else {
				r.push(`${feet},`);
			}
			r.push(`and ${he} whimpers as even ${his} ${feet} used as a sex object.`);
		} else if (slave.fetish === "submissive" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`You eventually cum all over ${his} ${skin}`);
			if (V.PC.balls >= 9) {
				r.push(`${feet} ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`${feet} and ${legsAdj} ${legs} with your large load`);
			} else {
				r.push(`${feet},`);
			}
			r.push(`and ${he} gasps as ${he} submissively accepts your semen on ${his} skin.`);
		} else if (slave.fetish === "buttslut" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`When you eventually cum, ${slave.slaveName} moans as your semen lands on ${his} ${skin} ${feet},`);
			if (V.PC.balls >= 5) {
				r.push(`but quickly turns to present ${his} ${buttAdj} ass and ${hipAdj} hips as a new target.`);
				if (V.PC.balls >= 9) {
					r.push(`Your massive load quickly covers ${his} ${thighsAdj} ass and thighs, sticky cum dripping all the way to ${his} calves.`);
				} else {
					r.push(`Your large load soaks ${his} ${thighsAdj} ass and thighs in sticky semen, which drips down ${his} ${legsAdj} ${legs}.`);
				}
			} else {
				r.push(`but you know ${he} wanted to involve ${his} ${buttAdj} butt and your cum, if your orgasm had more volume.`);
			}
		} else if (slave.fetish === "boobs" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
			if (V.PC.balls >= 9) {
				r.push(r.pop() + `, ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`and ${legsAdj} ${legs} with your large load`);
			}
			r.push(r.pop() + `, and ${he}`);
			if (slave.boobs < 300) {
				r.push(`pinches both ${his} erect nipples`);
			} else if (slave.boobs < 500) {
				r.push(`rubs ${his} ${hands} across ${his} small chest`);
			} else {
				r.push(`squeezes ${his} ${boobs} breasts tightly`);
			}
			r.push(`while moaning in pleasure.`);
		} else if (slave.fetish === "sadist" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
			if (V.PC.balls >= 9) {
				r.push(r.pop() + `, ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`and ${legsAdj} ${legs} with your large load`);
			}
			r.push(r.pop() + `, and ${he} gasps slightly and condescendingly smiles as you soil ${his} ${feet} with semen.`);
		} else if (slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
			if (V.PC.balls >= 9) {
				r.push(r.pop() + `, ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`and ${legsAdj} ${legs} with your large load`);
			}
			r.push(r.pop() + `, and ${he} gasps slightly and holds your cock between ${his} ${feet} tightly as you soil ${him} with semen.`);
		} else if (slave.fetish === "pregnancy" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
			r.push(`When you start to cum, ${slave.slaveName} moves ${his} hand from ${his} belly to`);
			if (slave.vagina >= 0) {
				r.push(`expose ${his} vagina and spreads ${his}`);
				if (slave.labia === 3) {
					r.push(`extremely large`);
				} else if (slave.labia === 2) {
					r.push(`large`);
				} else if (slave.labia === 1) {
					r.push(`pretty`);
				} else {
					r.push(`minimal`);
				}
				r.push(`pussylips to show where ${he} wants cum.`);
			} else if (slave.mpreg === 1) {
				r.push(`expose ${his}`);
				if (slave.anus > 3 ) {
					r.push(`gaping`);
				} else if (slave.anus > 2 ) {
					r.push(`very loose`);
				} else if (slave.anus > 1 ) {
					r.push(`loose`);
				} else if (slave.anus > 0 ) {
					r.push(`tight`);
				} else {
					r.push(`virgin`);
				}
				r.push(`asshole to show where ${he} wants cum.`);
			} else {
				r.push(`hug ${his} stomach.`);
			}
			r.push(`Your orgasm shoots across ${his} ${skin}`);
			if (V.PC.balls >= 9) {
				r.push(`${feet}, ${legsAdj} ${legs}, and even ${his} ${belly} belly is marked with your massive load. ${He} runs ${his} ${hands} through the cum on ${his} belly, massaging the semen into ${his} skin.`);
			} else if (V.PC.balls >= 5) {
				r.push(`${feet} and ${legsAdj} ${legs}.`);
			} else {
				r.push(`${feet}.`);
			}
		} else {
			r.push(`You eventually cum all over ${his} ${skin} ${feet}`);
			if (V.PC.balls >= 9) {
				r.push(r.pop() + `, ${legsAdj} ${legs}, and even ${his} ${belly} belly with your massive load`);
			} else if (V.PC.balls >= 5) {
				r.push(`and ${legsAdj} ${legs} with your large load`);
			}
			r.push(r.pop() + `, and ${he} moans softly in pleasure as ${he} feels your hot semen run down ${his} ${hasBothLegs(slave) ? `soles` : `sole`}.`);
		}
	}

	// Extra 3: devoted perverted slave giggles and orgasms
	if (slave.fetish !== "mindbroken" && canWalk(slave) && slave.sexualQuirk === "perverted" && slave.devotion >= 60 && !(slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength >= 60)) {
		r.push(`${He} was getting off on the footjob, but the feeling of your cum on`);
		if (slave.fetish === "buttslut" && slave.fetishKnown === 1 && slave.fetishStrength >= 60 && V.PC.balls >= 5) {
			r.push(`${his} ass and thighs sets off a strong orgasm of ${his} own, ${his} ${thighsAdj} ${legs} quivering as`);
			if (slave.dick > 0) {
				if (slave.vagina >= 0) {
					if (cumAmount(slave) > 20) {
						r.push(`${his} ${dickAdj} dick unloads a massive amount of cum, swollen ${ballsDesc} testicles bulging between ${his} thighs,`);
						if (slave.vaginaLube === 1) {
							r.push(`wet`);
						} else if (slave.vaginaLube === 2) {
							r.push(`dripping wet`);
						}
						r.push(`pussy and asshole clenching as ${he} makes a cum puddle on the floor which splashes with every spasm.`);
					} else {
						r.push(`${his} ${dickAdj} dick spurts ${his} load, ${his}`);
						if (slave.vaginaLube === 1) {
							r.push(`wet`);
						} else if (slave.vaginaLube === 2) {
							r.push(`dripping wet`);
						}
						r.push(`pussy and asshole clenching.`);
					}
				} else {
					if (cumAmount(slave) > 20) {
						r.push(`${he} strokes ${his} ${dickAdj} penis, swollen ${ballsDesc} testicles bulging between ${his} thighs, asshole clenching as ${his} massive cumshot splashes noisily onto the floor.`);
					} else {
						r.push(`${he} strokes ${his} ${dickAdj} penis, asshole clenching as ${his} cum spurts onto the floor.`);
					}
				}
			} else if (slave.vagina >= 0) {
				r.push(`${he} moans in pleasure, ${his}`);
				if (slave.vaginaLube === 1) {
					r.push(`wet`);
				} else if (slave.vaginaLube === 2) {
					r.push(`dripping wet`);
				}
				r.push(`pussy and asshole clenching as ${he} tries to remain standing.`);
			} else {
				r.push(`${he} moans in pleasure, asshole pulsating as ${he} tries to remain standing.`);
			}
		} else {
			r.push(`${his} ${legs}`);
			if (V.PC.balls >= 2) {
				r.push(`and belly`);
			}
			r.push(`sets off a strong orgasm of ${his} own, even without masturbating.`);
			if (slave.dick > 0) { // dick shoots
				if (cumAmount(slave) > 20) { // huge load
					r.push(`${His} ${dickAdj} dick unloads a massive amount of cum, adding ${his} own semen to ${his} body, resulting in a slave covered nearly head to toe in spunk.`);
				} else {
					r.push(`${His} ${dickAdj} dick unloads onto ${his} belly and ${boobs} chest, and ${he} giggles and gasps as it rains down.`);
				}
			} else if (slave.vagina >= 0) {
				r.push(`${He} leans back and moans in pleasure, showing ${his}`);
				if (slave.vaginaLube === 1) {
					r.push(`wet`);
				} else if (slave.vaginaLube === 2) {
					r.push(`dripping wet`);
				}
				r.push(`pussy and asshole clenching.`);
			} else {
				r.push(`${He} leans back and moans in pleasure, showing ${his} asshole pulsating.`);
			}
		}
		if (slave.vaginaLube >= 1) {
			r.push(`After ${he} leaves, you find a`);
			if (slave.vaginaLube >= 2) {
				r.push(`large`);
			}
			r.push(`puddle of pussyjuice on your desk where ${he} was sitting.`);
		}
	}

	if (slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength >= 60) {
		if (V.PC.balls > 5) {
			if (slave.dick > 0) {
				if (cumAmount(slave) > 20) {
					r.push(`${His} ${ballsDesc} balls visibly throb as ${dickAdj} dick unloads a massive amount of cum, adding ${his} own semen to ${his} body, resulting in a slave utterly plastered in spunk. ${His} eyes are held shut with a thick layer of cum, and judging by how`);
					if (slave.chastityPenis === 1) {
						r.push(`${his} dick is still shooting cum even in a cage with no stimulation,`);
					} else {
						r.push(`furiously ${he} is masturbating,`);
					}
					r.push(`${he} couldn't be happier.`);
				} else {
					r.push(`${His} ${dickAdj} dick unloads onto ${his} belly and ${boobs} chest, and ${he} giggles and gasps as it rains down with audible splats. ${He} is splattered in semen, face coated in your cum, and judging by`);
					if (canSmell(slave)) {
						r.push(`${his} nostrils desperately taking in the heady smell and`);
					}
					r.push(`how`);
					if (slave.chastityPenis === 1) {
						r.push(`${his} dick is still throbbing in orgasm even in a cage with no stimulation,`);
					} else {
						r.push(`${he} can't stop masturbating,`);
					}
					r.push(`${he} couldn't be happier.`);
				}
			} else if (slave.vagina >= 0) {
				r.push(`${He} leans back and moans in pleasure, ${his}`);
				if (slave.vaginaLube === 1) {
					r.push(`wet`);
				} else if (slave.vaginaLube === 2) {
					r.push(`dripping wet`);
				}
				r.push(`pussy and asshole clenching. ${He} is splattered in semen, face coated in your cum, and judging by`);
				if (canSmell(slave)) {
					r.push(`${his} nostrils desperately taking in your scent and`);
				}
				r.push(`how ${he} can't stop masturbating, ${he} couldn't be happier.`);
			} else {
				r.push(`${He} leans back and moans in pleasure, asshole pulsating. ${He} is splattered in semen, face coated in your cum, and judging by`);
				if (canSmell(slave)) {
					r.push(`${his} nostrils desperately taking in your scent and`);
				}
				r.push(`how ${he} can't stop masturbating, ${he} couldn't be happier.`);
			}
		} else {
			r.push(`${slave.slaveName}`);
			r.push(`leans down to wipe semen off ${his} ${feet}, quickly bringing it into ${his} mouth with a blissful look as ${he}`);
			if (canTaste(slave)) {
				r.push(`tastes`);
			} else {
				r.push(`feels`);
			}
			r.push(`your cum and sighs in pleasure.`);
		}
	}
	App.Events.addParagraph(node, r);
	return node;
};

repo_name: Pecanus/fc

license: mit


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fKiss = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He, His,
		he, his, him, himself, wife, woman, girl
	} = getPronouns(slave);

	const {title: Master, say: say} = getEnunciation(slave);

	const {womanP} = getPronouns(V.PC).appendSuffix("P");
	/** @type {FC.MouthAccessory|""} */
	let assignedGag = "";
	r.push(`You tell ${slave.slaveName} to`);
	switch (slave.mouthAccessory) {
		case "none":
			if (canMove(slave)) {
				r.push(`approach you.`);
			} else {
				r.push(`have another slave help ${him} to your desk.`);
			}
			break;
		case "dildo gag":
			if (hasAnyArms(slave) && canMove(slave)) {
				r.push(`remove ${his} dildo gag and approach you.`);
			} else {
				r.push(`have another slave remove ${his} dildo gag and set ${him} down on your desk.`);
			}
			assignedGag = slave.mouthAccessory;
			slave.mouthAccessory = "none";
			break;
		case "massive dildo gag":
			if (hasAnyArms(slave) && canMove(slave)) {
				r.push(`pull ${his} enormous dildo gag out of the depths of ${his} throat and approach you.`);
			} else {
				r.push(`have another slave pull the enormous dildo gag out of the depths of ${his} throat and set ${him} down on your desk.`);
			}
			assignedGag = slave.mouthAccessory;
			slave.mouthAccessory = "none";
			break;
		default:
			if (hasAnyArms(slave) && canMove(slave)) {
				r.push(`undo ${his} gag and approach you.`);
			} else {
				r.push(`have another slave undo ${his} gag and set ${him} down on your desk.`);
			}
			assignedGag = slave.mouthAccessory;
			slave.mouthAccessory = "none";
	}

	if (slave.fetish === "mindbroken" && slave.relationship !== -3) {
		r.push(`${He} complies mechanically. ${He} remembers that when ${getWrittenTitle(slave)}'s commands are not obeyed, there is punishment.`);
	} else if (slave.relationship === -2) {
		r.push(`${He} hurriedly complies, happy to be near the object of ${his} longing. Once ${he}'s close, you take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he} loves overwhelming, and ${his} eyes flick downward after a moment.`);
		} else {
			r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he} loves and finds it overwhelming, and after a moment glances away.`);
		}
		r.push(`${He} blushes furiously.`);
	} else if (slave.relationship === -3) {
		if (slave.fetish === "mindbroken") {
			r.push(`${He} complies mechanically. ${He} remembers that when ${getWrittenTitle(slave)}'s commands are not obeyed, there is punishment. You kiss ${him} deeply and intensely; ${he} doesn't understand why.`);
		} else if (slave.devotion + slave.trust >= 175) {
			r.push(`${He} complies in a ${wife}ly fashion, moving ${his} body as ${he} approaches to best catch your desire. Once ${he}'s close, you take a moment to gaze deeply`);
			if (canSee(slave)) {
				r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to affirming, and looks down with a smile, running ${his} eyes over your`);
				if (V.PC.boobs >= 300) {
					r.push(`bosom.`);
				} else {
					r.push(`chest.`);
				}
			} else {
				r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s married to and finds it affirming, and looks down with a smile.`);
			}
		} else if (slave.devotion < -20 && slave.trust > 20) {
			r.push(`${He} complies. Once ${he}'s close, you take a moment to gaze deeply`);
			if (canSee(slave)) {
				r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married to disturbing, and quickly breaks eye contact.`);
			} else {
				r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s forcibly married to and finds it disturbing, and quickly turns ${his} face away.`);
			}
		} else if (slave.devotion < -20) {
			r.push(`${He} complies fearfully. Once ${he}'s close, you take a moment to gaze deeply`);
			if (canSee(slave)) {
				r.push(`into ${his} tearing ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s forcibly married to horrifying, and quickly breaks eye contact.`);
			} else {
				r.push(`upon ${his} tear-streaked face. ${He} senses the intense look from the ${womanP} ${he}'s forcibly married to and finds it horrifying, and quickly turns ${his} face away.`);
			}
		} else {
			r.push(`${He} complies obediently. Once ${he}'s close, you take a moment to gaze deeply`);
			if (canSee(slave)) {
				r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from the ${womanP} ${he}'s married to reassuring, and looks down with a slight smile, running ${his} eyes over your`);
				if (V.PC.boobs >= 300) {
					r.push(`bosom.`);
				} else {
					r.push(`chest.`);
				}
			} else {
				r.push(`upon ${his} face. ${He} senses the intense look from the ${womanP} ${he}'s married to and finds it reassuring, and looks down with a slight smile.`);
			}
		}
	} else if (slave.devotion > 75) {
		r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense look from ${his} beloved ${getWrittenTitle(slave)} disconcerting, and ${his} eyes flick downward after a moment.`);
		} else {
			r.push(`upon ${his} face. ${He} senses the intense look from ${his} beloved ${getWrittenTitle(slave)} and finds it disconcerting, and after a moment glances away.`);
		}
		r.push(`${He} blushes furiously.`);
	} else if (slave.devotion > 50) {
		r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} disconcerting, and ${he} looks down after a moment, blushing.`);
		} else {
			r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} disconcerting, and ${he} looks down after a moment, blushing.`);
		}
	} else if (slave.devotion > 20) {
		r.push(`${He} hurriedly complies, happy to be near you. Once ${he}'s close, you take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, blushing nervously.`);
		} else {
			r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, blushing nervously.`);
		}
	} else if (slave.devotion >= -20 && slave.trust >= -20) {
		r.push(`${He} visibly considers disobedience, but decides that complying with such an apparently harmless order is safe, for now. Once ${he}'s close, you take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and ${he} looks down after a moment, ${his} lower lip trembling with nervousness.`);
		} else {
			r.push(`upon ${his} face. ${He} finds the intense attention from ${his} ${getWrittenTitle(slave)} worrying, and turns away after a moment, ${his} lower lip trembling with nervousness.`);
		}
	} else if (slave.trust < -20) {
		r.push(`The command terrifies ${him}, but ${he}'s more frightened still of the consequences of disobedience, and ${he} complies. Once ${he}'s close, you take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. After a mere instant of locked gazes, ${he} looks down fearfully, and begins to shake with terror, tears leaking silently down ${his} cheeks.`);
		} else {
			r.push(`upon ${his} face. After a mere instant of locked faces, ${he} looks down fearfully, and begins to shake with terror, tears leaking silently down ${his} cheeks.`);
		}
	} else {
		r.push(`${He} pauses, obviously considering whether to resist, but eventually decides to save ${his} strength to fight more onerous orders, and gives in. Once ${he}'s close, you take a moment to gaze deeply`);
		if (canSee(slave)) {
			r.push(`into ${his} ${App.Desc.eyesColor(slave)}. ${He} stares back, but after a few moments ${he} loses the contest of wills and looks down.`);
		} else {
			r.push(`upon ${his} face. ${He} faces you defiantly, but after a few moments ${he} loses the contest of wills and looks down.`);
		}
	}

	r.push(`You extend a`);
	if (V.PC.title === 1) {
		r.push(`manly`);
	} else {
		r.push(`feminine`);
	}
	r.push(`hand and graze your fingertips along the line of ${his} cheekbone.`);
	if (slave.lipsTat !== 0) {
		r.push(`Your fingers trace ${his} facial tattoos, slowly picking out the patterns against ${his} ${slave.skin} skin.`);
	}
	if (slave.piercing.lips.weight + slave.piercing.tongue.weight > 2) {
		r.push(`You touch each of ${his} facial piercings, one by one, feeling the hard metal contrast with ${his} pliant flesh.`);
	}
	r.push(`Then, you gently raise ${his}`);
	if (slave.face > 95) {
		r.push(`heartrendingly beautiful`);
	} else if (slave.face > 10) {
		r.push(`lovely`);
	} else if (slave.face >= -10) {
		r.push(`pretty`);
	} else if (slave.face >= -40) {
		r.push(`homely`);
	} else {
		r.push(`ugly`);
	}
	r.push(`chin and kiss ${him} right on ${his}`);
	if (slave.lips > 95) {
		r.push(`facepussy.`);
	} else {
		if (slave.lips > 70) {
			r.push(`pillowlike`);
		} else if (slave.lips > 40) {
			r.push(`generous`);
		} else if (slave.lips > 20) {
			r.push(`plush`);
		}
		r.push(`lips.`);
	}

	if (slave.relationship === -3) {
		if (slave.fetish === "mindbroken") {
			r.push(`${His} mouth opens to accept the kiss, and is compliant with your questing tongue. You kiss your broken ${wife} deeply. ${His} posture remains completely unchanged. Being kissed affects ${him} as little as being penetrated, being struck, being loved, or being your ${wife}: not at all. When you pull away,`);
			if (canSee(slave)) {
				r.push(`${his} ${App.Desc.eyesColor(slave)} track you carefully, awaiting further use of ${his} body.`);
			} else {
				r.push(`${he} exposes ${himself} to you, awaiting further use of ${his} body.`);
			}
		} else if (slave.devotion + slave.trust >= 175) {
			r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`);
			if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) {
				r.push(`(Though you're quite careful around ${his} sharp dentition.)`);
			}
			r.push(`${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`);
			if (hasAnyArms(slave)) {
				r.push(`A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`);
			}
			if (slave.accent >= 3) {
				r.push(`${He} does ${his} best to communicate love with ${his}`);
				if (canSee(slave)) {
					r.push(`${App.Desc.eyesColor(slave)},`);
				} else {
					r.push(`facial expressions,`);
				}
				r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`);
			} else if (!hasAnyArms(slave) && !canTalk(slave)) {
				r.push(`${He} does ${his} best to communicate love with ${his}`);
				if (canSee(slave)) {
					r.push(`${App.Desc.eyesColor(slave)}.`);
				} else {
					r.push(`facial expressions.`);
				}
			} else if (!canTalk(slave)) {
				r.push(`${He} signs that ${he} loves you.`);
			} else {
				r.push(Spoken(slave, `"I love you, ${Master}," ${he} says dreamily.`));
			}
		} else if (slave.devotion < -20 && slave.trust > 20) {
			r.push(`${He} reflexively turns ${his} head away from you, but you catch your ${wife} by ${his} jaw and kiss ${him} harder. You wrap your arms around ${him} so ${he} cannot escape. ${He} wriggles desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and pull away, ${he} glares at you.`);
			if (!hasAnyArms(slave) && !canTalk(slave)) {
				r.push(`${His}`);
				if (canSee(slave)) {
					r.push(`eyes demand`);
				} else {
					r.push(`expression demands`);
				}
				r.push(`an answer: are you done?`);
			} else if (!canTalk(slave)) {
				r.push(`${He} signs irritably, asking if you're done.`);
			} else {
				r.push(`${He} splutters, "Are you done, ${Master}?"`);
			}
		} else if (slave.devotion < -20) {
			r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him} deeply. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with your ${wife} and pull away, ${he} stares at you in utter incomprehension.`);
			if (!hasAnyArms(slave) && !canTalk(slave)) {
				r.push(`${His}`);
				if (canSee(slave)) {
					r.push(`eyes beg`);
				} else {
					r.push(`expression begs`);
				}
				r.push(`for an answer: is that it?`);
			} else if (!canTalk(slave)) {
				r.push(`${He} signs spastically, begging fearfully to know if that's it.`);
			} else {
				r.push(`${He} asks nervously before cringing, "I-is that it, ${Master}?"`);
			}
		} else {
			r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the`);
			if (slave.physicalAge > 30) {
				r.push(`${woman};`);
			} else {
				r.push(`${girl};`);
			}
			r.push(`${he}'s doing ${his} duty as a ${wife} by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your lips and tongue. When you finally break the kiss,`);
			if (canSee(slave)) {
				r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly,`);
			} else {
				r.push(`${he} gazes at you,`);
			}
			r.push(`looking for answers that are not there.`);
			if (!hasAnyArms(slave) && !canTalk(slave)) {
				r.push(`${His}`);
				if (canSee(slave)) {
					r.push(`eyes beg`);
				} else {
					r.push(`expression begs`);
				}
				r.push(`for an answer: is that it?`);
			} else if (!canTalk(slave)) {
				r.push(`${He} signs hesitantly, asking if that's it.`);
			} else {
				r.push(`${He} asks hesitantly, "I-is that it, ${Master}?"`);
			}
		}
	} else if (slave.fetish === "mindbroken") {
		r.push(`${His} mouth opens to accept the kiss, and is compliant with your questing tongue. ${His} posture remains completely unchanged. Being kissed affects ${him} as little as being penetrated, being struck, or being loved: not at all. When you pull away,`);
		if (canSee(slave)) {
			r.push(`${his} ${App.Desc.eyesColor(slave)} track you carefully, awaiting further use of ${his} body.`);
		} else {
			r.push(`${he} exposes ${himself} to you, awaiting further use of ${his} body.`);
		}
	} else if (slave.relationship === -2) {
		r.push(`${His} mouth accepts yours with love, matching itself perfectly to your insistent lips and tongue.`);
		if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) {
			r.push(`(Though you're quite careful around ${his} sharp dentition.)`);
		}
		r.push(`${He} melts into you, sighing ever so gently. When you finally break the kiss, ${his} mouth freezes in the shape it was in when last your lips touched, and a momentary look of longing crosses ${his} face.`);
		if (hasAnyArms(slave)) {
			r.push(`A hand reaches dumbly up to ${his} mouth to trace ${his} lips where yours last touched.`);
		}
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate love with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate love with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} loves you.`);
		} else {
			r.push(Spoken(slave, `"I love you, ${Master},"`));
			r.push(`${he} ${say}s dreamily.`);
		}
	} else if (slave.devotion > 50 && slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
		r.push(`${He} giggles into you and kisses you back with vigor, ${his} head pressing insistently forward. The two of you make out rather`);
		if (slave.teeth === "pointy") {
			r.push(`aggressively, ${his} sharp teeth drawing a bit of blood from your lips and tongue.`);
		} else if (slave.teeth === "fangs") {
			r.push(`aggressively, ${his} fangs drawing a bit of blood from your lips and tongue.`);
		} else if (slave.teeth === "fang") {
			r.push(`aggressively, ${his} pointy fang drawing a bit of blood from your lips and tongue.`);
		} else {
			r.push(`aggressively.`);
		}
		r.push(`${He} takes ${his} tendency towards sexual dominance right up to the edge of insubordination, ${his} active tongue only retreating when yours presses against it. When you finally shove ${him} away, ${he}'s breathing hard through ${his} grin.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate excitement with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate excitement with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} liked that.`);
		} else {
			r.push(Spoken(slave, `"That was fun, ${Master},"`));
			r.push(`${he} ${say}s cheerfully.`);
		}
	} else if (slave.devotion > 50 && slave.fetish === "cumslut" && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
		r.push(`${He} stiffens with arousal. ${His} sexuality is complex, focusing on cum, but with a heavy layer of oral fixation. As your tongue plunders ${his} mouth, ${he} reacts almost as though ${he}'s receiving oral, whimpering and moaning into you and pressing ${himself} lewdly against your`);
		if (V.PC.boobs >= 1400) {
			r.push(`giant tits.`);
		} else if (V.PC.boobs >= 1200) {
			r.push(`huge breasts.`);
		} else if (V.PC.boobs >= 1000) {
			r.push(`big breasts.`);
		} else if (V.PC.boobs >= 800) {
			r.push(`prominent breasts.`);
		} else if (V.PC.boobs >= 650) {
			r.push(`unremarkable breasts.`);
		} else if (V.PC.boobs >= 500) {
			r.push(`breasts.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`tiny breasts.`);
		} else if (V.PC.title > 0) {
			r.push(`manly chest.`);
		} else {
			r.push(`non-existent breasts.`);
		}
		if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) {
			if (slave.teeth === "pointy") {
				r.push(`${He}'s very careful to avoid spearing your tongue with ${his} sharp teeth.`);
			} else if (slave.teeth === "fangs") {
				r.push(`${He}'s very careful to avoid spearing your tongue with ${his} fangs.`);
			} else if (slave.teeth === "fang") {
				r.push(`${He}'s very careful to avoid poking you with ${his} fang.`);
			}
		}
		r.push(`${He} achieves a weak orgasm before you tire of making out with ${him}.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate undiminished lust with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he} does not speak ${V.language} well enough to express ${himself}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate undiminished lust with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} liked that.`);
		} else {
			r.push(Spoken(slave, `"That was fun, ${Master},"`));
			r.push(`${he} ${say}s lustfully.`);
		}
	} else if (slave.devotion > 50) {
		r.push(`${His} mouth accepts yours with devotion, matching itself carefully to your insistent lips and tongue.`);
		if (App.Medicine.Modification.teeth.get(slave.teeth).sharp) {
			if (slave.teeth === "pointy") {
				r.push(`${He} is exquisitely careful to keep ${his} sharp teeth clear of you.`);
			} else if (slave.teeth === "fangs") {
				r.push(`${He} is exquisitely careful to keep ${his} fangs from poking you.`);
			} else if (slave.teeth === "fang") {
				r.push(`${He} is exquisitely careful to keep ${his} fang from getting into trouble.`);
			}
		}
		r.push(`${He} presses ${himself} against you, ${his} warmth wonderful against your`);
		if (V.PC.boobs >= 1400) {
			r.push(`expansive`);
			if (V.PC.boobsImplant / V.PC.boobs >= .60) {
				r.push(`firm`);
			} else {
				r.push(`soft`);
			}
			r.push(`chest.`);
		} else if (V.PC.boobs >= 1200) {
			r.push(`huge`);
			if (V.PC.boobsImplant / V.PC.boobs >= .60) {
				r.push(`firm`);
			} else {
				r.push(`soft`);
			}
			r.push(`breasts.`);
		} else if (V.PC.boobs >= 1000) {
			r.push(`big`);
			if (V.PC.boobsImplant / V.PC.boobs >= .60) {
				r.push(`firm`);
			} else {
				r.push(`soft`);
			}
			r.push(`breasts.`);
		} else if (V.PC.boobs >= 800) {
			r.push(`soft breasts.`);
		} else if (V.PC.boobs >= 500) {
			r.push(`breasts.`);
		} else if (V.PC.boobs >= 300) {
			r.push(`small chest.`);
		} else if (V.PC.title > 0) {
			r.push(`manly chest.`);
		} else {
			r.push(`flat chest.`);
		}
		r.push(`When you finally break the kiss, ${he} runs ${his} tongue rapturously across ${his} moistened lips${hasAnyArms(slave) ? ` and then runs a finger across them as well` : ``}, an openly sexual look on ${his} ${slave.skin} face.`);
		if (slave.accent >= 3) {
			r.push(`${He} does ${his} best to communicate devotion with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)},`);
			} else {
				r.push(`facial expressions,`);
			}
			r.push(`since ${he}'s not confident in ${his} ability to express it in ${V.language}.`);
		} else if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${He} does ${his} best to communicate devotion with ${his}`);
			if (canSee(slave)) {
				r.push(`${App.Desc.eyesColor(slave)}.`);
			} else {
				r.push(`facial expressions.`);
			}
		} else if (!canTalk(slave)) {
			r.push(`${He} signs that ${he} loves you.`);
		} else {
			r.push(Spoken(slave, `"I love you, ${Master},"`));
			r.push(`${he} ${say}s forthrightly.`);
		}
	} else if (slave.devotion > 20) {
		r.push(`${He} accepts the kiss willingly. As you are so close to ${him}, you sense considerable turmoil in the`);
		if (slave.physicalAge > 30) {
			r.push(`${woman};`);
		} else {
			r.push(`${girl};`);
		}
		r.push(`${he}'s doing ${his} duty as a slave by complying with your wishes, and is probably struggling with the mixture of resistance, obedience and perhaps even devotion forced to the forefront of ${his} mind by your lips and tongue. When you finally break the kiss,`);
		if (canSee(slave)) {
			r.push(`${his} ${App.Desc.eyesColor(slave)} gaze into yours searchingly,`);
		} else {
			r.push(`${he} gazes at you,`);
		}
		r.push(`looking for answers that are not there.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes beg`);
			} else {
				r.push(`expression begs`);
			}
			r.push(`for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs hesitantly, asking if that's it.`);
		} else {
			r.push(`${He} asks hesitantly,`);
			r.push(Spoken(slave, `"I-is that it, ${Master}?"`));
		}
	} else if (slave.devotion >= -20 && slave.trust < -20) {
		r.push(`${He} accepts the kiss fearfully. As you kiss ${his} unresisting mouth, ${his} eagerness to avoid punishment leads ${him} to kiss you back, though nervousness makes ${him} mechanical. You kiss ${him} harder, enjoying ${his} fear, and the physical intimacy slowly does its work. ${He} becomes softer and more natural, ${his} resistance easing. When you pull away from ${him} for a moment, ${he}`);
		if (canSee(slave)) {
			r.push(`looks`);
		} else {
			r.push(`gazes`);
		}
		r.push(`at you for a long moment, ${his} mouth still hanging open, before visibly catching ${himself} with a reminder that ${he}'s a slave and you're ${his} owner.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes beg`);
			} else {
				r.push(`expression begs`);
			}
			r.push(`for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs hesitantly, asking if that's it.`);
		} else {
			r.push(
				`${He} asks hesitantly,`,
				Spoken(slave, `"I-is that it, ${Master}?"`)
			);
		}
	} else if (slave.trust < -50) {
		r.push(`${He} is nearly frozen with fear, and does not resist as you kiss ${him}. In fact, ${he} barely reacts at all. ${He} opens ${his} mouth mechanically in response to your insistent tongue, but it's like kissing a doll. ${He} is so filled with terror that ${he} remains stiff even as it becomes clear to ${him} you're not going to hurt ${him}. When you bore of making out with the poor`);
		if (slave.physicalAge > 30) {
			r.push(`${woman}`);
		} else {
			r.push(`${girl}`);
		}
		r.push(`and pull away, ${he} stares at you in utter incomprehension.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes beg`);
			} else {
				r.push(`expression begs`);
			}
			r.push(`for an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs spastically, begging fearfully to know if that's it.`);
		} else {
			r.push(
				`${He} asks nervously before cringing,`,
				Spoken(slave, `"I-is that it, ${Master}?"`)
			);
		}
	} else {
		r.push(`${He} reflexively turns ${his} head away from you, but you catch ${his} jaw and kiss ${him} harder. Spluttering, ${he} flees backwards, but you tip forward with ${him} and pin ${him} against your desk, plundering ${his} mouth without mercy. ${He} wriggles desperately, but ${his} struggles slowly subside as ${he} realizes that you're not taking this any farther. When you bore of it and pull away, ${he} stares at you in utter incomprehension.`);
		if (!hasAnyArms(slave) && !canTalk(slave)) {
			r.push(`${His}`);
			if (canSee(slave)) {
				r.push(`eyes demand`);
			} else {
				r.push(`expression demands`);
			}
			r.push(`an answer: is that it?`);
		} else if (!canTalk(slave)) {
			r.push(`${He} signs irritably, asking whether that's it.`);
		} else {
			r.push(
				`${He} splutters,`,
				Spoken(slave, `"Is that it, ${Master}!?"`)
			);
		}
	}

	if (assignedGag) {
		slave.mouthAccessory = assignedGag;
	}
	App.Events.addParagraph(node, r);
	return node;
};


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fLickPussy = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He,
		he, his, him
	} = getPronouns(slave);

	const {womanP} = getPronouns(V.PC).appendSuffix("P");

	addPartner(slave, -1);

	if (canWalk(slave) || (canMove(slave) && slave.rules.mobility === "permissive")) {
		r.push(`You summon ${slave.slaveName} to your office and order ${him} to lie down on the couch. ${He} does so`);
		if (slave.devotion > 95) {
			r.push(`with a smile, skipping over to give you a quick kiss before ${he} complies with your request.`);
		} else if (slave.devotion > 50) {
			r.push(`without hesitation, ready to serve and obey.`);
		} else if (slave.devotion > -50) {
			r.push(`with a look of trepidation, as though afraid you're going to hurt ${him}.`);
		} else if (slave.devotion <= -50) {
			r.push(`with a look of hatred, though only after you threaten to punish ${him}.`);
		}
	} else {
		r.push(`You have ${slave.slaveName} brought into your office and placed on your couch.`);
	}

	r.push(`After ${he} is situated, you go over to`);
	if (slave.clothes !== "no clothing") {
		r.push(`${him} and begin to peel off ${his} clothing, to which ${he}`);
		if (slave.devotion > 50) {
			r.push(`gives you a soft smile.`);
		} else {
			r.push(`gives you an angry glare.`);
		}
	} else {
		r.push(`${him}.`);
	}
	r.push(`You suddenly grab ${his} hips and pull ${his} crotch to your face, causing ${him} to`);
	if (canTalk(slave)) {
		r.push(`give a shriek of surprise`);
	} else {
		r.push(`shudder in surprise`);
	}

	if (slave.belly >= 30000) {
		if (slave.bellyPreg > 1000) {
			r.push(`as you get familiar under ${his} huge life-swollen baby bump.`);
		} else {
			r.push(`as you get familiar under ${his} hugely swollen belly.`);
		}
	} else if (slave.belly >= 10000) {
		if (slave.bellyPreg >= 8000) {
			r.push(`as you get under ${his} baby bump.`);
		} else if (slave.bellyImplant >= 8000) {
			r.push(`as you get under the swollen orb that is ${his} stomach.`);
		} else {
			r.push(`as you get under the bloated container of ${slave.inflationType} that is ${his} middle.`);
		}
	} else if (slave.belly >= 1000) {
		if (slave.bellyPreg >= 1000) {
			r.push(`as you get not far below the life growing within ${him}.`);
		} else if (slave.bellyImplant >= 1000) {
			r.push(`as you get not far below the curve of ${his} stomach.`);
		} else {
			r.push(`as you get not far below the groaning container of ${slave.inflationType} within ${him}.`);
		}
	} else if (slave.weight > 95) {
		r.push(`as you get familiar with ${his} fat belly.`);
	} else if (slave.muscles > 30) {
		r.push(`as you get familiar with ${his} prominent abs.`);
	} else if (slave.weight > 30) {
		r.push(`as you get familiar with ${his} soft belly.`);
	} else if (slave.muscles > 10) {
		r.push(`as you get familiar with ${his} toned, smooth belly.`);
	} else {
		r.push(`as you get familiar with ${his} smooth belly.`);
	}

	r.push(`Looking ${him} directly in the eyes, you begin to run your tongue along ${his} labia, drawing a`);
	if (canTalk(slave)) {
		r.push(`soft`);
	} else {
		r.push(`silent`);
	}
	r.push(`moan from ${him}. The combination of the pleasure and the intense look from`);
	if (areRelated(slave, V.PC)) {
		r.push(`${his} ${relativeTerm(slave, V.PC)}`);
	} else {
		r.push(`the ${womanP}`);
		if (slave.devotion > 95) {
			r.push(`${he} loves`);
		} else if (slave.devotion > 50) {
			r.push(`${he}'s accepted as ${his} ${getWrittenTitle(slave)}`);
		} else if (slave.devotion < -50) {
			r.push(`${he} hates`);
		} else if (slave.trust < -50) {
			r.push(`${he} fears`);
		} else {
			r.push(`${he} is enslaved to`);
		}
	}
	r.push(`makes ${him} blush, but you don't let up.`);
	if (slave.dick === 0) {
		r.push(`You give ${his} clit a few experimental tweaks, causing ${his}`);
		if (canTalk(slave)) {
			r.push(`moans`);
		} else {
			r.push(`squirming`);
		}
		r.push(`to intensify${(hasBothLegs(slave)) ? ` and ${his} legs to tighten around your head` : ``}.`);
	}
	r.push(`Before ${he} cums, though, you pull back, causing ${him} to whine in frustration. You begin again, then pull back again just before ${he} orgasms. You repeat this several more times, each time causing ${him} to become more and more frustrated. Finally, one last stroke of your tongue causes ${him} to go over the edge, making ${him}`);
	if (canTalk(slave)) {
		r.push(`scream out`);
		if (slave.devotion > 50) {
			r.push(`your name`);
		}
	} else {
		r.push(`spasm`);
	}
	if (slave.dick > 0) {
		if (canAchieveErection(slave)) {
			r.push(`in ecstasy and spray cum across ${his} chest.`);
		} else {
			r.push(`in ecstasy and dribble cum from ${his} limp dick.`);
		}
	} else {
		r.push(`in ecstasy.`);
	}
	r.push(`You send ${him} back to ${his} assignment before calling in another slave to clean up the mess.`);

	slave.counter.vaginal++;
	V.vaginalTotal++;
	App.Events.addParagraph(node, r);
	return node;
};


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fLips = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He, His,
		he, his, him, himself, girl
	} = getPronouns(slave);

	addPartner(slave, -1);
	seX(slave, "oral", V.PC, "penetrative");

	r.push(`You tell ${slave.slaveName} to`);
	if (V.PC.dick !== 0) {
		r.push(`blow you with ${his}`);
	} else {
		r.push(`please your pussy with ${his}`);
	}
	if (slave.lips > 95) {
		r.push(`facepussy.`);
	} else if (slave.lips > 70) {
		r.push(`cartoonish lips.`);
	} else if (slave.lips > 20) {
		r.push(`dick-sucking lips.`);
	} else if (slave.lips > 10) {
		r.push(`pretty mouth.`);
	} else {
		r.push(`whore mouth.`);
	}

	if (slave.fetish === "cumslut" && slave.devotion >= -20) {
		r.push(`${He}'s delighted at the prospect of ${his} favorite activity.`);
	}

	switch (slave.mouthAccessory) {
		case "dildo gag":
			if (hasAnyArms(slave)) {
				r.push(`${He} removes the dildo from ${his} throat, leaving the ring gag in place.`);
			} else {
				r.push(`As an amputee, ${he} requires your assistance to get the dildo out of ${his} throat.`);
			}
			r.push(`Able to breathe through ${his} mouth for the first time in a while, ${he} gasps gratefully, knowing the respite will be brief.`);
			break;
		case "massive dildo gag":
			if (hasAnyArms(slave)) {
				r.push(`${He} struggles to remove the dildo from ${his} throat, leaving ${his} mouth agape.`);
			} else {
				r.push(`As an amputee, ${he} requires your assistance to get the dildo out of ${his} throat.`);
			}
			r.push(`Able to breathe through ${his} mouth for the first time in a while, ${he} gasps gratefully, knowing the respite will be brief.`);
			break;
		case "ball gag":
		case "bit gag":
			if (hasAnyArms(slave)) {
				r.push(`${He} unfastens ${his} gag and pulls it from ${his} mouth.`);
			} else {
				r.push(`As an amputee, ${he} requires your assistance to get the gag unfastened.`);
			}
			r.push(`Able to breathe through ${his} mouth for the first time in a while, ${he} gasps gratefully, knowing the respite will be brief.`);
			break;
		case "ring gag":
			if (hasAnyArms(slave)) {
				r.push(`${He} unfastens ${his} gag.`);
			} else {
				r.push(`As an amputee, ${he} requires your assistance to get the gag unfastened.`);
			}
			r.push(`Able to flew ${his} jaw for the first time in a while, ${he} swallows gratefully, knowing the respite will be brief.`);
	}

	if (slave.lipsTat === "tribal patterns") {
		r.push(`The tribal patterns on ${his} face enhance ${his} beauty.`);
	} else if (slave.lipsTat === "permanent makeup") {
		r.push(`${His} tattooed-on makeup encourages it.`);
	} else if (slave.lipsTat === "degradation") {
		r.push(`The tattoos on ${his} face are asking for it, after all.`);
	}

	if (slave.piercing.lips.weight + slave.piercing.tongue.weight > 2) {
		r.push(`The stimulation from ${his} many oral piercings should be great.`);
	} else if (slave.piercing.lips.weight + slave.piercing.tongue.weight > 0) {
		r.push(`The sensation of ${his} oral piercings should be quite nice.`);
	}

	if (slave.teeth === "removable") {
		if (slave.devotion <= 20) {
			r.push(`You pull ${his} prosthetic teeth out of ${his} mouth so you can enjoy an extra-soft throatfuck.`);
		} else {
			r.push(`${He} slides ${his} prosthetic teeth out of ${his} mouth so ${he} can give you an extra-soft suck.`);
		}
	}

	if (isAmputee(slave)) {
		r.push(`You set ${his} limbless torso on the`);
		if (V.PC.dick !== 0) {
			r.push(`edge of your desk with ${him} on ${his} back. ${His} head dangles off the edge of the desk, leaving ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`mouth at the perfect angle for use. As an amputee ${he} has absolutely no control over the depth or quickness of oral sex, so you are careful not to hurt ${him}. Even so, you take ${him} to the edge of gagging, enjoying the sight of ${his} ${slave.skin} throat bulging. Eventually you shoot your load directly down ${his} gullet.`);
			if (V.PC.vagina !== -1) {
				r.push(`If ${he} thought that was it, ${he}'s soon corrected: you hike yourself up further, and grind your pussy against ${his} face.`);
			}
		} else {
			r.push(`floor next to your desk and kneel on ${him} with your legs on either side of ${him}, so your pussylips are hard against ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`mouth. ${He} desperately eats you out, trying to get you off as fast as possible so ${he} can get a bit more air, but you grind down without mercy, taking your pleasure.`);
		}
	} else if (tooBigBelly(slave)) {
		r.push(`You get ${him} situated on the edge of your desk, on ${his} back. This pins ${him} down, the massive weight of ${his} belly stopping ${him} from going anywhere at all. ${His} head dangles off the edge of the desk, leaving ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth at the perfect angle for use.`);
		if (V.PC.dick !== 0) {
			if (slave.bellyImplant >= 1500) {
				r.push(`${He} has absolutely no control over the depth or quickness of oral sex, so you are careful not to hurt ${him}. Even so, you take ${him} to the edge of gagging, enjoying the sight of the spasms running through ${his} stomach as ${he} struggles to breathe. Eventually you shoot your load directly down ${his} gullet.`);
			} else {
				r.push(`${He} has absolutely no control over the depth or quickness of oral sex, so you are careful not to hurt ${him}. Even so, you take ${him} to the edge of gagging, enjoying the sight of ${his} ${slave.skin} throat bulging and every movement within ${his} overstuffed womb as ${he} struggles to breathe. Eventually you shoot your load directly down ${his} gullet.`);
			}
			if (V.PC.vagina !== -1) {
				r.push(`If ${he} thought that was it, ${he}'s soon corrected: you hike yourself up further, and grind your pussy against ${his} face.`);
			}
		} else {
			if (slave.bellyImplant >= 1500) {
				r.push(`${He} has absolutely no control over how hard you grind your cunt against ${his} face, so you are careful not to suffocate ${him}. Even so, you take ${him} to the edge, enjoying the sight of the spasms running through ${his} stomach as ${he} struggles to breathe. Eventually you climax, giving ${him} a good`);
				if (canTaste(slave)) {
					r.push(`taste`);
				} else {
					r.push(`dose`);
				}
				r.push(`of your femcum.`);
			} else {
				r.push(`${He} has absolutely no control over how hard you grind your cunt against ${his} face, so you are careful not to suffocate ${him}. Even so, you take ${him} to the edge, enjoying the sight of the movement within ${his} overstuffed womb as ${he} struggles to breathe. Eventually you climax, giving ${him} a good`);
				if (canTaste(slave)) {
					r.push(`taste`);
				} else {
					r.push(`dose`);
				}
				r.push(`of your femcum.`);
			}
		}
	} else if (tooBigBreasts(slave)) {
		r.push(`You get ${him} situated on the edge of your desk, on ${his} back. This pins ${him} down, the massive weight of ${his} tits stopping ${him} from going anywhere at all. ${His} head dangles off the edge of the desk, leaving ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth at the perfect angle for use.`);
		r.push(`${He} has absolutely no control over`);
		if (V.PC.dick !== 0) {
			r.push(`the depth or quickness of oral sex, so you are careful not to hurt ${him}. Even so, you take ${him} to the edge of gagging, enjoying the sight of ${his} ${slave.skin} throat bulging and ${his} absurd boobs jiggling as ${he} struggles to breathe. Eventually you shoot your load directly down ${his} gullet.`);
			if (V.PC.vagina !== -1) {
				r.push(`If ${he} thought that was it, ${he}'s soon corrected: you hike yourself up further, and grind your pussy against ${his} face.`);
			}
		} else {
			r.push(`how hard you grind your cunt against ${his} face, so you are careful not to suffocate ${him}. Even so, you take ${him} to the edge, enjoying the sight of ${his} absurd boobs jiggling as ${he} struggles to breathe. Eventually you climax, giving ${him} a good`);
			if (canTaste(slave)) {
				r.push(`taste`);
			} else {
				r.push(`dose`);
			}
			r.push(`of your femcum.`);
		}
	} else if (tooBigButt(slave)) {
		r.push(`You get ${him} situated on the edge of your desk, on ${his} back. This anchors ${him}, the massive weight of ${his} ass stopping ${him} from going anywhere at all. ${His} head dangles off the edge of the desk, leaving ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth at the perfect angle for use.`);
		if (V.PC.dick !== 0) {
			r.push(`${He} has absolutely no control over the depth or quickness of oral sex, so you are careful not to hurt ${him}. Even so, you take ${him} to the edge of gagging, enjoying the sight of ${his} ${slave.skin} throat bulging and ${his} absurd rear jiggling as ${he} struggles to breathe. Eventually you shoot your load directly down ${his} gullet.`);
			if (V.PC.vagina !== -1) {
				r.push(`If ${he} thought that was it, ${he}'s soon corrected: you hike yourself up further, and grind your pussy against ${his} face.`);
			}
		} else {
			r.push(`${He} has absolutely no control over how hard you grind your cunt against ${his} face, so you are careful not to suffocate ${him}. Even so, you take ${him} to the edge, enjoying the sight of ${his} absurd rear jiggling as ${he} struggles to breathe. Eventually you climax, giving ${him} a good`);
			if (canTaste(slave)) {
				r.push(`taste`);
			} else {
				r.push(`dose`);
			}
			r.push(`of your femcum.`);
		}
	} else if (slave.fetish === "cumslut" && slave.fetishStrength > 60 && slave.fetishKnown === 1 && slave.dick !== 0 && V.PC.dick !== 0) {
		r.push(`${He} comes over eagerly, with hunger`);
		if (canSee(slave)) {
			r.push(`in ${his} eyes.`);
		} else {
			r.push(`on ${his} face.`);
		}
		r.push(`${He} gets to`);
		if (hasBothLegs(slave)) {
			r.push(`${his} knees,`);
		} else {
			r.push(`the floor,`);
		}
		r.push(`hurriedly takes you into ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth, and gives the blowjob ${his} all. As a cumslut ${he}'s almost desperate to get your cum into ${his} mouth and`);
		if (slave.chastityPenis === 1) {
			r.push(`(since ${his} cock is off limits) frantically rubs ${his} nipples and asspussy`);
		} else if (canAchieveErection(slave)) {
			r.push(`jacks ${himself} off`);
		} else {
			r.push(`rubs ${his} sadly limp member`);
		}
		r.push(`in anticipation.`);
		if (V.PC.vagina !== -1) {
			r.push(`You have more than one variety of deliciousness for ${him}, and ${he}'s careful not to neglect your wet cunt.`);
		}
		r.push(`When you finish, ${he} sits back with an ecstatic look on ${his} face and lets your cum rest in ${his} mouth as ${he} climaxes into ${his} ${slave.skin} hand. ${He} pours ${his} own cum from ${his} hand into ${his} mouth so it can mingle with yours.`);
	} else if (slave.fetish === "cumslut" && slave.fetishStrength > 60 && slave.fetishKnown === 1 && V.PC.dick !== 0) {
		r.push(`${He} comes over eagerly, with hunger`);
		if (canSee(slave)) {
			r.push(`in ${his} eyes.`);
		} else {
			r.push(`on ${his} face.`);
		}
		r.push(`${He} gets to`);
		if (hasAnyLegs(slave)) {
			r.push(`${his} ${hasBothLegs(slave) ? `knees` : `knee`},`);
		} else {
			r.push(`the ground,`);
		}
		r.push(`hurriedly takes you into ${his}`);
		if (V.seeRace === 1) {
			r.push(slave.race);
		}
		r.push(`mouth, and gives the blowjob ${his} all. As a cumslut ${he}'s almost desperate to get your cum into ${his} mouth and rubs ${himself} in anticipation.`);
		if (V.PC.vagina !== -1) {
			r.push(`You have more than one variety of deliciousness for ${him}, and ${he}'s careful not to neglect your wet cunt.`);
		}
		r.push(`When you finish, ${he} sits back with an ecstatic look on ${his} face and lets your cum rest in ${his} mouth as ${he} climaxes.`);
	} else if (slave.devotion < -20) {
		r.push(`${He} tries to back away, so you`);
		if (V.PC.dick !== 0) {
			if (slave.mouthAccessory === "dildo gag") {
				r.push(`grab ${him}; ${his}`);
				if (V.seeRace === 1) {
					r.push(slave.race);
				}
				r.push(`mouth is already held invitingly open by ${his} gag, and ${he}'s prevented from biting. You push ${him} down to`);
				if (hasAnyLegs(slave)) {
					r.push(`${his} ${hasBothLegs(slave) ? `knees` : `knee`}`);
				} else {
					r.push(`the ground`);
				}
				r.push(`with ${his} head against the couch next to your desk so you can give ${him} a good hard throat fuck. When you cum down ${his} ${slave.skin} throat ${he} retches through ${his} tears.`);
				if (V.PC.vagina !== -1) {
					r.push(`${He} has a mere moment to get ${his} breath back before you press your pussy against ${his} unwilling mouth.`);
				}
			} else if (slave.mouthAccessory === "massive dildo gag") {
				r.push(`grab ${him}; ${his}`);
				if (V.seeRace === 1) {
					r.push(slave.race);
				}
				r.push(`mouth is left agape, unable to close after being forced so widely open for so long, so ${he} is unlikely to bite. You push ${him} down to`);
				if (hasAnyLegs(slave)) {
					r.push(`${his} ${hasBothLegs(slave) ? `knees` : `knee`}`);
				} else {
					r.push(`the ground`);
				}
				r.push(`with ${his} head against the couch next to your desk so you can give ${him} a good hard throat fuck. When you cum down ${his} ${slave.skin} throat ${he} retches through ${his} tears.`);
				if (V.PC.vagina !== -1) {
					r.push(`${He} has a mere moment to get ${his} breath back before you press your pussy against ${his} unwilling mouth.`);
				}
			} else {
				r.push(`grab ${him} and force a ring gag into ${his}`);
				if (V.seeRace === 1) {
					r.push(slave.race);
				}
				r.push(`mouth. Once you have the straps secured behind ${his} head, ${he}'s prevented from biting. You push ${him} down to`);
				if (hasAnyLegs(slave)) {
					r.push(`${his} ${hasBothLegs(slave) ? `knees` : `knee`}`);
				} else {
					r.push(`the ground`);
				}
				r.push(`with ${his} head against the couch next to your desk so you can give ${him} a good hard throat fuck. When you cum down ${his} ${slave.skin} throat ${he} retches through ${his} tears.`);
				if (V.PC.vagina !== -1) {
					r.push(`${He} has a mere moment to get ${his} breath back before you press your pussy against ${his} unwilling mouth.`);
				}
			}
		} else {
			r.push(`seize ${him} and throw ${him} onto the couch face-up, and then kneel on ${him} with your legs on either side of ${his} crying body, so your pussylips are hard against ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`mouth. ${He} desperately eats you out, trying to get you off as fast as possible so ${he} can get a bit more air, but you grind down without mercy, taking your pleasure.`);
		}
	} else if (slave.devotion <= 20) {
		r.push(`${He} comes over reluctantly and begins to`);
		if (V.PC.dick !== 0) {
			r.push(`give you a blowjob. Deciding that ${he} isn't showing the necessary enthusiasm, you hold ${his} head and fuck ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`face instead${(V.PC.vagina !== -1) ? `, occasionally jerking your dick free to shove your pussy against ${his} face instead` : ``}. ${He} does ${his} best to follow your motions but still splutters and gags. You pull free to cum across ${his} ${slave.skin} face and hair.`);
		} else {
			r.push(`eat you out. Deciding that ${he} isn't showing the necessary enthusiasm, you hold ${his} head and grind your pussy against ${his}`);
			if (V.seeRace === 1) {
				r.push(slave.race);
			}
			r.push(`face instead. ${He} does ${his} best to follow your motions but still splutters and gasps for air. You climax quickly and haul ${him}`);
			if (hasBothLegs(slave)) {
				r.push(`to ${his} feet,`);
			} else {
				r.push(`upright,`);
			}
			r.push(`kissing the bewildered ${girl} full on the mouth. You can taste yourself on ${his} lips.`);
		}
	} else {
		r.push(`${He} licks ${his} lips`);
		if (canSee(slave)) {
			r.push(`and looks you in the eyes`);
		}
		r.push(`as ${he} gets to`);
		if (hasBothLegs(slave)) {
			r.push(`${his} knees.`);
		} else {
			r.push(`the floor.`);
		}
		r.push(He);
		if (V.PC.dick !== 0) {
			r.push(`gives you a long, deep blowjob. ${He} massages your balls`);
			if (V.PC.vagina !== -1) {
				r.push(`and pussy`);
			}
			r.push(`with one hand and ${his} breasts with the other, giving you a show. ${He} sucks your head until you climax, letting your cock pop free of ${his} mouth to shoot pearly cum all across ${his} ${slave.skin} face.`);
		} else {
			r.push(`eats you out like ${he}'s starving, moaning into your pussy to show off ${his} arousal and add to your pleasure. ${He} massages your perineum with one hand and ${his} breasts with the other, giving you a show. ${He} slowly concentrates more and more attention on your clit until you climax convulsively. You pull ${him}`);
			if (hasBothLegs(slave)) {
				r.push(`to ${his} feet,`);
			} else {
				r.push(`upright,`);
			}
			r.push(`kissing the compliant ${girl} full on the mouth. You can taste yourself on ${his} lips.`);
		}
	}

	if (["cosmetic braces", "fang", "fangs", "pointy", "straightening braces"].includes(slave.teeth)) {
		if (slave.skill.oral >= 100) {
			r.push(`${He}'s so orally skilled that ${he} had the confidence to lightly graze you with`);
			if (slave.teeth === "pointy") {
				r.push(`${his} sharp teeth`);
			} else if (slave.teeth === "fangs") {
				r.push(`a fang`);
			} else if (slave.teeth === "fang") {
				r.push(`${his} fang`);
			} else {
				r.push(`${his} braces`);
			}
			r.push(`on occasion, a delightfully scary sensation.`);
		} else if (slave.skill.oral > 30) {
			r.push(`${He}'s sufficiently orally skilled that ${he} managed to accomplish all that without`);
			if (slave.teeth === "pointy") {
				r.push(`${his} sharp teeth`);
			} else if (slave.teeth === "fangs") {
				r.push(`any fangs`);
			} else if (slave.teeth === "fang") {
				r.push(`${his} fang`);
			} else {
				r.push(`${his} braces`);
			}
			r.push(`contacting your`);
			if (V.PC.dick !== 0) {
				r.push(`dick`);
			} else {
				r.push(`pussy`);
			}
			r.push(`once.`);
		} else if (slave.skill.oral > 10) {
			r.push(`With ${his} basic oral skills, ${he} accidentally grazed you with ${his}`);
			if (slave.teeth === "pointy") {
				r.push(`sharp teeth`);
			} else if (slave.teeth === "fangs") {
				r.push(`fangs`);
			} else if (slave.teeth === "fang") {
				r.push(`fang`);
			} else {
				r.push(`braces`);
			}
			r.push(`a few times, leaving your`);
			if (V.PC.dick !== 0) {
				r.push(`dick`);
			} else {
				r.push(`pussy`);
			}
			r.push(`slightly the worse for wear.`);
		} else {
			r.push(`Since ${he} is orally unskilled, you were sporting with your`);
			if (V.PC.dick !== 0) {
				r.push(`dick`);
			} else {
				r.push(`pussy`);
			}
			r.push(`by using ${his} mouth. ${He} did ${his} best to keep ${his}`);
			if (slave.teeth === "pointy") {
				r.push(`sharp teeth off`);
			} else if (slave.teeth === "fangs") {
				r.push(`fangs out of`);
			} else if (slave.teeth === "fang") {
				r.push(`fang out of`);
			} else {
				r.push(`braces off`);
			}
			r.push(`you, but you're bleeding a bit down there.`);
		}
	}

	if (random(1, 100) > (100 + slave.devotion)) {
		if (slave.fetish !== "cumslut" && slave.energy <= 95 && slave.sexualFlaw !== "hates oral") {
			r.push(`Being facefucked by force has given ${him} a <span class="flaw gain">hatred of oral sex.</span>`);
			slave.sexualFlaw = "hates oral";
		}
	} else if (random(1, 100) > (110 - slave.devotion)) {
		if (V.PC.dick !== 0 && slave.fetish === "none" && slave.sexualFlaw !== "hates oral") {
			r.push(`Consummating an enjoyable sexual encounter by drinking your cum has <span class="fetish gain">encouraged ${him} to focus on oral sex.</span>`);
			slave.fetish = "cumslut";
			slave.fetishKnown = 1;
		}
	}
	App.Events.addParagraph(node, r);
	return node;
};


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fMaternitySwing = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He,
		he, his, him, himself
	} = getPronouns(slave);

	slave.partners.add(-1);

	r.push(`You call ${him} over and hook ${him} into the reinforced silk maternity swing built into your office, then lift ${him} into the air so that you can toy with ${his} hyperfecund body. Once you have ${him} properly situated with ${his}`);
	if (slave.boobs >= 20000) {
		r.push(`obscenely bloated boobs`);
	} else if (Math.floor(slave.boobsImplant/slave.boobs) >= .60) {
		r.push(`augmented balloon boobies`);
	} else if (slave.boobs >= 3000) {
		r.push(`enormous breasts`);
	} else {
		r.push(`cute tits`);
	}
	r.push(`and`);
	if (slave.bellyPreg >= 1000000) {
		r.push(`ridiculously enormous, baby packed belly`);
	} else if (slave.bellyPreg >= 750000) {
		r.push(`mountainous, baby-stuffed gut`);
	} else if (slave.bellyPreg >= 600000) {
		r.push(`titanic, baby swollen womb`);
	} else {
		r.push(`massive belly`);
	}
	r.push(`hanging above the floor of your office, you turn your attention to molesting ${his} ripe protuberances. Running your tongue along the distended nub of ${his} belly button, you kiss your way up the fertile curve of ${his} belly, making your way to ${his} tits so that you can suck on ${his} ${slave.nipples} nipples. ${He} squirms in ${his} restraints and`);
	if (slave.devotion > 95) {
		if (!canTalk(slave)) {
			r.push(`begs you to fuck ${him} already`);
		} else {
			r.push(`groans inchoately, obviously desperate for you to fuck ${him}`);
		}
	} else if (slave.trust < -20 && slave.devotion > -10) {
		r.push(`groans with barely restrained lust.`);
	} else {
		r.push(`groans in lust and terror.`);
	}
	r.push(`You strap into your own customized version of the device, then elevate your body so that`);
	if (V.PC.dick !== 0) {
		r.push(`your dick`);
	} else {
		r.push(`the device's built-in strap-on`);
	}
	r.push(`is at the perfect angle to drive yourself and your`);
	if (slave.bellyPreg >= 600000) {
		r.push(`brood-slave`);
	} else {
		r.push(`glorified belly balloon`);
	}
	r.push(`into a string of mutual orgasms with some truly astounding aerial sex.`);
	if (canDoVaginal(slave)) {
		r.push(VCheck.Vaginal(slave, 1));
	} else {
		r.push(VCheck.Anal(slave, 1));
	}
	r.push(`The sight of ${his} swollen body wobbling in mid-air as you pound away at ${him} never gets old,`);
	if (slave.devotion > 95) {
		r.push(`and ${he} certainly seems to enjoy your ministrations, too.`);
	} else if (slave.trust < -20 && slave.devotion > -10) {
		r.push(`and, by the end of your session, ${he} seems to be enjoying ${himself}, too.`);
	} else {
		r.push(`and the sight of ${his} ugly tears rolling down ${his} face to hit the ground far below is one hell of a bonus.`);
	}
	r.push(`Once finished, you release ${him} from ${his} restraints and have ${him} carried away to clean ${himself} up before returning to ${his} duties.`);
	App.Events.addParagraph(node, r);
	return node;
};


code:
/**
 *
 * @param {App.Entity.SlaveState} slave
 * @returns {DocumentFragment}
 */
App.Interact.fNippleFuck = function(slave) {
	const node = new DocumentFragment();
	let r = [];

	const {
		He, His,
		he, his, him, himself
	} = getPronouns(slave);

	addPartner(slave, -1);

	slave.counter.mammary += 2;
	V.mammaryTotal += 2;

	r.push(`You call ${him} over to make use of ${his} lewd nipple cunts.`);
	if (slave.fetish === "boobs" && slave.fetishKnown === 1) {
		r.push(`${He} practically vibrates with excitement at the prospect of getting ${his} tits fucked.`);
	} else if (slave.boobs >= 40000) {
		r.push(`You set out a few cushions on the floor for ${him} and let ${his} breasts spill across them.`);
	} else if (slave.boobs >= 20000) {
		r.push(`It takes a moment to find a table that can support ${his} breasts and withstand your lovemaking.`);
	} else {
		r.push(`You settle ${him} on a couch and have ${him} present ${his} chest to you.`);
	}

	r.push(`Once ${he} seems comfortable, you turn your attention to ${his} chest. You start by groping and nuzzling ${his} breasts, teasing ${his} nipples with your tongue.`);

	if (slave.lactation > 0) {
		r.push(`It doesn't take much stimulation before milk starts dribbling onto your tongue.`);
	}

	if (slave.devotion > 20 || slave.trust > 20) {
		r.push(`${He} starts making soft noises of pleasure and luxuriates in your attentions.`);
	} else {
		r.push(`${He} fidgets at your ministrations, but doesn't say anything.`);
	}
	r.push(`Once you're satisfied, you line up your dick with ${his} right nipple and slowly ease yourself into ${him}.`);

	if (slave.lactation > 0) {
		r.push(`Milk gushes around your length and soaks your crotch, the feeling almost like a waterjet, as ${his}`);
	} else {
		r.push(`${His}`);
	}
	r.push(`breast flesh grips you tightly. A few experimental pumps draws gasps from ${him} before you start to thrust in earnest. Soon, the room is filled with ${his} moaning and the sound of flesh on flesh.`);

	if (slave.fetish === "boobs" && slave.fetishKnown === 1) {
		r.push(`${He} has a glassy-eyed expression as ${he}`);
		if (hasAnyArms(slave)) {
			r.push(`gropes ${his} breasts with`);
			if (hasBothArms(slave)) {
				r.push(`both hands,`);
			} else {
				r.push(`${his} hand,`);
			}
			r.push(`fingering ${his} unoccupied nipple in time with your thrusts.`);
		} else {
			r.push(`savors the sensations running through ${his} breast.`);
		}
	} else if (slave.devotion > 20 || slave.trust > 20) {
		r.push(`${He} has a glassy-eyed expression as ${he}`);
		if (hasBothArms(slave)) {
			r.push(`gropes ${his} breasts with`);
			if (slave.dick > 0 && slave.chastityPenis === 0) {
				r.push(`one hand and furiously beats ${himself} off with the other.`);
			} else if (canDoVaginal(slave)) {
				r.push(`one hand and furiously abuses ${his} clit with the other.`);
			} else {
				r.push(`both hands.`);
			}
		} else if (hasAnyArms(slave)) {
			if (slave.dick > 0 && slave.chastityPenis === 0) {
				r.push(`jacks off while rubbing ${his} arm alongside ${his} breasts.`);
			} else if (canDoVaginal(slave)) {
				r.push(`fingers ${his} pussy while rubbing ${his} arm alongside ${his} breasts.`);
			} else {
				r.push(`while ${he} gropes ${his} neglected breast.`);
			}
		} else {
			r.push(`tries ${his} hardest to pleasure ${himself} with no hands.`);
		}
	} else {
		r.push(`${He} turns ${his} gaze away from you as a blush suffuses ${his} cheeks and does ${his} best to suppress ${his} moans.`);
	}

	r.push(`As your orgasm begins to build, you roughly grasp ${his} shoulders and begin to pick up the pace.`);

	if (slave.fetish === "boobs" && slave.fetishKnown === 1) {
		r.push(`As ${he} reaches ${his} climax, ${his} eyes roll back into ${his} head and ${he} quivers in delight at the intense breastgasm ${he} just sustained.`);
	} else if (slave.devotion > 20 || slave.trust > 20) {
		r.push(`Eager for release, ${his} moaning grows louder and higher in pitch${(hasAnyArms(slave)) ? `, and ${his} self-molesting becomes furious and desperate` : ""}.`);
	} else {
		r.push(`As ${he} reaches ${his} climax, ${his} body seems to tense and ${he} bites ${his} lip.`);
	}

	r.push(`It only takes few more thrusts before you bottom out inside ${his} breast and release your load deep inside ${him}. You pull yourself free with a lewd sound and proudly survey what you've wrought. Cum`);
	if (slave.lactation > 0) {
		r.push(`and milk dribble`);
	} else {
		r.push(`dribbles`);
	}
	r.push(`from ${his} gaping nipple. Enjoying the sight, you begin to feel yourself hardening and line up your dick at ${his} left nipple for a repeat performance.`);

	if (slave.lactation > 0) {
		slave.lactationDuration = 2;
		slave.boobs -= slave.boobsMilk;
		slave.boobsMilk = 0;
	} else {
		r.push(induceLactation(slave));
	}

	r.push(`Once both ${his} breasts have been thoroughly fucked, you send ${him} away to clean ${himself} up.`);
	App.Events.addParagraph(node, r);
	return node;
};