public ObjectSet<Map.Entry<K, V>> entrySet() {
   synchronized (sync) {
     return map.entrySet();
   }
 }
 public boolean isEmpty() {
   return map.isEmpty();
 }
 public boolean containsKey(final Object k) {
   synchronized (sync) {
     return map.containsKey(k);
   }
 }
 public ObjectSet<K> keySet() {
   if (keys == null) keys = ObjectSets.unmodifiable(map.keySet());
   return keys;
 }
 public String toString() {
   return map.toString();
 }
 public int size() {
   return map.size();
 }
 public boolean containsValue(final Object v) {
   return map.containsValue(v);
 }
 public ObjectSet<Object2ObjectMap.Entry<K, V>> object2ObjectEntrySet() {
   if (entries == null) entries = ObjectSets.synchronize(map.object2ObjectEntrySet(), sync);
   return entries;
 }
 public ObjectSet<K> keySet() {
   if (keys == null) keys = ObjectSets.synchronize(map.keySet(), sync);
   return keys;
 }
 public V put(final K k, final V v) {
   synchronized (sync) {
     return map.put(k, v);
   }
 }
 // public void putAll( final MAP KEY_VALUE_EXTENDS_GENERIC c ) { synchronized( sync ) {
 // map.putAll( c ); } }
 public void putAll(final Map<? extends K, ? extends V> m) {
   synchronized (sync) {
     map.putAll(m);
   }
 }
 public void defaultReturnValue(final V defRetValue) {
   synchronized (sync) {
     map.defaultReturnValue(defRetValue);
   }
 }
 public V defaultReturnValue() {
   synchronized (sync) {
     return map.defaultReturnValue();
   }
 }
 public boolean containsValue(final Object v) {
   synchronized (sync) {
     return map.containsValue(v);
   }
 }
 public int hashCode() {
   synchronized (sync) {
     return map.hashCode();
   }
 }
 public ObjectCollection<V> values() {
   if (values == null) return ObjectCollections.synchronize(map.values(), sync);
   return values;
 }
 public boolean equals(final Object o) {
   synchronized (sync) {
     return map.equals(o);
   }
 }
 public void clear() {
   synchronized (sync) {
     map.clear();
   }
 }
 public boolean containsKey(final Object k) {
   return map.containsKey(k);
 }
 public String toString() {
   synchronized (sync) {
     return map.toString();
   }
 }
 public ObjectSet<Object2ObjectMap.Entry<K, V>> object2ObjectEntrySet() {
   if (entries == null) entries = ObjectSets.unmodifiable(map.object2ObjectEntrySet());
   return entries;
 }
 public V remove(final Object k) {
   synchronized (sync) {
     return map.remove(k);
   }
 }
 public ObjectCollection<V> values() {
   if (values == null) return ObjectCollections.unmodifiable(map.values());
   return values;
 }
 public V get(final Object k) {
   synchronized (sync) {
     return map.get(k);
   }
 }
 public V get(final Object k) {
   return map.get(k);
 }
 public boolean isEmpty() {
   synchronized (sync) {
     return map.isEmpty();
   }
 }
 public ObjectSet<Map.Entry<K, V>> entrySet() {
   return ObjectSets.unmodifiable(map.entrySet());
 }
 public int size() {
   synchronized (sync) {
     return map.size();
   }
 }