function setPanelContent () {
  if ($0) {
    var el = $0
    var instance = el.__vue__
    while ((!instance || instance._isAnonymous) && el.parentNode) {
      el = el.parentNode
      instance = el.__vue__
    }
    if (!instance) {
      return {}
    } else {
      window.$vue = instance
      var state = {}
      var meta = ['$value', '$index', '$key']
      for (var key in instance) {
        if (key.charAt(0) === '_') continue
        if (key.charAt(0) === '$' && meta.indexOf(key) < 0) continue
        if (typeof instance[key] === 'function') continue
        if (instance.hasOwnProperty(key)) {
          state[key] = instance[key]
        } else {
          (state.$$scope = (state.$$scope || {}))[key] = instance[key]
        }
      }
      state = JSON.parse(JSON.stringify(state))
      state.$$owner = instance
      return state
    }
  } else {
    return {}
  }
}

var panels = chrome.devtools.panels
var expression = "(" + setPanelContent.toString() + ")()"
panels.elements.createSidebarPane(
  'Vue.js Properties',
  function (sidebar) {
    panels.elements.onSelectionChanged.addListener(function () {
      sidebar.setExpression(expression)
    })
  }
)
@@ -1,16 +1,108 @@
+/**%0A * Set dev tools panel content by returning an info object.%0A *%0A * @return %7BObject%7D%0A */%0A%0A
 function setPane
@@ -848,47 +848,396 @@
     
-state = JSON.parse(JSON.stringify(state
+// convert ES5 getter/setters back to a plain object, and%0A      // deal with circular references.%0A      var seen = %5B%5D%0A      state = JSON.parse(JSON.stringify(state, function (key, val) %7B%0A        if (val && typeof val === 'object') %7B%0A          if (seen.indexOf(val) %3E -1) %7B%0A            return '%5Bcircular reference%5D'%0A          %7D%0A          seen.push(val)%0A        %7D%0A        return val%0A      %7D
 ))%0A 

deal with circular reference