{"version":3,"sources":["/source-files/jsondiffpatch/node_modules/fiberglass/node_modules/browserify/node_modules/browser-pack/_prelude.js","/source-files/jsondiffpatch/src/main.js","/source-files/jsondiffpatch/src/environment.js","/source-files/jsondiffpatch/src/diffpatcher.js","/source-files/jsondiffpatch/src/date-reviver.js","/source-files/jsondiffpatch/src/processor.js","/source-files/jsondiffpatch/src/contexts/diff.js","/source-files/jsondiffpatch/src/pipe.js","/source-files/jsondiffpatch/src/contexts/patch.js","/source-files/jsondiffpatch/src/contexts/reverse.js","/source-files/jsondiffpatch/src/filters/trivial.js","/source-files/jsondiffpatch/src/filters/dates.js","/source-files/jsondiffpatch/src/filters/texts.js","/source-files/jsondiffpatch/src/filters/arrays.js","/source-files/jsondiffpatch/src/filters/nested.js","/source-files/jsondiffpatch/src/contexts/context.js","/source-files/jsondiffpatch/src/filters/lcs.js"],"names":["environment","require","DiffPatcher","exports","create","options","dateReviver","defaultInstance","diff","apply","arguments","patch","unpatch","reverse","isBrowser","homepage","version","packageInfoModuleName","packageInfo","formatterModuleName","formatters","console","window","Processor","Pipe","DiffContext","PatchContext","ReverseContext","trivial","nested","arrays","dates","texts","this","processor","pipe","append","collectChildrenDiffFilter","diffFilter","objectsDiffFilter","shouldHaveResult","collectChildrenPatchFilter","patchFilter","collectChildrenReverseFilter","reverseFilter","prototype","left","right","process","delta","module","key","value","parts","exec","Date","UTC","selfOptions","pipes","name","input","context","lastPipe","lastContext","nextPipe","nextAfterChildren","next","hasResult","result","undefined","Context","filters","Error","debug","length","index","filter","log","filterName","exiting","resultCheck","msg","push","prepend","unshift","indexOf","list","names","after","params","Array","slice","call","splice","before","clear","should","error","noResult","isArray","a","setResult","exit","leftType","rightType","leftIsArray","rightIsArray","getTime","TEXT_DIFF","DEFAULT_MIN_LENGTH","cachedDiffPatch","getDiffMatchPatch","required","instance","diff_match_patch","dmpModuleName","dmp","err","diff_match_patch_not_found","txt1","txt2","patch_toText","patch_make","results","patch_apply","patch_fromText","i","textPatchFailed","minLength","textDiff","diffMatchPatch","textDeltaReverse","l","lines","line","lineTmp","lineHeader","lineAdd","lineRemove","header","headerRegex","split","lineStart","join","arraysHaveMatchByRef","array1","array2","len1","len2","index1","val1","index2","val2","matchItems","value1","value2","objectHash","matchByPosition","hash1","hash2","hashCache1","hashCache2","lcs","ARRAY_MOVE","arrayIndexOf","array","item","child","matchContext","commonHead","commonTail","_t","trimmed1","trimmed2","seq","get","removedItems","indices1","detectMove","includeValueOnMove","removedItemsLength","indexOnArray2","indices2","isMove","removeItemIndex1","compare","numerically","b","numericallyBy","toRemove","toInsert","toModify","parseInt","sort","indexDiff","removedValue","toInsertLength","insertion","toModifyLength","modification","children","childName","newName","substr","reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","deleteIndex","hasOwnProperty","switchTo","parent","root","defaultMatch","lengthMatrix","match","x","y","matrix","Math","max","backtrack","sequence","subsequence"],"mappings":"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","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","\nvar environment = require('./environment');\n\nvar DiffPatcher = require('./diffpatcher').DiffPatcher;\nexports.DiffPatcher = DiffPatcher;\n\nexports.create = function(options){\n\treturn new DiffPatcher(options);\n};\n\nexports.dateReviver = require('./date-reviver');\n\nvar defaultInstance;\n\nexports.diff = function() {\n\tif (!defaultInstance) {\n\t\tdefaultInstance = new DiffPatcher();\n\t}\n\treturn defaultInstance.diff.apply(defaultInstance, arguments);\n};\n\nexports.patch = function() {\n\tif (!defaultInstance) {\n\t\tdefaultInstance = new DiffPatcher();\n\t}\n\treturn defaultInstance.patch.apply(defaultInstance, arguments);\n};\n\nexports.unpatch = function() {\n\tif (!defaultInstance) {\n\t\tdefaultInstance = new DiffPatcher();\n\t}\n\treturn defaultInstance.unpatch.apply(defaultInstance, arguments);\n};\n\nexports.reverse = function() {\n\tif (!defaultInstance) {\n\t\tdefaultInstance = new DiffPatcher();\n\t}\n\treturn defaultInstance.reverse.apply(defaultInstance, arguments);\n};\n\nif (environment.isBrowser) {\n\texports.homepage = '{{package-homepage}}';\n\texports.version = '{{package-version}}';\n} else {\n\tvar packageInfoModuleName = '../package.json';\n\tvar packageInfo = require(packageInfoModuleName);\n\texports.homepage = packageInfo.homepage;\n\texports.version = packageInfo.version;\n\n\tvar formatterModuleName = './formatters';\n\tvar formatters = require(formatterModuleName);\n\texports.formatters = formatters;\n\t// shortcut for console\n\texports.console = formatters.console;\n}\n","\nexports.isBrowser = typeof window !== 'undefined';\n","var Processor = require('./processor').Processor;\nvar Pipe = require('./pipe').Pipe;\nvar DiffContext = require('./contexts/diff').DiffContext;\nvar PatchContext = require('./contexts/patch').PatchContext;\nvar ReverseContext = require('./contexts/reverse').ReverseContext;\n\nvar trivial = require('./filters/trivial');\nvar nested = require('./filters/nested');\nvar arrays = require('./filters/arrays');\nvar dates = require('./filters/dates');\nvar texts = require('./filters/texts');\n\nvar DiffPatcher = function DiffPatcher(options) {\n  this.processor = new Processor(options);\n  this.processor.pipe(new Pipe('diff').append(\n    nested.collectChildrenDiffFilter,\n    trivial.diffFilter,\n    dates.diffFilter,\n    texts.diffFilter,\n    nested.objectsDiffFilter,\n    arrays.diffFilter\n  ).shouldHaveResult());\n  this.processor.pipe(new Pipe('patch').append(\n    nested.collectChildrenPatchFilter,\n    arrays.collectChildrenPatchFilter,\n    trivial.patchFilter,\n    texts.patchFilter,\n    nested.patchFilter,\n    arrays.patchFilter\n  ).shouldHaveResult());\n  this.processor.pipe(new Pipe('reverse').append(\n    nested.collectChildrenReverseFilter,\n    arrays.collectChildrenReverseFilter,\n    trivial.reverseFilter,\n    texts.reverseFilter,\n    nested.reverseFilter,\n    arrays.reverseFilter\n  ).shouldHaveResult());\n};\n\nDiffPatcher.prototype.options = function() {\n  return this.processor.options.apply(this.processor, arguments);\n};\n\nDiffPatcher.prototype.diff = function(left, right) {\n  return this.processor.process(new DiffContext(left, right));\n};\n\nDiffPatcher.prototype.patch = function(left, delta) {\n  return this.processor.process(new PatchContext(left, delta));\n};\n\nDiffPatcher.prototype.reverse = function(delta) {\n  return this.processor.process(new ReverseContext(delta));\n};\n\nDiffPatcher.prototype.unpatch = function(right, delta) {\n  return this.patch(right, this.reverse(delta));\n};\n\nexports.DiffPatcher = DiffPatcher;\n","// use as 2nd parameter for JSON.parse to revive Date instances\nmodule.exports = function dateReviver(key, value) {\n  var parts;\n  if (typeof value === 'string') {\n    parts = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?(Z|([+\\-])(\\d{2}):(\\d{2}))$/.exec(value);\n    if (parts) {\n      return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], +(parts[7] || 0)));\n    }\n  }\n  return value;\n};\n","\nvar Processor = function Processor(options){\n\tthis.selfOptions = options;\n\tthis.pipes = {};\n};\n\nProcessor.prototype.options = function(options) {\n\tif (options) {\n\t\tthis.selfOptions = options;\n\t}\n\treturn this.selfOptions;\n};\n\nProcessor.prototype.pipe = function(name, pipe) {\n\tif (typeof name === 'string') {\n\t\tif (typeof pipe === 'undefined') {\n\t\t\treturn this.pipes[name];\n\t\t} else {\n\t\t\tthis.pipes[name] = pipe;\n\t\t}\n\t}\n\tif (name && name.name) {\n\t\tpipe = name;\n\t\tif (pipe.processor === this) { return pipe; }\n\t\tthis.pipes[pipe.name] = pipe;\n\t}\n\tpipe.processor = this;\n\treturn pipe;\n};\n\nProcessor.prototype.process = function(input, pipe) {\n\tvar context = input;\n\tcontext.options = this.options();\n\tvar nextPipe = pipe || input.pipe || 'default';\n\tvar lastPipe, lastContext;\n\twhile (nextPipe) {\n\t\tif (typeof context.nextAfterChildren !== 'undefined') {\n\t\t\t// children processed and coming back to parent\n\t\t\tcontext.next = context.nextAfterChildren;\n\t\t\tcontext.nextAfterChildren = null;\n\t\t}\n\n\t\tif (typeof nextPipe === 'string') {\n\t\t\tnextPipe = this.pipe(nextPipe);\n\t\t}\n\t\tnextPipe.process(context);\n\t\tlastContext = context;\n\t\tlastPipe = nextPipe;\n\t\tnextPipe = null;\n\t\tif (context) {\n\t\t\tif (context.next) {\n\t\t\t\tcontext = context.next;\n\t\t\t\tnextPipe = lastContext.nextPipe || context.pipe || lastPipe;\n\t\t\t}\n\t\t}\n\t}\n\treturn context.hasResult ? context.result : undefined;\n};\n\nexports.Processor = Processor;\n","var Context = require('./context').Context;\n\nvar DiffContext = function DiffContext(left, right) {\n  this.left = left;\n  this.right = right;\n  this.pipe = 'diff';\n};\n\nDiffContext.prototype = new Context();\n\nexports.DiffContext = DiffContext;\n","var Pipe = function Pipe(name) {\n  this.name = name;\n  this.filters = [];\n};\n\nPipe.prototype.process = function(input) {\n  if (!this.processor) {\n    throw new Error('add this pipe to a processor before using it');\n  }\n  var debug = this.debug;\n  var length = this.filters.length;\n  var context = input;\n  for (var index = 0; index < length; index++) {\n    var filter = this.filters[index];\n    if (debug) {\n      this.log('filter: ' + filter.filterName);\n    }\n    filter(context);\n    if (typeof context === 'object' && context.exiting) {\n      context.exiting = false;\n      break;\n    }\n  }\n  if (!context.next && this.resultCheck) {\n    this.resultCheck(context);\n  }\n};\n\nPipe.prototype.log = function(msg) {\n  console.log('[jsondiffpatch] ' + this.name + ' pipe, ' + msg);\n};\n\nPipe.prototype.append = function() {\n  this.filters.push.apply(this.filters, arguments);\n  return this;\n};\n\nPipe.prototype.prepend = function() {\n  this.filters.unshift.apply(this.filters, arguments);\n  return this;\n};\n\nPipe.prototype.indexOf = function(filterName) {\n  if (!filterName) {\n    throw new Error('a filter name is required');\n  }\n  for (var index = 0; index < this.filters.length; index++) {\n    var filter = this.filters[index];\n    if (filter.filterName === filterName) {\n      return index;\n    }\n  }\n  throw new Error('filter not found: ' + filterName);\n};\n\nPipe.prototype.list = function() {\n  var names = [];\n  for (var index = 0; index < this.filters.length; index++) {\n    var filter = this.filters[index];\n    names.push(filter.filterName);\n  }\n  return names;\n};\n\nPipe.prototype.after = function(filterName) {\n  var index = this.indexOf(filterName);\n  var params = Array.prototype.slice.call(arguments, 1);\n  if (!params.length) {\n    throw new Error('a filter is required');\n  }\n  params.unshift(index + 1, 0);\n  Array.prototype.splice.apply(this.filters, params);\n  return this;\n};\n\nPipe.prototype.before = function(filterName) {\n  var index = this.indexOf(filterName);\n  var params = Array.prototype.slice.call(arguments, 1);\n  if (!params.length) {\n    throw new Error('a filter is required');\n  }\n  params.unshift(index, 0);\n  Array.prototype.splice.apply(this.filters, params);\n  return this;\n};\n\nPipe.prototype.clear = function() {\n  this.filters.length = 0;\n  return this;\n};\n\nPipe.prototype.shouldHaveResult = function(should) {\n  if (should === false) {\n    this.resultCheck = null;\n    return;\n  }\n  if (this.resultCheck) {\n    return;\n  }\n  var pipe = this;\n  this.resultCheck = function(context) {\n    if (!context.hasResult) {\n      console.log(context);\n      var error = new Error(pipe.name + ' failed');\n      error.noResult = true;\n      throw error;\n    }\n  };\n  return this;\n};\n\nexports.Pipe = Pipe;\n","var Context = require('./context').Context;\n\nvar PatchContext = function PatchContext(left, delta) {\n  this.left = left;\n  this.delta = delta;\n  this.pipe = 'patch';\n};\n\nPatchContext.prototype = new Context();\n\nexports.PatchContext = PatchContext;\n","var Context = require('./context').Context;\n\nvar ReverseContext = function ReverseContext(delta) {\n  this.delta = delta;\n  this.pipe = 'reverse';\n};\n\nReverseContext.prototype = new Context();\n\nexports.ReverseContext = ReverseContext;\n","var isArray = (typeof Array.isArray === 'function') ?\n  // use native function\n  Array.isArray :\n  // use instanceof operator\n  function(a) {\n    return a instanceof Array;\n  };\n\nvar diffFilter = function trivialMatchesDiffFilter(context) {\n  if (context.left === context.right) {\n    context.setResult(undefined).exit();\n    return;\n  }\n  if (typeof context.left === 'undefined') {\n    if (typeof context.right === 'function') {\n      throw new Error('functions are not supported');\n    }\n    context.setResult([context.right]).exit();\n    return;\n  }\n  if (typeof context.right === 'undefined') {\n    context.setResult([context.left, 0, 0]).exit();\n    return;\n  }\n  if (typeof context.left === 'function' || typeof context.right === 'function') {\n    throw new Error('functions are not supported');\n  }\n  context.leftType = context.left === null ? 'null' : typeof context.left;\n  context.rightType = context.right === null ? 'null' : typeof context.right;\n  if (context.leftType !== context.rightType) {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n  if (context.leftType === 'boolean' || context.leftType === 'number') {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n  if (context.leftType === 'object') {\n    context.leftIsArray = isArray(context.left);\n  }\n  if (context.rightType === 'object') {\n    context.rightIsArray = isArray(context.right);\n  }\n  if (context.leftIsArray !== context.rightIsArray) {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n};\ndiffFilter.filterName = 'trivial';\n\nvar patchFilter = function trivialMatchesPatchFilter(context) {\n  if (typeof context.delta === 'undefined') {\n    context.setResult(context.left).exit();\n    return;\n  }\n  context.nested = !isArray(context.delta);\n  if (context.nested) {\n    return;\n  }\n  if (context.delta.length === 1) {\n    context.setResult(context.delta[0]).exit();\n    return;\n  }\n  if (context.delta.length === 2) {\n    context.setResult(context.delta[1]).exit();\n    return;\n  }\n  if (context.delta.length === 3 && context.delta[2] === 0) {\n    context.setResult(undefined).exit();\n    return;\n  }\n};\npatchFilter.filterName = 'trivial';\n\nvar reverseFilter = function trivialReferseFilter(context) {\n  if (typeof context.delta === 'undefined') {\n    context.setResult(context.delta).exit();\n    return;\n  }\n  context.nested = !isArray(context.delta);\n  if (context.nested) {\n    return;\n  }\n  if (context.delta.length === 1) {\n    context.setResult([context.delta[0], 0, 0]).exit();\n    return;\n  }\n  if (context.delta.length === 2) {\n    context.setResult([context.delta[1], context.delta[0]]).exit();\n    return;\n  }\n  if (context.delta.length === 3 && context.delta[2] === 0) {\n    context.setResult([context.delta[0]]).exit();\n    return;\n  }\n};\nreverseFilter.filterName = 'trivial';\n\nexports.diffFilter = diffFilter;\nexports.patchFilter = patchFilter;\nexports.reverseFilter = reverseFilter;\n","var diffFilter = function datesDiffFilter(context) {\n  if (context.left instanceof Date) {\n    if (context.right instanceof Date) {\n      if (context.left.getTime() !== context.right.getTime()) {\n        context.setResult([context.left, context.right]);\n      } else {\n        context.setResult(undefined);\n      }\n    } else {\n      context.setResult([context.left, context.right]);\n    }\n    context.exit();\n  } else if (context.right instanceof Date) {\n    context.setResult([context.left, context.right]).exit();\n  }\n};\ndiffFilter.filterName = 'dates';\n\nexports.diffFilter = diffFilter;\n","/* global diff_match_patch */\nvar TEXT_DIFF = 2;\nvar DEFAULT_MIN_LENGTH = 60;\nvar cachedDiffPatch = null;\n\nvar getDiffMatchPatch = function(required) {\n  /*jshint camelcase: false */\n\n  if (!cachedDiffPatch) {\n    var instance;\n    if (typeof diff_match_patch !== 'undefined') {\n      // already loaded, probably a browser\n      instance = typeof diff_match_patch === 'function' ?\n        new diff_match_patch() : new diff_match_patch.diff_match_patch();\n    } else if (typeof require === 'function') {\n      try {\n        var dmpModuleName = 'diff_match_patch_uncompressed';\n        var dmp = require('../../public/external/' + dmpModuleName);\n        instance = new dmp.diff_match_patch();\n      } catch (err) {\n        instance = null;\n      }\n    }\n    if (!instance) {\n      if (!required) {\n        return null;\n      }\n      var error = new Error('text diff_match_patch library not found');\n      error.diff_match_patch_not_found = true;\n      throw error;\n    }\n    cachedDiffPatch = {\n      diff: function(txt1, txt2) {\n        return instance.patch_toText(instance.patch_make(txt1, txt2));\n      },\n      patch: function(txt1, patch) {\n        var results = instance.patch_apply(instance.patch_fromText(patch), txt1);\n        for (var i = 0; i < results[1].length; i++) {\n          if (!results[1][i]) {\n            var error = new Error('text patch failed');\n            error.textPatchFailed = true;\n          }\n        }\n        return results[0];\n      }\n    };\n  }\n  return cachedDiffPatch;\n};\n\nvar diffFilter = function textsDiffFilter(context) {\n  if (context.leftType !== 'string') {\n    return;\n  }\n  var minLength = (context.options && context.options.textDiff &&\n    context.options.textDiff.minLength) || DEFAULT_MIN_LENGTH;\n  if (context.left.length < minLength ||\n    context.right.length < minLength) {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n  // large text, try to use a text-diff algorithm\n  var diffMatchPatch = getDiffMatchPatch();\n  if (!diffMatchPatch) {\n    // diff-match-patch library not available, fallback to regular string replace\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n  var diff = diffMatchPatch.diff;\n  context.setResult([diff(context.left, context.right), 0, TEXT_DIFF]).exit();\n};\ndiffFilter.filterName = 'texts';\n\nvar patchFilter = function textsPatchFilter(context) {\n  if (context.nested) {\n    return;\n  }\n  if (context.delta[2] !== TEXT_DIFF) {\n    return;\n  }\n\n  // text-diff, use a text-patch algorithm\n  var patch = getDiffMatchPatch(true).patch;\n  context.setResult(patch(context.left, context.delta[0])).exit();\n};\npatchFilter.filterName = 'texts';\n\nvar textDeltaReverse = function(delta) {\n  var i, l, lines, line, lineTmp, header = null,\n    headerRegex = /^@@ +\\-(\\d+),(\\d+) +\\+(\\d+),(\\d+) +@@$/,\n    lineHeader, lineAdd, lineRemove;\n  lines = delta.split('\\n');\n  for (i = 0, l = lines.length; i < l; i++) {\n    line = lines[i];\n    var lineStart = line.slice(0, 1);\n    if (lineStart === '@') {\n      header = headerRegex.exec(line);\n      lineHeader = i;\n      lineAdd = null;\n      lineRemove = null;\n\n      // fix header\n      lines[lineHeader] = '@@ -' + header[3] + ',' + header[4] + ' +' + header[1] + ',' + header[2] + ' @@';\n    } else if (lineStart === '+') {\n      lineAdd = i;\n      lines[i] = '-' + lines[i].slice(1);\n      if (lines[i - 1].slice(0, 1) === '+') {\n        // swap lines to keep default order (-+)\n        lineTmp = lines[i];\n        lines[i] = lines[i - 1];\n        lines[i - 1] = lineTmp;\n      }\n    } else if (lineStart === '-') {\n      lineRemove = i;\n      lines[i] = '+' + lines[i].slice(1);\n    }\n  }\n  return lines.join('\\n');\n};\n\nvar reverseFilter = function textsReverseFilter(context) {\n  if (context.nested) {\n    return;\n  }\n  if (context.delta[2] !== TEXT_DIFF) {\n    return;\n  }\n\n  // text-diff, use a text-diff algorithm\n  context.setResult([textDeltaReverse(context.delta[0]), 0, TEXT_DIFF]).exit();\n};\nreverseFilter.filterName = 'texts';\n\nexports.diffFilter = diffFilter;\nexports.patchFilter = patchFilter;\nexports.reverseFilter = reverseFilter;\n","var DiffContext = require('../contexts/diff').DiffContext;\nvar PatchContext = require('../contexts/patch').PatchContext;\nvar ReverseContext = require('../contexts/reverse').ReverseContext;\n\nvar lcs = require('./lcs');\n\nvar ARRAY_MOVE = 3;\n\nvar isArray = (typeof Array.isArray === 'function') ?\n  // use native function\n  Array.isArray :\n  // use instanceof operator\n  function(a) {\n    return a instanceof Array;\n  };\n\nvar arrayIndexOf = typeof Array.prototype.indexOf === 'function' ?\n  function(array, item) {\n    return array.indexOf(item);\n  } : function(array, item) {\n    var length = array.length;\n    for (var i = 0; i < length; i++) {\n      if (array[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  };\n\nfunction arraysHaveMatchByRef(array1, array2, len1, len2) {\n  for (var index1 = 0; index1 < len1; index1++) {\n    var val1 = array1[index1];\n    for (var index2 = 0; index2 < len2; index2++) {\n      var val2 = array2[index2];\n      if (val1 === val2) {\n        return true;\n      }\n    }\n  }\n}\n\nfunction matchItems(array1, array2, index1, index2, context) {\n  var value1 = array1[index1];\n  var value2 = array2[index2];\n  if (value1 === value2) {\n    return true;\n  }\n  if (typeof value1 !== 'object' || typeof value2 !== 'object') {\n    return false;\n  }\n  var objectHash = context.objectHash;\n  if (!objectHash) {\n    // no way to match objects was provided, try match by position\n    return context.matchByPosition && index1 === index2;\n  }\n  var hash1;\n  var hash2;\n  if (typeof index1 === 'number') {\n    context.hashCache1 = context.hashCache1 || [];\n    hash1 = context.hashCache1[index1];\n    if (typeof hash1 === 'undefined') {\n      context.hashCache1[index1] = hash1 = objectHash(value1, index1);\n    }\n  } else {\n    hash1 = objectHash(value1);\n  }\n  if (typeof hash1 === 'undefined') {\n    return false;\n  }\n  if (typeof index2 === 'number') {\n    context.hashCache2 = context.hashCache2 || [];\n    hash2 = context.hashCache2[index2];\n    if (typeof hash2 === 'undefined') {\n      context.hashCache2[index2] = hash2 = objectHash(value2, index2);\n    }\n  } else {\n    hash2 = objectHash(value2);\n  }\n  if (typeof hash2 === 'undefined') {\n    return false;\n  }\n  return hash1 === hash2;\n}\n\nvar diffFilter = function arraysDiffFilter(context) {\n  if (!context.leftIsArray) {\n    return;\n  }\n\n  var matchContext = {\n    objectHash: context.options && context.options.objectHash,\n    matchByPosition: context.options && context.options.matchByPosition\n  };\n  var commonHead = 0;\n  var commonTail = 0;\n  var index;\n  var index1;\n  var index2;\n  var array1 = context.left;\n  var array2 = context.right;\n  var len1 = array1.length;\n  var len2 = array2.length;\n\n  var child;\n\n  if (len1 > 0 && len2 > 0 && !matchContext.objectHash &&\n    typeof matchContext.matchByPosition !== 'boolean') {\n    matchContext.matchByPosition = !arraysHaveMatchByRef(array1, array2, len1, len2);\n  }\n\n  // separate common head\n  while (commonHead < len1 && commonHead < len2 &&\n    matchItems(array1, array2, commonHead, commonHead, matchContext)) {\n    index = commonHead;\n    child = new DiffContext(context.left[index], context.right[index]);\n    context.push(child, index);\n    commonHead++;\n  }\n  // separate common tail\n  while (commonTail + commonHead < len1 && commonTail + commonHead < len2 &&\n    matchItems(array1, array2, len1 - 1 - commonTail, len2 - 1 - commonTail, matchContext)) {\n    index1 = len1 - 1 - commonTail;\n    index2 = len2 - 1 - commonTail;\n    child = new DiffContext(context.left[index1], context.right[index2]);\n    context.push(child, index2);\n    commonTail++;\n  }\n  var result;\n  if (commonHead + commonTail === len1) {\n    if (len1 === len2) {\n      // arrays are identical\n      context.setResult(undefined).exit();\n      return;\n    }\n    // trivial case, a block (1 or more consecutive items) was added\n    result = result || {\n      _t: 'a'\n    };\n    for (index = commonHead; index < len2 - commonTail; index++) {\n      result[index] = [array2[index]];\n    }\n    context.setResult(result).exit();\n    return;\n  }\n  if (commonHead + commonTail === len2) {\n    // trivial case, a block (1 or more consecutive items) was removed\n    result = result || {\n      _t: 'a'\n    };\n    for (index = commonHead; index < len1 - commonTail; index++) {\n      result['_' + index] = [array1[index], 0, 0];\n    }\n    context.setResult(result).exit();\n    return;\n  }\n  // reset hash cache\n  delete matchContext.hashCache1;\n  delete matchContext.hashCache2;\n\n  // diff is not trivial, find the LCS (Longest Common Subsequence)\n  var trimmed1 = array1.slice(commonHead, len1 - commonTail);\n  var trimmed2 = array2.slice(commonHead, len2 - commonTail);\n  var seq = lcs.get(\n    trimmed1, trimmed2,\n    matchItems,\n    matchContext\n  );\n  var removedItems = [];\n  result = result || {\n    _t: 'a'\n  };\n  for (index = commonHead; index < len1 - commonTail; index++) {\n    if (arrayIndexOf(seq.indices1, index - commonHead) < 0) {\n      // removed\n      result['_' + index] = [array1[index], 0, 0];\n      removedItems.push(index);\n    }\n  }\n\n  var detectMove = true;\n  if (context.options && context.options.arrays && context.options.arrays.detectMove === false) {\n    detectMove = false;\n  }\n  var includeValueOnMove = false;\n  if (context.options && context.options.arrays && context.options.arrays.includeValueOnMove) {\n    includeValueOnMove = true;\n  }\n\n  var removedItemsLength = removedItems.length;\n  for (index = commonHead; index < len2 - commonTail; index++) {\n    var indexOnArray2 = arrayIndexOf(seq.indices2, index - commonHead);\n    if (indexOnArray2 < 0) {\n      // added, try to match with a removed item and register as position move\n      var isMove = false;\n      if (detectMove && removedItemsLength > 0) {\n        for (var removeItemIndex1 = 0; removeItemIndex1 < removedItemsLength; removeItemIndex1++) {\n          index1 = removedItems[removeItemIndex1];\n          if (matchItems(trimmed1, trimmed2, index1 - commonHead,\n            index - commonHead, matchContext)) {\n            // store position move as: [originalValue, newPosition, ARRAY_MOVE]\n            result['_' + index1].splice(1, 2, index, ARRAY_MOVE);\n            if (!includeValueOnMove) {\n              // don't include moved value on diff, to save bytes\n              result['_' + index1][0] = '';\n            }\n\n            index2 = index;\n            child = new DiffContext(context.left[index1], context.right[index2]);\n            context.push(child, index2);\n            removedItems.splice(removeItemIndex1, 1);\n            isMove = true;\n            break;\n          }\n        }\n      }\n      if (!isMove) {\n        // added\n        result[index] = [array2[index]];\n      }\n    } else {\n      // match, do inner diff\n      index1 = seq.indices1[indexOnArray2] + commonHead;\n      index2 = seq.indices2[indexOnArray2] + commonHead;\n      child = new DiffContext(context.left[index1], context.right[index2]);\n      context.push(child, index2);\n    }\n  }\n\n  context.setResult(result).exit();\n\n};\ndiffFilter.filterName = 'arrays';\n\nvar compare = {\n  numerically: function(a, b) {\n    return a - b;\n  },\n  numericallyBy: function(name) {\n    return function(a, b) {\n      return a[name] - b[name];\n    };\n  }\n};\n\nvar patchFilter = function nestedPatchFilter(context) {\n  if (!context.nested) {\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var index, index1;\n\n  var delta = context.delta;\n  var array = context.left;\n\n  // first, separate removals, insertions and modifications\n  var toRemove = [];\n  var toInsert = [];\n  var toModify = [];\n  for (index in delta) {\n    if (index !== '_t') {\n      if (index[0] === '_') {\n        // removed item from original array\n        if (delta[index][2] === 0 || delta[index][2] === ARRAY_MOVE) {\n          toRemove.push(parseInt(index.slice(1), 10));\n        } else {\n          throw new Error('only removal or move can be applied at original array indices' +\n            ', invalid diff type: ' + delta[index][2]);\n        }\n      } else {\n        if (delta[index].length === 1) {\n          // added item at new array\n          toInsert.push({\n            index: parseInt(index, 10),\n            value: delta[index][0]\n          });\n        } else {\n          // modified item at new array\n          toModify.push({\n            index: parseInt(index, 10),\n            delta: delta[index]\n          });\n        }\n      }\n    }\n  }\n\n  // remove items, in reverse order to avoid sawing our own floor\n  toRemove = toRemove.sort(compare.numerically);\n  for (index = toRemove.length - 1; index >= 0; index--) {\n    index1 = toRemove[index];\n    var indexDiff = delta['_' + index1];\n    var removedValue = array.splice(index1, 1)[0];\n    if (indexDiff[2] === ARRAY_MOVE) {\n      // reinsert later\n      toInsert.push({\n        index: indexDiff[1],\n        value: removedValue\n      });\n    }\n  }\n\n  // insert items, in reverse order to avoid moving our own floor\n  toInsert = toInsert.sort(compare.numericallyBy('index'));\n  var toInsertLength = toInsert.length;\n  for (index = 0; index < toInsertLength; index++) {\n    var insertion = toInsert[index];\n    array.splice(insertion.index, 0, insertion.value);\n  }\n\n  // apply modifications\n  var toModifyLength = toModify.length;\n  var child;\n  if (toModifyLength > 0) {\n    for (index = 0; index < toModifyLength; index++) {\n      var modification = toModify[index];\n      child = new PatchContext(context.left[modification.index], modification.delta);\n      context.push(child, modification.index);\n    }\n  }\n\n  if (!context.children) {\n    context.setResult(context.left).exit();\n    return;\n  }\n  context.exit();\n};\npatchFilter.filterName = 'arrays';\n\nvar collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    context.left[child.childName] = child.result;\n  }\n  context.setResult(context.left).exit();\n};\ncollectChildrenPatchFilter.filterName = 'arraysCollectChildren';\n\nvar reverseFilter = function arraysReverseFilter(context) {\n  if (!context.nested) {\n    if (context.delta[2] === ARRAY_MOVE) {\n      context.newName = '_' + context.delta[1];\n      context.setResult([context.delta[0], parseInt(context.childName.substr(1), 10), ARRAY_MOVE]).exit();\n    }\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var name, child;\n  for (name in context.delta) {\n    if (name === '_t') {\n      continue;\n    }\n    child = new ReverseContext(context.delta[name]);\n    context.push(child, name);\n  }\n  context.exit();\n};\nreverseFilter.filterName = 'arrays';\n\nvar reverseArrayDeltaIndex = function(delta, index, itemDelta) {\n  if (typeof index === 'string' && index[0] === '_') {\n    return parseInt(index.substr(1), 10);\n  } else if (isArray(itemDelta) && itemDelta[2] === 0) {\n    return '_' + index;\n  }\n\n  var reverseIndex = +index;\n  for (var deltaIndex in delta) {\n    var deltaItem = delta[deltaIndex];\n    if (isArray(deltaItem)) {\n      if (deltaItem[2] === ARRAY_MOVE) {\n        var moveFromIndex = parseInt(deltaIndex.substr(1), 10);\n        var moveToIndex = deltaItem[1];\n        if (moveToIndex === +index) {\n          return moveFromIndex;\n        }\n        if (moveFromIndex <= reverseIndex && moveToIndex > reverseIndex) {\n          reverseIndex++;\n        } else if (moveFromIndex >= reverseIndex && moveToIndex < reverseIndex) {\n          reverseIndex--;\n        }\n      } else if (deltaItem[2] === 0) {\n        var deleteIndex = parseInt(deltaIndex.substr(1), 10);\n        if (deleteIndex <= reverseIndex) {\n          reverseIndex++;\n        }\n      } else if (deltaItem.length === 1 && deltaIndex <= reverseIndex) {\n        reverseIndex--;\n      }\n    }\n  }\n\n  return reverseIndex;\n};\n\nvar collectChildrenReverseFilter = function collectChildrenReverseFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  var delta = {\n    _t: 'a'\n  };\n\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    var name = child.newName;\n    if (typeof name === 'undefined') {\n      name = reverseArrayDeltaIndex(context.delta, child.childName, child.result);\n    }\n    if (delta[name] !== child.result) {\n      delta[name] = child.result;\n    }\n  }\n  context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'arraysCollectChildren';\n\nexports.diffFilter = diffFilter;\nexports.patchFilter = patchFilter;\nexports.collectChildrenPatchFilter = collectChildrenPatchFilter;\nexports.reverseFilter = reverseFilter;\nexports.collectChildrenReverseFilter = collectChildrenReverseFilter;\n","var DiffContext = require('../contexts/diff').DiffContext;\nvar PatchContext = require('../contexts/patch').PatchContext;\nvar ReverseContext = require('../contexts/reverse').ReverseContext;\n\nvar collectChildrenDiffFilter = function collectChildrenDiffFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  var result = context.result;\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    if (typeof child.result === 'undefined') {\n      continue;\n    }\n    result = result || {};\n    result[child.childName] = child.result;\n  }\n  if (result && context.leftIsArray) {\n    result._t = 'a';\n  }\n  context.setResult(result).exit();\n};\ncollectChildrenDiffFilter.filterName = 'collectChildren';\n\nvar objectsDiffFilter = function objectsDiffFilter(context) {\n  if (context.leftIsArray || context.leftType !== 'object') {\n    return;\n  }\n\n  var name, child;\n  for (name in context.left) {\n    child = new DiffContext(context.left[name], context.right[name]);\n    context.push(child, name);\n  }\n  for (name in context.right) {\n    if (typeof context.left[name] === 'undefined') {\n      child = new DiffContext(undefined, context.right[name]);\n      context.push(child, name);\n    }\n  }\n\n  if (!context.children || context.children.length === 0) {\n    context.setResult(undefined).exit();\n    return;\n  }\n  context.exit();\n};\nobjectsDiffFilter.filterName = 'objects';\n\nvar patchFilter = function nestedPatchFilter(context) {\n  if (!context.nested) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var name, child;\n  for (name in context.delta) {\n    child = new PatchContext(context.left[name], context.delta[name]);\n    context.push(child, name);\n  }\n  context.exit();\n};\npatchFilter.filterName = 'objects';\n\nvar collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    if (context.left.hasOwnProperty(child.childName) && child.result === undefined) {\n      delete context.left[child.childName];\n    } else if (context.left[child.childName] !== child.result) {\n      context.left[child.childName] = child.result;\n    }\n  }\n  context.setResult(context.left).exit();\n};\ncollectChildrenPatchFilter.filterName = 'collectChildren';\n\nvar reverseFilter = function nestedReverseFilter(context) {\n  if (!context.nested) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var name, child;\n  for (name in context.delta) {\n    child = new ReverseContext(context.delta[name]);\n    context.push(child, name);\n  }\n  context.exit();\n};\nreverseFilter.filterName = 'objects';\n\nvar collectChildrenReverseFilter = function collectChildrenReverseFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  var delta = {};\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    if (delta[child.childName] !== child.result) {\n      delta[child.childName] = child.result;\n    }\n  }\n  context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'collectChildren';\n\nexports.collectChildrenDiffFilter = collectChildrenDiffFilter;\nexports.objectsDiffFilter = objectsDiffFilter;\nexports.patchFilter = patchFilter;\nexports.collectChildrenPatchFilter = collectChildrenPatchFilter;\nexports.reverseFilter = reverseFilter;\nexports.collectChildrenReverseFilter = collectChildrenReverseFilter;\n","\nvar Pipe = require('../pipe').Pipe;\n\nvar Context = function Context(){\n};\n\nContext.prototype.setResult = function(result) {\n\tthis.result = result;\n\tthis.hasResult = true;\n\treturn this;\n};\n\nContext.prototype.exit = function() {\n\tthis.exiting = true;\n\treturn this;\n};\n\nContext.prototype.switchTo = function(next, pipe) {\n\tif (typeof next === 'string' || next instanceof Pipe) {\n\t\tthis.nextPipe = next;\n\t} else {\n\t\tthis.next = next;\n\t\tif (pipe) {\n\t\t\tthis.nextPipe = pipe;\n\t\t}\n\t}\n\treturn this;\n};\n\nContext.prototype.push = function(child, name) {\n\tchild.parent = this;\n\tif (typeof name !== 'undefined') {\n\t\tchild.childName = name;\n\t}\n\tchild.root = this.root || this;\n\tchild.options = child.options || this.options;\n\tif (!this.children) {\n\t\tthis.children = [child];\n\t\tthis.nextAfterChildren = this.next || null;\n\t\tthis.next = child;\n\t} else {\n\t\tthis.children[this.children.length - 1].next = child;\n\t\tthis.children.push(child);\n\t}\n\tchild.next = this;\n\treturn this;\n};\n\nexports.Context = Context;\n","/*\n\nLCS implementation that supports arrays or strings\n\nreference: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n\n*/\n\nvar defaultMatch = function(array1, array2, index1, index2) {\n  return array1[index1] === array2[index2];\n};\n\nvar lengthMatrix = function(array1, array2, match, context) {\n  var len1 = array1.length;\n  var len2 = array2.length;\n  var x, y;\n\n  // initialize empty matrix of len1+1 x len2+1\n  var matrix = [len1 + 1];\n  for (x = 0; x < len1 + 1; x++) {\n    matrix[x] = [len2 + 1];\n    for (y = 0; y < len2 + 1; y++) {\n      matrix[x][y] = 0;\n    }\n  }\n  matrix.match = match;\n  // save sequence lengths for each coordinate\n  for (x = 1; x < len1 + 1; x++) {\n    for (y = 1; y < len2 + 1; y++) {\n      if (match(array1, array2, x - 1, y - 1, context)) {\n        matrix[x][y] = matrix[x - 1][y - 1] + 1;\n      } else {\n        matrix[x][y] = Math.max(matrix[x - 1][y], matrix[x][y - 1]);\n      }\n    }\n  }\n  return matrix;\n};\n\nvar backtrack = function(matrix, array1, array2, index1, index2, context) {\n  if (index1 === 0 || index2 === 0) {\n    return {\n      sequence: [],\n      indices1: [],\n      indices2: []\n    };\n  }\n\n  if (matrix.match(array1, array2, index1 - 1, index2 - 1, context)) {\n    var subsequence = backtrack(matrix, array1, array2, index1 - 1, index2 - 1, context);\n    subsequence.sequence.push(array1[index1 - 1]);\n    subsequence.indices1.push(index1 - 1);\n    subsequence.indices2.push(index2 - 1);\n    return subsequence;\n  }\n\n  if (matrix[index1][index2 - 1] > matrix[index1 - 1][index2]) {\n    return backtrack(matrix, array1, array2, index1, index2 - 1, context);\n  } else {\n    return backtrack(matrix, array1, array2, index1 - 1, index2, context);\n  }\n};\n\nvar get = function(array1, array2, match, context) {\n  context = context || {};\n  var matrix = lengthMatrix(array1, array2, match || defaultMatch, context);\n  var result = backtrack(matrix, array1, array2, array1.length, array2.length, context);\n  if (typeof array1 === 'string' && typeof array2 === 'string') {\n    result.sequence = result.sequence.join('');\n  }\n  return result;\n};\n\nexports.get = get;\n"]}