old_contents: exports.clone = 
  function (ary) {
    return ary.map(function (e) {
      return Array.isArray(e) ? exports.clone(e) : e
    })
  }
  
  var exports = module.exports = function (chars, exports) {
  
    chars = chars ||
    '!0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~'
  
    exports = exports || {} 
  
    exports.randstr   = randstr
    exports.between   = between
    exports.strord    = strord
  
    exports.lo        = chars[0]
    exports.hi        = chars[chars.length - 1]
  
    function randstr(l) {
      var str = ''
      while(l--) 
        str += chars[
          Math.floor(
            Math.random() * chars.length 
          )
        ]
      return str
    }
  
    /*
      SOME EXAMPLE STRINGS, IN ORDER
     
      0
      00001
      0001
      001
      001001
      00101
      0011
      0011001
      001100101
      00110011
      001101
      00111
      01  
  
      if you never make a string that ends in the lowest char,
      then it is always possible to make a string between two strings.
      this is like how decimals never end in 0. 
  
      example:
  
      between('A', 'AB') 
  
      ... 'AA' will sort between 'A' and 'AB' but then it is impossible
      to make a string inbetween 'A' and 'AA'.
      instead, return 'AAB', then there will be space.
  
    */
  
    function between (a, b) {
  
  
      var s = '', i = 0, c
  
       var i = 0
       while (true) {
  
        var _a = chars.indexOf(a[i])
        var _b = chars.indexOf(b[i])
  
        if(_a == -1) _a = 0
        if(_b == -1) _b = chars.length - 1
  
        i++
  
        if(_a + 1 < _b)
          c = chars[Math.round((_a+_b)/2)]
        else
          c = chars[_a]
  
        s += c
  
    /*
        console.log()
        console.log('<<<<', a)
        console.log('====', s)
        console.log('>>>>', b) 
        console.log(a < s && s < b)
    /**/
  
        if(a < s && s < b && c != '!')
          break;
  
      }
  
      return s
    }
  
    function strord (a, b) {
      return (
        a == b ?  0
      : a <  b ? -1
      :           1
      )
    }
  
    function concat(to, from) {
      while(from.length)
        to.push(from.shift())
      return to
    }
  
    return exports
  }
  
  exports(null, exports)
  
new_contents: exports.clone = 
  function (ary) {
    return ary.map(function (e) {
      return Array.isArray(e) ? exports.clone(e) : e
    })
  }
  
  var exports = module.exports = function (chars, exports) {
  
    chars = chars ||
    '!0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~'
  
    exports = exports || {} 
  
    exports.randstr   = randstr
    exports.between   = between
    exports.strord    = strord
  
    exports.lo        = chars[0]
    exports.hi        = chars[chars.length - 1]
  
    function randstr(l) {
      var str = ''
      while(l--) 
        str += chars[
          Math.floor(
            Math.random() * chars.length 
          )
        ]
      return str
    }
  
    /*
      SOME EXAMPLE STRINGS, IN ORDER
     
      0
      00001
      0001
      001
      001001
      00101
      0011
      0011001
      001100101
      00110011
      001101
      00111
      01  
  
      if you never make a string that ends in the lowest char,
      then it is always possible to make a string between two strings.
      this is like how decimals never end in 0. 
  
      example:
  
      between('A', 'AB') 
  
      ... 'AA' will sort between 'A' and 'AB' but then it is impossible
      to make a string inbetween 'A' and 'AA'.
      instead, return 'AAB', then there will be space.
  
    */
  
    function between (a, b) {
  
  
      var s = '', i = 0, c
  
       var i = 0
       while (true) {
  
        var _a = chars.indexOf(a[i])
        var _b = chars.indexOf(b[i])
  
        if(_a == -1) _a = 0
        if(_b == -1) _b = chars.length - 1
  
        i++
  
        if(_a + 1 < _b)
          c = chars[Math.round((_a+_b)/2)]
        else
          c = chars[_a]
  
        s += c
  
    /*
        console.log()
        console.log('<<<<', a)
        console.log('====', s)
        console.log('>>>>', b) 
        console.log(a < s && s < b)
    /**/
  
        if(a < s && s < b && c != exports.lo)
          break;
  
      }
  
      return s
    }
  
    function strord (a, b) {
      return (
        a == b ?  0
      : a <  b ? -1
      :           1
      )
    }
  
    function concat(to, from) {
      while(from.length)
        to.push(from.shift())
      return to
    }
  
    return exports
  }
  
  exports(null, exports)
  
subject: use injectable low character