I am not very good at scripts but I'll try.

ripemd160(sha256(OP_2 OP_EQUAL)

You can not hash an operation, you has the values. OP_2 is also an operation but it happens to be adding a predefined value (2) to the stack. Your OP_Equal on the other hand is just an operation, so your hash looks like something like this:

Hash(5 +)

So your interpreter is surprised to see a + operation (or in your case an equality check op) where it is expecting a value.

16: mandatory-script-verify-flag-failed (Script evaluated without error but finished with a false/empty top stack element)"

Here is the step by step of the script:

1. Stack is empty.

**OP_2** OP_2 OP_EQUAL OP_HASH160 5c9081ddd7c74d71e183b104abcc3f74be54c9c7 OP_EQUAL

2. Push value 2 on the stack: Stack is { 2 }

**OP_2** OP_EQUAL OP_HASH160 5c9081ddd7c74d71e183b104abcc3f74be54c9c7 OP_EQUAL

3. Push value 2 on the stack: Stack is { 2, 2 }

**OP_EQUAL** OP_HASH160 5c9081ddd7c74d71e183b104abcc3f74be54c9c7 OP_EQUAL

4.

4.1. Pop 2 items from stack: Stack is { }, you have two values in memory

4.2. Check their equality...

4.3. Push (Boolean) result on the stack: Stack is { 1 }

**OP_HASH160** 5c9081ddd7c74d71e183b104abcc3f74be54c9c7 OP_EQUAL

5.

5.1. Pop 1 item from stack, stack is empty and there is value 1 in memory

5.2. Perform hash160 hash on 1

5.3. Push the result of hash back on stack { .... }

5c9081ddd7c74d71e183b104abcc3f74be54c9c7 OP_EQUAL

6. (Assuming there is a push op behind this, the value will be pushed onto the stack)

**OP_EQUAL**7. The same as 4 but the result is false because you were supposed to have Hash160(2) but you have Hash160(1)

Edit: I've made a tiny mistake which I fixed. The script fails not because of final step or the equality check before that, it fails because in your script sig you have operations

**other than push operations**.