{"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/pipe.js","/source-files/jsondiffpatch/src/contexts/diff.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/nested.js","/source-files/jsondiffpatch/src/filters/arrays.js","/source-files/jsondiffpatch/src/filters/dates.js","/source-files/jsondiffpatch/src/filters/texts.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","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","Context","setResult","cloneDiffValues","clone","JSON","parse","stringify","isArray","a","exit","leftType","rightType","leftIsArray","rightIsArray","children","child","childName","_t","propertyFilter","hasOwnProperty","arraysHaveMatchByRef","array1","array2","len1","len2","index1","val1","index2","val2","matchItems","value1","value2","objectHash","matchByPosition","hash1","hash2","hashCache1","hashCache2","lcs","ARRAY_MOVE","arrayIndexOf","array","item","i","matchContext","commonHead","commonTail","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","newName","substr","reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","deleteIndex","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","textPatchFailed","minLength","textDiff","diffMatchPatch","textDeltaReverse","l","lines","line","lineTmp","lineHeader","lineAdd","lineRemove","header","headerRegex","split","lineStart","join","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  return new DiffPatcher(options);\n};\n\nexports.dateReviver = require('./date-reviver');\n\nvar defaultInstance;\n\nexports.diff = function() {\n  if (!defaultInstance) {\n    defaultInstance = new DiffPatcher();\n  }\n  return defaultInstance.diff.apply(defaultInstance, arguments);\n};\n\nexports.patch = function() {\n  if (!defaultInstance) {\n    defaultInstance = new DiffPatcher();\n  }\n  return defaultInstance.patch.apply(defaultInstance, arguments);\n};\n\nexports.unpatch = function() {\n  if (!defaultInstance) {\n    defaultInstance = new DiffPatcher();\n  }\n  return defaultInstance.unpatch.apply(defaultInstance, arguments);\n};\n\nexports.reverse = function() {\n  if (!defaultInstance) {\n    defaultInstance = new DiffPatcher();\n  }\n  return defaultInstance.reverse.apply(defaultInstance, arguments);\n};\n\nif (environment.isBrowser) {\n  exports.homepage = '{{package-homepage}}';\n  exports.version = '{{package-version}}';\n} else {\n  var packageInfoModuleName = '../package.json';\n  var packageInfo = require(packageInfoModuleName);\n  exports.homepage = packageInfo.homepage;\n  exports.version = packageInfo.version;\n\n  var formatterModuleName = './formatters';\n  var formatters = require(formatterModuleName);\n  exports.formatters = formatters;\n  // shortcut for console\n  exports.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  this.selfOptions = options || {};\n  this.pipes = {};\n};\n\nProcessor.prototype.options = function(options) {\n  if (options) {\n    this.selfOptions = options;\n  }\n  return this.selfOptions;\n};\n\nProcessor.prototype.pipe = function(name, pipe) {\n  if (typeof name === 'string') {\n    if (typeof pipe === 'undefined') {\n      return this.pipes[name];\n    } else {\n      this.pipes[name] = pipe;\n    }\n  }\n  if (name && name.name) {\n    pipe = name;\n    if (pipe.processor === this) { return pipe; }\n    this.pipes[pipe.name] = pipe;\n  }\n  pipe.processor = this;\n  return pipe;\n};\n\nProcessor.prototype.process = function(input, pipe) {\n  var context = input;\n  context.options = this.options();\n  var nextPipe = pipe || input.pipe || 'default';\n  var lastPipe, lastContext;\n  while (nextPipe) {\n    if (typeof context.nextAfterChildren !== 'undefined') {\n      // children processed and coming back to parent\n      context.next = context.nextAfterChildren;\n      context.nextAfterChildren = null;\n    }\n\n    if (typeof nextPipe === 'string') {\n      nextPipe = this.pipe(nextPipe);\n    }\n    nextPipe.process(context);\n    lastContext = context;\n    lastPipe = nextPipe;\n    nextPipe = null;\n    if (context) {\n      if (context.next) {\n        context = context.next;\n        nextPipe = lastContext.nextPipe || context.pipe || lastPipe;\n      }\n    }\n  }\n  return context.hasResult ? context.result : undefined;\n};\n\nexports.Processor = Processor;\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;\nvar dateReviver = require('../date-reviver');\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\nDiffContext.prototype.setResult = function(result) {\n  if (this.options.cloneDiffValues) {\n    var clone = typeof this.options.cloneDiffValues === 'function' ?\n      this.options.cloneDiffValues : function(value) {\n        return JSON.parse(JSON.stringify(value), dateReviver);\n      };\n    if (typeof result[0] === 'object') {\n      result[0] = clone(result[0]);\n    }\n    if (typeof result[1] === 'object') {\n      result[1] = clone(result[1]);\n    }\n  }\n  return Context.prototype.setResult.apply(this, arguments);\n};\n\nexports.DiffContext = DiffContext;\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 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, propertyFilter = context.options.propertyFilter;\n  for (name in context.left) {\n    if (!context.left.hasOwnProperty(name)) {\n      continue;\n    }\n    if (propertyFilter && !propertyFilter(name, context)) {\n      continue;\n    }\n    child = new DiffContext(context.left[name], context.right[name]);\n    context.push(child, name);\n  }\n  for (name in context.right) {\n    if (!context.right.hasOwnProperty(name)) {\n      continue;\n    }\n    if (propertyFilter && !propertyFilter(name, context)) {\n      continue;\n    }\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","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 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","\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"]}