{
  "draw2d": [
    {
      "type": "shape_designer.figure.ExtPolygon",
      "id": "6e834d54-6700-ad9b-ab50-0faefeaea483",
      "x": 7987.5,
      "y": 7980,
      "width": 25,
      "height": 40,
      "alpha": 1,
      "selectable": true,
      "draggable": true,
      "angle": 0,
      "userData": {
        "baseClass": "draw2d.SetFigure",
        "code": "/**\n * Generated Code for the Draw2D touch HTML5 lib.\n * File will be generated if you save the *.shape file.\n *\n * by 'Draw2D Shape Designer'\n *\n * Custom JS code to tweak the standard behaviour of the generated\n * shape. add your custom code and event handler here.\n *\n * Looks disconcerting - extending my own class. But this is a good method to\n * merge basic code and override them with custom methods.\n */\ntestShape = testShape.extend({\n\n    init: function(attr, setter, getter){\n         this._super(attr, setter, getter);\n\n        this.attr({resizeable:false});\n        this.installEditPolicy(new draw2d.policy.figure.AntSelectionFeedbackPolicy());\n    },\n\n    /**\n     *  Called by the simulator for every calculation\n     *  loop\n     *  @param {Object} context context where objects can store or handover global variables to other objects.\n     *  @required\n     **/\n    calculate:function( context)\n    {\n        var i1 = this.getInputPort(0);\n        var i2 = this.getInputPort(1);\n        var o1 = this.getOutputPort(0);\n        \n        o1.setValue(!( (i1.getValue() && !i2.getValue() ) || ( !i1.getValue() && i2.getValue() )));\n    },\n\n\n    /**\n     *  Called if the simulation mode is starting\n     *  @required\n     **/\n    onStart:function(context)\n    {\n    },\n\n    /**\n     *  Called if the simulation mode is stopping\n     *  @required\n     **/\n    onStop:function(context)\n    {\n    },\n\n    /**\n     * Get the simulator a hint which kind of hardware the shapes requires or supports\n     * This helps the simulator to bring up some dialogs and messages if any new hardware is connected/get lost\n     * and your are running a circuit which needs this kind of hardware...\n     **/\n    getRequiredHardware: function(){\n      return {\n        raspi: false,\n        arduino: false\n      }\n    }\n\n});",
        "markdown": "# XNOR Gate\n\n## Description\nThe `XNOR gate` (pronounced as Exclusive NOR) is a digital logic gate \nwhose function is the logical complement of the exclusive OR (XOR) \ngate[1]. The two-input version implements logical equality, behaving \naccording to the truth table to the right, and hence the gate is \nsometimes called an \"equivalence gate\". A high output (1) results \nif both of the inputs to the gate are the same. If one but not both \ninputs are high (1), a low output (0) results.\n\n## Logic table\n\n| INPUT 1   | INPUT   |  OUTPUT    |\n|:---------:|:-------:|:----------:|\n| Low       | Low     |  `High`       |\n| `High`      | Low     |  Low       |\n| Low       | `High`    |  Low       |\n| `High`      | `High`    |  `High`    |\n\n"
      },
      "cssClass": "shape_designer_figure_PolyCircle",
      "ports": [],
      "bgColor": "rgba(252,252,252,1)",
      "color": "rgba(27,27,27,1)",
      "stroke": 1,
      "radius": 0,
      "dasharray": null,
      "vertices": [
        {
          "x": 7987.5,
          "y": 8019.992866146254
        },
        {
          "x": 7987.601511537635,
          "y": 8020
        },
        {
          "x": 7991.925088685785,
          "y": 8019.696155060245
        },
        {
          "x": 7996.117296130125,
          "y": 8018.793852415718
        },
        {
          "x": 8000.050755768817,
          "y": 8017.320508075689
        },
        {
          "x": 8003.6059514211665,
          "y": 8015.320888862379
        },
        {
          "x": 8006.674860266292,
          "y": 8012.855752193731
        },
        {
          "x": 8009.164235061877,
          "y": 8010
        },
        {
          "x": 8010.998437414442,
          "y": 8006.840402866514
        },
        {
          "x": 8012.121736013657,
          "y": 8003.472963553339
        },
        {
          "x": 8012.5,
          "y": 8000
        },
        {
          "x": 8012.121736013657,
          "y": 7996.527036446661
        },
        {
          "x": 8010.998437414442,
          "y": 7993.159597133486
        },
        {
          "x": 8009.164235061877,
          "y": 7990
        },
        {
          "x": 8006.674860266292,
          "y": 7987.144247806269
        },
        {
          "x": 8003.6059514211665,
          "y": 7984.679111137621
        },
        {
          "x": 8000.050755768817,
          "y": 7982.679491924311
        },
        {
          "x": 7996.117296130125,
          "y": 7981.206147584282
        },
        {
          "x": 7991.925088685785,
          "y": 7980.303844939755
        },
        {
          "x": 7987.601511537635,
          "y": 7980
        },
        {
          "x": 7987.5,
          "y": 7980.007133853746
        },
        {
          "x": 7987.5,
          "y": 8019.992866146254
        }
      ],
      "blur": 0,
      "filters": [
        {
          "name": "shape_designer.filter.PositionFilter"
        },
        {
          "name": "shape_designer.filter.SizeFilter"
        },
        {
          "name": "shape_designer.filter.FillColorFilter"
        },
        {
          "name": "shape_designer.filter.StrokeFilter"
        }
      ]
    },
    {
      "type": "shape_designer.figure.ExtPort",
      "id": "19fd1dcb-f9e4-190d-a717-7444122d9964",
      "x": 8007.0424,
      "y": 7995,
      "width": 10,
      "height": 10,
      "alpha": 1,
      "selectable": true,
      "draggable": true,
      "angle": 0,
      "userData": {
        "name": "output",
        "type": "Output",
        "direction": 1,
        "fanout": 20
      },
      "cssClass": "shape_designer_figure_ExtPort",
      "ports": [],
      "bgColor": "rgba(55,177,222,1)",
      "color": "rgba(27,27,27,1)",
      "stroke": 1,
      "dasharray": null,
      "filters": [
        {
          "name": "shape_designer.filter.PositionFilter"
        },
        {
          "name": "shape_designer.filter.FanoutFilter"
        },
        {
          "name": "shape_designer.filter.PortDirectionFilter"
        },
        {
          "name": "shape_designer.filter.PortTypeFilter"
        }
      ]
    },
    {
      "type": "shape_designer.figure.ExtPort",
      "id": "7297563e-896e-648c-d774-7e1a662d65a4",
      "x": 7982.3967999999995,
      "y": 7983.5,
      "width": 10,
      "height": 10,
      "alpha": 1,
      "selectable": true,
      "draggable": true,
      "angle": 0,
      "userData": {
        "name": "input0",
        "type": "Input",
        "direction": 3,
        "fanout": 20
      },
      "cssClass": "shape_designer_figure_ExtPort",
      "ports": [],
      "bgColor": "rgba(55,177,222,1)",
      "color": "rgba(27,27,27,1)",
      "stroke": 1,
      "dasharray": null,
      "filters": [
        {
          "name": "shape_designer.filter.PositionFilter"
        },
        {
          "name": "shape_designer.filter.FanoutFilter"
        },
        {
          "name": "shape_designer.filter.PortDirectionFilter"
        },
        {
          "name": "shape_designer.filter.PortTypeFilter"
        }
      ]
    },
    {
      "type": "shape_designer.figure.ExtPort",
      "id": "31c229c7-f64e-5b82-2349-767cb9cd57be",
      "x": 7982.3967999999995,
      "y": 8007,
      "width": 10,
      "height": 10,
      "alpha": 1,
      "selectable": true,
      "draggable": true,
      "angle": 0,
      "userData": {
        "name": "input1",
        "type": "Input",
        "direction": 3,
        "fanout": 20
      },
      "cssClass": "shape_designer_figure_ExtPort",
      "ports": [],
      "bgColor": "rgba(55,177,222,1)",
      "color": "rgba(27,27,27,1)",
      "stroke": 1,
      "dasharray": null,
      "filters": [
        {
          "name": "shape_designer.filter.PositionFilter"
        },
        {
          "name": "shape_designer.filter.FanoutFilter"
        },
        {
          "name": "shape_designer.filter.PortDirectionFilter"
        },
        {
          "name": "shape_designer.filter.PortTypeFilter"
        }
      ]
    },
    {
      "type": "shape_designer.figure.ExtLine",
      "id": "b77b5db1-d31c-2f1b-838b-92a1c9dd221d",
      "alpha": 1,
      "selectable": true,
      "draggable": true,
      "angle": 0,
      "userData": {
        "name": "Line"
      },
      "cssClass": "shape_designer_figure_ExtLine",
      "stroke": 1,
      "color": "rgba(0,0,0,1)",
      "outlineStroke": 0,
      "outlineColor": "rgba(0,0,0,0)",
      "policy": "draw2d.policy.line.VertexSelectionFeedbackPolicy",
      "vertex": [
        {
          "x": 7990.428599999999,
          "y": 7995.418200000003
        },
        {
          "x": 8006.0211,
          "y": 7995.210300000003
        },
        {
          "x": 8005.8132,
          "y": 7995.210300000003
        }
      ],
      "router": "draw2d.layout.connection.VertexRouter",
      "radius": "",
      "filters": [
        {
          "name": "shape_designer.filter.StrokeFilter"
        }
      ]
    },
    {
      "type": "shape_designer.figure.ExtLine",
      "id": "02d3b02a-8676-2ad4-ed9f-dd7ab14e8be4",
      "alpha": 1,
      "selectable": true,
      "draggable": true,
      "angle": 0,
      "userData": {
        "name": "Line"
      },
      "cssClass": "shape_designer_figure_ExtLine",
      "stroke": 1,
      "color": "rgba(0,0,0,1)",
      "outlineStroke": 0,
      "outlineColor": "rgba(0,0,0,0)",
      "policy": "draw2d.policy.line.VertexSelectionFeedbackPolicy",
      "vertex": [
        {
          "x": 7990.438999999995,
          "y": 8000.002400000002
        },
        {
          "x": 8006.0314999999955,
          "y": 7999.794500000003
        },
        {
          "x": 8005.823599999995,
          "y": 7999.794500000003
        }
      ],
      "router": "draw2d.layout.connection.VertexRouter",
      "radius": "",
      "filters": [
        {
          "name": "shape_designer.filter.StrokeFilter"
        }
      ]
    },
    {
      "type": "shape_designer.figure.ExtLine",
      "id": "32f7617b-9783-f46a-0606-1503a9f247c2",
      "alpha": 1,
      "selectable": true,
      "draggable": true,
      "angle": 0,
      "userData": {
        "name": "Line"
      },
      "cssClass": "shape_designer_figure_ExtLine",
      "stroke": 1,
      "color": "rgba(0,0,0,1)",
      "outlineStroke": 0,
      "outlineColor": "rgba(0,0,0,0)",
      "policy": "draw2d.policy.line.VertexSelectionFeedbackPolicy",
      "vertex": [
        {
          "x": 7990.449399999993,
          "y": 8004.794500000002
        },
        {
          "x": 8006.041899999994,
          "y": 8004.586600000002
        },
        {
          "x": 8005.8339999999935,
          "y": 8004.586600000002
        }
      ],
      "router": "draw2d.layout.connection.VertexRouter",
      "radius": "",
      "filters": [
        {
          "name": "shape_designer.filter.StrokeFilter"
        }
      ]
    }
  ],
  "image": "data:image/png;base64,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"
}