text: var compactable = require('./compactable');
  
  var BACKSLASH_HACK = '\\9';
  var IMPORTANT_TOKEN = '!important';
  var STAR_HACK = '*';
  var UNDERSCORE_HACK = '_';
  var BANG_HACK = '!ie';
  
  function restoreImportant(property) {
    property.value[property.value.length - 1][0] += IMPORTANT_TOKEN;
  }
  
  function restoreHack(property) {
    if (property.hack == 'underscore')
      property.name = UNDERSCORE_HACK + property.name;
    else if (property.hack == 'star')
      property.name = STAR_HACK + property.name;
    else if (property.hack == 'backslash')
      property.value[property.value.length - 1][0] += BACKSLASH_HACK;
    else if (property.hack == 'bang')
      property.value[property.value.length - 1][0] += ' ' + BANG_HACK;
  }
  
  function restoreFromOptimizing(properties, simpleMode) {
    for (var i = properties.length - 1; i >= 0; i--) {
      var property = properties[i];
      var descriptor = compactable[property.name];
      var restored;
  
      if (property.unused)
        continue;
  
      if (!property.dirty && !property.important && !property.hack)
        continue;
  
      if (!simpleMode && descriptor && descriptor.shorthand) {
        restored = descriptor.restore(property, compactable);
        property.value = restored;
      } else {
        restored = property.value;
      }
  
      if (property.important)
        restoreImportant(property);
  
      if (property.hack)
        restoreHack(property);
  
      if (!('all' in property))
        continue;
  
      var current = property.all[property.position];
      current[0][0] = property.name;
  
      current.splice(1, current.length - 1);
      Array.prototype.push.apply(current, restored);
    }
  }
  
  module.exports = restoreFromOptimizing;
  