Updated and new cells
diff --git a/cells/gds/LOFTY.gds b/cells/gds/LOFTY.gds
new file mode 100644
index 0000000..2e28ac4
--- /dev/null
+++ b/cells/gds/LOFTY.gds
Binary files differ
diff --git a/cells/lef/AND2X1.lef b/cells/lef/AND2X1.lef
index 2b2fbbc..4678076 100644
--- a/cells/lef/AND2X1.lef
+++ b/cells/lef/AND2X1.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 5.760 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/AND2X2.lef b/cells/lef/AND2X2.lef
index 5c4c9e3..a6ad78b 100644
--- a/cells/lef/AND2X2.lef
+++ b/cells/lef/AND2X2.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 5.760 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/AOI21X1.lef b/cells/lef/AOI21X1.lef
index 2a364e5..746dd95 100644
--- a/cells/lef/AOI21X1.lef
+++ b/cells/lef/AOI21X1.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 5.760 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/AOI22X1.lef b/cells/lef/AOI22X1.lef
index d37cec6..dffb0de 100644
--- a/cells/lef/AOI22X1.lef
+++ b/cells/lef/AOI22X1.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 7.200 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/BUFX2.lef b/cells/lef/BUFX2.lef
index 70f5d75..9b8ac6c 100644
--- a/cells/lef/BUFX2.lef
+++ b/cells/lef/BUFX2.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 4.320 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/BUFX4.lef b/cells/lef/BUFX4.lef
index c61076d..2c25e11 100644
--- a/cells/lef/BUFX4.lef
+++ b/cells/lef/BUFX4.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 5.760 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/CLKBUF1.lef b/cells/lef/CLKBUF1.lef
index 6ebaa05..e54e104 100644
--- a/cells/lef/CLKBUF1.lef
+++ b/cells/lef/CLKBUF1.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 12.960 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/HAX1.lef b/cells/lef/HAX1.lef
index 31e9d20..a1398a9 100644
--- a/cells/lef/HAX1.lef
+++ b/cells/lef/HAX1.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 15.840 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/INV.lef b/cells/lef/INV.lef
index 0784f3a..c80033f 100644
--- a/cells/lef/INV.lef
+++ b/cells/lef/INV.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 2.880 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/INVX1.lef b/cells/lef/INVX1.lef
index 47b48fb..adccadb 100644
--- a/cells/lef/INVX1.lef
+++ b/cells/lef/INVX1.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 2.880 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/INVX2.lef b/cells/lef/INVX2.lef
index ef6aee3..8a4db41 100644
--- a/cells/lef/INVX2.lef
+++ b/cells/lef/INVX2.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 2.880 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/INVX4.lef b/cells/lef/INVX4.lef
index 8588178..fa46143 100644
--- a/cells/lef/INVX4.lef
+++ b/cells/lef/INVX4.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 4.320 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/INVX8.lef b/cells/lef/INVX8.lef
index e3c5d0d..9985013 100644
--- a/cells/lef/INVX8.lef
+++ b/cells/lef/INVX8.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 7.200 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/LATCH.lef b/cells/lef/LATCH.lef
index 55afbba..09c6256 100644
--- a/cells/lef/LATCH.lef
+++ b/cells/lef/LATCH.lef
@@ -8,7 +8,7 @@
   ORIGIN 0.000 0.000 ;
   SIZE 10.080 BY 3.330 ;
   SYMMETRY X Y R90 ;
-  SITE unithd ;
+  SITE unit ;
   PIN vdd
     DIRECTION INOUT ;
     USE POWER ;
