internal int method_5(T value, IComparer <T> comparer) { int num1 = 0; RedBlackTree <T> .Node node1 = (RedBlackTree <T> .Node)null; RedBlackTree <T> .Node root1 = (RedBlackTree <T> .Node)null; RedBlackTree <T> .Node root2 = this; bool isLeft1 = false; RedBlackTree <T> .Node node2 = root2.method_2(false); while (node2 != null) { bool isLeft2 = isLeft1; RedBlackTree <T> .Node node3 = root1; root1 = root2; root2 = node2; int num2 = comparer.Compare(value, root2.gparam_0); isLeft1 = num2 < 0; if (num2 == 0) { node1 = root2; } node2 = root2.method_2(isLeft1); if (!root2.IsRed && !RedBlackTree <T> .Node.smethod_0(node2)) { if (RedBlackTree <T> .Node.smethod_0(root2.method_2(!isLeft1))) { RedBlackTree <T> .Node child = isLeft1 ? RedBlackTree <T> .Node.smethod_3(root2) : RedBlackTree <T> .Node.smethod_1(root2); root1.method_1(isLeft2, child); root1 = child; } else { RedBlackTree <T> .Node node4 = root1.method_2(!isLeft2); if (node4 != null) { if (!RedBlackTree <T> .Node.smethod_0(node4.node_1) && !RedBlackTree <T> .Node.smethod_0(node4.node_2)) { root1.bool_0 = false; node4.bool_0 = true; root2.bool_0 = true; } else { bool isLeft3 = root1 != node3.node_2; RedBlackTree <T> .Node child; if (RedBlackTree <T> .Node.smethod_0(node4.method_2(isLeft2))) { child = isLeft2 ? RedBlackTree <T> .Node.smethod_4(root1) : RedBlackTree <T> .Node.smethod_2(root1); node3.method_1(isLeft3, child); } else if (RedBlackTree <T> .Node.smethod_0(node4.method_2(!isLeft2))) { child = isLeft2 ? RedBlackTree <T> .Node.smethod_3(root1) : RedBlackTree <T> .Node.smethod_1(root1); node3.method_1(isLeft3, child); } else { child = node3.method_2(isLeft3); } RedBlackTree <T> .Node node5 = root2; child.bool_0 = true; node5.bool_0 = true; child.node_1.bool_0 = false; child.node_2.bool_0 = false; } } } } } if (node1 != null) { node1.gparam_0 = root2.gparam_0; root1.method_1(root1.Right != root2, root2.method_2(root2.Left == null)); num1 = 1; } return(num1); }