// Path: src/main/java/com/civilizer/utils/Pair.java
// public final class Pair<A, B> {
// 	
//     private final A first;
//     private final B second;
// 
//     public Pair(A first, B second) {
//     	this.first = first;
//     	this.second = second;
//     }
// 
//     public int hashCode() {
//     	int hashFirst = first != null ? first.hashCode() : 0;
//     	int hashSecond = second != null ? second.hashCode() : 0;
// 
//     	return (hashFirst + hashSecond) * hashSecond + hashFirst;
//     }
// 
//     public boolean equals(Object other) {
//     	if (other instanceof Pair) {
//     		Pair<?, ?> otherPair = (Pair<?, ?>) other;
//     		return 
//     		((  this.first == otherPair.first ||
//     			( this.first != null && otherPair.first != null &&
//     			  this.first.equals(otherPair.first))) &&
//     		 (	this.second == otherPair.second ||
//     			( this.second != null && otherPair.second != null &&
//     			  this.second.equals(otherPair.second))) );
//     	}
// 
//     	return false;
//     }
// 
//     public String toString()
//     { 
//            return "(" + first + ", " + second + ")"; 
//     }
// 
//     public A getFirst() {
//     	return first;
//     }
// 
//     public B getSecond() {
//     	return second;
//     }
//     
// }


import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.civilizer.utils.Pair;
package com.civilizer.domain;



public final class TextDecorator {
	
	public static final String PREFIX_FOR_HIGHLIGHT = "%28%7B%28%5Bsh%5D%20";
	public static final String POSTFIX_FOR_HIGHLIGHT = "%20%29%7D%29";
	
	private static final RangeComparator rangeComparator = new RangeComparator();
	
// Path: src/main/java/com/civilizer/utils/Pair.java
// public final class Pair<A, B> {
// 	
//     private final A first;
//     private final B second;
// 
//     public Pair(A first, B second) {
//     	this.first = first;
//     	this.second = second;
//     }
// 
//     public int hashCode() {
//     	int hashFirst = first != null ? first.hashCode() : 0;
//     	int hashSecond = second != null ? second.hashCode() : 0;
// 
//     	return (hashFirst + hashSecond) * hashSecond + hashFirst;
//     }
// 
//     public boolean equals(Object other) {
//     	if (other instanceof Pair) {
//     		Pair<?, ?> otherPair = (Pair<?, ?>) other;
//     		return 
//     		((  this.first == otherPair.first ||
//     			( this.first != null && otherPair.first != null &&
//     			  this.first.equals(otherPair.first))) &&
//     		 (	this.second == otherPair.second ||
//     			( this.second != null && otherPair.second != null &&
//     			  this.second.equals(otherPair.second))) );
//     	}
// 
//     	return false;
//     }
// 
//     public String toString()
//     { 
//            return "(" + first + ", " + second + ")"; 
//     }
// 
//     public A getFirst() {
//     	return first;
//     }
// 
//     public B getSecond() {
//     	return second;
//     }
//     
// }


// Path: src/main/java/com/civilizer/domain/TextDecorator.java
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.civilizer.utils.Pair;

package com.civilizer.domain;



public final class TextDecorator {
	
	public static final String PREFIX_FOR_HIGHLIGHT = "%28%7B%28%5Bsh%5D%20";
	public static final String POSTFIX_FOR_HIGHLIGHT = "%20%29%7D%29";
	
	private static final RangeComparator rangeComparator = new RangeComparator();
	
	private static class RangeComparator implements Comparator<Pair<Integer, Integer>> {