New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

addressit

Package Overview
Dependencies
Maintainers
2
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

addressit - npm Package Compare versions

Comparing version 1.3.1 to 1.4.0

2

component.json

@@ -5,3 +5,3 @@ {

"description": "Freeform Street Address Parser",
"version": "1.3.1",
"version": "1.4.0",
"main": "index.js",

@@ -8,0 +8,0 @@ "scripts": [

@@ -571,2 +571,3 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.addressit = f()}})(function(){var define,module,exports;return (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})({1:[function(require,module,exports){

'TRACK?', // TRACK / TRAC
'TR(AI)?L', // TRAIL / TRL
'T(RUNK)?WAY', // TRUNKWAY / TWAY

@@ -630,2 +631,2 @@ // 'VIEW', // VIEW

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy5udm0vdmVyc2lvbnMvbm9kZS92Ni4yLjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhZGRyZXNzLmpzIiwiaW5kZXguanMiLCJsb2NhbGUvZW4tVVMuanMiLCJub2RlX21vZHVsZXMvY29nL2V4dGVuZC5qcyIsInBhcnNlcnMvY29tcGlsZXIuanMiLCJwYXJzZXJzL2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyoganNoaW50IG5vZGU6IHRydWUgKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIHJlTnVtZXJpYyA9IC9eXFxkKyQvO1xuXG4vKipcbiAgIyMjIEFkZHJlc3NcbioqL1xuZnVuY3Rpb24gQWRkcmVzcyh0ZXh0LCBvcHRzKSB7XG4gIGlmICghICh0aGlzIGluc3RhbmNlb2YgQWRkcmVzcykpIHtcbiAgICByZXR1cm4gbmV3IEFkZHJlc3ModGV4dCk7XG4gIH1cblxuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLnBhcnRzID0gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWRkcmVzcztcbnZhciBwcm90byA9IEFkZHJlc3MucHJvdG90eXBlO1xuXG5cbi8qKlxuICAjIyMjIEFkZHJlc3MjX2V4dHJhY3RTdHJlZXRQYXJ0cyhzdGFydEluZGV4KVxuXG4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBleHRyYWN0IGZyb20gdGhlIHN0cmVldCB0eXBlIG1hdGNoXG4gIGluZGV4ICpiYWNrIHRvKiB0aGUgc3RyZWV0IG51bWJlciBhbmQgcG9zc2libHkgdW5pdCBudW1iZXIgZmllbGRzLlxuXG4gIFRoZSBmdW5jdGlvbiB3aWxsIHN0YXJ0IHdpdGggdGhlIHN0cmVldCB0eXBlLCB0aGVuIGFsc28gZ3JhYiB0aGUgcHJldmlvdXNcbiAgZmllbGQgcmVnYXJkbGVzcyBvZiBjaGVja3MuICBGaWVsZHMgd2lsbCBjb250aW51ZSB0byBiZSBwdWxsZWQgaW4gdW50aWxcbiAgZmllbGRzIHN0YXJ0IHNhdGlzZnlpbmcgbnVtZXJpYyBjaGVja3MuICBPbmNlIHBvc2l0aXZlIG51bWVyaWMgY2hlY2tzIGFyZVxuICBmaXJpbmcsIHRob3NlIHdpbGwgYmUgYnJvdWdodCBpbiBhcyBidWlsZGluZyAvIHVuaXQgbnVtYmVycyBhbmQgb25jZSB0aGVcbiAgc3RhcnQgb2YgdGhlIHBhcnRzIGFycmF5IGlzIHJlYWNoZWQgb3Igd2UgZmFsbCBiYWNrIHRvIG5vbi1udW1lcmljIGZpZWxkc1xuICB0aGVuIHRoZSBleHRyYWN0aW9uIGlzIHN0b3BwZWQuXG4qKi9cbnByb3RvLl9leHRyYWN0U3RyZWV0UGFydHMgPSBmdW5jdGlvbihzdGFydEluZGV4LCBzcGxpdFN0cmVldCkge1xuICB2YXIgaW5kZXggPSBzdGFydEluZGV4O1xuICB2YXIgc3RyZWV0UGFydHMgPSBbXTtcbiAgdmFyIG51bWJlclBhcnRzO1xuICB2YXIgcGFydHMgPSB0aGlzLnBhcnRzO1xuICB2YXIgc3RyZWV0UGFydHNMZW5ndGggPSAoc3BsaXRTdHJlZXQpID8gMyA6IDI7XG4gIHZhciB0ZXN0Rm4gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICB3aGlsZSAoaW5kZXggPj0gMCAmJiB0ZXN0Rm4oKSkge1xuICAgIHZhciBhbHBoYVBhcnQgPSBpc05hTihwYXJzZUludChwYXJ0c1tpbmRleF0sIDEwKSk7XG5cbiAgICBpZiAoc3RyZWV0UGFydHMubGVuZ3RoIDwgc3RyZWV0UGFydHNMZW5ndGggfHwgYWxwaGFQYXJ0KSB7XG4gICAgICAvLyBhZGQgdGhlIGN1cnJlbnQgcGFydCB0byB0aGUgc3RyZWV0IHBhcnRzXG4gICAgICBzdHJlZXRQYXJ0cy51bnNoaWZ0KHBhcnRzLnNwbGljZShpbmRleC0tLCAxKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKCEgbnVtYmVyUGFydHMpIHtcbiAgICAgICAgbnVtYmVyUGFydHMgPSBbXTtcbiAgICAgIH0gLy8gaWZcblxuICAgICAgLy8gYWRkIHRoZSBjdXJyZW50IHBhcnQgdG8gdGhlIGJ1aWxkaW5nIHBhcnRzXG4gICAgICBudW1iZXJQYXJ0cy51bnNoaWZ0KHBhcnRzLnNwbGljZShpbmRleC0tLCAxKSk7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgdGVzdCBmdW5jdGlvblxuICAgICAgdGVzdEZuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpc0FscGhhID0gaXNOYU4ocGFyc2VJbnQocGFydHNbaW5kZXhdLCAxMCkpO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYnVpbGRpbmcgcGFydHMsIHRoZW4gd2UgYXJlIGxvb2tpbmdcbiAgICAgICAgLy8gZm9yIG5vbi1hbHBoYSB2YWx1ZXMsIG90aGVyd2lzZSBhbHBoYVxuICAgICAgICByZXR1cm4gbnVtYmVyUGFydHMgPyAoISBpc0FscGhhKSA6IGlzQWxwaGE7XG4gICAgICB9O1xuICAgIH0gLy8gaWYuLmVsc2VcbiAgfSAvLyB3aGlsZVxuXG4gIHRoaXMubnVtYmVyID0gbnVtYmVyUGFydHMgPyBudW1iZXJQYXJ0cy5qb2luKCcvJykgOiAnJztcbiAgdGhpcy5zdHJlZXQgPSBzdHJlZXRQYXJ0cy5qb2luKCcgJykucmVwbGFjZSgvXFwsL2csICcnKTtcbn07XG5cbi8qKlxuICAjIyMjIEFkZHJlc3MjY2xlYW5cblxuICBUaGUgY2xlYW4gZnVuY3Rpb24gaXMgdXNlZCB0byBjbGVhbiB1cCBhbiBhZGRyZXNzIHN0cmluZy4gIEl0IGlzIGRlc2lnbmVkXG4gIHRvIHJlbW92ZSBhbnkgcGFydHMgb2YgdGhlIHRleHQgdGhhdCBwcmV2ZW4gZWZmZWN0aXZlIHBhcnNpbmcgb2YgdGhlXG4gIGFkZHJlc3Mgc3RyaW5nLlxuKiovXG5wcm90by5jbGVhbiA9IGZ1bmN0aW9uKGNsZWFuZXJzKSB7XG4gIC8vIGVuc3VyZSB3ZSBoYXZlIGNsZWFuZXJzXG4gIGNsZWFuZXJzID0gY2xlYW5lcnMgfHwgW107XG5cbiAgLy8gYXBwbHkgdGhlIGNsZWFuZXJzXG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBjbGVhbmVycy5sZW5ndGg7IGlpKyspIHtcbiAgICBpZiAodHlwZW9mIGNsZWFuZXJzW2lpXSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnRleHQgPSBjbGVhbmVyc1tpaV0uY2FsbChudWxsLCB0aGlzLnRleHQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjbGVhbmVyc1tpaV0gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC5yZXBsYWNlKGNsZWFuZXJzW2lpXSwgJycpO1xuICAgIH1cbiAgfSAvLyBmb3JcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICAjIyMjIEFkZHJlc3MjZXh0cmFjdChmaWVsZE5hbWUsIHJlZ2V4ZXMpXG5cbiAgVGhlIGV4dHJhY3QgZnVuY3Rpb24gaXMgdXNlZCB0byBleHRyYWN0IHRoZSBzcGVjaWZpZWQgZmllbGQgZnJvbSB0aGUgcmF3XG4gIHBhcnRzIHRoYXQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gc3BsaXQgZnJvbSB0aGUgaW5wdXQgdGV4dC4gIElmIHN1Y2Nlc3NmdWxseVxuICBsb2NhdGVkIHRoZW4gdGhlIGZpZWxkIHdpbGwgYmUgdXBkYXRlZCBmcm9tIHRoZSBwYXJ0cyBhbmQgdGhhdCBwYXJ0IHJlbW92ZWRcbiAgZnJvbSB0aGUgcGFydHMgbGlzdC5cbioqL1xucHJvdG8uZXh0cmFjdCA9IGZ1bmN0aW9uKGZpZWxkTmFtZSwgcmVnZXhlcykge1xuICB2YXIgbWF0Y2g7XG4gIHZhciByZ3hJZHg7XG4gIHZhciBpaTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgbG9va3VwcyA9IFtdO1xuXG4gIC8vIGlmIHRoZSByZWdleGVzIGhhdmUgYmVlbiBwYXNzZWQgaW4gYXMgb2JqZWN0cywgdGhlbiBjb252ZXJ0IHRvIGFuIGFycmF5XG4gIGlmICh0eXBlb2YgcmVnZXhlcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcmVnZXhlcy5zcGxpY2UgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbmV3UmVnZXhlcyA9IFtdO1xuXG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBrZXlzIGluIHRoZSByZWdleGVzXG4gICAgZm9yICh2YXIga2V5IGluIHJlZ2V4ZXMpIHtcbiAgICAgIG5ld1JlZ2V4ZXNbbmV3UmVnZXhlcy5sZW5ndGhdID0gcmVnZXhlc1trZXldO1xuICAgICAgbG9va3Vwc1tuZXdSZWdleGVzLmxlbmd0aCAtIDFdID0ga2V5O1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgcmVnZXhlcyB0byBwb2ludCB0byB0aGUgbmV3IHJlZ2V4ZXNcbiAgICByZWdleGVzID0gbmV3UmVnZXhlcztcbiAgfVxuXG4gIC8vIGl0ZXJhdGUgb3ZlciB0aGUgdW5pdCByZWdleGVzIGFuZCB0ZXN0IHRoZW0gYWdhaW5zdCB0aGUgdmFyaW91cyBwYXJ0c1xuICBmb3IgKHJneElkeCA9IDA7IHJneElkeCA8IHJlZ2V4ZXMubGVuZ3RoOyByZ3hJZHgrKykge1xuICAgIGZvciAoaWkgPSB0aGlzLnBhcnRzLmxlbmd0aDsgaWkgPj0gMDsgaWktLSApIHtcbiAgICAgIG1hdGNoID0gcmVnZXhlc1tyZ3hJZHhdLmV4ZWModGhpcy5wYXJ0c1tpaV0pO1xuXG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgbWF0Y2gsIHRoZW4gcHJvY2Vzc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSAybmQgY2FwdHVyZSBncm91cCwgdGhlbiByZXBsYWNlIHRoZSBpdGVtIHdpdGhcbiAgICAgICAgLy8gdGhlIHRleHQgb2YgdGhhdCBncm91cFxuICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICB0aGlzLnBhcnRzLnNwbGljZShpaSwgMSwgbWF0Y2hbMl0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwganVzdCByZW1vdmUgdGhlIGVsZW1lbnRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5wYXJ0cy5zcGxpY2UoaWksIDEpO1xuICAgICAgICB9IC8vIGlmLi5lbHNlXG5cbiAgICAgICAgdmFsdWUgPSBsb29rdXBzW3JneElkeF0gfHwgbWF0Y2hbMV07XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkTmFtZSA9PT0gJ3N0YXRlJyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtYXRjaE11bHRpcGxlUGFydCA9IGZhbHNlO1xuICAgICAgICB2YXIgc3BhY2VzSW5NYXRjaCA9IHJlZ2V4ZXNbcmd4SWR4XS5zb3VyY2Uuc3BsaXQoJ1xcXFxzJykubGVuZ3RoO1xuICAgICAgICBpZiAoc3BhY2VzSW5NYXRjaCA+IDEpIHtcbiAgICAgICAgICB2YXIgbXVsdGlwbGVQYXJ0ID0gW107XG4gICAgICAgICAgZm9yICh2YXIgcGFydEpvaW4gPSBpaTsgcGFydEpvaW4gPiBpaSAtIHNwYWNlc0luTWF0Y2ggJiYgcGFydEpvaW4gPj0gMDsgcGFydEpvaW4tLSkge1xuICAgICAgICAgICAgbXVsdGlwbGVQYXJ0LnB1c2godGhpcy5wYXJ0c1twYXJ0Sm9pbl0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtdWx0aXBsZVBhcnQucmV2ZXJzZSgpO1xuICAgICAgICAgIG11bHRpcGxlUGFydCA9IG11bHRpcGxlUGFydC5qb2luKCcgJyk7XG4gICAgICAgICAgbWF0Y2hNdWx0aXBsZVBhcnQgPSByZWdleGVzW3JneElkeF0uZXhlYyhtdWx0aXBsZVBhcnQpO1xuXG4gICAgICAgICAgaWYgKG1hdGNoTXVsdGlwbGVQYXJ0KSB7XG4gICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgMm5kIGNhcHR1cmUgZ3JvdXAsIHRoZW4gcmVwbGFjZSB0aGUgaXRlbSB3aXRoXG4gICAgICAgICAgICAvLyB0aGUgdGV4dCBvZiB0aGF0IGdyb3VwXG4gICAgICAgICAgICBpZiAobWF0Y2hNdWx0aXBsZVBhcnRbMl0pIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5zcGxpY2UoaWkgLSBzcGFjZXNJbk1hdGNoICsgMSwgc3BhY2VzSW5NYXRjaCwgbWF0Y2hNdWx0aXBsZVBhcnRbMl0pO1xuICAgICAgICAgICAgICBpaSAtPSBzcGFjZXNJbk1hdGNoICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSwganVzdCByZW1vdmUgdGhlIGVsZW1lbnRcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnBhcnRzLnNwbGljZShpaSAtIHNwYWNlc0luTWF0Y2ggKyAxLCBzcGFjZXNJbk1hdGNoKTtcbiAgICAgICAgICAgICAgaWkgLT0gc3BhY2VzSW5NYXRjaCArIDE7XG4gICAgICAgICAgICB9IC8vIGlmLi5lbHNlXG5cbiAgICAgICAgICAgIHZhbHVlID0gbG9va3Vwc1tyZ3hJZHhdIHx8IG1hdGNoTXVsdGlwbGVQYXJ0WzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBpZlxuICAgIH0gLy8gZm9yXG4gIH0gLy8gZm9yXG5cbiAgLy8gdXBkYXRlIHRoZSBmaWVsZCB2YWx1ZVxuICB0aGlzW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICAjIyMjIEFkZHJlc3MjZXh0cmFjdFN0cmVldFxuXG4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSB0aGUgYWRkcmVzcyBwYXJ0cyBhbmQgbG9jYXRlIGFueSBwYXJ0c1xuICB0aGF0IGxvb2sgdG8gYmUgcmVsYXRlZCB0byBhIHN0cmVldCBhZGRyZXNzLlxuKiovXG5wcm90by5leHRyYWN0U3RyZWV0ID0gZnVuY3Rpb24ocmVnZXhlcywgcmVTcGxpdFN0cmVldCkge1xuICB2YXIgcmVOdW1lcmljZXNxdWUgPSAvXihcXGQqfFxcZCpcXHcpJC87XG4gIHZhciBwYXJ0cyA9IHRoaXMucGFydHM7XG4gIHZhciBzcGxpdFN0cmVldCA9IGZhbHNlO1xuXG4gIC8vIGVuc3VyZSB3ZSBoYXZlIHJlZ2V4ZXNcbiAgcmVnZXhlcyA9IHJlZ2V4ZXMgfHwgW107XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxvY2F0ZSB0aGUgXCJiZXN0XCIgc3RyZWV0IHBhcnQgaW4gYW4gYWRkcmVzc1xuICAvLyBzdHJpbmcuICBJdCBpcyBjYWxsZWQgb25jZSBhIHN0cmVldCByZWdleCBoYXMgbWF0Y2hlZCBhZ2FpbnN0IGEgcGFydFxuICAvLyBzdGFydGluZyBmcm9tIHRoZSBsYXN0IHBhcnQgYW5kIHdvcmtpbmcgdG93YXJkcyB0aGUgZnJvbnQuIEluIHRlcm1zIG9mXG4gIC8vIHdoYXQgaXMgY29uc2lkZXJlZCB0aGUgYmVzdCwgd2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBwYXJ0IGNsb3Nlc3QgdG8gdGhlXG4gIC8vIHN0YXJ0IG9mIHRoZSBzdHJpbmcgdGhhdCBpcyBub3QgaW1tZWRpYXRlbHkgcHJlZml4ZWQgYnkgYSBudW1lcmljZXNxdWVcbiAgLy8gcGFydCAoZWcuIDEyMywgNDJBLCBldGMpLlxuICBmdW5jdGlvbiBsb2NhdGVCZXN0U3RyZWV0UGFydChzdGFydEluZGV4KSB7XG4gICAgdmFyIGJlc3RJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICAvLyBpZiB0aGUgc3RhcnQgaW5kZXggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAsIHRoZW4gcmV0dXJuXG4gICAgZm9yICh2YXIgaWkgPSBzdGFydEluZGV4LTE7IGlpID49IDA7IGlpLS0pIHtcbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgc3RyZWV0IHJlZ2V4ZXMgYW5kIHRlc3QgdGhlbSBhZ2FpbnN0IHRoZSB2YXJpb3VzIHBhcnRzXG4gICAgICBmb3IgKHZhciByZ3hJZHggPSAwOyByZ3hJZHggPCByZWdleGVzLmxlbmd0aDsgcmd4SWR4KyspIHtcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1hdGNoLCB0aGVuIHByb2Nlc3NcbiAgICAgICAgaWYgKHJlZ2V4ZXNbcmd4SWR4XS50ZXN0KHBhcnRzW2lpXSkgJiYgcGFydHNbaWktMV0gJiYgKCEgcmVOdW1lcmljZXNxdWUudGVzdChwYXJ0c1tpaS0xXSkpKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHRoZSBiZXN0IGluZGV4IGFuZCBicmVhayBmcm9tIHRoZSBpbm5lciBsb29wXG4gICAgICAgICAgYmVzdEluZGV4ID0gaWk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gaWZcbiAgICAgIH0gLy8gZm9yXG4gICAgfSAvLyBmb3JcblxuICAgIHJldHVybiBiZXN0SW5kZXg7XG4gIH0gLy8gbG9jYXRlQmVzdFN0cmVldFBhcnRcblxuICAvLyBpdGVyYXRlIG92ZXIgdGhlIHN0cmVldCByZWdleGVzIGFuZCB0ZXN0IHRoZW0gYWdhaW5zdCB0aGUgdmFyaW91cyBwYXJ0c1xuICBmb3IgKHZhciBwYXJ0SWR4ID0gcGFydHMubGVuZ3RoOyBwYXJ0SWR4LS07ICkge1xuICAgIGZvciAodmFyIHJneElkeCA9IDA7IHJneElkeCA8IHJlZ2V4ZXMubGVuZ3RoOyByZ3hJZHgrKykge1xuICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1hdGNoLCB0aGVuIHByb2Nlc3NcbiAgICAgIC8vIGlmIHRoZSBtYXRjaCBpcyBvbiB0aGUgZmlyc3QgcGFydCB0aG91Z2gsIHJlamVjdCBpdCBhcyB3ZVxuICAgICAgLy8gYXJlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBhIHRvd24gbmFtZSBvciBzb21ldGhpbmcgKGUuZy4gU3QgR2VvcmdlKVxuICAgICAgaWYgKHJlZ2V4ZXNbcmd4SWR4XS50ZXN0KHBhcnRzW3BhcnRJZHhdKSAmJiBwYXJ0SWR4ID4gMCkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGxvY2F0ZUJlc3RTdHJlZXRQYXJ0KHBhcnRJZHgpO1xuXG4gICAgICAgIC8vIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzcGxpdCBzdHJlZXQgKGkuZS4gZm9vIHJkIHdlc3QpIGFuZCB0aGVcbiAgICAgICAgLy8gYWRkcmVzcyBwYXJ0cyBhcmUgYXBwcm9wcmlhdGVseSBkZWxpbWl0ZWQsIHRoZW4gZ3JhYiB0aGUgbmV4dCBwYXJ0XG4gICAgICAgIC8vIGFsc29cbiAgICAgICAgaWYgKHJlU3BsaXRTdHJlZXQudGVzdChwYXJ0c1tzdGFydEluZGV4ICsgMV0pKSB7XG4gICAgICAgICAgc3BsaXRTdHJlZXQgPSB0cnVlO1xuICAgICAgICAgIHN0YXJ0SW5kZXggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2V4dHJhY3RTdHJlZXRQYXJ0cyhzdGFydEluZGV4LCBzcGxpdFN0cmVldCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBpZlxuICAgIH0gLy8gZm9yXG4gIH0gLy8gZm9yXG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAgIyMjIyBBZGRyZXNzI2ZpbmFsaXplXG5cbiAgVGhlIGZpbmFsaXplIGZ1bmN0aW9uIHRha2VzIGFueSByZW1haW5pbmcgcGFydHMgdGhhdCBoYXZlIG5vdCBiZWVuIGV4dHJhY3RlZFxuICBhcyBvdGhlciBpbmZvcm1hdGlvbiwgYW5kIHB1c2hlcyB0aG9zZSBmaWVsZHMgaW50byBhIGdlbmVyaWMgYHJlZ2lvbnNgIGZpZWxkLlxuKiovXG5wcm90by5maW5hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICAvLyB1cGRhdGUgdGhlIHJlZ2lvbnMsIGRpc2NhcmRpbmcgYW55IGVtcHR5IHN0cmluZ3MuXG4gIHRoaXMucmVnaW9ucyA9IHRoaXMucGFydHMuam9pbignICcpLnNwbGl0KC9cXCxcXHM/LykuZmlsdGVyKGZ1bmN0aW9uIChyZWdpb24pIHtcbiAgICAgIHJldHVybiByZWdpb24ubGVuZ3RoO1xuICB9KTtcblxuICAvLyByZXNldCB0aGUgcGFydHNcbiAgdGhpcy5wYXJ0cyA9IFtdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gICMjIyMgQWRkcmVzcyNzcGxpdFxuXG4gIFNwbGl0IHRoZSBhZGRyZXNzIGludG8gaXQncyBjb21wb25lbnQgcGFydHMsIGFuZCByZW1vdmUgYW55IGVtcHR5IHBhcnRzXG4qKi9cbnByb3RvLnNwbGl0ID0gZnVuY3Rpb24oc2VwYXJhdG9yKSB7XG4gIC8vIHNwbGl0IHRoZSBzdHJpbmdcbiAgdmFyIG5ld1BhcnRzID0gdGhpcy50ZXh0LnNwbGl0KHNlcGFyYXRvciB8fCAnICcpO1xuXG4gIHRoaXMucGFydHMgPSBbXTtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IG5ld1BhcnRzLmxlbmd0aDsgaWkrKykge1xuICAgIGlmIChuZXdQYXJ0c1tpaV0pIHtcbiAgICAgIHRoaXMucGFydHNbdGhpcy5wYXJ0cy5sZW5ndGhdID0gbmV3UGFydHNbaWldO1xuICAgIH0gLy8gaWZcbiAgfSAvLyBmb3JcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICAjIyMjIEFkZHJlc3MjdG9TdHJpbmdcblxuICBDb252ZXJ0IHRoZSBhZGRyZXNzIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4qKi9cbnByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvdXRwdXQgPSAnJztcblxuICBpZiAodGhpcy5idWlsZGluZykge1xuICAgIG91dHB1dCArPSB0aGlzLmJ1aWxkaW5nICsgJ1xcbic7XG4gIH0gLy8gaWZcblxuICBpZiAodGhpcy5zdHJlZXQpIHtcbiAgICBvdXRwdXQgKz0gdGhpcy5udW1iZXIgPyB0aGlzLm51bWJlciArICcgJyA6ICcnO1xuICAgIG91dHB1dCArPSB0aGlzLnN0cmVldCArICdcXG4nO1xuICB9XG5cbiAgb3V0cHV0ICs9IHRoaXMucmVnaW9ucy5qb2luKCcsICcpICsgJ1xcbic7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn07XG4iLCIvKiBqc2hpbnQgbm9kZTogdHJ1ZSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAgIyBhZGRyZXNzaXRcblxuICBBZGRyZXNzSXQgaXMgYSBmcmVlZm9ybSBzdHJlZXQgYWRkcmVzcyBwYXJzZXIsIHRoYXQgaXMgZGVzaWduZWQgdG8gdGFrZSBhXG4gIHBpZWNlIG9mIHRleHQgYW5kIGNvbnZlcnQgdGhhdCBpbnRvIGEgc3RydWN0dXJlZCBhZGRyZXNzIHRoYXQgY2FuIGJlXG4gIHByb2Nlc3NlZCBpbiBkaWZmZXJlbnQgc3lzdGVtcy5cblxuICBUaGUgZm9jYWwgcG9pbnQgb2YgYGFkZHJlc3NpdGAgaXMgb24gdGhlIHN0cmVldCBwYXJzaW5nIGNvbXBvbmVudCwgcmF0aGVyXG4gIHRoYW4gYXR0ZW1wdGluZyB0byBhcHByb3ByaWF0ZWx5IGlkZW50aWZ5IHZhcmlvdXMgc3RhdGVzLCBjb3VudGllcywgdG93bnMsXG4gIGV0YywgYXMgdGhlc2UgdmFyeSBmcm9tIGNvdW50cnkgdG8gY291bnRyeSBmYWlybHkgZHJhbWF0aWNhbGx5LiBUaGVzZVxuICBkZXRhaWxzIGFyZSBpbnN0ZWFkIHB1dCBpbnRvIGEgZ2VuZXJpYyByZWdpb25zIGFycmF5IHRoYXQgY2FuIGJlIGZ1cnRoZXJcbiAgcGFyc2VkIGJhc2VkIG9uIHlvdXIgYXBwbGljYXRpb24gbmVlZHMuXG5cbiAgIyMgRXhhbXBsZSBVc2FnZVxuXG4gIFRoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBob3cgYWRkcmVzcyBpdCBjYW4gYmUgdXNlZDpcblxuICBgYGBqc1xuICB2YXIgYWRkcmVzc2l0ID0gcmVxdWlyZSgnYWRkcmVzc2l0Jyk7XG5cbiAgLy8gcGFyc2UgYSBtYWRlIHVwIGFkZHJlc3MsIHdpdGggc29tZSBzbGlnaHRseSB0cmlja3kgcGFydHNcbiAgdmFyIGFkZHJlc3MgPSBhZGRyZXNzaXQoJ1Nob3AgOCwgNDMxIFN0IEtpbGRhIFJkIE1lbGJvdXJuZScpO1xuICBgYGBcblxuICBUaGUgYGFkZHJlc3NgIG9iamVjdCB3b3VsZCBub3cgY29udGFpbiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOlxuXG4gIGBgYFxuICB7IHRleHQ6ICc4LzQzMSBTVCBLSUxEQSBSRCBNRUxCT1VSTkUnLFxuICAgIHBhcnRzOiBbXSxcbiAgICB1bml0OiA4LFxuICAgIGNvdW50cnk6IHVuZGVmaW5lZCxcbiAgICBudW1iZXI6IDQzMSxcbiAgICBzdHJlZXQ6ICdTVCBLSUxEQSBSRCcsXG4gICAgcmVnaW9uczogWyAnTUVMQk9VUk5FJyBdIH1cbiAgYGBgXG5cbiAgRm9yIG1vcmUgZXhhbXBsZXMsIHNlZSB0aGUgdGVzdHMuXG5cbiAgIyMgUmVmZXJlbmNlXG5cbioqL1xuXG4vKipcbiAgIyMjIGFkZHJlc3NpdChpbnB1dCwgb3B0cz8pXG5cbiAgUnVuIHRoZSBhZGRyZXNzIHBhcnNlciBmb3IgdGhlIGdpdmVuIGlucHV0LiAgT3B0aW9uYWwgYG9wdHNgIGNhbiBiZVxuICBzdXBwbGllZCBpZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCAoRU4pIHBhcnNlci5cblxuKiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlucHV0LCBvcHRzKSB7XG4gIC8vIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHRoZW4gdXNlIHRoZSBkZWZhdWx0IHZhbmlsbGEgZW4gbG9jYWxlXG4gIHZhciBwYXJzZSA9IChvcHRzIHx8IHt9KS5sb2NhbGUgfHwgcmVxdWlyZSgnLi9sb2NhbGUvZW4tVVMnKTtcblxuICAvLyBwYXJzZSB0aGUgYWRkcmVzc1xuICByZXR1cm4gcGFyc2UoaW5wdXQsIG9wdHMpO1xufTtcbiIsInZhciBwYXJzZXIgPSByZXF1aXJlKCcuLi9wYXJzZXJzL2VuLmpzJyk7XG52YXIgZXh0ZW5kID0gcmVxdWlyZSgnY29nL2V4dGVuZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlucHV0LCBvcHRzKSB7XG4gIC8vIHBhcnNlIHRoZSBiYXNlIGFkZHJlc3NcbiAgcmV0dXJuIHBhcnNlcihpbnB1dCwgZXh0ZW5kKHsgXG4gIFx0c3RhdGU6IHtcblx0ICAgIEFMOiAvKF5hbGFiYW1hfF5BTCQpL2ksXG5cdCAgICBBSzogLyheYWxhc2thfF5BSyQpL2ksXG5cdCAgICBBUzogLyheYW1lcmljYW5cXHNzYW1vYXxeQVMkKS9pLFxuXHQgICAgQVo6IC8oXmFyaXpvbmF8XkFaJCkvaSxcblx0ICAgIEFSOiAvKF5hcmthbnNhc3xeQVIkKS9pLFxuXHQgICAgQ0E6IC8oXmNhbGlmb3JuaWF8XkNBJCkvaSxcblx0ICAgIENPOiAvKF5jb2xvcmFkb3xeQ08kKS9pLFxuXHQgICAgQ1Q6IC8oXmNvbm5lY3RpY3V0fF5DVCQpL2ksXG5cdCAgICBERTogLyheZGVsYXdhcmV8XkRFJCkvaSxcblx0ICAgIERDOiAvKF5kaXN0cmljdFxcc29mXFxzY29sdW1iaWF8XkRDJCkvaSxcblx0ICAgIEZNOiAvKF5mZWRlcmF0ZWRcXHNzdGF0ZXNcXHNvZlxcc21pY3JvbmVzaWF8XkZNJCkvaSxcblx0ICAgIEZMOiAvKF5mbG9yaWRhfF5GTCQpL2ksXG5cdCAgICBHQTogLyheZ2VvcmdpYXxeR0EkKS9pLFxuXHQgICAgR1U6IC8oXmd1YW18XkdVJCkvaSxcblx0ICAgIEhJOiAvKF5oYXdhaWl8XkhJJCkvaSxcblx0ICAgIElEOiAvKF5pZGFob3xeSUQkKS9pLFxuXHQgICAgSUw6IC8oXmlsbGlub2lzfF5JTCQpL2ksXG5cdCAgICBJTjogLyheaW5kaWFuYXxeSU4kKS9pLFxuXHQgICAgSUE6IC8oXmlvd2F8XklBJCkvaSxcblx0ICAgIEtTOiAvKF5rYW5zYXN8XktTJCkvaSxcblx0ICAgIEtZOiAvKF5rZW50dWNreXxeS1kkKS9pLFxuXHQgICAgTEE6IC8oXmxvdWlzaWFuYXxeTEEkKS9pLFxuXHQgICAgTUU6IC8oXm1haW5lfF5NRSQpL2ksXG5cdCAgICBNSDogLyhebWFyc2hhbGxcXHNpc2xhbmRzfF5NSCQpL2ksXG5cdCAgICBNRDogLyhebWFyeWxhbmR8Xk1EJCkvaSxcblx0ICAgIE1BOiAvKF5tYXNzYWNodXNldHRzfF5NQSQpL2ksXG5cdCAgICBNSTogLyhebWljaGlnYW58Xk1JJCkvaSxcblx0ICAgIE1OOiAvKF5taW5uZXNvdGF8Xk1OJCkvaSxcblx0ICAgIE1TOiAvKF5taXNzaXNzaXBwaXxeTVMkKS9pLFxuXHQgICAgTU86IC8oXm1pc3NvdXJpfF5NTyQpL2ksXG5cdCAgICBNVDogLyhebW9udGFuYXxeTVQkKS9pLFxuXHQgICAgTkU6IC8oXm5lYnJhc2thfF5ORSQpL2ksXG5cdCAgICBOVjogLyhebmV2YWRhfF5OViQpL2ksXG5cdCAgICBOSDogLyhebmV3XFxzaGFtcHNoaXJlfF5OSCQpL2ksXG5cdCAgICBOSjogLyhebmV3XFxzamVyc2V5fF5OSiQpL2ksXG5cdCAgICBOTTogLyhebmV3XFxzbWV4aWNvfF5OTSQpL2ksXG5cdCAgICBOWTogLyhebmV3XFxzeW9ya3xeTlkkKS9pLFxuXHQgICAgTkM6IC8oXm5vcnRoXFxzY2Fyb2xpbmF8Xk5DJCkvaSxcblx0ICAgIE5EOiAvKF5ub3J0aFxcc2Rha290YXxeTkQkKS9pLFxuXHQgICAgTVA6IC8oXm5vcnRoZXJuXFxzbWFyaWFuYVxcc2lzbGFuZHN8Xk1QJCkvaSxcblx0ICAgIE9IOiAvKF5vaGlvfF5PSCQpL2ksXG5cdCAgICBPSzogLyheb2tsYWhvbWF8Xk9LJCkvaSxcblx0ICAgIE9SOiAvKF5vcmVnb258Xk9SJCkvaSxcblx0ICAgIFBXOiAvKF5wYWxhdXxeUFckKS9pLFxuXHQgICAgUEE6IC8oXnBlbm5zeWx2YW5pYXxeUEEkKS9pLFxuXHQgICAgUFI6IC8oXnB1ZXJ0b1xcc3JpY298XlBSJCkvaSxcblx0ICAgIFJJOiAvKF5yaG9kZVxcc2lzbGFuZHxeUkkkKS9pLFxuXHQgICAgU0M6IC8oXnNvdXRoXFxzY2Fyb2xpbmF8XlNDJCkvaSxcblx0ICAgIFNEOiAvKF5zb3V0aFxcc2Rha290YXxeU0QkKS9pLFxuXHQgICAgVE46IC8oXnRlbm5lc3NlZXxeVE4kKS9pLFxuXHQgICAgVFg6IC8oXnRleGFzfF5UWCQpL2ksXG5cdCAgICBVVDogLyhedXRhaHxeVVQkKS9pLFxuXHQgICAgVlQ6IC8oXnZlcm1vbnR8XlZUJCkvaSxcblx0ICAgIFZJOiAvKF52aXJnaW5cXHNpc2xhbmRzfF5WSSQpL2ksXG5cdCAgICBWQTogLyhedmlyZ2luaWF8XlZBJCkvaSxcblx0ICAgIFdBOiAvKF53YXNoaW5ndG9ufF5XQSQpL2ksXG5cdCAgICBXVjogLyhed2VzdFxcc3ZpcmdpbmlhfF5XViQpL2ksXG5cdCAgICBXSTogLyhed2lzY29uc2lufF5XSSQpL2ksXG5cdCAgICBXWTogLyhed3lvbWluZ3xeV1kkKS9pXG4gIFx0fSxcbiAgXHRjb3VudHJ5OiB7XG4gICAgICAgIFVTQTogLyheVU5JVEVEXFxzU1RBVEVTfF5VXFwuP1NcXC4/QT8kKS9pXG4gICAgfSxcbiAgICByZVBvc3RhbENvZGU6IC8oXlxcZHs1fSQpfCheXFxkezV9LVxcZHs0fSQpLyB9LCBvcHRzKSk7XG4gICAgICAgICAgICAgICAvLyBQb3N0YWwgY29kZXMgb2YgdGhlIGZvcm0gJ0RERERELUREREQnIG9yIGp1c3QgJ0REREREJ1xuICAgICAgICAgICAgICAgLy8gMTAwMTAgaXMgdmFsaWQgYW5kIHNvIGlzIDEwMDEwLTEyMzRcbn07XG4iLCIvKiBqc2hpbnQgbm9kZTogdHJ1ZSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiMjIGNvZy9leHRlbmRcblxuYGBganNcbnZhciBleHRlbmQgPSByZXF1aXJlKCdjb2cvZXh0ZW5kJyk7XG5gYGBcblxuIyMjIGV4dGVuZCh0YXJnZXQsICopXG5cblNoYWxsb3cgY29weSBvYmplY3QgcHJvcGVydGllcyBmcm9tIHRoZSBzdXBwbGllZCBzb3VyY2Ugb2JqZWN0cyAoKikgaW50b1xudGhlIHRhcmdldCBvYmplY3QsIHJldHVybmluZyB0aGUgdGFyZ2V0IG9iamVjdCBvbmNlIGNvbXBsZXRlZDpcblxuYGBganNcbmV4dGVuZCh7IGE6IDEsIGI6IDIgfSwgeyBjOiAzIH0sIHsgZDogNCB9LCB7IGI6IDUgfSkpO1xuYGBgXG5cblNlZSBhbiBleGFtcGxlIG9uIFtyZXF1aXJlYmluXShodHRwOi8vcmVxdWlyZWJpbi5jb20vP2dpc3Q9NjA3OTQ3NSkuXG4qKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odGFyZ2V0KSB7XG4gIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKS5mb3JFYWNoKGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgIGlmICghIHNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufTsiLCIvKiBqc2hpbnQgbm9kZTogdHJ1ZSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRleHRSZWdleGVzKSB7XG4gIHZhciByZWdleGVzID0gW107XG4gIHZhciByZVN0cmVldENsZWFuZXIgPSAvXlxcXj8oLiopXFwsP1xcJD8kLztcbiAgdmFyIGlpO1xuXG4gIGZvciAoaWkgPSB0ZXh0UmVnZXhlcy5sZW5ndGg7IGlpLS07ICkge1xuICAgIHJlZ2V4ZXNbaWldID0gbmV3IFJlZ0V4cChcbiAgICAgIHRleHRSZWdleGVzW2lpXS5yZXBsYWNlKHJlU3RyZWV0Q2xlYW5lciwgJ14kMVxcLD8kJyksXG4gICAgICAnaSdcbiAgICApO1xuICB9IC8vIGZvclxuXG4gIHJldHVybiByZWdleGVzO1xufTsiLCIvKiBqc2hpbnQgbm9kZTogdHJ1ZSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQWRkcmVzcyA9IHJlcXVpcmUoJy4uL2FkZHJlc3MnKTtcbnZhciBjb21waWxlciA9IHJlcXVpcmUoJy4vY29tcGlsZXInKTtcblxuLy8gaW5pdGlhbGlzZSB0aGUgc3RyZWV0IHJlZ2V4ZXNcbi8vIHRoZXNlIGFyZSB0aGUgcmVnZXhlcyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBvciBub3QgYSBzdHJpbmcgaXMgYSBzdHJlZXRcbi8vIGl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhleSBhcmUgcGFyc2VkIHRocm91Z2ggdGhlIHJlU3RyZWV0Q2xlYW5lclxuLy8gcmVnZXggdG8gYmVjb21lIG1vcmUgc3RyaWN0XG4vLyB0aGlzIGxpc3QgaGFzIGJlZW4gc291cmNlZCBmcm9tOlxuLy8gaHR0cHM6Ly93d3cucHJvcGVydHlhc3Npc3Quc2EuZ292LmF1L3BhL3FoZWxwLnBodG1sP2NtZD1zdHJlZXR0eXBlXG4vL1xuLy8gX19OT1RFOl9fIFNvbWUgb2YgdGhlIHN0cmVldCB0eXBlcyBoYXZlIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGNvbGxpc2lvbnNcbi8vIHdpdGggY29tbW9uIHBhcnRzIG9mIHN1YnVyYiBuYW1lcy4gIEF0IHNvbWUgcG9pbnQgdGhlIHN0cmVldCBwYXJzZXIgbWF5IGJlXG4vLyBpbXByb3ZlZCB0byBkZWFsIHdpdGggdGhlc2UgY2FzZXMsIGJ1dCBmb3Igbm93IHRoaXMgaGFzIGJlZW4gZGVlbWVkXG4vLyBzdWl0YWJsZS5cblxudmFyIHN0cmVldFJlZ2V4ZXMgPSBjb21waWxlcihbXG4gICdBTExFP1knLCAgICAgICAgICAgICAgIC8vIEFMTEVZIC8gQUxMWVxuICAnQVBQKFJPQUNIKT8nLCAgICAgICAgICAvLyBBUFBST0FDSCAvIEFQUFxuICAnQVJDKEFERSk/JywgICAgICAgICAgICAvLyBBUkNBREUgLyBBUkNcbiAgJ0FWKEV8RU5VRSk/JywgICAgICAgICAgLy8gQVZFTlVFIC8gQVYgLyBBVkVcbiAgJyhCT1VMRVZBUkR8QkxWRCknLCAgICAgLy8gQk9VTEVWQVJEIC8gQkxWRFxuICAnQlJPVycsICAgICAgICAgICAgICAgICAvLyBCUk9XXG4gICdCWVBBKFNTKT8nLCAgICAgICAgICAgIC8vIEJZUEFTUyAvIEJZUEFcbiAgJ0MoQVVTRSk/V0FZJywgICAgICAgICAgLy8gQ0FVU0VXQVkgLyBDV0FZXG4gICcoQ0lSQ1VJVHxDQ1QpJywgICAgICAgIC8vIENJUkNVSVQgLyBDQ1RcbiAgJ0NJUkMoVVMpPycsICAgICAgICAgICAgLy8gQ0lSQ1VTIC8gQ0lSQ1xuICAnQ0woT1NFKT8nLCAgICAgICAgICAgICAvLyBDTE9TRSAvIENMXG4gICdDTz9QU0UnLCAgICAgICAgICAgICAgIC8vIENPUFNFIC8gQ1BTRVxuICAnKENPUk5FUnxDTlIpJywgICAgICAgICAvLyBDT1JORVIgLyBDTlJcbiAgLy8gJ0NPVkUnLCAgICAgICAgICAgICAgICAgLy8gQ09WRVxuICAnKEMoKE9VUil8Uik/VHxDUlQpJywgICAvLyBDT1VSVCAvIENUIC9DUlRcbiAgJ0NSRVMoQ0VOVCk/JywgICAgICAgICAgLy8gQ1JFU0NFTlQgLyBDUkVTXG4gICdEUihJVkUpPycsICAgICAgICAgICAgIC8vIERSSVZFIC8gRFJcbiAgLy8gJ0VORCcsICAgICAgICAgICAgICAgICAgLy8gRU5EXG4gICdFU1AoTEFOQU5ERSk/JywgICAgICAgIC8vIEVTUExBTkFERSAvIEVTUFxuICAvLyAnRkxBVCcsICAgICAgICAgICAgICAgICAvLyBGTEFUXG4gICdGKFJFRSk/V0FZJywgICAgICAgICAgIC8vIEZSRUVXQVkgLyBGV0FZXG4gICcoRlJPTlRBR0V8RlJOVCknLCAgICAgIC8vIEZST05UQUdFIC8gRlJOVFxuICAvLyAnKEdBUkRFTlN8R0ROUyknLCAgICAgICAvLyBHQVJERU5TIC8gR0ROU1xuICAnKEdMQURFfEdMRCknLCAgICAgICAgICAvLyBHTEFERSAvIEdMRFxuICAvLyAnR0xFTicsICAgICAgICAgICAgICAgICAvLyBHTEVOXG4gICdHUihFRSk/TicsICAgICAgICAgICAgIC8vIEdSRUVOIC8gR1JOXG4gIC8vICdHUihPVkUpPycsICAgICAgICAgICAgIC8vIEdST1ZFIC8gR1JcbiAgLy8gJ0goRUlHSCk/VFMnLCAgICAgICAgICAgLy8gSEVJR0hUUyAvIEhUU1xuICAnKEhJR0hXQVl8SFdZKScsICAgICAgICAvLyBISUdIV0FZIC8gSFdZXG4gICcoTEFORXxMTiknLCAgICAgICAgICAgIC8vIExBTkUgLyBMTlxuICAnTElOSycsICAgICAgICAgICAgICAgICAvLyBMSU5LXG4gICdMT09QJywgICAgICAgICAgICAgICAgIC8vIExPT1BcbiAgJ01BTEwnLCAgICAgICAgICAgICAgICAgLy8gTUFMTFxuICAnTUVXUycsICAgICAgICAgICAgICAgICAvLyBNRVdTXG4gICcoUEFDS0VUfFBDS1QpJywgICAgICAgIC8vIFBBQ0tFVCAvIFBDS1RcbiAgJ1AoQVJBKT9ERScsICAgICAgICAgICAgLy8gUEFSQURFIC8gUERFXG4gIC8vICdQQVJLJywgICAgICAgICAgICAgICAgIC8vIFBBUktcbiAgJyhQQVJLV0FZfFBLV1kpJywgICAgICAgLy8gUEFSS1dBWSAvIFBLV1lcbiAgJ1BMKEFDRSk/JywgICAgICAgICAgICAgLy8gUExBQ0UgLyBQTFxuICAnUFJPTShFTkFERSk/JywgICAgICAgICAvLyBQUk9NRU5BREUgLyBQUk9NXG4gICdSRVMoRVJWRSk/JywgICAgICAgICAgIC8vIFJFU0VSVkUgLyBSRVNcbiAgLy8gJ1JJP0RHRScsICAgICAgICAgICAgICAgLy8gUklER0UgLyBSREdFXG4gICdSSVNFJywgICAgICAgICAgICAgICAgIC8vIFJJU0VcbiAgJ1IoT0EpP0QnLCAgICAgICAgICAgICAgLy8gUk9BRCAvIFJEXG4gICdST1cnLCAgICAgICAgICAgICAgICAgIC8vIFJPV1xuICAnU1EoVUFSRSk/JywgICAgICAgICAgICAvLyBTUVVBUkUgLyBTUVxuICAnU1QoUkVFVCk/JywgICAgICAgICAgICAvLyBTVFJFRVQgLyBTVFxuICAnU1RSST9QJywgICAgICAgICAgICAgICAvLyBTVFJJUCAvIFNUUlBcbiAgJ1RBUk4nLCAgICAgICAgICAgICAgICAgLy8gVEFSTlxuICAnVChFUlJBKT9DRScsICAgICAgICAgICAvLyBURVJSQUNFIC8gVENFXG4gICcoVEhPUk9VR0hGQVJFfFRGUkUpJywgIC8vIFRIT1JPVUdIRkFSRSAvIFRGUkVcbiAgJ1RSQUNLPycsICAgICAgICAgICAgICAgLy8gVFJBQ0sgLyBUUkFDXG4gICdUKFJVTkspP1dBWScsICAgICAgICAgIC8vIFRSVU5LV0FZIC8gVFdBWVxuICAvLyAnVklFVycsICAgICAgICAgICAgICAgICAvLyBWSUVXXG4gICdWST9TVEEnLCAgICAgICAgICAgICAgIC8vIFZJU1RBIC8gVlNUQVxuICAnV0FMSycsICAgICAgICAgICAgICAgICAvLyBXQUxLXG4gICdXQT9ZJywgICAgICAgICAgICAgICAgIC8vIFdBWSAvIFdZXG4gICdXKEFMSyk/V0FZJywgICAgICAgICAgIC8vIFdBTEtXQVkgLyBXV0FZXG4gICdZQVJEJyAgICAgICAgICAgICAgICAgIC8vIFlBUkRcbl0pO1xuXG52YXIgcmVTcGxpdFN0cmVldCA9IC9eKE58TlRIfE5PUlRIfEV8RVNUfEVBU1R8U3xTVEh8U09VVEh8V3xXU1R8V0VTVClcXCwkL2k7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odGV4dCwgb3B0cykge1xuICB2YXIgYWRkcmVzcyA9IG5ldyBBZGRyZXNzKHRleHQsIG9wdHMpO1xuXG4gIC8vIGNsZWFuIHRoZSBhZGRyZXNzXG4gIGFkZHJlc3NcbiAgICAuY2xlYW4oW1xuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgZG90cyBmcm9tIHR3byBsZXR0ZXIgYWJicmV2aWF0aW9uc1xuICAgICAgICBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoLyhcXHd7Mn0pXFwuL2csICckMScpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGNvbnZlcnQgc2hvcCB0byBhIHVuaXQgZm9ybWF0XG4gICAgICAgIGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxccypTSE9QXFxzPyhcXGQqKVxcLD9cXHMqL2ksICckMS8nKTtcbiAgICAgICAgfVxuICAgIF0pXG5cbiAgICAvLyBzcGxpdCB0aGUgYWRkcmVzc1xuICAgIC5zcGxpdCgvXFxzLylcblxuICAgIC8vIGV4dHJhY3QgdGhlIHVuaXRcbiAgICAuZXh0cmFjdCgndW5pdCcsIFtcbiAgICAgICAgKC9eKD86XFwjfEFQVHxBUEFSVE1FTlQpXFxzPyhcXGQrKS8pLFxuICAgICAgICAoL14oXFxkKylcXC8oLiopLylcbiAgICBdKVxuXG4gICAgLy8gZXh0cmFjdCB0aGUgc3RyZWV0XG4gICAgLmV4dHJhY3RTdHJlZXQoc3RyZWV0UmVnZXhlcywgcmVTcGxpdFN0cmVldCk7XG5cbiAgaWYgKG9wdHMgJiYgb3B0cy5zdGF0ZSkge1xuICAgIGFkZHJlc3MuZXh0cmFjdCgnc3RhdGUnLCBvcHRzLnN0YXRlICk7XG4gIH1cblxuICBpZiAob3B0cyAmJiBvcHRzLmNvdW50cnkpIHtcbiAgICBhZGRyZXNzLmV4dHJhY3QoJ2NvdW50cnknLCBvcHRzLmNvdW50cnkgKTtcbiAgfVxuXG4gIGlmIChvcHRzICYmIG9wdHMucmVQb3N0YWxDb2RlKSB7XG4gICAgYWRkcmVzcy5leHRyYWN0KCdwb3N0YWxjb2RlJywgWyBvcHRzLnJlUG9zdGFsQ29kZSBdKTtcbiAgfVxuXG4gICAvLyB0YWtlIHJlbWFpbmluZyB1bmtub3duIHBhcnRzIGFuZCBwdXNoIHRoZW1cbiAgIHJldHVybiBhZGRyZXNzLmZpbmFsaXplKCk7XG59O1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy5udm0vdmVyc2lvbnMvbm9kZS92Ni4zLjEvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhZGRyZXNzLmpzIiwiaW5kZXguanMiLCJsb2NhbGUvZW4tVVMuanMiLCJub2RlX21vZHVsZXMvY29nL2V4dGVuZC5qcyIsInBhcnNlcnMvY29tcGlsZXIuanMiLCJwYXJzZXJzL2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvKiBqc2hpbnQgbm9kZTogdHJ1ZSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVOdW1lcmljID0gL15cXGQrJC87XG5cbi8qKlxuICAjIyMgQWRkcmVzc1xuKiovXG5mdW5jdGlvbiBBZGRyZXNzKHRleHQsIG9wdHMpIHtcbiAgaWYgKCEgKHRoaXMgaW5zdGFuY2VvZiBBZGRyZXNzKSkge1xuICAgIHJldHVybiBuZXcgQWRkcmVzcyh0ZXh0KTtcbiAgfVxuXG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMucGFydHMgPSBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZGRyZXNzO1xudmFyIHByb3RvID0gQWRkcmVzcy5wcm90b3R5cGU7XG5cblxuLyoqXG4gICMjIyMgQWRkcmVzcyNfZXh0cmFjdFN0cmVldFBhcnRzKHN0YXJ0SW5kZXgpXG5cbiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGV4dHJhY3QgZnJvbSB0aGUgc3RyZWV0IHR5cGUgbWF0Y2hcbiAgaW5kZXggKmJhY2sgdG8qIHRoZSBzdHJlZXQgbnVtYmVyIGFuZCBwb3NzaWJseSB1bml0IG51bWJlciBmaWVsZHMuXG5cbiAgVGhlIGZ1bmN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0aGUgc3RyZWV0IHR5cGUsIHRoZW4gYWxzbyBncmFiIHRoZSBwcmV2aW91c1xuICBmaWVsZCByZWdhcmRsZXNzIG9mIGNoZWNrcy4gIEZpZWxkcyB3aWxsIGNvbnRpbnVlIHRvIGJlIHB1bGxlZCBpbiB1bnRpbFxuICBmaWVsZHMgc3RhcnQgc2F0aXNmeWluZyBudW1lcmljIGNoZWNrcy4gIE9uY2UgcG9zaXRpdmUgbnVtZXJpYyBjaGVja3MgYXJlXG4gIGZpcmluZywgdGhvc2Ugd2lsbCBiZSBicm91Z2h0IGluIGFzIGJ1aWxkaW5nIC8gdW5pdCBudW1iZXJzIGFuZCBvbmNlIHRoZVxuICBzdGFydCBvZiB0aGUgcGFydHMgYXJyYXkgaXMgcmVhY2hlZCBvciB3ZSBmYWxsIGJhY2sgdG8gbm9uLW51bWVyaWMgZmllbGRzXG4gIHRoZW4gdGhlIGV4dHJhY3Rpb24gaXMgc3RvcHBlZC5cbioqL1xucHJvdG8uX2V4dHJhY3RTdHJlZXRQYXJ0cyA9IGZ1bmN0aW9uKHN0YXJ0SW5kZXgsIHNwbGl0U3RyZWV0KSB7XG4gIHZhciBpbmRleCA9IHN0YXJ0SW5kZXg7XG4gIHZhciBzdHJlZXRQYXJ0cyA9IFtdO1xuICB2YXIgbnVtYmVyUGFydHM7XG4gIHZhciBwYXJ0cyA9IHRoaXMucGFydHM7XG4gIHZhciBzdHJlZXRQYXJ0c0xlbmd0aCA9IChzcGxpdFN0cmVldCkgPyAzIDogMjtcbiAgdmFyIHRlc3RGbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIHdoaWxlIChpbmRleCA+PSAwICYmIHRlc3RGbigpKSB7XG4gICAgdmFyIGFscGhhUGFydCA9IGlzTmFOKHBhcnNlSW50KHBhcnRzW2luZGV4XSwgMTApKTtcblxuICAgIGlmIChzdHJlZXRQYXJ0cy5sZW5ndGggPCBzdHJlZXRQYXJ0c0xlbmd0aCB8fCBhbHBoYVBhcnQpIHtcbiAgICAgIC8vIGFkZCB0aGUgY3VycmVudCBwYXJ0IHRvIHRoZSBzdHJlZXQgcGFydHNcbiAgICAgIHN0cmVldFBhcnRzLnVuc2hpZnQocGFydHMuc3BsaWNlKGluZGV4LS0sIDEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoISBudW1iZXJQYXJ0cykge1xuICAgICAgICBudW1iZXJQYXJ0cyA9IFtdO1xuICAgICAgfSAvLyBpZlxuXG4gICAgICAvLyBhZGQgdGhlIGN1cnJlbnQgcGFydCB0byB0aGUgYnVpbGRpbmcgcGFydHNcbiAgICAgIG51bWJlclBhcnRzLnVuc2hpZnQocGFydHMuc3BsaWNlKGluZGV4LS0sIDEpKTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSB0ZXN0IGZ1bmN0aW9uXG4gICAgICB0ZXN0Rm4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGlzQWxwaGEgPSBpc05hTihwYXJzZUludChwYXJ0c1tpbmRleF0sIDEwKSk7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBidWlsZGluZyBwYXJ0cywgdGhlbiB3ZSBhcmUgbG9va2luZ1xuICAgICAgICAvLyBmb3Igbm9uLWFscGhhIHZhbHVlcywgb3RoZXJ3aXNlIGFscGhhXG4gICAgICAgIHJldHVybiBudW1iZXJQYXJ0cyA/ICghIGlzQWxwaGEpIDogaXNBbHBoYTtcbiAgICAgIH07XG4gICAgfSAvLyBpZi4uZWxzZVxuICB9IC8vIHdoaWxlXG5cbiAgdGhpcy5udW1iZXIgPSBudW1iZXJQYXJ0cyA/IG51bWJlclBhcnRzLmpvaW4oJy8nKSA6ICcnO1xuICB0aGlzLnN0cmVldCA9IHN0cmVldFBhcnRzLmpvaW4oJyAnKS5yZXBsYWNlKC9cXCwvZywgJycpO1xufTtcblxuLyoqXG4gICMjIyMgQWRkcmVzcyNjbGVhblxuXG4gIFRoZSBjbGVhbiBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFuIHVwIGFuIGFkZHJlc3Mgc3RyaW5nLiAgSXQgaXMgZGVzaWduZWRcbiAgdG8gcmVtb3ZlIGFueSBwYXJ0cyBvZiB0aGUgdGV4dCB0aGF0IHByZXZlbiBlZmZlY3RpdmUgcGFyc2luZyBvZiB0aGVcbiAgYWRkcmVzcyBzdHJpbmcuXG4qKi9cbnByb3RvLmNsZWFuID0gZnVuY3Rpb24oY2xlYW5lcnMpIHtcbiAgLy8gZW5zdXJlIHdlIGhhdmUgY2xlYW5lcnNcbiAgY2xlYW5lcnMgPSBjbGVhbmVycyB8fCBbXTtcblxuICAvLyBhcHBseSB0aGUgY2xlYW5lcnNcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNsZWFuZXJzLmxlbmd0aDsgaWkrKykge1xuICAgIGlmICh0eXBlb2YgY2xlYW5lcnNbaWldID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMudGV4dCA9IGNsZWFuZXJzW2lpXS5jYWxsKG51bGwsIHRoaXMudGV4dCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNsZWFuZXJzW2lpXSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnJlcGxhY2UoY2xlYW5lcnNbaWldLCAnJyk7XG4gICAgfVxuICB9IC8vIGZvclxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gICMjIyMgQWRkcmVzcyNleHRyYWN0KGZpZWxkTmFtZSwgcmVnZXhlcylcblxuICBUaGUgZXh0cmFjdCBmdW5jdGlvbiBpcyB1c2VkIHRvIGV4dHJhY3QgdGhlIHNwZWNpZmllZCBmaWVsZCBmcm9tIHRoZSByYXdcbiAgcGFydHMgdGhhdCBoYXZlIHByZXZpb3VzbHkgYmVlbiBzcGxpdCBmcm9tIHRoZSBpbnB1dCB0ZXh0LiAgSWYgc3VjY2Vzc2Z1bGx5XG4gIGxvY2F0ZWQgdGhlbiB0aGUgZmllbGQgd2lsbCBiZSB1cGRhdGVkIGZyb20gdGhlIHBhcnRzIGFuZCB0aGF0IHBhcnQgcmVtb3ZlZFxuICBmcm9tIHRoZSBwYXJ0cyBsaXN0LlxuKiovXG5wcm90by5leHRyYWN0ID0gZnVuY3Rpb24oZmllbGROYW1lLCByZWdleGVzKSB7XG4gIHZhciBtYXRjaDtcbiAgdmFyIHJneElkeDtcbiAgdmFyIGlpO1xuICB2YXIgdmFsdWU7XG4gIHZhciBsb29rdXBzID0gW107XG5cbiAgLy8gaWYgdGhlIHJlZ2V4ZXMgaGF2ZSBiZWVuIHBhc3NlZCBpbiBhcyBvYmplY3RzLCB0aGVuIGNvbnZlcnQgdG8gYW4gYXJyYXlcbiAgaWYgKHR5cGVvZiByZWdleGVzID09ICdvYmplY3QnICYmIHR5cGVvZiByZWdleGVzLnNwbGljZSA9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBuZXdSZWdleGVzID0gW107XG5cbiAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGtleXMgaW4gdGhlIHJlZ2V4ZXNcbiAgICBmb3IgKHZhciBrZXkgaW4gcmVnZXhlcykge1xuICAgICAgbmV3UmVnZXhlc1tuZXdSZWdleGVzLmxlbmd0aF0gPSByZWdleGVzW2tleV07XG4gICAgICBsb29rdXBzW25ld1JlZ2V4ZXMubGVuZ3RoIC0gMV0gPSBrZXk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHRoZSByZWdleGVzIHRvIHBvaW50IHRvIHRoZSBuZXcgcmVnZXhlc1xuICAgIHJlZ2V4ZXMgPSBuZXdSZWdleGVzO1xuICB9XG5cbiAgLy8gaXRlcmF0ZSBvdmVyIHRoZSB1bml0IHJlZ2V4ZXMgYW5kIHRlc3QgdGhlbSBhZ2FpbnN0IHRoZSB2YXJpb3VzIHBhcnRzXG4gIGZvciAocmd4SWR4ID0gMDsgcmd4SWR4IDwgcmVnZXhlcy5sZW5ndGg7IHJneElkeCsrKSB7XG4gICAgZm9yIChpaSA9IHRoaXMucGFydHMubGVuZ3RoOyBpaSA+PSAwOyBpaS0tICkge1xuICAgICAgbWF0Y2ggPSByZWdleGVzW3JneElkeF0uZXhlYyh0aGlzLnBhcnRzW2lpXSk7XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYSBtYXRjaCwgdGhlbiBwcm9jZXNzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIDJuZCBjYXB0dXJlIGdyb3VwLCB0aGVuIHJlcGxhY2UgdGhlIGl0ZW0gd2l0aFxuICAgICAgICAvLyB0aGUgdGV4dCBvZiB0aGF0IGdyb3VwXG4gICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgIHRoaXMucGFydHMuc3BsaWNlKGlpLCAxLCBtYXRjaFsyXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBqdXN0IHJlbW92ZSB0aGUgZWxlbWVudFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBhcnRzLnNwbGljZShpaSwgMSk7XG4gICAgICAgIH0gLy8gaWYuLmVsc2VcblxuICAgICAgICB2YWx1ZSA9IGxvb2t1cHNbcmd4SWR4XSB8fCBtYXRjaFsxXTtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lID09PSAnc3RhdGUnICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG1hdGNoTXVsdGlwbGVQYXJ0ID0gZmFsc2U7XG4gICAgICAgIHZhciBzcGFjZXNJbk1hdGNoID0gcmVnZXhlc1tyZ3hJZHhdLnNvdXJjZS5zcGxpdCgnXFxcXHMnKS5sZW5ndGg7XG4gICAgICAgIGlmIChzcGFjZXNJbk1hdGNoID4gMSkge1xuICAgICAgICAgIHZhciBtdWx0aXBsZVBhcnQgPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBwYXJ0Sm9pbiA9IGlpOyBwYXJ0Sm9pbiA+IGlpIC0gc3BhY2VzSW5NYXRjaCAmJiBwYXJ0Sm9pbiA+PSAwOyBwYXJ0Sm9pbi0tKSB7XG4gICAgICAgICAgICBtdWx0aXBsZVBhcnQucHVzaCh0aGlzLnBhcnRzW3BhcnRKb2luXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG11bHRpcGxlUGFydC5yZXZlcnNlKCk7XG4gICAgICAgICAgbXVsdGlwbGVQYXJ0ID0gbXVsdGlwbGVQYXJ0LmpvaW4oJyAnKTtcbiAgICAgICAgICBtYXRjaE11bHRpcGxlUGFydCA9IHJlZ2V4ZXNbcmd4SWR4XS5leGVjKG11bHRpcGxlUGFydCk7XG5cbiAgICAgICAgICBpZiAobWF0Y2hNdWx0aXBsZVBhcnQpIHtcbiAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYSAybmQgY2FwdHVyZSBncm91cCwgdGhlbiByZXBsYWNlIHRoZSBpdGVtIHdpdGhcbiAgICAgICAgICAgIC8vIHRoZSB0ZXh0IG9mIHRoYXQgZ3JvdXBcbiAgICAgICAgICAgIGlmIChtYXRjaE11bHRpcGxlUGFydFsyXSkge1xuICAgICAgICAgICAgICB0aGlzLnBhcnRzLnNwbGljZShpaSAtIHNwYWNlc0luTWF0Y2ggKyAxLCBzcGFjZXNJbk1hdGNoLCBtYXRjaE11bHRpcGxlUGFydFsyXSk7XG4gICAgICAgICAgICAgIGlpIC09IHNwYWNlc0luTWF0Y2ggKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBqdXN0IHJlbW92ZSB0aGUgZWxlbWVudFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucGFydHMuc3BsaWNlKGlpIC0gc3BhY2VzSW5NYXRjaCArIDEsIHNwYWNlc0luTWF0Y2gpO1xuICAgICAgICAgICAgICBpaSAtPSBzcGFjZXNJbk1hdGNoICsgMTtcbiAgICAgICAgICAgIH0gLy8gaWYuLmVsc2VcblxuICAgICAgICAgICAgdmFsdWUgPSBsb29rdXBzW3JneElkeF0gfHwgbWF0Y2hNdWx0aXBsZVBhcnRbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGlmXG4gICAgfSAvLyBmb3JcbiAgfSAvLyBmb3JcblxuICAvLyB1cGRhdGUgdGhlIGZpZWxkIHZhbHVlXG4gIHRoaXNbZmllbGROYW1lXSA9IHZhbHVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gICMjIyMgQWRkcmVzcyNleHRyYWN0U3RyZWV0XG5cbiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIHRoZSBhZGRyZXNzIHBhcnRzIGFuZCBsb2NhdGUgYW55IHBhcnRzXG4gIHRoYXQgbG9vayB0byBiZSByZWxhdGVkIHRvIGEgc3RyZWV0IGFkZHJlc3MuXG4qKi9cbnByb3RvLmV4dHJhY3RTdHJlZXQgPSBmdW5jdGlvbihyZWdleGVzLCByZVNwbGl0U3RyZWV0KSB7XG4gIHZhciByZU51bWVyaWNlc3F1ZSA9IC9eKFxcZCp8XFxkKlxcdykkLztcbiAgdmFyIHBhcnRzID0gdGhpcy5wYXJ0cztcbiAgdmFyIHNwbGl0U3RyZWV0ID0gZmFsc2U7XG5cbiAgLy8gZW5zdXJlIHdlIGhhdmUgcmVnZXhlc1xuICByZWdleGVzID0gcmVnZXhlcyB8fCBbXTtcblxuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbG9jYXRlIHRoZSBcImJlc3RcIiBzdHJlZXQgcGFydCBpbiBhbiBhZGRyZXNzXG4gIC8vIHN0cmluZy4gIEl0IGlzIGNhbGxlZCBvbmNlIGEgc3RyZWV0IHJlZ2V4IGhhcyBtYXRjaGVkIGFnYWluc3QgYSBwYXJ0XG4gIC8vIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3QgcGFydCBhbmQgd29ya2luZyB0b3dhcmRzIHRoZSBmcm9udC4gSW4gdGVybXMgb2ZcbiAgLy8gd2hhdCBpcyBjb25zaWRlcmVkIHRoZSBiZXN0LCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIHBhcnQgY2xvc2VzdCB0byB0aGVcbiAgLy8gc3RhcnQgb2YgdGhlIHN0cmluZyB0aGF0IGlzIG5vdCBpbW1lZGlhdGVseSBwcmVmaXhlZCBieSBhIG51bWVyaWNlc3F1ZVxuICAvLyBwYXJ0IChlZy4gMTIzLCA0MkEsIGV0YykuXG4gIGZ1bmN0aW9uIGxvY2F0ZUJlc3RTdHJlZXRQYXJ0KHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgYmVzdEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIC8vIGlmIHRoZSBzdGFydCBpbmRleCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMCwgdGhlbiByZXR1cm5cbiAgICBmb3IgKHZhciBpaSA9IHN0YXJ0SW5kZXgtMTsgaWkgPj0gMDsgaWktLSkge1xuICAgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZSBzdHJlZXQgcmVnZXhlcyBhbmQgdGVzdCB0aGVtIGFnYWluc3QgdGhlIHZhcmlvdXMgcGFydHNcbiAgICAgIGZvciAodmFyIHJneElkeCA9IDA7IHJneElkeCA8IHJlZ2V4ZXMubGVuZ3RoOyByZ3hJZHgrKykge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWF0Y2gsIHRoZW4gcHJvY2Vzc1xuICAgICAgICBpZiAocmVnZXhlc1tyZ3hJZHhdLnRlc3QocGFydHNbaWldKSAmJiBwYXJ0c1tpaS0xXSAmJiAoISByZU51bWVyaWNlc3F1ZS50ZXN0KHBhcnRzW2lpLTFdKSkpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJlc3QgaW5kZXggYW5kIGJyZWFrIGZyb20gdGhlIGlubmVyIGxvb3BcbiAgICAgICAgICBiZXN0SW5kZXggPSBpaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpZlxuICAgICAgfSAvLyBmb3JcbiAgICB9IC8vIGZvclxuXG4gICAgcmV0dXJuIGJlc3RJbmRleDtcbiAgfSAvLyBsb2NhdGVCZXN0U3RyZWV0UGFydFxuXG4gIC8vIGl0ZXJhdGUgb3ZlciB0aGUgc3RyZWV0IHJlZ2V4ZXMgYW5kIHRlc3QgdGhlbSBhZ2FpbnN0IHRoZSB2YXJpb3VzIHBhcnRzXG4gIGZvciAodmFyIHBhcnRJZHggPSBwYXJ0cy5sZW5ndGg7IHBhcnRJZHgtLTsgKSB7XG4gICAgZm9yICh2YXIgcmd4SWR4ID0gMDsgcmd4SWR4IDwgcmVnZXhlcy5sZW5ndGg7IHJneElkeCsrKSB7XG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgbWF0Y2gsIHRoZW4gcHJvY2Vzc1xuICAgICAgLy8gaWYgdGhlIG1hdGNoIGlzIG9uIHRoZSBmaXJzdCBwYXJ0IHRob3VnaCwgcmVqZWN0IGl0IGFzIHdlXG4gICAgICAvLyBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEgdG93biBuYW1lIG9yIHNvbWV0aGluZyAoZS5nLiBTdCBHZW9yZ2UpXG4gICAgICBpZiAocmVnZXhlc1tyZ3hJZHhdLnRlc3QocGFydHNbcGFydElkeF0pICYmIHBhcnRJZHggPiAwKSB7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gbG9jYXRlQmVzdFN0cmVldFBhcnQocGFydElkeCk7XG5cbiAgICAgICAgLy8gaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHNwbGl0IHN0cmVldCAoaS5lLiBmb28gcmQgd2VzdCkgYW5kIHRoZVxuICAgICAgICAvLyBhZGRyZXNzIHBhcnRzIGFyZSBhcHByb3ByaWF0ZWx5IGRlbGltaXRlZCwgdGhlbiBncmFiIHRoZSBuZXh0IHBhcnRcbiAgICAgICAgLy8gYWxzb1xuICAgICAgICBpZiAocmVTcGxpdFN0cmVldC50ZXN0KHBhcnRzW3N0YXJ0SW5kZXggKyAxXSkpIHtcbiAgICAgICAgICBzcGxpdFN0cmVldCA9IHRydWU7XG4gICAgICAgICAgc3RhcnRJbmRleCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXh0cmFjdFN0cmVldFBhcnRzKHN0YXJ0SW5kZXgsIHNwbGl0U3RyZWV0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIGlmXG4gICAgfSAvLyBmb3JcbiAgfSAvLyBmb3JcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICAjIyMjIEFkZHJlc3MjZmluYWxpemVcblxuICBUaGUgZmluYWxpemUgZnVuY3Rpb24gdGFrZXMgYW55IHJlbWFpbmluZyBwYXJ0cyB0aGF0IGhhdmUgbm90IGJlZW4gZXh0cmFjdGVkXG4gIGFzIG90aGVyIGluZm9ybWF0aW9uLCBhbmQgcHVzaGVzIHRob3NlIGZpZWxkcyBpbnRvIGEgZ2VuZXJpYyBgcmVnaW9uc2AgZmllbGQuXG4qKi9cbnByb3RvLmZpbmFsaXplID0gZnVuY3Rpb24oKSB7XG4gIC8vIHVwZGF0ZSB0aGUgcmVnaW9ucywgZGlzY2FyZGluZyBhbnkgZW1wdHkgc3RyaW5ncy5cbiAgdGhpcy5yZWdpb25zID0gdGhpcy5wYXJ0cy5qb2luKCcgJykuc3BsaXQoL1xcLFxccz8vKS5maWx0ZXIoZnVuY3Rpb24gKHJlZ2lvbikge1xuICAgICAgcmV0dXJuIHJlZ2lvbi5sZW5ndGg7XG4gIH0pO1xuXG4gIC8vIHJlc2V0IHRoZSBwYXJ0c1xuICB0aGlzLnBhcnRzID0gW107XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAgIyMjIyBBZGRyZXNzI3NwbGl0XG5cbiAgU3BsaXQgdGhlIGFkZHJlc3MgaW50byBpdCdzIGNvbXBvbmVudCBwYXJ0cywgYW5kIHJlbW92ZSBhbnkgZW1wdHkgcGFydHNcbioqL1xucHJvdG8uc3BsaXQgPSBmdW5jdGlvbihzZXBhcmF0b3IpIHtcbiAgLy8gc3BsaXQgdGhlIHN0cmluZ1xuICB2YXIgbmV3UGFydHMgPSB0aGlzLnRleHQuc3BsaXQoc2VwYXJhdG9yIHx8ICcgJyk7XG5cbiAgdGhpcy5wYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbmV3UGFydHMubGVuZ3RoOyBpaSsrKSB7XG4gICAgaWYgKG5ld1BhcnRzW2lpXSkge1xuICAgICAgdGhpcy5wYXJ0c1t0aGlzLnBhcnRzLmxlbmd0aF0gPSBuZXdQYXJ0c1tpaV07XG4gICAgfSAvLyBpZlxuICB9IC8vIGZvclxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gICMjIyMgQWRkcmVzcyN0b1N0cmluZ1xuXG4gIENvbnZlcnQgdGhlIGFkZHJlc3MgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbioqL1xucHJvdG8udG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG91dHB1dCA9ICcnO1xuXG4gIGlmICh0aGlzLmJ1aWxkaW5nKSB7XG4gICAgb3V0cHV0ICs9IHRoaXMuYnVpbGRpbmcgKyAnXFxuJztcbiAgfSAvLyBpZlxuXG4gIGlmICh0aGlzLnN0cmVldCkge1xuICAgIG91dHB1dCArPSB0aGlzLm51bWJlciA/IHRoaXMubnVtYmVyICsgJyAnIDogJyc7XG4gICAgb3V0cHV0ICs9IHRoaXMuc3RyZWV0ICsgJ1xcbic7XG4gIH1cblxuICBvdXRwdXQgKz0gdGhpcy5yZWdpb25zLmpvaW4oJywgJykgKyAnXFxuJztcblxuICByZXR1cm4gb3V0cHV0O1xufTtcbiIsIi8qIGpzaGludCBub2RlOiB0cnVlICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICAjIGFkZHJlc3NpdFxuXG4gIEFkZHJlc3NJdCBpcyBhIGZyZWVmb3JtIHN0cmVldCBhZGRyZXNzIHBhcnNlciwgdGhhdCBpcyBkZXNpZ25lZCB0byB0YWtlIGFcbiAgcGllY2Ugb2YgdGV4dCBhbmQgY29udmVydCB0aGF0IGludG8gYSBzdHJ1Y3R1cmVkIGFkZHJlc3MgdGhhdCBjYW4gYmVcbiAgcHJvY2Vzc2VkIGluIGRpZmZlcmVudCBzeXN0ZW1zLlxuXG4gIFRoZSBmb2NhbCBwb2ludCBvZiBgYWRkcmVzc2l0YCBpcyBvbiB0aGUgc3RyZWV0IHBhcnNpbmcgY29tcG9uZW50LCByYXRoZXJcbiAgdGhhbiBhdHRlbXB0aW5nIHRvIGFwcHJvcHJpYXRlbHkgaWRlbnRpZnkgdmFyaW91cyBzdGF0ZXMsIGNvdW50aWVzLCB0b3ducyxcbiAgZXRjLCBhcyB0aGVzZSB2YXJ5IGZyb20gY291bnRyeSB0byBjb3VudHJ5IGZhaXJseSBkcmFtYXRpY2FsbHkuIFRoZXNlXG4gIGRldGFpbHMgYXJlIGluc3RlYWQgcHV0IGludG8gYSBnZW5lcmljIHJlZ2lvbnMgYXJyYXkgdGhhdCBjYW4gYmUgZnVydGhlclxuICBwYXJzZWQgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbiBuZWVkcy5cblxuICAjIyBFeGFtcGxlIFVzYWdlXG5cbiAgVGhlIGZvbGxvd2luZyBpcyBhIHNpbXBsZSBleGFtcGxlIG9mIGhvdyBhZGRyZXNzIGl0IGNhbiBiZSB1c2VkOlxuXG4gIGBgYGpzXG4gIHZhciBhZGRyZXNzaXQgPSByZXF1aXJlKCdhZGRyZXNzaXQnKTtcblxuICAvLyBwYXJzZSBhIG1hZGUgdXAgYWRkcmVzcywgd2l0aCBzb21lIHNsaWdodGx5IHRyaWNreSBwYXJ0c1xuICB2YXIgYWRkcmVzcyA9IGFkZHJlc3NpdCgnU2hvcCA4LCA0MzEgU3QgS2lsZGEgUmQgTWVsYm91cm5lJyk7XG4gIGBgYFxuXG4gIFRoZSBgYWRkcmVzc2Agb2JqZWN0IHdvdWxkIG5vdyBjb250YWluIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cbiAgYGBgXG4gIHsgdGV4dDogJzgvNDMxIFNUIEtJTERBIFJEIE1FTEJPVVJORScsXG4gICAgcGFydHM6IFtdLFxuICAgIHVuaXQ6IDgsXG4gICAgY291bnRyeTogdW5kZWZpbmVkLFxuICAgIG51bWJlcjogNDMxLFxuICAgIHN0cmVldDogJ1NUIEtJTERBIFJEJyxcbiAgICByZWdpb25zOiBbICdNRUxCT1VSTkUnIF0gfVxuICBgYGBcblxuICBGb3IgbW9yZSBleGFtcGxlcywgc2VlIHRoZSB0ZXN0cy5cblxuICAjIyBSZWZlcmVuY2VcblxuKiovXG5cbi8qKlxuICAjIyMgYWRkcmVzc2l0KGlucHV0LCBvcHRzPylcblxuICBSdW4gdGhlIGFkZHJlc3MgcGFyc2VyIGZvciB0aGUgZ2l2ZW4gaW5wdXQuICBPcHRpb25hbCBgb3B0c2AgY2FuIGJlXG4gIHN1cHBsaWVkIGlmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IChFTikgcGFyc2VyLlxuXG4qKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaW5wdXQsIG9wdHMpIHtcbiAgLy8gaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgdGhlbiB1c2UgdGhlIGRlZmF1bHQgdmFuaWxsYSBlbiBsb2NhbGVcbiAgdmFyIHBhcnNlID0gKG9wdHMgfHwge30pLmxvY2FsZSB8fCByZXF1aXJlKCcuL2xvY2FsZS9lbi1VUycpO1xuXG4gIC8vIHBhcnNlIHRoZSBhZGRyZXNzXG4gIHJldHVybiBwYXJzZShpbnB1dCwgb3B0cyk7XG59O1xuIiwidmFyIHBhcnNlciA9IHJlcXVpcmUoJy4uL3BhcnNlcnMvZW4uanMnKTtcbnZhciBleHRlbmQgPSByZXF1aXJlKCdjb2cvZXh0ZW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaW5wdXQsIG9wdHMpIHtcbiAgLy8gcGFyc2UgdGhlIGJhc2UgYWRkcmVzc1xuICByZXR1cm4gcGFyc2VyKGlucHV0LCBleHRlbmQoeyBcbiAgXHRzdGF0ZToge1xuXHQgICAgQUw6IC8oXmFsYWJhbWF8XkFMJCkvaSxcblx0ICAgIEFLOiAvKF5hbGFza2F8XkFLJCkvaSxcblx0ICAgIEFTOiAvKF5hbWVyaWNhblxcc3NhbW9hfF5BUyQpL2ksXG5cdCAgICBBWjogLyheYXJpem9uYXxeQVokKS9pLFxuXHQgICAgQVI6IC8oXmFya2Fuc2FzfF5BUiQpL2ksXG5cdCAgICBDQTogLyheY2FsaWZvcm5pYXxeQ0EkKS9pLFxuXHQgICAgQ086IC8oXmNvbG9yYWRvfF5DTyQpL2ksXG5cdCAgICBDVDogLyheY29ubmVjdGljdXR8XkNUJCkvaSxcblx0ICAgIERFOiAvKF5kZWxhd2FyZXxeREUkKS9pLFxuXHQgICAgREM6IC8oXmRpc3RyaWN0XFxzb2ZcXHNjb2x1bWJpYXxeREMkKS9pLFxuXHQgICAgRk06IC8oXmZlZGVyYXRlZFxcc3N0YXRlc1xcc29mXFxzbWljcm9uZXNpYXxeRk0kKS9pLFxuXHQgICAgRkw6IC8oXmZsb3JpZGF8XkZMJCkvaSxcblx0ICAgIEdBOiAvKF5nZW9yZ2lhfF5HQSQpL2ksXG5cdCAgICBHVTogLyheZ3VhbXxeR1UkKS9pLFxuXHQgICAgSEk6IC8oXmhhd2FpaXxeSEkkKS9pLFxuXHQgICAgSUQ6IC8oXmlkYWhvfF5JRCQpL2ksXG5cdCAgICBJTDogLyheaWxsaW5vaXN8XklMJCkvaSxcblx0ICAgIElOOiAvKF5pbmRpYW5hfF5JTiQpL2ksXG5cdCAgICBJQTogLyheaW93YXxeSUEkKS9pLFxuXHQgICAgS1M6IC8oXmthbnNhc3xeS1MkKS9pLFxuXHQgICAgS1k6IC8oXmtlbnR1Y2t5fF5LWSQpL2ksXG5cdCAgICBMQTogLyhebG91aXNpYW5hfF5MQSQpL2ksXG5cdCAgICBNRTogLyhebWFpbmV8Xk1FJCkvaSxcblx0ICAgIE1IOiAvKF5tYXJzaGFsbFxcc2lzbGFuZHN8Xk1IJCkvaSxcblx0ICAgIE1EOiAvKF5tYXJ5bGFuZHxeTUQkKS9pLFxuXHQgICAgTUE6IC8oXm1hc3NhY2h1c2V0dHN8Xk1BJCkvaSxcblx0ICAgIE1JOiAvKF5taWNoaWdhbnxeTUkkKS9pLFxuXHQgICAgTU46IC8oXm1pbm5lc290YXxeTU4kKS9pLFxuXHQgICAgTVM6IC8oXm1pc3Npc3NpcHBpfF5NUyQpL2ksXG5cdCAgICBNTzogLyhebWlzc291cml8Xk1PJCkvaSxcblx0ICAgIE1UOiAvKF5tb250YW5hfF5NVCQpL2ksXG5cdCAgICBORTogLyhebmVicmFza2F8Xk5FJCkvaSxcblx0ICAgIE5WOiAvKF5uZXZhZGF8Xk5WJCkvaSxcblx0ICAgIE5IOiAvKF5uZXdcXHNoYW1wc2hpcmV8Xk5IJCkvaSxcblx0ICAgIE5KOiAvKF5uZXdcXHNqZXJzZXl8Xk5KJCkvaSxcblx0ICAgIE5NOiAvKF5uZXdcXHNtZXhpY298Xk5NJCkvaSxcblx0ICAgIE5ZOiAvKF5uZXdcXHN5b3JrfF5OWSQpL2ksXG5cdCAgICBOQzogLyhebm9ydGhcXHNjYXJvbGluYXxeTkMkKS9pLFxuXHQgICAgTkQ6IC8oXm5vcnRoXFxzZGFrb3RhfF5ORCQpL2ksXG5cdCAgICBNUDogLyhebm9ydGhlcm5cXHNtYXJpYW5hXFxzaXNsYW5kc3xeTVAkKS9pLFxuXHQgICAgT0g6IC8oXm9oaW98Xk9IJCkvaSxcblx0ICAgIE9LOiAvKF5va2xhaG9tYXxeT0skKS9pLFxuXHQgICAgT1I6IC8oXm9yZWdvbnxeT1IkKS9pLFxuXHQgICAgUFc6IC8oXnBhbGF1fF5QVyQpL2ksXG5cdCAgICBQQTogLyhecGVubnN5bHZhbmlhfF5QQSQpL2ksXG5cdCAgICBQUjogLyhecHVlcnRvXFxzcmljb3xeUFIkKS9pLFxuXHQgICAgUkk6IC8oXnJob2RlXFxzaXNsYW5kfF5SSSQpL2ksXG5cdCAgICBTQzogLyhec291dGhcXHNjYXJvbGluYXxeU0MkKS9pLFxuXHQgICAgU0Q6IC8oXnNvdXRoXFxzZGFrb3RhfF5TRCQpL2ksXG5cdCAgICBUTjogLyhedGVubmVzc2VlfF5UTiQpL2ksXG5cdCAgICBUWDogLyhedGV4YXN8XlRYJCkvaSxcblx0ICAgIFVUOiAvKF51dGFofF5VVCQpL2ksXG5cdCAgICBWVDogLyhedmVybW9udHxeVlQkKS9pLFxuXHQgICAgVkk6IC8oXnZpcmdpblxcc2lzbGFuZHN8XlZJJCkvaSxcblx0ICAgIFZBOiAvKF52aXJnaW5pYXxeVkEkKS9pLFxuXHQgICAgV0E6IC8oXndhc2hpbmd0b258XldBJCkvaSxcblx0ICAgIFdWOiAvKF53ZXN0XFxzdmlyZ2luaWF8XldWJCkvaSxcblx0ICAgIFdJOiAvKF53aXNjb25zaW58XldJJCkvaSxcblx0ICAgIFdZOiAvKF53eW9taW5nfF5XWSQpL2lcbiAgXHR9LFxuICBcdGNvdW50cnk6IHtcbiAgICAgICAgVVNBOiAvKF5VTklURURcXHNTVEFURVN8XlVcXC4/U1xcLj9BPyQpL2lcbiAgICB9LFxuICAgIHJlUG9zdGFsQ29kZTogLyheXFxkezV9JCl8KF5cXGR7NX0tXFxkezR9JCkvIH0sIG9wdHMpKTtcbiAgICAgICAgICAgICAgIC8vIFBvc3RhbCBjb2RlcyBvZiB0aGUgZm9ybSAnREREREQtRERERCcgb3IganVzdCAnREREREQnXG4gICAgICAgICAgICAgICAvLyAxMDAxMCBpcyB2YWxpZCBhbmQgc28gaXMgMTAwMTAtMTIzNFxufTtcbiIsIi8qIGpzaGludCBub2RlOiB0cnVlICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuIyMgY29nL2V4dGVuZFxuXG5gYGBqc1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ2NvZy9leHRlbmQnKTtcbmBgYFxuXG4jIyMgZXh0ZW5kKHRhcmdldCwgKilcblxuU2hhbGxvdyBjb3B5IG9iamVjdCBwcm9wZXJ0aWVzIGZyb20gdGhlIHN1cHBsaWVkIHNvdXJjZSBvYmplY3RzICgqKSBpbnRvXG50aGUgdGFyZ2V0IG9iamVjdCwgcmV0dXJuaW5nIHRoZSB0YXJnZXQgb2JqZWN0IG9uY2UgY29tcGxldGVkOlxuXG5gYGBqc1xuZXh0ZW5kKHsgYTogMSwgYjogMiB9LCB7IGM6IDMgfSwgeyBkOiA0IH0sIHsgYjogNSB9KSk7XG5gYGBcblxuU2VlIGFuIGV4YW1wbGUgb24gW3JlcXVpcmViaW5dKGh0dHA6Ly9yZXF1aXJlYmluLmNvbS8/Z2lzdD02MDc5NDc1KS5cbioqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0YXJnZXQpIHtcbiAgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLmZvckVhY2goZnVuY3Rpb24oc291cmNlKSB7XG4gICAgaWYgKCEgc291cmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0YXJnZXQ7XG59OyIsIi8qIGpzaGludCBub2RlOiB0cnVlICovXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odGV4dFJlZ2V4ZXMpIHtcbiAgdmFyIHJlZ2V4ZXMgPSBbXTtcbiAgdmFyIHJlU3RyZWV0Q2xlYW5lciA9IC9eXFxePyguKilcXCw/XFwkPyQvO1xuICB2YXIgaWk7XG5cbiAgZm9yIChpaSA9IHRleHRSZWdleGVzLmxlbmd0aDsgaWktLTsgKSB7XG4gICAgcmVnZXhlc1tpaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgdGV4dFJlZ2V4ZXNbaWldLnJlcGxhY2UocmVTdHJlZXRDbGVhbmVyLCAnXiQxXFwsPyQnKSxcbiAgICAgICdpJ1xuICAgICk7XG4gIH0gLy8gZm9yXG5cbiAgcmV0dXJuIHJlZ2V4ZXM7XG59OyIsIi8qIGpzaGludCBub2RlOiB0cnVlICovXG4ndXNlIHN0cmljdCc7XG5cbnZhciBBZGRyZXNzID0gcmVxdWlyZSgnLi4vYWRkcmVzcycpO1xudmFyIGNvbXBpbGVyID0gcmVxdWlyZSgnLi9jb21waWxlcicpO1xuXG4vLyBpbml0aWFsaXNlIHRoZSBzdHJlZXQgcmVnZXhlc1xuLy8gdGhlc2UgYXJlIHRoZSByZWdleGVzIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCBhIHN0cmluZyBpcyBhIHN0cmVldFxuLy8gaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGV5IGFyZSBwYXJzZWQgdGhyb3VnaCB0aGUgcmVTdHJlZXRDbGVhbmVyXG4vLyByZWdleCB0byBiZWNvbWUgbW9yZSBzdHJpY3Rcbi8vIHRoaXMgbGlzdCBoYXMgYmVlbiBzb3VyY2VkIGZyb206XG4vLyBodHRwczovL3d3dy5wcm9wZXJ0eWFzc2lzdC5zYS5nb3YuYXUvcGEvcWhlbHAucGh0bWw/Y21kPXN0cmVldHR5cGVcbi8vXG4vLyBfX05PVEU6X18gU29tZSBvZiB0aGUgc3RyZWV0IHR5cGVzIGhhdmUgYmVlbiBkaXNhYmxlZCBkdWUgdG8gY29sbGlzaW9uc1xuLy8gd2l0aCBjb21tb24gcGFydHMgb2Ygc3VidXJiIG5hbWVzLiAgQXQgc29tZSBwb2ludCB0aGUgc3RyZWV0IHBhcnNlciBtYXkgYmVcbi8vIGltcHJvdmVkIHRvIGRlYWwgd2l0aCB0aGVzZSBjYXNlcywgYnV0IGZvciBub3cgdGhpcyBoYXMgYmVlbiBkZWVtZWRcbi8vIHN1aXRhYmxlLlxuXG52YXIgc3RyZWV0UmVnZXhlcyA9IGNvbXBpbGVyKFtcbiAgJ0FMTEU/WScsICAgICAgICAgICAgICAgLy8gQUxMRVkgLyBBTExZXG4gICdBUFAoUk9BQ0gpPycsICAgICAgICAgIC8vIEFQUFJPQUNIIC8gQVBQXG4gICdBUkMoQURFKT8nLCAgICAgICAgICAgIC8vIEFSQ0FERSAvIEFSQ1xuICAnQVYoRXxFTlVFKT8nLCAgICAgICAgICAvLyBBVkVOVUUgLyBBViAvIEFWRVxuICAnKEJPVUxFVkFSRHxCTFZEKScsICAgICAvLyBCT1VMRVZBUkQgLyBCTFZEXG4gICdCUk9XJywgICAgICAgICAgICAgICAgIC8vIEJST1dcbiAgJ0JZUEEoU1MpPycsICAgICAgICAgICAgLy8gQllQQVNTIC8gQllQQVxuICAnQyhBVVNFKT9XQVknLCAgICAgICAgICAvLyBDQVVTRVdBWSAvIENXQVlcbiAgJyhDSVJDVUlUfENDVCknLCAgICAgICAgLy8gQ0lSQ1VJVCAvIENDVFxuICAnQ0lSQyhVUyk/JywgICAgICAgICAgICAvLyBDSVJDVVMgLyBDSVJDXG4gICdDTChPU0UpPycsICAgICAgICAgICAgIC8vIENMT1NFIC8gQ0xcbiAgJ0NPP1BTRScsICAgICAgICAgICAgICAgLy8gQ09QU0UgLyBDUFNFXG4gICcoQ09STkVSfENOUiknLCAgICAgICAgIC8vIENPUk5FUiAvIENOUlxuICAvLyAnQ09WRScsICAgICAgICAgICAgICAgICAvLyBDT1ZFXG4gICcoQygoT1VSKXxSKT9UfENSVCknLCAgIC8vIENPVVJUIC8gQ1QgL0NSVFxuICAnQ1JFUyhDRU5UKT8nLCAgICAgICAgICAvLyBDUkVTQ0VOVCAvIENSRVNcbiAgJ0RSKElWRSk/JywgICAgICAgICAgICAgLy8gRFJJVkUgLyBEUlxuICAvLyAnRU5EJywgICAgICAgICAgICAgICAgICAvLyBFTkRcbiAgJ0VTUChMQU5BTkRFKT8nLCAgICAgICAgLy8gRVNQTEFOQURFIC8gRVNQXG4gIC8vICdGTEFUJywgICAgICAgICAgICAgICAgIC8vIEZMQVRcbiAgJ0YoUkVFKT9XQVknLCAgICAgICAgICAgLy8gRlJFRVdBWSAvIEZXQVlcbiAgJyhGUk9OVEFHRXxGUk5UKScsICAgICAgLy8gRlJPTlRBR0UgLyBGUk5UXG4gIC8vICcoR0FSREVOU3xHRE5TKScsICAgICAgIC8vIEdBUkRFTlMgLyBHRE5TXG4gICcoR0xBREV8R0xEKScsICAgICAgICAgIC8vIEdMQURFIC8gR0xEXG4gIC8vICdHTEVOJywgICAgICAgICAgICAgICAgIC8vIEdMRU5cbiAgJ0dSKEVFKT9OJywgICAgICAgICAgICAgLy8gR1JFRU4gLyBHUk5cbiAgLy8gJ0dSKE9WRSk/JywgICAgICAgICAgICAgLy8gR1JPVkUgLyBHUlxuICAvLyAnSChFSUdIKT9UUycsICAgICAgICAgICAvLyBIRUlHSFRTIC8gSFRTXG4gICcoSElHSFdBWXxIV1kpJywgICAgICAgIC8vIEhJR0hXQVkgLyBIV1lcbiAgJyhMQU5FfExOKScsICAgICAgICAgICAgLy8gTEFORSAvIExOXG4gICdMSU5LJywgICAgICAgICAgICAgICAgIC8vIExJTktcbiAgJ0xPT1AnLCAgICAgICAgICAgICAgICAgLy8gTE9PUFxuICAnTUFMTCcsICAgICAgICAgICAgICAgICAvLyBNQUxMXG4gICdNRVdTJywgICAgICAgICAgICAgICAgIC8vIE1FV1NcbiAgJyhQQUNLRVR8UENLVCknLCAgICAgICAgLy8gUEFDS0VUIC8gUENLVFxuICAnUChBUkEpP0RFJywgICAgICAgICAgICAvLyBQQVJBREUgLyBQREVcbiAgLy8gJ1BBUksnLCAgICAgICAgICAgICAgICAgLy8gUEFSS1xuICAnKFBBUktXQVl8UEtXWSknLCAgICAgICAvLyBQQVJLV0FZIC8gUEtXWVxuICAnUEwoQUNFKT8nLCAgICAgICAgICAgICAvLyBQTEFDRSAvIFBMXG4gICdQUk9NKEVOQURFKT8nLCAgICAgICAgIC8vIFBST01FTkFERSAvIFBST01cbiAgJ1JFUyhFUlZFKT8nLCAgICAgICAgICAgLy8gUkVTRVJWRSAvIFJFU1xuICAvLyAnUkk/REdFJywgICAgICAgICAgICAgICAvLyBSSURHRSAvIFJER0VcbiAgJ1JJU0UnLCAgICAgICAgICAgICAgICAgLy8gUklTRVxuICAnUihPQSk/RCcsICAgICAgICAgICAgICAvLyBST0FEIC8gUkRcbiAgJ1JPVycsICAgICAgICAgICAgICAgICAgLy8gUk9XXG4gICdTUShVQVJFKT8nLCAgICAgICAgICAgIC8vIFNRVUFSRSAvIFNRXG4gICdTVChSRUVUKT8nLCAgICAgICAgICAgIC8vIFNUUkVFVCAvIFNUXG4gICdTVFJJP1AnLCAgICAgICAgICAgICAgIC8vIFNUUklQIC8gU1RSUFxuICAnVEFSTicsICAgICAgICAgICAgICAgICAvLyBUQVJOXG4gICdUKEVSUkEpP0NFJywgICAgICAgICAgIC8vIFRFUlJBQ0UgLyBUQ0VcbiAgJyhUSE9ST1VHSEZBUkV8VEZSRSknLCAgLy8gVEhPUk9VR0hGQVJFIC8gVEZSRVxuICAnVFJBQ0s/JywgICAgICAgICAgICAgICAvLyBUUkFDSyAvIFRSQUNcbiAgJ1RSKEFJKT9MJywgICAgICAgICAgICAgLy8gVFJBSUwgLyBUUkxcbiAgJ1QoUlVOSyk/V0FZJywgICAgICAgICAgLy8gVFJVTktXQVkgLyBUV0FZXG4gIC8vICdWSUVXJywgICAgICAgICAgICAgICAgIC8vIFZJRVdcbiAgJ1ZJP1NUQScsICAgICAgICAgICAgICAgLy8gVklTVEEgLyBWU1RBXG4gICdXQUxLJywgICAgICAgICAgICAgICAgIC8vIFdBTEtcbiAgJ1dBP1knLCAgICAgICAgICAgICAgICAgLy8gV0FZIC8gV1lcbiAgJ1coQUxLKT9XQVknLCAgICAgICAgICAgLy8gV0FMS1dBWSAvIFdXQVlcbiAgJ1lBUkQnICAgICAgICAgICAgICAgICAgLy8gWUFSRFxuXSk7XG5cbnZhciByZVNwbGl0U3RyZWV0ID0gL14oTnxOVEh8Tk9SVEh8RXxFU1R8RUFTVHxTfFNUSHxTT1VUSHxXfFdTVHxXRVNUKVxcLCQvaTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0ZXh0LCBvcHRzKSB7XG4gIHZhciBhZGRyZXNzID0gbmV3IEFkZHJlc3ModGV4dCwgb3B0cyk7XG5cbiAgLy8gY2xlYW4gdGhlIGFkZHJlc3NcbiAgYWRkcmVzc1xuICAgIC5jbGVhbihbXG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyBkb3RzIGZyb20gdHdvIGxldHRlciBhYmJyZXZpYXRpb25zXG4gICAgICAgIGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvKFxcd3syfSlcXC4vZywgJyQxJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gY29udmVydCBzaG9wIHRvIGEgdW5pdCBmb3JtYXRcbiAgICAgICAgZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxzKlNIT1BcXHM/KFxcZCopXFwsP1xccyovaSwgJyQxLycpO1xuICAgICAgICB9XG4gICAgXSlcblxuICAgIC8vIHNwbGl0IHRoZSBhZGRyZXNzXG4gICAgLnNwbGl0KC9cXHMvKVxuXG4gICAgLy8gZXh0cmFjdCB0aGUgdW5pdFxuICAgIC5leHRyYWN0KCd1bml0JywgW1xuICAgICAgICAoL14oPzpcXCN8QVBUfEFQQVJUTUVOVClcXHM/KFxcZCspLyksXG4gICAgICAgICgvXihcXGQrKVxcLyguKikvKVxuICAgIF0pXG5cbiAgICAvLyBleHRyYWN0IHRoZSBzdHJlZXRcbiAgICAuZXh0cmFjdFN0cmVldChzdHJlZXRSZWdleGVzLCByZVNwbGl0U3RyZWV0KTtcblxuICBpZiAob3B0cyAmJiBvcHRzLnN0YXRlKSB7XG4gICAgYWRkcmVzcy5leHRyYWN0KCdzdGF0ZScsIG9wdHMuc3RhdGUgKTtcbiAgfVxuXG4gIGlmIChvcHRzICYmIG9wdHMuY291bnRyeSkge1xuICAgIGFkZHJlc3MuZXh0cmFjdCgnY291bnRyeScsIG9wdHMuY291bnRyeSApO1xuICB9XG5cbiAgaWYgKG9wdHMgJiYgb3B0cy5yZVBvc3RhbENvZGUpIHtcbiAgICBhZGRyZXNzLmV4dHJhY3QoJ3Bvc3RhbGNvZGUnLCBbIG9wdHMucmVQb3N0YWxDb2RlIF0pO1xuICB9XG5cbiAgIC8vIHRha2UgcmVtYWluaW5nIHVua25vd24gcGFydHMgYW5kIHB1c2ggdGhlbVxuICAgcmV0dXJuIGFkZHJlc3MuZmluYWxpemUoKTtcbn07XG4iXX0=

@@ -1,1 +0,1 @@

(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.addressit=f()}})(function(){var define,module,exports;return 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}({1:[function(require,module,exports){"use strict";var reNumeric=/^\d+$/;function Address(text,opts){if(!(this instanceof Address)){return new Address(text)}this.text=text;this.parts=[]}module.exports=Address;var proto=Address.prototype;proto._extractStreetParts=function(startIndex,splitStreet){var index=startIndex;var streetParts=[];var numberParts;var parts=this.parts;var streetPartsLength=splitStreet?3:2;var testFn=function(){return true};while(index>=0&&testFn()){var alphaPart=isNaN(parseInt(parts[index],10));if(streetParts.length<streetPartsLength||alphaPart){streetParts.unshift(parts.splice(index--,1))}else{if(!numberParts){numberParts=[]}numberParts.unshift(parts.splice(index--,1));testFn=function(){var isAlpha=isNaN(parseInt(parts[index],10));return numberParts?!isAlpha:isAlpha}}}this.number=numberParts?numberParts.join("/"):"";this.street=streetParts.join(" ").replace(/\,/g,"")};proto.clean=function(cleaners){cleaners=cleaners||[];for(var ii=0;ii<cleaners.length;ii++){if(typeof cleaners[ii]=="function"){this.text=cleaners[ii].call(null,this.text)}else if(cleaners[ii]instanceof RegExp){this.text=this.text.replace(cleaners[ii],"")}}return this};proto.extract=function(fieldName,regexes){var match;var rgxIdx;var ii;var value;var lookups=[];if(typeof regexes=="object"&&typeof regexes.splice=="undefined"){var newRegexes=[];for(var key in regexes){newRegexes[newRegexes.length]=regexes[key];lookups[newRegexes.length-1]=key}regexes=newRegexes}for(rgxIdx=0;rgxIdx<regexes.length;rgxIdx++){for(ii=this.parts.length;ii>=0;ii--){match=regexes[rgxIdx].exec(this.parts[ii]);if(match){if(match[2]){this.parts.splice(ii,1,match[2])}else{this.parts.splice(ii,1)}value=lookups[rgxIdx]||match[1]}else if(fieldName==="state"&&value===undefined){var matchMultiplePart=false;var spacesInMatch=regexes[rgxIdx].source.split("\\s").length;if(spacesInMatch>1){var multiplePart=[];for(var partJoin=ii;partJoin>ii-spacesInMatch&&partJoin>=0;partJoin--){multiplePart.push(this.parts[partJoin])}multiplePart.reverse();multiplePart=multiplePart.join(" ");matchMultiplePart=regexes[rgxIdx].exec(multiplePart);if(matchMultiplePart){if(matchMultiplePart[2]){this.parts.splice(ii-spacesInMatch+1,spacesInMatch,matchMultiplePart[2]);ii-=spacesInMatch+1}else{this.parts.splice(ii-spacesInMatch+1,spacesInMatch);ii-=spacesInMatch+1}value=lookups[rgxIdx]||matchMultiplePart[1]}}}}}this[fieldName]=value;return this};proto.extractStreet=function(regexes,reSplitStreet){var reNumericesque=/^(\d*|\d*\w)$/;var parts=this.parts;var splitStreet=false;regexes=regexes||[];function locateBestStreetPart(startIndex){var bestIndex=startIndex;for(var ii=startIndex-1;ii>=0;ii--){for(var rgxIdx=0;rgxIdx<regexes.length;rgxIdx++){if(regexes[rgxIdx].test(parts[ii])&&parts[ii-1]&&!reNumericesque.test(parts[ii-1])){bestIndex=ii;break}}}return bestIndex}for(var partIdx=parts.length;partIdx--;){for(var rgxIdx=0;rgxIdx<regexes.length;rgxIdx++){if(regexes[rgxIdx].test(parts[partIdx])&&partIdx>0){var startIndex=locateBestStreetPart(partIdx);if(reSplitStreet.test(parts[startIndex+1])){splitStreet=true;startIndex+=1}this._extractStreetParts(startIndex,splitStreet);break}}}return this};proto.finalize=function(){this.regions=this.parts.join(" ").split(/\,\s?/).filter(function(region){return region.length});this.parts=[];return this};proto.split=function(separator){var newParts=this.text.split(separator||" ");this.parts=[];for(var ii=0;ii<newParts.length;ii++){if(newParts[ii]){this.parts[this.parts.length]=newParts[ii]}}return this};proto.toString=function(){var output="";if(this.building){output+=this.building+"\n"}if(this.street){output+=this.number?this.number+" ":"";output+=this.street+"\n"}output+=this.regions.join(", ")+"\n";return output}},{}],2:[function(require,module,exports){"use strict";module.exports=function(input,opts){var parse=(opts||{}).locale||require("./locale/en-US");return parse(input,opts)}},{"./locale/en-US":3}],3:[function(require,module,exports){var parser=require("../parsers/en.js");var extend=require("cog/extend");module.exports=function(input,opts){return parser(input,extend({state:{AL:/(^alabama|^AL$)/i,AK:/(^alaska|^AK$)/i,AS:/(^american\ssamoa|^AS$)/i,AZ:/(^arizona|^AZ$)/i,AR:/(^arkansas|^AR$)/i,CA:/(^california|^CA$)/i,CO:/(^colorado|^CO$)/i,CT:/(^connecticut|^CT$)/i,DE:/(^delaware|^DE$)/i,DC:/(^district\sof\scolumbia|^DC$)/i,FM:/(^federated\sstates\sof\smicronesia|^FM$)/i,FL:/(^florida|^FL$)/i,GA:/(^georgia|^GA$)/i,GU:/(^guam|^GU$)/i,HI:/(^hawaii|^HI$)/i,ID:/(^idaho|^ID$)/i,IL:/(^illinois|^IL$)/i,IN:/(^indiana|^IN$)/i,IA:/(^iowa|^IA$)/i,KS:/(^kansas|^KS$)/i,KY:/(^kentucky|^KY$)/i,LA:/(^louisiana|^LA$)/i,ME:/(^maine|^ME$)/i,MH:/(^marshall\sislands|^MH$)/i,MD:/(^maryland|^MD$)/i,MA:/(^massachusetts|^MA$)/i,MI:/(^michigan|^MI$)/i,MN:/(^minnesota|^MN$)/i,MS:/(^mississippi|^MS$)/i,MO:/(^missouri|^MO$)/i,MT:/(^montana|^MT$)/i,NE:/(^nebraska|^NE$)/i,NV:/(^nevada|^NV$)/i,NH:/(^new\shampshire|^NH$)/i,NJ:/(^new\sjersey|^NJ$)/i,NM:/(^new\smexico|^NM$)/i,NY:/(^new\syork|^NY$)/i,NC:/(^north\scarolina|^NC$)/i,ND:/(^north\sdakota|^ND$)/i,MP:/(^northern\smariana\sislands|^MP$)/i,OH:/(^ohio|^OH$)/i,OK:/(^oklahoma|^OK$)/i,OR:/(^oregon|^OR$)/i,PW:/(^palau|^PW$)/i,PA:/(^pennsylvania|^PA$)/i,PR:/(^puerto\srico|^PR$)/i,RI:/(^rhode\sisland|^RI$)/i,SC:/(^south\scarolina|^SC$)/i,SD:/(^south\sdakota|^SD$)/i,TN:/(^tennessee|^TN$)/i,TX:/(^texas|^TX$)/i,UT:/(^utah|^UT$)/i,VT:/(^vermont|^VT$)/i,VI:/(^virgin\sislands|^VI$)/i,VA:/(^virginia|^VA$)/i,WA:/(^washington|^WA$)/i,WV:/(^west\svirginia|^WV$)/i,WI:/(^wisconsin|^WI$)/i,WY:/(^wyoming|^WY$)/i},country:{USA:/(^UNITED\sSTATES|^U\.?S\.?A?$)/i},rePostalCode:/(^\d{5}$)|(^\d{5}-\d{4}$)/},opts))}},{"../parsers/en.js":6,"cog/extend":4}],4:[function(require,module,exports){"use strict";module.exports=function(target){[].slice.call(arguments,1).forEach(function(source){if(!source){return}for(var prop in source){target[prop]=source[prop]}});return target}},{}],5:[function(require,module,exports){"use strict";module.exports=function(textRegexes){var regexes=[];var reStreetCleaner=/^\^?(.*)\,?\$?$/;var ii;for(ii=textRegexes.length;ii--;){regexes[ii]=new RegExp(textRegexes[ii].replace(reStreetCleaner,"^$1,?$"),"i")}return regexes}},{}],6:[function(require,module,exports){"use strict";var Address=require("../address");var compiler=require("./compiler");var streetRegexes=compiler(["ALLE?Y","APP(ROACH)?","ARC(ADE)?","AV(E|ENUE)?","(BOULEVARD|BLVD)","BROW","BYPA(SS)?","C(AUSE)?WAY","(CIRCUIT|CCT)","CIRC(US)?","CL(OSE)?","CO?PSE","(CORNER|CNR)","(C((OUR)|R)?T|CRT)","CRES(CENT)?","DR(IVE)?","ESP(LANANDE)?","F(REE)?WAY","(FRONTAGE|FRNT)","(GLADE|GLD)","GR(EE)?N","(HIGHWAY|HWY)","(LANE|LN)","LINK","LOOP","MALL","MEWS","(PACKET|PCKT)","P(ARA)?DE","(PARKWAY|PKWY)","PL(ACE)?","PROM(ENADE)?","RES(ERVE)?","RISE","R(OA)?D","ROW","SQ(UARE)?","ST(REET)?","STRI?P","TARN","T(ERRA)?CE","(THOROUGHFARE|TFRE)","TRACK?","T(RUNK)?WAY","VI?STA","WALK","WA?Y","W(ALK)?WAY","YARD"]);var reSplitStreet=/^(N|NTH|NORTH|E|EST|EAST|S|STH|SOUTH|W|WST|WEST)\,$/i;module.exports=function(text,opts){var address=new Address(text,opts);address.clean([function(input){return input.replace(/(\w{2})\./g,"$1")},function(input){return input.replace(/^\s*SHOP\s?(\d*)\,?\s*/i,"$1/")}]).split(/\s/).extract("unit",[/^(?:\#|APT|APARTMENT)\s?(\d+)/,/^(\d+)\/(.*)/]).extractStreet(streetRegexes,reSplitStreet);if(opts&&opts.state){address.extract("state",opts.state)}if(opts&&opts.country){address.extract("country",opts.country)}if(opts&&opts.rePostalCode){address.extract("postalcode",[opts.rePostalCode])}return address.finalize()}},{"../address":1,"./compiler":5}]},{},[2])(2)});
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.addressit=f()}})(function(){var define,module,exports;return 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}({1:[function(require,module,exports){"use strict";var reNumeric=/^\d+$/;function Address(text,opts){if(!(this instanceof Address)){return new Address(text)}this.text=text;this.parts=[]}module.exports=Address;var proto=Address.prototype;proto._extractStreetParts=function(startIndex,splitStreet){var index=startIndex;var streetParts=[];var numberParts;var parts=this.parts;var streetPartsLength=splitStreet?3:2;var testFn=function(){return true};while(index>=0&&testFn()){var alphaPart=isNaN(parseInt(parts[index],10));if(streetParts.length<streetPartsLength||alphaPart){streetParts.unshift(parts.splice(index--,1))}else{if(!numberParts){numberParts=[]}numberParts.unshift(parts.splice(index--,1));testFn=function(){var isAlpha=isNaN(parseInt(parts[index],10));return numberParts?!isAlpha:isAlpha}}}this.number=numberParts?numberParts.join("/"):"";this.street=streetParts.join(" ").replace(/\,/g,"")};proto.clean=function(cleaners){cleaners=cleaners||[];for(var ii=0;ii<cleaners.length;ii++){if(typeof cleaners[ii]=="function"){this.text=cleaners[ii].call(null,this.text)}else if(cleaners[ii]instanceof RegExp){this.text=this.text.replace(cleaners[ii],"")}}return this};proto.extract=function(fieldName,regexes){var match;var rgxIdx;var ii;var value;var lookups=[];if(typeof regexes=="object"&&typeof regexes.splice=="undefined"){var newRegexes=[];for(var key in regexes){newRegexes[newRegexes.length]=regexes[key];lookups[newRegexes.length-1]=key}regexes=newRegexes}for(rgxIdx=0;rgxIdx<regexes.length;rgxIdx++){for(ii=this.parts.length;ii>=0;ii--){match=regexes[rgxIdx].exec(this.parts[ii]);if(match){if(match[2]){this.parts.splice(ii,1,match[2])}else{this.parts.splice(ii,1)}value=lookups[rgxIdx]||match[1]}else if(fieldName==="state"&&value===undefined){var matchMultiplePart=false;var spacesInMatch=regexes[rgxIdx].source.split("\\s").length;if(spacesInMatch>1){var multiplePart=[];for(var partJoin=ii;partJoin>ii-spacesInMatch&&partJoin>=0;partJoin--){multiplePart.push(this.parts[partJoin])}multiplePart.reverse();multiplePart=multiplePart.join(" ");matchMultiplePart=regexes[rgxIdx].exec(multiplePart);if(matchMultiplePart){if(matchMultiplePart[2]){this.parts.splice(ii-spacesInMatch+1,spacesInMatch,matchMultiplePart[2]);ii-=spacesInMatch+1}else{this.parts.splice(ii-spacesInMatch+1,spacesInMatch);ii-=spacesInMatch+1}value=lookups[rgxIdx]||matchMultiplePart[1]}}}}}this[fieldName]=value;return this};proto.extractStreet=function(regexes,reSplitStreet){var reNumericesque=/^(\d*|\d*\w)$/;var parts=this.parts;var splitStreet=false;regexes=regexes||[];function locateBestStreetPart(startIndex){var bestIndex=startIndex;for(var ii=startIndex-1;ii>=0;ii--){for(var rgxIdx=0;rgxIdx<regexes.length;rgxIdx++){if(regexes[rgxIdx].test(parts[ii])&&parts[ii-1]&&!reNumericesque.test(parts[ii-1])){bestIndex=ii;break}}}return bestIndex}for(var partIdx=parts.length;partIdx--;){for(var rgxIdx=0;rgxIdx<regexes.length;rgxIdx++){if(regexes[rgxIdx].test(parts[partIdx])&&partIdx>0){var startIndex=locateBestStreetPart(partIdx);if(reSplitStreet.test(parts[startIndex+1])){splitStreet=true;startIndex+=1}this._extractStreetParts(startIndex,splitStreet);break}}}return this};proto.finalize=function(){this.regions=this.parts.join(" ").split(/\,\s?/).filter(function(region){return region.length});this.parts=[];return this};proto.split=function(separator){var newParts=this.text.split(separator||" ");this.parts=[];for(var ii=0;ii<newParts.length;ii++){if(newParts[ii]){this.parts[this.parts.length]=newParts[ii]}}return this};proto.toString=function(){var output="";if(this.building){output+=this.building+"\n"}if(this.street){output+=this.number?this.number+" ":"";output+=this.street+"\n"}output+=this.regions.join(", ")+"\n";return output}},{}],2:[function(require,module,exports){"use strict";module.exports=function(input,opts){var parse=(opts||{}).locale||require("./locale/en-US");return parse(input,opts)}},{"./locale/en-US":3}],3:[function(require,module,exports){var parser=require("../parsers/en.js");var extend=require("cog/extend");module.exports=function(input,opts){return parser(input,extend({state:{AL:/(^alabama|^AL$)/i,AK:/(^alaska|^AK$)/i,AS:/(^american\ssamoa|^AS$)/i,AZ:/(^arizona|^AZ$)/i,AR:/(^arkansas|^AR$)/i,CA:/(^california|^CA$)/i,CO:/(^colorado|^CO$)/i,CT:/(^connecticut|^CT$)/i,DE:/(^delaware|^DE$)/i,DC:/(^district\sof\scolumbia|^DC$)/i,FM:/(^federated\sstates\sof\smicronesia|^FM$)/i,FL:/(^florida|^FL$)/i,GA:/(^georgia|^GA$)/i,GU:/(^guam|^GU$)/i,HI:/(^hawaii|^HI$)/i,ID:/(^idaho|^ID$)/i,IL:/(^illinois|^IL$)/i,IN:/(^indiana|^IN$)/i,IA:/(^iowa|^IA$)/i,KS:/(^kansas|^KS$)/i,KY:/(^kentucky|^KY$)/i,LA:/(^louisiana|^LA$)/i,ME:/(^maine|^ME$)/i,MH:/(^marshall\sislands|^MH$)/i,MD:/(^maryland|^MD$)/i,MA:/(^massachusetts|^MA$)/i,MI:/(^michigan|^MI$)/i,MN:/(^minnesota|^MN$)/i,MS:/(^mississippi|^MS$)/i,MO:/(^missouri|^MO$)/i,MT:/(^montana|^MT$)/i,NE:/(^nebraska|^NE$)/i,NV:/(^nevada|^NV$)/i,NH:/(^new\shampshire|^NH$)/i,NJ:/(^new\sjersey|^NJ$)/i,NM:/(^new\smexico|^NM$)/i,NY:/(^new\syork|^NY$)/i,NC:/(^north\scarolina|^NC$)/i,ND:/(^north\sdakota|^ND$)/i,MP:/(^northern\smariana\sislands|^MP$)/i,OH:/(^ohio|^OH$)/i,OK:/(^oklahoma|^OK$)/i,OR:/(^oregon|^OR$)/i,PW:/(^palau|^PW$)/i,PA:/(^pennsylvania|^PA$)/i,PR:/(^puerto\srico|^PR$)/i,RI:/(^rhode\sisland|^RI$)/i,SC:/(^south\scarolina|^SC$)/i,SD:/(^south\sdakota|^SD$)/i,TN:/(^tennessee|^TN$)/i,TX:/(^texas|^TX$)/i,UT:/(^utah|^UT$)/i,VT:/(^vermont|^VT$)/i,VI:/(^virgin\sislands|^VI$)/i,VA:/(^virginia|^VA$)/i,WA:/(^washington|^WA$)/i,WV:/(^west\svirginia|^WV$)/i,WI:/(^wisconsin|^WI$)/i,WY:/(^wyoming|^WY$)/i},country:{USA:/(^UNITED\sSTATES|^U\.?S\.?A?$)/i},rePostalCode:/(^\d{5}$)|(^\d{5}-\d{4}$)/},opts))}},{"../parsers/en.js":6,"cog/extend":4}],4:[function(require,module,exports){"use strict";module.exports=function(target){[].slice.call(arguments,1).forEach(function(source){if(!source){return}for(var prop in source){target[prop]=source[prop]}});return target}},{}],5:[function(require,module,exports){"use strict";module.exports=function(textRegexes){var regexes=[];var reStreetCleaner=/^\^?(.*)\,?\$?$/;var ii;for(ii=textRegexes.length;ii--;){regexes[ii]=new RegExp(textRegexes[ii].replace(reStreetCleaner,"^$1,?$"),"i")}return regexes}},{}],6:[function(require,module,exports){"use strict";var Address=require("../address");var compiler=require("./compiler");var streetRegexes=compiler(["ALLE?Y","APP(ROACH)?","ARC(ADE)?","AV(E|ENUE)?","(BOULEVARD|BLVD)","BROW","BYPA(SS)?","C(AUSE)?WAY","(CIRCUIT|CCT)","CIRC(US)?","CL(OSE)?","CO?PSE","(CORNER|CNR)","(C((OUR)|R)?T|CRT)","CRES(CENT)?","DR(IVE)?","ESP(LANANDE)?","F(REE)?WAY","(FRONTAGE|FRNT)","(GLADE|GLD)","GR(EE)?N","(HIGHWAY|HWY)","(LANE|LN)","LINK","LOOP","MALL","MEWS","(PACKET|PCKT)","P(ARA)?DE","(PARKWAY|PKWY)","PL(ACE)?","PROM(ENADE)?","RES(ERVE)?","RISE","R(OA)?D","ROW","SQ(UARE)?","ST(REET)?","STRI?P","TARN","T(ERRA)?CE","(THOROUGHFARE|TFRE)","TRACK?","TR(AI)?L","T(RUNK)?WAY","VI?STA","WALK","WA?Y","W(ALK)?WAY","YARD"]);var reSplitStreet=/^(N|NTH|NORTH|E|EST|EAST|S|STH|SOUTH|W|WST|WEST)\,$/i;module.exports=function(text,opts){var address=new Address(text,opts);address.clean([function(input){return input.replace(/(\w{2})\./g,"$1")},function(input){return input.replace(/^\s*SHOP\s?(\d*)\,?\s*/i,"$1/")}]).split(/\s/).extract("unit",[/^(?:\#|APT|APARTMENT)\s?(\d+)/,/^(\d+)\/(.*)/]).extractStreet(streetRegexes,reSplitStreet);if(opts&&opts.state){address.extract("state",opts.state)}if(opts&&opts.country){address.extract("country",opts.country)}if(opts&&opts.rePostalCode){address.extract("postalcode",[opts.rePostalCode])}return address.finalize()}},{"../address":1,"./compiler":5}]},{},[2])(2)});

@@ -6,3 +6,3 @@ {

"author": "Damon Oehlman <damon.oehlman@gmail.com>",
"version": "1.3.1",
"version": "1.4.0",
"stability": "stable",

@@ -9,0 +9,0 @@ "repository": {

@@ -72,2 +72,3 @@ /* jshint node: true */

'TRACK?', // TRACK / TRAC
'TR(AI)?L', // TRAIL / TRL
'T(RUNK)?WAY', // TRUNKWAY / TWAY

@@ -74,0 +75,0 @@ // 'VIEW', // VIEW

@@ -65,2 +65,10 @@ var test = require('tape');

test('1035 Comanchee Trl, West Columbia, South Carolina 29169', expect({
number: '1035',
street: 'Comanchee Trl',
state: 'SC',
regions: ['West Columbia'],
postalcode: '29169'
}));
test('Texas 76013', expect({

@@ -67,0 +75,0 @@ "state": "TX",

@@ -109,2 +109,4 @@ var test = require('tape', valid);

test('TRAC', valid);
test('TRAIL', valid);
test('TRL', valid);
test('TRUNKWAY', valid);

@@ -119,2 +121,2 @@ test('TWAY', valid);

test('WWAY', valid);
test('YARD', valid);
test('YARD', valid);

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc