public String asymmetric(int leftPos, int rightPos) {
		boolean lm = false, rm = false, isSameLAR = isEqual(this.region.get()[0], this.region.get()[1]);
		int l = 0, r = 0, lr = 0, lp = 0, rp = 0;

		for (Pair<Integer, Integer> kv : indexes.get()) {
			if (isSameLAR) {
				++lr;
				if (lr == leftPos) { lp = kv.getR(); lm = true; }
				if (lr == rightPos) { rp = kv.getR(); rm = true; }
			} else {
				switch (kv.getL().intValue()) {
				case 0: ++l; if (l == leftPos) { lp = kv.getR(); lm = true; } break;
				case 1: ++r; if (r == rightPos) { rp = kv.getR(); rm = true; } break;
				}
			}
			
			if (lm && rm) { break; }
		}

		if (!(lm && rm)) {
			return EMPTY;
		}
		
		return this.doSubstring(Pair.of(lp, rp));
	}
public String asymmetric ( int leftPos , int rightPos ) { boolean lm = false , rm = false , isSameLAR = isEqual ( this . region . get ( ) [ 0 ] , this . region . get ( ) [ 1 ] ) ; int l = 0 , r = 0 , lr = 0 , lp = 0 , rp = 0 ; for ( Pair < Integer , Integer > kv : indexes . get ( ) ) { if ( isSameLAR ) { ++ lr ; if ( lr == leftPos ) { lp = kv . getR ( ) ; lm = true ; } if ( lr == rightPos ) { rp = kv . getR ( ) ; rm = true ; } } else { switch ( kv . getL ( ) . intValue ( ) ) { case 0 : ++ l ; if ( l == leftPos ) { lp = kv . getR ( ) ; lm = true ; } break ; case 1 : ++ r ; if ( r == rightPos ) { rp = kv . getR ( ) ; rm = true ; } break ; } } if ( lm && rm ) { break ; } } if ( ! ( lm && rm ) ) { return EMPTY ; } return this . doSubstring ( Pair . of ( lp , rp ) ) ; }
Returns the substring in given left position and right position when the left right tag is asymmetric

@param leftPos
@param rightPos
@return