var ShapePathInterface = (

	function() {

		return function pathInterfaceFactory(shape,view,propertyGroup){
		    var prop = view.sh;

		    function interfaceFunction(val){
		        if(val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2){
		            return interfaceFunction.path;
		        }
		    }

		    var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
		    prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));
		    Object.defineProperties(interfaceFunction, {
		        'path': {
		            get: function(){
		                if(prop.k){
		                    prop.getValue();
		                }
		                return prop;
		            }
		        },
		        'shape': {
		            get: function(){
		                if(prop.k){
		                    prop.getValue();
		                }
		                return prop;
		            }
		        },
		        '_name': { value: shape.nm },
		        'ix': { value: shape.ix },
		        'propertyIndex': { value: shape.ix },
		        'mn': { value: shape.mn },
		        'propertyGroup': {value: propertyGroup},
		    });
		    return interfaceFunction;
		}
	}()
)