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