<!-- RUBY-BACKUP · part 458 -->
', b: 'Nobody believed me.', a2: 'I did.'},
  {a: 'Come over. I made too much food again.', b: 'You always make too much.', a2: 'And you always show up. See you soon.'},
  {a: 'The Hokulea is passing overhead. Look up.', b: 'I see her. She is beautiful.'},
  {a: 'I will cover your shift. Go rest.', b: 'Are you sure?', a2: 'Go. I got this.'},
  {a: 'Your dog followed me home. Again.', b: 'That dog loves you more than me.', a2: 'He is here whenever you want him.'},
  {a: 'I saved the good seat. The one by the window.', b: 'You remembered.', a2: 'I always remember.'},
  {a: 'Do not worry about the credits. I got this round.', b: 'Next one is on me.', a2: 'Deal.'},
  {a: 'The court was wrong about you. Everyone knows it.', b: 'That means a lot. Really.'},
  {a: 'I am outside. I brought soup.', b: 'You did not have to.', a2: 'I wanted to.'},
  {a: 'Your plant is still alive. I watered it.', b: 'You are the best neighbor.', a2: 'That is what the street is for.'},
  {a: 'I will walk you home. It is dark.', b: 'It is out of your way.', a2: 'No such thing.'},
  {a: 'Happy birthday! I am downstairs.', b: 'You remembered!', a2: 'Of course I did. Come down.'},
  {a: 'The baby took her first steps!', b: 'No way! I am coming over right now.'},
  {a: 'I got the job! I got it!', b: 'I knew you would! Celebrating tonight?', a2: 'You are buying the first round though.'},
  {a: 'My car broke down. Can you...', b: 'Already in the car. Send me your location.'},
  {a: 'You were amazing in court today.', b: 'I was terrified.', a2: 'Nobody could tell. You stood tall.'},
  {a: 'I left a charger at the front desk for you.', b: 'Which one is yours?', a2: 'The blue one. It is all yours now.'},
  {a: 'The kids are asking about you.', b: 'Tell them I will be at the playground tomorrow.'},
  {a: 'I believe you. About everything.', b: 'That is all I needed to hear.'},
  {a: 'Do you need a place to stay tonight?', b: 'I did not want to ask.', a2: 'You did not have to. Door is open.'},
  {a: 'I am proud of you.', b: 'I needed to hear that today.'},
  {a: 'The garden is blooming. You should see it.', b: 'I will come by this weekend.'},
  {a: 'I kept your seat warm.', b: 'You are ridiculous.', a2: 'And you love me for it.'},
  {a: 'Take a breath. I am right here.', b: 'Okay. Okay. Thank you.'},
  {a: 'You do not have to be strong right now.', b: 'I am trying.', a2: 'I know. Let me be strong for both of us.'},
  {a: 'The stars are out. Come look.', b: 'Give me two minutes.'},
  {a: 'Whatever happens, I am on your side.', b: 'That is everything. Thank you.'}
];var PHONE_CALLERS = [];
function buildPhoneCaller(x, y, z){
  var g = new THREE.Group();
  /* a person on the phone */
  var skin = new THREE.MeshStandardMaterial({color: 0xd4a574, roughness: 0.6});
  var shirt = new THREE.MeshStandardMaterial({color: [0x336699, 0x993366, 0x339966, 0x996633][Math.floor(Math.random()*4)], roughness: 0.7});
  var head = new THREE.Mesh(new THREE.SphereGeometry(0.14, 14, 14), skin);
  head.position.y = 1.55; g.add(head);
  var body = new THREE.Mesh(new THREE.CylinderGeometry(0.16, 0.2, 0.9, 10), shirt);
  body.position.y = 1.0; g.add(body);
  /* phone to ear */
  var phone = new THREE.Mesh(new THREE.BoxGeometry(0.04, 0.12, 0.02),
    new THREE.MeshStandardMaterial({color: 0x111111}));
  phone.position.set(0.16, 1.55, 0.02);
  phone.rotation.z = -0.2;
  g.add(phone);
  /* arm up holding phone */
  var arm = new THREE.Mesh(new THREE.CylinderGeometry(0.04, 0.04, 0.4, 8), shirt);
  arm.position.set(0.2, 1.3, 0);
  arm.rotation.z = -0.5;
  g.add(arm);
  [-1,1].forEach(function(s){
    var leg = new THREE.Mesh(new THREE.CylinderGeometry(0.06, 0.05, 0.55, 8),
      new THREE.MeshStandardMaterial({color: 0x333333}));
    leg.position.set(0, 0.28, s*0.09); g.add(leg);
  });
  g.position.set(x, y, z);
  g.userData.isPhoneCaller = true;
  return g;
}

/* RANDOM KINDNESS GENERATOR */
var KIND_OPENERS = [
  'Hey, did you need',
  'Here, take my',
  'I got extra',
  'You look like you could use',
  'I saved you',
  'Do you want',
  'I brought you',
  'Take this'
];
var KIND_ITEMS = [
  'a charger', 'a battery', 'my jacket', 'a seat',
  'some food', 'my umbrella', 'a warm drink', 'my spot in line',
  'a hand', 'some company', 'my blanket', 'a smile',
  'directions', 'a light', 'my headphones', 'a story'
];
var KIND_CONTEXTS = [
  'your pad died', 'it is cold', 'you look tired',
  'the valley is scary', 'you missed lunch', 'it is raining',
  'you seem lost', 'it has been a long day', 'the court was hard',
  'you dropped something', 'no one should walk alone'
];
var KIND_RESPONSES = [
  'Thank you. Really.',
  'You are too kind.',
  'I will pay it forward.',
  'You are a lifesaver.',
  'I needed that. Thank you.',
  'Why are you so nice?',
  'I owe you one.',
  'This city is full of good people.',
  'Thank you. I will remember this.',
  'You made my day.'
];
var KIND_FOLLOWUPS = [
  'Anytime.', 'That is what we do here.', 'We look out for eac