          -------
          tuple
              An output shape tuple.
          """
          # TODO: do this nicer
          ldims = len(input_shape[0])
          rdims = len(input_shape[1])
          if ldims > rdims:
              return input_shape[0]
          if rdims > ldims:
              return input_shape[1]
          lprod = np.prod(list(filter(bool, input_shape[0])))
          rprod = np.prod(list(filter(bool, input_shape[1])))
          return input_shape[0 if lprod > rprod else 1]
  
  
  class AddO2K(ElementwiseLayerO2K):
      """ Custom Keras Add layer generated by onnx2keras. """
      def call(self, inputs, **kwargs):  # pylint:disable=unused-argument
          """This is where the layer's logic lives.
  
          Parameters
          ----------
          inputs: Input tensor, or list/tuple of input tensors.
              The input to the layer
 
</s> remove         tuple
            An output shape tuple.
 </s> add         tensor:
            The output from the L2 Normalization Layer </s> remove         Parameters
        ----------
        inputs: Input tensor, or list/tuple of input tensors.
            The input to the layer
        **kwargs: Additional keyword arguments.
            Required for parent class but unused
        Returns
        -------
        A tensor or list/tuple of tensors.
            The layer output
        """
        return K.pow(*inputs)


class ConstantLayerO2K(keras.layers.Layer):
    """ Custom Keras Constant layer generated by onnx2keras. """
    def __init__(self, constant_obj, dtype, **kwargs):
        self._dtype = np.dtype(dtype).name
        self._constant = np.array(constant_obj, dtype=self._dtype)
        super().__init__(**kwargs)
 </s> add         f7_2 = ZeroPadding2D(1)(f7_2)
        cls6 = Conv2D(2, kernel_size=3, strides=1, name="conv7_2_mbox_conf")(f7_2)
        reg6 = Conv2D(4, kernel_size=3, strides=1, name="conv7_2_mbox_loc")(f7_2) </s> remove class SumO2K(ReduceLayerO2K):
    """ Custom Keras Sum layer generated by onnx2keras. """
    def call(self, inputs, **kwargs):  # pylint:disable=unused-argument
        """This is where the layer's logic lives.
 </s> add         f6_2 = self.conv_up(var_x, 256, 6)
        f7_2 = self.conv_up(f6_2, 128, 7) </s> remove         Parameters
        ----------
        inputs: Input tensor, or list/tuple of input tensors.
            The input to the layer
        **kwargs: Additional keyword arguments.
            Required for parent class but unused
 </s> add  </s> remove         Parameters
        ----------
        inputs: Input tensor, or list/tuple of input tensors.
            The input to the layer
        **kwargs: Additional keyword arguments.
            Required for parent class but unused
        Returns
        -------
        A tensor or list/tuple of tensors.
            The layer output
        """
        return K.sum(inputs, self._axes, self._keepdims)
 </s> add         f3_3 = L2Norm(256, scale=10, name="conv3_3_norm")(f3_3)
        f4_3 = L2Norm(512, scale=8, name="conv4_3_norm")(f4_3)
        f5_3 = L2Norm(512, scale=5, name="conv5_3_norm")(f5_3)
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
          -------
          tuple
              An output shape tuple.
          """
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
        norm = K.sqrt(K.sum(K.pow(inputs, 2), axis=-1, keepdims=True)) + 1e-10
        var_x = inputs / norm * self.w
        return var_x

    def get_config(self):
        """ Returns the config of the layer.
  
          Parameters
          ----------
          inputs: Input tensor, or list/tuple of input tensors.
              The input to the layer
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 extract: S3FD - Convert to re-enable CPU 
plugins/extract/detect/s3fd.py