private static void AddObjectKey(AnimationClip clip, EditorCurveBinding sourceBinding, SerializedProperty prop, double time)
 {
     if (prop.get_propertyType() == 5)
     {
         ObjectReferenceKeyframe[] array     = null;
         AnimationClipCurveInfo    curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);
         int num = Array.IndexOf <EditorCurveBinding>(curveInfo.objectBindings, sourceBinding);
         if (num >= 0)
         {
             array = curveInfo.objectCurves[num];
             int num2 = CurveEditUtility.EvaluateIndex(array, (float)time);
             if (CurveEditUtility.KeyCompare(array[num2].time, (float)time, clip.get_frameRate()) == 0)
             {
                 array[num2].value = prop.get_objectReferenceValue();
             }
             else if (num2 < array.Length - 1 && CurveEditUtility.KeyCompare(array[num2 + 1].time, (float)time, clip.get_frameRate()) == 0)
             {
                 array[num2 + 1].value = prop.get_objectReferenceValue();
             }
             else
             {
                 if (time > (double)array[0].time)
                 {
                     num2++;
                 }
                 ArrayUtility.Insert <ObjectReferenceKeyframe>(ref array, num2, new ObjectReferenceKeyframe
                 {
                     time  = (float)time,
                     value = prop.get_objectReferenceValue()
                 });
             }
         }
         else
         {
             array          = new ObjectReferenceKeyframe[1];
             array[0].time  = (float)time;
             array[0].value = prop.get_objectReferenceValue();
         }
         AnimationUtility.SetObjectReferenceCurve(clip, sourceBinding, array);
         EditorUtility.SetDirty(clip);
     }
 }
 public static Object Evaluate(ObjectReferenceKeyframe[] curve, float time)
 {
     return(curve[CurveEditUtility.EvaluateIndex(curve, time)].value);
 }