diff --git a/cells/lef/LOFTY.lef b/cells/lef/LOFTY.lef
new file mode 100644
index 0000000..6fe954b
--- /dev/null
+++ b/cells/lef/LOFTY.lef
@@ -0,0 +1,167 @@
+VERSION 5.7 ;
+  NOWIREEXTENSIONATPIN ON ;
+  DIVIDERCHAR "/" ;
+  BUSBITCHARS "[]" ;
+MACRO LOFTY
+  CLASS CORE ;
+  FOREIGN LOFTY ;
+  ORIGIN 0.000 0.000 ;
+  SIZE 21.600 BY 3.330 ;
+  SYMMETRY X Y R90 ;
+  SITE unit ;
+  PIN vdd
+    DIRECTION INOUT ;
+    USE POWER ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 0.000 3.090 21.600 3.570 ;
+    END
+  END vdd
+  PIN gnd
+    DIRECTION INOUT ;
+    USE GROUND ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 0.000 -0.240 21.600 0.240 ;
+    END
+  END gnd
+  PIN Q
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 2.020 2.290 2.550 2.580 ;
+        RECT 2.090 0.690 2.230 2.290 ;
+        RECT 2.020 0.400 2.310 0.690 ;
+    END
+  END Q
+  PIN ASEL_P
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 5.620 1.750 5.910 2.040 ;
+        RECT 5.690 1.090 5.830 1.750 ;
+        RECT 5.620 0.800 5.910 1.090 ;
+    END
+  END ASEL_P
+  PIN USEXOR_N
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 15.700 0.750 15.990 0.820 ;
+        RECT 20.020 0.750 20.310 0.820 ;
+        RECT 15.700 0.610 20.310 0.750 ;
+        RECT 15.700 0.530 15.990 0.610 ;
+        RECT 20.020 0.530 20.310 0.610 ;
+    END
+  END USEXOR_N
+  PIN USEMUX_N
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 0.890 2.230 1.750 2.370 ;
+        RECT 0.890 0.690 1.030 2.230 ;
+        RECT 1.540 2.170 1.750 2.230 ;
+        RECT 1.540 2.040 1.830 2.170 ;
+        RECT 1.300 1.880 1.830 2.040 ;
+        RECT 1.300 1.750 1.590 1.880 ;
+        RECT 1.370 1.090 1.510 1.750 ;
+        RECT 1.300 0.800 1.590 1.090 ;
+        RECT 0.820 0.400 1.110 0.690 ;
+    END
+  END USEMUX_N
+  PIN USEXOR_P
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 17.140 1.750 17.430 2.040 ;
+    END
+    PORT
+      LAYER met1 ;
+        RECT 8.500 1.750 8.790 2.040 ;
+    END
+  END USEXOR_P
+  PIN ASEL_N
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 7.060 1.340 7.350 1.630 ;
+        RECT 7.130 1.090 7.270 1.340 ;
+        RECT 7.060 0.800 7.350 1.090 ;
+    END
+  END ASEL_N
+  PIN BSEL_N
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 18.580 1.340 18.870 2.040 ;
+    END
+  END BSEL_N
+  PIN BSEL_P
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 14.260 1.340 14.550 1.630 ;
+    END
+  END BSEL_P
+  PIN MUXSEL_P
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 7.540 2.500 7.830 2.580 ;
+        RECT 7.540 2.360 9.190 2.500 ;
+        RECT 7.540 2.290 7.830 2.360 ;
+        RECT 9.050 2.230 9.190 2.360 ;
+        RECT 10.420 2.230 10.710 2.310 ;
+        RECT 11.620 2.230 11.910 2.310 ;
+        RECT 9.050 2.090 10.710 2.230 ;
+        RECT 10.420 2.040 10.710 2.090 ;
+        RECT 10.970 2.090 11.910 2.230 ;
+        RECT 10.970 2.040 11.110 2.090 ;
+        RECT 10.420 2.020 11.110 2.040 ;
+        RECT 11.620 2.040 11.910 2.090 ;
+        RECT 11.620 2.020 12.150 2.040 ;
+        RECT 10.660 1.820 11.110 2.020 ;
+        RECT 10.660 1.750 10.950 1.820 ;
+        RECT 11.860 1.750 12.150 2.020 ;
+    END
+  END MUXSEL_P
+  PIN USEMUX_P
+    DIRECTION INOUT ;
+    USE SIGNAL ;
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met1 ;
+        RECT 2.570 2.230 3.430 2.370 ;
+        RECT 2.570 2.170 2.790 2.230 ;
+        RECT 2.500 2.040 2.790 2.170 ;
+        RECT 2.500 1.880 3.030 2.040 ;
+        RECT 2.740 1.750 3.030 1.880 ;
+        RECT 2.810 1.090 2.950 1.750 ;
+        RECT 3.290 1.500 3.430 2.230 ;
+        RECT 3.220 1.210 3.510 1.500 ;
+        RECT 2.740 0.800 3.030 1.090 ;
+    END
+  END USEMUX_P
+END LOFTY
+END LIBRARY
+
diff --git a/cells/lef/fixup.pl b/cells/lef/fixup.pl
index ae9f1be..9eadf77 100644
--- a/cells/lef/fixup.pl
+++ b/cells/lef/fixup.pl
@@ -12,9 +12,9 @@
   while(<LEFIN>)
   {
     $pin=$1 if(m/PIN (\w+)/);	  
-    s/SYMMETRY X Y R90/SITE unithd/;
+    s/SYMMETRY X Y R90/SITE unit/;
     s/SITE CORE/SYMMETRY X Y R90/;
-    #s/SITE unithd.*//;
+    #s/SITE unit.*//;
     s/metal2/met1/;
     s/VDD/vdd/;
     s/GND/gnd/;
diff --git a/cells/lef/orig/LOFTY.lef b/cells/lef/orig/LOFTY.lef
new file mode 100644
index 0000000..f66e02a
--- /dev/null
+++ b/cells/lef/orig/LOFTY.lef
@@ -0,0 +1,209 @@
+MACRO LOFTY
+ CLASS CORE ;
+ FOREIGN LOFTY 0 0 ;
+ ORIGIN 0 0 ;
+ SYMMETRY X Y R90 ;
+ SITE CORE ;
+  PIN VDD
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 0.00000000 3.09000000 21.60000000 3.57000000 ;
+    END
+  END VDD
+
+  PIN GND
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 0.00000000 -0.24000000 21.60000000 0.24000000 ;
+    END
+  END GND
+
+  PIN Q
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 2.01500000 0.39500000 2.30500000 0.68500000 ;
+        RECT 2.09000000 0.68500000 2.23000000 2.28500000 ;
+        RECT 2.01500000 2.28500000 2.54500000 2.57500000 ;
+    END
+  END Q
+
+  PIN ASEL_P
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 5.61500000 0.80000000 5.90500000 1.09000000 ;
+        RECT 5.69000000 1.09000000 5.83000000 1.74500000 ;
+        RECT 5.61500000 1.74500000 5.90500000 2.03500000 ;
+    END
+  END ASEL_P
+
+  PIN USEXOR_N
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 15.69500000 0.53000000 15.98500000 0.60500000 ;
+        RECT 20.01500000 0.53000000 20.30500000 0.60500000 ;
+        RECT 15.69500000 0.60500000 20.30500000 0.74500000 ;
+        RECT 15.69500000 0.74500000 15.98500000 0.82000000 ;
+        RECT 20.01500000 0.74500000 20.30500000 0.82000000 ;
+    END
+  END USEXOR_N
+
+  PIN USEMUX_N
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 0.81500000 0.39500000 1.10500000 0.68500000 ;
+        RECT 1.29500000 0.80000000 1.58500000 1.09000000 ;
+        RECT 1.37000000 1.09000000 1.51000000 1.74500000 ;
+        RECT 1.29500000 1.74500000 1.58500000 1.88000000 ;
+        RECT 1.29500000 1.88000000 1.82500000 2.03500000 ;
+        RECT 1.53500000 2.03500000 1.82500000 2.17000000 ;
+        RECT 0.89000000 0.68500000 1.03000000 2.22500000 ;
+        RECT 1.53500000 2.17000000 1.75000000 2.22500000 ;
+        RECT 0.89000000 2.22500000 1.75000000 2.36500000 ;
+    END
+  END USEMUX_N
+
+  PIN USEXOR_P
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 8.49500000 1.74500000 8.78500000 2.03500000 ;
+       LAYER metal2 ;
+        RECT 17.13500000 1.74500000 17.42500000 2.03500000 ;
+    END
+  END USEXOR_P
+
+  PIN ASEL_N
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 7.05500000 0.80000000 7.34500000 1.09000000 ;
+        RECT 7.13000000 1.09000000 7.27000000 1.34000000 ;
+        RECT 7.05500000 1.34000000 7.34500000 1.63000000 ;
+    END
+  END ASEL_N
+
+  PIN BSEL_N
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 18.57500000 1.34000000 18.86500000 2.03500000 ;
+    END
+  END BSEL_N
+
+  PIN BSEL_P
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 14.25500000 1.34000000 14.54500000 1.63000000 ;
+    END
+  END BSEL_P
+
+  PIN MUXSEL_P
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 10.65500000 1.74500000 10.94500000 1.82000000 ;
+        RECT 10.65500000 1.82000000 11.11000000 2.01500000 ;
+        RECT 11.85500000 1.74500000 12.14500000 2.01500000 ;
+        RECT 11.61500000 2.01500000 12.14500000 2.03500000 ;
+        RECT 10.41500000 2.01500000 11.11000000 2.03500000 ;
+        RECT 10.41500000 2.03500000 10.70500000 2.09000000 ;
+        RECT 10.97000000 2.03500000 11.11000000 2.09000000 ;
+        RECT 11.61500000 2.03500000 11.90500000 2.09000000 ;
+        RECT 10.97000000 2.09000000 11.90500000 2.23000000 ;
+        RECT 9.05000000 2.09000000 10.70500000 2.23000000 ;
+        RECT 10.41500000 2.23000000 10.70500000 2.30500000 ;
+        RECT 11.61500000 2.23000000 11.90500000 2.30500000 ;
+        RECT 7.53500000 2.28500000 7.82500000 2.36000000 ;
+        RECT 9.05000000 2.23000000 9.19000000 2.36000000 ;
+        RECT 7.53500000 2.36000000 9.19000000 2.50000000 ;
+        RECT 7.53500000 2.50000000 7.82500000 2.57500000 ;
+    END
+  END MUXSEL_P
+
+  PIN USEMUX_P
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 2.73500000 0.80000000 3.02500000 1.09000000 ;
+        RECT 3.21500000 1.20500000 3.50500000 1.49500000 ;
+        RECT 2.81000000 1.09000000 2.95000000 1.74500000 ;
+        RECT 2.73500000 1.74500000 3.02500000 1.88000000 ;
+        RECT 2.49500000 1.88000000 3.02500000 2.03500000 ;
+        RECT 2.49500000 2.03500000 2.78500000 2.17000000 ;
+        RECT 2.57000000 2.17000000 2.78500000 2.22500000 ;
+        RECT 3.29000000 1.49500000 3.43000000 2.22500000 ;
+        RECT 2.57000000 2.22500000 3.43000000 2.36500000 ;
+    END
+  END USEMUX_P
+
+  PIN MUXSEL_N
+   DIRECTION INOUT ;
+   USE SIGNAL ;
+   SHAPE ABUTMENT ;
+    PORT
+     CLASS CORE ;
+       LAYER metal2 ;
+        RECT 10.65500000 1.74500000 10.94500000 1.82000000 ;
+        RECT 10.65500000 1.82000000 11.11000000 2.01500000 ;
+        RECT 11.85500000 1.74500000 12.14500000 2.01500000 ;
+        RECT 11.61500000 2.01500000 12.14500000 2.03500000 ;
+        RECT 10.41500000 2.01500000 11.11000000 2.03500000 ;
+        RECT 10.41500000 2.03500000 10.70500000 2.09000000 ;
+        RECT 10.97000000 2.03500000 11.11000000 2.09000000 ;
+        RECT 11.61500000 2.03500000 11.90500000 2.09000000 ;
+        RECT 10.97000000 2.09000000 11.90500000 2.23000000 ;
+        RECT 9.05000000 2.09000000 10.70500000 2.23000000 ;
+        RECT 10.41500000 2.23000000 10.70500000 2.30500000 ;
+        RECT 11.61500000 2.23000000 11.90500000 2.30500000 ;
+        RECT 7.53500000 2.28500000 7.82500000 2.36000000 ;
+        RECT 9.05000000 2.23000000 9.19000000 2.36000000 ;
+        RECT 7.53500000 2.36000000 9.19000000 2.50000000 ;
+        RECT 7.53500000 2.50000000 7.82500000 2.57500000 ;
+    END
+  END MUXSEL_N
+
+
+END LOFTY
diff --git a/cells/lib/MUX2X1.lib b/cells/lib/MUX2X1.lib
new file mode 100644
index 0000000..8e6ba75
--- /dev/null
+++ b/cells/lib/MUX2X1.lib
@@ -0,0 +1,399 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (MUX2X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (S) {
+      capacitance: 0.009256673995156848;
+      direction: input;
+      fall_capacitance: 0.008174605299069488;
+      rise_capacitance: 0.01033874269124421;
+    }
+    pin (B) {
+      capacitance: 0.007621740826129985;
+      direction: input;
+      fall_capacitance: 0.008845710726223829;
+      rise_capacitance: 0.0063977709260361415;
+    }
+    pin (A) {
+      capacitance: 0.006381443680226534;
+      direction: input;
+      fall_capacitance: 0.007825475707159937;
+      rise_capacitance: 0.00493741165329313;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!(A & B & S + A & B & !S + A & S & !B + B & !A & !S))";
+      timing () {
+        related_pin: "S";
+        timing_sense: non_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.015477, 0.019600, 0.024190, 0.025747, 0.046287", \
+            "0.090314, 0.087100, 0.090495, 0.101960, 0.176908", \
+            "0.167236, 0.162506, 0.162337, 0.167647, 0.271944", \
+            "0.321537, 0.315074, 0.311756, 0.311149, 0.436391", \
+            "1.560714, 1.552503, 1.545002, 1.533689, 1.520599"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.009379, 0.017036, 0.023092, 0.027221, 0.047575", \
+            "0.098648, 0.096570, 0.098493, 0.106357, 0.189094", \
+            "0.192045, 0.187310, 0.185345, 0.186620, 0.293971", \
+            "0.380085, 0.373558, 0.368111, 0.361746, 0.471469", \
+            "1.891180, 1.882519, 1.872679, 1.854529, 1.753166"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.025354, 0.032783, 0.050461, 0.087201, 0.566081", \
+            "0.133109, 0.134458, 0.135941, 0.157612, 0.603315", \
+            "0.244639, 0.245101, 0.245522, 0.253219, 0.662135", \
+            "0.469661, 0.469241, 0.469216, 0.469325, 0.758422", \
+            "2.271840, 2.271929, 2.271941, 2.271927, 2.283161"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.022515, 0.036555, 0.054175, 0.094241, 0.572428", \
+            "0.157940, 0.158368, 0.159664, 0.178650, 0.640716", \
+            "0.288080, 0.288326, 0.288348, 0.292800, 0.713717", \
+            "0.548431, 0.548597, 0.548599, 0.548675, 0.846377", \
+            "2.640854, 2.640882, 2.640837, 2.640903, 2.646773"
+          );
+        }
+      }
+      timing () {
+        related_pin: "B";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.012479, 0.020703, 0.023751, 0.026480, -0.020258", \
+            "0.088791, 0.092407, 0.096269, 0.106017, 0.140677", \
+            "0.166519, 0.167928, 0.170594, 0.176829, 0.252652", \
+            "0.321088, 0.321765, 0.322714, 0.325872, 0.431855", \
+            "1.560825, 1.560508, 1.559318, 1.557534, 1.590909"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024075, 0.029303, 0.036113, 0.042909, 0.139365", \
+            "0.116212, 0.118239, 0.123057, 0.135164, 0.298599", \
+            "0.209808, 0.210879, 0.213787, 0.223211, 0.408707", \
+            "0.398464, 0.398636, 0.399777, 0.405563, 0.586820", \
+            "1.910071, 1.909315, 1.908318, 1.908149, 1.983973"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.021856, 0.029483, 0.041747, 0.075580, 0.318538", \
+            "0.133491, 0.132145, 0.135514, 0.149421, 0.455212", \
+            "0.245429, 0.244447, 0.244614, 0.249182, 0.551752", \
+            "0.469502, 0.469644, 0.469460, 0.469734, 0.678108", \
+            "2.271768, 2.271699, 2.271790, 2.271724, 2.274762"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.026927, 0.031637, 0.041603, 0.073132, 0.327601", \
+            "0.157522, 0.158503, 0.158749, 0.168029, 0.467796", \
+            "0.288182, 0.288023, 0.288247, 0.289518, 0.550457", \
+            "0.548628, 0.548713, 0.548726, 0.548715, 0.704382", \
+            "2.641050, 2.641120, 2.641079, 2.641124, 2.641113"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.019428, 0.021891, 0.024080, 0.024293, -0.020282", \
+            "0.097729, 0.098072, 0.099347, 0.107474, 0.140891", \
+            "0.174738, 0.174194, 0.175185, 0.179883, 0.252844", \
+            "0.329664, 0.328818, 0.328461, 0.330406, 0.432450", \
+            "1.569311, 1.568266, 1.566635, 1.564341, 1.594321"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.015958, 0.028273, 0.035331, 0.042097, 0.139507", \
+            "0.109992, 0.113793, 0.120225, 0.134598, 0.298772", \
+            "0.203874, 0.205671, 0.209819, 0.221705, 0.408455", \
+            "0.392495, 0.393164, 0.395366, 0.402419, 0.586497", \
+            "1.904233, 1.903472, 1.903098, 1.903613, 1.981673"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.020684, 0.027469, 0.040684, 0.075372, 0.321139", \
+            "0.131690, 0.132092, 0.134409, 0.147611, 0.454546", \
+            "0.244572, 0.244857, 0.245585, 0.248273, 0.551845", \
+            "0.469953, 0.470028, 0.469684, 0.470070, 0.677392", \
+            "2.272005, 2.271976, 2.272124, 2.272035, 2.274938"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.034906, 0.034011, 0.041604, 0.074407, 0.329883", \
+            "0.157071, 0.157736, 0.156957, 0.168367, 0.468419", \
+            "0.288086, 0.287766, 0.287721, 0.290181, 0.550707", \
+            "0.548081, 0.548418, 0.548486, 0.548470, 0.704390", \
+            "2.640667, 2.640718, 2.640731, 2.640752, 2.640649"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/NAND2X1.lib b/cells/lib/NAND2X1.lib
new file mode 100644
index 0000000..19e69a6
--- /dev/null
+++ b/cells/lib/NAND2X1.lib
@@ -0,0 +1,329 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (NAND2X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (B) {
+      capacitance: 0.00495623189256475;
+      direction: input;
+      fall_capacitance: 0.005761587126333127;
+      rise_capacitance: 0.004150876658796372;
+    }
+    pin (A) {
+      capacitance: 0.00639318508707538;
+      direction: input;
+      fall_capacitance: 0.007850955022359487;
+      rise_capacitance: 0.004935415151791272;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!A & B)";
+      timing () {
+        related_pin: "B";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.005849, 0.004437, 0.002225, -0.008486, -0.130057", \
+            "0.046388, 0.043249, 0.046999, 0.048115, -0.018501", \
+            "0.090291, 0.082811, 0.082216, 0.086712, 0.056313", \
+            "0.178331, 0.167829, 0.160916, 0.157445, 0.175397", \
+            "0.883390, 0.870337, 0.854738, 0.827352, 0.802406"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.013792, 0.016361, 0.025056, 0.033074, 0.175602", \
+            "0.108490, 0.103780, 0.105147, 0.117790, 0.315278", \
+            "0.202467, 0.196392, 0.193875, 0.197687, 0.411516", \
+            "0.391201, 0.384138, 0.378135, 0.373850, 0.567320", \
+            "1.903046, 1.894605, 1.884531, 1.867051, 1.824897"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.009695, 0.029312, 0.048608, 0.093281, 0.629805", \
+            "0.078056, 0.082987, 0.099284, 0.142653, 0.690195", \
+            "0.150388, 0.151272, 0.161350, 0.191067, 0.765186", \
+            "0.290688, 0.289222, 0.292426, 0.310086, 0.876476", \
+            "1.422106, 1.422288, 1.421889, 1.421871, 1.682533"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.014730, 0.023408, 0.040311, 0.078487, 0.617549", \
+            "0.143671, 0.145673, 0.147214, 0.163072, 0.604300", \
+            "0.274318, 0.273786, 0.274511, 0.279238, 0.636700", \
+            "0.534800, 0.535162, 0.534899, 0.535215, 0.783182", \
+            "2.627058, 2.627242, 2.627155, 2.627074, 2.630378"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.007196, 0.006952, 0.007019, 0.002025, -0.085579", \
+            "0.048073, 0.045085, 0.049525, 0.053219, 0.022142", \
+            "0.092047, 0.084523, 0.084238, 0.090031, 0.092503", \
+            "0.180017, 0.169497, 0.162833, 0.159983, 0.207124", \
+            "0.885060, 0.872012, 0.856446, 0.829185, 0.814262"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.015633, 0.021506, 0.028394, 0.039572, 0.149899", \
+            "0.108272, 0.110667, 0.117688, 0.132659, 0.322650", \
+            "0.202415, 0.203429, 0.208041, 0.220813, 0.436827", \
+            "0.390997, 0.391221, 0.393703, 0.402725, 0.616168", \
+            "1.902658, 1.901593, 1.901395, 1.902809, 2.012938"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.012945, 0.031804, 0.051562, 0.097848, 0.530404", \
+            "0.082605, 0.085877, 0.102513, 0.146986, 0.675477", \
+            "0.153507, 0.154155, 0.164693, 0.195301, 0.762310", \
+            "0.293780, 0.292627, 0.295499, 0.313420, 0.886530", \
+            "1.425247, 1.425396, 1.425085, 1.425078, 1.692913"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.014326, 0.019054, 0.029916, 0.064625, 0.487291", \
+            "0.145515, 0.145739, 0.144059, 0.152642, 0.440611", \
+            "0.274715, 0.273489, 0.274007, 0.274498, 0.467583", \
+            "0.534478, 0.535194, 0.535121, 0.535184, 0.639625", \
+            "2.627046, 2.627208, 2.627161, 2.627179, 2.627235"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/NAND3X1.lib b/cells/lib/NAND3X1.lib
new file mode 100644
index 0000000..8ae0b0a
--- /dev/null
+++ b/cells/lib/NAND3X1.lib
@@ -0,0 +1,399 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (NAND3X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (C) {
+      capacitance: 0.0049475602037443766;
+      direction: input;
+      fall_capacitance: 0.00574550349282349;
+      rise_capacitance: 0.004149616914665264;
+    }
+    pin (B) {
+      capacitance: 0.0056720092179016355;
+      direction: input;
+      fall_capacitance: 0.006513434336879236;
+      rise_capacitance: 0.0048305840989240345;
+    }
+    pin (A) {
+      capacitance: 0.00639281784839878;
+      direction: input;
+      fall_capacitance: 0.00785033270340369;
+      rise_capacitance: 0.0049353029933938706;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!A & B & C)";
+      timing () {
+        related_pin: "C";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.006743, 0.005016, 0.001565, -0.011749, -0.174318", \
+            "0.047706, 0.044014, 0.046942, 0.046061, -0.062176", \
+            "0.091627, 0.083788, 0.082464, 0.085303, 0.015523", \
+            "0.179686, 0.168911, 0.161469, 0.156671, 0.140314", \
+            "0.884745, 0.871646, 0.855834, 0.827730, 0.787692"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.021450, 0.026780, 0.036138, 0.051156, 0.240752", \
+            "0.141321, 0.138431, 0.140867, 0.154160, 0.407189", \
+            "0.261734, 0.256641, 0.255261, 0.261805, 0.519595", \
+            "0.501953, 0.495945, 0.491598, 0.490071, 0.706700", \
+            "2.425213, 2.418226, 2.409901, 2.395913, 2.391369"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011465, 0.029932, 0.047360, 0.089549, 0.523956", \
+            "0.080202, 0.084521, 0.100586, 0.143486, 0.643649", \
+            "0.152614, 0.153064, 0.163285, 0.192620, 0.727829", \
+            "0.292789, 0.291706, 0.294483, 0.312038, 0.856442", \
+            "1.424319, 1.424428, 1.424111, 1.424077, 1.684916"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.023400, 0.030385, 0.036793, 0.077633, 0.501790", \
+            "0.190321, 0.189918, 0.190315, 0.199221, 0.487718", \
+            "0.356855, 0.356030, 0.356029, 0.356551, 0.562588", \
+            "0.690022, 0.690543, 0.690506, 0.690555, 0.811600", \
+            "3.365843, 3.365797, 3.365863, 3.365868, 3.365810"
+          );
+        }
+      }
+      timing () {
+        related_pin: "B";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.008334, 0.007216, 0.005700, -0.003192, -0.138009", \
+            "0.049525, 0.045812, 0.049273, 0.049818, -0.030773", \
+            "0.093522, 0.085734, 0.084386, 0.088138, 0.042191", \
+            "0.181477, 0.170617, 0.163356, 0.158916, 0.163222", \
+            "0.886560, 0.873387, 0.857606, 0.829593, 0.796379"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.023842, 0.028921, 0.038612, 0.052716, 0.222042", \
+            "0.141887, 0.143909, 0.149119, 0.164220, 0.404600", \
+            "0.261324, 0.261760, 0.265215, 0.276500, 0.527421", \
+            "0.501628, 0.500687, 0.501928, 0.509042, 0.732336", \
+            "2.424686, 2.422462, 2.420742, 2.419460, 2.508042"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.014708, 0.032599, 0.052399, 0.096681, 0.513554", \
+            "0.084340, 0.087175, 0.104373, 0.147370, 0.652229", \
+            "0.155755, 0.155756, 0.166557, 0.196533, 0.737741", \
+            "0.295954, 0.295123, 0.297528, 0.315324, 0.869188", \
+            "1.427488, 1.427517, 1.427300, 1.427279, 1.694092"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.023791, 0.028479, 0.033736, 0.068750, 0.456314", \
+            "0.190317, 0.190047, 0.189241, 0.193568, 0.414810", \
+            "0.356056, 0.356011, 0.356369, 0.355755, 0.487881", \
+            "0.690508, 0.690541, 0.690522, 0.690519, 0.753026", \
+            "3.365855, 3.365789, 3.365799, 3.365867, 3.365823"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.008972, 0.008268, 0.008643, 0.001970, -0.101488", \
+            "0.051257, 0.047583, 0.051333, 0.053538, -0.001472", \
+            "0.095356, 0.087565, 0.086323, 0.091056, 0.070441", \
+            "0.183312, 0.172348, 0.165227, 0.161181, 0.187191", \
+            "0.888366, 0.875180, 0.859388, 0.831456, 0.805980"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.020795, 0.029793, 0.038560, 0.050262, 0.188785", \
+            "0.138390, 0.142029, 0.147535, 0.160844, 0.367966", \
+            "0.257617, 0.259067, 0.261812, 0.272019, 0.491794", \
+            "0.497805, 0.497186, 0.497402, 0.502803, 0.696298", \
+            "2.420816, 2.418080, 2.414398, 2.409953, 2.462120"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.017292, 0.034566, 0.057624, 0.100464, 0.554013", \
+            "0.086449, 0.091297, 0.109325, 0.151351, 0.684952", \
+            "0.158837, 0.158653, 0.169957, 0.201757, 0.763039", \
+            "0.298884, 0.298357, 0.300621, 0.319480, 0.888696", \
+            "1.430569, 1.430607, 1.430474, 1.430460, 1.704460"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024001, 0.027232, 0.035786, 0.067592, 0.495578", \
+            "0.190876, 0.191071, 0.189818, 0.194805, 0.453280", \
+            "0.356122, 0.356782, 0.355698, 0.356058, 0.506856", \
+            "0.690537, 0.690105, 0.690542, 0.690408, 0.762544", \
+            "3.365836, 3.365860, 3.365857, 3.365836, 3.365849"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/NOR2X1.lib b/cells/lib/NOR2X1.lib
new file mode 100644
index 0000000..9d13318
--- /dev/null
+++ b/cells/lib/NOR2X1.lib
@@ -0,0 +1,329 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (NOR2X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (B) {
+      capacitance: 0.006303448359239213;
+      direction: input;
+      fall_capacitance: 0.006299461029458945;
+      rise_capacitance: 0.0063074356890194805;
+    }
+    pin (A) {
+      capacitance: 0.007595806558045583;
+      direction: input;
+      fall_capacitance: 0.008891411713164614;
+      rise_capacitance: 0.0063002014029265516;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!A & !B)";
+      timing () {
+        related_pin: "B";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011806, 0.013869, 0.017728, 0.018913, 0.043152", \
+            "0.090701, 0.085913, 0.088689, 0.100157, 0.196930", \
+            "0.168953, 0.162029, 0.161187, 0.166322, 0.300875", \
+            "0.323595, 0.315317, 0.311154, 0.310040, 0.465699", \
+            "1.563273, 1.553700, 1.544833, 1.531939, 1.541900"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.005936, 0.007846, 0.008974, 0.004744, -0.003026", \
+            "0.046711, 0.047264, 0.052185, 0.058295, 0.096068", \
+            "0.091147, 0.089514, 0.090542, 0.098390, 0.165025", \
+            "0.180055, 0.176882, 0.175000, 0.175107, 0.275546", \
+            "0.895253, 0.891498, 0.886774, 0.878409, 0.897352"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011999, 0.022379, 0.043415, 0.084297, 0.702241", \
+            "0.125846, 0.126296, 0.129026, 0.143562, 0.670887", \
+            "0.236273, 0.236852, 0.235333, 0.245157, 0.662164", \
+            "0.460758, 0.460362, 0.461218, 0.460426, 0.741521", \
+            "2.263379, 2.263387, 2.263261, 2.263270, 2.274816"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011676, 0.032976, 0.056268, 0.109537, 0.710905", \
+            "0.092517, 0.100885, 0.113823, 0.157999, 0.799871", \
+            "0.178759, 0.179128, 0.190132, 0.222605, 0.875172", \
+            "0.349115, 0.349295, 0.352632, 0.369786, 0.981780", \
+            "1.725874, 1.726029, 1.727042, 1.726377, 1.981658"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.012986, 0.016763, 0.019649, 0.026720, -0.007723", \
+            "0.091508, 0.092784, 0.095177, 0.106380, 0.166698", \
+            "0.168932, 0.168743, 0.171095, 0.177886, 0.281195", \
+            "0.323606, 0.323192, 0.323918, 0.327812, 0.460072", \
+            "1.563504, 1.562605, 1.561243, 1.560037, 1.617792"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.008571, 0.012259, 0.016219, 0.019628, 0.069884", \
+            "0.050623, 0.051267, 0.056425, 0.066606, 0.159854", \
+            "0.095165, 0.093119, 0.094604, 0.103938, 0.223425", \
+            "0.183791, 0.180470, 0.178804, 0.179941, 0.324263", \
+            "0.898914, 0.895013, 0.890412, 0.882094, 0.915185"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011911, 0.020658, 0.034736, 0.070430, 0.635528", \
+            "0.125379, 0.123991, 0.127246, 0.137364, 0.573702", \
+            "0.237050, 0.236795, 0.237035, 0.239467, 0.551121", \
+            "0.461112, 0.461207, 0.460365, 0.461268, 0.627986", \
+            "2.263335, 2.263310, 2.263383, 2.263356, 2.265017"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.019230, 0.039782, 0.064283, 0.115340, 0.682539", \
+            "0.099372, 0.109056, 0.124310, 0.167393, 0.824099", \
+            "0.186034, 0.187618, 0.197839, 0.231703, 0.904179", \
+            "0.357146, 0.356648, 0.360384, 0.378918, 1.012930", \
+            "1.733504, 1.733696, 1.734753, 1.734098, 2.001564"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/NOR3X1.lib b/cells/lib/NOR3X1.lib
new file mode 100644
index 0000000..753b07e
--- /dev/null
+++ b/cells/lib/NOR3X1.lib
@@ -0,0 +1,399 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (NOR3X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (C) {
+      capacitance: 0.008851268942232223;
+      direction: input;
+      fall_capacitance: 0.007192740516108539;
+      rise_capacitance: 0.01050979736835591;
+    }
+    pin (B) {
+      capacitance: 0.008467308012434688;
+      direction: input;
+      fall_capacitance: 0.006491035832102533;
+      rise_capacitance: 0.010443580192766843;
+    }
+    pin (A) {
+      capacitance: 0.011319336983488502;
+      direction: input;
+      fall_capacitance: 0.012153813915844755;
+      rise_capacitance: 0.010484860051132246;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!A & !B & !C)";
+      timing () {
+        related_pin: "C";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.019861, 0.013951, 0.010393, 0.010614, -0.095224", \
+            "0.073806, 0.065433, 0.065471, 0.070741, 0.031362", \
+            "0.126961, 0.116836, 0.114849, 0.117995, 0.121232", \
+            "0.229374, 0.218604, 0.214181, 0.213278, 0.265478", \
+            "1.052068, 1.040930, 1.032640, 1.022067, 1.050983"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.007431, 0.014436, 0.021041, 0.026061, 0.147747", \
+            "0.048089, 0.051199, 0.058718, 0.073619, 0.235306", \
+            "0.092679, 0.092234, 0.095807, 0.109560, 0.295852", \
+            "0.181227, 0.178365, 0.178683, 0.184095, 0.391655", \
+            "0.896652, 0.891924, 0.887935, 0.881387, 0.953533"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.017662, 0.024101, 0.048536, 0.089682, 0.758844", \
+            "0.096073, 0.094132, 0.101399, 0.124739, 0.723967", \
+            "0.170991, 0.170809, 0.171462, 0.183197, 0.697268", \
+            "0.322446, 0.322746, 0.321943, 0.324630, 0.702708", \
+            "1.546214, 1.546427, 1.546374, 1.546212, 1.604669"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.016377, 0.048611, 0.062895, 0.114022, 0.768870", \
+            "0.097096, 0.107288, 0.124463, 0.164913, 0.849231", \
+            "0.182999, 0.185111, 0.195260, 0.230117, 0.915649", \
+            "0.353304, 0.352681, 0.357067, 0.377842, 1.011080", \
+            "1.730018, 1.729723, 1.730358, 1.730359, 2.006705"
+          );
+        }
+      }
+      timing () {
+        related_pin: "B";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.021404, 0.018148, 0.016999, 0.012352, -0.116477", \
+            "0.073113, 0.069999, 0.071591, 0.077030, 0.012719", \
+            "0.125310, 0.121160, 0.121831, 0.125821, 0.106267", \
+            "0.228280, 0.223844, 0.223033, 0.224372, 0.254111", \
+            "1.050975, 1.046727, 1.044059, 1.040846, 1.071937"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.009259, 0.023322, 0.030630, 0.037613, 0.214445", \
+            "0.054518, 0.059015, 0.066642, 0.084249, 0.290662", \
+            "0.099361, 0.100171, 0.103972, 0.118556, 0.346076", \
+            "0.188116, 0.185793, 0.186314, 0.192750, 0.434451", \
+            "0.903486, 0.899552, 0.895434, 0.889058, 0.974970"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.018177, 0.025953, 0.042317, 0.080707, 0.708600", \
+            "0.095725, 0.094902, 0.100379, 0.117184, 0.657595", \
+            "0.169936, 0.168818, 0.169550, 0.178176, 0.623126", \
+            "0.322532, 0.321898, 0.322594, 0.323057, 0.620469", \
+            "1.546325, 1.546425, 1.546433, 1.546433, 1.575338"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.027725, 0.061597, 0.100203, 0.128616, 0.760467", \
+            "0.111045, 0.120997, 0.139653, 0.183957, 0.880925", \
+            "0.197036, 0.200197, 0.212478, 0.247249, 0.949581", \
+            "0.368936, 0.368337, 0.372047, 0.394425, 1.042426", \
+            "1.745637, 1.745218, 1.745426, 1.745645, 2.034164"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.021535, 0.020687, 0.018209, 0.011098, -0.159177", \
+            "0.073633, 0.071954, 0.071241, 0.072771, -0.039713", \
+            "0.126395, 0.123666, 0.122260, 0.121428, 0.047912", \
+            "0.228694, 0.226313, 0.223648, 0.220474, 0.190997", \
+            "1.051376, 1.049091, 1.044628, 1.037782, 1.009584"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.006124, 0.029256, 0.038292, 0.053214, 0.282467", \
+            "0.059066, 0.066388, 0.074590, 0.095077, 0.348409", \
+            "0.104913, 0.107511, 0.112061, 0.127680, 0.398783", \
+            "0.193938, 0.193305, 0.193982, 0.201534, 0.479599", \
+            "0.910076, 0.906960, 0.902862, 0.896691, 0.998792"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.018579, 0.025146, 0.039182, 0.078947, 0.732260", \
+            "0.095594, 0.095225, 0.095216, 0.111960, 0.683970", \
+            "0.171029, 0.169347, 0.171096, 0.178076, 0.654431", \
+            "0.322754, 0.321497, 0.322026, 0.323327, 0.642474", \
+            "1.546326, 1.546372, 1.546374, 1.546417, 1.579783"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.032924, 0.073273, 0.111837, 0.141861, 0.820044", \
+            "0.127458, 0.138303, 0.154962, 0.200434, 0.924242", \
+            "0.212672, 0.215586, 0.228733, 0.265521, 0.987165", \
+            "0.383595, 0.383606, 0.388604, 0.411154, 1.077362", \
+            "1.760289, 1.760204, 1.760698, 1.760729, 2.064944"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/OAI21X1.lib b/cells/lib/OAI21X1.lib
new file mode 100644
index 0000000..7cfea33
--- /dev/null
+++ b/cells/lib/OAI21X1.lib
@@ -0,0 +1,399 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (OAI21X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (C) {
+      capacitance: 0.0049685503383930275;
+      direction: input;
+      fall_capacitance: 0.0057337054132807755;
+      rise_capacitance: 0.004203395263505281;
+    }
+    pin (B) {
+      capacitance: 0.004817269329420684;
+      direction: input;
+      fall_capacitance: 0.0046993715663027884;
+      rise_capacitance: 0.004935167092538579;
+    }
+    pin (A) {
+      capacitance: 0.006365887451121313;
+      direction: input;
+      fall_capacitance: 0.007796116485619777;
+      rise_capacitance: 0.004935658416622851;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!(A & B & C + A & C & !B + B & C & !A))";
+      timing () {
+        related_pin: "C";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.006353, 0.006873, 0.004977, -0.002571, -0.112220", \
+            "0.047648, 0.044522, 0.048480, 0.050680, -0.005504", \
+            "0.091575, 0.084317, 0.083496, 0.088598, 0.067928", \
+            "0.179609, 0.168970, 0.162303, 0.158976, 0.185631", \
+            "0.884619, 0.871536, 0.855984, 0.828850, 0.807127"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.012322, 0.018627, 0.025819, 0.036380, 0.166985", \
+            "0.097230, 0.095251, 0.097606, 0.110133, 0.295266", \
+            "0.182685, 0.178288, 0.176909, 0.181932, 0.384599", \
+            "0.354450, 0.348364, 0.343303, 0.339898, 0.530677", \
+            "1.731053, 1.722975, 1.713352, 1.696916, 1.662491"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011924, 0.030898, 0.053284, 0.100971, 0.670100", \
+            "0.080583, 0.085685, 0.102082, 0.143609, 0.716365", \
+            "0.152800, 0.152883, 0.163222, 0.193150, 0.778215", \
+            "0.292893, 0.292086, 0.294393, 0.311669, 0.881950", \
+            "1.424263, 1.424245, 1.424087, 1.424045, 1.683357"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.017139, 0.026739, 0.044276, 0.087758, 0.660076", \
+            "0.138283, 0.139729, 0.142997, 0.162743, 0.650333", \
+            "0.260560, 0.259671, 0.260078, 0.269467, 0.681289", \
+            "0.503775, 0.503479, 0.503665, 0.504685, 0.808692", \
+            "2.459384, 2.459439, 2.459425, 2.459497, 2.482154"
+          );
+        }
+      }
+      timing () {
+        related_pin: "B";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.018084, 0.018785, 0.021524, 0.021254, 0.031017", \
+            "0.096634, 0.090653, 0.091567, 0.101191, 0.181020", \
+            "0.173780, 0.166489, 0.164402, 0.167176, 0.281781", \
+            "0.328645, 0.320024, 0.314801, 0.311087, 0.444609", \
+            "1.568475, 1.558747, 1.549393, 1.535231, 1.517075"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011853, 0.020828, 0.025802, 0.032296, 0.061131", \
+            "0.103764, 0.107281, 0.113180, 0.125736, 0.245046", \
+            "0.197462, 0.198933, 0.202960, 0.213251, 0.366132", \
+            "0.386134, 0.386285, 0.388197, 0.395136, 0.557258", \
+            "1.897752, 1.896544, 1.895986, 1.896513, 1.969418"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.020867, 0.029939, 0.052329, 0.091938, 0.451438", \
+            "0.133406, 0.133983, 0.137806, 0.156667, 0.613530", \
+            "0.245013, 0.245383, 0.244613, 0.254696, 0.705512", \
+            "0.469706, 0.469327, 0.469422, 0.469157, 0.813809", \
+            "2.271618, 2.271785, 2.271663, 2.271774, 2.288526"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.015697, 0.022510, 0.033468, 0.066107, 0.425032", \
+            "0.144870, 0.144572, 0.145000, 0.157604, 0.462980", \
+            "0.274162, 0.274051, 0.273949, 0.276993, 0.536593", \
+            "0.535317, 0.535340, 0.535460, 0.535384, 0.689730", \
+            "2.627338, 2.627345, 2.627342, 2.627355, 2.627455"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.018803, 0.021401, 0.023344, 0.023872, -0.022124", \
+            "0.097043, 0.097462, 0.098807, 0.107122, 0.140271", \
+            "0.174167, 0.173694, 0.174835, 0.179375, 0.252462", \
+            "0.329045, 0.328268, 0.328060, 0.330094, 0.432085", \
+            "1.568689, 1.567669, 1.566082, 1.563994, 1.593864"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.014567, 0.027648, 0.035349, 0.041047, 0.137832", \
+            "0.108453, 0.112569, 0.119206, 0.133016, 0.297203", \
+            "0.202396, 0.204223, 0.208700, 0.219958, 0.407822", \
+            "0.391026, 0.391383, 0.393600, 0.400955, 0.585908", \
+            "1.902735, 1.901651, 1.901085, 1.901740, 1.980348"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.019300, 0.027658, 0.041698, 0.074827, 0.320959", \
+            "0.131626, 0.131992, 0.134734, 0.149048, 0.454028", \
+            "0.244112, 0.244371, 0.245398, 0.247897, 0.550953", \
+            "0.469602, 0.469661, 0.469275, 0.469732, 0.677618", \
+            "2.271672, 2.271613, 2.271813, 2.271710, 2.274668"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.031706, 0.032612, 0.040602, 0.073394, 0.328383", \
+            "0.155420, 0.155629, 0.156550, 0.167050, 0.465518", \
+            "0.286331, 0.286147, 0.286318, 0.287490, 0.548717", \
+            "0.546344, 0.546313, 0.546743, 0.546937, 0.703383", \
+            "2.638909, 2.638879, 2.638882, 2.638975, 2.638890"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/OAI22X1.lib b/cells/lib/OAI22X1.lib
new file mode 100644
index 0000000..6c9ec6b
--- /dev/null
+++ b/cells/lib/OAI22X1.lib
@@ -0,0 +1,469 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (OAI22X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (D) {
+      capacitance: 0.0021453532257938264;
+      direction: input;
+      fall_capacitance: 6.164254229978021e-05;
+      rise_capacitance: 0.004229063909287872;
+    }
+    pin (C) {
+      capacitance: 0.004976915596377423;
+      direction: input;
+      fall_capacitance: 0.0057238940867746484;
+      rise_capacitance: 0.004229937105980198;
+    }
+    pin (B) {
+      capacitance: 0.004810999172966173;
+      direction: input;
+      fall_capacitance: 0.004686782002117296;
+      rise_capacitance: 0.00493521634381505;
+    }
+    pin (A) {
+      capacitance: 0.006365536753506552;
+      direction: input;
+      fall_capacitance: 0.007795205171653458;
+      rise_capacitance: 0.004935868335359646;
+    }
+    pin (Y) {
+      direction: output;
+      function: "((A & B & !C & !D + C & D & !A & !B + A & !B & !C & !D + B & !A & !C & !D + C & !A & !B & !D + D & !A & !B & !C + !A & !B & !C & !D))";
+      timing () {
+        related_pin: "D";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.016262, 0.017741, 0.020452, 0.019420, -0.001499", \
+            "0.095678, 0.090075, 0.091093, 0.099982, 0.152775", \
+            "0.173776, 0.166259, 0.163962, 0.166726, 0.258406", \
+            "0.328418, 0.319872, 0.314598, 0.311147, 0.428538", \
+            "1.568201, 1.558608, 1.549384, 1.535559, 1.515136"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.011023, 0.018232, 0.023273, 0.028038, 0.082251", \
+            "0.094341, 0.092670, 0.094113, 0.103646, 0.217383", \
+            "0.179868, 0.175244, 0.173130, 0.174945, 0.311623", \
+            "0.351607, 0.345183, 0.339617, 0.333200, 0.467646", \
+            "1.728098, 1.719804, 1.710141, 1.692568, 1.611799"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.018975, 0.028562, 0.049415, 0.089237, 0.641577", \
+            "0.132997, 0.132685, 0.135462, 0.153560, 0.651633", \
+            "0.243979, 0.244016, 0.242906, 0.252668, 0.698762", \
+            "0.467681, 0.467640, 0.468098, 0.467574, 0.795527", \
+            "2.270165, 2.270194, 2.270075, 2.270158, 2.286886"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.019197, 0.039255, 0.052110, 0.097009, 0.642401", \
+            "0.140956, 0.141396, 0.146191, 0.171523, 0.712509", \
+            "0.262540, 0.262555, 0.262471, 0.273651, 0.778925", \
+            "0.505956, 0.505722, 0.505888, 0.507033, 0.894213", \
+            "2.461475, 2.461430, 2.461494, 2.461469, 2.493082"
+          );
+        }
+      }
+      timing () {
+        related_pin: "C";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.017359, 0.020602, 0.022466, 0.024654, -0.046754", \
+            "0.096705, 0.096946, 0.098584, 0.106282, 0.121532", \
+            "0.173777, 0.173577, 0.174431, 0.178939, 0.237315", \
+            "0.328617, 0.328111, 0.327825, 0.329774, 0.421297", \
+            "1.568418, 1.567576, 1.565970, 1.563848, 1.593553"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.015022, 0.024347, 0.031623, 0.040631, 0.158538", \
+            "0.099036, 0.097739, 0.100219, 0.111280, 0.279679", \
+            "0.184670, 0.180259, 0.178658, 0.181740, 0.365006", \
+            "0.356322, 0.350056, 0.344803, 0.339143, 0.507264", \
+            "1.732880, 1.724663, 1.714991, 1.697579, 1.627329"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.019084, 0.026776, 0.039823, 0.075672, 0.535237", \
+            "0.131377, 0.131261, 0.132692, 0.145125, 0.516016", \
+            "0.243564, 0.243531, 0.243534, 0.246588, 0.558890", \
+            "0.468225, 0.468179, 0.468042, 0.468205, 0.664320", \
+            "2.270088, 2.270095, 2.270133, 2.270106, 2.272980"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.031510, 0.049989, 0.062355, 0.106040, 0.586348", \
+            "0.151694, 0.152790, 0.156527, 0.182644, 0.731793", \
+            "0.273221, 0.273269, 0.273901, 0.284371, 0.805125", \
+            "0.516486, 0.516519, 0.516581, 0.517538, 0.918731", \
+            "2.472286, 2.472287, 2.472233, 2.472242, 2.503889"
+          );
+        }
+      }
+      timing () {
+        related_pin: "B";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.022460, 0.023823, 0.028185, 0.032725, 0.048628", \
+            "0.101758, 0.095743, 0.096537, 0.106002, 0.192478", \
+            "0.178737, 0.171298, 0.169438, 0.172294, 0.292379", \
+            "0.333714, 0.324980, 0.319961, 0.316508, 0.454253", \
+            "1.573522, 1.563797, 1.554566, 1.540634, 1.526335"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.009970, 0.022403, 0.029546, 0.034700, 0.068167", \
+            "0.096913, 0.101219, 0.107825, 0.121609, 0.232622", \
+            "0.185623, 0.187325, 0.191482, 0.202034, 0.347414", \
+            "0.363642, 0.363571, 0.365553, 0.371659, 0.531408", \
+            "1.789848, 1.787982, 1.786798, 1.785978, 1.851027"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.027669, 0.035784, 0.054151, 0.092799, 0.482183", \
+            "0.140384, 0.141035, 0.144045, 0.162603, 0.615320", \
+            "0.251926, 0.252443, 0.252459, 0.260421, 0.699195", \
+            "0.477068, 0.477037, 0.476614, 0.476926, 0.805486", \
+            "2.279001, 2.279001, 2.279030, 2.279108, 2.294719"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.026136, 0.039819, 0.039716, 0.074663, 0.449468", \
+            "0.141886, 0.142241, 0.143245, 0.158332, 0.500963", \
+            "0.262746, 0.262952, 0.263172, 0.266752, 0.568096", \
+            "0.505553, 0.505524, 0.505320, 0.505778, 0.700928", \
+            "2.453307, 2.453357, 2.453377, 2.453355, 2.454709"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: negative_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.023283, 0.026391, 0.030097, 0.032328, -0.001253", \
+            "0.101980, 0.102170, 0.104068, 0.112129, 0.154938", \
+            "0.179362, 0.178895, 0.179701, 0.184772, 0.265473", \
+            "0.334131, 0.333374, 0.333035, 0.335245, 0.443256", \
+            "1.573764, 1.572736, 1.571134, 1.569023, 1.603107"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.012521, 0.028199, 0.037706, 0.047850, 0.141476", \
+            "0.101182, 0.106075, 0.113456, 0.128856, 0.286674", \
+            "0.190018, 0.192261, 0.196376, 0.207802, 0.390952", \
+            "0.368057, 0.368351, 0.370519, 0.377256, 0.561629", \
+            "1.794406, 1.792708, 1.791509, 1.790815, 1.862031"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.027862, 0.033354, 0.044936, 0.077255, 0.353604", \
+            "0.140814, 0.140720, 0.141271, 0.155440, 0.462296", \
+            "0.251891, 0.251950, 0.252170, 0.254649, 0.552226", \
+            "0.476737, 0.476901, 0.476974, 0.476945, 0.673929", \
+            "2.279056, 2.278996, 2.279039, 2.278966, 2.281603"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.033370, 0.057996, 0.048428, 0.083327, 0.382049", \
+            "0.151938, 0.153699, 0.154923, 0.169228, 0.507796", \
+            "0.273900, 0.273102, 0.273602, 0.276988, 0.582041", \
+            "0.516030, 0.516117, 0.516125, 0.516348, 0.713735", \
+            "2.464090, 2.464052, 2.464047, 2.464139, 2.465296"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/OR2X1.lib b/cells/lib/OR2X1.lib
new file mode 100644
index 0000000..116bb16
--- /dev/null
+++ b/cells/lib/OR2X1.lib
@@ -0,0 +1,329 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (OR2X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (B) {
+      capacitance: 0.007576401997672222;
+      direction: input;
+      fall_capacitance: 0.008853042755779209;
+      rise_capacitance: 0.006299761239565236;
+    }
+    pin (A) {
+      capacitance: 0.006280956134443613;
+      direction: input;
+      fall_capacitance: 0.006252202564509515;
+      rise_capacitance: 0.006309709704377711;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!!A & !B)";
+      timing () {
+        related_pin: "B";
+        timing_sense: positive_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "-0.002737, 0.013249, 0.024740, 0.030135, 0.058150", \
+            "0.042967, 0.048920, 0.058700, 0.066027, 0.128620", \
+            "0.085691, 0.083076, 0.088849, 0.098329, 0.169802", \
+            "0.172823, 0.161427, 0.160431, 0.161812, 0.229754", \
+            "0.876988, 0.854756, 0.839524, 0.814610, 0.732242"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.029512, 0.033910, 0.037914, 0.050330, 0.052929", \
+            "0.070267, 0.072997, 0.078009, 0.091347, 0.135739", \
+            "0.112746, 0.114735, 0.118673, 0.130593, 0.209389", \
+            "0.200112, 0.201924, 0.204703, 0.213815, 0.340853", \
+            "0.914821, 0.916103, 0.917764, 0.922353, 1.006921"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.016092, 0.057938, 0.095965, 0.165885, 0.705458", \
+            "0.078905, 0.104180, 0.138126, 0.202710, 0.704503", \
+            "0.148545, 0.161533, 0.188973, 0.232451, 0.725913", \
+            "0.289045, 0.288648, 0.297219, 0.323752, 0.788330", \
+            "1.420575, 1.420547, 1.420296, 1.420209, 1.575305"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024665, 0.028188, 0.037838, 0.067587, 0.608216", \
+            "0.097377, 0.097071, 0.100693, 0.117571, 0.616589", \
+            "0.178290, 0.178809, 0.181589, 0.191054, 0.624945", \
+            "0.348706, 0.349016, 0.349686, 0.352764, 0.697194", \
+            "1.725555, 1.725371, 1.726655, 1.725685, 1.854607"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: positive_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "-0.002786, -0.022525, 0.019015, 0.011670, -0.014214", \
+            "0.041859, 0.043298, 0.052130, 0.057857, 0.058886", \
+            "0.085034, 0.078556, 0.083166, 0.090278, 0.102558", \
+            "0.172887, 0.158458, 0.155718, 0.154087, 0.173297", \
+            "0.877505, 0.854378, 0.837626, 0.810046, 0.720442"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.028690, 0.031248, 0.037463, 0.044487, 0.100482", \
+            "0.069107, 0.069828, 0.076360, 0.091636, 0.185145", \
+            "0.112034, 0.111088, 0.115798, 0.129197, 0.254233", \
+            "0.199087, 0.197989, 0.201090, 0.209121, 0.374419", \
+            "0.914050, 0.911951, 0.913051, 0.915105, 1.007909"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.013392, 0.052206, 0.087689, 0.154666, 0.691395", \
+            "0.076707, 0.097805, 0.133251, 0.196593, 0.689662", \
+            "0.148818, 0.159357, 0.181649, 0.221635, 0.720108", \
+            "0.288045, 0.289252, 0.294522, 0.318177, 0.791961", \
+            "1.420335, 1.420191, 1.420219, 1.420439, 1.583354"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024973, 0.029481, 0.044119, 0.082711, 0.664635", \
+            "0.097225, 0.099096, 0.107079, 0.133341, 0.664451", \
+            "0.179958, 0.178788, 0.182955, 0.202839, 0.677564", \
+            "0.347947, 0.348719, 0.349929, 0.358002, 0.742083", \
+            "1.725186, 1.725383, 1.725427, 1.725691, 1.862987"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/OR2X2.lib b/cells/lib/OR2X2.lib
new file mode 100644
index 0000000..d818b4d
--- /dev/null
+++ b/cells/lib/OR2X2.lib
@@ -0,0 +1,329 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (OR2X2) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (B) {
+      capacitance: 0.007576401997672222;
+      direction: input;
+      fall_capacitance: 0.008853042755779209;
+      rise_capacitance: 0.006299761239565236;
+    }
+    pin (A) {
+      capacitance: 0.006280956134443613;
+      direction: input;
+      fall_capacitance: 0.006252202564509515;
+      rise_capacitance: 0.006309709704377711;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!!A & !B)";
+      timing () {
+        related_pin: "B";
+        timing_sense: positive_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "-0.002737, 0.013249, 0.024740, 0.030135, 0.058150", \
+            "0.042967, 0.048920, 0.058700, 0.066027, 0.128620", \
+            "0.085691, 0.083076, 0.088849, 0.098329, 0.169802", \
+            "0.172823, 0.161427, 0.160431, 0.161812, 0.229754", \
+            "0.876988, 0.854756, 0.839524, 0.814610, 0.732242"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.029512, 0.033910, 0.037914, 0.050330, 0.052929", \
+            "0.070267, 0.072997, 0.078009, 0.091347, 0.135739", \
+            "0.112746, 0.114735, 0.118673, 0.130593, 0.209389", \
+            "0.200112, 0.201924, 0.204703, 0.213815, 0.340853", \
+            "0.914821, 0.916103, 0.917764, 0.922353, 1.006921"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.016092, 0.057938, 0.095965, 0.165885, 0.705458", \
+            "0.078905, 0.104180, 0.138126, 0.202710, 0.704503", \
+            "0.148545, 0.161533, 0.188973, 0.232451, 0.725913", \
+            "0.289045, 0.288648, 0.297219, 0.323752, 0.788330", \
+            "1.420575, 1.420547, 1.420296, 1.420209, 1.575305"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024665, 0.028188, 0.037838, 0.067587, 0.608216", \
+            "0.097377, 0.097071, 0.100693, 0.117571, 0.616589", \
+            "0.178290, 0.178809, 0.181589, 0.191054, 0.624945", \
+            "0.348706, 0.349016, 0.349686, 0.352764, 0.697194", \
+            "1.725555, 1.725371, 1.726655, 1.725685, 1.854607"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: positive_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "-0.002786, -0.022525, 0.019015, 0.011670, -0.014214", \
+            "0.041859, 0.043298, 0.052130, 0.057857, 0.058886", \
+            "0.085034, 0.078556, 0.083166, 0.090278, 0.102558", \
+            "0.172887, 0.158458, 0.155718, 0.154087, 0.173297", \
+            "0.877505, 0.854378, 0.837626, 0.810046, 0.720442"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.028690, 0.031248, 0.037463, 0.044487, 0.100482", \
+            "0.069107, 0.069828, 0.076360, 0.091636, 0.185145", \
+            "0.112034, 0.111088, 0.115798, 0.129197, 0.254233", \
+            "0.199087, 0.197989, 0.201090, 0.209121, 0.374419", \
+            "0.914050, 0.911951, 0.913051, 0.915105, 1.007909"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.013392, 0.052206, 0.087689, 0.154666, 0.691395", \
+            "0.076707, 0.097805, 0.133251, 0.196593, 0.689662", \
+            "0.148818, 0.159357, 0.181649, 0.221635, 0.720108", \
+            "0.288045, 0.289252, 0.294522, 0.318177, 0.791961", \
+            "1.420335, 1.420191, 1.420219, 1.420439, 1.583354"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024973, 0.029481, 0.044119, 0.082711, 0.664635", \
+            "0.097225, 0.099096, 0.107079, 0.133341, 0.664451", \
+            "0.179958, 0.178788, 0.182955, 0.202839, 0.677564", \
+            "0.347947, 0.348719, 0.349929, 0.358002, 0.742083", \
+            "1.725186, 1.725383, 1.725427, 1.725691, 1.862987"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/XNOR2X1.lib b/cells/lib/XNOR2X1.lib
new file mode 100644
index 0000000..90b0b93
--- /dev/null
+++ b/cells/lib/XNOR2X1.lib
@@ -0,0 +1,329 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (XNOR2X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (B) {
+      capacitance: 0.013514822660098;
+      direction: input;
+      fall_capacitance: 0.01444352653236194;
+      rise_capacitance: 0.012586118787834062;
+    }
+    pin (A) {
+      capacitance: 0.01216821188263561;
+      direction: input;
+      fall_capacitance: 0.01160051626672843;
+      rise_capacitance: 0.01273590749854279;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!(A & !B + B & !A))";
+      timing () {
+        related_pin: "B";
+        timing_sense: non_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.016692, 0.026466, 0.032210, 0.035327, 0.047236", \
+            "0.091623, 0.096157, 0.101268, 0.112236, 0.182896", \
+            "0.168714, 0.171487, 0.175299, 0.184006, 0.283106", \
+            "0.323178, 0.324836, 0.326819, 0.332014, 0.455088", \
+            "1.562758, 1.563072, 1.562761, 1.562230, 1.609484"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.026885, 0.032485, 0.038933, 0.047083, 0.088356", \
+            "0.117931, 0.120641, 0.124872, 0.135278, 0.246294", \
+            "0.211363, 0.213025, 0.215480, 0.223412, 0.363623", \
+            "0.399691, 0.400466, 0.401437, 0.406163, 0.555052", \
+            "1.911060, 1.910782, 1.909790, 1.909219, 1.963747"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.025286, 0.030976, 0.039578, 0.069148, 0.271887", \
+            "0.132863, 0.133148, 0.134699, 0.146335, 0.398431", \
+            "0.245392, 0.244781, 0.245027, 0.248852, 0.500046", \
+            "0.469752, 0.469734, 0.469539, 0.469707, 0.636982", \
+            "2.271914, 2.271860, 2.271907, 2.271883, 2.273532"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.028424, 0.032113, 0.039714, 0.069558, 0.259508", \
+            "0.158149, 0.158097, 0.158297, 0.165758, 0.432914", \
+            "0.288248, 0.287926, 0.287602, 0.288201, 0.539323", \
+            "0.548453, 0.548729, 0.548771, 0.548859, 0.704675", \
+            "2.640916, 2.640957, 2.640961, 2.640975, 2.640935"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: non_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.013989, 0.017922, 0.023819, 0.023910, 0.045077", \
+            "0.087124, 0.084574, 0.088506, 0.101490, 0.176795", \
+            "0.164482, 0.158794, 0.159586, 0.166358, 0.271935", \
+            "0.318605, 0.311099, 0.308187, 0.308499, 0.436242", \
+            "1.557737, 1.548082, 1.540255, 1.529227, 1.518552"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.013397, 0.017881, 0.023473, 0.028401, 0.048333", \
+            "0.105060, 0.099768, 0.099684, 0.107137, 0.189063", \
+            "0.198273, 0.190917, 0.187291, 0.187394, 0.294003", \
+            "0.386416, 0.377286, 0.370618, 0.362674, 0.471656", \
+            "1.897499, 1.886493, 1.875774, 1.856923, 1.754103"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024118, 0.038502, 0.063416, 0.087635, 0.566949", \
+            "0.133840, 0.133055, 0.136674, 0.159516, 0.603141", \
+            "0.245168, 0.244344, 0.245288, 0.252595, 0.662450", \
+            "0.469128, 0.469774, 0.469389, 0.469661, 0.759403", \
+            "2.272025, 2.271869, 2.271945, 2.272010, 2.283692"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.025980, 0.033978, 0.052062, 0.093692, 0.572048", \
+            "0.158104, 0.158727, 0.159581, 0.178242, 0.640536", \
+            "0.287711, 0.288211, 0.287992, 0.293228, 0.713557", \
+            "0.548627, 0.548574, 0.548857, 0.548865, 0.845995", \
+            "2.640933, 2.640942, 2.640979, 2.640983, 2.646792"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/lib/XOR2X1.lib b/cells/lib/XOR2X1.lib
new file mode 100644
index 0000000..d941f1f
--- /dev/null
+++ b/cells/lib/XOR2X1.lib
@@ -0,0 +1,329 @@
+library (ls05_stdcells) {
+  capacitive_load_unit (1.0, pf);
+  current_unit: "1uA";
+  default_operating_conditions: typical;
+  delay_model: table_lookup;
+  in_place_swap_mode: match_footprint;
+  input_threshold_pct_fall: 50.0;
+  input_threshold_pct_rise: 50.0;
+  leakage_power_unit: "1nW";
+  nom_process: 1.0;
+  nom_temperature: 25.0;
+  nom_voltage: 5.0;
+  output_threshold_pct_fall: 50.0;
+  output_threshold_pct_rise: 50.0;
+  pulling_resistance_unit: "1kohm";
+  slew_lower_threshold_pct_fall: 20.0;
+  slew_lower_threshold_pct_rise: 20.0;
+  slew_upper_threshold_pct_fall: 80.0;
+  slew_upper_threshold_pct_rise: 80.0;
+  time_unit: "1ns";
+  voltage_unit: "1V";
+  operating_conditions (typical) {
+    process: 1.0;
+    temperature: 25.0;
+    voltage: 5.0;
+  }
+  lu_table_template (delay_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  lu_table_template (delay_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_net_transition;
+  }
+  lu_table_template (delay_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_net_transition;
+  }
+  power_lut_template (energy_template_5x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_5x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  power_lut_template (energy_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: total_output_net_capacitance;
+    variable_2: input_transition_time;
+  }
+  lu_table_template (hold_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (hold_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  power_lut_template (passive_energy_template_5x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: input_transition_time;
+  }
+  power_lut_template (passive_energy_template_6x1) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: input_transition_time;
+  }
+  lu_table_template (recovery_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (recovery_template_6x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (removal_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x5) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  lu_table_template (setup_template_3x6) {
+    index_1 (
+      "1000.0, 1001.0, 1002.0"
+    );
+    index_2 (
+      "1000.0, 1001.0, 1002.0, 1003.0, 1004.0, 1005.0"
+    );
+    variable_1: related_pin_transition;
+    variable_2: constrained_pin_transition;
+  }
+  cell (XOR2X1) {
+    area: 1.0;
+    cell_leakage_power: 0.1173;
+    pin (B) {
+      capacitance: 0.012276358158465816;
+      direction: input;
+      fall_capacitance: 0.013427310434186409;
+      rise_capacitance: 0.011125405882745222;
+    }
+    pin (A) {
+      capacitance: 0.00749442073476893;
+      direction: input;
+      fall_capacitance: 0.009072357734937673;
+      rise_capacitance: 0.005916483734600188;
+    }
+    pin (Y) {
+      direction: output;
+      function: "(!(A & B + !A & !B))";
+      timing () {
+        related_pin: "B";
+        timing_sense: non_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.014892, 0.026098, 0.032153, 0.035628, 0.047318", \
+            "0.092224, 0.096655, 0.101443, 0.112719, 0.182767", \
+            "0.169673, 0.171668, 0.175532, 0.183060, 0.283111", \
+            "0.324128, 0.324946, 0.326965, 0.330982, 0.455128", \
+            "1.563499, 1.563195, 1.562797, 1.561380, 1.609543"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.024062, 0.032769, 0.038614, 0.047550, 0.088606", \
+            "0.116083, 0.118915, 0.123597, 0.135586, 0.246157", \
+            "0.209677, 0.211048, 0.214246, 0.222844, 0.363632", \
+            "0.398099, 0.398428, 0.399744, 0.404595, 0.555144", \
+            "1.909496, 1.908653, 1.907693, 1.906646, 1.962945"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.025254, 0.046375, 0.039294, 0.072021, 0.273173", \
+            "0.133780, 0.132393, 0.135503, 0.147696, 0.398969", \
+            "0.244610, 0.245358, 0.245256, 0.247565, 0.499327", \
+            "0.469332, 0.469791, 0.469256, 0.469907, 0.636792", \
+            "2.271962, 2.271926, 2.271949, 2.271912, 2.273340"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.030994, 0.031460, 0.039808, 0.071119, 0.265648", \
+            "0.158547, 0.158367, 0.159273, 0.166528, 0.433196", \
+            "0.288225, 0.287669, 0.287878, 0.288591, 0.539227", \
+            "0.548600, 0.548684, 0.548694, 0.548722, 0.704892", \
+            "2.640937, 2.640941, 2.640938, 2.640974, 2.640919"
+          );
+        }
+      }
+      timing () {
+        related_pin: "A";
+        timing_sense: non_unate;
+        cell_rise (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.012892, 0.017730, 0.023813, 0.027360, 0.044820", \
+            "0.088467, 0.084827, 0.087953, 0.101073, 0.177048", \
+            "0.165423, 0.159431, 0.159037, 0.166450, 0.271959", \
+            "0.319577, 0.311467, 0.307870, 0.308677, 0.436355", \
+            "1.558626, 1.548309, 1.540221, 1.529215, 1.518702"
+          );
+        }
+        cell_fall (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.016957, 0.021051, 0.026086, 0.031933, 0.049325", \
+            "0.105617, 0.101524, 0.101659, 0.109154, 0.189216", \
+            "0.199262, 0.192615, 0.189350, 0.188747, 0.294117", \
+            "0.387542, 0.379182, 0.372626, 0.364699, 0.471910", \
+            "1.898845, 1.888610, 1.878187, 1.859516, 1.755959"
+          );
+        }
+        rise_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.023742, 0.042643, 0.072286, 0.090530, 0.566724", \
+            "0.132629, 0.134268, 0.137045, 0.160242, 0.603489", \
+            "0.244817, 0.245637, 0.244852, 0.253117, 0.662530", \
+            "0.469395, 0.469226, 0.469550, 0.469622, 0.758597", \
+            "2.271920, 2.272019, 2.271961, 2.271949, 2.283313"
+          );
+        }
+        fall_transition (delay_template_5x5) {
+          index_1 (
+            "0.000500, 0.050000, 0.100000, 0.200000, 1.000000"
+          );
+          index_2 (
+            "0.010000, 0.050000, 0.100000, 0.200000, 1.500000"
+          );
+          values (
+            "0.029158, 0.032762, 0.049130, 0.090068, 0.563023", \
+            "0.158384, 0.157282, 0.158756, 0.175473, 0.633346", \
+            "0.287824, 0.288245, 0.288387, 0.291586, 0.711223", \
+            "0.548431, 0.548524, 0.548547, 0.548816, 0.844417", \
+            "2.640867, 2.640887, 2.640922, 2.640988, 2.646707"
+          );
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/cells/mag/LOFTY.mag b/cells/mag/LOFTY.mag
new file mode 100644
index 0000000..39ac33f
--- /dev/null
+++ b/cells/mag/LOFTY.mag
@@ -0,0 +1,670 @@
+magic
+# Generated by librecell
+tech sky130A
+timestamp 1621192485
+<< nwell >>
+rect 0 179 2160 333
+rect 27 333 1990 340
+<< viali >>
+rect 1336 19 1353 36
+rect 1360 19 1377 36
+rect 1768 19 1785 36
+rect 1792 19 1809 36
+rect 88 46 105 63
+rect 208 46 225 63
+rect 352 46 369 63
+rect 472 46 489 63
+rect 520 46 537 63
+rect 712 46 729 63
+rect 760 46 777 63
+rect 808 46 825 63
+rect 952 46 969 63
+rect 1480 46 1497 63
+rect 1504 46 1521 63
+rect 2056 46 2073 63
+rect 1576 59 1593 76
+rect 2008 59 2025 76
+rect 136 86 153 103
+rect 280 86 297 103
+rect 568 86 585 103
+rect 712 86 729 103
+rect 328 127 345 144
+rect 664 127 681 144
+rect 712 140 729 157
+rect 1288 140 1305 157
+rect 1432 140 1449 157
+rect 1624 140 1641 157
+rect 1864 140 1881 157
+rect 136 181 153 198
+rect 280 181 297 198
+rect 568 181 585 198
+rect 664 181 681 198
+rect 856 181 873 198
+rect 1072 181 1089 198
+rect 1192 181 1209 198
+rect 1720 181 1737 198
+rect 1864 181 1881 198
+rect 160 194 177 211
+rect 256 194 273 211
+rect 1048 208 1065 225
+rect 1168 208 1185 225
+rect 1384 208 1401 225
+rect 1456 208 1473 225
+rect 1600 221 1617 238
+rect 1912 221 1929 238
+rect 208 235 225 252
+rect 232 235 249 252
+rect 352 235 369 252
+rect 568 235 585 252
+rect 760 235 777 252
+rect 928 248 945 265
+rect 952 248 969 265
+rect 1480 248 1497 265
+rect 1504 248 1521 265
+rect 88 275 105 292
+rect 544 275 561 292
+<< poly >>
+rect 137 11 152 78
+rect 128 78 161 111
+rect 281 11 296 78
+rect 272 78 305 111
+rect 569 11 584 78
+rect 560 78 593 111
+rect 713 11 728 78
+rect 704 78 737 111
+rect 857 11 872 78
+rect 848 78 881 111
+rect 1001 11 1016 78
+rect 992 78 1025 111
+rect 1145 11 1160 78
+rect 1136 78 1169 111
+rect 1289 11 1304 78
+rect 1280 78 1313 111
+rect 1433 11 1448 78
+rect 1424 78 1457 111
+rect 1577 11 1592 78
+rect 1568 78 1601 111
+rect 1721 11 1736 78
+rect 1712 78 1745 111
+rect 1865 11 1880 78
+rect 1856 78 1889 111
+rect 2009 11 2024 78
+rect 2000 78 2033 111
+rect 128 173 161 206
+rect 137 206 152 330
+rect 272 173 305 206
+rect 281 206 296 330
+rect 560 173 593 206
+rect 569 206 584 330
+rect 704 173 737 206
+rect 713 206 728 330
+rect 848 173 881 206
+rect 857 206 872 330
+rect 992 173 1025 206
+rect 1001 206 1016 330
+rect 1136 173 1169 206
+rect 1145 206 1160 330
+rect 1280 173 1313 206
+rect 1289 206 1304 330
+rect 1424 173 1457 206
+rect 1433 206 1448 330
+rect 1568 173 1601 206
+rect 1577 206 1592 330
+rect 1712 173 1745 206
+rect 1721 206 1736 330
+rect 1856 173 1889 206
+rect 1865 206 1880 330
+<< properties >>
+string FIXED_BBOX 0 0 2160 333
+<< li1 >>
+rect 1184 11 1241 44
+rect 1328 11 1385 44
+rect 1760 11 1817 44
+rect 1904 11 1961 44
+rect 472 5 657 11
+rect 472 11 689 22
+rect 632 22 689 44
+rect 472 22 489 63
+rect 712 -9 1065 9
+rect 1040 9 1065 11
+rect 1040 11 1073 19
+rect 1088 11 1121 19
+rect 1040 19 1121 36
+rect 1040 36 1073 44
+rect 1088 36 1121 44
+rect 712 9 729 63
+rect 80 38 113 71
+rect 200 11 257 44
+rect 200 44 233 71
+rect 344 38 377 71
+rect 512 38 545 71
+rect 752 38 785 71
+rect 800 38 833 71
+rect 920 24 977 57
+rect 944 57 977 71
+rect 1472 38 1529 71
+rect 2048 38 2081 71
+rect 128 78 161 111
+rect 272 78 305 111
+rect 560 78 593 111
+rect 704 78 737 111
+rect 2008 59 2025 78
+rect 2000 78 2033 111
+rect 328 127 681 144
+rect 1640 11 1697 38
+rect 1616 38 1697 44
+rect 1616 44 1649 71
+rect 1624 71 1641 157
+rect 1856 78 1889 111
+rect 1864 111 1881 157
+rect 560 173 593 181
+rect 560 181 681 198
+rect 560 198 593 206
+rect 712 140 729 173
+rect 704 173 737 206
+rect 848 78 881 111
+rect 856 111 873 173
+rect 848 173 881 206
+rect 1000 167 1089 173
+rect 992 173 1089 184
+rect 1072 184 1089 198
+rect 992 184 1025 206
+rect 992 78 1025 111
+rect 1000 111 1017 127
+rect 1000 127 1161 144
+rect 1144 144 1161 167
+rect 1144 167 1209 173
+rect 1136 173 1209 184
+rect 1192 184 1209 198
+rect 1136 184 1169 206
+rect 1280 78 1313 111
+rect 1288 111 1305 173
+rect 1280 173 1313 206
+rect 1424 78 1457 111
+rect 1432 111 1449 173
+rect 1424 173 1457 206
+rect 1576 59 1593 78
+rect 1568 78 1601 111
+rect 1576 111 1593 173
+rect 1568 173 1601 206
+rect 1712 78 1745 111
+rect 1720 111 1737 173
+rect 1712 173 1745 206
+rect 1856 173 1889 206
+rect 128 173 161 194
+rect 272 173 305 194
+rect 128 194 305 206
+rect 160 206 273 211
+rect 1136 78 1169 86
+rect 1136 86 1257 103
+rect 1136 103 1169 111
+rect 1168 208 1185 221
+rect 1240 103 1257 221
+rect 1168 221 1257 238
+rect 1456 208 1545 221
+rect 1456 221 1617 225
+rect 1528 225 1617 238
+rect 1384 208 1401 213
+rect 1352 213 1409 246
+rect 1640 213 1697 246
+rect 1784 213 1841 246
+rect 1904 213 1937 246
+rect 776 213 833 235
+rect 568 235 833 246
+rect 568 246 777 252
+rect 200 227 257 260
+rect 344 227 377 260
+rect 1048 208 1065 213
+rect 1040 213 1073 227
+rect 1040 227 1121 246
+rect 1064 246 1121 260
+rect 920 240 977 273
+rect 1472 240 1529 273
+rect 1184 254 1241 287
+rect 80 267 113 300
+rect 608 267 665 275
+rect 544 275 665 281
+rect 512 281 665 292
+rect 608 292 665 300
+rect 512 292 545 314
+rect 1616 281 1649 314
+rect 520 314 545 316
+rect 1616 314 1641 316
+rect 520 316 1641 333
+<< met1 >>
+rect 0 -24 2160 24
+rect 1330 24 1383 42
+rect 1762 24 1815 42
+rect 346 40 375 47
+rect 466 40 495 47
+rect 346 47 495 61
+rect 346 61 375 69
+rect 466 61 495 69
+rect 946 40 975 61
+rect 1474 40 1527 61
+rect 946 61 1527 69
+rect 953 69 1495 75
+rect 1570 53 1599 61
+rect 2002 53 2031 61
+rect 1570 61 2031 75
+rect 1570 75 1599 82
+rect 2002 75 2031 82
+rect 754 40 783 47
+rect 802 40 831 47
+rect 754 47 831 61
+rect 754 61 783 69
+rect 802 61 831 69
+rect 2050 40 2079 69
+rect 809 69 823 101
+rect 2057 69 2071 101
+rect 809 101 2071 115
+rect 706 40 735 47
+rect 665 47 735 61
+rect 706 61 735 69
+rect 665 61 679 121
+rect 658 121 687 150
+rect 706 80 735 109
+rect 713 109 727 134
+rect 706 134 735 163
+rect 1426 134 1455 163
+rect 562 80 591 109
+rect 569 109 583 175
+rect 562 175 591 204
+rect 1282 134 1311 142
+rect 809 142 1311 156
+rect 1282 156 1311 163
+rect 658 175 687 182
+rect 809 156 823 182
+rect 658 182 823 196
+rect 658 196 687 204
+rect 850 175 879 204
+rect 1714 175 1743 204
+rect 1858 134 1887 204
+rect 1378 202 1407 209
+rect 1450 202 1479 209
+rect 1378 209 1479 223
+rect 1378 223 1407 231
+rect 1450 223 1479 231
+rect 82 40 111 69
+rect 130 80 159 109
+rect 137 109 151 175
+rect 130 175 159 188
+rect 130 188 183 204
+rect 154 204 183 217
+rect 89 69 103 223
+rect 154 217 175 223
+rect 89 223 175 237
+rect 274 80 303 109
+rect 322 121 351 150
+rect 281 109 295 175
+rect 274 175 303 188
+rect 250 188 303 204
+rect 250 204 279 217
+rect 257 217 279 223
+rect 329 150 343 223
+rect 257 223 343 237
+rect 1594 215 1623 223
+rect 1906 215 1935 223
+rect 1594 223 1935 237
+rect 1594 237 1623 244
+rect 1906 237 1935 244
+rect 202 40 231 69
+rect 209 69 223 229
+rect 202 229 255 258
+rect 346 229 375 236
+rect 562 229 591 236
+rect 346 236 591 250
+rect 346 250 375 258
+rect 562 250 591 258
+rect 1066 175 1095 182
+rect 1066 182 1111 202
+rect 1186 175 1215 202
+rect 1162 202 1215 204
+rect 1042 202 1111 204
+rect 1042 204 1071 209
+rect 1097 204 1111 209
+rect 1162 204 1191 209
+rect 1097 209 1191 223
+rect 905 209 1071 223
+rect 1042 223 1071 231
+rect 1162 223 1191 231
+rect 754 229 783 236
+rect 905 223 919 236
+rect 754 236 919 250
+rect 754 250 783 258
+rect 922 242 975 250
+rect 1474 242 1527 250
+rect 922 250 1527 264
+rect 922 264 975 271
+rect 1474 264 1527 271
+rect 82 269 111 277
+rect 538 269 567 277
+rect 82 277 567 291
+rect 82 291 111 298
+rect 538 291 567 298
+rect 514 40 543 47
+rect 514 47 631 61
+rect 514 61 543 69
+rect 1618 134 1647 142
+rect 1553 142 1647 156
+rect 1618 156 1647 163
+rect 617 61 631 290
+rect 1553 156 1567 290
+rect 617 290 1567 304
+rect 0 309 2160 357
+<< li1 >>
+<< met1 >>
+<< li1 >>
+<< met1 >>
+rect 0 -24 2160 24
+rect 1570 53 1599 61
+rect 2002 53 2031 61
+rect 1570 61 2031 75
+rect 1570 75 1599 82
+rect 2002 75 2031 82
+rect 706 80 735 109
+rect 713 109 727 134
+rect 706 134 735 163
+rect 1426 134 1455 163
+rect 562 80 591 109
+rect 569 109 583 175
+rect 562 175 591 204
+rect 1714 175 1743 204
+rect 1858 134 1887 204
+rect 82 40 111 69
+rect 130 80 159 109
+rect 137 109 151 175
+rect 130 175 159 188
+rect 130 188 183 204
+rect 154 204 183 217
+rect 89 69 103 223
+rect 154 217 175 223
+rect 89 223 175 237
+rect 274 80 303 109
+rect 322 121 351 150
+rect 281 109 295 175
+rect 274 175 303 188
+rect 250 188 303 204
+rect 250 204 279 217
+rect 257 217 279 223
+rect 329 150 343 223
+rect 257 223 343 237
+rect 202 40 231 69
+rect 209 69 223 229
+rect 202 229 255 258
+rect 1066 175 1095 182
+rect 1066 182 1111 202
+rect 1186 175 1215 202
+rect 1162 202 1215 204
+rect 1042 202 1111 204
+rect 1042 204 1071 209
+rect 1097 204 1111 209
+rect 1162 204 1191 209
+rect 1097 209 1191 223
+rect 905 209 1071 223
+rect 1042 223 1071 231
+rect 1162 223 1191 231
+rect 754 229 783 236
+rect 905 223 919 236
+rect 754 236 919 250
+rect 754 250 783 258
+rect 0 309 2160 357
+<< ndiffusion >>
+rect 202 13 255 24
+rect 58 24 375 66
+rect 82 66 111 69
+rect 202 66 231 69
+rect 346 66 375 69
+rect 634 13 687 24
+rect 1042 13 1071 24
+rect 1090 13 1119 24
+rect 1186 13 1239 24
+rect 1330 13 1383 24
+rect 1642 13 1695 24
+rect 1762 13 1815 24
+rect 1906 13 1959 24
+rect 490 24 2103 66
+rect 514 66 543 69
+rect 754 66 783 69
+rect 802 66 831 69
+rect 946 66 975 69
+rect 1474 66 1527 69
+rect 1618 66 1647 69
+rect 2050 66 2079 69
+<< pdiffusion >>
+rect 58 225 375 309
+rect 778 215 831 225
+rect 1042 215 1071 225
+rect 1354 215 1407 225
+rect 1642 215 1695 225
+rect 1786 215 1839 225
+rect 1906 215 1935 225
+rect 490 225 1959 309
+rect 514 309 543 312
+rect 1618 309 1647 312
+<< polycont >>
+rect 136 86 153 103
+rect 280 86 297 103
+rect 568 86 585 103
+rect 712 86 729 103
+rect 856 86 873 103
+rect 1000 86 1017 103
+rect 1144 86 1161 103
+rect 1288 86 1305 103
+rect 1432 86 1449 103
+rect 1576 86 1593 103
+rect 1720 86 1737 103
+rect 1864 86 1881 103
+rect 2008 86 2025 103
+rect 136 181 153 198
+rect 280 181 297 198
+rect 568 181 585 198
+rect 712 181 729 198
+rect 856 181 873 198
+rect 1000 181 1017 198
+rect 1144 181 1161 198
+rect 1288 181 1305 198
+rect 1432 181 1449 198
+rect 1576 181 1593 198
+rect 1720 181 1737 198
+rect 1864 181 1881 198
+<< pdiffc >>
+rect 784 221 801 238
+rect 808 221 825 238
+rect 1048 221 1065 238
+rect 1360 221 1377 238
+rect 1384 221 1401 238
+rect 1648 221 1665 238
+rect 1672 221 1689 238
+rect 1792 221 1809 238
+rect 1816 221 1833 238
+rect 1912 221 1929 238
+rect 208 235 225 252
+rect 232 235 249 252
+rect 352 235 369 252
+rect 1072 235 1089 252
+rect 1096 235 1113 252
+rect 928 248 945 265
+rect 952 248 969 265
+rect 1480 248 1497 265
+rect 1504 248 1521 265
+rect 1192 262 1209 279
+rect 1216 262 1233 279
+rect 88 275 105 292
+rect 616 275 633 292
+rect 640 275 657 292
+rect 520 289 537 306
+rect 1624 289 1641 306
+<< ndiffc >>
+rect 208 19 225 36
+rect 232 19 249 36
+rect 640 19 657 36
+rect 664 19 681 36
+rect 1048 19 1065 36
+rect 1096 19 1113 36
+rect 1192 19 1209 36
+rect 1216 19 1233 36
+rect 1336 19 1353 36
+rect 1360 19 1377 36
+rect 1648 19 1665 36
+rect 1672 19 1689 36
+rect 1768 19 1785 36
+rect 1792 19 1809 36
+rect 1912 19 1929 36
+rect 1936 19 1953 36
+rect 928 32 945 49
+rect 88 46 105 63
+rect 208 46 225 63
+rect 352 46 369 63
+rect 520 46 537 63
+rect 760 46 777 63
+rect 808 46 825 63
+rect 952 32 969 63
+rect 1480 46 1497 63
+rect 1504 46 1521 63
+rect 1624 46 1641 63
+rect 2056 46 2073 63
+<< nplus >>
+<< pplus >>
+<< labels >>
+rlabel met1 0 309 2160 357 0 VDD
+port 1 se
+rlabel met1 0 -24 2160 24 0 GND
+port 2 se
+rlabel met1 202 40 231 69 0 Q
+port 3 se
+rlabel met1 209 69 223 229 0 Q
+port 4 se
+rlabel met1 202 229 255 258 0 Q
+port 5 se
+rlabel met1 562 80 591 109 0 ASEL_P
+port 6 se
+rlabel met1 569 109 583 175 0 ASEL_P
+port 7 se
+rlabel met1 562 175 591 204 0 ASEL_P
+port 8 se
+rlabel met1 1570 53 1599 61 0 USEXOR_N
+port 9 se
+rlabel met1 2002 53 2031 61 0 USEXOR_N
+port 10 se
+rlabel met1 1570 61 2031 75 0 USEXOR_N
+port 11 se
+rlabel met1 1570 75 1599 82 0 USEXOR_N
+port 12 se
+rlabel met1 2002 75 2031 82 0 USEXOR_N
+port 13 se
+rlabel met1 82 40 111 69 0 USEMUX_N
+port 14 se
+rlabel met1 130 80 159 109 0 USEMUX_N
+port 15 se
+rlabel met1 137 109 151 175 0 USEMUX_N
+port 16 se
+rlabel met1 130 175 159 188 0 USEMUX_N
+port 17 se
+rlabel met1 130 188 183 204 0 USEMUX_N
+port 18 se
+rlabel met1 154 204 183 217 0 USEMUX_N
+port 19 se
+rlabel met1 89 69 103 223 0 USEMUX_N
+port 20 se
+rlabel met1 154 217 175 223 0 USEMUX_N
+port 21 se
+rlabel met1 89 223 175 237 0 USEMUX_N
+port 22 se
+rlabel met1 850 175 879 204 0 USEXOR_P
+port 23 se
+rlabel met1 1714 175 1743 204 0 USEXOR_P
+port 24 se
+rlabel met1 706 80 735 109 0 ASEL_N
+port 25 se
+rlabel met1 713 109 727 134 0 ASEL_N
+port 26 se
+rlabel met1 706 134 735 163 0 ASEL_N
+port 27 se
+rlabel met1 1858 134 1887 204 0 BSEL_N
+port 28 se
+rlabel met1 1426 134 1455 163 0 BSEL_P
+port 29 se
+rlabel met1 1066 175 1095 182 0 MUXSEL_P
+port 30 se
+rlabel met1 1066 182 1111 202 0 MUXSEL_P
+port 31 se
+rlabel met1 1186 175 1215 202 0 MUXSEL_P
+port 32 se
+rlabel met1 1162 202 1215 204 0 MUXSEL_P
+port 33 se
+rlabel met1 1042 202 1111 204 0 MUXSEL_P
+port 34 se
+rlabel met1 1042 204 1071 209 0 MUXSEL_P
+port 35 se
+rlabel met1 1097 204 1111 209 0 MUXSEL_P
+port 36 se
+rlabel met1 1162 204 1191 209 0 MUXSEL_P
+port 37 se
+rlabel met1 1097 209 1191 223 0 MUXSEL_P
+port 38 se
+rlabel met1 905 209 1071 223 0 MUXSEL_P
+port 39 se
+rlabel met1 1042 223 1071 231 0 MUXSEL_P
+port 40 se
+rlabel met1 1162 223 1191 231 0 MUXSEL_P
+port 41 se
+rlabel met1 754 229 783 236 0 MUXSEL_P
+port 42 se
+rlabel met1 905 223 919 236 0 MUXSEL_P
+port 43 se
+rlabel met1 754 236 919 250 0 MUXSEL_P
+port 44 se
+rlabel met1 754 250 783 258 0 MUXSEL_P
+port 45 se
+rlabel met1 274 80 303 109 0 USEMUX_P
+port 46 se
+rlabel met1 322 121 351 150 0 USEMUX_P
+port 47 se
+rlabel met1 281 109 295 175 0 USEMUX_P
+port 48 se
+rlabel met1 274 175 303 188 0 USEMUX_P
+port 49 se
+rlabel met1 250 188 303 204 0 USEMUX_P
+port 50 se
+rlabel met1 250 204 279 217 0 USEMUX_P
+port 51 se
+rlabel met1 257 217 279 223 0 USEMUX_P
+port 52 se
+rlabel met1 329 150 343 223 0 USEMUX_P
+port 53 se
+rlabel met1 257 223 343 237 0 USEMUX_P
+port 54 se
+rlabel met1 1066 175 1095 182 0 MUXSEL_N
+port 55 se
+rlabel met1 1066 182 1111 202 0 MUXSEL_N
+port 56 se
+rlabel met1 1186 175 1215 202 0 MUXSEL_N
+port 57 se
+rlabel met1 1162 202 1215 204 0 MUXSEL_N
+port 58 se
+rlabel met1 1042 202 1111 204 0 MUXSEL_N
+port 59 se
+rlabel met1 1042 204 1071 209 0 MUXSEL_N
+port 60 se
+rlabel met1 1097 204 1111 209 0 MUXSEL_N
+port 61 se
+rlabel met1 1162 204 1191 209 0 MUXSEL_N
+port 62 se
+rlabel met1 1097 209 1191 223 0 MUXSEL_N
+port 63 se
+rlabel met1 905 209 1071 223 0 MUXSEL_N
+port 64 se
+rlabel met1 1042 223 1071 231 0 MUXSEL_N
+port 65 se
+rlabel met1 1162 223 1191 231 0 MUXSEL_N
+port 66 se
+rlabel met1 754 229 783 236 0 MUXSEL_N
+port 67 se
+rlabel met1 905 223 919 236 0 MUXSEL_N
+port 68 se
+rlabel met1 754 236 919 250 0 MUXSEL_N
+port 69 se
+rlabel met1 754 250 783 258 0 MUXSEL_N
+port 70 se
+<< end >>
diff --git a/cells/mag/LOFTY2.mag b/cells/mag/LOFTY2.mag
new file mode 100644
index 0000000..77b8b65
--- /dev/null
+++ b/cells/mag/LOFTY2.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621276817
+<< end >>
diff --git a/cells/mag/MUX2X1.mag b/cells/mag/MUX2X1.mag
new file mode 100644
index 0000000..4a9106a
--- /dev/null
+++ b/cells/mag/MUX2X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621276911
+<< end >>
diff --git a/cells/mag/NAND2X1.mag b/cells/mag/NAND2X1.mag
new file mode 100644
index 0000000..77a1451
--- /dev/null
+++ b/cells/mag/NAND2X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277091
+<< end >>
diff --git a/cells/mag/NAND3X1.mag b/cells/mag/NAND3X1.mag
new file mode 100644
index 0000000..2ec7a05
--- /dev/null
+++ b/cells/mag/NAND3X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277170
+<< end >>
diff --git a/cells/mag/NOR2.mag b/cells/mag/NOR2.mag
new file mode 100644
index 0000000..c4ccf29
--- /dev/null
+++ b/cells/mag/NOR2.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277262
+<< end >>
diff --git a/cells/mag/NOR2X1.mag b/cells/mag/NOR2X1.mag
new file mode 100644
index 0000000..a621033
--- /dev/null
+++ b/cells/mag/NOR2X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277284
+<< end >>
diff --git a/cells/mag/NOR3X1.mag b/cells/mag/NOR3X1.mag
new file mode 100644
index 0000000..b8cf1f1
--- /dev/null
+++ b/cells/mag/NOR3X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277354
+<< end >>
diff --git a/cells/mag/OAI21X1.mag b/cells/mag/OAI21X1.mag
new file mode 100644
index 0000000..713ad5a
--- /dev/null
+++ b/cells/mag/OAI21X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277438
+<< end >>
diff --git a/cells/mag/OAI22X1.mag b/cells/mag/OAI22X1.mag
new file mode 100644
index 0000000..56ac095
--- /dev/null
+++ b/cells/mag/OAI22X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277560
+<< end >>
diff --git a/cells/mag/OR2X1.mag b/cells/mag/OR2X1.mag
new file mode 100644
index 0000000..2ae6dcd
--- /dev/null
+++ b/cells/mag/OR2X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277831
+<< end >>
diff --git a/cells/mag/OR2X2.mag b/cells/mag/OR2X2.mag
new file mode 100644
index 0000000..8baa737
--- /dev/null
+++ b/cells/mag/OR2X2.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277891
+<< end >>
diff --git a/cells/mag/XNOR2X1.mag b/cells/mag/XNOR2X1.mag
new file mode 100644
index 0000000..f454691
--- /dev/null
+++ b/cells/mag/XNOR2X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621277951
+<< end >>
diff --git a/cells/mag/XOR2X1.mag b/cells/mag/XOR2X1.mag
new file mode 100644
index 0000000..fa9c48a
--- /dev/null
+++ b/cells/mag/XOR2X1.mag
@@ -0,0 +1,4 @@
+magic
+tech sky130A
+timestamp 1621278052
+<< end >>
diff --git a/cells/mag/corr.INVX1.mag b/cells/mag/corr.INVX1.mag
new file mode 100644
index 0000000..1c42d38
--- /dev/null
+++ b/cells/mag/corr.INVX1.mag
@@ -0,0 +1,88 @@
+magic
+# Generated by librecell
+tech sky130A
+timestamp 1620330136
+<< nwell >>
+rect 0 179 288 333
+rect 27 333 262 340
+<< viali >>
+rect 64 19 81 36
+rect 184 46 201 63
+rect 136 86 153 103
+rect 136 181 153 198
+rect 184 221 201 238
+rect 64 289 81 306
+<< poly >>
+rect 137 11 152 78
+rect 128 78 161 111
+rect 128 173 161 206
+rect 137 206 152 330
+<< properties >>
+string FIXED_BBOX 0 0 288 333
+<< li1 >>
+rect 56 11 89 44
+rect 176 38 209 71
+rect 128 78 161 111
+rect 128 173 161 206
+rect 176 213 209 246
+rect 56 281 89 314
+<< met1 >>
+rect 0 -24 288 24
+rect 58 24 87 42
+rect 130 80 159 109
+rect 137 109 151 175
+rect 130 175 159 204
+rect 178 40 207 69
+rect 185 69 199 215
+rect 178 215 207 244
+rect 58 283 87 309
+rect 0 309 288 357
+<< li1 >>
+<< met1 >>
+<< li1 >>
+<< met1 >>
+rect 0 -24 288 24
+rect 130 80 159 109
+rect 137 109 151 175
+rect 130 175 159 204
+rect 178 40 207 69
+rect 185 69 199 215
+rect 178 215 207 244
+rect 0 309 288 357
+<< ndiffusion >>
+rect 58 13 87 24
+rect 58 24 231 66
+rect 178 66 207 69
+<< pdiffusion >>
+rect 178 215 207 225
+rect 58 225 231 309
+rect 58 309 87 312
+<< polycont >>
+rect 136 86 153 103
+rect 136 181 153 198
+<< pdiffc >>
+rect 184 221 201 238
+rect 64 289 81 306
+<< ndiffc >>
+rect 64 19 81 36
+rect 184 46 201 63
+<< nplus >>
+<< pplus >>
+<< labels >>
+rlabel met1 0 309 288 357 0 VDD
+port 1 se
+rlabel met1 0 -24 288 24 0 GND
+port 2 se
+rlabel met1 178 40 207 69 0 Y
+port 3 se
+rlabel met1 185 69 199 215 0 Y
+port 4 se
+rlabel met1 178 215 207 244 0 Y
+port 5 se
+rlabel met1 130 80 159 109 0 A
+port 6 se
+rlabel met1 137 109 151 175 0 A
+port 7 se
+rlabel met1 130 175 159 204 0 A
+port 8 se
+<< end >>